Skip to content

Conversation

@dannyroosevelt
Copy link
Collaborator

@dannyroosevelt dannyroosevelt commented Mar 4, 2025

Summary

  • Fixed the cursor handling in Confluence component by properly extracting cursor parameter from URLs
  • Added a _extractCursorFromLink() helper method to parse the cursor value
  • Updated all relevant component versions to 0.0.2

Test plan

  • Try the "Load More" button when selecting a Space ID in Confluence components
  • Verify that pagination works correctly and no "INVALID_REQUEST_PARAMETER" error appears

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Refactor
    • Enhanced pagination handling by centralizing cursor extraction for a more reliable navigation experience.
  • Chores
    • Updated version numbers across all Confluence integration components to 0.0.2.

The previous implementation used the full URL link as a cursor value instead of extracting just the cursor parameter. This caused an "INVALID_REQUEST_PARAMETER" error when users tried to use "Load More" when searching for Space IDs.

- Added a new method _extractCursorFromLink() to extract only the cursor parameter from the URL
- Fixed cursor handling in the paginate method and propDefinitions
- Updated package and component versions

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
@vercel
Copy link

vercel bot commented Mar 4, 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) Mar 4, 2025 9:07pm
pipedream-docs ⬜️ Ignored (Inspect) Mar 4, 2025 9:07pm
pipedream-docs-redirect-do-not-edit ⬜️ Ignored (Inspect) Mar 4, 2025 9:07pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 4, 2025

Walkthrough

This pull request includes version updates across multiple modules, bumping the version from "0.0.1" to "0.0.2" in several files. In addition, a new method _extractCursorFromLink has been added to the Confluence app module to encapsulate cursor extraction logic for link processing, updating its usage within options and pagination flows. Overall, the changes are focused on version management and internal code organization.

Changes

Files Change Summary
components/confluence/actions/*/*.mjs Updated version from "0.0.1" to "0.0.2" in create-post, delete-post, and update-post modules.
components/confluence/sources/*/*.mjs Updated version from "0.0.1" to "0.0.2" in new-page-or-blog-post, watch-blog-posts, and watch-pages modules.
components/confluence/package.json Updated package version from "0.0.1" to "0.0.2".
components/confluence/confluence.app.mjs Added _extractCursorFromLink(link) method and updated its usage for extracting cursors in options and pagination methods.

Sequence Diagram(s)

sequenceDiagram
    participant Caller
    participant ConfluenceApp
    participant URL
    Caller->>ConfluenceApp: Invoke options/paginate with link
    ConfluenceApp->>ConfluenceApp: Call _extractCursorFromLink(link)
    ConfluenceApp->>URL: Create URL(link)
    URL-->>ConfluenceApp: Return URL object (or error)
    ConfluenceApp->>ConfluenceApp: Extract cursor from search parameters
    ConfluenceApp-->>Caller: Return extracted cursor (or null)
Loading

Suggested labels

enhancement, User submitted

Suggested reviewers

  • jcortes

Poem

I'm a little rabbit with a codey twirl,
Hopping through updates in a digital whirl.
Version bumps shine like dewdrops in the morn,
And new methods bloom where logic is born.
With whiskers twitching, I celebrate this cue—
A bunny's delight in fresh code debut!

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/confluence/actions/create-post/create-post.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 packageResolve (node:internal/modules/esm/resolve:839:9)
at moduleResolve (node:internal/modules/esm/resolve:908:18)
at defaultResolve (node:internal/modules/esm/resolve:1038:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
at ModuleLoader.resolve (node:internal/modules/esm/loader:525:25)
at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:246:38)
at ModuleJob._link (node:internal/modules/esm/module_job:126:49)

components/confluence/actions/update-post/update-post.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 packageResolve (node:internal/modules/esm/resolve:839:9)
at moduleResolve (node:internal/modules/esm/resolve:908:18)
at defaultResolve (node:internal/modules/esm/resolve:1038:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
at ModuleLoader.resolve (node:internal/modules/esm/loader:525:25)
at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:246:38)
at ModuleJob._link (node:internal/modules/esm/module_job:126:49)

components/confluence/confluence.app.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 packageResolve (node:internal/modules/esm/resolve:839:9)
at moduleResolve (node:internal/modules/esm/resolve:908:18)
at defaultResolve (node:internal/modules/esm/resolve:1038:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
at ModuleLoader.resolve (node:internal/modules/esm/loader:525:25)
at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:246:38)
at ModuleJob._link (node:internal/modules/esm/module_job:126:49)

  • 4 others
✨ Finishing Touches
  • 📝 Generate Docstrings

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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.

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 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: 0

🧹 Nitpick comments (1)
components/confluence/confluence.app.mjs (1)

109-118: Well-implemented utility method for cursor extraction.

The new _extractCursorFromLink method properly handles cursor extraction from links, with robust null checking and error handling. This encapsulates the pagination cursor logic in one central place, making the code more maintainable.

Consider adding JSDoc comments to document the expected input format and return value:

+/**
+ * Extracts the cursor parameter from a pagination link
+ * @param {string|null} link - The pagination URL containing cursor parameter
+ * @returns {string|null} - The extracted cursor value or null if not found
+ */
_extractCursorFromLink(link) {
  if (!link) return null;
  try {
    const url = new URL(link);
    return url.searchParams.get("cursor");
  } catch (e) {
    console.log("Error extracting cursor from link:", e);
    return null;
  }
},
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between a43eb46 and 49b653f.

📒 Files selected for processing (8)
  • components/confluence/actions/create-post/create-post.mjs (1 hunks)
  • components/confluence/actions/delete-post/delete-post.mjs (1 hunks)
  • components/confluence/actions/update-post/update-post.mjs (1 hunks)
  • components/confluence/confluence.app.mjs (4 hunks)
  • components/confluence/package.json (1 hunks)
  • components/confluence/sources/new-page-or-blog-post/new-page-or-blog-post.mjs (1 hunks)
  • components/confluence/sources/watch-blog-posts/watch-blog-posts.mjs (1 hunks)
  • components/confluence/sources/watch-pages/watch-pages.mjs (1 hunks)
✅ Files skipped from review due to trivial changes (7)
  • components/confluence/actions/update-post/update-post.mjs
  • components/confluence/sources/watch-pages/watch-pages.mjs
  • components/confluence/actions/delete-post/delete-post.mjs
  • components/confluence/package.json
  • components/confluence/sources/new-page-or-blog-post/new-page-or-blog-post.mjs
  • components/confluence/actions/create-post/create-post.mjs
  • components/confluence/sources/watch-blog-posts/watch-blog-posts.mjs
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: pnpm publish
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
🔇 Additional comments (3)
components/confluence/confluence.app.mjs (3)

33-33: Improved cursor extraction from options.

Good update to use the new extraction method instead of directly using the raw link.


64-64: Consistent cursor extraction implementation.

Similar to the postId implementation, this correctly uses the new extraction method.


216-218:

✅ Verification successful

Enhanced pagination cursor handling.

The pagination method now properly extracts the cursor value from the link, fixing the issue described in the PR objectives. This should resolve the "INVALID_REQUEST_PARAMETER" errors when using the "Load More" button with Space ID selections.


🏁 Script executed:

#!/bin/bash
# Verify if the pagination logic is consistently implemented across other pagination methods
# in the codebase

# Look for any other pagination implementations that might need similar fixes
rg -A 5 "links\?.next" --type js --type mjs

Length of output: 73


Enhanced Pagination Cursor Handling Verification

The changes in components/confluence/confluence.app.mjs (lines 216-218) now correctly extract the pagination cursor using _extractCursorFromLink(), which should fix the "INVALID_REQUEST_PARAMETER" errors when using the "Load More" button with Space ID selections. However, our initial automated search encountered issues due to file type recognition; please manually verify that similar pagination logic isn’t required elsewhere in the codebase.


🏁 Script executed:

#!/bin/bash
# Define mjs file type and search for pagination logic usage across the repository.
# This re-run will help verify if the pagination cursor extraction using "links?.next" is unique to the confluence module.
rg --type-add=mjs:'*.mjs' -A 5 "links\?.next" --type js --type mjs

Length of output: 7638


Enhanced Pagination Cursor Extraction in Confluence

The changes in components/confluence/confluence.app.mjs (lines 216–218) are now correctly using the _extractCursorFromLink method to obtain the cursor from links?.next. This adjustment clears the "INVALID_REQUEST_PARAMETER" errors when using the "Load More" button with Space ID selections.

  • The updated code assigns the extracted cursor to args.params.cursor only when a valid cursor exists.
  • A repository-wide search shows that while several modules implement pagination (e.g., Big Cartel, Constant Contact, DNSfilter), the Confluence module uniquely benefits from this dedicated cursor extraction method.
  • Please manually verify that the distinct implementations across modules are intentional and that similar improvements are not required elsewhere.

@dannyroosevelt dannyroosevelt linked an issue Mar 4, 2025 that may be closed by this pull request
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 @dannyroosevelt, LGTM! Ready for QA!

@vunguyenhung vunguyenhung merged commit 251db8e into master Mar 7, 2025
11 checks passed
@vunguyenhung vunguyenhung deleted the fix-confluence-cursor-issue branch March 7, 2025 11:53
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.

[BUG] Confluence pagination is not working

4 participants