From 49b653f461bb4a9c2565c255aef00a47b84de725 Mon Sep 17 00:00:00 2001 From: Danny Roosevelt Date: Tue, 4 Mar 2025 13:06:50 -0800 Subject: [PATCH] Fix Confluence cursor handling for pagination MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../actions/create-post/create-post.mjs | 2 +- .../actions/delete-post/delete-post.mjs | 2 +- .../actions/update-post/update-post.mjs | 2 +- components/confluence/confluence.app.mjs | 19 +++++++++++++++---- components/confluence/package.json | 2 +- .../new-page-or-blog-post.mjs | 2 +- .../watch-blog-posts/watch-blog-posts.mjs | 2 +- .../sources/watch-pages/watch-pages.mjs | 2 +- 8 files changed, 22 insertions(+), 11 deletions(-) diff --git a/components/confluence/actions/create-post/create-post.mjs b/components/confluence/actions/create-post/create-post.mjs index 6491a01a3a43e..38da79e9db2e3 100644 --- a/components/confluence/actions/create-post/create-post.mjs +++ b/components/confluence/actions/create-post/create-post.mjs @@ -4,7 +4,7 @@ export default { key: "confluence-create-post", name: "Create Post", description: "Creates a new page or blog post on Confluence. [See the documentation](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-blog-post/#api-blogposts-post)", - version: "0.0.1", + version: "0.0.2", type: "action", props: { confluence, diff --git a/components/confluence/actions/delete-post/delete-post.mjs b/components/confluence/actions/delete-post/delete-post.mjs index 7457a32c7a78a..1b15a277645db 100644 --- a/components/confluence/actions/delete-post/delete-post.mjs +++ b/components/confluence/actions/delete-post/delete-post.mjs @@ -4,7 +4,7 @@ export default { key: "confluence-delete-post", name: "Delete Post", description: "Removes a blog post from Confluence by its ID. Use with caution, the action is irreversible. [See the documentation](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-blog-post/#api-blogposts-id-delete)", - version: "0.0.1", + version: "0.0.2", type: "action", props: { confluence, diff --git a/components/confluence/actions/update-post/update-post.mjs b/components/confluence/actions/update-post/update-post.mjs index c5755b252a331..c453f390f4081 100644 --- a/components/confluence/actions/update-post/update-post.mjs +++ b/components/confluence/actions/update-post/update-post.mjs @@ -5,7 +5,7 @@ export default { key: "confluence-update-post", name: "Update a Post", description: "Updates a page or blog post on Confluence by its ID. [See the documentation](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-blog-post/#api-blogposts-id-put)", - version: "0.0.1", + version: "0.0.2", type: "action", props: { confluence, diff --git a/components/confluence/confluence.app.mjs b/components/confluence/confluence.app.mjs index 1078c411a700a..0f1fea9d27031 100644 --- a/components/confluence/confluence.app.mjs +++ b/components/confluence/confluence.app.mjs @@ -30,7 +30,7 @@ export default { return { options, context: { - cursor: links?.next, + cursor: this._extractCursorFromLink(links?.next), }, }; }, @@ -61,7 +61,7 @@ export default { return { options, context: { - cursor: links?.next, + cursor: this._extractCursorFromLink(links?.next), }, }; }, @@ -106,6 +106,16 @@ export default { ...otherOpts, }); }, + _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; + } + }, async getCloudId(opts = {}) { const response = await this._makeRequest({ url: "https://api.atlassian.com/oauth/token/accessible-resources", @@ -203,8 +213,9 @@ export default { return; } } - hasMore = links?.next; - args.params.cursor = hasMore; + const cursor = this._extractCursorFromLink(links?.next); + hasMore = cursor; + args.params.cursor = cursor; } while (hasMore); }, }, diff --git a/components/confluence/package.json b/components/confluence/package.json index e9f023fb9c80b..9b4f1e4418f3a 100644 --- a/components/confluence/package.json +++ b/components/confluence/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/confluence", - "version": "0.0.1", + "version": "0.0.2", "description": "Pipedream Confluence Components", "main": "confluence.app.mjs", "keywords": [ diff --git a/components/confluence/sources/new-page-or-blog-post/new-page-or-blog-post.mjs b/components/confluence/sources/new-page-or-blog-post/new-page-or-blog-post.mjs index 19e56518235ce..786cd8e755bdc 100644 --- a/components/confluence/sources/new-page-or-blog-post/new-page-or-blog-post.mjs +++ b/components/confluence/sources/new-page-or-blog-post/new-page-or-blog-post.mjs @@ -6,7 +6,7 @@ export default { key: "confluence-new-page-or-blog-post", name: "New Page or Blog Post", description: "Emit new event whenever a new page or blog post is created in a specified space", - version: "0.0.1", + version: "0.0.2", type: "source", dedupe: "unique", props: { diff --git a/components/confluence/sources/watch-blog-posts/watch-blog-posts.mjs b/components/confluence/sources/watch-blog-posts/watch-blog-posts.mjs index e8266cd88c688..0b548e33572ef 100644 --- a/components/confluence/sources/watch-blog-posts/watch-blog-posts.mjs +++ b/components/confluence/sources/watch-blog-posts/watch-blog-posts.mjs @@ -6,7 +6,7 @@ export default { key: "confluence-watch-blog-posts", name: "Watch Blog Posts", description: "Emit new event when a blog post is created or updated", - version: "0.0.1", + version: "0.0.2", type: "source", dedupe: "unique", methods: { diff --git a/components/confluence/sources/watch-pages/watch-pages.mjs b/components/confluence/sources/watch-pages/watch-pages.mjs index 5b60e9d932645..b500939d87f51 100644 --- a/components/confluence/sources/watch-pages/watch-pages.mjs +++ b/components/confluence/sources/watch-pages/watch-pages.mjs @@ -6,7 +6,7 @@ export default { key: "confluence-watch-pages", name: "Watch Pages", description: "Emit new event when a page is created or updated in Confluence", - version: "0.0.1", + version: "0.0.2", type: "source", dedupe: "unique", methods: {