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, and pagination.
    • Dynamic dropdowns for collections, categories, articles, and sites in the UI.
  • Chores

    • Bumped component version and added platform dependency.
  • Style

    • Minor formatting fixes (trailing newlines).

✏️ 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 8, 2025 3:50pm
pipedream-docs-redirect-do-not-edit Ignored Ignored Dec 8, 2025 3:50pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 5, 2025

Walkthrough

Adds three Help Scout article actions (get, list, search), implements a Help Scout app HTTP client with API methods and dynamic propDefinitions for UI option loading, and updates package 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, returns articles and exports a summary.
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 with async option loaders.
Package Metadata
components/help_scout_api_keys/package.json
Bumps version 0.0.10.1.0 and adds dependency "@pipedream/platform": "^3.1.1".
Trailing newline fixes
components/fashn/fashn.app.mjs, components/jobsoid_careers_portal/jobsoid_careers_portal.app.mjs
Added trailing newline; no behavioral changes.

Sequence Diagram(s)

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 GET /v1/...
    API-->>HTTP: JSON response
    HTTP-->>App: parsed response
    App-->>Action: return data
    Note over Action: Action exports $summary and returns response data
Loading

Estimated code review effort

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

  • Inspect API request construction and parameter encoding in help_scout_api_keys.app.mjs.
  • Verify async option loaders and prop dependency handling (collectionId → categoryId/articleId/article list).
  • Check conditional logic in list-articles.mjs (category vs collection) and summary pluralization/returns in actions.
  • Confirm package.json dependency/version bump is intended.

Suggested reviewers

  • luancazarine

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Description check ❓ Inconclusive The description references the resolved issue but lacks details about changes; it only includes 'Resolves #19178' without explaining the implementation. Consider expanding the description to briefly outline the implemented actions (get-article, list-articles, search-articles) and any key implementation details.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main changes: implementing new Helpscout API Key components for article operations.
Linked Issues check ✅ Passed All three required article endpoints from issue #19178 are implemented: get-article, list-articles (for both collections and categories), and search-articles actions with proper API integration.
Out of Scope Changes check ✅ Passed Minor trailing newline formatting changes in fashn and jobsoid files are incidental; all substantial changes align with implementing Helpscout article actions from issue #19178.
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

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 68435ef and 4cb6881.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (2)
  • components/fashn/fashn.app.mjs (1 hunks)
  • components/jobsoid_careers_portal/jobsoid_careers_portal.app.mjs (1 hunks)
⏰ 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: pnpm publish
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Lint Code Base
🔇 Additional comments (1)
components/jobsoid_careers_portal/jobsoid_careers_portal.app.mjs (1)

11-11: Formatting change approved.

The addition of a trailing newline is a cosmetic formatting improvement with no functional impact.

Note: This change appears to be incidental and unrelated to the PR's primary objectives (Help Scout articles actions). If this was an intentional formatting standardization across multiple files, that's fine; otherwise, it may be worth confirming whether it should be included in this PR or handled separately.


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.

jcortes
jcortes previously approved these changes Dec 5, 2025
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

@michelle0927
Copy link
Collaborator Author

/approve

@michelle0927 michelle0927 merged commit e061bd2 into master Dec 8, 2025
10 checks passed
@michelle0927 michelle0927 deleted the issue-19178 branch December 8, 2025 16:08
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