Skip to content

New Components - freshdesk #17764

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

Merged
merged 9 commits into from
Jul 28, 2025
Merged

New Components - freshdesk #17764

merged 9 commits into from
Jul 28, 2025

Conversation

michelle0927
Copy link
Collaborator

@michelle0927 michelle0927 commented Jul 23, 2025

Resolves #17427

Summary by CodeRabbit

  • New Features

    • Added actions to create, update, and list Freshdesk agents, contacts, ticket fields, solution articles, and categories.
    • Introduced actions to delete solution articles and update ticket fields.
    • Added actions for listing agents, category folders, folder articles, solution categories, and ticket fields.
    • Introduced sources to emit events for new/updated contacts and tickets using centralized polling logic.
  • Improvements

    • Enhanced Freshdesk integration with new property definitions and support for paginated API responses.
    • Centralized polling logic for event sources, simplifying future maintenance.
  • Bug Fixes

    • Updated version numbers for multiple existing actions for improved tracking and reliability.
  • Chores

    • Updated package version to 0.4.0.

Copy link

vercel bot commented Jul 23, 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) Visit Preview Jul 25, 2025 4:05pm
pipedream-docs ⬜️ Ignored (Inspect) Jul 25, 2025 4:05pm
pipedream-docs-redirect-do-not-edit ⬜️ Ignored (Inspect) Jul 25, 2025 4:05pm

Copy link
Contributor

coderabbitai bot commented Jul 23, 2025

Walkthrough

This update introduces a major expansion of the Freshdesk integration, adding new actions for creating, updating, and listing various Freshdesk resources (agents, contacts, ticket fields, solution articles, etc.), new event sources for polling resource changes, and a shared polling framework. It also refactors existing sources to use this common polling logic and enhances the app module with dynamic prop definitions and paginated API utilities. Several version bumps and constant additions are included.

Changes

Files/Paths Change Summary
components/freshdesk/actions/add-note-to-ticket.mjs,
add-ticket-tags.mjs,
assign-ticket-to-agent.mjs,
assign-ticket-to-group.mjs,
close-ticket.mjs,
create-company.mjs,
create-contact.mjs,
create-ticket.mjs,
get-ticket.mjs,
list-all-tickets.mjs,
remove-ticket-tags.mjs,
set-ticket-priority.mjs,
set-ticket-status.mjs,
set-ticket-tags.mjs,
update-ticket.mjs
Only version number incremented in metadata; no functional changes.
components/freshdesk/actions/create-agent.mjs New action: Create Agent with comprehensive input props and API call.
components/freshdesk/actions/create-solution-article.mjs New action: Create Solution Article with category, folder, SEO, and tag support.
components/freshdesk/actions/create-ticket-field.mjs New action: Create Ticket Field with validation and complex field support.
components/freshdesk/actions/delete-solution-article.mjs New action: Delete Solution Article by article ID.
components/freshdesk/actions/get-contact.mjs New action: Get Contact by contact ID.
components/freshdesk/actions/get-solution-article.mjs New action: Get Solution Article by hierarchical selection.
components/freshdesk/actions/list-agents.mjs New action: List Agents with filtering and pagination.
components/freshdesk/actions/list-category-folders.mjs New action: List Category Folders by category ID.
components/freshdesk/actions/list-folder-articles.mjs New action: List Folder Articles with pagination.
components/freshdesk/actions/list-solution-categories.mjs New action: List Solution Categories.
components/freshdesk/actions/list-ticket-fields.mjs New action: List Ticket Fields with pagination.
components/freshdesk/actions/update-agent.mjs New action: Update Agent with multiple optional fields.
components/freshdesk/actions/update-contact.mjs New action: Update Contact by ID with optional fields.
components/freshdesk/actions/update-solution-article.mjs New action: Update Solution Article with SEO and tag support.
components/freshdesk/actions/update-ticket-field.mjs New action: Update Ticket Field with complex field support.
components/freshdesk/common/constants.mjs Added constant arrays: TICKET_SCOPE, AGENT_TYPE, ARTICLE_STATUS.
components/freshdesk/common/utils.mjs Added utility: parseObject for robust JSON/object parsing.
components/freshdesk/freshdesk.app.mjs Major: Added dynamic prop definitions, CRUD methods for contacts, agents, ticket fields, solution articles, categories, etc.; introduced async pagination utilities.
components/freshdesk/package.json Version bump: 0.3.10.4.0.
components/freshdesk/sources/common/polling.mjs New: Shared polling logic for Freshdesk sources, with timestamp-based deduplication and event emission.
components/freshdesk/sources/contact-updated/contact-updated.mjs New source: emits events when a contact is updated, using common polling.
components/freshdesk/sources/new-contact/new-contact.mjs Refactor: Now uses shared polling module; removed custom logic, added resource-specific overrides.
components/freshdesk/sources/new-ticket/new-ticket.mjs Refactor: Now uses shared polling module; removed custom logic, added resource-specific overrides.
components/freshdesk/sources/ticket-updated/ticket-updated.mjs New source: emits events when a ticket is updated, using common polling.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Action
    participant FreshdeskApp
    participant FreshdeskAPI

    User->>Action: Provide input (e.g., create agent/article)
    Action->>FreshdeskApp: Call relevant method with input
    FreshdeskApp->>FreshdeskAPI: Make HTTP request (CRUD)
    FreshdeskAPI-->>FreshdeskApp: Return API response
    FreshdeskApp-->>Action: Return processed result
    Action-->>User: Output summary and data
Loading
sequenceDiagram
    participant Source
    participant CommonPolling
    participant FreshdeskApp
    participant FreshdeskAPI
    participant DB

    loop On timer
        CommonPolling->>DB: Get last checked timestamp
        CommonPolling->>FreshdeskApp: Call resourceFn({ updated_since: lastChecked })
        FreshdeskApp->>FreshdeskAPI: Fetch paginated resources
        FreshdeskAPI-->>FreshdeskApp: Return resource list
        FreshdeskApp-->>CommonPolling: Return items
        CommonPolling->>Source: Emit events for new/updated items
        CommonPolling->>DB: Update last checked timestamp
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • PipedreamHQ/pipedream#16450: Adds new Freshdesk ticket actions; related as both PRs expand Freshdesk action coverage and may overlap in action implementations.

Suggested labels

User submitted

Poem

A Freshdesk leap, a hop, a bound,
New actions and sources all around!
Agents, tickets, contacts—oh my!
Polling logic soaring high.
With constants, props, and parsing neat,
This rabbit’s work is quite a feat!
🐇✨

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/freshdesk/actions/create-ticket-field/create-ticket-field.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)

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 64f28e1 and e22b5f9.

📒 Files selected for processing (1)
  • components/freshdesk/actions/create-ticket-field/create-ticket-field.mjs (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • components/freshdesk/actions/create-ticket-field/create-ticket-field.mjs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Ensure component commits modify component versions
  • GitHub Check: Verify TypeScript components
  • GitHub Check: pnpm publish
  • GitHub Check: Lint Code Base
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch issue-17427

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 generate unit tests to generate unit tests for 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.

@michelle0927 michelle0927 marked this pull request as ready for review July 23, 2025 21:39
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: 8

🧹 Nitpick comments (13)
components/freshdesk/common/utils.mjs (1)

25-49: Consider adding JSDoc documentation for the utility function.

The function would benefit from documentation explaining its purpose, parameters, and behavior, especially regarding JSON parsing fallback.

+/**
+ * Recursively parses an object, attempting to JSON.parse string values
+ * @param {any} obj - The object to parse
+ * @returns {any} The parsed object with JSON strings converted to objects/arrays
+ */
 const parseObject = (obj) => {
components/freshdesk/actions/list-all-tickets/list-all-tickets.mjs (1)

8-8: Version bump looks correct – double-check changelog entry

No functional code touched. Ensure you’ve added a matching entry in the package / integration changelog so the reason for 0.2.5 is captured for users.

components/freshdesk/actions/set-ticket-priority/set-ticket-priority.mjs (1)

7-7: Ticket-priority action bumped to 0.0.4

LGTM. Consider scripting these uniform bumps in the future to avoid manual miss-alignments.

components/freshdesk/actions/get-solution-article/get-solution-article.mjs (1)

36-43: Consider enhancing the summary message

The current summary message only includes the article ID. Consider including the article title or other descriptive information from the response to make it more informative.

-    $.export("$summary", `Successfully retrieved solution article ${this.articleId}`);
+    $.export("$summary", `Successfully retrieved solution article "${response.title || response.id}"`);
components/freshdesk/actions/get-contact/get-contact.mjs (1)

23-24: Add a safe-fallback in the summary

contact.name can be empty/undefined (e.g. API returns only an email).
Consider falling back to contact.id to avoid undefined appearing in the UI.

-$.export("$summary", `Successfully fetched contact: ${contact.name}`);
+$.export(
+  "$summary",
+  `Successfully fetched contact: ${contact.name || contact.id}`,
+);
components/freshdesk/actions/update-ticket-field/update-ticket-field.mjs (2)

43-45: Minor doc typo

"fieldPosition""field position" for readability.


66-83: Consider loosening input types for JSON fields

choices, dependentFields, and sectionMappings are declared as string[], but users often paste raw JSON strings.
Declaring them as simple string (or object once supported) avoids UI friction and still works with parseObject.

components/freshdesk/sources/ticket-updated/ticket-updated.mjs (1)

19-25: Consider enriching the event summary

If the ticket subject is available in the item payload, appending it to the summary (e.g. Ticket “${item.subject}” updated (ID: ${item.id})) makes the event feed far more readable when many tickets are involved.

components/freshdesk/sources/new-ticket/new-ticket.mjs (1)

19-24: Use the ticket subject in the summary for readability

Same remark as for the Ticket Updated source – including item.subject (if present) helps users quickly identify the ticket without having to open it.

components/freshdesk/sources/common/polling.mjs (3)

39-43: Date string trimming is brittle

lastDateChecked.substr(0, (lastDateChecked + "T").indexOf("T")) relies on the first “T” and falls apart if the stored value ever lacks the time part.
A safer and clearer way is:

-const formatedDate = lastDateChecked.substr(
-  0,
-  (lastDateChecked + "T").indexOf("T"),
-);
+const formattedDate = new Date(lastDateChecked)
+  .toISOString()
+  .split("T")[0];   // YYYY-MM-DD

51-59: Heavy Moment.js usage is unnecessary

The only need is a simple “is after” comparison. Native Date does this without ~170 kB of Moment payload:

-if (moment(item[tsField]).isAfter(lastDateChecked)) {
-  if (moment(item[tsField]).isAfter(maxTs)) {
-    maxTs = item[tsField];
-  }
+const itemTs = Date.parse(item[tsField]);
+if (itemTs > Date.parse(lastDateChecked)) {
+  if (itemTs > Date.parse(maxTs)) {
+    maxTs = item[tsField];
+  }

This reduces bundle size and cold-start latency.


28-50: Stream results instead of materialising the full array

data.push(result) followed by data.reverse() means you store the entire result set twice.
You can emit as you iterate (and maintain maxTs on the fly) to cut memory and CPU in half, especially on large accounts.

components/freshdesk/freshdesk.app.mjs (1)

310-323: Rename loop variable for clarity

Inside filterContacts you iterate with for (const ticket of response.results), but you are yielding contacts. Rename to avoid future confusion when debugging.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4a2b1bc and 21cc714.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (39)
  • components/freshdesk/actions/add-note-to-ticket/add-note-to-ticket.mjs (1 hunks)
  • components/freshdesk/actions/add-ticket-tags/add-ticket-tags.mjs (1 hunks)
  • components/freshdesk/actions/assign-ticket-to-agent/assign-ticket-to-agent.mjs (1 hunks)
  • components/freshdesk/actions/assign-ticket-to-group/assign-ticket-to-group.mjs (1 hunks)
  • components/freshdesk/actions/close-ticket/close-ticket.mjs (1 hunks)
  • components/freshdesk/actions/create-agent/create-agent.mjs (1 hunks)
  • components/freshdesk/actions/create-company/create-company.mjs (1 hunks)
  • components/freshdesk/actions/create-contact/create-contact.mjs (1 hunks)
  • components/freshdesk/actions/create-solution-article/create-solution-article.mjs (1 hunks)
  • components/freshdesk/actions/create-ticket-field/create-ticket-field.mjs (1 hunks)
  • components/freshdesk/actions/create-ticket/create-ticket.mjs (1 hunks)
  • components/freshdesk/actions/delete-solution-article/delete-solution-article.mjs (1 hunks)
  • components/freshdesk/actions/get-contact/get-contact.mjs (1 hunks)
  • components/freshdesk/actions/get-solution-article/get-solution-article.mjs (1 hunks)
  • components/freshdesk/actions/get-ticket/get-ticket.mjs (1 hunks)
  • components/freshdesk/actions/list-agents/list-agents.mjs (1 hunks)
  • components/freshdesk/actions/list-all-tickets/list-all-tickets.mjs (1 hunks)
  • components/freshdesk/actions/list-category-folders/list-category-folders.mjs (1 hunks)
  • components/freshdesk/actions/list-folder-articles/list-folder-articles.mjs (1 hunks)
  • components/freshdesk/actions/list-solution-categories/list-solution-categories.mjs (1 hunks)
  • components/freshdesk/actions/list-ticket-fields/list-ticket-fields.mjs (1 hunks)
  • components/freshdesk/actions/remove-ticket-tags/remove-ticket-tags.mjs (1 hunks)
  • components/freshdesk/actions/set-ticket-priority/set-ticket-priority.mjs (1 hunks)
  • components/freshdesk/actions/set-ticket-status/set-ticket-status.mjs (1 hunks)
  • components/freshdesk/actions/set-ticket-tags/set-ticket-tags.mjs (1 hunks)
  • components/freshdesk/actions/update-agent/update-agent.mjs (1 hunks)
  • components/freshdesk/actions/update-contact/update-contact.mjs (1 hunks)
  • components/freshdesk/actions/update-solution-article/update-solution-article.mjs (1 hunks)
  • components/freshdesk/actions/update-ticket-field/update-ticket-field.mjs (1 hunks)
  • components/freshdesk/actions/update-ticket/update-ticket.mjs (1 hunks)
  • components/freshdesk/common/constants.mjs (1 hunks)
  • components/freshdesk/common/utils.mjs (1 hunks)
  • components/freshdesk/freshdesk.app.mjs (5 hunks)
  • components/freshdesk/package.json (1 hunks)
  • components/freshdesk/sources/common/polling.mjs (1 hunks)
  • components/freshdesk/sources/contact-updated/contact-updated.mjs (1 hunks)
  • components/freshdesk/sources/new-contact/new-contact.mjs (1 hunks)
  • components/freshdesk/sources/new-ticket/new-ticket.mjs (1 hunks)
  • components/freshdesk/sources/ticket-updated/ticket-updated.mjs (1 hunks)
🧰 Additional context used
🧠 Learnings (21)
components/freshdesk/actions/create-contact/create-contact.mjs (1)

Learnt from: jcortes
PR: #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/freshdesk/package.json (1)

Learnt from: jcortes
PR: #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/freshdesk/actions/create-ticket/create-ticket.mjs (1)

Learnt from: jcortes
PR: #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/freshdesk/actions/list-agents/list-agents.mjs (4)

Learnt from: GTFalcao
PR: #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: GTFalcao
PR: #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: jcortes
PR: #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".

Learnt from: GTFalcao
PR: #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.

components/freshdesk/actions/create-ticket-field/create-ticket-field.mjs (1)

Learnt from: jcortes
PR: #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/freshdesk/actions/create-agent/create-agent.mjs (3)

Learnt from: jcortes
PR: #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".

Learnt from: GTFalcao
PR: #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: GTFalcao
PR: #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.

components/freshdesk/actions/create-company/create-company.mjs (1)

Learnt from: jcortes
PR: #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/freshdesk/actions/list-solution-categories/list-solution-categories.mjs (2)

Learnt from: GTFalcao
PR: #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: GTFalcao
PR: #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.

components/freshdesk/actions/list-ticket-fields/list-ticket-fields.mjs (2)

Learnt from: GTFalcao
PR: #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: #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/freshdesk/actions/create-solution-article/create-solution-article.mjs (2)

Learnt from: GTFalcao
PR: #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: #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/freshdesk/sources/contact-updated/contact-updated.mjs (4)

Learnt from: GTFalcao
PR: #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: #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: #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.

Learnt from: GTFalcao
PR: #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.

components/freshdesk/actions/get-solution-article/get-solution-article.mjs (2)

Learnt from: GTFalcao
PR: #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: #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/freshdesk/sources/ticket-updated/ticket-updated.mjs (5)

Learnt from: GTFalcao
PR: #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: #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: #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.

Learnt from: GTFalcao
PR: #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.

Learnt from: GTFalcao
PR: #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.

components/freshdesk/actions/update-contact/update-contact.mjs (1)

Learnt from: jcortes
PR: #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/freshdesk/sources/common/polling.mjs (2)

Learnt from: GTFalcao
PR: #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.

Learnt from: GTFalcao
PR: #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.

components/freshdesk/actions/list-category-folders/list-category-folders.mjs (2)

Learnt from: GTFalcao
PR: #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: #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/freshdesk/sources/new-contact/new-contact.mjs (5)

Learnt from: GTFalcao
PR: #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: #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.

Learnt from: GTFalcao
PR: #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: #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.

Learnt from: GTFalcao
PR: #17538
File: components/aircall/sources/new-sms/new-sms.mjs:19-25
Timestamp: 2025-07-09T18:07:12.426Z
Learning: In Aircall API webhook payloads, the created_at field is returned as an ISO 8601 string format (e.g., "2020-02-18T20:52:22.000Z"), not as milliseconds since epoch. For Pipedream components, this needs to be converted to milliseconds using Date.parse() before assigning to the ts field in generateMeta().

components/freshdesk/sources/new-ticket/new-ticket.mjs (5)

Learnt from: GTFalcao
PR: #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: #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.

Learnt from: GTFalcao
PR: #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.

Learnt from: GTFalcao
PR: #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: #17538
File: components/aircall/sources/new-sms/new-sms.mjs:19-25
Timestamp: 2025-07-09T18:07:12.426Z
Learning: In Aircall API webhook payloads, the created_at field is returned as an ISO 8601 string format (e.g., "2020-02-18T20:52:22.000Z"), not as milliseconds since epoch. For Pipedream components, this needs to be converted to milliseconds using Date.parse() before assigning to the ts field in generateMeta().

components/freshdesk/actions/update-agent/update-agent.mjs (2)

Learnt from: GTFalcao
PR: #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: GTFalcao
PR: #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.

components/freshdesk/actions/list-folder-articles/list-folder-articles.mjs (2)

Learnt from: GTFalcao
PR: #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: #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/freshdesk/freshdesk.app.mjs (3)

Learnt from: GTFalcao
PR: #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: LucBerge
PR: #14080
File: components/nocodb/nocodb.app.mjs:133-133
Timestamp: 2024-10-08T15:33:38.240Z
Learning: When implementing pagination with an offset, incrementing args.params.offset within the loop ensures correct tracking of the offset, particularly when a maximum count limit (max) is used.

Learnt from: LucBerge
PR: #14080
File: components/nocodb/nocodb.app.mjs:133-133
Timestamp: 2024-09-25T16:13:11.505Z
Learning: When implementing pagination with an offset, incrementing args.params.offset within the loop ensures correct tracking of the offset, particularly when a maximum count limit (max) is used.

🧬 Code Graph Analysis (13)
components/freshdesk/actions/list-agents/list-agents.mjs (3)
components/freshdesk/actions/list-folder-articles/list-folder-articles.mjs (1)
  • results (34-41)
components/freshdesk/actions/list-ticket-fields/list-ticket-fields.mjs (1)
  • results (19-25)
components/freshdesk/freshdesk.app.mjs (2)
  • results (651-651)
  • results (666-666)
components/freshdesk/actions/update-solution-article/update-solution-article.mjs (3)
components/freshdesk/actions/create-solution-article/create-solution-article.mjs (1)
  • response (58-68)
components/freshdesk/freshdesk.app.mjs (5)
  • response (13-13)
  • response (27-31)
  • response (45-51)
  • response (293-295)
  • response (313-315)
components/freshdesk/common/utils.mjs (1)
  • parseObject (25-49)
components/freshdesk/actions/create-agent/create-agent.mjs (2)
components/freshdesk/actions/update-agent/update-agent.mjs (1)
  • response (92-108)
components/freshdesk/freshdesk.app.mjs (5)
  • response (13-13)
  • response (27-31)
  • response (45-51)
  • response (293-295)
  • response (313-315)
components/freshdesk/actions/list-ticket-fields/list-ticket-fields.mjs (3)
components/freshdesk/actions/list-agents/list-agents.mjs (1)
  • results (47-59)
components/freshdesk/actions/list-folder-articles/list-folder-articles.mjs (1)
  • results (34-41)
components/freshdesk/freshdesk.app.mjs (2)
  • results (651-651)
  • results (666-666)
components/freshdesk/actions/create-solution-article/create-solution-article.mjs (4)
components/freshdesk/actions/list-solution-categories/list-solution-categories.mjs (1)
  • response (13-15)
components/freshdesk/actions/list-category-folders/list-category-folders.mjs (1)
  • response (19-22)
components/freshdesk/actions/update-solution-article/update-solution-article.mjs (1)
  • response (70-80)
components/freshdesk/common/utils.mjs (1)
  • parseObject (25-49)
components/freshdesk/actions/get-solution-article/get-solution-article.mjs (4)
components/freshdesk/actions/delete-solution-article/delete-solution-article.mjs (1)
  • response (37-40)
components/freshdesk/actions/list-solution-categories/list-solution-categories.mjs (1)
  • response (13-15)
components/freshdesk/actions/list-category-folders/list-category-folders.mjs (1)
  • response (19-22)
components/freshdesk/freshdesk.app.mjs (5)
  • response (13-13)
  • response (27-31)
  • response (45-51)
  • response (293-295)
  • response (313-315)
components/freshdesk/actions/update-contact/update-contact.mjs (3)
components/freshdesk/actions/create-agent/create-agent.mjs (1)
  • response (84-99)
components/freshdesk/actions/update-agent/update-agent.mjs (1)
  • response (92-108)
components/freshdesk/freshdesk.app.mjs (5)
  • response (13-13)
  • response (27-31)
  • response (45-51)
  • response (293-295)
  • response (313-315)
components/freshdesk/sources/common/polling.mjs (4)
components/freshdesk/actions/list-agents/list-agents.mjs (1)
  • results (47-59)
components/freshdesk/actions/list-folder-articles/list-folder-articles.mjs (1)
  • results (34-41)
components/freshdesk/actions/list-ticket-fields/list-ticket-fields.mjs (1)
  • results (19-25)
components/freshdesk/freshdesk.app.mjs (2)
  • results (651-651)
  • results (666-666)
components/freshdesk/actions/list-category-folders/list-category-folders.mjs (2)
components/freshdesk/actions/list-solution-categories/list-solution-categories.mjs (1)
  • response (13-15)
components/freshdesk/freshdesk.app.mjs (5)
  • response (13-13)
  • response (27-31)
  • response (45-51)
  • response (293-295)
  • response (313-315)
components/freshdesk/actions/delete-solution-article/delete-solution-article.mjs (6)
components/freshdesk/actions/create-solution-article/create-solution-article.mjs (1)
  • response (58-68)
components/freshdesk/actions/get-solution-article/get-solution-article.mjs (1)
  • response (37-40)
components/freshdesk/actions/list-solution-categories/list-solution-categories.mjs (1)
  • response (13-15)
components/freshdesk/actions/list-category-folders/list-category-folders.mjs (1)
  • response (19-22)
components/freshdesk/actions/update-solution-article/update-solution-article.mjs (1)
  • response (70-80)
components/freshdesk/freshdesk.app.mjs (5)
  • response (13-13)
  • response (27-31)
  • response (45-51)
  • response (293-295)
  • response (313-315)
components/freshdesk/actions/update-agent/update-agent.mjs (3)
components/freshdesk/actions/create-agent/create-agent.mjs (1)
  • response (84-99)
components/freshdesk/actions/update-contact/update-contact.mjs (1)
  • response (50-60)
components/freshdesk/freshdesk.app.mjs (5)
  • response (13-13)
  • response (27-31)
  • response (45-51)
  • response (293-295)
  • response (313-315)
components/freshdesk/actions/update-ticket-field/update-ticket-field.mjs (3)
components/freshdesk/actions/create-ticket-field/create-ticket-field.mjs (1)
  • response (90-106)
components/freshdesk/freshdesk.app.mjs (5)
  • response (13-13)
  • response (27-31)
  • response (45-51)
  • response (293-295)
  • response (313-315)
components/freshdesk/common/utils.mjs (1)
  • parseObject (25-49)
components/freshdesk/actions/list-folder-articles/list-folder-articles.mjs (3)
components/freshdesk/actions/list-agents/list-agents.mjs (1)
  • results (47-59)
components/freshdesk/actions/list-ticket-fields/list-ticket-fields.mjs (1)
  • results (19-25)
components/freshdesk/freshdesk.app.mjs (2)
  • results (651-651)
  • results (666-666)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Lint Code Base
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Publish TypeScript components
🔇 Additional comments (32)
components/freshdesk/actions/set-ticket-status/set-ticket-status.mjs (1)

7-7: Version bump looks good.

The coordinated version increment aligns with the broader Freshdesk integration updates in this PR.

components/freshdesk/package.json (1)

3-3: Appropriate version bump for new features.

The minor version increment from 0.3.1 to 0.4.0 correctly reflects the addition of new actions, sources, and utilities described in the PR summary.

components/freshdesk/actions/add-note-to-ticket/add-note-to-ticket.mjs (1)

8-8: Version bump aligns with coordinated release.

The version increment is consistent with other Freshdesk action updates in this PR.

components/freshdesk/actions/remove-ticket-tags/remove-ticket-tags.mjs (1)

9-9: Version increment is consistent with PR scope.

The version bump aligns with the coordinated updates across multiple Freshdesk action modules in this release.

components/freshdesk/actions/create-contact/create-contact.mjs (1)

8-8: Minor version increment acknowledged

0.0.7 is fine. Confirm that other components depending on this action’s version (docs, tests, examples) don’t hard-code the previous number.

components/freshdesk/actions/create-ticket/create-ticket.mjs (1)

7-7: Create-ticket action version updated

Looks good. Keep an eye on semantic-version alignment with any API surface changes once the new contact / pagination utilities ship.

components/freshdesk/actions/create-company/create-company.mjs (1)

7-7: Version bump to 0.0.7 acknowledged

No further feedback.

components/freshdesk/actions/close-ticket/close-ticket.mjs (1)

7-7: Version bump looks good

The metadata update from 0.0.3 to 0.0.4 keeps the action in sync with the rest of the Freshdesk package releases. No other changes detected.

components/freshdesk/actions/get-ticket/get-ticket.mjs (1)

7-7: Minor version increment acknowledged

0.1.40.1.5 is consistent with the coordinated bumps across sibling actions. Nothing else to flag.

components/freshdesk/actions/add-ticket-tags/add-ticket-tags.mjs (1)

9-9: Metadata update approved

The shift to 0.0.3 aligns with the other tag-related components. Implementation remains unchanged.

components/freshdesk/actions/update-ticket/update-ticket.mjs (1)

8-8: Patch-level bump verified

Updating to 0.0.4 without logic changes is appropriate; no further action required.

components/freshdesk/actions/set-ticket-tags/set-ticket-tags.mjs (1)

9-9: Version sync confirmed

Incrementing to 0.0.3 keeps this action in step with the rest of the release set.

components/freshdesk/actions/assign-ticket-to-agent/assign-ticket-to-agent.mjs (1)

7-7: LGTM - Coordinated version update

The version increment from "0.0.3" to "0.0.4" is consistent with the broader Freshdesk integration updates in this PR.

components/freshdesk/actions/assign-ticket-to-group/assign-ticket-to-group.mjs (1)

7-7: LGTM - Coordinated version update

The version increment from "0.0.3" to "0.0.4" aligns with the coordinated release approach across Freshdesk actions in this PR.

components/freshdesk/actions/list-agents/list-agents.mjs (1)

1-66: LGTM - Well-structured implementation following established patterns

This new action properly implements the agent listing functionality with:

  • Consistent use of getPaginatedResources pattern matching other Freshdesk actions
  • Appropriate filter parameters for common agent queries
  • Properly formatted summary message following best practices
  • Clean prop definitions with helpful descriptions

The implementation aligns well with the broader Freshdesk integration enhancements.

components/freshdesk/actions/get-solution-article/get-solution-article.mjs (1)

9-34: LGTM - Proper prop dependency structure

The cascading prop dependencies (categoryId → folderId → articleId) correctly implement the hierarchical relationship of Freshdesk solution articles, enabling proper UI selection flow.

components/freshdesk/sources/contact-updated/contact-updated.mjs (1)

1-28: LGTM - Proper polling source implementation

This source correctly implements the contact update polling pattern with:

  • Appropriate extension of the common polling module
  • Correct source naming (no "New" prefix for update events, following component guidelines)
  • Proper API method usage (filterContacts) for polling
  • Well-structured metadata generation with unique IDs combining contact ID and timestamp
  • Appropriate timestamp field selection (updated_at)

The implementation follows established patterns and best practices for Freshdesk polling sources.

components/freshdesk/common/constants.mjs (1)

40-77: LGTM! Well-structured constant definitions.

The new constant arrays follow the established pattern and provide clear, logical enumeration values for ticket scope, agent types, and article status. The structure is consistent with existing constants in the file.

components/freshdesk/actions/create-agent/create-agent.mjs (1)

1-103: LGTM! Well-implemented agent creation action.

The action follows best practices with:

  • Proper naming convention
  • Comprehensive prop definitions with appropriate types and descriptions
  • Correct usage of constants and prop definitions from the app
  • Proper transformation from camelCase props to snake_case API fields
  • Well-formatted summary message following established patterns
components/freshdesk/actions/update-solution-article/update-solution-article.mjs (1)

1-84: Well-structured action with proper hierarchical dependencies.

The action correctly implements:

  • Hierarchical prop dependencies for category → folder → article navigation
  • Proper use of parseObject utility for SEO data handling
  • Appropriate use of constants for article status options
  • Correct API call pattern
components/freshdesk/actions/update-contact/update-contact.mjs (1)

1-64: LGTM! Clean and well-implemented contact update action.

The action follows established patterns with:

  • Proper prop definitions using app-level propDefinitions
  • Correct field mapping from camelCase to snake_case for API
  • Appropriate optional field handling
  • Well-formatted summary message using response data
components/freshdesk/actions/create-solution-article/create-solution-article.mjs (1)

1-72: LGTM! Well-implemented article creation action.

The action follows best practices with:

  • Proper hierarchical prop dependencies (category → folder)
  • Consistent use of parseObject utility for SEO data handling
  • Appropriate required vs optional field designation
  • Correct API call pattern matching other actions
  • Well-formatted summary message using required title field
components/freshdesk/actions/update-agent/update-agent.mjs (1)

1-113: LGTM - Well-structured agent update action.

The action follows consistent patterns with other Freshdesk actions and properly maps camelCase properties to snake_case API fields. The prop definitions are correctly referenced from the app module.

components/freshdesk/actions/list-category-folders/list-category-folders.mjs (1)

1-29: LGTM - Clean and consistent implementation.

The action follows the established patterns for Freshdesk list actions. The summary message correctly handles pluralization as recommended in the retrieved learnings, and the prop definition usage is appropriate.

components/freshdesk/actions/create-ticket-field/create-ticket-field.mjs (2)

86-88: Good validation logic for dropdown fields.

The validation ensuring choices are provided for custom_dropdown fields is appropriate and prevents runtime errors.


102-104: Proper use of parseObject utility.

The use of parseObject for parsing JSON string arrays is correct and handles the complex data structures appropriately.

components/freshdesk/actions/delete-solution-article/delete-solution-article.mjs (2)

17-34: Excellent use of dependent prop definitions.

The hierarchical dependency structure (categoryId → folderId → articleId) is well-implemented, providing a good user experience by dynamically filtering options based on previous selections.


36-44: Clean and focused implementation.

The action is appropriately focused on its single responsibility of deleting an article. The summary message correctly uses the articleId for identification.

components/freshdesk/actions/list-solution-categories/list-solution-categories.mjs (1)

1-22: LGTM - Exemplary simple listing action.

This action demonstrates clean, minimal implementation following established patterns. The summary message correctly handles pluralization as recommended in the retrieved learnings, and the overall structure is consistent with other Freshdesk listing actions.

components/freshdesk/actions/list-ticket-fields/list-ticket-fields.mjs (1)

18-30: Looks good – clean implementation

Pagination, props, and summary formatting all follow the established pattern for Freshdesk actions. No changes needed.

components/freshdesk/actions/list-folder-articles/list-folder-articles.mjs (1)

34-45: Implementation approved

Uses shared pagination helper and dynamic props correctly; summary pluralization handled.

components/freshdesk/sources/new-contact/new-contact.mjs (1)

19-24: Source looks solid

Uses shared polling correctly and converts ISO date to ms with Date.parse.

lcaresia
lcaresia previously approved these changes Jul 24, 2025
@michelle0927
Copy link
Collaborator Author

/approve

@michelle0927 michelle0927 merged commit 550d464 into master Jul 28, 2025
11 checks passed
@michelle0927 michelle0927 deleted the issue-17427 branch July 28, 2025 15:52
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.

Freshdesk
4 participants