From aa3854d4c9ed7e39c329e5e9105461394f1a945f Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Mon, 8 Sep 2025 14:44:42 -0400 Subject: [PATCH 1/2] new components --- .../actions/get-page-by-id/get-page-by-id.mjs | 30 +++++ .../get-pages-in-space/get-pages-in-space.mjs | 83 ++++++++++++++ .../actions/get-pages/get-pages.mjs | 76 +++++++++++++ components/confluence/confluence.app.mjs | 105 ++++++++++++++++++ components/confluence/package.json | 2 +- 5 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 components/confluence/actions/get-page-by-id/get-page-by-id.mjs create mode 100644 components/confluence/actions/get-pages-in-space/get-pages-in-space.mjs create mode 100644 components/confluence/actions/get-pages/get-pages.mjs diff --git a/components/confluence/actions/get-page-by-id/get-page-by-id.mjs b/components/confluence/actions/get-page-by-id/get-page-by-id.mjs new file mode 100644 index 0000000000000..65006ad236fc4 --- /dev/null +++ b/components/confluence/actions/get-page-by-id/get-page-by-id.mjs @@ -0,0 +1,30 @@ +import confluence from "../../confluence.app.mjs"; + +export default { + key: "confluence-get-page-by-id", + name: "Get Page by ID", + description: "Retrieve a page by its ID. [See the documentation](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-page/#api-pages-id-get)", + version: "0.0.1", + type: "action", + props: { + confluence, + pageId: { + propDefinition: [ + confluence, + "pageId", + ], + }, + }, + async run({ $ }) { + const cloudId = await this.confluence.getCloudId({ + $, + }); + const response = await this.confluence.getPageById({ + $, + cloudId, + pageId: this.pageId, + }); + $.export("$summary", `Successfully retrieved page with ID: ${this.pageId}`); + return response; + }, +}; diff --git a/components/confluence/actions/get-pages-in-space/get-pages-in-space.mjs b/components/confluence/actions/get-pages-in-space/get-pages-in-space.mjs new file mode 100644 index 0000000000000..e5e3db1c200e0 --- /dev/null +++ b/components/confluence/actions/get-pages-in-space/get-pages-in-space.mjs @@ -0,0 +1,83 @@ +import confluence from "../../confluence.app.mjs"; + +export default { + key: "confluence-get-pages-in-space", + name: "Get Pages in Space", + description: "Retrieve a list of pages in a space. [See the documentation](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-page/#api-spaces-id-pages-get)", + version: "0.0.1", + type: "action", + props: { + confluence, + spaceId: { + propDefinition: [ + confluence, + "spaceId", + ], + }, + sort: { + propDefinition: [ + confluence, + "pageSort", + ], + }, + status: { + propDefinition: [ + confluence, + "pageStatus", + ], + }, + pageTitle: { + propDefinition: [ + confluence, + "pageTitle", + ], + }, + bodyFormat: { + propDefinition: [ + confluence, + "bodyFormat", + ], + }, + subType: { + propDefinition: [ + confluence, + "subType", + ], + }, + cursor: { + propDefinition: [ + confluence, + "cursor", + ], + }, + limit: { + propDefinition: [ + confluence, + "limit", + ], + }, + }, + async run({ $ }) { + const cloudId = await this.confluence.getCloudId({ + $, + }); + const response = await this.confluence.listPagesInSpace({ + $, + cloudId, + spaceId: this.spaceId, + params: { + sort: this.sort, + status: this.status, + title: this.pageTitle, + bodyFormat: this.bodyFormat, + subType: this.subType, + cursor: this.cursor, + limit: this.limit, + }, + }); + $.export("$summary", `Successfully retrieved ${response.results.length} page${response.results.length === 1 + ? "" + : "s"}`); + return response; + }, +}; diff --git a/components/confluence/actions/get-pages/get-pages.mjs b/components/confluence/actions/get-pages/get-pages.mjs new file mode 100644 index 0000000000000..d42853626b94b --- /dev/null +++ b/components/confluence/actions/get-pages/get-pages.mjs @@ -0,0 +1,76 @@ +import confluence from "../../confluence.app.mjs"; + +export default { + key: "confluence-get-pages", + name: "Get Pages", + description: "Retrieve a list of pages. [See the documentation](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-page/#api-pages-get)", + version: "0.0.1", + type: "action", + props: { + confluence, + sort: { + propDefinition: [ + confluence, + "pageSort", + ], + }, + status: { + propDefinition: [ + confluence, + "pageStatus", + ], + }, + pageTitle: { + propDefinition: [ + confluence, + "pageTitle", + ], + }, + bodyFormat: { + propDefinition: [ + confluence, + "bodyFormat", + ], + }, + subType: { + propDefinition: [ + confluence, + "subType", + ], + }, + cursor: { + propDefinition: [ + confluence, + "cursor", + ], + }, + limit: { + propDefinition: [ + confluence, + "limit", + ], + }, + }, + async run({ $ }) { + const cloudId = await this.confluence.getCloudId({ + $, + }); + const response = await this.confluence.listPages({ + $, + cloudId, + params: { + sort: this.sort, + status: this.status, + title: this.pageTitle, + bodyFormat: this.bodyFormat, + subType: this.subType, + cursor: this.cursor, + limit: this.limit, + }, + }); + $.export("$summary", `Successfully retrieved ${response.results.length} page${response.results.length === 1 + ? "" + : "s"}`); + return response; + }, +}; diff --git a/components/confluence/confluence.app.mjs b/components/confluence/confluence.app.mjs index 695ccb44a7465..70c98b34fb2d6 100644 --- a/components/confluence/confluence.app.mjs +++ b/components/confluence/confluence.app.mjs @@ -123,6 +123,103 @@ export default { }; }, }, + pageId: { + type: "string", + label: "Page ID", + description: "Select a page or provide its ID", + async options({ prevContext }) { + const params = prevContext?.cursor + ? { + cursor: prevContext.cursor, + } + : {}; + const cloudId = await this.getCloudId(); + const { + results, _links: links, + } = await this.listPages({ + cloudId, + params, + }); + const options = results?.map(({ + id: value, title: label, + }) => ({ + value, + label, + })) || []; + return { + options, + context: { + cursor: this._extractCursorFromLink(links?.next), + }, + }; + }, + }, + pageSort: { + type: "string", + label: "Sort", + description: "Used to sort the result by a particular field", + options: [ + "id", + "-id", + "created-date", + "-created-date", + "modified-date", + "-modified-date", + "title", + "-title", + ], + optional: true, + }, + pageStatus: { + type: "string", + label: "Status", + description: "Filter the results to pages based on their status", + options: [ + "current", + "archived", + "deleted", + "trashed", + ], + optional: true, + }, + pageTitle: { + type: "string", + label: "Title", + description: "Filter the results to pages based on their title", + optional: true, + }, + bodyFormat: { + type: "string", + label: "Body Format", + description: "The content format types to be returned in the body field of the response. If available, the representation will be available under a response field of the same name under the body field.", + options: [ + "storage", + "atlas_doc_format", + ], + optional: true, + }, + subType: { + type: "string", + label: "Subtype", + description: "Filter the results to pages based on their subtype", + options: [ + "live", + "page", + ], + optional: true, + }, + cursor: { + type: "string", + label: "Cursor", + description: "Used for pagination, this opaque cursor will be returned in the next URL in the Link response header. Use the relative URL in the Link header to retrieve the next set of results.", + optional: true, + }, + limit: { + type: "integer", + label: "Limit", + description: "Maximum number of pages per result to return", + optional: true, + }, }, methods: { _baseUrl(cloudId) { @@ -179,6 +276,14 @@ export default { ...opts, }); }, + getPageById({ + pageId, ...opts + }) { + return this._makeRequest({ + path: `/pages/${pageId}`, + ...opts, + }); + }, listSpaces(opts = {}) { return this._makeRequest({ path: "/spaces", diff --git a/components/confluence/package.json b/components/confluence/package.json index bd1e5d6c1848b..7348e9ec1f553 100644 --- a/components/confluence/package.json +++ b/components/confluence/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/confluence", - "version": "0.2.1", + "version": "0.3.0", "description": "Pipedream Confluence Components", "main": "confluence.app.mjs", "keywords": [ From 1770ddc88a34222238dc595420d65627df84a4c5 Mon Sep 17 00:00:00 2001 From: Michelle Bergeron Date: Mon, 8 Sep 2025 14:47:11 -0400 Subject: [PATCH 2/2] versions --- components/confluence/actions/create-page/create-page.mjs | 2 +- components/confluence/actions/create-post/create-post.mjs | 2 +- components/confluence/actions/delete-post/delete-post.mjs | 2 +- components/confluence/actions/search-content/search-content.mjs | 2 +- components/confluence/actions/update-post/update-post.mjs | 2 +- .../sources/new-page-or-blog-post/new-page-or-blog-post.mjs | 2 +- .../confluence/sources/watch-blog-posts/watch-blog-posts.mjs | 2 +- components/confluence/sources/watch-pages/watch-pages.mjs | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/components/confluence/actions/create-page/create-page.mjs b/components/confluence/actions/create-page/create-page.mjs index 6faa5afc71371..8d759f4e83438 100644 --- a/components/confluence/actions/create-page/create-page.mjs +++ b/components/confluence/actions/create-page/create-page.mjs @@ -4,7 +4,7 @@ export default { key: "confluence-create-page", name: "Create Page", description: "Creates a new page in the space. [See the documentation](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-page/#api-pages-post)", - version: "0.0.2", + version: "0.0.3", type: "action", props: { confluence, diff --git a/components/confluence/actions/create-post/create-post.mjs b/components/confluence/actions/create-post/create-post.mjs index bf89b63c67d5b..7cfb0de614db6 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.4", + version: "0.0.5", 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 818daf66a7925..45a480f5dd42f 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.4", + version: "0.0.5", type: "action", props: { confluence, diff --git a/components/confluence/actions/search-content/search-content.mjs b/components/confluence/actions/search-content/search-content.mjs index 52a279019a598..337a51f7a179c 100644 --- a/components/confluence/actions/search-content/search-content.mjs +++ b/components/confluence/actions/search-content/search-content.mjs @@ -4,7 +4,7 @@ export default { key: "confluence-search-content", name: "Search Content", description: "Searches for content using the Confluence Query Language (CQL). [See the documentation](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-search#api-wiki-rest-api-search-get)", - version: "0.0.3", + version: "0.0.4", 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 7a49005359b8a..1302255a4060f 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.4", + version: "0.0.5", type: "action", props: { confluence, 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 7d4204fbd53a8..ecc90c11b8c79 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.4", + version: "0.0.5", 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 d0415a26d6c0d..00d0af2b7b21c 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.4", + version: "0.0.5", 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 fd0fe16e98696..1a52abe014395 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.4", + version: "0.0.5", type: "source", dedupe: "unique", methods: {