Repository: PipedreamHQ/pipedream
Pull request #15813: Notion usability improvements
Author: login: GTFalcao
Created: 2025-03-04T20:45:58Z | Merged: 2025-03-10T18:41:23Z

Closes #15629 

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
	- Added customizable options such as selecting block types and a dedicated "Page Content" field for improved content creation.
	- Introduced new guidance alerts that help prompt proper usage when creating comments or updating pages.
	- Enhanced event descriptions for new database and new page actions, including links to relevant documentation.

- **Bug Fixes**
	- Improved clarity in error messages and descriptions across various actions to enhance user experience.

- **Documentation**
	- Updated labels, descriptions, and error messages across actions for clearer instructions, including links to relevant documentation.
	- Enhanced summary messages to dynamically report query results and retrieved information, providing more user-friendly feedback.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Linked issue #15629: [Usability Audit] Notion
Notion needs a usability audit.

One issue reported by a user:

```
I am trying to do a search on Notion by title page. I am using the string extracted from previous workflows. In the results, I get the following list:
1. The Parent page of the page I am searching for. The Parent page has a total of 5 pages, including the one I am trying to search.
2. 2-4 The other pages.
I am able to see the contents and information of each page except for the one I am searching for. It seems that I am able to get all of the other surrounding pages. I tried maxing out the page size results and search for page
```

All actions and sources should be thoroughly verified to ensure they provide the best possible user experience, and are consistent both in behavior and descriptions.
Linked issue comments: user: login: vunguyenhung
created_at: 2025-03-05T04:29:54Z
body: Hello everyone, I have tested this PR and there're some test cases failed or needed improvement. 

Please check the test report below for more information
https://vunguyenhung.notion.site/Usability-Audit-Notion-1acbf548bb5e81b48030fb5eb2425dfd
author_association: CONTRIBUTOR
user: login: GTFalcao
created_at: 2025-03-09T21:53:11Z
body: Changes made:

- Removed the "block objects" option - after some more experimenting with this, given it only works with existing blocks, it makes no sense to pass the entire block object when you can simply pass its ID instead (in the "block ids" option, tweaked its description slightly). This should also make the action more straightforward, since "block object" could easily be mistaken with creating a new block, which is accomplished with other options such as 'markdown content' (renamed from 'markup content');
- Adjusted info label on 'Create Comment';
- Added checking for `{{steps` input on all async options props, throwing a ConfigurationError.

I have not changed the "select an item or provide an item id" props, as we discussed in Slack over keeping the descriptions simple.

I have also not changed 'New Comment Created' because providing a page (block) id is required in Notion's API. We would have to perform a individual request for every single page the user has access to, which seems somewhat impractical (could amount to dozens of requests) - do you think this is an important enough use case to cover to be worth this? @vunguyenhung 
author_association: COLLABORATOR
user: login: vunguyenhung
created_at: 2025-03-10T01:44:38Z
body: Hey @GTFalcao, sounds good to me.I'll move this to ready for release
author_association: CONTRIBUTOR
user: login: vunguyenhung
created_at: 2025-03-10T01:44:55Z
body: Hi everyone, all test cases are passed! Ready for release! 

Test report
https://vunguyenhung.notion.site/Usability-Audit-Notion-1acbf548bb5e81b48030fb5eb2425dfd
author_association: CONTRIBUTOR

Diff:
diff --git a/components/notion/actions/append-block/append-block.mjs b/components/notion/actions/append-block/append-block.mjs
index dbc581d1453e4..d96ec6c84c7b2 100644
--- a/components/notion/actions/append-block/append-block.mjs
+++ b/components/notion/actions/append-block/append-block.mjs
@@ -5,8 +5,9 @@ export default {
   ...base,
   key: "notion-append-block",
   name: "Append Block to Parent",
-  description: "Creates and appends blocks to the specified parent. [See the documentation](https://developers.notion.com/reference/patch-block-children)",
-  version: "0.2.17",
+  description:
+    "Append new and/or existing blocks to the specified parent. [See the documentation](https://developers.notion.com/reference/patch-block-children)",
+  version: "0.3.0",
   type: "action",
   props: {
     notion,
@@ -16,13 +17,27 @@ export default {
         "pageId",
       ],
       label: "Parent Block ID",
-      description: "The identifier for the parent block",
+      description: "Select a parent block/page or provide its ID",
     },
-    blockObjects: {
+    blockTypes: {
       type: "string[]",
-      label: "Block Objects",
-      description: "This prop accepts an array of block objects to be appended. Using a custom expression in this prop is recommended.",
-      optional: true,
+      label: "Block Type(s)",
+      description: "Select which type(s) of block you'd like to append",
+      reloadProps: true,
+      options: [
+        {
+          label: "Append existing blocks",
+          value: "blockIds",
+        },
+        {
+          label: "Provide Markdown content to create new blocks with",
+          value: "markdownContents",
+        },
+        {
+          label: "Provide Image URLs to create new image blocks",
+          value: "imageUrls",
+        },
+      ],
     },
     blockIds: {
       propDefinition: [
@@ -30,23 +45,37 @@ export default {
         "pageId",
       ],
       type: "string[]",
-      label: "Block IDs",
-      description: "Contents of selected blocks will be appended",
-      optional: true,
+      label: "Existing Block IDs",
+      description: "Select one or more block(s) or page(s) to append (selecting a page appends its children). You can also provide block or page IDs.",
+      hidden: true,
     },
-    markupContents: {
+    markdownContents: {
       type: "string[]",
-      label: "Markup Contents",
-      description: "Content of new blocks to append. You must use Markdown syntax [See docs](https://www.notion.so/help/writing-and-editing-basics#markdown-&-shortcuts)",
-      optional: true,
+      label: "Markdown Contents",
+      description:
+        "Each entry is the content of a new block to append, using Markdown syntax. [See the documentation](https://www.notion.com/help/writing-and-editing-basics#markdown-and-shortcuts) for more information",
+      hidden: true,
     },
     imageUrls: {
       type: "string[]",
       label: "Image URLs",
-      description: "List of URLs to append as image blocks",
-      optional: true,
+      description: "One or more Image URLs to append new image blocks with. [See the documentation](https://www.notion.com/help/images-files-and-media#media-block-types) for more information",
+      hidden: true,
     },
   },
+  additionalProps(currentProps) {
+    const { blockTypes } = this;
+
+    for (let prop of [
+      "blockIds",
+      "markdownContents",
+      "imageUrls",
+    ]) {
+      currentProps[prop].hidden = !blockTypes.includes(prop);
+    }
+
+    return {};
+  },
   methods: {
     ...base.methods,
     chunkArray(array, chunkSize = 100) {
@@ -58,19 +87,11 @@ export default {
     },
   },
   async run({ $ }) {
+    const { blockTypes } = this;
     const children = [];
-    // add blocks from blockObjects
-    if (this.blockObjects?.length > 0) {
-      for (const obj of this.blockObjects) {
-        const child = (typeof obj === "string")
-          ? JSON.parse(obj)
-          : obj;
-        children.push(child);
-      }
-    }
 
     // add blocks from blockIds
-    if (this.blockIds?.length > 0) {
+    if (blockTypes.includes("blockIds") && this.blockIds?.length > 0) {
       for (const id of this.blockIds) {
         const block = await this.notion.retrieveBlock(id);
         block.children = await this.notion.retrieveBlockChildren(block);
@@ -80,15 +101,15 @@ export default {
     }
 
     // add blocks from markup
-    if (this.markupContents?.length > 0) {
-      for (const content of this.markupContents) {
+    if (blockTypes.includes("markdownContents") && this.markdownContents?.length > 0) {
+      for (const content of this.markdownContents) {
         const block = this.createBlocks(content);
         children.push(...block);
       }
     }
 
     // add image blocks
-    if (this.imageUrls?.length) {
+    if (blockTypes.includes("imageUrls") && this.imageUrls?.length) {
       for (const url of this.imageUrls) {
         children.push({
           type: "image",
@@ -111,7 +132,10 @@ export default {
     const chunks = this.chunkArray(children);
 
     for (const chunk of chunks) {
-      const { results: payload } = await this.notion.appendBlock(this.pageId, chunk);
+      const { results: payload } = await this.notion.appendBlock(
+        this.pageId,
+        chunk,
+      );
       results.push(payload);
     }
 
diff --git a/components/notion/actions/common/base-page-builder.mjs b/components/notion/actions/common/base-page-builder.mjs
index af11d746910ac..145c6099b086f 100644
--- a/components/notion/actions/common/base-page-builder.mjs
+++ b/components/notion/actions/common/base-page-builder.mjs
@@ -39,7 +39,7 @@ export default {
      */
     _buildPropDescription(type, example) {
       const typeName = type.replace(/_/g, "-");
-      const description = `The type of this property is \`${type}\`. [See ${type} type docs here](https://developers.notion.com/reference/property-object#${typeName}).`;
+      const description = `The type of this property is \`${type}\`. [See ${type} type documentation here](https://developers.notion.com/reference/property-object#${typeName}).`;
       const descriptionExample = example
         ? `e.g. ${example}.`
         : "";
diff --git a/components/notion/actions/create-comment/create-comment.mjs b/components/notion/actions/create-comment/create-comment.mjs
index 8471473e20d62..86e11f332cde0 100644
--- a/components/notion/actions/create-comment/create-comment.mjs
+++ b/components/notion/actions/create-comment/create-comment.mjs
@@ -4,23 +4,27 @@ import { ConfigurationError } from "@pipedream/platform";
 export default {
   key: "notion-create-comment",
   name: "Create Comment",
-  description: "Creates a comment in a page or existing discussion thread. [See the documentation](https://developers.notion.com/reference/create-a-comment)",
-  version: "0.0.1",
+  description: "Create a comment in a page or existing discussion thread. [See the documentation](https://developers.notion.com/reference/create-a-comment)",
+  version: "0.0.2",
   type: "action",
   props: {
     notion,
+    infoLabel: {
+      type: "alert",
+      alertType: "info",
+      content: "Provide either a Page ID or a Discussion ID to create the comment under.",
+    },
     pageId: {
       propDefinition: [
         notion,
         "pageId",
       ],
-      description: "Unique identifier of a page. Either this or a Discussion ID is required (not both)",
       optional: true,
     },
     discussionId: {
       type: "string",
       label: "Discussion ID",
-      description: "A UUID identifier for a discussion thread. Either this or a Page ID is required (not both)",
+      description: "The ID of a discussion thread. [See the documentation](https://developers.notion.com/docs/working-with-comments#retrieving-a-discussion-id) for more information",
       optional: true,
     },
     comment: {
@@ -31,7 +35,7 @@ export default {
   },
   async run({ $ }) {
     if ((this.pageId && this.discussionId) || (!this.pageId && !this.discussionId)) {
-      throw new ConfigurationError("Either a Page ID or a Discussion ID is required (not both)");
+      throw new ConfigurationError("Provide either a page ID or a discussion thread ID to create the comment under");
     }
 
     const response = await this.notion._getNotionClient().comments.create({
@@ -47,7 +51,7 @@ export default {
         },
       ],
     });
-    $.export("$summary", `Successfully added comment with ID: ${response.id}`);
+    $.export("$summary", `Successfully created comment (ID: ${response.id})`);
     return response;
   },
 };
diff --git a/components/notion/actions/create-page-from-database/create-page-from-database.mjs b/components/notion/actions/create-page-from-database/create-page-from-database.mjs
index 971c77ec95102..2b22e89114bd3 100644
--- a/components/notion/actions/create-page-from-database/create-page-from-database.mjs
+++ b/components/notion/actions/create-page-from-database/create-page-from-database.mjs
@@ -6,8 +6,8 @@ export default {
   ...base,
   key: "notion-create-page-from-database",
   name: "Create Page from Database",
-  description: "Creates a page from a database. [See the documentation](https://developers.notion.com/reference/post-page)",
-  version: "0.1.15",
+  description: "Create a page from a database. [See the documentation](https://developers.notion.com/reference/post-page)",
+  version: "0.1.16",
   type: "action",
   props: {
     notion,
@@ -17,7 +17,7 @@ export default {
         "databaseId",
       ],
       label: "Parent Database ID",
-      description: "The identifier for a Notion parent page",
+      description: "Select a parent database or provide a database ID",
       reloadProps: true,
     },
     metaTypes: {
@@ -40,13 +40,13 @@ export default {
     alert: {
       type: "alert",
       alertType: "info",
-      content: "This action will create an empty page by default. To add content, use the `pageContent` prop below.",
+      content: "This action will create an empty page by default. To add content, use the `Page Content` prop below.",
     },
     pageContent: {
-      type: "string",
-      label: "Page Content",
-      description: "Content of the page. You can use Markdown syntax [See docs](https://www.notion.so/help/writing-and-editing-basics#markdown-&-shortcuts)",
-      optional: true,
+      propDefinition: [
+        notion,
+        "pageContent",
+      ],
     },
   },
   async additionalProps() {
diff --git a/components/notion/actions/create-page/create-page.mjs b/components/notion/actions/create-page/create-page.mjs
index b818d7c3a92db..d26be9917e810 100644
--- a/components/notion/actions/create-page/create-page.mjs
+++ b/components/notion/actions/create-page/create-page.mjs
@@ -6,8 +6,8 @@ export default {
   ...base,
   key: "notion-create-page",
   name: "Create Page",
-  description: "Creates a page from a parent page. The only valid property is *title*. [See the documentation](https://developers.notion.com/reference/post-page)",
-  version: "0.2.13",
+  description: "Create a page from a parent page. [See the documentation](https://developers.notion.com/reference/post-page)",
+  version: "0.2.14",
   type: "action",
   props: {
     notion,
@@ -17,7 +17,7 @@ export default {
         "pageId",
       ],
       label: "Parent Page ID",
-      description: "The identifier for a Notion parent page",
+      description: "Select a parent page or provide a page ID",
       reloadProps: true,
     },
     title: {
@@ -33,10 +33,10 @@ export default {
       ],
     },
     pageContent: {
-      type: "string",
-      label: "Page Content",
-      description: "Content of the page. You can use Markdown syntax [See docs](https://www.notion.so/help/writing-and-editing-basics#markdown-&-shortcuts)",
-      optional: true,
+      propDefinition: [
+        notion,
+        "pageContent",
+      ],
     },
   },
   async additionalProps() {
diff --git a/components/notion/actions/duplicate-page/duplicate-page.mjs b/components/notion/actions/duplicate-page/duplicate-page.mjs
index 6d21c41091280..f3872a47af34e 100644
--- a/components/notion/actions/duplicate-page/duplicate-page.mjs
+++ b/components/notion/actions/duplicate-page/duplicate-page.mjs
@@ -6,8 +6,8 @@ export default {
   ...base,
   key: "notion-duplicate-page",
   name: "Duplicate Page",
-  description: "Creates a new page copied from an existing page block. [See the documentation](https://developers.notion.com/reference/post-page)",
-  version: "0.0.9",
+  description: "Create a new page copied from an existing page block. [See the documentation](https://developers.notion.com/reference/post-page)",
+  version: "0.0.10",
   type: "action",
   props: {
     notion,
@@ -16,7 +16,7 @@ export default {
         notion,
         "pageId",
       ],
-      description: "The page to copy",
+      description: "Select a page to copy or provide a page ID",
     },
     title: {
       propDefinition: [
@@ -31,7 +31,7 @@ export default {
         "pageId",
       ],
       label: "Parent Page ID",
-      description: "The parent page of the new page being created",
+      description: "Select a parent page for the new page being created, or provide the ID of a parent page",
     },
   },
   async run({ $ }) {
@@ -65,7 +65,7 @@ export default {
 
     const results = await this.notion.createPage(page);
     const pageName = this.notion.extractPageTitle(results);
-    $.export("$summary", `Successfully created the new page, "[${pageName}](${results.url})"`);
+    $.export("$summary", `Successfully created page "[${pageName}](${results.url})"`);
     return results;
   },
 };
diff --git a/components/notion/actions/find-page/find-page.mjs b/components/notion/actions/find-page/find-page.mjs
deleted file mode 100644
index bbf4c8291934d..0000000000000
--- a/components/notion/actions/find-page/find-page.mjs
+++ /dev/null
@@ -1,22 +0,0 @@
-import common from "../common/base-search.mjs";
-
-export default {
-  ...common,
-  key: "notion-find-page",
-  name: "Find a Page",
-  description: "Searches for a page by its title. [See the docs](https://developers.notion.com/reference/post-search)",
-  version: "0.0.6",
-  type: "action",
-  methods: {
-    getSummary({
-      response, title,
-    }) {
-      return `Found ${response.results.length} pages ${title
-        ? `with title search ${this.title}`
-        : ""}`;
-    },
-    getFilter() {
-      return "page";
-    },
-  },
-};
diff --git a/components/notion/actions/query-database/query-database.mjs b/components/notion/actions/query-database/query-database.mjs
index b7a03be37761c..1734228add3fd 100644
--- a/components/notion/actions/query-database/query-database.mjs
+++ b/components/notion/actions/query-database/query-database.mjs
@@ -4,8 +4,8 @@ import utils from "../../common/utils.mjs";
 export default {
   key: "notion-query-database",
   name: "Query Database",
-  description: "Query a database. [See the docs](https://developers.notion.com/reference/post-database-query)",
-  version: "0.0.8",
+  description: "Query a database with a specified filter. [See the documentation](https://developers.notion.com/reference/post-database-query)",
+  version: "0.0.9",
   type: "action",
   props: {
     notion,
@@ -16,8 +16,8 @@ export default {
       ],
     },
     filter: {
-      label: "Filter",
-      description: "The filter to query. [See how filters work here](https://developers.notion.com/reference/post-database-query-filter). E.g. { \"property\": \"Email\", \"rich_text\": { \"contains\": \"gmail.com\" } }",
+      label: "Filter (query)",
+      description: "The filter to apply, as a JSON-stringified object. [See the documentation for available filters](https://developers.notion.com/reference/post-database-query-filter). Example: `{ \"property\": \"Name\", \"title\": { \"contains\": \"title to search for\" } }`",
       type: "string",
     },
   },
@@ -28,7 +28,11 @@ export default {
       filter: utils.parseStringToJSON(filter),
     });
 
-    $.export("$summary", "Retrieved database query result");
+    const length = response?.results?.length;
+
+    $.export("$summary", `Retrieved ${length} result${length === 1
+      ? ""
+      : "s"}`);
 
     return response;
   },
diff --git a/components/notion/actions/retrieve-block/retrieve-block.mjs b/components/notion/actions/retrieve-block/retrieve-block.mjs
index aeaccb92ae413..a049022cca6b5 100644
--- a/components/notion/actions/retrieve-block/retrieve-block.mjs
+++ b/components/notion/actions/retrieve-block/retrieve-block.mjs
@@ -3,8 +3,8 @@ import notion from "../../notion.app.mjs";
 export default {
   key: "notion-retrieve-block",
   name: "Retrieve Block",
-  description: "Retrieves a block. A block object represents content within Notion. Blocks can be text, lists, media, and more. A page is also a type of block. [See the docs](https://developers.notion.com/reference/retrieve-a-block)",
-  version: "0.0.4",
+  description: "Get details of a block, which can be text, lists, media, a page, among others. [See the documentation](https://developers.notion.com/reference/retrieve-a-block)",
+  version: "0.0.5",
   type: "action",
   props: {
     notion,
@@ -14,12 +14,12 @@ export default {
         "pageId",
       ],
       label: "Block ID",
-      description: "The identifier for a Notion block",
+      description: "Select a block or provide a block ID",
     },
     retrieveChildren: {
       type: "boolean",
-      label: "Retrieve Block Children",
-      description: "Returns recursively all the children for the block ID specified. [See docs](https://developers.notion.com/reference/get-block-children)",
+      label: "Retrieve Children",
+      description: "Retrieve all the children (recursively) for the specified block. [See the documentation](https://developers.notion.com/reference/get-block-children) for more information",
       optional: true,
       default: false,
     },
@@ -29,7 +29,9 @@ export default {
     if (this.retrieveChildren) {
       block.children = await this.notion.retrieveBlockChildren(block);
     }
-    $.export("$summary", "Retrieved block successfully");
+    $.export("$summary", `Successfully retrieved block${this.retrieveChildren
+      ? ` with ${block.children.length ?? 0} children`
+      : ""}`);
     return block;
   },
 };
diff --git a/components/notion/actions/retrieve-database-content/retrieve-database-content.mjs b/components/notion/actions/retrieve-database-content/retrieve-database-content.mjs
index 7af746c5a9921..ffcd8cb6fd50c 100644
--- a/components/notion/actions/retrieve-database-content/retrieve-database-content.mjs
+++ b/components/notion/actions/retrieve-database-content/retrieve-database-content.mjs
@@ -3,8 +3,8 @@ import notion from "../../notion.app.mjs";
 export default {
   key: "notion-retrieve-database-content",
   name: "Retrieve Database Content",
-  description: "Retreive the content of a database. [See the docs](https://developers.notion.com/reference/post-database-query)",
-  version: "0.0.3",
+  description: "Get all content of a database. [See the documentation](https://developers.notion.com/reference/post-database-query)",
+  version: "0.0.4",
   type: "action",
   props: {
     notion,
@@ -17,7 +17,9 @@ export default {
   },
   async run({ $ }) {
     const { results } = await this.notion.queryDatabase(this.databaseId);
-    $.export("$summary", "Retrieved database content");
+    $.export("$summary", `Successfully retrieved ${results.length} object${results.length === 1
+      ? ""
+      : "s"} in database`);
     return results;
   },
 };
diff --git a/components/notion/actions/retrieve-database-schema/retrieve-database-schema.mjs b/components/notion/actions/retrieve-database-schema/retrieve-database-schema.mjs
index 40c614c3b0b6f..30152f8c47035 100644
--- a/components/notion/actions/retrieve-database-schema/retrieve-database-schema.mjs
+++ b/components/notion/actions/retrieve-database-schema/retrieve-database-schema.mjs
@@ -3,8 +3,8 @@ import notion from "../../notion.app.mjs";
 export default {
   key: "notion-retrieve-database-schema",
   name: "Retrieve Database Schema",
-  description: "Retrieves a database object. Database objects describe the property schema of a database in Notion. [See the docs](https://developers.notion.com/reference/retrieve-a-database)",
-  version: "0.0.5",
+  description: "Get the property schema of a database in Notion. [See the documentation](https://developers.notion.com/reference/retrieve-a-database)",
+  version: "0.0.6",
   type: "action",
   props: {
     notion,
@@ -17,7 +17,7 @@ export default {
   },
   async run({ $ }) {
     const response = await this.notion.retrieveDatabase(this.databaseId);
-    $.export("$summary", "Retrieved database successfully");
+    $.export("$summary", "Successfully retrieved database schema");
     return response;
   },
 };
diff --git a/components/notion/actions/retrieve-page-property-item/retrieve-page-property-item.mjs b/components/notion/actions/retrieve-page-property-item/retrieve-page-property-item.mjs
index 9ee0ec1ba09fe..8bb72609c4021 100644
--- a/components/notion/actions/retrieve-page-property-item/retrieve-page-property-item.mjs
+++ b/components/notion/actions/retrieve-page-property-item/retrieve-page-property-item.mjs
@@ -3,8 +3,8 @@ import notion from "../../notion.app.mjs";
 export default {
   key: "notion-retrieve-page-property-item",
   name: "Retrieve Page Property Item",
-  description: "Retrieves a `property_item` object for a given `page_id` and `property_id`.",
-  version: "0.0.4",
+  description: "Get a Property Item object for a selected page and property. [See the documentation](https://developers.notion.com/reference/retrieve-a-page-property)",
+  version: "0.0.5",
   type: "action",
   props: {
     notion,
@@ -29,7 +29,7 @@ export default {
       this.pageId,
       this.propertyId,
     );
-    $.export("$summary", "Retrieved property item successfully");
+    $.export("$summary", "Successfully retrieved property item");
     return response;
   },
 };
diff --git a/components/notion/actions/retrieve-page/retrieve-page.mjs b/components/notion/actions/retrieve-page/retrieve-page.mjs
index f1af22c26eb28..15e234bc8787d 100644
--- a/components/notion/actions/retrieve-page/retrieve-page.mjs
+++ b/components/notion/actions/retrieve-page/retrieve-page.mjs
@@ -3,8 +3,8 @@ import notion from "../../notion.app.mjs";
 export default {
   key: "notion-retrieve-page",
   name: "Retrieve Page",
-  description: "Retrieves a page. [See the docs](https://developers.notion.com/reference/retrieve-a-page)",
-  version: "0.0.4",
+  description: "Get details of a page. [See the documentation](https://developers.notion.com/reference/retrieve-a-page)",
+  version: "0.0.5",
   type: "action",
   props: {
     notion,
@@ -17,7 +17,10 @@ export default {
   },
   async run({ $ }) {
     const response = await this.notion.retrievePage(this.pageId);
-    $.export("$summary", "Retrieved page successfully");
+    const title = response?.properties?.Name?.title[0]?.plain_text;
+    $.export("$summary", `Successfully retrieved page${title
+      ? ` "${title}"`
+      : ""}`);
     return response;
   },
 };
diff --git a/components/notion/actions/search/search.mjs b/components/notion/actions/search/search.mjs
index ff86e409c06fc..b65558756cdc8 100644
--- a/components/notion/actions/search/search.mjs
+++ b/components/notion/actions/search/search.mjs
@@ -3,19 +3,16 @@ import common from "../common/base-search.mjs";
 export default {
   ...common,
   key: "notion-search",
-  name: "Search",
-  description: "Searches for a page or database. [See the docs](https://developers.notion.com/reference/post-search)",
-  version: "0.0.4",
+  name: "Find Pages or Databases",
+  description: "Searches for a page or database. [See the documentation](https://developers.notion.com/reference/post-search)",
+  version: "0.0.5",
   type: "action",
   props: {
     ...common.props,
     title: {
-      propDefinition: [
-        common.props.notion,
-        "title",
-      ],
-      label: "Query",
-      description: "The object title.",
+      type: "string",
+      label: "Query (Title)",
+      description: "The object title to search for",
     },
     filter: {
       propDefinition: [
@@ -25,14 +22,10 @@ export default {
     },
   },
   methods: {
-    getSummary({
-      response, title,
-    }) {
-      return `Found ${response.results.length} object${response.results.length > 1
-        ? "s"
-        : ""} ${title
-        ? `with query search ${this.title}`
-        : ""}`;
+    getSummary({ response }) {
+      return `Found ${response.results?.length} object${response.results?.length === 1
+        ? ""
+        : "s"} with query search ${this.title}`;
     },
     getFilter() {
       return this.filter;
diff --git a/components/notion/actions/update-page/update-page.mjs b/components/notion/actions/update-page/update-page.mjs
index b1fcdd6a7fa8b..a38141162c497 100644
--- a/components/notion/actions/update-page/update-page.mjs
+++ b/components/notion/actions/update-page/update-page.mjs
@@ -6,18 +6,23 @@ export default {
   ...base,
   key: "notion-update-page",
   name: "Update Page",
-  description: "Updates page property values for the specified page. Properties that are not set will remain unchanged. To append page content, use the *append block* action. [See the documentation](https://developers.notion.com/reference/patch-page)",
-  version: "1.1.3",
+  description: "Update a page's property values. To append page content, use the *Append Block* action instead. [See the documentation](https://developers.notion.com/reference/patch-page)",
+  version: "1.1.4",
   type: "action",
   props: {
     notion,
+    infoLabel: {
+      type: "alert",
+      alertType: "info",
+      content: "Properties that are not set will remain unchanged.",
+    },
     parent: {
       propDefinition: [
         notion,
         "databaseId",
       ],
       label: "Parent Database ID",
-      description: "The identifier for a Notion parent database",
+      description: "Select the database that contains the page to update. If you instead provide a database ID in a custom expression, you will also have to provide the page's ID in a custom expression",
       reloadProps: true,
     },
     pageId: {
diff --git a/components/notion/notion.app.mjs b/components/notion/notion.app.mjs
index 0d3d120c7e6b0..fb6cc9061aa5b 100644
--- a/components/notion/notion.app.mjs
+++ b/components/notion/notion.app.mjs
@@ -1,5 +1,6 @@
 import notion from "@notionhq/client";
 import NOTION_META from "./common/notion-meta-selection.mjs";
+import { ConfigurationError } from "@pipedream/platform";
 
 export default {
   type: "app",
@@ -8,7 +9,7 @@ export default {
     databaseId: {
       type: "string",
       label: "Database ID",
-      description: "The identifier for a Notion database",
+      description: "Select a database or provide a database ID",
       async options({ prevContext }) {
         const response = await this.listDatabases({
           start_cursor: prevContext.nextPageParameters ?? undefined,
@@ -20,7 +21,7 @@ export default {
     pageId: {
       type: "string",
       label: "Page ID",
-      description: "The identifier for a Notion page",
+      description: "Select a page or provide a page ID",
       async options({ prevContext }) {
         const response = await this.search(undefined, {
           start_cursor: prevContext.nextPageParameters ?? undefined,
@@ -32,10 +33,11 @@ export default {
     pageIdInDatabase: {
       type: "string",
       label: "Page ID",
-      description: "The identifier for a Notion page",
+      description: "Select a page from the database or provide a page ID",
       async options({
         prevContext, databaseId,
       }) {
+        this._checkOptionsContext(databaseId, "Database ID");
         const response = await this.queryDatabase(databaseId, {
           start_cursor: prevContext.nextPageParameters ?? undefined,
         });
@@ -46,8 +48,9 @@ export default {
     propertyId: {
       type: "string",
       label: "Property ID",
-      description: "The identifier for a Notion page property",
+      description: "Select a page property or provide a property ID",
       async options({ pageId }) {
+        this._checkOptionsContext(pageId, "Page ID");
         const response = await this.retrievePage(pageId);
 
         const parentType = response.parent.type;
@@ -77,7 +80,7 @@ export default {
     metaTypes: {
       type: "string[]",
       label: "Meta Types",
-      description: "Select the page attributes such as icon and cover",
+      description: "Select one or more page attributes (such as icon and cover)",
       options: Object.keys(NOTION_META),
       optional: true,
       reloadProps: true,
@@ -85,11 +88,12 @@ export default {
     propertyTypes: {
       type: "string[]",
       label: "Property Types",
-      description: "Select the page properties",
+      description: "Select one or more page properties",
       optional: true,
       async options({
         parentId, parentType,
       }) {
+        this._checkOptionsContext(parentId, "Database ID");
         try {
           const { properties } = parentType === "database"
             ? await this.retrieveDatabase(parentId)
@@ -103,21 +107,20 @@ export default {
     },
     archived: {
       type: "boolean",
-      label: "Archive page",
-      description: "Set to true to archive (delete) a page. Set to false to un-archive\
-(restore) a page.",
+      label: "Archive Page",
+      description: "Set to `true` to archive (delete) a page. Set to `false` to  un-archive (restore) a page",
       optional: true,
     },
     title: {
       type: "string",
       label: "Page Title",
-      description: "The page title. Defaults to `Untitled`.",
+      description: "The page title (defaults to `Untitled`)",
       optional: true,
     },
     userIds: {
       type: "string[]",
       label: "Users",
-      description: "A list of users",
+      description: "Select one or more users, or provide user IDs",
       async options() {
         const users = await this.getUsers();
 
@@ -130,7 +133,7 @@ export default {
     sortDirection: {
       type: "string",
       label: "Sort Direction",
-      description: "The direction to sort.",
+      description: "The direction to sort by",
       optional: true,
       options: [
         "ascending",
@@ -140,28 +143,41 @@ export default {
     pageSize: {
       type: "integer",
       label: "Page Size",
-      description: "The number of items from the full list desired in the response. Maximum: 100",
+      description: "The number of items from the full list desired in the response (max 100)",
       default: 100,
+      min: 1,
+      max: 100,
       optional: true,
     },
     startCursor: {
       type: "string",
       label: "Start Cursor (page_id)",
-      description: "If supplied, this endpoint will return a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results.",
+      description: "Leave blank to retrieve the first page of results. Otherwise, the response will be the page of results starting after the provided cursor",
       optional: true,
     },
     filter: {
       type: "string",
-      label: "Filter",
-      description: "The value of the property to filter the results by. Possible values for object type include `page` or `database`. Limitation: Currently the only filter allowed is `object` which will filter by type of object (either `page` or `database`)",
+      label: "Page or Database",
+      description: "Whether to search for pages or databases",
       optional: true,
       options: [
         "page",
         "database",
       ],
     },
+    pageContent: {
+      type: "string",
+      label: "Page Content",
+      description: "The content of the page, using Markdown syntax. [See the documentation](https://www.notion.com/help/writing-and-editing-basics#markdown-and-shortcuts) for more information",
+      optional: true,
+    },
   },
   methods: {
+    _checkOptionsContext(value, name) {
+      if (value.match(/{{\s?steps/)) {
+        throw new ConfigurationError(`Please use a custom expression to reference a previous value, since you are also using one for \`${name}\``);
+      }
+    },
     _getNotionClient() {
       return new notion.Client({
         auth: this.$auth.oauth_access_token,
diff --git a/components/notion/package.json b/components/notion/package.json
index c06202a516975..b8f2af93970a2 100644
--- a/components/notion/package.json
+++ b/components/notion/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@pipedream/notion",
-  "version": "0.3.0",
+  "version": "0.4.0",
   "description": "Pipedream Notion Components",
   "main": "notion.app.mjs",
   "keywords": [
@@ -13,18 +13,7 @@
     "@notionhq/client": "^2.2.3",
     "@pipedream/platform": "^3.0.3",
     "@tryfabric/martian": "^1.2.4",
-    "asynckit": "^0.4.0",
-    "combined-stream": "^1.0.8",
-    "delayed-stream": "^1.0.0",
-    "form-data": "^3.0.1",
-    "lodash-es": "^4.17.21",
-    "md5": "^2.3.0",
-    "mime-db": "^1.52.0",
-    "mime-types": "^2.1.35",
-    "node-fetch": "^2.6.7",
-    "tr46": "^0.0.3",
-    "webidl-conversions": "^3.0.1",
-    "whatwg-url": "^5.0.0"
+    "lodash-es": "^4.17.21"
   },
   "publishConfig": {
     "access": "public"
diff --git a/components/notion/sources/common/base.mjs b/components/notion/sources/common/base.mjs
index 954e5abf3b9e5..b2340a2a4dd4e 100644
--- a/components/notion/sources/common/base.mjs
+++ b/components/notion/sources/common/base.mjs
@@ -47,7 +47,7 @@ export default {
 
       return {
         id,
-        summary: `${summary}: ${title} - ${id}`,
+        summary: `${summary}: ${title || id}`,
         ts,
       };
     },
diff --git a/components/notion/sources/new-comment-created/new-comment-created.mjs b/components/notion/sources/new-comment-created/new-comment-created.mjs
index b8b04ae1ebb5a..99e6a361d3f18 100644
--- a/components/notion/sources/new-comment-created/new-comment-created.mjs
+++ b/components/notion/sources/new-comment-created/new-comment-created.mjs
@@ -5,26 +5,38 @@ export default {
   key: "notion-new-comment-created",
   name: "New Comment Created",
   description: "Emit new event when a new comment is created in a page or block. [See the documentation](https://developers.notion.com/reference/retrieve-a-comment)",
-  version: "0.0.1",
+  version: "0.0.2",
   type: "source",
   dedupe: "unique",
   props: {
     ...base.props,
+    infoLabel: {
+      type: "alert",
+      alertType: "info",
+      content: "Ensure the selected page is shared with your Pipedream integration to receive events.",
+    },
     pageId: {
       propDefinition: [
         base.props.notion,
         "pageId",
       ],
-      description: "Unique identifier of a page or block",
+      description: "Select the page to watch for new comments, or provide a page ID",
     },
   },
   methods: {
     ...base.methods,
     generateMeta(comment) {
+      const { id } = comment;
+      const text = comment.rich_text?.[0]?.plain_text;
+      const summary = text
+        ? `"${text.length > 40
+          ? text.slice(0, 35) + "[...]"
+          : text}"`
+        : `ID ${id}`;
       return {
-        id: comment.id,
-        summary: `New Comment ID: ${comment.id}`,
-        ts: comment.created_time,
+        id,
+        summary: `New Comment: ${summary}`,
+        ts: Date.parse(comment.created_time),
       };
     },
   },
diff --git a/components/notion/sources/new-database/new-database.mjs b/components/notion/sources/new-database/new-database.mjs
index 7b8bad6a0728b..dd8669d0357c6 100644
--- a/components/notion/sources/new-database/new-database.mjs
+++ b/components/notion/sources/new-database/new-database.mjs
@@ -5,10 +5,18 @@ import constants from "../common/constants.mjs";
 export default {
   ...base,
   key: "notion-new-database",
-  name: "New Database",
-  description: "Emit new event when a database is created. Note: Databases must be shared with your Pipedream Integtration to trigger event.",
-  version: "0.0.8",
+  name: "New Database Created",
+  description: "Emit new event when a database is created. [See the documentation](https://developers.notion.com/reference/database)",
+  version: "0.0.9",
   type: "source",
+  props: {
+    ...base.props,
+    infoLabel: {
+      type: "alert",
+      alertType: "info",
+      content: "Ensure Databases are shared with your Pipedream integration to receive events.",
+    },
+  },
   async run() {
     const databases = [];
     const params = this.lastCreatedSortParam();
diff --git a/components/notion/sources/new-page/new-page.mjs b/components/notion/sources/new-page/new-page.mjs
index 6a33e004f0eff..de1f75b0785b4 100644
--- a/components/notion/sources/new-page/new-page.mjs
+++ b/components/notion/sources/new-page/new-page.mjs
@@ -7,8 +7,8 @@ export default {
   ...base,
   key: "notion-new-page",
   name: "New Page in Database",
-  description: "Emit new event when a page in a database is created",
-  version: "0.0.10",
+  description: "Emit new event when a page is created in the selected database. [See the documentation](https://developers.notion.com/reference/page)",
+  version: "0.0.11",
   type: "source",
   props: {
     ...base.props,
diff --git a/components/notion/sources/page-or-subpage-updated/page-or-subpage-updated.mjs b/components/notion/sources/page-or-subpage-updated/page-or-subpage-updated.mjs
index ca198883b96ee..92461540fe57d 100644
--- a/components/notion/sources/page-or-subpage-updated/page-or-subpage-updated.mjs
+++ b/components/notion/sources/page-or-subpage-updated/page-or-subpage-updated.mjs
@@ -6,12 +6,17 @@ export default {
   ...base,
   key: "notion-page-or-subpage-updated",
   name: "Page or Subpage Updated", /* eslint-disable-line pipedream/source-name */
-  description: "Emit new event when a page or one of its sub-pages is updated.",
-  version: "0.0.6",
+  description: "Emit new event when the selected page or one of its sub-pages is updated. [See the documentation](https://developers.notion.com/reference/page)",
+  version: "0.0.7",
   type: "source",
   dedupe: "unique",
   props: {
     ...base.props,
+    infoLabel: {
+      type: "alert",
+      alertType: "info",
+      content: "Ensure the selected page is shared with your Pipedream integration to receive events.",
+    },
     pageId: {
       propDefinition: [
         base.props.notion,
diff --git a/components/notion/sources/updated-page-id/updated-page-id.mjs b/components/notion/sources/updated-page-id/updated-page-id.mjs
index d3e4b49e5d1f8..528452682e792 100644
--- a/components/notion/sources/updated-page-id/updated-page-id.mjs
+++ b/components/notion/sources/updated-page-id/updated-page-id.mjs
@@ -5,13 +5,18 @@ import constants from "../common/constants.mjs";
 export default {
   ...base,
   key: "notion-updated-page-id",
-  name: "Updated Page ID", /* eslint-disable-line pipedream/source-name */
-  description: "Emit new event when a selected page is updated",
-  version: "0.0.5",
+  name: "Page Updated", /* eslint-disable-line pipedream/source-name */
+  description: "Emit new event when a selected page is updated. [See the documentation](https://developers.notion.com/reference/page)",
+  version: "0.0.6",
   type: "source",
   dedupe: "unique",
   props: {
     ...base.props,
+    infoLabel: {
+      type: "alert",
+      alertType: "info",
+      content: "Ensure the selected page is shared with your Pipedream integration to receive events.",
+    },
     pageId: {
       propDefinition: [
         notion,
diff --git a/components/notion/sources/updated-page/updated-page.mjs b/components/notion/sources/updated-page/updated-page.mjs
index 8df7f1e15855b..e5d718b3c3083 100644
--- a/components/notion/sources/updated-page/updated-page.mjs
+++ b/components/notion/sources/updated-page/updated-page.mjs
@@ -7,9 +7,9 @@ import zlib from "zlib";
 export default {
   ...base,
   key: "notion-updated-page",
-  name: "Updated Page in Database", /* eslint-disable-line pipedream/source-name */
-  description: "Emit new event when a page in a database is updated. To select a specific page, use `Updated Page ID` instead",
-  version: "0.1.4",
+  name: "New or Updated Page in Database", /* eslint-disable-line pipedream/source-name */
+  description: "Emit new event when a page is created or updated in the selected database. [See the documentation](https://developers.notion.com/reference/page)",
+  version: "0.1.5",
   type: "source",
   dedupe: "unique",
   props: {
@@ -23,7 +23,7 @@ export default {
     includeNewPages: {
       type: "boolean",
       label: "Include New Pages",
-      description: "Set to `true` to emit events when pages are created. Set to `false` to ignore new pages.",
+      description: "Set to `false` to emit events only for updates, not for new pages.",
       default: true,
     },
     properties: {
@@ -40,7 +40,7 @@ export default {
     },
     alert: {
       type: "alert",
-      alertType: "info",
+      alertType: "warning",
       content: "Source not saving? Your database might be too large. If deployment takes longer than one minute, an error will occur.",
     },
   },
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d521b9d3b386d..d6fdba023b6ec 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8495,42 +8495,9 @@ importers:
       '@tryfabric/martian':
         specifier: ^1.2.4
         version: 1.2.4
-      asynckit:
-        specifier: ^0.4.0
-        version: 0.4.0
-      combined-stream:
-        specifier: ^1.0.8
-        version: 1.0.8
-      delayed-stream:
-        specifier: ^1.0.0
-        version: 1.0.0
-      form-data:
-        specifier: ^3.0.1
-        version: 3.0.2
       lodash-es:
         specifier: ^4.17.21
         version: 4.17.21
-      md5:
-        specifier: ^2.3.0
-        version: 2.3.0
-      mime-db:
-        specifier: ^1.52.0
-        version: 1.53.0
-      mime-types:
-        specifier: ^2.1.35
-        version: 2.1.35
-      node-fetch:
-        specifier: ^2.6.7
-        version: 2.7.0
-      tr46:
-        specifier: ^0.0.3
-        version: 0.0.3
-      webidl-conversions:
-        specifier: ^3.0.1
-        version: 3.0.1
-      whatwg-url:
-        specifier: ^5.0.0
-        version: 5.0.0
 
   components/nozbe_teams: {}
 


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 4**

<details>
<summary>🧹 Nitpick comments (2)</summary><blockquote>

<details>
<summary>components/notion/sources/new-comment-created/new-comment-created.mjs (1)</summary><blockquote>

`13-17`: **Add label and description to the infoLabel property.**

According to Pipedream component guidelines, all component props should have a label and description. While the content is informative, adding these properties would align with the platform's standards.


```diff
infoLabel: {
  type: "alert",
  alertType: "info",
  content: "Ensure the selected page is shared with your Pipedream integration to receive events.",
+ label: "Page Access Requirement",
+ description: "Information about sharing requirements for the Notion integration",
},
```

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: Lint Code Base</summary>

[warning] 13-13: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 13-13: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>

</details>

</blockquote></details>
<details>
<summary>components/notion/sources/page-or-subpage-updated/page-or-subpage-updated.mjs (1)</summary><blockquote>

`15-19`: **Add label and description to the infoLabel property.**

According to Pipedream component guidelines, all component props should have a label and description. While the content is informative, adding these properties would align with the platform's standards.


```diff
infoLabel: {
  type: "alert",
  alertType: "info",
  content: "Ensure the selected page is shared with your Pipedream integration to receive events.",
+ label: "Page Access Requirement",
+ description: "Information about sharing requirements for the Notion integration",
},
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

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

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between a43eb46f63ab2ae7d397279844dd400975161d67 and 510badba3491b6d7b179539afd7905182f6fb8c4.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `pnpm-lock.yaml` is excluded by `!**/pnpm-lock.yaml`

</details>

<details>
<summary>📒 Files selected for processing (24)</summary>

* `components/notion/actions/append-block/append-block.mjs` (6 hunks)
* `components/notion/actions/common/base-page-builder.mjs` (1 hunks)
* `components/notion/actions/create-comment/create-comment.mjs` (3 hunks)
* `components/notion/actions/create-page-from-database/create-page-from-database.mjs` (3 hunks)
* `components/notion/actions/create-page/create-page.mjs` (3 hunks)
* `components/notion/actions/duplicate-page/duplicate-page.mjs` (4 hunks)
* `components/notion/actions/find-page/find-page.mjs` (0 hunks)
* `components/notion/actions/query-database/query-database.mjs` (3 hunks)
* `components/notion/actions/retrieve-block/retrieve-block.mjs` (3 hunks)
* `components/notion/actions/retrieve-database-content/retrieve-database-content.mjs` (2 hunks)
* `components/notion/actions/retrieve-database-schema/retrieve-database-schema.mjs` (2 hunks)
* `components/notion/actions/retrieve-page-property-item/retrieve-page-property-item.mjs` (2 hunks)
* `components/notion/actions/retrieve-page/retrieve-page.mjs` (2 hunks)
* `components/notion/actions/search/search.mjs` (2 hunks)
* `components/notion/actions/update-page/update-page.mjs` (1 hunks)
* `components/notion/notion.app.mjs` (8 hunks)
* `components/notion/package.json` (1 hunks)
* `components/notion/sources/common/base.mjs` (1 hunks)
* `components/notion/sources/new-comment-created/new-comment-created.mjs` (1 hunks)
* `components/notion/sources/new-database/new-database.mjs` (1 hunks)
* `components/notion/sources/new-page/new-page.mjs` (1 hunks)
* `components/notion/sources/page-or-subpage-updated/page-or-subpage-updated.mjs` (1 hunks)
* `components/notion/sources/updated-page-id/updated-page-id.mjs` (1 hunks)
* `components/notion/sources/updated-page/updated-page.mjs` (3 hunks)

</details>

<details>
<summary>💤 Files with no reviewable changes (1)</summary>

* components/notion/actions/find-page/find-page.mjs

</details>

<details>
<summary>✅ Files skipped from review due to trivial changes (4)</summary>

* components/notion/actions/common/base-page-builder.mjs
* components/notion/package.json
* components/notion/sources/new-page/new-page.mjs
* components/notion/actions/retrieve-database-schema/retrieve-database-schema.mjs

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🪛 GitHub Check: Lint Code Base</summary>

<details>
<summary>components/notion/sources/new-comment-created/new-comment-created.mjs</summary>

[warning] 13-13: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 13-13: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>
<details>
<summary>components/notion/actions/create-comment/create-comment.mjs</summary>

[warning] 12-12: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 12-12: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>
<details>
<summary>components/notion/sources/new-database/new-database.mjs</summary>

[warning] 14-14: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 14-14: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>
<details>
<summary>components/notion/actions/update-page/update-page.mjs</summary>

[warning] 14-14: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 14-14: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (3)</summary>

* GitHub Check: pnpm publish
* GitHub Check: Verify TypeScript components
* GitHub Check: Publish TypeScript components

</details>

<details>
<summary>🔇 Additional comments (59)</summary><blockquote>

<details>
<summary>components/notion/sources/new-comment-created/new-comment-created.mjs (3)</summary>

`8-8`: **Version increment is appropriate.**

The version update from 0.0.1 to 0.0.2 properly reflects the changes made to this component.

---

`23-23`: **Improved property description for clarity.**

The updated description provides clearer guidance about how to use this property, making it more user-friendly.

---

`29-40`: **Enhanced metadata generation with better comment summarization.**

The improved `generateMeta` method now provides a more user-friendly summary by:
1. Extracting and displaying the actual comment text
2. Intelligently truncating long comments
3. Falling back to ID when text is unavailable
4. Using consistent timestamp parsing

This enhancement significantly improves the usefulness of the emitted events.

</details>
<details>
<summary>components/notion/sources/common/base.mjs (1)</summary>

`50-50`: **Improved robustness with title fallback mechanism.**

The change adds a fallback to use the ID when the title is not available, making the summary generation more robust. This is a good practice for handling potentially missing data.

</details>
<details>
<summary>components/notion/actions/retrieve-database-content/retrieve-database-content.mjs (2)</summary>

`6-7`: **Updated description and version appropriately.**

The description is now more clear and includes a helpful documentation link. The version increment from 0.0.3 to 0.0.4 correctly reflects these changes.

---

`20-22`: **Enhanced success message with dynamic content.**

The summary message now provides more valuable feedback by including the count of retrieved objects and handling singular/plural grammar correctly. This improvement gives users better visibility into the action's results.

</details>
<details>
<summary>components/notion/sources/page-or-subpage-updated/page-or-subpage-updated.mjs (2)</summary>

`9-10`: **Updated description with documentation link and proper version increment.**

The description now clearly explains the component's functionality and includes a documentation link, which is helpful for users. The version increment from 0.0.6 to 0.0.7 correctly reflects these changes.

---

`15-19`: **Good addition of informative alert for users.**

Adding this informational alert helps users understand the integration requirements, potentially reducing troubleshooting issues when events are not being received.

</details>
<details>
<summary>components/notion/actions/retrieve-page-property-item/retrieve-page-property-item.mjs (2)</summary>

`6-7`: **Documentation and version improvement**

The description now provides clearer instructions with a direct link to the documentation, which enhances usability. Version increment correctly reflects these changes.

---

`32-32`: **Improved language in success message**

The success message has been reworded to be more concise and professional.

</details>
<details>
<summary>components/notion/actions/retrieve-page/retrieve-page.mjs (1)</summary>

`6-7`: **Documentation and version improvement**

The updated description is more user-friendly and includes a direct link to the Notion API documentation. Version increment properly reflects these changes.

</details>
<details>
<summary>components/notion/sources/updated-page/updated-page.mjs (3)</summary>

`10-12`: **Improved component naming and description**

The name and description have been updated to more accurately reflect that this component handles both new and updated pages. The documentation link is a helpful addition, and the version increment is appropriate.

---

`26-26`: **Clearer property description**

The updated description for `includeNewPages` provides better clarity about the filtering behavior of this property.

---

`43-43`: **Increased alert visibility**

Changing the alert type from "info" to "warning" appropriately increases the visibility of an important message about potential issues with large databases.

</details>
<details>
<summary>components/notion/sources/updated-page-id/updated-page-id.mjs (2)</summary>

`8-10`: **Simplified naming and improved documentation**

The component name has been simplified to "Page Updated" and the description now includes a helpful link to the Notion API documentation. Version increment correctly reflects these changes.

---

`15-19`: **Added informative guidance**

The new `infoLabel` property provides essential information to users about sharing requirements, which is crucial for the proper functioning of this integration. This addition helps prevent configuration issues.

</details>
<details>
<summary>components/notion/actions/create-page/create-page.mjs (3)</summary>

`9-10`: **Version increment and description improvement look good.**

The description has been simplified and the documentation link addition is helpful. Version increment is appropriate for these user-facing changes.

---

`20-20`: **More user-friendly property description.**

The updated description provides clearer guidance on how to use this field, making it more intuitive for users to understand they can either select from existing pages or manually input an ID.

---

`35-40`: **Improved property definition for pageContent.**

Changing from an inline definition to using propDefinition is more consistent with other properties and improves maintainability by centralizing the definition in the notion app object.

</details>
<details>
<summary>components/notion/actions/duplicate-page/duplicate-page.mjs (4)</summary>

`9-10`: **Version increment and description improvement look good.**

The description now uses imperative form which is consistent with action naming conventions, and includes a helpful documentation link. Version increment is appropriate for these changes.

---

`19-20`: **More instructive property description.**

The updated description provides better guidance on how to use this field, making it clearer that users can either select from existing pages or manually provide an ID.

---

`34-35`: **Improved property description for parentId.**

The updated description is more comprehensive and provides clearer guidance on how to use this field, explaining both selection and manual ID entry options.

---

`68-68`: **Concise summary message.**

The updated summary message is more concise while still clearly communicating the successful action, and maintains the helpful link to the created page.

</details>
<details>
<summary>components/notion/actions/create-comment/create-comment.mjs (4)</summary>

`7-8`: **Version increment and description improvement look good.**

The description now uses imperative form which is consistent with action naming conventions, and includes a helpful documentation link. Version increment is appropriate for these changes.

---

`27-27`: **Improved property description with documentation link.**

Adding a link to the documentation for retrieving a discussion ID is very helpful for users who may not be familiar with this concept.

---

`38-38`: **Consistent error message.**

The error message now matches the guidance provided in the infoLabel, creating a more cohesive user experience.

---

`54-54`: **Improved summary message.**

The updated summary message is more consistent with other components' language patterns and clearly communicates the successful action.

</details>
<details>
<summary>components/notion/sources/new-database/new-database.mjs (1)</summary>

`8-10`: **Clearer name, improved description, and appropriate version bump.**

The name change to "New Database Created" is more precise about the triggering event. The description update provides a clearer explanation with a helpful documentation link. Version increment is appropriate for these changes.

</details>
<details>
<summary>components/notion/actions/update-page/update-page.mjs (2)</summary>

`9-10`: **Improved clarity in description and appropriate version bump.**

The updated description provides clearer guidance to users about the action's purpose and redirects them to the appropriate action for appending content. The version bump correctly follows semantic versioning for a minor update.

---

`25-25`: **Enhanced property description for better user guidance.**

The improved description provides clearer instructions about selecting the parent database and the requirements when using custom expressions, which should help reduce user errors.

</details>
<details>
<summary>components/notion/actions/query-database/query-database.mjs (3)</summary>

`7-8`: **Improved description and proper version increment.**

The updated description now clearly specifies that the action supports filtering, which enhances user understanding of the component's capabilities. The version bump follows semantic versioning conventions for a patch update.

---

`19-20`: **Enhanced filter property label and description.**

Renaming the label to "Filter (query)" and expanding the description with a more relevant example improves clarity and provides better guidance for users on how to structure their filter expressions.

---

`31-35`: **Dynamic summary message with proper pluralization.**

The updated summary message now dynamically includes the number of results retrieved and correctly handles singular vs. plural forms, providing users with more informative feedback after the action completes.

</details>
<details>
<summary>components/notion/actions/retrieve-block/retrieve-block.mjs (4)</summary>

`6-7`: **Improved description clarity and appropriate version bump.**

The description now more clearly explains what the action does and provides context about block types. The version increment follows semantic versioning for a patch update.

---

`17-17`: **More user-friendly block ID description.**

The updated description makes it clearer to users that they can either select an existing block or provide a block ID directly, improving usability.

---

`21-22`: **Enhanced label and description for retrieveChildren property.**

The label is now more concise, and the description provides more context with a documentation reference, which helps users understand the property's purpose better.

---

`32-34`: **Improved summary message with conditional child count.**

The summary message now provides more contextual information by conditionally including the number of children retrieved when the `retrieveChildren` option is enabled, giving users better feedback about the operation results.


Note: The use of the optional chaining operator (`?.`) with `length` is good practice, but you might want to ensure the children array exists before checking its length to avoid potential issues.

</details>
<details>
<summary>components/notion/actions/append-block/append-block.mjs (11)</summary>

`8-10`: **Improved action description for better clarity.**

The updated description more accurately explains the action's capability to append both new and existing blocks to a parent, and includes a documentation link for further reference.

---

`20-21`: **Enhanced parent block ID description.**

The improved description more clearly indicates that users can either select an existing block/page or directly provide an ID, which enhances usability.

---

`22-45`: **Added flexible block type selection for better user experience.**

The new `blockTypes` property allows users to select which types of blocks they want to append, making the component more flexible and user-friendly. The options are clearly labeled with comprehensive descriptions.

---

`50-52`: **Improved blockObjects description and added hidden property.**

The enhanced description provides more context about block objects and includes a documentation reference. The `hidden` property works with the new `blockTypes` selection to show only relevant fields.

---

`61-62`: **Updated blockIds description and visibility control.**

The improved description clarifies that selecting a page will append its children, giving users better guidance on the expected behavior when selecting different types of items.

---

`67-69`: **Enhanced markupContents description with documentation reference.**

The updated description now includes a helpful link to Notion's documentation about Markdown syntax, which will assist users in formatting their content correctly.

---

`74-75`: **Improved imageUrls description with documentation reference.**

The enhanced description provides a link to Notion's documentation about image blocks, which will help users understand the supported formats and expectations.

---

`78-91`: **Added dynamic property visibility based on user selection.**

The new `additionalProps` method effectively implements the logic to show or hide properties based on the user's selection in the `blockTypes` field, improving the user interface by reducing clutter and showing only relevant fields.

---

`103-104`: **Implemented conditional processing based on selected block types.**

The updated run method now checks the `blockTypes` selection before processing each type of block, ensuring that only the user-selected block types are processed. This makes the component more efficient and respects user choices.



Also applies to: 106-106, 116-116, 126-126, 134-134

---

`108-110`: **Safe parsing of block objects.**

Good implementation that handles both string and object inputs, ensuring robust processing of block objects provided by users, especially when they come from previous steps in a workflow.

---

`157-160`: **Simplified API call with better parameter organization.**

The API call to `appendBlock` is now better formatted with clearer parameter organization, improving code readability.

</details>
<details>
<summary>components/notion/actions/search/search.mjs (3)</summary>

`6-8`: **Component metadata improvements enhance discoverability**

The name change from "Search" to "Find Pages or Databases" is more descriptive and action-oriented, which will improve user understanding. The documentation link formatting is also properly implemented, and the version increment follows proper semantic versioning practice.

---

`12-16`: **Better property definition for query input**

The title property has been refactored to use direct type definition rather than propDefinition, with a more descriptive label "Query (Title)" that clarifies its purpose. This change improves user understanding of what this field does.

---

`25-28`: **Simplified summary method with improved formatting**

The getSummary method has been simplified by:
1. Removing the unused title parameter from destructuring
2. Using optional chaining for safer property access
3. Directly referencing this.title instead of using a conditional

These changes make the code more concise and more reliable.

</details>
<details>
<summary>components/notion/notion.app.mjs (3)</summary>

`11-11`: **Improved property descriptions enhance user experience**

The descriptions across multiple properties have been updated to be more user-friendly and action-oriented. Common patterns include:
1. Using "Select a..." instead of just naming the property
2. Adding "Select one or more..." for multi-select properties
3. Using more direct and clear language

These changes will significantly improve usability by giving clearer guidance to users.



Also applies to: 23-23, 35-35, 49-49, 80-80, 88-88, 107-107, 113-113, 119-119, 132-132, 142-142, 151-151, 157-157

---

`144-145`: **Added proper page size constraints**

Adding explicit min (1) and max (100) constraints to the pageSize property ensures that users will provide values within the allowed range, preventing potential API errors.

---

`164-169`: **New pageContent property adds critical functionality**

The addition of the pageContent property in the app's propDefinitions is important as it:
1. Provides a standardized way to define page content across components
2. Includes helpful documentation reference for Markdown syntax
3. Makes the property available to be reused via propDefinition in other components

This is an essential improvement that supports the refactoring in the create-page components.

</details>
<details>
<summary>components/notion/actions/create-page-from-database/create-page-from-database.mjs (5)</summary>

`9-10`: **Updated description and version**

The description has been changed to use imperative form ("Create" instead of "Creates") for consistency with other actions, and the version is properly incremented from 0.1.15 to 0.1.16 to reflect these changes.

---

`20-20`: **Improved parent database selection description**

The updated description "Select a parent database or provide a database ID" is more user-friendly and explicit about what the user needs to do, improving the user experience.

---

`43-43`: **Updated alert content to match UI element name**

The alert content now references "Page Content" prop with backticks for better readability, matching how the field appears in the UI.

---

`46-49`: **Refactored pageContent to use central propDefinition**

The pageContent property has been refactored to use the propDefinition from the notion app, which:
1. Centralizes the definition for better maintenance
2. Ensures consistency across components
3. Allows for easier updates to the property in the future

This is a good architectural improvement.

---

`78-95`: <details>
<summary>❓ Verification inconclusive</summary>

**Verify that block processing logic works with the new pageContent implementation**

The run method handles blocks in chunks of MAX_BLOCKS (100), which appears to be working correctly. However, since the pageContent implementation has changed, it would be good to verify that the createBlocks method (called on line 70) still processes the content as expected.

---

🏁 Script executed:

```shell
#!/bin/bash
# Search for the createBlocks method implementation to verify compatibility with new pageContent

# First look for the base-page-builder.mjs file that's imported
echo "Looking for base-page-builder.mjs file..."
find . -name "base-page-builder.mjs" | xargs cat | grep -A 20 "createBlocks"

# Also check if there are any tests that verify this functionality
echo "Looking for tests that verify block creation..."
find . -name "*test*" | grep -i notion | xargs grep -l "createBlocks" || echo "No direct tests found"
```

Length of output: 798

---



</details>

**Action Required: Verify Block Processing Logic for New pageContent**

The chunking logic in the `run` method (splitting blocks by `MAX_BLOCKS`) is operating as expected. The `createBlocks` method, as implemented in `base-page-builder.mjs`, now simply calls `markdownToBlocks` with the provided `pageContent`. However, no direct tests for this behavior were found in the codebase. Please ensure that:

- The `markdownToBlocks` function correctly converts the new page content into blocks.
- You manually verify or add tests for the `createBlocks` functionality to catch any potential regressions stemming from the new pageContent implementation.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-04T20:50:57Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 0**

<details>
<summary>🧹 Nitpick comments (1)</summary><blockquote>

<details>
<summary>components/notion/package.json (1)</summary><blockquote>

`12-17`: **Streamlined Dependencies Confirmation**

The dependencies section now retains only the essential dependencies, most notably `"lodash-es": "^4.17.21"`, while several other libraries have been removed. Verify that the Notion component’s code no longer requires the removed dependencies and that any functionality relying on them has been refactored or removed accordingly.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

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

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 510badba3491b6d7b179539afd7905182f6fb8c4 and 3a28f5e0592cc964b32afa43cee8c0d7d12c243b.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `pnpm-lock.yaml` is excluded by `!**/pnpm-lock.yaml`

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `components/notion/package.json` (2 hunks)

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (2)</summary>

* GitHub Check: Publish TypeScript components
* GitHub Check: Verify TypeScript components

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>components/notion/package.json (1)</summary>

`3-3`: <details>
<summary>❓ Verification inconclusive</summary>

**Version Update Verification**

The version has been updated to "0.4.0". Please ensure that this change is reflected in your release notes and that any breaking changes are clearly documented.

---



</details>

**Version update verified in components/notion/package.json as "0.4.0".**  

- The package.json file correctly reflects the version update.
- Please double-check that this update is also incorporated into your release notes and that any breaking changes are clearly documented.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-04T20:53:30Z
user: login: jcortes
body: Hi @GTFalcao lgtm! Ready for QA!
state: DISMISSED
author_association: CONTRIBUTOR
submitted_at: 2025-03-04T22:37:54Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 0**

<details>
<summary>🧹 Nitpick comments (1)</summary><blockquote>

<details>
<summary>components/notion/actions/append-block/append-block.mjs (1)</summary><blockquote>

`90-91`: **Consider handling potential undefined blockTypes**

While destructuring blockTypes improves code readability, consider adding a default value to handle cases where blockTypes might be undefined to prevent potential runtime errors.

```diff
- const { blockTypes } = this;
+ const { blockTypes = [] } = this;
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

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

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 8dc6a6ecef0205bfc400d93048c06732b8ae5a3c and 84ca40d1144e608c04d5f133529485d3ea809f13.

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `components/notion/actions/append-block/append-block.mjs` (5 hunks)
* `components/notion/notion.app.mjs` (9 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* components/notion/notion.app.mjs

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (3)</summary>

* GitHub Check: pnpm publish
* GitHub Check: Verify TypeScript components
* GitHub Check: Publish TypeScript components

</details>

<details>
<summary>🔇 Additional comments (11)</summary><blockquote>

<details>
<summary>components/notion/actions/append-block/append-block.mjs (11)</summary>

`8-10`: **Improved description and appropriate version bump**

The description now more accurately reflects the dual functionality of appending both new and existing blocks. The version increment from 0.2.17 to 0.3.0 follows semantic versioning principles, appropriately signaling the addition of new features.

---

`20-21`: **Clearer description for better user guidance**

The updated description provides better clarity about the property's purpose, explicitly informing users they can either select from existing options or provide an ID directly.

---

`22-41`: **Great usability enhancement with dynamic block type selection**

This new property significantly improves the user experience by allowing users to explicitly select which types of blocks they want to append. The reloadProps flag ensures that the UI will update dynamically to show only relevant fields based on user selection.

---

`48-51`: **Enhanced clarity for block selection**

The improved label and description provide better guidance on how this property works, specifically clarifying that selecting a page will append its children. The hidden flag correctly integrates with the new dynamic UI approach.

---

`52-58`: **Appropriate rename to more accurate terminology**

Renaming from "markupContents" to "markdownContents" improves accuracy and clarity since Markdown is the specific format being used. The updated description and documentation link provide valuable guidance to users.

---

`62-64`: **Enhanced documentation for image URLs**

The addition of more detailed description and documentation link helps users understand how to properly use image blocks in Notion. The hidden flag correctly integrates with the dynamic UI approach.

---

`66-78`: **Well-implemented dynamic property visibility**

This method elegantly handles the dynamic showing/hiding of properties based on the user's selection in blockTypes. The implementation is clean and efficient, looping through all properties that need to be conditionally displayed.

---

`94-101`: **Improved conditional processing of block IDs**

The updated condition ensures that block IDs are only processed if the user has selected this option, which aligns with the new dynamic UI approach while maintaining the existing null/empty checks for robustness.

---

`104-109`: **Updated references to the renamed property**

The condition and loop correctly use the renamed markdownContents property, maintaining consistency with the property changes. This ensures proper functionality with the new property name.

---

`112-124`: **Improved conditional processing of image URLs**

Similar to the other block types, this change ensures that image URLs are only processed if the user has selected this option, aligning with the dynamic UI approach.

---

`135-139`: **Minor formatting improvements**

The formatting changes to the appendBlock call maintain the same functionality while potentially improving code readability and consistency with other code in the codebase.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-09T21:43:10Z
user: login: jcortes
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-10T17:54:43Z

Review comments:
diff_hunk: @@ -17,7 +17,10 @@ export default {
   },
   async run({ $ }) {
     const response = await this.notion.retrievePage(this.pageId);
-    $.export("$summary", "Retrieved page successfully");
+    const title = response?.properties?.Name?.title[0]?.plain_text;
+    $.export("$summary", `Sucessfully retrieved page${title
+      ? ` "${title}"`
+      : ""}`);
path: components/notion/actions/retrieve-page/retrieve-page.mjs
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Enhanced success message with dynamic content**

The success message now dynamically includes the page title when available, making it more informative and user-friendly. However, there's a typo in the message.


```diff
-    $.export("$summary", `Sucessfully retrieved page${title
+    $.export("$summary", `Successfully retrieved page${title
      ? ` "${title}"`
      : ""}`);
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    const title = response?.properties?.Name?.title[0]?.plain_text;
    $.export("$summary", `Successfully retrieved page${title
      ? ` "${title}"`
      : ""}`);
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-04T20:50:56Z
author_association: CONTRIBUTOR
diff_hunk: @@ -4,23 +4,27 @@
 export default {
   key: "notion-create-comment",
   name: "Create Comment",
-  description: "Creates a comment in a page or existing discussion thread. [See the documentation](https://developers.notion.com/reference/create-a-comment)",
-  version: "0.0.1",
+  description: "Create a comment in a page or existing discussion thread. [See the documentation](https://developers.notion.com/reference/create-a-comment)",
+  version: "0.0.2",
   type: "action",
   props: {
     notion,
+    infoLabel: {
+      type: "alert",
+      alertType: "info",
+      content: "Provide either a page ID or a discussion thread ID to create the comment under.",
+    },
path: components/notion/actions/create-comment/create-comment.mjs
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Add required properties to the infoLabel component prop.**

The infoLabel addition is helpful for user guidance, but according to component guidelines, it's missing required label and description properties.

```diff
infoLabel: {
  type: "alert",
  alertType: "info",
+ label: "Comment Location",
+ description: "Information about where to create the comment",
  content: "Provide either a page ID or a discussion thread ID to create the comment under.",
},
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    infoLabel: {
      type: "alert",
      alertType: "info",
      label: "Comment Location",
      description: "Information about where to create the comment",
      content: "Provide either a page ID or a discussion thread ID to create the comment under.",
    },
`````

</details>

<!-- suggestion_end -->

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: Lint Code Base</summary>

[warning] 12-12: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 12-12: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-04T20:50:56Z
author_association: CONTRIBUTOR
diff_hunk: @@ -5,10 +5,18 @@
 export default {
   ...base,
   key: "notion-new-database",
-  name: "New Database",
-  description: "Emit new event when a database is created. Note: Databases must be shared with your Pipedream Integtration to trigger event.",
-  version: "0.0.8",
+  name: "New Database Created",
+  description: "Emit new event when a database is created. [See the documentation](https://developers.notion.com/reference/database)",
+  version: "0.0.9",
   type: "source",
+  props: {
+    ...base.props,
+    infoLabel: {
+      type: "alert",
+      alertType: "info",
+      content: "Ensure Databases are shared with your Pipedream integration to receive events.",
+    },
+  },
path: components/notion/sources/new-database/new-database.mjs
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Add required properties to the infoLabel component prop.**

The infoLabel addition is helpful for guiding users about sharing requirements, but according to component guidelines, it's missing required label and description properties.

```diff
infoLabel: {
  type: "alert",
  alertType: "info",
+ label: "Database Sharing",
+ description: "Information about sharing requirements",
  content: "Ensure Databases are shared with your Pipedream integration to receive events.",
},
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
  props: {
    ...base.props,
    infoLabel: {
      type: "alert",
      alertType: "info",
      label: "Database Sharing",
      description: "Information about sharing requirements",
      content: "Ensure Databases are shared with your Pipedream integration to receive events.",
    },
  },
`````

</details>

<!-- suggestion_end -->

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: Lint Code Base</summary>

[warning] 14-14: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 14-14: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-04T20:50:56Z
author_association: CONTRIBUTOR
diff_hunk: @@ -6,18 +6,23 @@
   ...base,
   key: "notion-update-page",
   name: "Update Page",
-  description: "Updates page property values for the specified page. Properties that are not set will remain unchanged. To append page content, use the *append block* action. [See the documentation](https://developers.notion.com/reference/patch-page)",
-  version: "1.1.3",
+  description: "Update a page's property values. To append page content, use the *Append Block* action instead. [See the documentation](https://developers.notion.com/reference/patch-page)",
+  version: "1.1.4",
   type: "action",
   props: {
     notion,
+    infoLabel: {
+      type: "alert",
+      alertType: "info",
+      content: "Properties that are not set will remain unchanged.",
+    },
path: components/notion/actions/update-page/update-page.mjs
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Add label and description to infoLabel prop.**

The infoLabel prop is missing required label and description properties according to component guidelines.


```diff
 infoLabel: {
   type: "alert",
   alertType: "info",
   content: "Properties that are not set will remain unchanged.",
+  label: "Note",
+  description: "Important information about property updates",
 },
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    infoLabel: {
      type: "alert",
      alertType: "info",
      content: "Properties that are not set will remain unchanged.",
      label: "Note",
      description: "Important information about property updates",
    },
`````

</details>

<!-- suggestion_end -->

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: Lint Code Base</summary>

[warning] 14-14: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 14-14: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-03-04T20:50:56Z
author_association: CONTRIBUTOR

PR comments:
user: login: vercel[bot]
created_at: 2025-03-04T20:46:03Z
body: [vc]: #jv/nIMJAT9P3KRx4MU2X2DiXcTwFmcO4ljRfl+Be53E=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJwaXBlZHJlYW0tZG9jcy1yZWRpcmVjdC1kby1ub3QtZWRpdCIsInJvb3REaXJlY3RvcnkiOiJkb2NzIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6IiJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vcGlwZWRyZWFtZXJzL3BpcGVkcmVhbS1kb2NzLXJlZGlyZWN0LWRvLW5vdC1lZGl0L0NKVG1RQWs5a3VpYmpVZ2plcU1wRjVHRTNOUUEiLCJuZXh0Q29tbWl0U3RhdHVzIjoiSUdOT1JFRCJ9LHsibmFtZSI6InBpcGVkcmVhbS1kb2NzIiwicm9vdERpcmVjdG9yeSI6ImRvY3MiLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9waXBlZHJlYW1lcnMvcGlwZWRyZWFtLWRvY3MvM1ZoZ0FSd1ZaODI0a1pyNnE2V1Uzc3ZxNFN0QSIsIm5leHRDb21taXRTdGF0dXMiOiJJR05PUkVEIn0seyJuYW1lIjoiZG9jcy12MiIsInJvb3REaXJlY3RvcnkiOiJkb2NzLXYyIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6IiJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vcGlwZWRyZWFtZXJzL2RvY3MtdjIvNmJrQmlDUFN2QWpxVVo3MVFBcVA4OHN6Zmd2UiIsIm5leHRDb21taXRTdGF0dXMiOiJJR05PUkVEIiwicHJldmlld1VybCI6ImRvY3MtdjItZ2l0LTE1NjI5LW5vdGlvbi11c2FiaWxpdHktYXVkaXQtcGlwZWRyZWFtZXJzLnZlcmNlbC5hcHAifV19
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)


<details><summary>3 Skipped Deployments</summary>

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **docs-v2** | ⬜️ Ignored ([Inspect](https://vercel.com/pipedreamers/docs-v2/6bkBiCPSvAjqUZ71QAqP88szfgvR)) | [Visit Preview](https://docs-v2-git-15629-notion-usability-audit-pipedreamers.vercel.app) |  | Mar 9, 2025 9:55pm |
| **pipedream-docs** | ⬜️ Ignored ([Inspect](https://vercel.com/pipedreamers/pipedream-docs/3VhgARwVZ824kZr6q6WU3svq4StA)) |  |  | Mar 9, 2025 9:55pm |
| **pipedream-docs-redirect-do-not-edit** | ⬜️ Ignored ([Inspect](https://vercel.com/pipedreamers/pipedream-docs-redirect-do-not-edit/CJTmQAk9kuibjUgjeqMpF5GE3NQA)) |  |  | Mar 9, 2025 9:55pm |
</details>




author_association: NONE
user: login: coderabbitai[bot]
created_at: 2025-03-04T20:46:08Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough
This pull request updates multiple Notion integration components. Changes include refinements to metadata (descriptions, version increments) and property definitions. Several actions now feature rephrased instructions and dynamic property handling such as the new `blockTypes` and `infoLabel` properties. Some files have also undergone control flow adjustments (e.g., conditionally processing block types in the run method), and summary messages have been enhanced with dynamic data (such as counts and titles). In addition, one obsolete file was removed, and the Notion app configuration was improved.

## Changes

| File(s) | Change Summary |
|---------|----------------|
| `components/notion/actions/append-block/append-block.mjs` | Updated description and version; added new `blockTypes` property and `additionalProps` method; hidden legacy block properties; adjusted run method to conditionally process block types. |
| `components/notion/actions/common/base-page-builder.mjs` | Refined the string in `_buildPropDescription` by changing “type docs here” to “type documentation here”. |
| `components/notion/actions/create-comment/create-comment.mjs` | Incremented version; updated descriptions, error messages, and summary text; added an `infoLabel` property for user guidance. |
| `components/notion/actions/create-page-from-database/create-page-from-database.mjs, components/notion/actions/create-page/create-page.mjs` | Updated descriptions and versions; revised parent property text; restructured `pageContent` property to use a `propDefinition` array. |
| `components/notion/actions/duplicate-page/duplicate-page.mjs` | Adjusted version and descriptions; clarified `pageId` and `parentId` props; revised summary message formatting. |
| `components/notion/actions/find-page/find-page.mjs` | Removed the exported object (file deletion). |
| `components/notion/actions/query-database/query-database.mjs` | Updated filter label and description; incremented version; modified run method to export a dynamic summary with result counts. |
| `components/notion/actions/retrieve-block/retrieve-block.mjs` | Incremented version; updated property descriptions for block identification and children retrieval; refined summary message to include children count. |
| `components/notion/actions/retrieve-database-content/retrieve-database-content.mjs, components/notion/actions/retrieve-database-schema/retrieve-database-schema.mjs, components/notion/actions/retrieve-page-property-item/retrieve-page-property-item.mjs, components/notion/actions/retrieve-page/retrieve-page.mjs` | Enhanced version and description updates across retrieve actions; improved summary outputs by including dynamic details such as counts and titles. |
| `components/notion/actions/search/search.mjs` | Renamed the action; updated description and version; redefined the `title` property and simplified the summary method. |
| `components/notion/actions/update-page/update-page.mjs` | Updated description and version; added an `infoLabel` property; clarified the parent property instructions. |
| `components/notion/notion.app.mjs` | Revised multiple property descriptions and labels; added a new `pageContent` property for better content input. |
| `components/notion/package.json` | Updated package version from "0.3.0" to "0.4.0". |
| `components/notion/sources/common/base.mjs` | Modified summary generation logic in `generateMeta` to use a fallback (ID) when the title is missing. |
| `components/notion/sources/new-comment-created/new-comment-created.mjs` | Incremented version; added an `infoLabel`; updated the `pageId` description; enhanced summary formatting to include truncated comment text and properly parsed timestamps. |
| `components/notion/sources/new-database/new-database.mjs` | Renamed event to “New Database Created”; updated description with a documentation link; incremented version; added a new `infoLabel` property in a `props` object. |
| `components/notion/sources/new-page/new-page.mjs` | Updated description to clarify the event details with a documentation link; incremented version. |
| `components/notion/sources/page-or-subpage-updated/page-or-subpage-updated.mjs` | Enhanced description to include a documentation link; incremented version; added an `infoLabel` property. |
| `components/notion/sources/updated-page-id/updated-page-id.mjs` | Renamed to “Page Updated”; expanded description to include a documentation link; incremented version; added an `infoLabel` property. |
| `components/notion/sources/updated-page/updated-page.mjs` | Renamed to “New or Updated Page in Database”; updated description with documentation and clarified property details; incremented version; revised alert type and includeNewPages description. |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant U as User
    participant A as Append Block Action
    participant P as Property Manager
    participant N as Notion API

    U->>A: Initiate block append action
    A->>P: Call additionalProps(blockTypes)
    P-->>A: Return updated property visibility
    A->>A: Check blockTypes and select block inputs
    A->>N: Process and append selected blocks
    N-->>A: Return API response
    A->>U: Return summary with block details
```

## Possibly related PRs
- **PipedreamHQ/pipedream#13889:** The changes in the main PR, which involve significant modifications to the properties and logic for appending blocks in Notion, are directly related to the changes in the retrieved PR, which introduces a new method for processing block creation in chunks within the same `append-block.mjs` file.
- **PipedreamHQ/pipedream#14202:** The changes in the main PR are related to the modifications in the `append-block.mjs` file, specifically focusing on the properties and logic for appending blocks, which aligns with the updates made in the retrieved PR that also involves the `append-block.mjs` file and its functionality.
- **PipedreamHQ/pipedream#13855:** The changes in the main PR regarding the introduction of the `blockTypes` property and modifications to the `pageContent` structure are related to the updates in the retrieved PR that also involve the `Page Content` property, specifically marking it as optional, indicating a direct connection at the code level.

## Suggested labels
`enhancement`

## Suggested reviewers
- michelle0927
- jcortes

## Poem
> Oh, I’m a rabbit, hopping with cheer,  
> In the fields of code so fresh and clear.  
> Blocks get appended with thoughtful tweaks,  
> Comments and pages now speak in sleek peaks.  
> With every version, our journey's bright,  
> Hoppity changes from morning till night!  
> 🐰✨

<!-- walkthrough_end -->
<!-- This is an auto-generated comment: all tool run failures by coderabbit.ai -->

> [!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.
> 
> <details>
> <summary>🔧 ESLint</summary>
> 
> > 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.
> 
> <details>
> <summary>components/notion/actions/create-comment/create-comment.mjs</summary>
> 
> 
> 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)
> 
> </details>
> 
> </details>

<!-- end of auto-generated comment: all tool run failures by coderabbit.ai -->


---

<details>
<summary>📜 Recent review details</summary>

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

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 84ca40d1144e608c04d5f133529485d3ea809f13 and 97f5c7ff1027333d8f2867337e001b9104aeca74.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `components/notion/actions/create-comment/create-comment.mjs` (3 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🪛 GitHub Check: Lint Code Base</summary>

<details>
<summary>components/notion/actions/create-comment/create-comment.mjs</summary>

[warning] 12-12: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 12-12: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (3)</summary>

* GitHub Check: pnpm publish
* GitHub Check: Verify TypeScript components
* GitHub Check: Publish TypeScript components

</details>

<details>
<summary>🔇 Additional comments (5)</summary><blockquote>

<details>
<summary>components/notion/actions/create-comment/create-comment.mjs (5)</summary>

`12-16`: **Add required properties to the infoLabel component prop**

The infoLabel addition is helpful for user guidance, but it's still missing the required `label` and `description` properties according to component guidelines, as flagged by the linter.

```diff
infoLabel: {
  type: "alert",
  alertType: "info",
+ label: "Comment Location",
+ description: "Information about where to create the comment",
  content: "Provide either a Page ID or a Discussion ID to create the comment under.",
},
```

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 GitHub Check: Lint Code Base</summary>

[warning] 12-12: 
Component prop infoLabel must have a label. See https://pipedream.com/docs/components/guidelines/#props      

---

[warning] 12-12: 
Component prop infoLabel must have a description. See https://pipedream.com/docs/components/guidelines/#props

</details>

</details>

---

`7-8`: **LGTM: Documentation and version updates are appropriate**

Good improvements to the component description with added documentation link, and proper version increment for these changes.

---

`27-28`: **LGTM: Improved property description**

Nice enhancement of the discussionId description with added documentation link, making it more helpful for users.

---

`38-39`: **LGTM: Consistent error messaging**

The error message now matches the guidance provided in the infoLabel, which improves consistency.

---

`54-55`: **LGTM: Improved summary message format**

The success message format is now more consistent with other components in the codebase.

</details>

</blockquote></details>

</details>
<!-- internal state start -->


<!-- DwQgtGAEAqAWCWBnSTIEMB26CuAXA9mAOYCmGJATmriQCaQDG+Ats2bgFyQAOFk+AIwBWJBrngA3EsgEBPRvlqU0AgfFwA6NPEgQAfACgjoCEYDEZyAAUASpADK2VmgqyjcEj2wAbb5AokAI7Y0riQ4rjedJAARABy+OL4WNiIKvDe6vLwzLz4UmwYuIgxkADuaMiI2ALM6jT0cuGwnqmUkADi0ABiaN4MaPjoGPSo8EpF8ABm8NFNuC2QGE4C7QCMAKwAHGsAzBowi7w5LvLc2BTc+Iie+FPNqLYoyAQouVGFYanpmbjyZLBMAwSJ9kAFvNRoq8EkkMAcAJJhVCZDAAayhQwWniQ1U8y2Yqz4mwAbAAmACcABoUCN4ANxBgiM1qCgwmhaLQAogblVuKJpnSFBhgRQMMh8HwAsFQuK8CjovAsAsWTiQgcPNY7AMsKt0AxgdyobAKPhsERYM1PHkJONogBVGwAGS4AG0YfBkpBvmpftlciaCuxEABdAAUsFwuG4iA4AHpY0R1LAahomMxY1Z4HzOSQ0MwABIARVj3CzdACeZLPm8sc2O12AEoNEZ9MZwFAyPQ7jgCMQyMoGgpWOwuLx+MJROIpDJ5EwlFRVOotDpWyYoHAxshMD3CKRyFRB2nPlwqGVINVnK5IE058pF5ptLowIY26YDGmruQiohYxhEh6MFjNAxAAn80G4PkRjAARvHwBhUSAiDO2g2D4I0ZghBjAwYhwgwLEgABBeE+33SF6AvZhTn4e4GEBRlpHcRZaMwUhkEVS0FCUGkJHwbwpHPeAiAwAVtTCZhFBE6hQPCTEjhNPkKHEaRhnoWDEwYSApgldAkNpRlr1Q1E2Kwd1knVRYAAMlEQBgKCzWELM02ZvHoQEZBIMgvW4WgyJkxgITsqZ5CxPVYQAcmQc5LmuEhqWYxlFSZKYTWYWIAGEKxoLcRh0yDaBkQyXlkzxED5BgBWibgXHYUpXhiAjdPocgz0wWhY20kgAA8kAZJkYLgoy/JC0r+RmSrqqKDRSg1CypAoRAAMctzrw8rBFVskF2GiZKWFiAAGDRSQ0NYAHZaqGGIDv2PaYmbAwCKWEgzzyBS/mpCz+vg6BZD5RALOpZbVk8xVcBNWhsGBehXj6WCzzaea/JG8qgo4v5fuogyBpeFp5DKJALWhxrzNQF7KD+GkGG8bBrP4bhYWQLS+HAvLEsgLqetZz6jOpa1xlZgBZFxUVofAyiwJginYalWp4AM+f0k5SEgB1HUQalc1o8ok3QBQKC5T9aFZiFVj8GXrNs+yAPMq0AhtU1kA+wyAHkJzEP7ZfwV75EB1b/BBfI6GlnL1AZ7BhVhPoskgH3gclogDwVIpises9HYG77fsc0nFNkO77BIOa+jZ7rEF6j3XtmZBAX4wEoZaeA+HNuy6ek7BvN8xn/JcLJrcgNP4PhfKs/ksnsmQP8z2NkgonoGIAFES7LgAhQzIHhAAREoVIpqmabQSBxICSAlFwbQZ+P6QLZbszDk8CzKIoVE27S5IaG/YfPdH6PKhWzyAgwPMGI+4P2FqLDAL9JbvyDqMYoF8bLN1hN/dynkARAjoL3CyisSB2goN4d22dyYT3QHgoY61d7KX3ofbEGBGaUSnJ4JulszKMU8GpQU7EQoWQoGHRybAFiKCQb/LA7IhCpEHK8WiohUQcX7qiDO0gP5exWozG2cFpALX0hrAmP1bj3C5r3PhsABFELmhVNi9xhrT0nHMVeaNlJkOpnfLmg8/rvRASLMWEC37FH+vwPgmDKKkBwXgxyqwVG5U7KzEK+tJySE8FzRABwCIcnUABGGshpYpwPiQfh9ALLskNhHbwVh5LuxjsIjkQDaCyAAXUAYvhva2nLmTSu15KjRE9JYqIYhoiyPka41kA5WYBz4CFLm4QdHZXoG3HyZcQo2gWj6KO3YQpMD1tIA2rMCGtPYhZBgFx/64BKZ7P6d0naF18NSLENxGB0VYmzDAdFgQcSmGHECyRI7kxlt6DIyyLGLGAogpovNDb6SobTem29Ka5gCHwIg2BxhoM0tpeGiTzCWAIt4GgB5pKvBCkoSmLgpLJHFPcLqVxFIdL4OcGCgp2CpIYgYKAcQnrNJzugSptAuB9MmY5DhixyUSkHIIEQYgaR9w/MkIMv5/zJCAu8sUiE8ooQGkq5C+iMJ/SZdYEe7LGHXxSO3Bo3L9UOXFSFQVlKuyuyRFgPZLBPzSr/LCeV9M1VQS5u62gKq0Kaostq45Si5oLU9DMsi3Lg2LXNQKzqFLhU2vFfa3IUrvwypdYC0CXqfUIWZuqwy6FML+qgIGr+pqAJeVmXQblzih7Rs8Ja+NorbUSodSm4oaaAKuszbmj1hks0asLQG3V5N/6AK5cAoWz9X5Bj5UqGNcaOkJt2ZKr87bnWdozSS/tfae3eoHe7QASYQTsfh48B07351uLgu61TbE0rqdbKwCm7FW7uzdugaBatXFuHfIMtoajVVuPaAzx56fGXobYu29y7W2rp/OuuVz6wKNTfa+/dRadWfz1ZfBB5aw3Gr7lg4J7t+X1tjUKyDk470wYfemhVSHlWetQ/mv12FcJMrfPe1N8Gn10djEeOVAh2lgCqqQaCCKXKUE/RwVjMQ8IYuInuAc0QKJUW7PFViLDbksU8OJQ2Y1sYlVBqzEjfcAD6AhxO0EDevbDTCMC8JyUY2gvcJSCUVEXeUzIwgS1LtwnpdcGG2YNTvRxAWeDGnabEOxx84JV0oLFUoZQECa3KRW3ydVosi32Z8YlWAWgBCmocVAfRsW5Zi8pZ16AphTEoyFNhGltKvPDmk30GMQqGMUNLNiYRkjeFnHc5SIUygSlBUyFZixTRRjwOeIzjJe5ch6/8nTjmBEBEooqZAbyBu0GpA40b0dRYcT/WtZAPnQYQ0HDLAIuALjkGc0YdFhEsVDJJUNRYBKAq5dJVe8jXZqU1EyBpelSlEAtkgAkYhpXIV4ve6IT7kLuwQb+14WlQPJgg/KPFg+7JqEPGQHpqYzYcKyfY2AIwnG12Pq7VujakIwBHnYHxzKJB6csE+FJmTcnCIKf7AnciTgH7yDUwN0HBgNTqeUpRLiMO7605oKz4ck0/VOSiCFrieHBvJwpxFbJp9ZloGpEjSSDSOKRs9PiQk29ju9zN3ln+QM1rCjW1tegO1UqXQ0AdNY519qe8OrdW+cCr6INSwEbgEWbiu5SulZnW4hyfHFfvETtw+Ds1LqzQ2NlUghrnRWWgPuYgZVzDQHWDOiiJ54GgJWHVF4Z6QPs7k5aFh59ukYAidrFRaUdCoaeiiv6pYKUAzhL13YisnNSJLdILQguUvCxFwpPCvFRYb0+vUuAxGOTaLiJAkztH3lYKvngN5+J1uvev2fy3H4kczjiZevgjEk9NWH8C7PItGZZTPDec+Dz7+y1LGuoYhhCVApshYEoorgbg4o7lWY3dYgHo7Q7Rj9bRJgxo+BO595P8L9OljRcxnNIA55d939UBtJ99D81515ng/ZggG5ohQxKsBBEhYAGwC8NRj9uwMDz9G9sC88DgXR85F93s4InB2BcswwIwowYx4wlApBYIFJEluNUwWBYwssfxhtH5EowA8YFgFdQQzBrs7IC4NC0AwBMCuCMAwBxgGw38D4JRqFaFctW8xcBU9ZtI2BuQyDm8wFygWgdRGC+5k8f9t4rJODv9aBHJqoPYt8qVvDPJyBCDKCZ9XJ7dfZdMKpXdtIfMeoyAGBcZtYQpmpIA58fIF8oCWIYDo9554jSClY2CmZIAz8s8zDyDKCpQEUAh6A6DEhrxGDmC/IN85Zt8qjK8aiKCSDj4Qim8cD2Rmjr9i8BDPA78vQH8KBHDuh3MGkrlFgVMrw3C0glYkcvJPRqh9R1FXk/BFi5dy1Q8SBw8qBI9NIKjHATjuQzi+sOUlB6BFitCLQN4uANB/iC8niDREBXjZxmdPi2d2BIBQxfjIB/iNBmDpZMghJWZviOIADwhKA6g/w1Jc4HsudMUodcVk4PsiUEcyUyMrUT8aVAcHkIhK4wcAA1SgHPNLfDCyD3L3GIWdFtZNWDDtBDXjOXFnO/JnOYnQ9gT9RyI9Dkg6A6UkbkqjPkmjDdIU5nCUooMUunO/KUodTDL5TlblTvfAbvE2HkpNR1LjKnRDLU+XUU4UjUzQFjKAGzF/YLAArgAwSAXQPuUw0IxyY7LTeiKPXaeqZWRAig5A8QVA6wjgxo1k5vXAg4AgrEIg8UOog/EYlooINo2g+gnolgxYNg+4OMr/SYngyAPgjyI7IQnLWEMQyMaMOMZQguaeTDeQx9RQ9MFQ2MNQ1EDQ74x0xAPQnJAwm0RkMAYwv0gCCw2gKwzucFY0igOhACUoaDZUq02jN1B0+09UnUljYnFsDjajTc1U7c9U5PMAN3Ew6gFQdpW0lnS868/XQTG4DnQ8/CIiEiJTfnS8IXGiEXTTCXZAKXXHThB0p8lKG80+V8kgKUlXahSmRxNkzXGRY7cInKWaFkqNMaFyNWdAZAMoaeU2ECiSGYekYkmRKqQ5DCvJPoMmX/EHDBdC8oH+EreLEM93IvSEOPZPB43aDA282CwrOqbikvJPMg2AwSmC9pQrDcU7AbP2KYbpWBfeRABAKYMIKS2WaQKEiWBkbAe2TEsURfIYShWw8YgIMVHIBSKSfiWhDBW3RyCoYyDaT4baCor3Y6DYAvLytYYkGIXbWkCi/SfeAo23P2KIWSzTCyai9gRi2QQATAIHYWKXKbC9NZhOLYgNQoyKo0CxjTIsA4ry9k9ASrExUJLDlj4hLIttIZ8dYXzIsN5ArvCp9rwTQccxRb9p1OpFtvCVRkByVrEsqQp4YMF6LFIErkqW1IFcBnKf4JcsqYh5LQpy08ZfBGAb9twQQ6YzgyCmglApg0AfBNAYAzKOQhRvFqQ2gqLD8vF4ry4VpYYRKLoVrn0tYNrhThg2ZchyY+KDqSAjqTr1RzqITZrrqblOFMzPB7qihFEnrRYpprqjUolFgAgat/5nkZd/C7rQN4boYbCj54YryDCRg3ip5vA7pklCkWs+tNi75k9Ya5q2VyYw55wiLy81LBJhJyLMBvNFKksscQ4dK7ZUgZs/MbsAgJ9ksLQ9tek7FfELIKbFb0LoE+5PYilHJcL8oJ8f4w8IRIYtYFgdZYr5IbMZhhIzUXAqBgpAQwh0b4sF8DM+5uNHIx8Kqcph9cbZrHJ0Rc4isFLtMBJ3gzEOJfMLsLhdFbrSAmaEqkTubjMwg0SQpGD2htlBs7avRxBMgAAvBms2wGxUVJZICyM5C5bwemm5VI3myFVBBfLuOycmdieGGkcOujbeXzXMZgTzEKAhX9Quy20CO6R7Qkl7Lq7G0knFV7RHSk4Vf7VHOkhlUXKAZk+aXDADcdWU46byxU9cy0ynLczNCCw/EmlgaCu8m4B84TE+58mqt85XGUj3NYY6AK80inODa0tU8UyCs+xqy+4+0TW+mS++wdb9fU+QWKiaTQFij0vuZaxYXKmM9A8HR9SvKq0qt+k8g+s8o+i8m+qCv+kgK+n+5gc+4Sh+uB/OFSnWYqsIQh6kgYzwaSi+o/deXeu1d+gUnjc87+/B3+u+ohgBlnIBlh3UsBpRfJKIRSRQn2lCze+B4rBVD684rarAHav6/a/uoGrFEG94y6qWL0SGyyRmvGx6k2RG9h3k/ej+w+mnPBwBghgR4hvh0hwh+Cx+t6pR9alRuY769RvapWAG7R066AUG/RooCG+YvuaGyAWOsxtssoKaTBjc7BwUnhunEhsh+8oR0+1xgRsRjDCRkx2RtuyWhY7bfi5gaTb0qACyOxdfXzRKQK/1GpvuCm9fGJpm5pr0n0qyILWEdfJmtrI4Q/A4AATVNEYG3BusFhPS8MQBqVPk6krP4JiwYBDHDEbMkN7LKESYUMQHwFjBaG8G4F7MbqMKgjoFSQnNfLpGHPcTATAAADIwB1KhV9lihESWnemNaWsuBztYpvmemCBqnemXpzai6BnKzvnanvTuNKQYW+5vSYhinvFunWmLJgwEWlTrGuHqdFUcmRHYLnGHH+HgG4KDy2MIAyd3wsGbGcG7HeHSASWKXMJpMPz5Nvy+dzwBdVMALtNRdxcRdsdpdk49l7HWX3YZhVc5aUKio0L+mo0ZYsK16S6nJp4daCLMcNqf5q66Qvs3sGaoHaKcaY7TH07CKkwTNTaTk3abVmLFW1XUsFoQ6xods/ZxJxymRe6I8mGGDpsU6MA3iJBI56A+6VpUbF91AohHLsKnXkjY43KXdKnfcjo9hfLDpjoAAWAPIweEOdI1milmjJI7R1u3ZBcWCp2A+B7ECYaM2YfKuowqtBqE0qvoqhyjSq1tsguqxhmhsg5qoKw2EKpkfeAQDq+cc8cqxBAYKqJZP4DBVFh68N5aNmygIgKVHWBaFE3m8vCXGIo+YW3gQwoy0pyO6WtquWqGHRakCm6kY7NW35j5PwUuagVIAGBNrAfW4CaINE/eG17gCFwetV62tAW2lkB2zGjOu+V28cW9GWEKFF72tFyAP24mQO+iGkYdnirdjSrS6PDgqyuhge4urAcbVRJRAm8FapWpQUQ6yFyYlkTIdEN484XwBmaPThWD3THwOCowc5ZQS5S0Kusi/VyFTuvMHuuScBi+C20jqZFCms7LEQxBV4dG6h8yomm4CgEm2YMm+QZmDq2iYegk57Ke8ekkuHMk6SGe69akgHOldHBk7VVe1k2BretN3YSxi0tteltJ3BplwRiV9xuB+U7N7zzh7jfFn8IRllgpktdlSBotwM9zmtlAOtvK2MlBxBWh4YkgCLulvFm02LoRkLjkjtiqltkqnt6lPtiSkYgrlJvz7hgLjJw/OL50wpr+SBs12Rxayp0FiyIb4FnRBp2bIgQKnp9p2ITp0DSb7047QZ0DYZq0UZyACZ7AKZlIG5WZ4DLABZooNAZZqshhWLBsiQ5s3ZvZzsg5o56eU5soc5ic1qMAK53qaCSoO5swB5sWZ515oxRSD5xAREnpp9gBbwf57hWKHpob75kFmH4b708FkjqFl0HpuFx9SkdH2IJdooebyALFhH5J3FqL4riVjrwdQ80ncnQr0n3jcGbgQHNr5lhnpn+XZPd83CT8nnUiQcbY/8oMjTJw8pgVkVsCj/NuNnx80Z5XaVxC8hOVw130stk1lVnPLW5yTVn+IinV0ijKii17bG/n7Jdw6vPAc4EJj/FX6wkKd6gfMzjy0MsSihLJPipgUsR31Kba2vfSf6/NAvZ3nWAot3z2TKlN73jmX3/a/3gOwXzwdTycOPdS6YfDgSnSm4Pd1+RUQysWt+SGsy4Oxnm2XS8vPPuCwPNXqNVLdaZ3SWJauUjQckDNr3G6A4NvFJIpOmhVt0s1TuL20gQIl6QRB3ORlNtLviiRT2WQMqjTvLvyd3oXWr/IJper1hlqkFVmaFaqPgDbc7duz0IxM8JfIxkmH9A4ewHIDIFwLvzhFivv4xqBwf+SYflI0Tz37KkZ9BntpbV3/anffSYUvnnbbTt+2X/JWPfzxCsp/q//JkIAOpC9tl+0uIsqMRLJVcwgpVdWI8iBCb8AoUcAIEQBcD7YLUsaYajSAt53Q1i4PG/lsV5Y7F1EHhTOqgAOJtwjiEMYEmcTn6XED+n7OPllQshAlTi1YMEnMTCzB9D81IGIC6AAAkAAb2TxxBAEAAXzDCyCuQJ1RJBcG8CKDmCjkV4PwLYGCCTcgAufpINkHyClBKgmQWoKxQaDcE2g7ktSDWzL99IQ2EbLEGailBkG4KCWOVBuSTZyB+JT8mZwNYT0rO5nb7AcTqoOc0c9JRlCvTjaGpK08jBvk32J6+ciu9PSXmJ2l4s8sh9IHIZK2lKhc/cawG6GkP5J083UrPbIdfVyGM8ahHPTrq6WDzr0kh3Kcfh4SAJT9GuJPT+lULyHM8iG1Q/IbUMKGQBH6FXNkHP0n7cBF+kRFfnP2arlCVS/nLdMMMGHKEBh7PGXqA3qJls5G7QjULlz4rkdf+gTGAZtREE9D0hlQzNOsO2F1CpeowsrjEEmGgDu24A7SPkSgF/9N+4JeAUvyiIcRiy7w6rqQGuEVC+hdwrYQUM2H1CRhjQynlS2PJNcMhbqC2t6mTyxgMRzwzVOyy56ctFM3LY3sLgFaaYlAUQQcHLz7g4jER+CRhq7jeRFIo4ncG4C4FohbJD8xkbLuWnmD1xRk0baQAiCRDJoqS/GLAE1gVSfJWksBD6EJjZEUBjOyuGWAcW3Du0wgyoYjhbSNBMMFUOuP2tSFqSxQg8OGZINSFtxq07ELmJdMKHIRQxhsuuJzDGD7ikBcAjgP8qr1dFrEzOpdCvq6PdGC4HMuSGSPgGkT7x9YJKW4Amhlj7wIgUQRwTkluysw1K43LzFh2yGiCVg7QbsMngZimgRg8Ag1OkjVyRtwggolAPcESIYIvRGQbFEGKcx+xJad2LdqvkFCNN9ISHcEYjDKjTBbai+HRBjAVGaxVgm/ZIODH8wmcghRJQ3pZ2AIGtbOv2ezgvWBzOcoAC8OzuqI9YBxN6DaWTsdSxSQAZBcJf4pAEUHLDTyqwxVLSPa7XjSAupKntSxp6ojbhW6aUK4CyaX03xsgD8ZK3xGyZueXLXyCSP5b0RBWTEYVqBSV4WQvxP4+CtSNlYa55W7WHJOyFvLbw6s+AdSNYW2LwAc6pY6wbAnYLVVyWkAL8Q6x744VNeL/TyHqyARG4UYmojiF+K25q4mGKubFJgKeQ4Du4I6EgAQIoD7Zhako5kQuwr5OVqJjuJNnXzH4N8tgzfRvi1UVDYcy4YVVlOCFzBvk82BbGkbWMoBx0ZEytCSbwLH7ejsUBeUye0FDBfjES6Eq3hRPjYVsr0rUIBMAV7FpiQo0rbFOeCMQ+BGgqiKIvQDYqQAAAUvYCdhxBXm43NInB0nC9wuoeYIvvMI+KXpAyy0PoAcyESj81OgNWfuCnUkhty8N1AYJpIMD5sZE3CezI6M6xh1aB/wWekZNomAFj4NSPMPqxNyyt8iWYvgN2AIlghRyswKQCNXewCNSJIQVwAiDFA0BpiRE19uIA0i7FxBrIJYIdjOwS048C0pWIxPomtJVk+Yvqr1I/Zk1WYGieFAFG3iM8LgRcWhFuAgjyQ7IkIN4rBS7DaSogjIY2qcN6noA9YYHO6FOLHpITYcc48kj9ipJRDlxTnOIZAFc6tDw0xQg6HJPPGpMWur4sad+MIaxgYJbjChlvQOipCcWNwqESjMoBoynGmM/Jp1wS7kwLInkvSQcMgA9Nam03GIBZJWKIzmu0XDGajJ/GcziZsE7GUzJZnQlrJEIlYcjMVRkzyWPM98VjMHQYtFuH/TwDTNGRDAyJKzasof3YkslygEoaRPlhIDncmyUhVsrIRZIaAFCaYWMJB2yJEMICuAH8WABglKymw+BDQEQAOBHiAAOiix/ReyuAXsueOtm8BezqQXsuyLRFMw0Beqvsw8ZAC9n6VtAYoaOV7KICByuyXs08aeJFkXixZP4CWSwylkkzyWZXeWWlyVl+RmYXfIKaFPCmRS7ICUN1jFLEC8FVm+KWsip3LToEQ2V/GCIrN0nzQDZ2zaQm2TkJmzOyFsq2QvhLDXA7ZhDB2VzKdnJlOoCUqINyk9nezwGSc+IIAmDmxyYgcYkgNHLXnxyNsm8/eYjBhSaxGY6cxQZnLZlojM0ec4lo/NkosZvS2qAMVRF3GwMGZfcKQRoAbShgYgUg/ni1RiA2B+prZegPQ2YkESYgDYAANx3yXx4srmejOfkgND0v8/+bPUAXALapLVD2RZHAVGZIFkAWQa9KIALAb5BE8hWQEoUWgAAvEwsgBrBIAAAfliClAGmMQRQYQoQVILCZKC3mWgtQXkykRJOR8bS2fGCKfw+hAaSzk9RyLWy2aTnv+MJG84gJtUjGMBSAoQSccUEpRVIBUWy8Mg8vZCohKV7a4QKKE/XNvD1YG8LOpbeyV1RzHDpK45EloWq21pGSw8vrJqa5IYlHALgEBKOmMlXiGK+gpRBKPpG0rgo5oDBG5OSghAAJVOBfHwUgEMyQgE8KgSbIURyRlwT4Z8b7GO3zRiSEhS0HgTX02jSTq2DfHNn0Qb4+U7oM0GtFNXxz7C0qjUsfjlQy5IMCqqDLmDP07aYx4IDDRAWxPGQbxKQpQOuuVAAG4DeJ/E/bC3UVAW8r0k4L7BgkMUkA0oCAFyP/ASpLF2aUJF1lfz4DAUJ82sYWhTVH7VtiFY5TwCvAGixM9lOYDAAXnuXyKXlGQN5dMu3jC1AyaVclM5KypjsDC9wWadUo1EF9qOKE0xfQCSWYAysjEuWnHgnlY0SSbcw7rCDuhlTOEFU+sdVOGhaLdxG0zwGlXYrtE/I9VbwT1Ut4p43M4PE3nsU8BgKIFg0kZdImOLsChBiWBahUyo4WUlyK5fiGSrTFKTshhFFoKmVuQ/L/4mOI+NsvdazTWYrwgwS8SEGNiHljQVeGiQAAasq/ZWQESx6zIABq1AJ1IJDZiAKcqsgACL8a/V5A7YpkNMGWnkAFV8fdlegn47l1K6IvUCQ8ieRRNXJXyHKD8laynCKcRtHyWyDM6J1TsFlYSS1h7iBCMUwQ6HLOPhw2cKSG4+erSRXGQzoZ/6NoXDI0A5sBFtjRVNsrfTVq0M4w0tT5QrUMsq1Xqmta2rQx6kJGrSk0a/lS49L6UfSptgMsMhZykZHM2tX2gnUfpsZrwkASUueUICgR860ZUsPxmQjK1si9tZOq3XTrdhlMiBtst2W2rKpNy1Lp8tbKQAnloyo9UaveVNrLxm6khUYsUU7rfUhaetRyXPX8Qb1by0dezJtJTr4Ils19aiHi4/o+4h615Qcp7XukN67Q4hbdj6n7I16MhAzhtVWRQbPIEAzlc0W2noI1Zp3dZgPObJDyTZ80UeTivHmA1HawIBMDkmzT05MNGAHQWutFnjqQNwGp9QouYzvrH6X6phuhvAnHroSVlC4AtFQ3zkvhWxHsQ3P0QEalOwhbFQBGI1GyZC7ZCjVbCo0Y1rZdGu2VzEY3HrJNfARcjQglArlkgf6++VukA0IQbN945ETS0i4yLONDy+2fpUZzVrZ57mpXGy05wASiRmiv8tosArC84+IFfRdjS4StqvNoGOCaYtYmK9ItLFZVuJO1rcjiBG4m1F1m1YkV0qkkDNTVKC1iqAtg4cGHXO9YxpRAeActKcK4Q8IqpeBGaKlTYoO8lq9ynfPxF2mzUMYzDYSgXg6A5JiE5xZbkRLcalAEOiwCKmlSqXuV6+fuLzg0r9w5sJp5U+rR1ndbDRWxGkY3mKrZVcaoFI07zbgD5V9TGeP7egH+2am0d5p9AzaYwNtGOJnaTAMOPtK9U3pE+1IewpGGiA/w1VzxEEpqqVVmrG5uAUMMD3FSEMWqgtI+OaudoW5rVfsaoDYMbG3Z8NK1fdrMug6aQPItAQTKMsSJK8W6+AwgaWMwy5Ydck2NMHxwex/TwhSvSevOJzWLiwZ+aiGcvShkJC6ZOMjQF53vU5yXN8itzaBgF3KKYts1F4XUss3ILH1rmsXd4hF1GK5dkpSlhIpRG9CN1CulnLPJsgtBKImu+2TrpBBoBVFBJHnj+R5ZBbSRoE3RaL0gmRbPNAjV5pIkohxaZWD29XABgBl3xktmFVLZr3S3zpmd9rCvs1r17RS7lXquPPQ3VEHB14I09Ue0pfy6he64Gw3ZRB63ESWG4qQqs3OrKtyiNmzC7qpuHmmzzZShdFUQ2rVTkBGvROqANo1HSclEae/eKNpGnsQc98m/PYptbHJAVNLZNTSPLL3pgK9+u6veSxskut6hQUUsckvhRkFvkKNFwYsBRDSJI59KvuOJOm1O4oV7/TkhoB8qLaDoAVJJB31poltiVRW27aRjs7WsCVDW1ihh1IBta3tme2Cjy3+2glAS6qgHSbiB30Nm9LVSOCiSX3LZTeOmCypTBihvFk6iwJNc+z+QcRn0k4tNdOMcX4owhjOkGXPRRys7Yh7OotYkNhnc7G1rG7Oexq40G7ndaAfXdrqoMS6/cr9Ug2OoA3RbHdzemg2wboNND9hZ6yPQ1Xj3B649JEhPT2uT2N6v4zejPfQ3b2dlO9ghAveIUNn96S95GofcBu02Tyq9P4ljXvQJka6Hd5LJ3bruoMGGWGRho3S8Pr0cRw2kh1vSRJkM4q5DhG7vaIUL1KHSN6mtQyPq0OEMdDHDWns5tMOwVzDeuoI/KK4PiKjyjmgI/odbWXk+6FhGgMPriMn0Ej6gEECbv80aK+eWiq3ULyFa26ItYratfEZ/SJGMjJit3UhQ92VovdyvZxarz90asA91+oPU2g8WmjKpnSt/s/q41x4AOo8UzOkeYB2tb0yDRMFIDtTJ4hjYRIIn3RmOl1+tg2/fOBsRAggQdWXG4CpXGhKwZYfdXPVEyywuH6ybhwecbM8Njzy91GqDqPtGHCYf0zBdDnH0DVoJTsCygzjlBnxR6aCYqFffTqxU964QZS1Vl0Z/gzbk2tSpbfJJ8pDsxOyYrJBFUjVYMT9NNZ9tQJKhaKxVBxPkXfDv3raH9kODimP341htwNwx9/TyoaRf6P9gOl/eG2GNQ6Za4tLuvKGdq3FPu+kb4rkvUyli12uCWQDASZHJqF2qap7KgbqMM7gZkQvNY5zwNMlOdqXSXXzvIOubSj4Dco8kYoNqmvYGp+gwdBIO6H11zamXYLu1OjwNT+us0znF1PcHnFXOvbQ8v6PzHhjoxyjOMbiRTHD8CxuYz+gWNJMmD/63jCUdSNlHhjlpkM+qeGOWHljXXdlGsdSibjkGWx0gXxT2Nn8nDazY48ptOMkbzjg+y48kY0O0atDVpv4H4asZ6HjT4Z0TGkaSPVnHyoZpI/ZtV3RHpFsRrU+12DN3i8Rfm9Rbz2Uy5GQJ+R8CYUdFblSUj3Z99fBPd2tBPd9O/YTLERM/9VRCqbLTr1y32KQhycHbVfryX9nApmldoIYvhMc9A8gKlrdil338beKa3E7kpw2aKGzjA+0vQWfUM0bK9ra4wsnlr0XQrDhSjIMUry4HGFNdZbM4+dzPPnVDr57w5+dGE2SE+IEUKoTVaDaddOnYVjhHkSg25Od8OvgFvqklUjPKUJw/fvscJ4rLIeJlbBtpoGX6wDBJ/rtpRVXbbUxDp+RWGzILcrDBfWH3BgRal1JmVDAlUDOedpnyPpdJxaa6rQBdzjYMbQPAURsofB25noGYPNDCBdRQYgKES+WNgLRINkkYjY6kGGRFjzigIIuqFU9o+EhQpTZ2jubouvAOpiwM+exGCCJB7E9wdQMXB6iJI14P/Jy+PC6LHsM+uAemhbsFzKNC+bxSFbEAEEarf94l8Ec0paA3JgKLx+uqsneMrdVqyQHXOARijnS+2Jmr7XEmx10A8dq+5OETr4kk6QDWqti0BZHrprKK6BoGdmqwPREaSsppevKZBP2mlTAZqzS2o7PMsuzYwx+o0ql2BGJzH5oa4UO1TNDOj9p68/2zvEZmVCfejw/mco1XGiz011zV+cPzlmfORph9fWfrPRniOp8ACxntPN3mu9oF3vTmeL1kaOyW1ws++duPfmJr7Z1U52amvNmojT49XVWaHGwBYwINzI32fN3ASwtNugNXbrFbg3Kj1CHiHxFnO1GlefCVCafFsmGYJakdTKwB3djKt1t7sG4HRgwRGiNeGrBqT0bH75x2RsAcyUpOsBciT8QhlhmrHG0WXvd1vf/BvT8jftnkMQFQolm1jC2ATuWOSpZHEnV9t9s2mScRbqiNLCsWkqiqUkchk3YQIVupoKMOWrtliG7d1VzR3b6tS+VAMUEVZvhHDbYHoMWmeyPgoqZzeSZHnJzNTXFPWgcf5ZNNwLa395hy1AEQno7NjDYRHaA9rH/YK0MYMQZ1X8r6DJAmQf7Qg4OCVo95vAWtCooWFRkF5M7xM6EtAEFG9EYxSlRUNEGtyq3OEJNjW7EjNEyJ/RtUwlUkUcmT7MgbrXuNRUATYoq4Ul+JL7HaIQx3+1kPfpLVZhRbSokY1Xn7b8i9YD1elkyr6I1DXZbsM2LJVCVSxdLj+twYy1pjMtJRtIo9z8G+V6kaAKFCwE1tDFoCiJS41hqmFQFzplZ6sNvCbAmme2TRA8EsVE0yskSjLO4OtyICQAqWOSnBg0y0VsVTE+DIQKSq4jwIk7d0S7TUvoBUFkCuUFeIUZiSDejV9wFgSADQH7bLqCcK6wnf1fckx0N0o4MsGygGCiZwHweCBzhHXY9H37J8quPDKWKsW64sbxu0U6PTp2hCWr09JnaDJlMxCur2qO0PzYsiU31WLkcDLPQoxipZRs6hm4qT0HMzmb0NdMvUQEYlBlTNpEG2DYvmwACmYjpIfUc8WVTvFJmSIQmgUf03FRSVrLicMbj5NVrZ3R68oeesaazIWm967bNeYGOfzlDAx8pGQaOPX9slFx8pyU0PXwLT1i469bfM3HfHINw605o116PEbuw4x75Er5eKqJlj2R+9vkfR5ud5avyMQa+vA2DH+jhm0Y/EeT36TUx9W+H3FoR0j4aJADkB1I66CC+IdyjEHdI4YO6mo3WIM6oqcnX0nBj2pyY5TtmkMYv9qIIcoUc53XAyjoYByWWfyBQw+dv+yk5iOVOGb1Tux1M+ycsVuw8z/+8WxTYckNQm4/ef6ZUc3OE0Z814Og8ZhjP+dEzmp51yyeDh8T27FJfjbOf0PAxVz4F6cFDBHiIxJlK5OWO0HdOXROSD+a4AheI6D7ngOF/1el2HPaI2LwxyroBtSKgbJ1jXKMNjAku6Rf403YBJyOW6hzjKAo3DaKMyJyXOwqVvFoQlzmkt1vFLeUqkda9CKxFLVrb1P2egiJBRTBKZtNK95Ln3xa1iPldNNyQ9vNngevaGDN23JdWFiNgHn05QAlfYrKxgByvBKYohuGTW1Miutil9KoL4HOdX45XwNIbKmBQhyi9PELTIVFH5BuohQAAVA1DyiXrDI3rg17GUaijjxdwJ9XkZPBM1KKiz9Z+gtrqhxuy1ube6CK6oEltVJqcY0lK7TuXPZboMRQP3fdaT5NYxBCxAOMkYMVLlxtbcJW8UjyIq70KgjKZpNb/sjtDmOixKpHZpiLWy0sIDcCToZA/Aa2BOUsUWodG7MWtKTYW2Xbga0pJCTKTbfuKvB6qW/WFK3SHs2d9u07UsfQ0YnHzx6IzTaUMA1zqxcgbkXCaWPIDbQxifFJAuLDES7RyUXIHPFKs8i9amqkZSKAyLwe32CH1yIh8pBIfpWeJAvW3nqNDjNZ4Doa0k+MveKkci4LdIomgmQNin/p85vhy4oEfYGOrwjkHGDn3XvFAMErrvKnZ5IZa2jlGQ02xptIsvmWdH2a+IwkPc032RNODaY86PkfA9oMm0RWeOv86GPZLgDLiPfU/zugKUdoT8+Uh8Vw2jrkIHmPfwlQzXOx8vpTJ2mZ0IilWAd+FZHfN1hQ22XRruk4GgZImHEb10Z65hBukDETrM9E62YQWVDL1zTdtZ8fUBaIcF7kj/NCaSeAMy1kgPa5k5yehRZ1CJJ8bIJHbTPPrv152ADcDQrPSjXfkmRs/3WMA61vMy+ficj6qouAdz59fQyEf/nrHtG0QfEn5PMtUGfw22arOCeGP8FMTxJ7gZJvedXn/AO0KTflrO1zHoSEV6513897tDLj/nVtYbHqPZB2j8J6xG1fX5PpcTywEOEINelDbLLs21y6Q7EW3nwJ9Q3xQjT93r8BOWyc6EoUEQ9wWQJM0S/TF6qH7m5Pe9LyPvUoz79RABGpCnfNu3jYhBlOrimUkpUTZPDrhu/7wG8BAe77Ghferl/UD4tXZWblQKFmYEN7nNS4HO0uYboWgnDSALfjjlINwC5HlprpNXjGBdV26BAVfNoQozbZmEKBmDwpzOPMOyA/AyDyAtIDeYZGoywHChWHGVmWNtPKjkxXFMnY7N5YADSJAfrKLzlrSYDAz9EPQI0CKBlUAGJV4DtQvd51DG7QEGMoCUZNAVVHYt4Vd5Tzff+DJEjeFNAMBHQK+ARWY7L6qCX8AobxVV9FbnVz9F1Cwu9+vGN/7Azfh+QePm3ZuwUAy+w1AAErD51Qdfc/HS8NOEOAjnfA7V37JizaLsf0Mv/34/qASzrZ+Mn8DU764hJ5VjMfgwBsAwSY3+kfvu06gCXdAIu3kINMcwBOpZhVcyZ9uhEQgKLJ4xgvKJBdDeGbtXCFlVM5GDsgWYso0JY4haDBMSwoUIyJsLJmJDx/wGRfmDYgmKwLv5fQwBCw3s3uIIFyNfxKfX/piGjDsWvpkKn8oyd/jN3fsgha2N8nRxqdjuJLMZuUB/wI6gSOHnSan1Rr//EaGrHeDiwJLfxd5sZ3BDV4kWwBgiT2P/jA7ygL/kcIeE5YqGCHU+4rAh6CdoOjgzwFkBP4GA5IBgjwwLiMX5mOlBHb56uZAtNhg8+FDyYuC7fiALH+yFir7zQ9qvVQt0G8IkiyYpQhggHMikGfhEcUaD/4UO24n0QagrrqkrngQqNeC5wjAZL4zQyeBfx502AQtZEIqKrEChglEMsylCe0L0T/+GVp6CZAdQMUDNgawKb4zQr7IpBpQYmhKBSBr+KX43EfitYSrA32nwB8mr7HpBuyEvu74zQSso5B3+yfi/4xM2kD77tIfypdrquDciXIAA6tKr5Y58gzbWEuYifiEMDARL5x+hEK7w/o70LjxzUu2FuCcoQVNUbxqEyHyC3sqdmrQPsrVJrAwwosAp4EBfVCHzdahlvpC7cp6OeCLMR3NoH5+8QQUT4mFkKZhf2qIE7AGoiAPdS9UfKMZDo+Rbn5COuiKCXjuavVBCigQmxCaB4wSFhZAQIlPpdKwgc8C4QUAfKPcDkAwJKcC/uMMH6phaqVljSLA4amQ66uagT/zhs/TvTC/SKBuh68OWavw5tWyOLh6L0+Htqgsoz0OBqD4m9MkHmkLtgxwkozlHkQVuzqr4g3KG+GQRdM+QfsJpcR2plbJ4ENALBCwtQQdxLMwFndZKWqXm45XcnjnCAWyxzA9xPcRAJOSXMNNDcyfc6zN9xIhjzC9xvMgPHgDg6C5EKqmay5A4TNgzKKyj4mXwdyjtBLQPBBdB9ML0Gg6QXoaKAIDYOaSV2wwaGyV+4wT1jdBROA5qA2UPoBBVQ8EKMyYQyQJS5ZG+5qFZ8syPmIHAQqIGqEHM5jvFrYaFkAAACpYNmAVg6YLBxRq+tvOCG2JUK2S32OPnCYko2Fj1a4WRkhiSQm10Bmxx+N0LCbdumbpFQaS5fNTQIeGxAfCb+quEoB5Q2RK0ifei7v7AcqYfjzYJhbPgohTsq5ueBmu9SH1jcolQDUjwQ6gIrRpgagHdi1yXdCrTTwYHHQDVheYIrS0I59IrTMAtABsBthOQFroCAXYWwBgAdiAMgSOigMIw5ItEIrSgwWbMSCK0RFGoC0A3gKzgYAtuAMjKsSWNQBlARIZoLz2E2EGzyAunsJD6Q8YZ2DZEY8G0yKAlQLACvcAyCW6y0fUpdbNiLIBFQxAAAHpx+p0IdDe4bfKZzimGHvcFYejwUuK4GIjvEI9WqXLbgxA6+FdCe47ziWAGhRoWqyP04EZBFlq0EcqYqhhoXeLqh9mHNY3Ex4VmF9SHtuOg/yHJMWHCg/ZMdrr4z4QdCBhMEehHwR2ERiwxAFYXA6NhzABBGxAz4c/TwytEXBGYRxoYiwckFIvWHeoMDuxEvhXEahGYuVOHRF8RJdMRExALYfrhiRz4ddDHQPEaqGyRDEb0wxA7YT5SURR0P6FoRvEXBRYRAkTpHdhJhAIDKRz9BsBHQZQlJEuoMkSZH8R8kXUD9hg4cpFpsPOgaaVeRLsqHGRGgKZHyRf4EoBXkY4Yzb6RGgFP5nQRkRpHORckYxGThAVJREN8vOg5GdoTkYFEuRjEbOHjAC4RLDLhykapHe4sURhHxRWkbUwxAa4bgAbhYAJoLKR+fnKTqRZUVlFyREPq2Z+RYNqaCKi0gHxhs4AmC/K+aHLPD4laiPmFZ5G9LiOaYctEk9okom7qK4/8FkPzz+22kpuKL2ooHMD6uFkKNH8wKEg3YuYdkImBMqnmOA5vw6WJZDLR70H7Zq0mCLMZ+B+YW/h0I3KLIL88iglwCyC+8jfJQAsguMBnivcBiSeYlKtjAWqJ7jcj7wR1L4BlW2SPFBIAqUD/bXRiOjX4Kw2kgURfaz0TIKvR70TIJnyAAD44x6XH9Gx8bAJgDYwKoPcDnO/QZpDpSmznBRuy70MsC+AbtP4hrs2omEQNg2tuMCAhG1LqBtAowN7bTS5MZPYmYxvM6qJWgHlVg1YbsBxAP23YBrIX6YVqgCjRyqvmHFi7EDZBkA3cNcAHsd8JPaUQ8gPQRMM0lioAt+ZANUDlaaYrdGUxvMVqzgxMMGVaoe3DlualsmHhEIFOgEZ1avBzKGZSNWM4s7F/hrsbmo4GHsa0hEUR8JBL8oqAATjyhLZoqH8eXURcAGgv4E9COk9OOCRJxZQCnGACcPl+RKxOoVeATRYEoB4tGnEMja8Q/EBYrY0EVLhYhWBSAM5iuUAokF2KonA4p1G20dkYkAu0afD7RgeFXFdSUbnLYQmRFlyQkWCpEkgJB4DO9DZuZHh+yOSXwVBLyuIOheyawXxt9QTUYkLuYV+cyJnRdIKZmQTV+V9rqDqU1UBdp5EiwJmDWhXdGj58S5nALaiAHWvWiTGWgfTKhaPXCQBP84DNNSpSPAkv6kOgSiyAeu2oFOxp+h3hUA5eFoJ3AFEd+Bo6XeiwuvAJiZ2nMoVaxfKLSJ6OAVtIKWTqqvgKgSdEFJhw8ANKDpcA6kt5ESoTnJrl2lkDtF7RDWiFYP2qWJjr+KW1JQHCqdlBiZ/kBiFRbLSZ4OpZUAUsZwicxKbOBSQkcNBsZXYfBsPgQgioBHLqW6drtD4qU+FIl9BX0jbS9wxvEQjv2UYW8Rfas0Yrgai6llcgVS3bh5auqHll1DAgdAMgBZse0Fpg8JndtvC7oqqi6DwkwYD7ibxCxFnzLAktoHjrRZHAmhr2tNvZYzmHEAUTG8X2lEpHRSCSLS22VQFoqMWClqwxKU75uXKUBZaPZRmaLII7bVGWOosRr6KJhonn6jlt2GvsuQJQREI1FPcRVBTIBZBCGcFGUkXO//iShZEwoHiQGAAnH+57BKVlwGdaTEGcHWG4Gvz7bwwHosCY2tirnH1JOiWig06NwTw6Zq1nA8HSmQcXh6risZgaQfERpJK5keMjuV5UevkUqHxxPUXBjJxd+KnEiC6cZnHgkBTJ3ENihXmUxc6lCafChgd+GKGbJlHtZQ7JccQcwJxvUc1BnJJyd8lHJWcfi7U8hLrskfJ+yacnoy3yTLJYQw0TnHtxv5ONF0uhcfsHw2MiJCliKbLlUYK8FccnBWOt6L24TaTDGm4Z64rgvH225fDNCSOK7Cq6021bO8GaO5LAXh0p3gTcjO8O2GuTBUUkEhbgoXPmzCPxc/lbBKuDRnm7fx/NhIi4Cf8UiBqWmgdlC8pUJILTCIYTjcgB+4JF7aZJceH8YT0EtlrZ+wCCaWLHsKCX25+suSkfHmx0QRg4hQ58eWCXxavvHCeJM0DLaVKA8TG6hkskvJLoBJOJGGd8GblkiE2xPv3GDBkMEvEWg6lp2AOwwlPK4HAgQVaxzoqAL6mLx31CR4mkGyVSmzxnKE8b0mVQEPaR0gUjKlrx5qQOIxAa8bHZSMuAPIixAxpJ/5g03iOKqTSa0lQHyspsfjZmpERCam/sp8Tvh8AlqTmB5gV8ban8BVlPfGyp34E8a1xiCJjrO0KypLAUAR1M8jAoAxMZiiip8OXjMJiCHwFvE4IOljJw1Dp8hgeWxN1HAgOwUJwYaovIMkLEPSRah8pgZGmZweo6S1hUBhRAijFEhwSaBmgBMIsDiuU8WaQOxPsWgaAy/sRjDzJzwQWrs6hHu5ySO7ELilumxTvECsozKflzwuHJEykjSrKTBGgpicWimSyGGaIwUy4Gu5wsUEGW7GJm0GQHIeWBRK2Tl48qQb5Z6yqSIIHAMICQBcAcGSBRiIK0N5LHxGDi96dpZYN2mpQ+bDQCUKN8XiiHRpAKniPx9zms7zwmgVkjkZSdJZa6+lBFnHJeGIWl6QWTnl44ueNxr4aoZ+6V8nJxEKXpnop+XrhnseOTpVIEZWyUU67Q3OgjJlOe+njKjeY6mhm6ZGcfpkuZhmW8ENxMnFyH+ETTuZkvJzaEdZsaTmQcluZmGQZlFynXHSnhs3mYmk5uvwU05okZKX3BHi9TLEBrxgBiWnyI6+MaQtUR2uvhzwYoPjZMZX0iVCAgVKmiScZ1gNxk2hvaYJnL+d8cVYyZDAaeLKmwWeClOMWGeQyRGQKak6dobWd8lYiA2ay6ahkNsSKDmeoVNH3IJmATqo+ioCjblxnLmKw+6eSE0Z4UmVpBmvJqKcnF0iGvLJZNayro5J4B4qeByr+Q6UiCDUmgYOCUZq/ApkqpwsdOyl2AjGrSkZh2LIH7wGqZiqROgJtYSvIikKEEV6sbCCYAOmUtG6EWLqSUI3QJFmsDe4wYZymjsWSOpK1UP/BThixyVsKwiwfbhLG1YRwcsR9YgplB40OPPnwAyxyOSOHXg02NpydaQwKemkOPPqTkpMRrtFBgxnxn2weuf7Gm5FwXIDpkTJDVj+F3Bsyf+GAZ0Qi8FLJaxNTZ4Z1vGV7+Z6UXKj9Z22e1xDZk5u7D0y3pLN5VMcDCRlhAZGXynXZc/OxDyZNGWRCKkKuWdTtCmudJk65cmXrmnYd2dpLb+j2UXJKZUTpiExO7jnE7Oeb1ok4HWnnm/JQAYudI7ucpXtpIbZAWb1my53OacmDZ8uUrmOQJuWrntCDfKULG5PTBt7c60OZ57tRscUFkR5l5BKCvMNQJeQAEsEaJh551QAICF5G9NnFm6Y2Uj46KoWh0naSt4NxBlxxXgP7Y0wyWhKnCBxDxyq4BKfB6II9cR8HgME7gahU20jn4kZULksdnuSAqHylMCl2b+yWWO8f5iO+O/LAhl5owluBseSQs9la5r2cJY6wH2SBYYhgOZG6y2BFrvoN8AVCRZnQuSV6mZIwfOBoFhvSJ+nSu+bmDBDBsrtpJxpMerHwZpbWBW5rxviInZ9wa8Q25TsTbomm+I5Dt5h7eG2DrBiqu/BLSswHrgr6FZDttvFbED2exZKwqAK2knxxtBanVZ1qXHB1ZfsMCCNZj8RMm06Tsc1b/pC4oI4LJIuZDKEeMWa/m5uUuTx4VefHtnmfJP4Lnk6cZeRXlJCxeSzil5BeSfQAEBTAQa9WDBpYwUeXBdsk8FZBm1kCF+eeXmSFG9KIVgA4hRoWiYUhTOoN8MUc8mKFm2YFkqFOeSfS6FwhWRDaF1hZoVJCBTPNa9qJmZJmkZrKDJkxECqaE6d+7luvk1Am+ZQRSF8hdx6NoSheYWOZlhSXmCFEhfoVaFahUIUOFZEC8Lm52uXKlL5WBdsY4Fevr4Wsg0SQICBFcvpXlO5gJipmOeOIV2QJOOmnl4mFYRWYVh5gEKoVWFMRXoUs4ReQkWxFbRZXmApkig0V7JicQAR3G4wEJ5JCQxc5g9mMKdXmBaCKRNlFxl6DNnTA7lkuEt5iWsnAd52NtekVwykF3mEZvHpwiDFl5OMCu65KZZCUpc7tSmT5S1FJ70AMTM1R9EMTNcUB4+2UKl0JsaCCp+QsrO9mKg5VsfnO5YSeUShkqRR4WW577kAm7xuBZtgb0BeECVcJIJQqn252RUEXFFt1vIa2eLufZ6xOm1h7lVFk8p9an5VfI6kX5c2vqbySx+u3wf26SA/meZEjOwXA5I/HPGRaC8b/krU/+WqJLoxQNPBTAcUHAUHhFWgEC9yzRtygK0QaZQTaedUOlnwKoBZlk6IwBUyZ4Fg2nVA5ZkpcqztuIpSvGUIu5vv4SCBWWbFRMCJdblsZ5WdrCVZXaTVk2pZBQOmUFQYMb4tJvqrfjCsNOQAGZWbDrlbM5sHkuoc5fgMh710ncB67E6AkqWLmlZWK0Q0EoIN+l85MyXToMFOHsLnAZBHsZklqEjoAg8kIeVc4xA1xSzYNcCGeCFKwjxa1kR5BxSfTDFhZaJhHFOGTJwS5QqX5mmFqfKlAckMJWdleFW7NgUGlABKs4a5UmWkUUZVufqV8URRY4UlFrhq7kbWGXtiVZe3ufmV8FIxWRBjF05Q0BjFYGhWUmZQeQBFEZVmXvokGKjlfnaZU5SWUs4xZRvQLlkWdSVfwbBesmzOuyEyW8eERezJtZe5bORzlDYYcXjF3Wb0V7O4ebuWHlk3l+XDZvZiNFwpecQLx15DLlNmN5ZOXNkrF2KRxDrF+8GbBls32AoW/Ohbi35c+xYlxzJl70KrRBEq2flAU2yZUZIMWFRBmUxM7EHBmMprKNpDEVZBKRUCMLVCv7wm47PgA44fADZCfwGMNum+gI+W7YXF0UmKndwEqRxCeF8+fUCL5oJX2WDU8RMYIooG9LvmcJrEuqnfF/xl9l2p0try7n5tfGDnu4XlPUpK229E0rkleSdrZ9eins26ZJ7weo562PApSp0SMmidkQFZcB5Z6CEMTcBcxfgCCAmJVBfwC7h1hIhKOC1AKEHKgEotpBiCrEONTSlfIFO4mVdbszQppmUoRWhkOWX0QVAooE0yw5Kkt5Ip8l6Fj6UAtDgCglpAlneI+q+Du0kOlrPocFnpoHnYn6gl0jkSZWPef56QeUoq1jfI2nA+nz4B6Vw4/pEphgZSmhGUI7MF7OhmX1V7DvrigstTJTbr4VFbgVYAZFfWowZZ4JRX82JFTNW0VxEehT5ZnZcCXpFYldRUKp0hpCUDloTGCWVcPKfCEq+fcFNWsMs6KXC4EpQEehuFWuVtXdlO1RCWXCvkNJUmO92VkWKp5fCiXOGKXmUUeOXhtcbVF3ucRFOUyEc/T1K91V5Q+UPTJ16JcctOZVciJgbBptCa1Srzr4+cJAUAs8Lu5VqWnlZRmRBERIpnY1ZTs5UXO9lkJAWUIVUKJ3V9vpAUU1eNVJlNZXlZokfVPFLv5aUwVT8KhVEisskQMQBVKVkw4BR6TERYBTKXZZpmvTVVRLgLyWyYEPi+BrgDyF2AlkeALuAAVd+CeBoAZ4Mbw3gI4QuBqAD4CuDPgBgMrVHg6gDMaIApmDbZPQdAKZj6BYQK2Bm17YJAAbApQoJi46aALsBZs5IGsACAxILQAnQAgKdDkgGwLsDkgaAFMBB15IHtDu1WwKSBTAxIFMACAWwAwBZsT4IYDK1uwGgCkgWwFMAbAJAHHXkgpIPqDkgxIFmwCAuwKSBR1aAFmy7AZiWnV7QQdbQA6BDAKSD11AgJnUu1EAJABbAtAAwDEgaAMSB3xUwHtCkgcdQIBTA6dXtDN15ILsB7QWbE3XEgJ0NXWp1aACQAbA3tRpCrgrtVsBZsAwJYmt1awFmxZsJAMSB7QTdVmwdhUwHsC7AtkeSBL1GwLQC7AuYFsB7Q5ILfW7A3dcrXkgJ0AXUMA/9bfXj1q9bsC7AtAPnV51K9WA0nQRdXtD+1ftYvUb1AwCdAZ1ztebVs4lteMDW1ttURS0ApmDF76AQAA=== -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details>
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=PipedreamHQ/pipedream&utm_content=15813):

- 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](https://docs.coderabbit.ai/finishing-touches/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](https://docs.coderabbit.ai/guides/configure-coderabbit) 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](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: CONTRIBUTOR
user: login: GTFalcao
created_at: 2025-03-10T17:20:09Z
body: /approve
author_association: COLLABORATOR