Skip to content

Conversation

@michelle0927
Copy link
Collaborator

@michelle0927 michelle0927 commented Dec 5, 2025

Resolves #19178

Summary by CodeRabbit

  • New Features

    • Search Help Scout articles by keyword and filters.
    • Retrieve a single Help Scout article by ID.
    • List articles by collection or category with status, sort, pagination.
    • Dynamic dropdowns for collections, categories, articles, and sites in the UI.
  • Chores

    • Bumped component version and added platform dependency.

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link

vercel bot commented Dec 5, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

2 Skipped Deployments
Project Deployment Preview Comments Updated (UTC)
pipedream-docs Ignored Ignored Dec 5, 2025 5:13pm
pipedream-docs-redirect-do-not-edit Ignored Ignored Dec 5, 2025 5:13pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 5, 2025

Walkthrough

Adds three Help Scout article actions (get, list, search), expands the Help Scout app with a full HTTP client and propDefinitions for dynamic UI options, and updates package metadata/version and dependencies.

Changes

Cohort / File(s) Summary
Help Scout Article Actions
components/help_scout_api_keys/actions/get-article/get-article.mjs, components/help_scout_api_keys/actions/list-articles/list-articles.mjs, components/help_scout_api_keys/actions/search-articles/search-articles.mjs
New action modules exporting action objects (metadata, props, run). get-article fetches a single article by ID; list-articles lists articles by collection or category with pagination and params; search-articles searches articles by query and filters, returning article lists and summary messages.
Help Scout App Client & PropDefinitions
components/help_scout_api_keys/help_scout_api_keys.app.mjs
Replaces placeholder auth with an internal HTTP client (_baseUrl, _makeRequest using axios), implements API methods (getArticle, listCollections, listCategories, listSites, listArticlesByCollection, listArticlesByCategory, searchArticles) and adds propDefinitions for collectionId, categoryId, articleId, siteId, page, and status (dynamic option loaders).
Package Metadata
components/help_scout_api_keys/package.json
Bumps version 0.0.1 → 0.1.0 and adds dependency "@pipedream/platform": "^3.1.1".

Sequence Diagram(s)

mermaid
sequenceDiagram
participant Action as Action (get/list/search)
participant App as HelpScout App (propDefs + client)
participant HTTP as _makeRequest / axios
participant API as Help Scout Docs API

Action->>App: call helpscout.<method>(params, $)
App->>HTTP: build request (path, params, auth)
HTTP->>API: HTTP request (GET /v1/...)
API-->>HTTP: HTTP response (JSON)
HTTP-->>App: return parsed response
App-->>Action: return data
Note over Action: Action exports $summary and returns response data

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20–25 minutes

  • Review API endpoint construction and parameter encoding in help_scout_api_keys.app.mjs methods.
  • Validate propDefinitions' async option loaders for correct dependency handling (collectionId → categoryId/articleId).
  • Verify conditional logic in list-articles.mjs (category vs collection) and summary pluralization in actions.

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Description check ❓ Inconclusive The description is minimal but references the resolved issue (#19178). However, it lacks detailed explanation of what was implemented or why. Add details about which actions were implemented (list, get, search) and briefly explain the purpose or benefits of these changes.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: adding new Help Scout article-related action components to the Help Scout API keys integration.
Linked Issues check ✅ Passed The PR implements all three required endpoints: list articles, get article, and search articles with proper API integration and params.
Out of Scope Changes check ✅ Passed All changes align with the linked issue requirements. The package.json version bump and dependencies addition are appropriate supporting changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch issue-19178

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@michelle0927 michelle0927 marked this pull request as ready for review December 5, 2025 16:58
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: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 85caf1b and 7ae56da.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (5)
  • components/help_scout_api_keys/actions/get-article/get-article.mjs (1 hunks)
  • components/help_scout_api_keys/actions/list-articles/list-articles.mjs (1 hunks)
  • components/help_scout_api_keys/actions/search-articles/search-articles.mjs (1 hunks)
  • components/help_scout_api_keys/help_scout_api_keys.app.mjs (1 hunks)
  • components/help_scout_api_keys/package.json (2 hunks)
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2024-07-04T18:11:59.822Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream 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`.

Applied to files:

  • components/help_scout_api_keys/actions/list-articles/list-articles.mjs
📚 Learning: 2024-12-12T19:23:09.039Z
Learnt from: jcortes
Repo: PipedreamHQ/pipedream 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.

Applied to files:

  • components/help_scout_api_keys/package.json
📚 Learning: 2025-06-04T17:52:05.780Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream 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.

Applied to files:

  • components/help_scout_api_keys/help_scout_api_keys.app.mjs
📚 Learning: 2025-09-15T22:01:11.472Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 18362
File: components/leonardo_ai/actions/generate-image/generate-image.mjs:103-105
Timestamp: 2025-09-15T22:01:11.472Z
Learning: In Pipedream components, pipedream/platform's axios implementation automatically excludes undefined values from HTTP requests, so there's no need to manually check for truthiness before including properties in request payloads.

Applied to files:

  • components/help_scout_api_keys/help_scout_api_keys.app.mjs
🧬 Code graph analysis (4)
components/help_scout_api_keys/actions/get-article/get-article.mjs (2)
components/help_scout_api_keys/actions/list-articles/list-articles.mjs (1)
  • response (85-95)
components/help_scout_api_keys/actions/search-articles/search-articles.mjs (1)
  • response (60-70)
components/help_scout_api_keys/actions/list-articles/list-articles.mjs (3)
components/help_scout_api_keys/help_scout_api_keys.app.mjs (1)
  • params (59-61)
components/help_scout_api_keys/actions/get-article/get-article.mjs (1)
  • response (46-49)
components/help_scout_api_keys/actions/search-articles/search-articles.mjs (1)
  • response (60-70)
components/help_scout_api_keys/actions/search-articles/search-articles.mjs (2)
components/help_scout_api_keys/actions/get-article/get-article.mjs (1)
  • response (46-49)
components/help_scout_api_keys/actions/list-articles/list-articles.mjs (1)
  • response (85-95)
components/help_scout_api_keys/help_scout_api_keys.app.mjs (1)
components/help_scout_api_keys/actions/list-articles/list-articles.mjs (1)
  • params (78-84)
⏰ 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). (4)
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
  • GitHub Check: pnpm publish
  • GitHub Check: Lint Code Base
🔇 Additional comments (5)
components/help_scout_api_keys/actions/get-article/get-article.mjs (1)

1-52: Get Article action wiring and props look solid

Props cleanly reuse the app’s dynamic collectionId, categoryId, and articleId definitions, and run() correctly delegates to this.helpscout.getArticle and exports a concise summary. I don’t see any functional issues here.

components/help_scout_api_keys/help_scout_api_keys.app.mjs (2)

7-79: Dynamic collection/category/article/page/status props are well-structured

The dynamic collectionId, categoryId, and articleId options correctly page through the relevant list endpoints and map { id, name } to { value, label }, and the page and status propDefinitions centralize pagination and status handling nicely. This is a clean, reusable setup for the article-related actions.


118-181: HTTP helper and endpoint methods are consistent and idiomatic

Centralizing the base URL, auth, and axios call in _makeRequest and layering getArticle, listCollections, listCategories, listSites, listArticlesByCollection, listArticlesByCategory, and searchArticles on top keeps the actions thin and readable. The paths and auth pattern match the current Docs API, and the optional $ argument makes these methods usable from both actions and prop option loaders without extra boilerplate.

components/help_scout_api_keys/package.json (1)

3-17: Package version and platform dependency are correctly configured

The 0.1.0 version and @pipedream/platform dependency at ^3.1.1 align with the axios import in app.mjs (line 1) and its usage throughout the component's methods.

components/help_scout_api_keys/actions/list-articles/list-articles.mjs (1)

1-100: List Articles action matches the Docs API parameters and response shape

The props cover the expected filters (collection/category, status, sort, order, page, pageSize) and the params object aligns with the List Articles endpoint contract, including the documented max pageSize of 100.

Routing to listArticlesByCategory vs listArticlesByCollection based on categoryId and summarizing via response.articles.items.length matches the published response structure. The action correctly implements the Help Scout Docs API contract and is ready.

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

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7ae56da and 68435ef.

📒 Files selected for processing (1)
  • components/help_scout_api_keys/actions/search-articles/search-articles.mjs (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2024-07-04T18:11:59.822Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream 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`.

Applied to files:

  • components/help_scout_api_keys/actions/search-articles/search-articles.mjs
🧬 Code graph analysis (1)
components/help_scout_api_keys/actions/search-articles/search-articles.mjs (2)
components/help_scout_api_keys/actions/get-article/get-article.mjs (1)
  • response (46-49)
components/help_scout_api_keys/actions/list-articles/list-articles.mjs (1)
  • response (85-95)
⏰ 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). (4)
  • GitHub Check: Lint Code Base
  • GitHub Check: pnpm publish
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
🔇 Additional comments (2)
components/help_scout_api_keys/actions/search-articles/search-articles.mjs (2)

3-13: Action metadata and annotations look consistent and correct

Key, name, description, version, and annotations align with existing Pipedream patterns and the Help Scout articles search use case.


14-57: Props cleanly mirror Help Scout search parameters

Props are well‑structured: query is required, and collectionId, siteId, status, visibility, and page correctly map to the API’s query params using shared helpscout propDefinitions where available.

Copy link
Collaborator

@jcortes jcortes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @michelle0927 lgtm! Ready for QA!

@vunguyenhung
Copy link
Collaborator

Hi everyone, all test cases are passed! Ready for release!

Test reports

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.

[ACTION] Helpscout - Articles

4 participants