diff --git a/README.md b/README.md index daf5617b..c8a9a190 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ TypeScript

-**Enable AI agents to operate reliably within real workflows. This MCP is monday.com’s open framework for connecting agents into your work OS - giving them secure access to structured data, tools to take action, and the context needed to make smart decisions.** +**Enable AI agents to operate reliably within real workflows. This MCP is monday.com's open framework for connecting agents into your work OS - giving them secure access to structured data, tools to take action, and the context needed to make smart decisions.** @@ -119,7 +119,8 @@ Our MCP server provides a rich set of tools that give AI assistants the ability | **Item Operations** | create_item | Create a new item in a monday.com board with specified column values | | | delete_item | Delete an item from a board permanently | | | get_board_items_by_name | Search for items by board ID and term/name | -| | create_update | Add an update/comment to a specific item | +| | list_board_items | Lists items from a board with pagination, and optional filtering by group ID and item name. | +| | manage_item_updates | Fetches updates for an item or creates a new update on an item. | | | change_item_column_values | Modify the column values of an existing item | | | move_item_to_group | Move an item to a different group within the same board | | **Board Operations** | create_board | Create a new monday.com board with specified columns | diff --git a/packages/agent-toolkit/README.md b/packages/agent-toolkit/README.md index 2e8d9f8f..28d04f77 100644 --- a/packages/agent-toolkit/README.md +++ b/packages/agent-toolkit/README.md @@ -24,7 +24,8 @@ The toolkit includes several pre-built tools for common Monday.com operations, o - `CreateItemTool` - Create a new item in a monday.com board - `DeleteItemTool` - Delete an item from a board - `GetBoardItemsTool` - Get items by board id and term -- `CreateUpdateTool` - Create a new update on a specific item +- `ListBoardItemsTool` - Lists items from a board with pagination, and optional filtering by group ID and item name. +- `ManageItemUpdatesTool` - Fetches, creates, or deletes updates for items or fetches updates for entire boards. Supports array inputs for item and board IDs. - `ChangeItemColumnValuesTool` - Change the column values of an item in a monday.com board - `MoveItemToGroupTool` - Move an item to a group in a monday.com board diff --git a/packages/agent-toolkit/fetch-schema.sh b/packages/agent-toolkit/fetch-schema.sh index 7b3e822b..bceb3966 100755 --- a/packages/agent-toolkit/fetch-schema.sh +++ b/packages/agent-toolkit/fetch-schema.sh @@ -1,2 +1,2 @@ #!/bin/bash - curl "https://api.monday.com/v2/get_schema?format=sdl&version=stable" -o src/monday-graphql/schema.graphql \ No newline at end of file + curl "https://api.monday.com/v2/get_schema?format=sdl&version=current" -o src/monday-graphql/schema.graphql \ No newline at end of file diff --git a/packages/agent-toolkit/src/core/platform-api-tools/create-update-tool.ts b/packages/agent-toolkit/src/core/platform-api-tools/create-update-tool.ts deleted file mode 100644 index fb7ad3d5..00000000 --- a/packages/agent-toolkit/src/core/platform-api-tools/create-update-tool.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { z } from 'zod'; -import { BaseMondayApiTool } from './base-monday-api-tool'; -import { ToolInputType, ToolOutputType, ToolType } from '../tool'; -import { createUpdate } from '../../monday-graphql/queries.graphql'; -import { CreateUpdateMutation, CreateUpdateMutationVariables } from '../../monday-graphql/generated/graphql'; - -export const createUpdateToolSchema = { - itemId: z.number().describe('The id of the item to which the update will be added'), - body: z.string().describe("The update to be created, must be relevant to the user's request"), -}; - -export class CreateUpdateTool extends BaseMondayApiTool { - name = 'create_update'; - type = ToolType.MUTATION; - - getDescription(): string { - return 'Create a new update in a monday.com board'; - } - - getInputSchema(): typeof createUpdateToolSchema { - return createUpdateToolSchema; - } - - async execute(input: ToolInputType): Promise> { - const variables: CreateUpdateMutationVariables = { - itemId: input.itemId.toString(), - body: input.body, - }; - - const res = await this.mondayApi.request(createUpdate, variables); - - return { - content: `Update ${res.create_update?.id} successfully created on item ${input.itemId}`, - }; - } -} diff --git a/packages/agent-toolkit/src/core/platform-api-tools/index.ts b/packages/agent-toolkit/src/core/platform-api-tools/index.ts index b3122bcd..f1062fe8 100644 --- a/packages/agent-toolkit/src/core/platform-api-tools/index.ts +++ b/packages/agent-toolkit/src/core/platform-api-tools/index.ts @@ -1,7 +1,6 @@ import { DeleteItemTool } from './delete-item-tool'; import { GetBoardItemsTool } from './get-board-items-tool'; import { CreateItemTool } from './create-item-tool'; -import { CreateUpdateTool } from './create-update-tool'; import { GetBoardSchemaTool } from './get-board-schema-tool'; import { GetUsersTool } from './get-users-tool'; import { ChangeItemColumnValuesTool } from './change-item-column-values-tool'; @@ -15,12 +14,13 @@ import { GetTypeDetailsTool } from './get-type-details-tool'; import { CreateCustomActivityTool } from './create-custom-activity-tool'; import { CreateTimelineItemTool } from './create-timeline-item-tool'; import { FetchCustomActivityTool } from './fetch-custom-activity-tool'; +import { ManageItemUpdatesTool } from './manage-item-updates-tool'; +import { ListBoardItemsTool } from './list-board-items-tool'; export const allTools = [ DeleteItemTool, GetBoardItemsTool, CreateItemTool, - CreateUpdateTool, GetBoardSchemaTool, GetUsersTool, ChangeItemColumnValuesTool, @@ -34,12 +34,13 @@ export const allTools = [ CreateCustomActivityTool, CreateTimelineItemTool, FetchCustomActivityTool, + ManageItemUpdatesTool, + ListBoardItemsTool, ]; export * from './delete-item-tool'; export * from './get-board-items-tool'; export * from './create-item-tool'; -export * from './create-update-tool'; export * from './get-board-schema-tool'; export * from './get-users-tool'; export * from './change-item-column-values-tool'; @@ -53,3 +54,5 @@ export * from './get-type-details-tool'; export * from './create-custom-activity-tool'; export * from './create-timeline-item-tool'; export * from './fetch-custom-activity-tool'; +export * from './manage-item-updates-tool'; +export * from './list-board-items-tool'; diff --git a/packages/agent-toolkit/src/core/platform-api-tools/list-board-items-tool.ts b/packages/agent-toolkit/src/core/platform-api-tools/list-board-items-tool.ts new file mode 100644 index 00000000..e518dd57 --- /dev/null +++ b/packages/agent-toolkit/src/core/platform-api-tools/list-board-items-tool.ts @@ -0,0 +1,147 @@ +import { z } from 'zod'; +import { BaseMondayApiTool } from './base-monday-api-tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../tool'; +import { listBoardItems } from '../../monday-graphql/queries.graphql'; +import { + ListBoardItemsQuery, + ListBoardItemsQueryVariables, + ItemsQuery, // Actual input type for query_params + ItemsQueryRuleOperator, // Import the enum for operators + // ItemsQueryRule, // Not directly needed if constructing inline +} from '../../monday-graphql/generated/graphql'; + +/** + * Zod schema for the input of the ListBoardItemsTool. + * Defines the arguments required to list items from a board, including pagination and filtering options. + */ +export const listBoardItemsToolSchema = { + /** The ID of the monday.com board from which to list items. */ + boardId: z.number().describe('The ID of the board from which to list items.'), + /** Optional: Maximum number of items to return per page. Defaults to 25. */ + limit: z.number().optional().default(25).describe('Maximum number of items to return per page. Defaults to 25.'), + /** Optional: Cursor for fetching the next page of items. Obtained from a previous call to this tool. */ + cursor: z.string().optional().describe('Cursor for fetching the next page of items. Obtained from a previous call.'), + /** Optional: ID of a specific group within the board to filter items by. */ + groupId: z.string().optional().describe('Optional: ID of a specific group to filter items by.'), + /** Optional: Text to search for within item names. If empty or undefined, no name-based filtering is applied. */ + nameQuery: z + .string() + .optional() + .describe('Optional: Text to search for in item names. If empty or undefined, no name filter is applied.'), +}; + +/** + * A tool for listing items from a monday.com board with comprehensive support for + * pagination and optional filtering by group ID and/or item name. + * + * Key Features: + * - **Pagination**: Use `limit` (default 25) to specify page size and `cursor` (from a previous call) to fetch subsequent pages. + * - **Name Filtering**: Provide `nameQuery` to search for items containing that text in their name. An empty or omitted `nameQuery` applies no name filter. + * - **Group Filtering**: Provide `groupId` to retrieve items only from that specific group. + * - **Combined Filtering**: Both `nameQuery` and `groupId` can be used together. + * + * The tool dynamically constructs query parameters for the Monday.com API based on the provided filters. + * It returns an object containing the `boardName`, an array of `items` for the current page (each item includes `id`, `name`, and `group` details), and a `cursor` string for the next page (or `null` if no more items). + * + * Example Usage: + * - To get the first 10 items: `{ boardId: 123, limit: 10 }` + * - To get items from group 'g123' containing "Task": `{ boardId: 123, groupId: "g123", nameQuery: "Task" }` + * - To get the next page from a previous call: `{ boardId: 123, cursor: "some_cursor_string" }` + */ +export class ListBoardItemsTool extends BaseMondayApiTool { + /** The unique name of the tool. */ + name = 'list_board_items'; + /** The type of the tool, indicating it performs read-only query operations. */ + type = ToolType.QUERY; + + /** + * Provides a detailed, human-readable description of what the tool does, + * intended for an AI model to understand its capabilities and parameters. + * @returns A string describing the tool's purpose, inputs, pagination, filtering, and output structure. + */ + getDescription(): string { + return ( + 'Lists items from a specified monday.com board. Required input: `boardId`. ' + + 'Supports pagination via optional `limit` (default 25) and `cursor` (string from previous call). ' + + 'Optionally filters by `groupId` (string) to get items from a specific group, and/or by `nameQuery` (string) for a text search within item names. ' + + 'If `nameQuery` is empty or omitted, no name filter is applied. ' + + 'Returns an object with `boardName` (string), `items` (array of item objects, each with `id`, `name`, `group`), and `cursor` (string or null for next page).' + ); + } + + /** + * Returns the Zod schema defining the input structure for this tool. + */ + getInputSchema(): typeof listBoardItemsToolSchema { + return listBoardItemsToolSchema; + } + + /** + * Executes the tool's logic to list board items. + * @param input - The input arguments for the tool. + * @returns A promise resolving to an object containing the list of items and a cursor for the next page. + */ + async execute(input: ToolInputType): Promise> { + // Initialize queryParams with the correct type. Cast to any initially to allow dynamic property assignment. + const queryParams: Partial = {}; + queryParams.rules = []; // Initialize rules array + + if (input.nameQuery && input.nameQuery.trim() !== '') { + queryParams.rules.push({ + column_id: 'name', // Standard column ID for item name + compare_value: input.nameQuery, + operator: ItemsQueryRuleOperator.ContainsText, // Use the enum value + }); + } + + if (input.groupId) { + // Based on common Monday.com API patterns, filtering by group in items_page + // often involves specifying the group_id directly within query_params, if supported by ItemsQuery type. + // However, ItemsQuery revealed it doesn't have a direct `group_id` field. + // So, we must use a rule. The exact column_id for group might be 'group'. + // This assumes 'group' is a queryable column ID for group association. + queryParams.rules.push({ + column_id: 'group', // This is an assumption for the group column ID in rules. + // It might need to be different, e.g., a specific system ID for the group column. + compare_value: [input.groupId], // compare_value for AnyOf is typically an array + operator: ItemsQueryRuleOperator.AnyOf, // To match if the item is in any of the specified group_ids (here, just one) + }); + } + + // If no rules were added, rules array should be undefined or not present + if (queryParams.rules.length === 0) { + delete queryParams.rules; // Or set to undefined, depending on API/client preference for empty arrays + } + + const variables: ListBoardItemsQueryVariables = { + boardId: input.boardId.toString(), + limit: input.limit, + cursor: input.cursor, + // Only include queryParams if it has been populated (e.g., with rules) + queryParams: + (queryParams.rules && queryParams.rules.length > 0) || queryParams.groups + ? (queryParams as ItemsQuery) + : undefined, + }; + + try { + const res = await this.mondayApi.request(listBoardItems, variables); + const boardData = res.boards?.[0]; + + if (!boardData) { + return { content: `Board with ID ${input.boardId} not found or access denied.` }; + } + + const itemsPage = boardData.items_page; + const response = { + boardName: boardData.name, + items: itemsPage?.items || [], + cursor: itemsPage?.cursor || null, + }; + return { content: JSON.stringify(response, null, 2) }; + } catch (error: any) { + // console.error(`Error listing items for board ${input.boardId}:`, error); + return { content: `Failed to list items for board ${input.boardId}. Error: ${error.message || 'Unknown error'}` }; + } + } +} diff --git a/packages/agent-toolkit/src/core/platform-api-tools/manage-item-updates-tool.ts b/packages/agent-toolkit/src/core/platform-api-tools/manage-item-updates-tool.ts new file mode 100644 index 00000000..c9dabde1 --- /dev/null +++ b/packages/agent-toolkit/src/core/platform-api-tools/manage-item-updates-tool.ts @@ -0,0 +1,306 @@ +import { z } from 'zod'; +import { BaseMondayApiTool } from './base-monday-api-tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../tool'; +import { fetchItemUpdates, fetchBoardUpdates } from '../../monday-graphql/queries.graphql'; +import { + FetchItemUpdatesQuery, + FetchItemUpdatesQueryVariables, + FetchBoardUpdatesQuery, + FetchBoardUpdatesQueryVariables, + CreateUpdateMutation, + CreateUpdateMutationVariables, + DeleteUpdateMutation, + DeleteUpdateMutationVariables, +} from '../../monday-graphql/generated/graphql'; +import { + createUpdate as createUpdateMutation, + deleteUpdate as deleteUpdateMutation, +} from '../../monday-graphql/queries.graphql'; + +/** + * Zod schema for the input of the ManageItemUpdatesTool. + * Defines the expected structure and types for tool invocation arguments. + */ +export const manageItemUpdatesToolSchema = { + /** + * Array of board IDs (usually one) to fetch updates from. + * Used if 'operation' is 'fetch'. Takes precedence over 'itemId' for fetching if both are provided. + */ + boardId: z + .array(z.number()).min(1) + .optional() + .describe( + 'Array of board IDs (usually one) to fetch updates from. Used if operation is "fetch". Takes precedence over itemId for fetching if both are provided.', + ), + /** + * Array of item IDs. + * For 'fetch': Used if 'boardId' is not provided. Optional if boardId is used for fetching. Provide an array (e.g., [12345] or [123, 456]). + * For 'create'/'delete': Required. Provide an array with one item ID (e.g., [12345]). + */ + itemId: z + .array(z.number()).min(1) + .optional() + .describe( + "Array of item IDs. For 'fetch', used if 'boardId' is not provided. Optional if boardId is used for fetching. Provide an array (e.g., [12345] or [123, 456]). For 'create'/'delete', required. Provide an array with one item ID (e.g., [12345]).", + ), + /** The operation to perform: 'fetch' to retrieve updates, 'create' to add a new update, or 'delete' to remove an update. */ + operation: z + .enum(['fetch', 'create', 'delete']) + .describe("The operation to perform: 'fetch', 'create', or 'delete' updates."), + /** The content of the update to be created. Required only if 'operation' is 'create'. */ + body: z.string().optional().describe('Content of the update to create. Required if operation is "create".'), + /** Maximum number of updates to retrieve per item. Applicable only if 'operation' is 'fetch'. Defaults to 25. API max is 100. */ + limit: z + .number() + .optional() + .default(25) + .describe('Maximum number of updates to fetch per item. Used if operation is "fetch". Defaults to 25.'), + /** ID of the update to be deleted. Required only if 'operation' is 'delete'. */ + updateId: z.number().optional().describe('ID of the update to delete. Required if operation is "delete".'), + /** Optional: ID of the parent update to reply to. Used only if 'operation' is 'create'. */ + parentId: z + .number() + .optional() + .describe("Optional: ID of the parent update to reply to. Used only if 'operation' is 'create'."), +}; + +/** + * A tool for managing item updates (comments) in monday.com. + * + * Use this tool to: + * - Fetch the latest updates for one or more items or entire boards: + * - By item(s): Provide `itemId` (array of one or more item IDs, e.g., `[123]` or `[123, 456]`) and set operation to 'fetch'. + * - By board(s): Provide `boardId` (array of one or more board IDs, e.g., `[8102196205]`) and set operation to 'fetch'. `boardId` takes precedence if both are given. + * Optionally, specify 'limit' to control how many updates are returned per item/board (default is 25). + * - Create a new update on a specific item: Provide `itemId` (array with a single item ID, e.g., `[12345]`), set operation to 'create', and supply 'body'. + * - Delete an existing update from an item: Provide `itemId` (array with a single item ID, e.g., `[12345]`), set operation to 'delete', and supply 'updateId'. + * + * Example usage: + * - To fetch updates for item 123: { itemId: [123], operation: 'fetch' } + * - To fetch updates for items 123 and 456 with a limit of 5: { itemId: [123, 456], operation: 'fetch', limit: 5 } + * - To fetch updates for board 8102196205: { boardId: [8102196205], operation: 'fetch' } + * - To add an update to item 12345: { itemId: [12345], operation: 'create', body: 'This is my update.' } + * - To delete update 67890 from item 12345: { itemId: [12345], operation: 'delete', updateId: 67890 } + */ +export class ManageItemUpdatesTool extends BaseMondayApiTool { + /** The unique name of the tool. */ + name = 'manage_item_updates'; + /** The type of the tool, indicating it can perform mutations (data-changing operations). */ + type = ToolType.MUTATION; + + /** + * Provides a human-readable description of what the tool does. + * @returns A string describing the tool's purpose. + */ + getDescription(): string { + return ( + 'Fetches, creates, or deletes updates (comments) for Monday.com items or fetches updates from boards. ' + + "Use 'operation: fetch' with 'boardId' (number or array of numbers) to retrieve updates for entire board(s), " + + "or with 'itemId' (number or array of numbers) for specific item(s). Optionally specify 'limit'. " + + "If both 'boardId' and 'itemId' are provided for 'fetch', 'boardId' will be used. " + + "Use 'operation: create' to add a new update (requires 'itemId' - number, and 'body', optionally 'parentId' to reply). " + + "Use 'operation: delete' to remove an update (requires 'itemId' - number, and 'updateId'). " + + "If an array of item IDs is given for 'create' or 'delete', only the first ID is used." + ); + } + + /** + * Returns the Zod schema defining the input structure for this tool. + * @returns The Zod schema for tool input. + */ + getInputSchema(): typeof manageItemUpdatesToolSchema { + return manageItemUpdatesToolSchema; + } + + /** + * Executes the tool's logic based on the provided input. + * @param input - The input arguments for the tool, conforming to manageItemUpdatesToolSchema. + * @returns A promise resolving to an object containing the string output of the operation. + */ + async execute(input: ToolInputType): Promise> { + const getSingleItemIdForMutation = (itemIdInput: number[], operation: 'create' | 'delete'): number => { + // itemIdInput is now guaranteed to be an array if provided to this function due to prior checks. + const firstId = itemIdInput[0]; + if (itemIdInput.length > 1) { + // console.warn( + // `[ManageItemUpdatesTool] For '${operation}' operation, only the first item ID (${firstId}) from the provided array [${itemIdInput.join(', ')}] will be used.`, + // ); + } + return firstId; + }; + + if (input.operation === 'fetch') { + const effectiveLimit = input.limit && input.limit > 100 ? 100 : input.limit || 25; + if (input.limit && input.limit > 100) { + // console.warn( + // `[ManageItemUpdatesTool] Requested limit ${input.limit} exceeds API max of 100. Using 100 instead.`, + // ); + } + + if (input.boardId) { + // input.boardId is now guaranteed to be an array of numbers if defined. + const boardIdsForQuery = input.boardId.map((id) => id.toString()); + + const variables: FetchBoardUpdatesQueryVariables = { + boardIds: boardIdsForQuery, + limit: effectiveLimit, + }; + + try { + const res = await this.mondayApi.request(fetchBoardUpdates, variables); + const boardsFromApi = res.boards; + + if (!boardsFromApi || boardsFromApi.length === 0) { + return { + content: `No data returned from API for the provided board ID(s): ${boardIdsForQuery.join(', ')}.`, + }; + } + + // Filter out null boards before processing + const validBoards = boardsFromApi.filter((board) => board !== null) as Array< + Exclude<(typeof boardsFromApi)[0], null> + >; + + if (validBoards.length === 0) { + // This case means all board IDs provided were invalid or returned null + // console.warn( + // `[ManageItemUpdatesTool] No valid boards found for the provided board ID(s): ${boardIdsForQuery.join(', ')}.`, + // ); + return { + content: `No valid boards found or accessible for the provided board ID(s): ${boardIdsForQuery.join(', ')}.`, + }; + } + + const allUpdates = validBoards.flatMap((board) => + (board.updates || []).map((update) => ({ ...update, board_id: board.id })), + ); + + if (allUpdates.length === 0) { + // console.warn( + // `[ManageItemUpdatesTool] No updates found for the specified board ID(s): ${boardIdsForQuery.join(', ')}.`, + // ); + const boardsResponse = validBoards.map((b) => ({ id: b.id, name: b.name, updates: [] })); + return { content: JSON.stringify(boardsResponse, null, 2) }; + } + return { content: JSON.stringify(allUpdates, null, 2) }; + } catch (error: any) { + // console.error(`Error fetching updates for board ID(s) ${boardIdsForQuery.join(', ')}:`, error); + return { + content: `Failed to fetch updates for board ID(s) ${boardIdsForQuery.join(', ')}. Error: ${error.message || 'Unknown error'}`, + }; + } + } else if (input.itemId) { + // input.itemId is now guaranteed to be an array of numbers if defined. + const itemIdsForQuery = input.itemId.map((id) => id.toString()); + + const variables: FetchItemUpdatesQueryVariables = { + itemIds: itemIdsForQuery, + limit: effectiveLimit, + }; + + try { + const res = await this.mondayApi.request(fetchItemUpdates, variables); + const itemsFromApi = res.items; + + if (!itemsFromApi) { + return { content: `No data returned from API for the provided item ID(s): ${itemIdsForQuery.join(', ')}.` }; + } + const validItems = itemsFromApi.filter((item) => item !== null) as Array< + Exclude<(typeof itemsFromApi)[0], null> + >; + + if (validItems.length === 0) { + return { content: `No items found for the provided item ID(s): ${itemIdsForQuery.join(', ')}.` }; + } + + const itemsWithoutUpdates = validItems + .filter((item) => !item.updates || item.updates.length === 0) + .map((item) => item.id); + if (itemsWithoutUpdates.length > 0 && itemsWithoutUpdates.length < validItems.length) { + // console.warn( + // `[ManageItemUpdatesTool] Some items had no updates: ${itemsWithoutUpdates.join(', ')}. Returning full structure.`, + // ); + } else if (itemsWithoutUpdates.length === validItems.length) { + // console.warn( + // `[ManageItemUpdatesTool] None of the fetched items have updates for ID(s): ${itemIdsForQuery.join(', ')}. Returning item structure.`, + // ); + } + return { content: JSON.stringify(validItems, null, 2) }; + } catch (error: any) { + // console.error(`Error fetching updates for item ID(s) ${itemIdsForQuery.join(', ')}:`, error); + return { + content: `Failed to fetch updates for item ID(s) ${itemIdsForQuery.join(', ')}. Error: ${error.message || 'Unknown error'}`, + }; + } + } else { + return { content: 'Error: For "fetch" operation, either "boardId" or "itemId" must be provided.' }; + } + } else if (input.operation === 'create') { + if (!input.body) { + return { content: 'Error: Update body is required for the "create" operation.' }; + } + if (!input.itemId) { + return { content: 'Error: Item ID is required for the "create" operation.' }; + } + const actualItemId = getSingleItemIdForMutation(input.itemId, 'create'); + + const variables: CreateUpdateMutationVariables = { + itemId: actualItemId.toString(), + body: input.body, + // Add parentId if provided + ...(input.parentId && { parentId: input.parentId.toString() }), + }; + + try { + const res = await this.mondayApi.request(createUpdateMutation, variables); + const createdUpdateId = res.create_update?.id; + + if (!createdUpdateId) { + // console.error('Failed to create update or extract ID for item', actualItemId, 'Response:', res); + return { content: `Failed to create update for item ${actualItemId}. No update ID returned.` }; + } + return { content: `Successfully created update with ID ${createdUpdateId} for item ${actualItemId}.` }; + } catch (error: any) { + // console.error(`Error creating update for item ${actualItemId}:`, error); + return { + content: `Failed to create update for item ${actualItemId}. Error: ${error.message || 'Unknown error'}`, + }; + } + } else if (input.operation === 'delete') { + if (!input.updateId) { + return { content: 'Error: Update ID (updateId) is required for the "delete" operation.' }; + } + if (!input.itemId) { + return { content: 'Error: Item ID is required for the "delete" operation.' }; + } + const actualItemId = getSingleItemIdForMutation(input.itemId, 'delete'); + + const variables: DeleteUpdateMutationVariables = { + updateId: input.updateId.toString(), + }; + + try { + const res = await this.mondayApi.request(deleteUpdateMutation, variables); + const deletedUpdateId = res.delete_update?.id; + + if (!deletedUpdateId) { + // console.error( + // `Failed to delete update ${input.updateId} for item ${actualItemId}, or no ID returned. Response:`, + // res, + // ); + return { + content: `Failed to delete update ${input.updateId} for item ${actualItemId}. Update may not exist or an API error occurred.`, + }; + } + return { content: `Successfully deleted update with ID ${deletedUpdateId} from item ${actualItemId}.` }; + } catch (error: any) { + // console.error(`Error deleting update ${input.updateId} for item ${actualItemId}:`, error); + return { + content: `Failed to delete update ${input.updateId} for item ${actualItemId}. Error: ${error.message || 'Unknown error'}`, + }; + } + } else { + throw new Error(`Invalid operation: ${(input as any).operation}. Must be "fetch", "create", or "delete".`); + } + } +} diff --git a/packages/agent-toolkit/src/mcp/toolkit.ts b/packages/agent-toolkit/src/mcp/toolkit.ts index c9f7deda..04c4fd66 100644 --- a/packages/agent-toolkit/src/mcp/toolkit.ts +++ b/packages/agent-toolkit/src/mcp/toolkit.ts @@ -4,6 +4,7 @@ import { CallToolResult } from '@modelcontextprotocol/sdk/types'; import { ApiClient, ApiClientConfig } from '@mondaydotcomorg/api'; import { Tool, allTools } from '../core'; import { filterTools, ToolsConfiguration } from '../core/utils'; +import { zodToJsonSchema } from 'zod-to-json-schema'; export type MondayAgentToolkitConfig = { mondayApiToken: ApiClientConfig['token']; @@ -16,6 +17,7 @@ export class MondayAgentToolkit extends McpServer { private readonly mondayApiClient: ApiClient; constructor(config: MondayAgentToolkitConfig) { + // console.info(JSON.stringify({ level: 'info', event: 'constructor', message: 'MondayAgentToolkit constructor called. Initializing toolkit...' })); super({ name: 'monday.com', version: '1.0.0', @@ -38,6 +40,15 @@ export class MondayAgentToolkit extends McpServer { tools.forEach((tool) => { const inputSchema = tool.getInputSchema(); + // console.info(JSON.stringify({ level: 'info', event: 'register_tool', tool: tool.name, message: `Registering tool: ${tool.name}` })); + if (inputSchema) { + try { + const jsonSchema = zodToJsonSchema(z.object(inputSchema)); + // console.info(JSON.stringify({ level: 'info', event: 'tool_schema', tool: tool.name, schema: jsonSchema })); + } catch (err) { + // console.info(JSON.stringify({ level: 'error', event: 'tool_schema', tool: tool.name, error: String(err) })); + } + } if (!inputSchema) { this.tool(tool.name, tool.getDescription(), async (_extra: any) => { const res = await tool.execute(); diff --git a/packages/agent-toolkit/src/monday-graphql/generated/graphql.ts b/packages/agent-toolkit/src/monday-graphql/generated/graphql.ts index 70954ddc..81820596 100644 --- a/packages/agent-toolkit/src/monday-graphql/generated/graphql.ts +++ b/packages/agent-toolkit/src/monday-graphql/generated/graphql.ts @@ -779,7 +779,7 @@ export enum ColumnType { Subtasks = 'subtasks', /** Add tags to categorize items across multiple boards */ Tags = 'tags', - /** Assign a full team to an item */ + /** Assign a full team to an item */ Team = 'team', /** Add textual information e.g. addresses, names or keywords */ Text = 'text', @@ -823,6 +823,18 @@ export type Complexity = { reset_in_x_seconds: Scalars['Int']['output']; }; +export type ConnectProjectResult = { + __typename?: 'ConnectProjectResult'; + /** A message describing the result of the operation. */ + message?: Maybe; + /** The ID of the created portfolio item, if successful. */ + portfolio_item_id?: Maybe; + /** The unique identifier of the operation. */ + request_id?: Maybe; + /** Indicates if the operation was successful. */ + success?: Maybe; +}; + export type Country = { __typename?: 'Country'; /** The country's two-letter code. */ @@ -1904,7 +1916,7 @@ export enum ItemsQueryRuleOperator { StartsWith = 'starts_with', /** Within the last */ WithinTheLast = 'within_the_last', - /** Within the next */ + /** Within the next */ WithinTheNext = 'within_the_next' } @@ -2159,6 +2171,8 @@ export type Mutation = { clear_item_updates?: Maybe; /** Get the complexity data of your mutations. */ complexity?: Maybe; + /** Connect project to portfolio */ + connect_project_to_portfolio?: Maybe; /** Create a new board. */ create_board?: Maybe; /** Create a new column in board. */ @@ -2447,6 +2461,13 @@ export type MutationClear_Item_UpdatesArgs = { }; +/** Update your monday.com data. */ +export type MutationConnect_Project_To_PortfolioArgs = { + portfolioBoardId: Scalars['ID']['input']; + projectBoardId: Scalars['ID']['input']; +}; + + /** Update your monday.com data. */ export type MutationCreate_BoardArgs = { board_kind: BoardKind; @@ -2616,6 +2637,7 @@ export type MutationCreate_WebhookArgs = { /** Update your monday.com data. */ export type MutationCreate_WorkspaceArgs = { + account_product_id?: InputMaybe; description?: InputMaybe; kind: WorkspaceKind; name: Scalars['String']['input']; @@ -4125,6 +4147,7 @@ export type User = { enabled: Scalars['Boolean']['output']; /** The token of the user for email to board. */ encrypt_api_token?: Maybe; + greeting?: Maybe; /** The user's unique identifier. */ id: Scalars['ID']['output']; /** Is the user an account admin. */ @@ -4701,6 +4724,7 @@ export type CreateItemMutation = { __typename?: 'Mutation', create_item?: { __ty export type CreateUpdateMutationVariables = Exact<{ itemId: Scalars['ID']['input']; body: Scalars['String']['input']; + parentId?: InputMaybe; }>; @@ -4816,3 +4840,36 @@ export type FetchCustomActivityQueryVariables = Exact<{ [key: string]: never; }> export type FetchCustomActivityQuery = { __typename?: 'Query', custom_activity?: Array<{ __typename?: 'CustomActivity', color?: CustomActivityColor | null, icon_id?: CustomActivityIcon | null, id?: string | null, name?: string | null, type?: string | null }> | null }; + +export type FetchItemUpdatesQueryVariables = Exact<{ + itemIds: Array | Scalars['ID']['input']; + limit?: InputMaybe; +}>; + + +export type FetchItemUpdatesQuery = { __typename?: 'Query', items?: Array<{ __typename?: 'Item', id: string, name: string, updates?: Array<{ __typename?: 'Update', id: string, body: string, created_at?: any | null, text_body?: string | null, creator?: { __typename?: 'User', id: string, name: string } | null }> | null } | null> | null }; + +export type DeleteUpdateMutationVariables = Exact<{ + updateId: Scalars['ID']['input']; +}>; + + +export type DeleteUpdateMutation = { __typename?: 'Mutation', delete_update?: { __typename?: 'Update', id: string } | null }; + +export type ListBoardItemsQueryVariables = Exact<{ + boardId: Scalars['ID']['input']; + limit?: InputMaybe; + cursor?: InputMaybe; + queryParams?: InputMaybe; +}>; + + +export type ListBoardItemsQuery = { __typename?: 'Query', boards?: Array<{ __typename?: 'Board', name: string, items_page: { __typename?: 'ItemsResponse', cursor?: string | null, items: Array<{ __typename?: 'Item', id: string, name: string, group?: { __typename?: 'Group', id: string, title: string } | null }> } } | null> | null }; + +export type FetchBoardUpdatesQueryVariables = Exact<{ + boardIds: Array | Scalars['ID']['input']; + limit?: InputMaybe; +}>; + + +export type FetchBoardUpdatesQuery = { __typename?: 'Query', boards?: Array<{ __typename?: 'Board', id: string, name: string, updates?: Array<{ __typename?: 'Update', id: string, body: string, text_body?: string | null, created_at?: any | null, updated_at?: any | null, creator_id?: string | null, item_id?: string | null, creator?: { __typename?: 'User', id: string, name: string } | null, replies?: Array<{ __typename?: 'Reply', id: string, body: string }> | null }> | null } | null> | null }; diff --git a/packages/agent-toolkit/src/monday-graphql/queries.graphql.ts b/packages/agent-toolkit/src/monday-graphql/queries.graphql.ts index 29845863..79e5a981 100644 --- a/packages/agent-toolkit/src/monday-graphql/queries.graphql.ts +++ b/packages/agent-toolkit/src/monday-graphql/queries.graphql.ts @@ -31,8 +31,8 @@ export const createItem = gql` `; export const createUpdate = gql` - mutation createUpdate($itemId: ID!, $body: String!) { - create_update(item_id: $itemId, body: $body) { + mutation createUpdate($itemId: ID!, $body: String!, $parentId: ID) { + create_update(item_id: $itemId, body: $body, parent_id: $parentId) { id } } @@ -428,3 +428,84 @@ export const fetchCustomActivity = gql` } } `; + +export const fetchItemUpdates = gql` + query FetchItemUpdates($itemIds: [ID!]!, $limit: Int) { + items(ids: $itemIds) { + updates(limit: $limit) { + id + body + created_at + text_body # Added for plain text content of the update + creator { + id + name + } + # Consider adding other relevant fields like replies, reactions if needed + } + id # Include item ID to associate updates with items in the response + name # Optionally include item name for context + } + } +`; + +export const deleteUpdate = gql` + mutation DeleteUpdate($updateId: ID!) { + delete_update(id: $updateId) { + id + } + } +`; + +export const listBoardItems = gql` + query ListBoardItems( + $boardId: ID! + $limit: Int + $cursor: String + $queryParams: ItemsQuery # Placeholder type, verify from schema/codegen + ) { + boards(ids: [$boardId]) { + name # Board name for context + items_page(limit: $limit, cursor: $cursor, query_params: $queryParams) { + cursor # For next page + items { + id + name + group { + id + title + } + # Add other commonly useful, lightweight fields if desired + } + } + } + } +`; + +export const fetchBoardUpdates = gql` + query FetchBoardUpdates($boardIds: [ID!]!, $limit: Int) { + boards(ids: $boardIds) { + id + name + updates(limit: $limit) { + id + body + text_body + created_at + updated_at + creator_id + item_id + creator { + id + name + } + replies { + id + body + # Add other reply fields if needed in the future, e.g., creator, created_at + } + # Add other update fields if needed in the future + } + } + } +`; diff --git a/packages/agent-toolkit/src/monday-graphql/schema.graphql b/packages/agent-toolkit/src/monday-graphql/schema.graphql index 6a87c1f7..fdb107e7 100644 --- a/packages/agent-toolkit/src/monday-graphql/schema.graphql +++ b/packages/agent-toolkit/src/monday-graphql/schema.graphql @@ -1,7005 +1,4493 @@ -""" -Exposes a URL that specifies the behavior of this scalar. -""" -directive @specifiedBy( - """ - The URL that specifies the behavior of this scalar. - """ - url: String! -) on SCALAR +"""Get your data from monday.com""" +type Query { + """Get a collection of updates.""" + updates( + """Number of items to get, the default is 25.""" + limit: Int = 25 -""" -Indicates exactly one field must be supplied and this field must not be `null`. -""" -directive @oneOf on INPUT_OBJECT + """Page number to get, starting at 1.""" + page: Int = 1 -""" -Your monday.com account -""" -type Account { - """ - The number of active member users in the account - """ - active_members_count: Int + """A list of items unique identifiers.""" + ids: [ID!] + ): [Update!] + custom_activity( + """The ids of the custom activities to fetch""" + ids: [String!] - """ - The account's country two-letter code in ISO3166 format - """ - country_code: String + """The name of the custom activity, case insensitive and partial match""" + name: String - """ - The first day of the week for the account (sunday / monday) - """ - first_day_of_the_week: FirstDayOfTheWeek! + """The icon of the custom activity""" + icon_id: CustomActivityIcon - """ - The account's unique identifier. - """ - id: ID! + """The color of the custom activity""" + color: CustomActivityColor + ): [CustomActivity!] + timeline_item( + """The id of the timeline item to delete""" + id: ID! + ): TimelineItem - """ - The account's logo. - """ - logo: String + """Fetches timeline items for a given item""" + timeline( + """The id of the item""" + id: ID! + ): TimelineResponse - """ - The account's name. - """ - name: String! + """Get managed column data.""" + managed_column( + """The managed column ids.""" + id: [String!] - """ - The account's payment plan. - """ - plan: Plan + """The state of the managed column.""" + state: [ManagedColumnState!] + ): [ManagedColumn!] + marketplace_app_discounts( + """The id of an app""" + app_id: ID! + ): [MarketplaceAppDiscount!]! + app_subscriptions( + """The ID of an app""" + app_id: ID! + status: SubscriptionStatus - """ - The account's active products - """ - products: [AccountProduct] + """The ID of an account""" + account_id: Int - """ - Show weekends in timeline - """ - show_timeline_weekends: Boolean! + """ + The value, which identifies the exact point to continue fetching the subscriptions from + """ + cursor: String - """ - The product the account signed up to first. - """ - sign_up_product_kind: String + """The size of the requested page""" + limit: Int + ): AppSubscriptions! - """ - The account's slug. - """ - slug: String! + """Get an app by ID.""" + app( + """The ID of the app""" + id: ID! + ): AppType - """ - The account's tier. - """ - tier: String -} + """Get the connected account's information.""" + account: Account -""" -The product a workspace is used in. -""" -type AccountProduct { - """ - The account product default workspace id - """ - default_workspace_id: ID + """Get a collection of installs of an app.""" + app_installs( + """The id of an account to filter app installs by.""" + account_id: ID - """ - The account product id - """ - id: ID + """The id of an application.""" + app_id: ID! - """ - The account product kind (core / marketing / crm / software / - projectManagement / project_management / service / forms / whiteboard). - """ - kind: String -} + """Number of items to get, the default is 25. Max: 100""" + limit: Int = 25 -""" -A role in the account -""" -type AccountRole { - """ - The ID of the role - """ - id: ID + """Page number to get, starting at 1.""" + page: Int = 1 + ): [AppInstall] """ - The name of the role + Get the current app subscription. Note: This query does not work in the playground """ - name: String + app_subscription: [AppSubscription] - """ - The type of the role - """ - roleType: String -} + """Get operations counter current value""" + app_subscription_operations( + """ + Operation name. A string of up to 14 characters containing alphanumeric characters and the symbols -_ + """ + kind: String = "global" + ): AppSubscriptionOperationsCounter -""" -Error that occurred during activation. -""" -type ActivateUsersError { - """ - The error message. - """ - message: String + """Get apps monetization information for an account""" + apps_monetization_info: AppsMonetizationInfo - """ - The error code. - """ - code: ActivateUsersErrorCode + """Get apps monetization status for an account""" + apps_monetization_status: AppMonetizationStatus - """ - The id of the user that caused the error. - """ - user_id: ID -} + """Get a collection of assets by ids.""" + assets( + """Ids of the assets/files you want to get""" + ids: [ID!]! + ): [Asset] -""" -Error codes for activating users. -""" -enum ActivateUsersErrorCode { - EXCEEDS_BATCH_LIMIT - INVALID_INPUT - USER_NOT_FOUND - CANNOT_UPDATE_SELF - FAILED -} + """Get a collection of boards.""" + boards( + """The board's kind (public / private / share)""" + board_kind: BoardKind -""" -Result of activating users. -""" -type ActivateUsersResult { - """ - The users that were activated. - """ - activated_users: [User!] + """A list of boards unique identifiers.""" + ids: [ID!] - """ - Errors that occurred during activation. - """ - errors: [ActivateUsersError!] -} + """Boolean that brings the latest data""" + latest: Boolean -""" -An activity log event -""" -type ActivityLogType { - account_id: String! - created_at: String! + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - The item's column values in string form. - """ - data: String! - entity: String! - event: String! - id: String! - user_id: String! -} + """Property to order by (created_at / used_at).""" + order_by: BoardsOrderBy -type AppFeatureType { - id: ID! - created_at: Date - updated_at: Date + """Page number to get, starting at 1.""" + page: Int = 1 - """ - The name of the app feature - """ - name: String + """ + The state of the board (all / active / archived / deleted), the default is active. + """ + state: State = active - """ - The app feature app id - """ - app_id: ID + """A list of workspace ids the boards are contained in.""" + workspace_ids: [ID] + ): [Board] - """ - The type of the app feature - """ - type: String + """Get the complexity data of your queries.""" + complexity: Complexity - """ - The data of the app feature - """ - data: JSON -} + """Get a collection of docs.""" + docs( + """A list of document unique identifiers.""" + ids: [ID!] -""" -An app install details. -""" -type AppInstall { - """ - The app's unique identifier. - """ - app_id: ID! + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - An app installer's account details. - """ - app_install_account: AppInstallAccount! + """A list of associated board or object’s unique identifier.""" + object_ids: [ID!] - """ - An app installer's user details - """ - app_install_user: AppInstallUser! + """Property to order by (created_at / used_at).""" + order_by: DocsOrderBy - """ - The app's version details - """ - app_version: AppVersion + """Page number to get, starting at 1.""" + page: Int = 1 - """ - The required and approved scopes for an app install. - """ - permissions: AppInstallPermissions + """A list of workspace ids the documents are contained in.""" + workspace_ids: [ID] + ): [Document] """ - Installation date + Get a collection of folders. Note: This query won't return folders from closed workspaces to which you are not subscribed """ - timestamp: String -} + folders( + """A list of folders unique identifiers.""" + ids: [ID!] -""" -An app installer's account details -""" -type AppInstallAccount { - """ - The app's installer account id. - """ - id: ID! -} + """Number of items to get, the default is 25.""" + limit: Int = 25 -""" -The required and approved scopes for an app install. -""" -type AppInstallPermissions { - """ - The scopes approved by the account admin - """ - approved_scopes: [String!]! + """Page number to get, starting at 1.""" + page: Int = 1 - """ - The scopes required by the latest live version - """ - required_scopes: [String!]! -} + """ + A list of workspace unique identifiers to filter folders by workspaces. (pass null to include Main Workspace) + """ + workspace_ids: [ID] + ): [Folder] -""" -An app installer's user details -""" -type AppInstallUser { - """ - The app's installer user id. - """ - id: ID -} + """Get a collection of items.""" + items( + """Excludes items that are inactive, deleted or belong to deleted items""" + exclude_nonactive: Boolean -""" -The app monetization status for the current account -""" -type AppMonetizationStatus { - """ - Is apps monetization is supported for the account - """ - is_supported: Boolean! -} + """A list of items unique identifiers.""" + ids: [ID!] -""" -The app monetization information for the current account -""" -type AppsMonetizationInfo { - """ - The number of seats in the account, across all products, used to match the - app’s subscription among apps that utilize the seats-based monetization method - """ - seats_count: Int -} + """Number of items to get, the default is 25.""" + limit: Int = 25 -""" -The account subscription details for the app. -""" -type AppSubscription { - """ - The type of the billing period [monthly/yearly]. - """ - billing_period: String + """Get the recently created items at the top of the list""" + newest_first: Boolean - """ - The number of days left until the subscription ends. - """ - days_left: Int + """Page number to get, starting at 1.""" + page: Int = 1 + ): [Item] - """ - Is the subscription a trial - """ - is_trial: Boolean + """Search items by multiple columns and values.""" + items_page_by_column_values( + """The board's unique identifier.""" + board_id: ID! - """ - Maximum number of units for current subscription plan. - """ - max_units: Int + """One or more columns, and their values to search items by.""" + columns: [ItemsPageByColumnValuesQuery!] - """ - The subscription plan id (on the app's side). - """ - plan_id: String! + """ + An opaque token representing the position in the result set from which to + resume fetching items. Use this to paginate through large result sets. + """ + cursor: String - """ - The pricing version of subscription plan. - """ - pricing_version: Int + """ + The maximum number of items to fetch in a single request. Use this to + control the size of the result set and manage pagination. Maximum: 500. + """ + limit: Int! = 25 + ): ItemsResponse! - """ - The subscription renewal date. - """ - renewal_date: Date! -} + """Get the connected user's information.""" + me: User -""" -Subscription object -""" -type AppSubscriptionDetails { - """ - The ID of an account - """ - account_id: Int! + """Get next pages of board's items (rows) by cursor.""" + next_items_page( + """ + An opaque token representing the position in the result set from which to + resume fetching items. Use this to paginate through large result sets. + """ + cursor: String! - """ - The ID of a pricing plan - """ - plan_id: String! + """ + The maximum number of items to fetch in a single request. Use this to + control the size of the result set and manage pagination. Maximum: 500. + """ + limit: Int! = 25 + ): ItemsResponse! - """ - The ID of a pricing version - """ - pricing_version_id: Int! + """Get a collection of tags.""" + tags( + """A list of tags unique identifiers.""" + ids: [ID!] + ): [Tag] - """ - The monthly price of the product purchased in the given currency, after applying discounts - """ - monthly_price: Float! + """Get a collection of teams.""" + teams( + """A list of teams unique identifiers.""" + ids: [ID!] + ): [Team] - """ - The currency, in which the product was purchased - """ - currency: String! - period_type: SubscriptionPeriodType! + """Get a collection of users.""" + users( + """A list of users' emails.""" + emails: [String] - """ - The date the active subscription is set to renew. Equals to null for inactive subscriptions - """ - renewal_date: String + """A list of users' unique identifiers.""" + ids: [ID!] - """ - The date the the inactive subscription ended. Equals to null for active subscriptions - """ - end_date: String - status: SubscriptionStatus! - discounts: [SubscriptionDiscount!]! + """The kind to search users by (all / non_guests / guests / non_pending).""" + kind: UserKind - """ - The number of days left until the subscription ends - """ - days_left: Int! -} + """Number of users to get.""" + limit: Int -""" -The Operations counter response for the app action. -""" -type AppSubscriptionOperationsCounter { - """ - The account subscription details for the app. - """ - app_subscription: AppSubscription + """Allows to fuzzy search by name""" + name: String - """ - The new counter value. - """ - counter_value: Int + """Get the recently created users at the top of the list""" + newest_first: Boolean - """ - Operations name. - """ - kind: String! + """Return non active users in the account.""" + non_active: Boolean - """ - Window key. - """ - period_key: String -} + """Page number to get, starting at 1.""" + page: Int + ): [User] -type AppSubscriptions { - subscriptions: [AppSubscriptionDetails!]! + """Get a collection of webhooks for the board""" + webhooks( + """Filters webhooks that were created by the app initiating the request""" + app_webhooks_only: Boolean - """ - Total number of subscriptions matching the given parameters - """ - total_count: Int! + """Board unique identifier.""" + board_id: ID! + ): [Webhook] - """ - The value, which identifies the exact point to continue fetching the subscriptions from - """ - cursor: String -} + """Get a collection of workspaces.""" + workspaces( + """A list of workspace unique identifiers.""" + ids: [ID!] -type AppType { - id: ID! - created_at: Date - updated_at: Date + """The workspace's kind (open / closed)""" + kind: WorkspaceKind - """ - the app name - """ - name: String + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - the api app id - """ - api_app_id: ID + """Property to order by (created_at).""" + order_by: WorkspacesOrderBy - """ - the api app id - """ - client_id: String + """Page number to get, starting at 1.""" + page: Int = 1 - """ - the app kid - """ - kind: String + """ + The state of the workspace (all / active / archived / deleted), the default is active. + """ + state: State = active + ): [Workspace] - """ - the app state - """ - state: String + """Get the API version in use""" + version: Version! - """ - the app user id - """ - user_id: ID + """Get a list containing the versions of the API""" + versions: [Version!] - """ - The apps' features - """ - features( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """Platform API data.""" + platform_api: PlatformApi - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [AppFeatureType!] + """Get all roles for the account""" + account_roles: [AccountRole!] } -""" -An app's version details. -""" -type AppVersion { - """ - The app's major version. - """ - major: Int! +"""Update your monday.com data.""" +type Mutation { + """Like an update.""" + like_update( + """The update identifier.""" + update_id: ID! + ): Update + unlike_update( + """The update identifier.""" + update_id: ID! + ): Update! - """ - The app's minor version. - """ - minor: Int! + """Delete an update.""" + delete_update( + """The update's unique identifier.""" + id: ID! + ): Update + edit_update( + """The update's unique identifier.""" + id: ID! - """ - The app's patch version. - """ - patch: Int! + """The update text.""" + body: String! + ): Update! + pin_to_top( + """The update's unique identifier.""" + id: ID! - """ - The app's version text - """ - text: String! + """The item unique identifier.""" + item_id: ID + ): Update! + unpin_from_top( + """The update's unique identifier.""" + id: ID! - """ - The app's version type. - """ - type: String -} + """The item unique identifier.""" + item_id: ID + ): Update! -""" -A file uploaded to monday.com -""" -type Asset { - """ - The file's creation date. - """ - created_at: Date + """Create a new update.""" + create_update( + """The update text.""" + body: String! - """ - The file's extension. - """ - file_extension: String! + """The item's unique identifier.""" + item_id: ID - """ - The file's size in bytes. - """ - file_size: Int! + """The parent post identifier.""" + parent_id: ID + ): Update + create_timeline_item( + """The item the timeline item will be created in.""" + item_id: ID! - """ - The file's unique identifier. - """ - id: ID! + """The user who created the timeline item. Only for account admins.""" + user_id: Int - """ - The file's name. - """ - name: String! + """The title of the timeline item.""" + title: String! - """ - original geometry of the asset. - """ - original_geometry: String + """The creation time of the event.""" + timestamp: ISO8601DateTime! + summary: String + content: String - """ - public url to the asset, valid for 1 hour. - """ - public_url: String! + """Location field value""" + location: String - """ - The user who uploaded the file. - """ - uploaded_by: User! + """Phone number field value""" + phone: String - """ - url to view the asset. - """ - url: String! + """URL field value""" + url: String - """ - url to view the asset in thumbnail mode. Only available for images. - """ - url_thumbnail: String -} + """The start and end time of the new timeline item.""" + time_range: TimelineItemTimeRange -""" -The source of the asset -""" -enum AssetsSource { - """ - Assets from file columns and item's files gallery - """ - all + """The id of the custom activity of the timeline item.""" + custom_activity_id: String! + ): TimelineItem + delete_timeline_item( + """The id of the timeline item to delete""" + id: String! + ): TimelineItem + create_custom_activity( + """The name of the custom activity""" + name: String! - """ - Assets only from file columns - """ - columns + """The icon of the custom activity""" + icon_id: CustomActivityIcon! - """ - Assets only from item's files gallery - """ - gallery -} + """The color of the custom activity""" + color: CustomActivityColor! + ): CustomActivity + delete_custom_activity( + """The id of the custom activity""" + id: String! + ): CustomActivity -""" -Error that occurred while changing team owners. -""" -type AssignTeamOwnersError { - """ - The error message. - """ - message: String + """Create managed column of type dropdown mutation.""" + create_dropdown_managed_column( + """The column title.""" + title: String! - """ - The error code. - """ - code: AssignTeamOwnersErrorCode + """The column description.""" + description: String + settings: CreateDropdownColumnSettingsInput + ): DropdownManagedColumn - """ - The id of the user that caused the error. - """ - user_id: ID -} + """Create managed column of type status mutation.""" + create_status_managed_column( + """The column title.""" + title: String! -""" -Error codes that can occur while changing team owners. -""" -enum AssignTeamOwnersErrorCode { - VIEWERS_OR_GUESTS - USER_NOT_MEMBER_OF_TEAM - EXCEEDS_BATCH_LIMIT - INVALID_INPUT - USER_NOT_FOUND - CANNOT_UPDATE_SELF - FAILED -} + """The column description.""" + description: String + settings: CreateStatusColumnSettingsInput + ): StatusManagedColumn -""" -Result of changing the team's ownership. -""" -type AssignTeamOwnersResult { - """ - The team for which the owners were changed. - """ - team: Team + """Update managed column of type dropdown mutation.""" + update_dropdown_managed_column( + """The column id.""" + id: String! - """ - Errors that occurred while changing team owners. - """ - errors: [AssignTeamOwnersError!] -} + """The column title.""" + title: String -""" -The role of the user. -""" -enum BaseRoleName { - PORTAL_USER - GUEST - VIEW_ONLY - MEMBER - ADMIN -} + """The column description.""" + description: String + settings: UpdateDropdownColumnSettingsInput -""" -Result of an batch operation -""" -type BatchExtendTrialPeriod { - """ - Details of operations - """ - details: [ExtendTrialPeriod!] + """The column revision.""" + revision: Int! + ): DropdownManagedColumn - """ - Reason of an error - """ - reason: String + """Update managed column of type status mutation.""" + update_status_managed_column( + """The column id.""" + id: String! - """ - Result of a batch operation - """ - success: Boolean! -} + """The column title.""" + title: String -""" -A monday.com board. -""" -type Board { - """ - The unique identifier of the board. - """ - id: ID! + """The column description.""" + description: String + settings: UpdateStatusColumnSettingsInput - """ - The board's updates. - """ - updates( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """The column revision.""" + revision: Int! + ): StatusManagedColumn - """ - Page number to get, starting at 1. - """ - page: Int = 1 + """Activate managed column mutation.""" + activate_managed_column( + """The column id.""" + id: String! + ): ManagedColumn - """ - A list of items unique identifiers. - """ - ids: [ID!] - ): [Update!] + """Deactivate managed column mutation.""" + deactivate_managed_column( + """The column id.""" + id: String! + ): ManagedColumn - """ - The board log events. - """ - activity_logs( - """ - Column ids to filter - """ - column_ids: [String] + """Delete managed column mutation.""" + delete_managed_column( + """The column id.""" + id: String! + ): ManagedColumn + grant_marketplace_app_discount( + """The id of an app""" + app_id: ID! - """ - From timestamp (ISO8601) - """ - from: ISO8601DateTime + """Slug of an account""" + account_slug: String! + data: GrantMarketplaceAppDiscountData! + ): GrantMarketplaceAppDiscountResult! + delete_marketplace_app_discount( + """The id of an app""" + app_id: ID! - """ - Group ids to filter - """ - group_ids: [String] + """Slug of an account""" + account_slug: String! + ): DeleteMarketplaceAppDiscountResult! - """ - Item id to filter - """ - item_ids: [ID!] + """Add a file to a column value.""" + add_file_to_column( + """The column to add the file to.""" + column_id: String! - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """The file to upload.""" + file: File! - """ - Page number to get, starting at 1. - """ - page: Int = 1 + """The item to add the file to.""" + item_id: ID! + ): Asset - """ - To timestamp (ISO8601) - """ - to: ISO8601DateTime + """Add a file to an update.""" + add_file_to_update( + """The file to upload.""" + file: File! - """ - User ids to filter. - """ - user_ids: [ID!] - ): [ActivityLogType] + """The update to add the file to.""" + update_id: ID! + ): Asset - """ - The board's folder unique identifier. - """ - board_folder_id: ID + """Add subscribers to a board.""" + add_subscribers_to_board( + """The board's unique identifier.""" + board_id: ID! - """ - The board's kind (public / private / share). - """ - board_kind: BoardKind! + """Subscribers kind (subscriber / owner)""" + kind: BoardSubscriberKind = subscriber - """ - The board's visible columns. - """ - columns( - """ - A list of column unique identifiers. - """ - ids: [String] + """User ids to subscribe to a board""" + user_ids: [ID!]! + ): [User] @deprecated(reason: "use add_users_to_board instead") - """ - A list of column types. - """ - types: [ColumnType!] - ): [Column] + """Add teams subscribers to a board.""" + add_teams_to_board( + """The board's unique identifier.""" + board_id: ID! - """ - The board's columns namespace. - """ - columns_namespace: String + """Subscribers kind (subscriber / owner)""" + kind: BoardSubscriberKind = subscriber - """ - Get the board communication value - typically meeting ID - """ - communication: JSON + """Team ids to subscribe to a board""" + team_ids: [ID!]! + ): [Team] - """ - The creator of the board. - """ - creator: User! + """Add teams to a workspace.""" + add_teams_to_workspace( + """Subscribers kind (subscriber / owner)""" + kind: WorkspaceSubscriberKind = subscriber - """ - The board's description. - """ - description: String + """Team ids to subscribe to a workspace""" + team_ids: [ID!]! - """ - The board's visible groups. - """ - groups( - """ - A list of group unique identifiers. - """ - ids: [String] - ): [Group] + """The workspace's unique identifier.""" + workspace_id: ID! + ): [Team] - """ - The Board's item nickname, one of a predefined set of values, or a custom user value - """ - item_terminology: String + """Add subscribers to a board.""" + add_users_to_board( + """The board's unique identifier.""" + board_id: ID! - """ - The number of items on the board - """ - items_count: Int + """Subscribers kind (subscriber / owner)""" + kind: BoardSubscriberKind = subscriber - """ - The maximum number of items this board can have - """ - items_limit: Int + """User ids to subscribe to a board""" + user_ids: [ID!]! + ): [User] - """ - The board's items (rows). - """ - items_page( - """ - An opaque token representing the position in the result set from which to - resume fetching items. Use this to paginate through large result sets. - """ - cursor: String + """Add users to team.""" + add_users_to_team( + """The team's unique identifier.""" + team_id: ID! - """ - The maximum number of items to fetch in a single request. Use this to - control the size of the result set and manage pagination. Maximum: 500. - """ - limit: Int! = 25 + """User ids to add to/remove from the team""" + user_ids: [ID!]! + ): ChangeTeamMembershipsResult - """ - A set of parameters to filter, sort, and control the scope of the items - query. Use this to customize the results based on specific criteria. - """ - query_params: ItemsQuery - ): ItemsResponse! + """Add users to a workspace.""" + add_users_to_workspace( + """Subscribers kind (subscriber / owner)""" + kind: WorkspaceSubscriberKind = subscriber - """ - The board's name. - """ - name: String! + """User ids to subscribe to a workspace""" + user_ids: [ID!]! - """ - The owner of the board. - """ - owner: User! - @deprecated(reason: "This field returned creator of the board. Please use 'creator' or 'owners' fields instead.") + """The workspace's unique identifier.""" + workspace_id: ID! + ): [User] - """ - List of user board owners - """ - owners: [User]! + """Archive a board.""" + archive_board( + """The board's unique identifier""" + board_id: ID! + ): Board - """ - The board's permissions. - """ - permissions: String! + """Archives a group in a specific board.""" + archive_group( + """The board's unique identifier.""" + board_id: ID! - """ - The board's state (all / active / archived / deleted). - """ - state: State! + """The group's unique identifier.""" + group_id: String! + ): Group - """ - The board's subscribers. - """ - subscribers: [User]! + """Archive an item.""" + archive_item( + """The item's unique identifier.""" + item_id: ID + ): Item - """ - The board's specific tags. - """ - tags: [Tag] + """Extends trial period of an application to selected accounts""" + batch_extend_trial_period( + """The accounts' slags. Max: 5""" + account_slugs: [String!]! - """ - List of team board owners - """ - team_owners( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """The id of an application.""" + app_id: ID! - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [Team!] + """The amount of days to extend a trial period. Max: 365""" + duration_in_days: Int! - """ - The board's team subscribers. - """ - team_subscribers( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """The id of a payment plan.""" + plan_id: String! + ): BatchExtendTrialPeriod + + """Change a column's properties""" + change_column_metadata( + """The board's unique identifier.""" + board_id: ID! + + """The column's unique identifier.""" + column_id: String! + + """The property name of the column to be changed (title / description).""" + column_property: ColumnProperty + + """The new description of the column.""" + value: String + ): Column + + """Change a column's title""" + change_column_title( + """The board's unique identifier.""" + board_id: ID! + + """The column's unique identifier.""" + column_id: String! + + """The new title of the column.""" + title: String! + ): Column + + """Change an item's column value.""" + change_column_value( + """The board's unique identifier.""" + board_id: ID! + + """The column's unique identifier.""" + column_id: String! """ - Page number to get, starting at 1. + Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) """ - page: Int = 1 - ): [Team!] + create_labels_if_missing: Boolean - """ - The top group at this board. - """ - top_group: Group! + """The item's unique identifier.""" + item_id: ID - """ - The board object type. - """ - type: BoardObjectType + """The new value of the column.""" + value: JSON! + ): Item - """ - The last time the board was updated at. - """ - updated_at: ISO8601DateTime + """Changes the column values of a specific item.""" + change_multiple_column_values( + """The board's unique identifier.""" + board_id: ID! - """ - The Board's url - """ - url: String! + """The column values updates.""" + column_values: JSON! - """ - The board's views. - """ - views( """ - A list of view unique identifiers. + Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) """ - ids: [ID!] + create_labels_if_missing: Boolean + + """The item's unique identifier.""" + item_id: ID + ): Item + + """Change an item's column with simple value.""" + change_simple_column_value( + """The board's unique identifier.""" + board_id: ID! + + """The column's unique identifier.""" + column_id: String! """ - The view's type + Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) """ - type: String - ): [BoardView] + create_labels_if_missing: Boolean - """ - The workspace that contains this board (null for main workspace). - """ - workspace: Workspace + """The item's unique identifier.""" + item_id: ID - """ - The board's workspace unique identifier (null for main workspace). - """ - workspace_id: ID -} + """The new simple value of the column (pass null to empty the column).""" + value: String + ): Item -""" -The board attributes available. -""" -enum BoardAttributes { - """ - Object that contains available Video conferences on the board. - """ - communication + """Clear an item's updates.""" + clear_item_updates( + """The item's unique identifier.""" + item_id: ID! + ): Item - """ - Board description. - """ - description + """Get the complexity data of your mutations.""" + complexity: Complexity - """ - Board name. - """ - name -} + """Create a new board.""" + create_board( + """The board's kind (public / private / share)""" + board_kind: BoardKind! -""" -A board duplication -""" -type BoardDuplication { - """ - The new board created by the duplication - """ - board: Board! + """The board's name""" + board_name: String! - """ - Was the board duplication performed asynchronously - """ - is_async: Boolean! -} + """Optional board owner user ids""" + board_owner_ids: [ID!] -""" -The board kinds available. -""" -enum BoardKind { - """ - Private boards. - """ - private + """Optional board owner team ids""" + board_owner_team_ids: [ID!] - """ - Public boards. - """ - public + """Optional board subscriber ids""" + board_subscriber_ids: [ID!] - """ - Shareable boards. - """ - share -} + """Optional list of subscriber team ids""" + board_subscriber_teams_ids: [ID!] -""" -The board object types. -""" -enum BoardObjectType { - """ - Parent Board. - """ - board + """Optional board's description""" + description: String - """ - Custom Object. - """ - custom_object + """Optional flag to create an empty board (without any default items)""" + empty: Boolean = false - """ - Document. - """ - document + """Optional board folder id""" + folder_id: ID - """ - Sub Items Board. - """ - sub_items_board -} + """Optional board template id""" + template_id: ID -type BoardRelationValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """Optional workspace id""" + workspace_id: ID + ): Board - """ - A string representing all the names of the linked items, separated by commas - """ - display_value: String! + """Create a new column in board.""" + create_column( + """ + The column's unique identifier after which the new column will be inserted. + """ + after_column_id: ID - """ - The column's unique identifier. - """ - id: ID! + """The board's unique identifier.""" + board_id: ID! - """ - The linked items IDs - """ - linked_item_ids: [ID!]! + """The type of column to create.""" + column_type: ColumnType! - """ - The linked items. - """ - linked_items: [Item!]! + """The new column's defaults.""" + defaults: JSON - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String + """The new column's description.""" + description: String - """ - The column's type. - """ - type: ColumnType! + """The column's user-specified unique identifier.""" + id: String - """ - The date when column value was last updated. - """ - updated_at: Date + """The new column's title.""" + title: String! + ): Column - """ - The column's raw value in JSON format. - """ - value: JSON -} + """Create a new doc.""" + create_doc( + """new monday doc location""" + location: CreateDocInput! + ): Document -""" -Options to order by. -""" -enum BoardsOrderBy { - """ - The rank order of the board creation time (desc). - """ - created_at + """Create new document block""" + create_doc_block( + """ + After which block to insert this one. If not provided, will be inserted first in the document + """ + after_block_id: String - """ - The last time the user making the request used the board (desc). - """ - used_at -} + """The block's content.""" + content: JSON! -""" -The board subscriber kind. -""" -enum BoardSubscriberKind { - """ - Board owner. - """ - owner + """The doc's unique identifier.""" + doc_id: ID! - """ - Board subscriber. - """ - subscriber -} + """The parent block id to append the created block under.""" + parent_block_id: String -""" -A board's view. -""" -type BoardView { - """ - The view's unique identifier. - """ - id: ID! + """The block's content type.""" + type: DocBlockContentType! + ): DocumentBlock - """ - The view's name. - """ - name: String! + """Creates a folder in a specific workspace.""" + create_folder( + """The folder's color.""" + color: FolderColor - """ - The view's settings in a string form. - """ - settings_str: String! + """The folder's custom icon.""" + custom_icon: FolderCustomIcon - """ - The view's template id if it was duplicated from other view - """ - source_view_id: ID + """The folder's font weight.""" + font_weight: FolderFontWeight - """ - The view's type. - """ - type: String! + """The folder's name""" + name: String! - """ - Specific board view data (supported only for forms) - """ - view_specific_data_str: String! -} + """The folder's parent folder unique identifier.""" + parent_folder_id: ID -type ButtonValue implements ColumnValue { - """ - The button's color in hex value. - """ - color: String + """The unique identifier of the workspace to create this folder in""" + workspace_id: ID + ): Folder - """ - The column that this value belongs to. - """ - column: Column! + """Creates a new group in a specific board.""" + create_group( + """The board's unique identifier.""" + board_id: ID! - """ - The column's unique identifier. - """ - id: ID! + """A hex representing the group's color""" + group_color: String - """ - The button's label. - """ - label: String - text: String + """The name of the new group.""" + group_name: String! - """ - The column's type. - """ - type: ColumnType! + """ + The group's position in the board. DEPRECATED! Replaced with relative position (position_relative_method, relative_to) + """ + position: String - """ - The column's raw value in JSON format. - """ - value: JSON -} + """The position relative method to another group (before_at / after_at)""" + position_relative_method: PositionRelative -""" -The result of adding users to / removing users from a team. -""" -type ChangeTeamMembershipsResult { - """ - The users that team membership update failed for - """ - failed_users: [User!] + """The group to set the position next to.""" + relative_to: String + ): Group - """ - The users that team membership update succeeded for - """ - successful_users: [User!] -} + """Create a new item.""" + create_item( + """The board's unique identifier.""" + board_id: ID! -type CheckboxValue implements ColumnValue { - """ - The column's boolean value. - """ - checked: Boolean + """The column values of the new item.""" + column_values: JSON - """ - The column that this value belongs to. - """ - column: Column! + """ + Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) + """ + create_labels_if_missing: Boolean - """ - The column's unique identifier. - """ - id: ID! - text: String + """The group's unique identifier.""" + group_id: String - """ - The column's type. - """ - type: ColumnType! + """The new item's name.""" + item_name: String! - """ - The date when column value was last updated. - """ - updated_at: Date - value: JSON -} + """The position relative method to another item (before_at / after_at)""" + position_relative_method: PositionRelative -type ColorPickerValue implements ColumnValue { - """ - The color in hex value. - """ - color: String + """The item to set the position next to.""" + relative_to: ID + ): Item - """ - The column that this value belongs to. - """ - column: Column! + """Create a new notification.""" + create_notification( + """The target's unique identifier.""" + target_id: ID! - """ - The column's unique identifier. - """ - id: ID! - text: String + """The target's type (Project / Post)""" + target_type: NotificationTargetType! - """ - The column's type. - """ - type: ColumnType! + """The notification text.""" + text: String! - """ - The date when column value was last updated. - """ - updated_at: Date + """The user's unique identifier.""" + user_id: ID! + ): Notification - """ - The column's raw value in JSON format. - """ - value: JSON -} + """Create a new tag or get it if it already exists.""" + create_or_get_tag( + """ + The private board id to create the tag at (not needed for public boards) + """ + board_id: ID -type Column { - """ - Is the column archived or not. - """ - archived: Boolean! + """The new tag's name.""" + tag_name: String + ): Tag - """ - The column's description. - """ - description: String + """Create subitem.""" + create_subitem( + """The column values of the new item.""" + column_values: JSON - """ - The column's unique identifier. - """ - id: ID! + """ + Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) + """ + create_labels_if_missing: Boolean - """ - The column's settings in a string form. - """ - settings_str: String! + """The new item's name.""" + item_name: String! - """ - The column's title. - """ - title: String! + """The parent item's unique identifier.""" + parent_item_id: ID! + ): Item - """ - The column's type. - """ - type: ColumnType! + """Create a new webhook.""" + create_webhook( + """The board's unique identifier.""" + board_id: ID! - """ - The column's width. - """ - width: Int -} + """The webhook config""" + config: JSON -""" -An object defining a mapping of column between source board and destination board -""" -input ColumnMappingInput { - """ - The source column's unique identifier. - """ - source: ID! + """The event to listen to""" + event: WebhookEventType! - """ - The target column's unique identifier. - """ - target: ID -} + """The webhook URL.""" + url: String! + ): Webhook -""" -The property name of the column to be changed. -""" -enum ColumnProperty { - """ - the column description. - """ - description + """Create a new workspace.""" + create_workspace( + """The account product's id""" + account_product_id: ID - """ - the column title. - """ - title -} + """The Workspace's description""" + description: String -union ColumnSettings = StatusColumnSettings | DropdownColumnSettings + """The workspace's kind (open / closed)""" + kind: WorkspaceKind! -""" -The columns to create. -""" -enum ColumnType { - """ - Number items according to their order in the group/board - """ - auto_number + """The Workspace's name""" + name: String! + ): Workspace - """ - Connect data from other boards - """ - board_relation + """Delete a board.""" + delete_board( + """The board's unique identifier""" + board_id: ID! + ): Board - """ - Perform actions on items by clicking a button - """ - button + """Delete a column.""" + delete_column( + """The board's unique identifier.""" + board_id: ID! - """ - Check off items and see what's done at a glance - """ - checkbox + """The column's unique identifier.""" + column_id: String! + ): Column - """ - Manage a design system using a color palette - """ - color_picker + """Delete a document block""" + delete_doc_block( + """The block's unique identifier.""" + block_id: String! + ): DocumentBlockIdOnly - """ - Choose a country - """ - country + """Deletes a folder in a specific workspace.""" + delete_folder( + """The folder's unique identifier.""" + folder_id: ID! + ): Folder - """ - Add the item's creator and creation date automatically - """ - creation_log + """Deletes a group in a specific board.""" + delete_group( + """The board's unique identifier.""" + board_id: ID! - """ - Add dates like deadlines to ensure you never drop the ball - """ - date + """The group's unique identifier.""" + group_id: String! + ): Group - """ - Set up dependencies between items in the board - """ - dependency + """Delete an item.""" + delete_item( + """The item's unique identifier.""" + item_id: ID + ): Item - """ - Document your work and increase collaboration - """ - direct_doc + """Remove subscribers from the board.""" + delete_subscribers_from_board( + """The board's unique identifier.""" + board_id: ID! - """ - Document your work and increase collaboration - """ - doc + """User ids to unsubscribe from a board""" + user_ids: [ID!]! + ): [User] - """ - Create a dropdown list of options - """ - dropdown + """Remove team subscribers from the board.""" + delete_teams_from_board( + """The board's unique identifier""" + board_id: ID! - """ - Email team members and clients directly from your board - """ - email + """Team ids to unsubscribe from a workspace""" + team_ids: [ID!]! + ): [Team] - """ - Add files & docs to your item - """ - file + """Delete teams from a workspace.""" + delete_teams_from_workspace( + """Team ids to unsubscribe from a workspace""" + team_ids: [ID!]! - """ - Use functions to manipulate data across multiple columns - """ - formula - group + """The workspace's unique identifier.""" + workspace_id: ID! + ): [Team] - """ - Add times to manage and schedule tasks, shifts and more - """ - hour + """Delete users from a workspace.""" + delete_users_from_workspace( + """User ids to unsubscribe from a workspace""" + user_ids: [ID!]! - """ - Integration is really cool... - """ - integration + """The workspace's unique identifier.""" + workspace_id: ID! + ): [User] - """ - Show all item's assignees - """ - item_assignees + """Delete a new webhook.""" + delete_webhook( + """The webhook's unique identifier.""" + id: ID! + ): Webhook - """ - Show a unique ID for each item - """ - item_id + """Delete workspace.""" + delete_workspace( + """The workspace's unique identifier""" + workspace_id: ID! + ): Workspace - """ - Add the person that last updated the item and the date - """ - last_updated + """Duplicate a board.""" + duplicate_board( + """The board's unique identifier.""" + board_id: ID! - """ - Simply hyperlink to any website - """ - link + """Optional the new board's name. If omitted then automatically generated""" + board_name: String - """ - Place multiple locations on a geographic map - """ - location + """The duplication type.""" + duplicate_type: DuplicateBoardType! - """ - Add large amounts of text without changing column width - """ - long_text + """ + Optional destination folder in destination workspace. Defaults to the original board folder. + """ + folder_id: ID - """ - Show and edit columns' data from connected boards - """ - mirror + """Duplicate the subscribers to the new board. Defaults to false.""" + keep_subscribers: Boolean - """ - Name is really cool... - """ - name + """ + Optional destination workspace. Defaults to the original board workspace. + """ + workspace_id: ID + ): BoardDuplication - """ - Add revenue, costs, time estimations and more - """ - numbers + """Duplicate a group.""" + duplicate_group( + """Should the new group be added to the top.""" + add_to_top: Boolean - """ - Assign people to improve team work - """ - people + """The board's unique identifier.""" + board_id: ID! - """ - Assign a person to increase ownership and accountability (deprecated) - """ - person + """The group's unique identifier.""" + group_id: String! - """ - Call your contacts directly from monday.com - """ - phone + """The group's title.""" + group_title: String + ): Group - """ - Show progress by combining status columns in a battery - """ - progress + """Duplicate an item.""" + duplicate_item( + """The board's unique identifier.""" + board_id: ID! - """ - Rate or rank anything visually - """ - rating + """The item's unique identifier. *Required""" + item_id: ID - """ - Get an instant overview of where things stand - """ - status + """Duplicate with the item's updates.""" + with_updates: Boolean + ): Item - """ - Use the subtasks column to create another level of tasks - """ - subtasks + """Increase operations counter""" + increase_app_subscription_operations( + """Must be positive number.""" + increment_by: Int = 1 - """ - Add tags to categorize items across multiple boards - """ - tags + """ + Operation name. A string of up to 14 characters containing alphanumeric characters and the symbols -_ + """ + kind: String = "global" + ): AppSubscriptionOperationsCounter - """ - Assign a full team to an item - """ - team + """Move an item to a different board.""" + move_item_to_board( + """The unique identifier of a target board.""" + board_id: ID! - """ - Add textual information e.g. addresses, names or keywords - """ - text + """Mapping of columns between the original board and target board""" + columns_mapping: [ColumnMappingInput!] - """ - Easily track time spent on each item, group, and board - """ - time_tracking + """The unique identifier of a target group.""" + group_id: ID! - """ - Visualize your item’s duration, with a start and end date - """ - timeline + """The unique identifier of an item to move.""" + item_id: ID! - """ - Unsupported column type - """ - unsupported + """Mapping of subitem columns between the original board and target board""" + subitems_columns_mapping: [ColumnMappingInput!] + ): Item - """ - Vote on an item e.g. pick a new feature or a favorite lunch place - """ - vote + """Move an item to a different group.""" + move_item_to_group( + """The group's unique identifier.""" + group_id: String! - """ - Select the week on which each item should be completed - """ - week + """The item's unique identifier.""" + item_id: ID + ): Item - """ - Keep track of the time anywhere in the world - """ - world_clock -} + """Remove mock app subscription for the current account""" + remove_mock_app_subscription( + """The app id of the app to remove the mocked subscription for.""" + app_id: ID! -interface ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """The last 10 characters of the app's signing secret.""" + partial_signing_secret: String! + ): AppSubscription - """ - The column's unique identifier. - """ - id: ID! + """Remove users from team.""" + remove_users_from_team( + """The team's unique identifier.""" + team_id: ID! - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String + """User ids to add to/remove from the team""" + user_ids: [ID!]! + ): ChangeTeamMembershipsResult - """ - The column's type. - """ - type: ColumnType! + """Set mock app subscription for the current account""" + set_mock_app_subscription( + """The app id of the app to mock subscription for.""" + app_id: ID! - """ - The column's raw value in JSON format. - """ - value: JSON -} + """Billing period [monthly/yearly]""" + billing_period: String -scalar CompareValue + """Is the subscription a trial""" + is_trial: Boolean -""" -Complexity data. -""" -type Complexity { - """ - The remainder of complexity after the query's execution. - """ - after: Int! + """Maximum number of units for the mocked plan""" + max_units: Int - """ - The remainder of complexity before the query's execution. - """ - before: Int! + """The last 10 characters of the app's signing secret.""" + partial_signing_secret: String! - """ - The specific query's complexity. - """ - query: Int! + """The plan id for the mocked plan""" + plan_id: String - """ - How long in seconds before the complexity budget is reset - """ - reset_in_x_seconds: Int! -} + """Pricing plans version""" + pricing_version: Int -type Country { - """ - The country's two-letter code. - """ - code: String! + """The subscription renewal date""" + renewal_date: Date + ): AppSubscription - """ - The country's name. - """ - name: String! -} + """Update item column value by existing assets""" + update_assets_on_item( + """The board's unique identifier.""" + board_id: ID! -type CountryValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """The column's unique identifier.""" + column_id: String! - """ - The country value. - """ - country: Country + """Array of files values.""" + files: [FileInput!]! - """ - The column's unique identifier. - """ - id: ID! + """The item's unique identifier.""" + item_id: ID! + ): Item - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String + """Update Board attribute.""" + update_board( + """The board's attribute to update (name / description / communication)""" + board_attribute: BoardAttributes! - """ - The column's type. - """ - type: ColumnType! + """The board's unique identifier""" + board_id: ID! - """ - The date when column value was last updated. - """ - updated_at: Date + """The new attribute value.""" + new_value: String! + ): JSON - """ - The column's raw value in JSON format. - """ - value: JSON -} + """Update a document block""" + update_doc_block( + """The block's unique identifier.""" + block_id: String! -input CreateDocBoardInput { - """ - Column id - """ - column_id: String! + """The block's content.""" + content: JSON! + ): DocumentBlock - """ - Item id - """ - item_id: ID! -} + """Updates a folder.""" + update_folder( + """The folder's color.""" + color: FolderColor -input CreateDocInput { - board: CreateDocBoardInput - workspace: CreateDocWorkspaceInput -} + """The folder's custom icon.""" + custom_icon: FolderCustomIcon -input CreateDocWorkspaceInput { - """ - Optional board folder id - """ - folder_id: ID + """The folder's unique identifier""" + folder_id: ID! - """ - The doc's kind (public / private / share) - """ - kind: BoardKind + """The folder's font weight.""" + font_weight: FolderFontWeight - """ - The doc's name - """ - name: String! + """The folder's name""" + name: String - """ - Workspace id - """ - workspace_id: ID! -} + """The folder's parent folder.""" + parent_folder_id: ID + ): Folder -input CreateDropdownColumnSettingsInput { - labels: [CreateDropdownLabelInput!]! -} + """Update an existing group.""" + update_group( + """The board's unique identifier.""" + board_id: ID! -input CreateDropdownLabelInput { - label: String! -} + """ + The groups's attribute to update (title / color / position / relative_position_after / relative_position_before) + """ + group_attribute: GroupAttributes! -input CreateStatusColumnSettingsInput { - labels: [CreateStatusLabelInput!]! -} + """The Group's unique identifier.""" + group_id: String! -input CreateStatusLabelInput { - label: String! - color: StatusColumnColors! - index: Int! - description: String - is_done: Boolean -} + """The new attribute value.""" + new_value: String! + ): Group -""" -Attributes of the team to be created. -""" -input CreateTeamAttributesInput { - """ - The team's name. - """ - name: String! + """Update an existing workspace.""" + update_workspace( + """The attributes of the workspace to update""" + attributes: UpdateWorkspaceAttributesInput! - """ - Whether the team can contain guest users. - """ - is_guest_team: Boolean + """The workspace ID.""" + id: ID + ): Workspace - """ - The parent team identifier. - """ - parent_team_id: ID + """Use a template""" + use_template( + """The board's kind (public / private / share)""" + board_kind: BoardKind - """ - The team members. Must not be empty, unless allow_empty_team is set. - """ - subscriber_ids: [ID!] -} + """Optional board owner user ids""" + board_owner_ids: [Int] -""" -Options for creating a team. -""" -input CreateTeamOptionsInput { - """ - Whether to allow a team without any subscribers. - """ - allow_empty_team: Boolean -} + """Optional board owner team ids""" + board_owner_team_ids: [Int] -type CreationLogValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """Optional board subscriber ids""" + board_subscriber_ids: [Int] - """ - The date when the item was created. - """ - created_at: Date! + """Optional list of subscriber team ids""" + board_subscriber_teams_ids: [Int] - """ - User who created the item - """ - creator: User! + """ + The callback URL to send the workspace, boards and dashboards IDs result, after its completed in the background + """ + callback_url_on_complete: String - """ - ID of the user who created the item - """ - creator_id: ID! + """The folder ID to duplicate the template to.""" + destination_folder_id: Int - """ - The column's unique identifier. - """ - id: ID! - text: String + """ + The folder name to duplicate the template to, in case of multiple boards template + """ + destination_folder_name: String - """ - The column's type. - """ - type: ColumnType! + """The name of the instance""" + destination_name: String - """ - The column's raw value in JSON format. - """ - value: JSON -} + """ + The workspace ID to duplicate the template to, If not defined, it will be created in Main Workspace + """ + destination_workspace_id: Int -type CustomActivity { - id: ID - type: String - name: String - icon_id: CustomActivityIcon - color: CustomActivityColor -} + """Skips target folder creation in multiple entities templates""" + skip_target_folder_creation: Boolean -enum CustomActivityColor { - VIVID_CERULEAN - GO_GREEN - PHILIPPINE_GREEN - YANKEES_BLUE - CELTIC_BLUE - MEDIUM_TURQUOISE - CORNFLOWER_BLUE - MAYA_BLUE - SLATE_BLUE - GRAY - YELLOW_GREEN - DINGY_DUNGEON - PARADISE_PINK - BRINK_PINK - YELLOW_ORANGE - LIGHT_DEEP_PINK - LIGHT_HOT_PINK - PHILIPPINE_YELLOW -} + """Optional adding extra options""" + solution_extra_options: JSON -enum CustomActivityIcon { - ASCENDING - CAMERA - CONFERENCE - FLAG - GIFT - HEADPHONES - HOMEKEYS - LOCATION - PAPERPLANE - PLANE - NOTEBOOK - PLIERS - TRIPOD - TWOFLAGS - UTENCILS -} + """The template ID""" + template_id: Int! + ): Template -""" -The custom fields meta data for user profile. -""" -type CustomFieldMetas { - """ - The custom field meta's description. - """ - description: String + """Connect project to portfolio""" + connect_project_to_portfolio( + """The ID of the project to connect""" + projectBoardId: ID! - """ - Is the custom field meta editable or not. - """ - editable: Boolean + """The ID of the portfolio to connect to""" + portfolioBoardId: ID! + ): ConnectProjectResult - """ - The custom field meta's type. - """ - field_type: String + """Creates a new team.""" + create_team(input: CreateTeamAttributesInput!, options: CreateTeamOptionsInput): Team - """ - Is the custom field meta flagged or not. - """ - flagged: Boolean + """Activates the specified users.""" + activate_users( + """The ids of the users to activate. (Limit: 200)""" + user_ids: [ID!]! + ): ActivateUsersResult - """ - The custom field meta's icon. - """ - icon: String + """Deactivates the specified users.""" + deactivate_users( + """The ids of the users to deactivate. (Limit: 200)""" + user_ids: [ID!]! + ): DeactivateUsersResult - """ - The custom field meta's unique identifier. - """ - id: String + """Deletes the specified team.""" + delete_team( + """The team to be deleted.""" + team_id: ID! + ): Team - """ - The custom field meta's position in the user profile page. - """ - position: String + """Updates the role of the specified users.""" + update_users_role( + """The ids of the users to update. (Limit: 200)""" + user_ids: [ID!]! - """ - The custom field meta's title. - """ - title: String -} + """The base role name (e.g. admin, member, etc.)""" + new_role: BaseRoleName -""" -A custom field value for user profile. -""" -type CustomFieldValue { - """ - The custom field value's meta unique identifier. - """ - custom_field_meta_id: String + """The ID of a custom role""" + role_id: ID + ): UpdateUsersRoleResult - """ - The custom field value. - """ - value: String -} + """Assigns the specified users as owners of the specified team.""" + assign_team_owners( + """The team identifier.""" + team_id: ID! -""" -API usage data. -""" -type DailyAnalytics { - """ - Last time the API usage data was updated. - """ - last_updated: ISO8601DateTime + """The user identifiers (max 200)""" + user_ids: [ID!]! + ): AssignTeamOwnersResult - """ - API usage per day. - """ - by_day: [PlatformApiDailyAnalyticsByDay!]! + """Removes the specified users as owners of the specified team.""" + remove_team_owners( + """The team identifier.""" + team_id: ID! - """ - API usage per app. - """ - by_app: [PlatformApiDailyAnalyticsByApp!]! + """The user identifiers (max 200)""" + user_ids: [ID!]! + ): RemoveTeamOwnersResult - """ - API usage per user. - """ - by_user: [PlatformApiDailyAnalyticsByUser!]! -} + """Updates the email domain for the specified users.""" + update_email_domain(input: UpdateEmailDomainAttributesInput!): UpdateEmailDomainResult -""" -Platform API daily limit. -""" -type DailyLimit { - """ - Base daily limit. - """ - base: Int + """Updates attributes for users.""" + update_multiple_users( + """List of user updates, each containing an ID and attribute updates.""" + user_updates: [UserUpdateInput!]! - """ - Total daily limit. - """ - total: Int + """Whether to bypass email confirmation for claimed domains.""" + bypass_confirmation_for_claimed_domains: Boolean + ): UpdateUserAttributesResult + + """Invite users to the account.""" + invite_users( + """The emails of the users to invite.""" + emails: [String!]! + + """The new role of the users.""" + user_role: UserRole + + """The product to invite the users to""" + product: Product + ): InviteUsersResult } -""" -A date. -""" +"""A date.""" scalar Date -type DateValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! - - """ - The column's date value. - """ - date: String +"""An ISO 8601-encoded datetime (e.g., 2024-04-09T13:45:30Z)""" +scalar ISO8601DateTime - """ - The string representation of selected icon. - """ - icon: String +"""A JSON formatted string.""" +scalar JSON - """ - The column's unique identifier. - """ +"""A monday.com board.""" +type Board { + """The unique identifier of the board.""" id: ID! - """ - The formatted date and time in user time zone. - """ - text: String + """The board's updates.""" + updates( + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - The column's time value. - """ - time: String + """Page number to get, starting at 1.""" + page: Int = 1 - """ - The column's type. - """ - type: ColumnType! + """A list of items unique identifiers.""" + ids: [ID!] + ): [Update!] - """ - The date when column value was last updated. - """ - updated_at: Date + """The board log events.""" + activity_logs( + """Column ids to filter""" + column_ids: [String] - """ - The column's raw value in JSON format. - """ - value: JSON -} + """From timestamp (ISO8601)""" + from: ISO8601DateTime -""" -Error that occurred during deactivation. -""" -type DeactivateUsersError { - """ - The error message. - """ - message: String + """Group ids to filter""" + group_ids: [String] - """ - The error code. - """ - code: DeactivateUsersErrorCode + """Item id to filter""" + item_ids: [ID!] - """ - The id of the user that caused the error. - """ - user_id: ID -} + """Number of items to get, the default is 25.""" + limit: Int = 25 -""" -Error codes for deactivating users. -""" -enum DeactivateUsersErrorCode { - EXCEEDS_BATCH_LIMIT - INVALID_INPUT - USER_NOT_FOUND - CANNOT_UPDATE_SELF - FAILED -} + """Page number to get, starting at 1.""" + page: Int = 1 -""" -Result of deactivating users. -""" -type DeactivateUsersResult { - """ - The users that were deactivated. - """ - deactivated_users: [User!] + """To timestamp (ISO8601)""" + to: ISO8601DateTime - """ - Errors that occurred during deactivation. - """ - errors: [DeactivateUsersError!] -} + """User ids to filter.""" + user_ids: [ID!] + ): [ActivityLogType] -type DeleteMarketplaceAppDiscount { - """ - Slug of an account - """ - account_slug: String! + """The board's folder unique identifier.""" + board_folder_id: ID - """ - The id of an app - """ - app_id: ID! -} + """The board's kind (public / private / share).""" + board_kind: BoardKind! -type DeleteMarketplaceAppDiscountResult { - deleted_discount: DeleteMarketplaceAppDiscount! -} + """The board's visible columns.""" + columns( + """A list of column unique identifiers.""" + ids: [String] -type DependencyValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """A list of column types.""" + types: [ColumnType!] + ): [Column] - """ - A string representing all the names of the linked items, separated by commas - """ - display_value: String! + """The board's columns namespace.""" + columns_namespace: String - """ - The column's unique identifier. - """ - id: ID! + """Get the board communication value - typically meeting ID""" + communication: JSON - """ - The linked items ids - """ - linked_item_ids: [ID!]! + """The creator of the board.""" + creator: User! - """ - The linked items. - """ - linked_items: [Item!]! + """The board's description.""" + description: String - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String + """The board's visible groups.""" + groups( + """A list of group unique identifiers.""" + ids: [String] + ): [Group] """ - The column's type. + The Board's item nickname, one of a predefined set of values, or a custom user value """ - type: ColumnType! + item_terminology: String - """ - The date when column value was last updated. - """ - updated_at: Date + """The number of items on the board""" + items_count: Int - """ - The column's raw value in JSON format. - """ - value: JSON -} + """The maximum number of items this board can have""" + items_limit: Int -""" -The period of a discount -""" -enum DiscountPeriod { - MONTHLY - YEARLY -} + """The board's items (rows).""" + items_page( + """ + An opaque token representing the position in the result set from which to + resume fetching items. Use this to paginate through large result sets. + """ + cursor: String -""" -Various documents blocks types, such as text. -""" -enum DocBlockContentType { - """ - Bulleted list block - """ - bulleted_list + """ + The maximum number of items to fetch in a single request. Use this to + control the size of the result set and manage pagination. Maximum: 500. + """ + limit: Int! = 25 - """ - Check list block - """ - check_list + """ + A set of parameters to filter, sort, and control the scope of the items + query. Use this to customize the results based on specific criteria. + """ + query_params: ItemsQuery + ): ItemsResponse! - """ - Code block - """ - code + """The board's name.""" + name: String! - """ - Divider block - """ - divider + """The owner of the board.""" + owner: User! @deprecated(reason: "This field returned creator of the board. Please use 'creator' or 'owners' fields instead.") - """ - Image block - """ - image + """List of user board owners""" + owners: [User]! - """ - Large title block - """ - large_title + """The board's permissions.""" + permissions: String! - """ - Layout block - """ - layout + """The board's state (all / active / archived / deleted).""" + state: State! - """ - Medium title block - """ - medium_title + """The board's subscribers.""" + subscribers: [User]! - """ - Simple text block - """ - normal_text + """The board's specific tags.""" + tags: [Tag] - """ - Notice block - """ - notice_box + """List of team board owners""" + team_owners( + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - Numbered list block - """ - numbered_list + """Page number to get, starting at 1.""" + page: Int = 1 + ): [Team!] - """ - Page break block - """ - page_break + """The board's team subscribers.""" + team_subscribers( + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - Quote text block - """ - quote + """Page number to get, starting at 1.""" + page: Int = 1 + ): [Team!] - """ - Small title block - """ - small_title + """The top group at this board.""" + top_group: Group! - """ - Table block - """ - table + """The board object type.""" + type: BoardObjectType - """ - Video block - """ - video -} + """The last time the board was updated at.""" + updated_at: ISO8601DateTime -""" -Options to order by. -""" -enum DocsOrderBy { - """ - The rank order of the document creation time (desc). - """ - created_at + """The Board's url""" + url: String! - """ - The last time the user making the request viewd the document (desc). - """ - used_at + """The board's views.""" + views( + """A list of view unique identifiers.""" + ids: [ID!] + + """The view's type""" + type: String + ): [BoardView] + + """The workspace that contains this board (null for main workspace).""" + workspace: Workspace + + """The board's workspace unique identifier (null for main workspace).""" + workspace_id: ID } -""" -A monday.com document. -""" -type Document { - """ - The document's content blocks - """ - blocks( - """ - Number of items to get, the default is 25. - """ +"""An item (table row).""" +type Item { + """The item's unique identifier.""" + id: ID! + + """The item's updates.""" + updates( + """Number of items to get, the default is 25.""" limit: Int = 25 - """ - Page number to get, starting at 1. - """ + """Page number to get, starting at 1.""" page: Int = 1 - ): [DocumentBlock] - """ - The document's creation date. - """ + """A list of items unique identifiers.""" + ids: [ID!] + ): [Update!] + + """The item's assets/files.""" + assets( + """The assets source (all / columns / gallery)""" + assets_source: AssetsSource + + """Ids of the columns you want to get assets from.""" + column_ids: [String] + ): [Asset] + + """The board that contains this item.""" + board: Board + + """The item's column values.""" + column_values( + """A list of column ids to return""" + ids: [String!] + + """A list of column types to return""" + types: [ColumnType!] + ): [ColumnValue!]! + + """The item's create date.""" created_at: Date - """ - The document's creator - """ - created_by: User + """The item's creator.""" + creator: User - """ - The document's folder unique identifier (null for first level). - """ - doc_folder_id: ID + """The unique identifier of the item creator.""" + creator_id: String! - """ - The document's kind (public / private / share). - """ - doc_kind: BoardKind! + """The item's email.""" + email: String! - """ - The document's unique identifier. - """ - id: ID! + """The group that contains this item.""" + group: Group - """ - The document's name. - """ + """The item's linked items""" + linked_items( + """The id of the link to item column""" + link_to_item_column_id: String! + + """The id of the linked board""" + linked_board_id: ID! + ): [Item!]! + + """The item's name.""" name: String! - """ - The associated board or object's unique identifier. - """ - object_id: ID! + """The parent item of a subitem.""" + parent_item: Item - """ - The document's relative url - """ - relative_url: String + """The item's relative path""" + relative_link: String - """ - The document's settings. - """ - settings: JSON + """The item's state (all / active / archived / deleted).""" + state: State - """ - The document's direct url - """ - url: String + """The item's subitems.""" + subitems: [Item] - """ - The workspace that contains this document (null for main workspace). - """ - workspace: Workspace + """The pulses's subscribers.""" + subscribers: [User]! - """ - The document's workspace unique identifier (null for main workspace). - """ - workspace_id: ID -} + """The item's last update date.""" + updated_at: Date -""" -A monday.com document block. -""" -type DocumentBlock { - """ - The block's content. - """ - content: JSON + """The item's link""" + url: String! +} - """ - The block's creation date. - """ +type Like { + id: ID! + creator_id: String + creator: User + reaction_type: String created_at: Date + updated_at: Date +} - """ - The block's creator - """ - created_by: User +"""A reply for an update.""" +type Reply { + """The reply's unique identifier.""" + id: ID! - """ - The block's document unique identifier. - """ - doc_id: ID + """The reply's html formatted body.""" + body: String! + kind: String! - """ - The block's unique identifier. - """ - id: String! + """The unique identifier of the reply creator.""" + creator_id: String + edited_at: Date! - """ - The block's parent block unique identifier. - """ - parent_block_id: String + """The reply's creator.""" + creator: User + likes: [Like!]! + pinned_to_top: [UpdatePin!]! + viewers( + """Number of items to get, the default is 100.""" + limit: Int = 100 - """ - The block's position on the document. - """ - position: Float + """Page number to get, starting at 1.""" + page: Int = 1 + ): [Watcher!]! - """ - The block content type. - """ - type: String + """The reply's creation date.""" + created_at: Date - """ - The block's last updated date. - """ + """The reply's last edit date.""" updated_at: Date -} -""" -A monday.com doc block. -""" -type DocumentBlockIdOnly { - """ - The block's unique identifier. - """ - id: String! + """The reply's text body.""" + text_body: String } -type DocValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! +"""An update.""" +type Update { + """The update's unique identifier.""" + id: ID! - """ - The document file attached to the column. - """ - file: FileDocValue + """The update's html formatted body.""" + body: String! - """ - The column's unique identifier. - """ - id: ID! + """The unique identifier of the update creator.""" + creator_id: String + edited_at: Date! - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String - - """ - The column's type. - """ - type: ColumnType! - - """ - The column's raw value in JSON format. - """ - value: JSON -} - -type DropdownColumnSettings { - type: ManagedColumnTypes - labels: [DropdownLabel!] -} + """The update's creator.""" + creator: User + likes: [Like!]! + pinned_to_top: [UpdatePin!]! + viewers( + """Number of items to get, the default is 100.""" + limit: Int = 100 -type DropdownLabel { - id: Int - label: String - is_deactivated: Boolean -} + """Page number to get, starting at 1.""" + page: Int = 1 + ): [Watcher!]! -type DropdownManagedColumn { - id: String - title: String - description: String - settings_json: JSON - created_by: Int - updated_by: Int - revision: Int - state: ManagedColumnState + """The update's creation date.""" created_at: Date - updated_at: Date - settings: DropdownColumnSettings -} -type DropdownValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """The update's last edit date.""" + updated_at: Date - """ - The column's unique identifier. - """ - id: ID! - text: String + """The update's item ID.""" + item_id: String + item: Item - """ - The column's type. - """ - type: ColumnType! + """The update's replies.""" + replies: [Reply!] - """ - The column's raw value in JSON format. - """ - value: JSON + """The update's assets/files.""" + assets: [Asset] - """ - The selected dropdown values. - """ - values: [DropdownValueOption!]! + """The update's text body.""" + text_body: String } -type DropdownValueOption { - """ - The dropdown item's unique identifier. - """ - id: ID! - - """ - The dropdown item's label. - """ - label: String! +"""The pin to top data of the update.""" +type UpdatePin { + item_id: ID! } -""" -The board duplicate types available. -""" -enum DuplicateBoardType { - """ - Duplicate board with structure and items. - """ - duplicate_board_with_pulses +"""A monday.com user.""" +type User { + """The user's unique identifier.""" + id: ID! - """ - Duplicate board with structure, items and updates. - """ - duplicate_board_with_pulses_and_updates + """The user's account.""" + account: Account! - """ - Duplicate board with structure. - """ - duplicate_board_with_structure -} + """The products the user is assigned to.""" + account_products: [AccountProduct!] -type EmailValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """The user's birthday.""" + birthday: Date - """ - The column's email value. - """ - email: String + """The user's country code.""" + country_code: String - """ - The column's unique identifier. - """ - id: ID! + """The user's creation date.""" + created_at: Date - """ - The column's text value. It can be the same as email when user didn't enter any text. - """ - label: String + """The current user's language""" + current_language: String - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String + """The custom field metas of the user profile.""" + custom_field_metas: [CustomFieldMetas] - """ - The column's type. - """ - type: ColumnType! + """The custom field values of the user profile.""" + custom_field_values: [CustomFieldValue] - """ - The date when column value was last updated. - """ - updated_at: Date + """The user's email.""" + email: String! - """ - The column's raw value in JSON format. - """ - value: JSON -} + """Is the user enabled or not.""" + enabled: Boolean! -""" -Result of a single operation -""" -type ExtendTrialPeriod { - """ - Account slug - """ - account_slug: String! + """The token of the user for email to board.""" + encrypt_api_token: String - """ - Reason of an error - """ - reason: String + """Is the user an account admin.""" + is_admin: Boolean - """ - Result of a single operation - """ - success: Boolean! -} + """Is the user a guest or not.""" + is_guest: Boolean -""" -A multipart file -""" -scalar File + """Is the user a pending user""" + is_pending: Boolean -type FileAssetValue { - """ - The asset associated with the file. - """ - asset: Asset! + """Is user verified his email.""" + is_verified: Boolean - """ - The asset's id. - """ - asset_id: ID! + """Is the user a view only user or not.""" + is_view_only: Boolean - """ - The file's creation date. - """ - created_at: Date! + """The date the user joined the account.""" + join_date: Date - """ - The user who created the file. - """ - creator: User + """Last date & time when user was active""" + last_activity: Date - """ - The ID of user who created the file. - """ - creator_id: ID + """The user's location.""" + location: String - """ - Whether the file is an image. - """ - is_image: Boolean! + """The user's mobile phone number.""" + mobile_phone: String - """ - The file's name. - """ + """The user's name.""" name: String! -} -""" -The type of a link value stored inside a file column -""" -enum FileColumnValue { - """ - Asset file - """ - asset + """The user's out of office status.""" + out_of_office: OutOfOffice - """ - Box file - """ - box + """The user's phone number.""" + phone: String - """ - Doc file - """ - doc + """The user's photo in the original size.""" + photo_original: String - """ - Dropbox file - """ - dropbox + """The user's photo in small size (150x150).""" + photo_small: String - """ - Google Drive file - """ - google_drive + """The user's photo in thumbnail size (100x100).""" + photo_thumb: String - """ - Generic link file - """ - link + """The user's photo in small thumbnail size (50x50).""" + photo_thumb_small: String - """ - OneDrive file - """ - onedrive -} + """The user's photo in tiny size (30x30).""" + photo_tiny: String -type FileDocValue { - """ - The file's creation date. - """ - created_at: Date! + """The product to which the user signed up to first.""" + sign_up_product_kind: String - """ - The user who created the file. - """ - creator: User + """The teams the user is a member in.""" + teams( + """A list of teams unique identifiers.""" + ids: [ID!] + ): [Team] - """ - The ID of user who created the file. - """ - creator_id: ID + """The user's timezone identifier.""" + time_zone_identifier: String - """ - The doc associated with the file. - """ - doc: Document! + """The user's title.""" + title: String - """ - The file's unique identifier. - """ - file_id: ID! + """The user's profile url.""" + url: String! - """ - The associated board or object's unique identifier. - """ - object_id: ID! + """The user’s utc hours difference.""" + utc_hours_diff: Int + greeting: String +} - """ - The file's url. - """ - url: String +"""The viewer of the update.""" +type Watcher { + user_id: ID! + medium: String! + user: User } -input FileInput { - """ - The asset's id. - """ - assetId: ID +type CustomActivity { + id: ID + type: String + name: String + icon_id: CustomActivityIcon + color: CustomActivityColor +} - """ - File kind - """ - fileType: FileColumnValue! - - """ - File link - """ - linkToFile: String - - """ - File display name - """ - name: String! - - """ - The doc's id - """ - objectId: ID -} - -type FileLinkValue { - """ - The file's creation date. - """ - created_at: Date! - - """ - The user who created the file. - """ - creator: User - - """ - The ID of user who created the file. - """ - creator_id: ID - - """ - The file's id. - """ - file_id: ID! - - """ - The file's kind. - """ - kind: FileLinkValueKind! - - """ - The file's name. - """ - name: String! - - """ - The file's url. - """ - url: String -} - -""" -The type of a link value stored inside a file column -""" -enum FileLinkValueKind { - """ - Box file - """ - box - - """ - Dropbox file - """ - dropbox - - """ - Google Drive file - """ - google_drive - - """ - Generic link file - """ - link - - """ - OneDrive file - """ - onedrive -} - -type FileValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! - - """ - The files attached to the column. - """ - files: [FileValueItem!]! - - """ - The column's unique identifier. - """ - id: ID! - text: String - - """ - The column's type. - """ - type: ColumnType! - - """ - The column's raw value in JSON format. - """ - value: JSON -} - -""" -A single file in a column. -""" -union FileValueItem = FileAssetValue | FileDocValue | FileLinkValue - -""" -The first day of work week -""" -enum FirstDayOfTheWeek { - """ - Monday - """ - monday - - """ - Sunday - """ - sunday -} - -""" -A workspace folder containing boards, docs, sub folders, etc. -""" -type Folder { - """ - The various items in the folder, not including sub-folders and dashboards. - """ - children: [Board]! - - """ - The folder's color. - """ - color: FolderColor - - """ - The folder's creation date. - """ - created_at: Date! - - """ - The folder's custom icon. - """ - custom_icon: FolderCustomIcon - - """ - The folder's font weight. - """ - font_weight: FolderFontWeight - - """ - The folder's unique identifier. - """ - id: ID! - - """ - The folder's name. - """ - name: String! - - """ - The folder's user owner unique identifier. - """ - owner_id: ID - - """ - The folder's parent folder. - """ - parent: Folder - - """ - Sub-folders inside this folder. - """ - sub_folders: [Folder]! - - """ - The workspace that contains this folder (null id for main workspace). - """ - workspace: Workspace! -} - -""" -One value out of a list of valid folder colors -""" -enum FolderColor { - """ - aquamarine - """ - AQUAMARINE - - """ - bright-blue - """ - BRIGHT_BLUE - - """ - bright-green - """ - BRIGHT_GREEN - - """ - chili-blue - """ - CHILI_BLUE - - """ - dark-orange - """ - DARK_ORANGE - - """ - dark_purple - """ - DARK_PURPLE - - """ - dark-red - """ - DARK_RED - - """ - done-green - """ - DONE_GREEN - - """ - indigo - """ - INDIGO - - """ - lipstick - """ - LIPSTICK - - """ - No color - """ - NULL - - """ - purple - """ - PURPLE - - """ - sofia_pink - """ - SOFIA_PINK - - """ - stuck-red - """ - STUCK_RED - - """ - sunset - """ - SUNSET - - """ - working_orange - """ - WORKING_ORANGE -} - -""" -One value out of a list of valid folder custom icons -""" -enum FolderCustomIcon { - """ - Folder - """ - FOLDER - - """ - MoreBelow - """ - MOREBELOW - - """ - MoreBelowFilled - """ - MOREBELOWFILLED - - """ - No custom icon - """ - NULL - - """ - Work - """ - WORK -} - -""" -One value out of a list of valid folder font weights -""" -enum FolderFontWeight { - """ - font-weight-bold - """ - FONT_WEIGHT_BOLD - - """ - font-weight-light - """ - FONT_WEIGHT_LIGHT - - """ - font-weight-normal - """ - FONT_WEIGHT_NORMAL - - """ - font-weight-very-light - """ - FONT_WEIGHT_VERY_LIGHT - - """ - No font weight - """ - NULL +enum CustomActivityColor { + VIVID_CERULEAN + GO_GREEN + PHILIPPINE_GREEN + YANKEES_BLUE + CELTIC_BLUE + MEDIUM_TURQUOISE + CORNFLOWER_BLUE + MAYA_BLUE + SLATE_BLUE + GRAY + YELLOW_GREEN + DINGY_DUNGEON + PARADISE_PINK + BRINK_PINK + YELLOW_ORANGE + LIGHT_DEEP_PINK + LIGHT_HOT_PINK + PHILIPPINE_YELLOW } -type FormulaValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! - - """ - The column's unique identifier. - """ - id: ID! - - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String - - """ - The column's type. - """ - type: ColumnType! - - """ - The column's raw value in JSON format. - """ - value: JSON - - """ - A string representing all the formula values, separated by commas - """ - display_value: String! +enum CustomActivityIcon { + ASCENDING + CAMERA + CONFERENCE + FLAG + GIFT + HEADPHONES + HOMEKEYS + LOCATION + PAPERPLANE + PLANE + NOTEBOOK + PLIERS + TRIPOD + TWOFLAGS + UTENCILS } -type GrantMarketplaceAppDiscount { - """ - Number of days a discount will be valid - """ - days_valid: Int! - - """ - Percentage value of a discount - """ - discount: Int! - - """ - Is discount recurring - """ - is_recurring: Boolean! - period: DiscountPeriod - - """ - List of app plan ids - """ - app_plan_ids: [String!]! +type TimelineItem { + id: ID + type: String - """ - The id of an app - """ - app_id: ID! -} + """The item that the timeline item is on.""" + item: Item -input GrantMarketplaceAppDiscountData { - """ - Number of days a discount will be valid - """ - days_valid: Int! + """The board that the timeline item is on.""" + board: Board - """ - Percentage value of a discount - """ - discount: Int! + """The user who created the timeline item.""" + user: User - """ - Is discount recurring - """ - is_recurring: Boolean! + """The title of the timeline item.""" + title: String - """ - The period of a discount - """ - period: DiscountPeriod + """The external ID of the custom activity of the timeline item.""" + custom_activity_id: String - """ - List of app plan ids - """ - app_plan_ids: [String!]! -} + """The content of the timeline item.""" + content: String -type GrantMarketplaceAppDiscountResult { - granted_discount: GrantMarketplaceAppDiscount! + """The creation date of the timeline item.""" + created_at: Date! } -""" -A group of items in a board. -""" -type Group { - """ - Is the group archived or not. - """ - archived: Boolean +type TimelineItemsPage { + """The timeline items in the current page""" + timeline_items: [TimelineItem!]! - """ - The group's color. - """ - color: String! + """Cursor for fetching the next page""" + cursor: String +} - """ - Is the group deleted or not. - """ - deleted: Boolean +input TimelineItemTimeRange { + """Start time""" + start_timestamp: ISO8601DateTime! - """ - The group's unique identifier. - """ - id: ID! + """End time""" + end_timestamp: ISO8601DateTime! +} - """ - The items in the group. - """ - items_page( - """ - An opaque token representing the position in the result set from which to - resume fetching items. Use this to paginate through large result sets. - """ - cursor: String +type TimelineResponse { + """Paginated set of timeline items and a cursor to get the next page""" + timeline_items_page( + """The cursor for the next set of timeline items""" + cursor: String = null - """ - The maximum number of items to fetch in a single request. Use this to - control the size of the result set and manage pagination. Maximum: 500. - """ - limit: Int! = 25 + """The limit for the current page of timeline items""" + limit: Int = 25 + ): TimelineItemsPage! +} - """ - A set of parameters to filter, sort, and control the scope of the items - query. Use this to customize the results based on specific criteria. - """ - query_params: ItemsQuery - ): ItemsResponse! +union ColumnSettings = StatusColumnSettings | DropdownColumnSettings - """ - The group's position in the board. - """ - position: String! +input CreateDropdownColumnSettingsInput { + labels: [CreateDropdownLabelInput!]! +} - """ - The group's title. - """ - title: String! +input CreateDropdownLabelInput { + label: String! } -""" -The group attributes available. -""" -enum GroupAttributes { - """ - Group color (one of the supported colors, check the API documentation). - """ - color +input CreateStatusColumnSettingsInput { + labels: [CreateStatusLabelInput!]! +} - """ - The group's position in the board. Deprecated! - replaced with relative position - """ - position +input CreateStatusLabelInput { + label: String! + color: StatusColumnColors! + index: Int! + description: String + is_done: Boolean +} - """ - The group's relative position after another group in the board. - """ - relative_position_after +type DropdownColumnSettings { + type: ManagedColumnTypes + labels: [DropdownLabel!] +} - """ - The group's relative position before another group in the board. - """ - relative_position_before +type DropdownLabel { + id: Int + label: String + is_deactivated: Boolean +} - """ - Group title. - """ - title +type DropdownManagedColumn { + id: String + title: String + description: String + settings_json: JSON + created_by: Int + updated_by: Int + revision: Int + state: ManagedColumnState + created_at: Date + updated_at: Date + settings: DropdownColumnSettings } -type GroupValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! +type ManagedColumn { + id: String + title: String + description: String + settings_json: JSON + created_by: Int + updated_by: Int + revision: Int + state: ManagedColumnState + created_at: Date + updated_at: Date + settings: ColumnSettings +} - """ - The group value. - """ - group: Group +enum ManagedColumnState { + active + deleted + inactive +} - """ - The group identifier. - """ - group_id: ID +enum ManagedColumnTypes { + status + dropdown +} - """ - The column's unique identifier. - """ - id: ID! +enum StatusColumnColors { + working_orange + done_green + stuck_red + dark_blue + purple + explosive + grass_green + bright_blue + saladish + egg_yolk + blackish + dark_red + sofia_pink + lipstick + dark_purple + bright_green + chili_blue + american_gray + brown + dark_orange + sunset + bubble + peach + berry + winter + river + navy + aquamarine + indigo + dark_indigo + pecan + lavender + royal + steel + orchid + lilac + tan + sky + coffee + teal +} - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String +type StatusColumnSettings { + type: ManagedColumnTypes + labels: [StatusLabel!] +} - """ - The column's type. - """ - type: ColumnType! +type StatusLabel { + id: Int + label: String + color: StatusColumnColors + index: Int + description: String + is_deactivated: Boolean + is_done: Boolean +} - """ - The column's raw value in JSON format. - """ - value: JSON +type StatusManagedColumn { + id: String + title: String + description: String + settings_json: JSON + created_by: Int + updated_by: Int + revision: Int + state: ManagedColumnState + created_at: Date + updated_at: Date + settings: StatusColumnSettings } -type HourValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! +input UpdateDropdownColumnSettingsInput { + labels: [UpdateDropdownLabelInput!]! +} - """ - Hour - """ - hour: Int +input UpdateDropdownLabelInput { + label: String! + id: Int + is_deactivated: Boolean +} - """ - The column's unique identifier. - """ - id: ID! +input UpdateStatusColumnSettingsInput { + labels: [UpdateStatusLabelInput!]! +} - """ - Minute - """ - minute: Int - text: String +input UpdateStatusLabelInput { + label: String! + color: StatusColumnColors! + index: Int! + description: String + is_done: Boolean + id: Int + is_deactivated: Boolean +} - """ - The column's type. - """ - type: ColumnType! +"""Subscription object""" +type AppSubscriptionDetails { + """The ID of an account""" + account_id: Int! - """ - The date when column value was last updated. - """ - updated_at: Date + """The ID of a pricing plan""" + plan_id: String! - """ - The column's raw value in JSON format. - """ - value: JSON -} + """The ID of a pricing version""" + pricing_version_id: Int! -type IntegrationValue implements ColumnValue { """ - The column that this value belongs to. + The monthly price of the product purchased in the given currency, after applying discounts """ - column: Column! + monthly_price: Float! - """ - ID of the entity - """ - entity_id: ID + """The currency, in which the product was purchased""" + currency: String! + period_type: SubscriptionPeriodType! """ - The column's unique identifier. + The date the active subscription is set to renew. Equals to null for inactive subscriptions """ - id: ID! + renewal_date: String """ - URL of the issue + The date the the inactive subscription ended. Equals to null for active subscriptions """ - issue_api_url: ID + end_date: String + status: SubscriptionStatus! + discounts: [SubscriptionDiscount!]! - """ - ID of the issue - """ - issue_id: String + """The number of days left until the subscription ends""" + days_left: Int! +} - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String +type AppSubscriptions { + subscriptions: [AppSubscriptionDetails!]! - """ - The column's type. - """ - type: ColumnType! + """Total number of subscriptions matching the given parameters""" + total_count: Int! """ - The column's raw value in JSON format. + The value, which identifies the exact point to continue fetching the subscriptions from """ - value: JSON + cursor: String } -""" -Error that occurred while inviting users -""" -type InviteUsersError { - """ - The error message. - """ - message: String +type DeleteMarketplaceAppDiscount { + """Slug of an account""" + account_slug: String! - """ - The error code. - """ - code: InviteUsersErrorCode + """The id of an app""" + app_id: ID! +} - """ - The email address for the user that caused the error. - """ - email: ID +type DeleteMarketplaceAppDiscountResult { + deleted_discount: DeleteMarketplaceAppDiscount! } -""" -Error codes that can occur while changing email domain. -""" -enum InviteUsersErrorCode { - ERROR +"""The period of a discount""" +enum DiscountPeriod { + MONTHLY + YEARLY } -""" -Result of inviting users to the account. -""" -type InviteUsersResult { - """ - The users that were successfully invited. - """ - invited_users: [User!] +type GrantMarketplaceAppDiscount { + """Number of days a discount will be valid""" + days_valid: Int! - """ - Errors that occurred while inviting users - """ - errors: [InviteUsersError!] + """Percentage value of a discount""" + discount: Int! + + """Is discount recurring""" + is_recurring: Boolean! + period: DiscountPeriod + + """List of app plan ids""" + app_plan_ids: [String!]! + + """The id of an app""" + app_id: ID! } -""" -An ISO 8601-encoded datetime (e.g., 2024-04-09T13:45:30Z) -""" -scalar ISO8601DateTime +input GrantMarketplaceAppDiscountData { + """Number of days a discount will be valid""" + days_valid: Int! -""" -An item (table row). -""" -type Item { - """ - The item's unique identifier. - """ - id: ID! + """Percentage value of a discount""" + discount: Int! - """ - The item's updates. - """ - updates( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """Is discount recurring""" + is_recurring: Boolean! - """ - Page number to get, starting at 1. - """ - page: Int = 1 + """The period of a discount""" + period: DiscountPeriod - """ - A list of items unique identifiers. - """ - ids: [ID!] - ): [Update!] + """List of app plan ids""" + app_plan_ids: [String!]! +} - """ - The item's assets/files. - """ - assets( - """ - The assets source (all / columns / gallery) - """ - assets_source: AssetsSource +type GrantMarketplaceAppDiscountResult { + granted_discount: GrantMarketplaceAppDiscount! +} - """ - Ids of the columns you want to get assets from. - """ - column_ids: [String] - ): [Asset] +type MarketplaceAppDiscount { + """Slug of an account""" + account_slug: String! - """ - The board that contains this item. - """ - board: Board + """The ID of an account""" + account_id: ID! - """ - The item's column values. - """ - column_values( - """ - A list of column ids to return - """ - ids: [String!] + """Percentage value of a discount""" + discount: Int! - """ - A list of column types to return - """ - types: [ColumnType!] - ): [ColumnValue!]! + """Is discount recurring""" + is_recurring: Boolean! - """ - The item's create date. - """ - created_at: Date + """List of app plan ids""" + app_plan_ids: [String!]! + period: DiscountPeriod - """ - The item's creator. - """ - creator: User + """Date until a discount is valid""" + valid_until: String! - """ - The unique identifier of the item creator. - """ - creator_id: String! + """Date when a discount was created""" + created_at: String! +} +"""The discounts granted to the subscription""" +type SubscriptionDiscount { """ - The item's email. + The value of the discount in percentage (e.g. the value 80 refers to 80%) """ - email: String! + value: Int! + discount_model_type: SubscriptionDiscountModelType! + discount_type: SubscriptionDiscountType! +} - """ - The group that contains this item. - """ - group: Group +"""The information whether the discount is percentage or nominal""" +enum SubscriptionDiscountModelType { + percent + nominal +} - """ - The item's linked items - """ - linked_items( - """ - The id of the link to item column - """ - link_to_item_column_id: String! +""" +The information whether the discount has been granted one time or recurring +""" +enum SubscriptionDiscountType { + recurring + one_time +} - """ - The id of the linked board - """ - linked_board_id: ID! - ): [Item!]! +""" +The billing period of the subscription. Possible values: monthly, yearly +""" +enum SubscriptionPeriodType { + monthly + yearly +} - """ - The item's name. - """ - name: String! +"""The status of the subscription. Possible values: active, inactive.""" +enum SubscriptionStatus { + active + inactive +} - """ - The parent item of a subitem. - """ - parent_item: Item +type AppFeatureType { + id: ID! + created_at: Date + updated_at: Date - """ - The item's relative path - """ - relative_link: String + """The name of the app feature""" + name: String - """ - The item's state (all / active / archived / deleted). - """ - state: State + """The app feature app id""" + app_id: ID - """ - The item's subitems. - """ - subitems: [Item] + """The type of the app feature""" + type: String - """ - The pulses's subscribers. - """ - subscribers: [User]! + """The data of the app feature""" + data: JSON +} - """ - The item's last update date. - """ +type AppType { + id: ID! + created_at: Date updated_at: Date - """ - The item's link - """ - url: String! -} + """the app name""" + name: String -type ItemIdValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """the api app id""" + api_app_id: ID - """ - The column's unique identifier. - """ - id: ID! + """the api app id""" + client_id: String - """ - ID of the item - """ - item_id: ID! - text: String + """the app kid""" + kind: String - """ - The column's type. - """ - type: ColumnType! + """the app state""" + state: String - """ - The column's raw value in JSON format. - """ - value: JSON -} + """the app user id""" + user_id: ID -""" -The direction to order the items by -""" -enum ItemsOrderByDirection { - """ - Ascending order - """ - asc + """The apps' features""" + features( + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - Descending order - """ - desc + """Page number to get, starting at 1.""" + page: Int = 1 + ): [AppFeatureType!] } -input ItemsPageByColumnValuesQuery { - """ - The column's unique identifier. - """ - column_id: String! +"""Your monday.com account""" +type Account { + """The number of active member users in the account""" + active_members_count: Int - """ - The column values to search items by. - """ - column_values: [String]! -} + """The account's country two-letter code in ISO3166 format""" + country_code: String -input ItemsQuery { - """ - A list of rule groups - """ - groups: [ItemsQueryGroup!] + """The first day of the week for the account (sunday / monday)""" + first_day_of_the_week: FirstDayOfTheWeek! - """ - A list of item IDs to fetch. Use this to fetch a specific set of items by their IDs. Max: 100 IDs - """ - ids: [ID!] + """The account's unique identifier.""" + id: ID! - """ - The operator to use for the query rules or rule groups - """ - operator: ItemsQueryOperator = and - order_by: [ItemsQueryOrderBy!] + """The account's logo.""" + logo: String - """ - A list of rules - """ - rules: [ItemsQueryRule!] -} + """The account's name.""" + name: String! -input ItemsQueryGroup { - """ - A list of rule groups - """ - groups: [ItemsQueryGroup!] + """The account's payment plan.""" + plan: Plan - """ - The operator to use for the query rules or rule groups - """ - operator: ItemsQueryOperator = and + """The account's active products""" + products: [AccountProduct] - """ - A list of rules - """ - rules: [ItemsQueryRule!] -} + """Show weekends in timeline""" + show_timeline_weekends: Boolean! -""" -The condition between the query rules -""" -enum ItemsQueryOperator { - """ - Logical AND - """ - and + """The product the account signed up to first.""" + sign_up_product_kind: String - """ - Logical OR - """ - or -} + """The account's slug.""" + slug: String! -input ItemsQueryOrderBy { - column_id: String! - direction: ItemsOrderByDirection = asc + """The account's tier.""" + tier: String } -input ItemsQueryRule { - column_id: ID! - compare_attribute: String - compare_value: CompareValue! - operator: ItemsQueryRuleOperator = any_of -} +"""The product a workspace is used in.""" +type AccountProduct { + """The account product default workspace id""" + default_workspace_id: ID -""" -The operator to use for the value comparison -""" -enum ItemsQueryRuleOperator { - """ - Any of the values - """ - any_of + """The account product id""" + id: ID """ - Between the two values + The account product kind (core / marketing / crm / software / + projectManagement / project_management / service / forms / whiteboard). """ - between + kind: String +} - """ - Contains all the terms - """ - contains_terms +"""An activity log event""" +type ActivityLogType { + """""" + account_id: String! - """ - Contains the text - """ - contains_text + """""" + created_at: String! - """ - Ends with the value - """ - ends_with + """The item's column values in string form.""" + data: String! - """ - Greater than the value - """ - greater_than + """""" + entity: String! - """ - Greater than or equal to the value - """ - greater_than_or_equals + """""" + event: String! - """ - Empty value - """ - is_empty + """""" + id: String! - """ - Not empty value - """ - is_not_empty + """""" + user_id: String! +} - """ - Lower than the value - """ - lower_than +"""An app install details.""" +type AppInstall { + """The app's unique identifier.""" + app_id: ID! - """ - Lower than or equal to the value - """ - lower_than_or_equal + """An app installer's account details.""" + app_install_account: AppInstallAccount! - """ - None of the values - """ - not_any_of + """An app installer's user details""" + app_install_user: AppInstallUser! - """ - Does not contain the text - """ - not_contains_text + """The app's version details""" + app_version: AppVersion - """ - Starts with the value - """ - starts_with + """The required and approved scopes for an app install.""" + permissions: AppInstallPermissions - """ - Within the last - """ - within_the_last + """Installation date""" + timestamp: String +} - """ - Within the next - """ - within_the_next +"""An app installer's account details""" +type AppInstallAccount { + """The app's installer account id.""" + id: ID! } -type ItemsResponse { - """ - An opaque cursor that represents the position in the list after the last - returned item. Use this cursor for pagination to fetch the next set of items. - If the cursor is null, there are no more items to fetch. - """ - cursor: String +"""The required and approved scopes for an app install.""" +type AppInstallPermissions { + """The scopes approved by the account admin""" + approved_scopes: [String!]! + + """The scopes required by the latest live version""" + required_scopes: [String!]! +} + +"""An app installer's user details""" +type AppInstallUser { + """The app's installer user id.""" + id: ID +} +"""The app monetization status for the current account""" +type AppMonetizationStatus { + """Is apps monetization is supported for the account""" + is_supported: Boolean! +} + +"""The app monetization information for the current account""" +type AppsMonetizationInfo { """ - The items associated with the cursor. + The number of seats in the account, across all products, used to match the + app’s subscription among apps that utilize the seats-based monetization method """ - items: [Item!]! + seats_count: Int } -""" -A JSON formatted string. -""" -scalar JSON +"""The account subscription details for the app.""" +type AppSubscription { + """The type of the billing period [monthly/yearly].""" + billing_period: String + + """The number of days left until the subscription ends.""" + days_left: Int + + """Is the subscription a trial""" + is_trial: Boolean + + """Maximum number of units for current subscription plan.""" + max_units: Int -""" -Kind of assignee -""" -enum Kind { - """ - Represents a person - """ - person + """The subscription plan id (on the app's side).""" + plan_id: String! - """ - Represents a team - """ - team + """The pricing version of subscription plan.""" + pricing_version: Int + + """The subscription renewal date.""" + renewal_date: Date! } -type LastUpdatedValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! +"""The Operations counter response for the app action.""" +type AppSubscriptionOperationsCounter { + """The account subscription details for the app.""" + app_subscription: AppSubscription - """ - The column's unique identifier. - """ - id: ID! - text: String + """The new counter value.""" + counter_value: Int - """ - The column's type. - """ - type: ColumnType! + """Operations name.""" + kind: String! - """ - Timestamp of the last time the item was updated - """ - updated_at: Date + """Window key.""" + period_key: String +} - """ - User who updated the item - """ - updater: User +"""An app's version details.""" +type AppVersion { + """The app's major version.""" + major: Int! - """ - ID of the user who updated the item - """ - updater_id: ID + """The app's minor version.""" + minor: Int! - """ - The column's raw value in JSON format. - """ - value: JSON + """The app's patch version.""" + patch: Int! + + """The app's version text""" + text: String! + + """The app's version type.""" + type: String } -type Like { - id: ID! - creator_id: String - creator: User - reaction_type: String +"""A file uploaded to monday.com""" +type Asset { + """The file's creation date.""" created_at: Date - updated_at: Date -} -type LinkValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """The file's extension.""" + file_extension: String! - """ - The column's unique identifier. - """ + """The file's size in bytes.""" + file_size: Int! + + """The file's unique identifier.""" id: ID! - text: String - """ - The column's type. - """ - type: ColumnType! + """The file's name.""" + name: String! - """ - The date when column value was last updated. - """ - updated_at: Date + """original geometry of the asset.""" + original_geometry: String - """ - Url - """ - url: String + """public url to the asset, valid for 1 hour.""" + public_url: String! - """ - Url text - """ - url_text: String + """The user who uploaded the file.""" + uploaded_by: User! - """ - The column's raw value in JSON format. - """ - value: JSON + """url to view the asset.""" + url: String! + + """url to view the asset in thumbnail mode. Only available for images.""" + url_thumbnail: String } -type LocationValue implements ColumnValue { - """ - Address - """ - address: String +"""The source of the asset""" +enum AssetsSource { + """Assets from file columns and item's files gallery""" + all - """ - City - """ - city: String + """Assets only from file columns""" + columns - """ - City - """ - city_short: String + """Assets only from item's files gallery""" + gallery +} - """ - The column that this value belongs to. - """ - column: Column! +"""Result of an batch operation""" +type BatchExtendTrialPeriod { + """Details of operations""" + details: [ExtendTrialPeriod!] - """ - Country - """ - country: String + """Reason of an error""" + reason: String - """ - Country short name (e.g. PE for Peru) - """ - country_short: String + """Result of a batch operation""" + success: Boolean! +} - """ - The column's unique identifier. - """ - id: ID! +"""The board attributes available.""" +enum BoardAttributes { + """Object that contains available Video conferences on the board.""" + communication - """ - Latitude - """ - lat: Float + """Board description.""" + description - """ - Longitude - """ - lng: Float + """Board name.""" + name +} - """ - Place ID of the location - """ - place_id: String +"""A board duplication""" +type BoardDuplication { + """The new board created by the duplication""" + board: Board! - """ - Street - """ - street: String + """Was the board duplication performed asynchronously""" + is_async: Boolean! +} - """ - Number of building in the street - """ - street_number: String +"""The board kinds available.""" +enum BoardKind { + """Private boards.""" + private - """ - Short number of building in the street - """ - street_number_short: String + """Public boards.""" + public - """ - Street - """ - street_short: String - text: String + """Shareable boards.""" + share +} - """ - The column's type. - """ - type: ColumnType! +"""The board object types.""" +enum BoardObjectType { + """Parent Board.""" + board - """ - The date when column value was last updated. - """ - updated_at: Date + """Custom Object.""" + custom_object - """ - The column's raw value in JSON format. - """ - value: JSON + """Document.""" + document + + """Sub Items Board.""" + sub_items_board } -type LongTextValue implements ColumnValue { - """ - The column that this value belongs to. - """ +type BoardRelationValue implements ColumnValue { + """The column that this value belongs to.""" column: Column! """ - The column's unique identifier. + A string representing all the names of the linked items, separated by commas """ + display_value: String! + + """The column's unique identifier.""" id: ID! + """The linked items IDs""" + linked_item_ids: [ID!]! + + """The linked items.""" + linked_items: [Item!]! + """ Text representation of the column value. Note: Not all columns support textual value """ text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The date when column value was last updated. - """ + """The date when column value was last updated.""" updated_at: Date - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -type ManagedColumn { - id: String - title: String - description: String - settings_json: JSON - created_by: Int - updated_by: Int - revision: Int - state: ManagedColumnState - created_at: Date - updated_at: Date - settings: ColumnSettings +"""Options to order by.""" +enum BoardsOrderBy { + """The rank order of the board creation time (desc).""" + created_at + + """The last time the user making the request used the board (desc).""" + used_at } -enum ManagedColumnState { - active - deleted - inactive +"""The board subscriber kind.""" +enum BoardSubscriberKind { + """Board owner.""" + owner + + """Board subscriber.""" + subscriber } -enum ManagedColumnTypes { - status - dropdown +"""A board's view.""" +type BoardView { + """The view's unique identifier.""" + id: ID! + + """The view's name.""" + name: String! + + """The view's settings in a string form.""" + settings_str: String! + + """The view's template id if it was duplicated from other view""" + source_view_id: ID + + """The view's type.""" + type: String! + + """Specific board view data (supported only for forms)""" + view_specific_data_str: String! } -type MarketplaceAppDiscount { - """ - Slug of an account - """ - account_slug: String! +type ButtonValue implements ColumnValue { + """The button's color in hex value.""" + color: String - """ - The ID of an account - """ - account_id: ID! + """The column that this value belongs to.""" + column: Column! - """ - Percentage value of a discount - """ - discount: Int! + """The column's unique identifier.""" + id: ID! - """ - Is discount recurring - """ - is_recurring: Boolean! + """The button's label.""" + label: String + text: String - """ - List of app plan ids - """ - app_plan_ids: [String!]! - period: DiscountPeriod + """The column's type.""" + type: ColumnType! - """ - Date until a discount is valid - """ - valid_until: String! + """The column's raw value in JSON format.""" + value: JSON +} - """ - Date when a discount was created - """ - created_at: String! +"""The result of adding users to / removing users from a team.""" +type ChangeTeamMembershipsResult { + """The users that team membership update failed for""" + failed_users: [User!] + + """The users that team membership update succeeded for""" + successful_users: [User!] } -type MirroredItem { - """ - The linked board. - """ - linked_board: Board! +type CheckboxValue implements ColumnValue { + """The column's boolean value.""" + checked: Boolean - """ - The linked board's unique identifier. - """ - linked_board_id: ID! + """The column that this value belongs to.""" + column: Column! - """ - The linked item. - """ - linked_item: Item! + """The column's unique identifier.""" + id: ID! + text: String - """ - The mirrored values. - """ - mirrored_value: MirroredValue + """The column's type.""" + type: ColumnType! + + """The date when column value was last updated.""" + updated_at: Date + value: JSON } -""" -Represents a mirrored value (column value, group, or board). -""" -union MirroredValue = - Board - | BoardRelationValue - | ButtonValue - | CheckboxValue - | ColorPickerValue - | CountryValue - | CreationLogValue - | DateValue - | DependencyValue - | DocValue - | DropdownValue - | EmailValue - | FileValue - | FormulaValue - | Group - | GroupValue - | HourValue - | IntegrationValue - | ItemIdValue - | LastUpdatedValue - | LinkValue - | LocationValue - | LongTextValue - | MirrorValue - | NumbersValue - | PeopleValue - | PersonValue - | PhoneValue - | ProgressValue - | RatingValue - | StatusValue - | SubtasksValue - | TagsValue - | TeamValue - | TextValue - | TimeTrackingValue - | TimelineValue - | UnsupportedValue - | VoteValue - | WeekValue - | WorldClockValue +type ColorPickerValue implements ColumnValue { + """The color in hex value.""" + color: String -type MirrorValue implements ColumnValue { - """ - The column that this value belongs to. - """ + """The column that this value belongs to.""" column: Column! - """ - A string representing all the names of the linked items, separated by commas - """ - display_value: String! + """The column's unique identifier.""" + id: ID! + text: String - """ - The column's unique identifier. - """ + """The column's type.""" + type: ColumnType! + + """The date when column value was last updated.""" + updated_at: Date + + """The column's raw value in JSON format.""" + value: JSON +} + +type Column { + """Is the column archived or not.""" + archived: Boolean! + + """The column's description.""" + description: String + + """The column's unique identifier.""" id: ID! - """ - The mirrored items. - """ - mirrored_items: [MirroredItem!]! + """The column's settings in a string form.""" + settings_str: String! - """ - Text representation of the column value. Note: Not all columns support textual value - """ - text: String + """The column's title.""" + title: String! - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The column's raw value in JSON format. - """ - value: JSON + """The column's width.""" + width: Int } """ -Update your monday.com data. +An object defining a mapping of column between source board and destination board """ -type Mutation { - """ - Like an update. - """ - like_update( - """ - The update identifier. - """ - update_id: ID! - ): Update - unlike_update( - """ - The update identifier. - """ - update_id: ID! - ): Update! +input ColumnMappingInput { + """The source column's unique identifier.""" + source: ID! - """ - Delete an update. - """ - delete_update( - """ - The update's unique identifier. - """ - id: ID! - ): Update - edit_update( - """ - The update's unique identifier. - """ - id: ID! + """The target column's unique identifier.""" + target: ID +} - """ - The update text. - """ - body: String! - ): Update! - pin_to_top( - """ - The update's unique identifier. - """ - id: ID! +"""The property name of the column to be changed.""" +enum ColumnProperty { + """the column description.""" + description - """ - The item unique identifier. - """ - item_id: ID - ): Update! - unpin_from_top( - """ - The update's unique identifier. - """ - id: ID! + """the column title.""" + title +} - """ - The item unique identifier. - """ - item_id: ID - ): Update! +"""The columns to create.""" +enum ColumnType { + """Number items according to their order in the group/board""" + auto_number - """ - Create a new update. - """ - create_update( - """ - The update text. - """ - body: String! + """Connect data from other boards""" + board_relation - """ - The item's unique identifier. - """ - item_id: ID + """Perform actions on items by clicking a button""" + button - """ - The parent post identifier. - """ - parent_id: ID - ): Update - create_timeline_item( - """ - The item the timeline item will be created in. - """ - item_id: ID! + """Check off items and see what's done at a glance""" + checkbox - """ - The user who created the timeline item. Only for account admins. - """ - user_id: Int + """Manage a design system using a color palette""" + color_picker - """ - The title of the timeline item. - """ - title: String! + """Choose a country""" + country - """ - The creation time of the event. - """ - timestamp: ISO8601DateTime! - summary: String - content: String + """Add the item's creator and creation date automatically""" + creation_log - """ - Location field value - """ - location: String + """Add dates like deadlines to ensure you never drop the ball""" + date - """ - Phone number field value - """ - phone: String + """Set up dependencies between items in the board""" + dependency - """ - URL field value - """ - url: String + """Document your work and increase collaboration""" + direct_doc - """ - The start and end time of the new timeline item. - """ - time_range: TimelineItemTimeRange + """Document your work and increase collaboration""" + doc - """ - The id of the custom activity of the timeline item. - """ - custom_activity_id: String! - ): TimelineItem - delete_timeline_item( - """ - The id of the timeline item to delete - """ - id: String! - ): TimelineItem - create_custom_activity( - """ - The name of the custom activity - """ - name: String! + """Create a dropdown list of options""" + dropdown - """ - The icon of the custom activity - """ - icon_id: CustomActivityIcon! + """Email team members and clients directly from your board""" + email - """ - The color of the custom activity - """ - color: CustomActivityColor! - ): CustomActivity - delete_custom_activity( - """ - The id of the custom activity - """ - id: String! - ): CustomActivity + """Add files & docs to your item""" + file - """ - Create managed column of type dropdown mutation. - """ - create_dropdown_managed_column( - """ - The column title. - """ - title: String! + """Use functions to manipulate data across multiple columns""" + formula + group - """ - The column description. - """ - description: String - settings: CreateDropdownColumnSettingsInput - ): DropdownManagedColumn + """Add times to manage and schedule tasks, shifts and more""" + hour - """ - Create managed column of type status mutation. - """ - create_status_managed_column( - """ - The column title. - """ - title: String! + """Integration is really cool...""" + integration - """ - The column description. - """ - description: String - settings: CreateStatusColumnSettingsInput - ): StatusManagedColumn + """Show all item's assignees""" + item_assignees - """ - Update managed column of type dropdown mutation. - """ - update_dropdown_managed_column( - """ - The column id. - """ - id: String! + """Show a unique ID for each item""" + item_id + + """Add the person that last updated the item and the date""" + last_updated + + """Simply hyperlink to any website""" + link + + """Place multiple locations on a geographic map""" + location + + """Add large amounts of text without changing column width""" + long_text + + """Show and edit columns' data from connected boards""" + mirror + + """Name is really cool...""" + name - """ - The column title. - """ - title: String + """Add revenue, costs, time estimations and more""" + numbers - """ - The column description. - """ - description: String - settings: UpdateDropdownColumnSettingsInput + """Assign people to improve team work""" + people - """ - The column revision. - """ - revision: Int! - ): DropdownManagedColumn + """Assign a person to increase ownership and accountability (deprecated)""" + person - """ - Update managed column of type status mutation. - """ - update_status_managed_column( - """ - The column id. - """ - id: String! + """Call your contacts directly from monday.com""" + phone - """ - The column title. - """ - title: String + """Show progress by combining status columns in a battery""" + progress - """ - The column description. - """ - description: String - settings: UpdateStatusColumnSettingsInput + """Rate or rank anything visually""" + rating - """ - The column revision. - """ - revision: Int! - ): StatusManagedColumn + """Get an instant overview of where things stand""" + status - """ - Activate managed column mutation. - """ - activate_managed_column( - """ - The column id. - """ - id: String! - ): ManagedColumn + """Use the subtasks column to create another level of tasks""" + subtasks - """ - Deactivate managed column mutation. - """ - deactivate_managed_column( - """ - The column id. - """ - id: String! - ): ManagedColumn + """Add tags to categorize items across multiple boards""" + tags - """ - Delete managed column mutation. - """ - delete_managed_column( - """ - The column id. - """ - id: String! - ): ManagedColumn - grant_marketplace_app_discount( - """ - The id of an app - """ - app_id: ID! + """Assign a full team to an item """ + team - """ - Slug of an account - """ - account_slug: String! - data: GrantMarketplaceAppDiscountData! - ): GrantMarketplaceAppDiscountResult! - delete_marketplace_app_discount( - """ - The id of an app - """ - app_id: ID! + """Add textual information e.g. addresses, names or keywords""" + text - """ - Slug of an account - """ - account_slug: String! - ): DeleteMarketplaceAppDiscountResult! + """Easily track time spent on each item, group, and board""" + time_tracking - """ - Add a file to a column value. - """ - add_file_to_column( - """ - The column to add the file to. - """ - column_id: String! + """Visualize your item’s duration, with a start and end date""" + timeline - """ - The file to upload. - """ - file: File! + """Unsupported column type""" + unsupported - """ - The item to add the file to. - """ - item_id: ID! - ): Asset + """Vote on an item e.g. pick a new feature or a favorite lunch place""" + vote - """ - Add a file to an update. - """ - add_file_to_update( - """ - The file to upload. - """ - file: File! + """Select the week on which each item should be completed""" + week - """ - The update to add the file to. - """ - update_id: ID! - ): Asset + """Keep track of the time anywhere in the world""" + world_clock +} + +interface ColumnValue { + """The column that this value belongs to.""" + column: Column! + + """The column's unique identifier.""" + id: ID! """ - Add subscribers to a board. + Text representation of the column value. Note: Not all columns support textual value """ - add_subscribers_to_board( - """ - The board's unique identifier. - """ - board_id: ID! + text: String - """ - Subscribers kind (subscriber / owner) - """ - kind: BoardSubscriberKind = subscriber + """The column's type.""" + type: ColumnType! - """ - User ids to subscribe to a board - """ - user_ids: [ID!]! - ): [User] @deprecated(reason: "use add_users_to_board instead") + """The column's raw value in JSON format.""" + value: JSON +} - """ - Add teams subscribers to a board. - """ - add_teams_to_board( - """ - The board's unique identifier. - """ - board_id: ID! +scalar CompareValue - """ - Subscribers kind (subscriber / owner) - """ - kind: BoardSubscriberKind = subscriber +"""Complexity data.""" +type Complexity { + """The remainder of complexity after the query's execution.""" + after: Int! - """ - Team ids to subscribe to a board - """ - team_ids: [ID!]! - ): [Team] + """The remainder of complexity before the query's execution.""" + before: Int! - """ - Add teams to a workspace. - """ - add_teams_to_workspace( - """ - Subscribers kind (subscriber / owner) - """ - kind: WorkspaceSubscriberKind = subscriber + """The specific query's complexity.""" + query: Int! - """ - Team ids to subscribe to a workspace - """ - team_ids: [ID!]! + """How long in seconds before the complexity budget is reset""" + reset_in_x_seconds: Int! +} - """ - The workspace's unique identifier. - """ - workspace_id: ID! - ): [Team] +type Country { + """The country's two-letter code.""" + code: String! - """ - Add subscribers to a board. - """ - add_users_to_board( - """ - The board's unique identifier. - """ - board_id: ID! + """The country's name.""" + name: String! +} - """ - Subscribers kind (subscriber / owner) - """ - kind: BoardSubscriberKind = subscriber +type CountryValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - User ids to subscribe to a board - """ - user_ids: [ID!]! - ): [User] + """The country value.""" + country: Country + + """The column's unique identifier.""" + id: ID! """ - Add users to team. + Text representation of the column value. Note: Not all columns support textual value """ - add_users_to_team( - """ - The team's unique identifier. - """ - team_id: ID! + text: String - """ - User ids to add to/remove from the team - """ - user_ids: [ID!]! - ): ChangeTeamMembershipsResult + """The column's type.""" + type: ColumnType! - """ - Add users to a workspace. - """ - add_users_to_workspace( - """ - Subscribers kind (subscriber / owner) - """ - kind: WorkspaceSubscriberKind = subscriber + """The date when column value was last updated.""" + updated_at: Date - """ - User ids to subscribe to a workspace - """ - user_ids: [ID!]! + """The column's raw value in JSON format.""" + value: JSON +} - """ - The workspace's unique identifier. - """ - workspace_id: ID! - ): [User] +input CreateDocBoardInput { + """Column id""" + column_id: String! - """ - Archive a board. - """ - archive_board( - """ - The board's unique identifier - """ - board_id: ID! - ): Board + """Item id""" + item_id: ID! +} - """ - Archives a group in a specific board. - """ - archive_group( - """ - The board's unique identifier. - """ - board_id: ID! +input CreateDocInput { + board: CreateDocBoardInput + workspace: CreateDocWorkspaceInput +} - """ - The group's unique identifier. - """ - group_id: String! - ): Group +input CreateDocWorkspaceInput { + """Optional board folder id""" + folder_id: ID - """ - Archive an item. - """ - archive_item( - """ - The item's unique identifier. - """ - item_id: ID - ): Item + """The doc's kind (public / private / share)""" + kind: BoardKind - """ - Extends trial period of an application to selected accounts - """ - batch_extend_trial_period( - """ - The accounts' slags. Max: 5 - """ - account_slugs: [String!]! + """The doc's name""" + name: String! + + """Workspace id""" + workspace_id: ID! +} + +type CreationLogValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - The id of an application. - """ - app_id: ID! + """The date when the item was created.""" + created_at: Date! - """ - The amount of days to extend a trial period. Max: 365 - """ - duration_in_days: Int! + """User who created the item""" + creator: User! - """ - The id of a payment plan. - """ - plan_id: String! - ): BatchExtendTrialPeriod + """ID of the user who created the item""" + creator_id: ID! - """ - Change a column's properties - """ - change_column_metadata( - """ - The board's unique identifier. - """ - board_id: ID! + """The column's unique identifier.""" + id: ID! + text: String - """ - The column's unique identifier. - """ - column_id: String! + """The column's type.""" + type: ColumnType! - """ - The property name of the column to be changed (title / description). - """ - column_property: ColumnProperty + """The column's raw value in JSON format.""" + value: JSON +} - """ - The new description of the column. - """ - value: String - ): Column +"""The custom fields meta data for user profile.""" +type CustomFieldMetas { + """The custom field meta's description.""" + description: String - """ - Change a column's title - """ - change_column_title( - """ - The board's unique identifier. - """ - board_id: ID! + """Is the custom field meta editable or not.""" + editable: Boolean - """ - The column's unique identifier. - """ - column_id: String! + """The custom field meta's type.""" + field_type: String - """ - The new title of the column. - """ - title: String! - ): Column + """Is the custom field meta flagged or not.""" + flagged: Boolean - """ - Change an item's column value. - """ - change_column_value( - """ - The board's unique identifier. - """ - board_id: ID! + """The custom field meta's icon.""" + icon: String - """ - The column's unique identifier. - """ - column_id: String! + """The custom field meta's unique identifier.""" + id: String - """ - Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) - """ - create_labels_if_missing: Boolean + """The custom field meta's position in the user profile page.""" + position: String - """ - The item's unique identifier. - """ - item_id: ID + """The custom field meta's title.""" + title: String +} - """ - The new value of the column. - """ - value: JSON! - ): Item +"""A custom field value for user profile.""" +type CustomFieldValue { + """The custom field value's meta unique identifier.""" + custom_field_meta_id: String - """ - Changes the column values of a specific item. - """ - change_multiple_column_values( - """ - The board's unique identifier. - """ - board_id: ID! + """The custom field value.""" + value: String +} - """ - The column values updates. - """ - column_values: JSON! +type DateValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) - """ - create_labels_if_missing: Boolean + """The column's date value.""" + date: String - """ - The item's unique identifier. - """ - item_id: ID - ): Item + """The string representation of selected icon.""" + icon: String - """ - Change an item's column with simple value. - """ - change_simple_column_value( - """ - The board's unique identifier. - """ - board_id: ID! + """The column's unique identifier.""" + id: ID! - """ - The column's unique identifier. - """ - column_id: String! + """The formatted date and time in user time zone.""" + text: String - """ - Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) - """ - create_labels_if_missing: Boolean + """The column's time value.""" + time: String - """ - The item's unique identifier. - """ - item_id: ID + """The column's type.""" + type: ColumnType! - """ - The new simple value of the column (pass null to empty the column). - """ - value: String - ): Item + """The date when column value was last updated.""" + updated_at: Date - """ - Clear an item's updates. - """ - clear_item_updates( - """ - The item's unique identifier. - """ - item_id: ID! - ): Item + """The column's raw value in JSON format.""" + value: JSON +} - """ - Get the complexity data of your mutations. - """ - complexity: Complexity +type DependencyValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! """ - Create a new board. + A string representing all the names of the linked items, separated by commas """ - create_board( - """ - The board's kind (public / private / share) - """ - board_kind: BoardKind! + display_value: String! - """ - The board's name - """ - board_name: String! + """The column's unique identifier.""" + id: ID! - """ - Optional board owner user ids - """ - board_owner_ids: [ID!] + """The linked items ids""" + linked_item_ids: [ID!]! - """ - Optional board owner team ids - """ - board_owner_team_ids: [ID!] + """The linked items.""" + linked_items: [Item!]! - """ - Optional board subscriber ids - """ - board_subscriber_ids: [ID!] + """ + Text representation of the column value. Note: Not all columns support textual value + """ + text: String - """ - Optional list of subscriber team ids - """ - board_subscriber_teams_ids: [ID!] + """The column's type.""" + type: ColumnType! - """ - Optional board's description - """ - description: String + """The date when column value was last updated.""" + updated_at: Date - """ - Optional flag to create an empty board (without any default items) - """ - empty: Boolean = false + """The column's raw value in JSON format.""" + value: JSON +} - """ - Optional board folder id - """ - folder_id: ID +"""Various documents blocks types, such as text.""" +enum DocBlockContentType { + """Bulleted list block""" + bulleted_list - """ - Optional board template id - """ - template_id: ID + """Check list block""" + check_list - """ - Optional workspace id - """ - workspace_id: ID - ): Board + """Code block""" + code - """ - Create a new column in board. - """ - create_column( - """ - The column's unique identifier after which the new column will be inserted. - """ - after_column_id: ID + """Divider block""" + divider - """ - The board's unique identifier. - """ - board_id: ID! + """Image block""" + image - """ - The type of column to create. - """ - column_type: ColumnType! + """Large title block""" + large_title - """ - The new column's defaults. - """ - defaults: JSON + """Layout block""" + layout - """ - The new column's description. - """ - description: String + """Medium title block""" + medium_title - """ - The column's user-specified unique identifier. - """ - id: String + """Simple text block""" + normal_text - """ - The new column's title. - """ - title: String! - ): Column + """Notice block""" + notice_box - """ - Create a new doc. - """ - create_doc( - """ - new monday doc location - """ - location: CreateDocInput! - ): Document + """Numbered list block""" + numbered_list - """ - Create new document block - """ - create_doc_block( - """ - After which block to insert this one. If not provided, will be inserted first in the document - """ - after_block_id: String + """Page break block""" + page_break - """ - The block's content. - """ - content: JSON! + """Quote text block""" + quote - """ - The doc's unique identifier. - """ - doc_id: ID! + """Small title block""" + small_title - """ - The parent block id to append the created block under. - """ - parent_block_id: String + """Table block""" + table - """ - The block's content type. - """ - type: DocBlockContentType! - ): DocumentBlock + """Video block""" + video +} - """ - Creates a folder in a specific workspace. - """ - create_folder( - """ - The folder's color. - """ - color: FolderColor +"""Options to order by.""" +enum DocsOrderBy { + """The rank order of the document creation time (desc).""" + created_at - """ - The folder's custom icon. - """ - custom_icon: FolderCustomIcon + """The last time the user making the request viewd the document (desc).""" + used_at +} - """ - The folder's font weight. - """ - font_weight: FolderFontWeight +"""A monday.com document.""" +type Document { + """The document's content blocks""" + blocks( + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - The folder's name - """ - name: String! + """Page number to get, starting at 1.""" + page: Int = 1 + ): [DocumentBlock] - """ - The folder's parent folder unique identifier. - """ - parent_folder_id: ID + """The document's creation date.""" + created_at: Date - """ - The unique identifier of the workspace to create this folder in - """ - workspace_id: ID - ): Folder + """The document's creator""" + created_by: User - """ - Creates a new group in a specific board. - """ - create_group( - """ - The board's unique identifier. - """ - board_id: ID! + """The document's folder unique identifier (null for first level).""" + doc_folder_id: ID - """ - A hex representing the group's color - """ - group_color: String + """The document's kind (public / private / share).""" + doc_kind: BoardKind! - """ - The name of the new group. - """ - group_name: String! + """The document's unique identifier.""" + id: ID! - """ - The group's position in the board. DEPRECATED! Replaced with relative position (position_relative_method, relative_to) - """ - position: String + """The document's name.""" + name: String! - """ - The position relative method to another group (before_at / after_at) - """ - position_relative_method: PositionRelative + """The associated board or object's unique identifier.""" + object_id: ID! - """ - The group to set the position next to. - """ - relative_to: String - ): Group + """The document's relative url""" + relative_url: String - """ - Create a new item. - """ - create_item( - """ - The board's unique identifier. - """ - board_id: ID! + """The document's settings.""" + settings: JSON - """ - The column values of the new item. - """ - column_values: JSON + """The document's direct url""" + url: String - """ - Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) - """ - create_labels_if_missing: Boolean + """The workspace that contains this document (null for main workspace).""" + workspace: Workspace - """ - The group's unique identifier. - """ - group_id: String + """The document's workspace unique identifier (null for main workspace).""" + workspace_id: ID +} - """ - The new item's name. - """ - item_name: String! +"""A monday.com document block.""" +type DocumentBlock { + """The block's content.""" + content: JSON - """ - The position relative method to another item (before_at / after_at) - """ - position_relative_method: PositionRelative + """The block's creation date.""" + created_at: Date - """ - The item to set the position next to. - """ - relative_to: ID - ): Item + """The block's creator""" + created_by: User - """ - Create a new notification. - """ - create_notification( - """ - The target's unique identifier. - """ - target_id: ID! + """The block's document unique identifier.""" + doc_id: ID - """ - The target's type (Project / Post) - """ - target_type: NotificationTargetType! + """The block's unique identifier.""" + id: String! - """ - The notification text. - """ - text: String! + """The block's parent block unique identifier.""" + parent_block_id: String - """ - The user's unique identifier. - """ - user_id: ID! - ): Notification + """The block's position on the document.""" + position: Float - """ - Create a new tag or get it if it already exists. - """ - create_or_get_tag( - """ - The private board id to create the tag at (not needed for public boards) - """ - board_id: ID + """The block content type.""" + type: String - """ - The new tag's name. - """ - tag_name: String - ): Tag + """The block's last updated date.""" + updated_at: Date +} - """ - Create subitem. - """ - create_subitem( - """ - The column values of the new item. - """ - column_values: JSON +"""A monday.com doc block.""" +type DocumentBlockIdOnly { + """The block's unique identifier.""" + id: String! +} - """ - Create Status/Dropdown labels if they're missing. (Requires permission to change board structure) - """ - create_labels_if_missing: Boolean +type DocValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - The new item's name. - """ - item_name: String! + """The document file attached to the column.""" + file: FileDocValue - """ - The parent item's unique identifier. - """ - parent_item_id: ID! - ): Item + """The column's unique identifier.""" + id: ID! """ - Create a new webhook. + Text representation of the column value. Note: Not all columns support textual value """ - create_webhook( - """ - The board's unique identifier. - """ - board_id: ID! + text: String - """ - The webhook config - """ - config: JSON + """The column's type.""" + type: ColumnType! - """ - The event to listen to - """ - event: WebhookEventType! + """The column's raw value in JSON format.""" + value: JSON +} - """ - The webhook URL. - """ - url: String! - ): Webhook +type DropdownValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - Create a new workspace. - """ - create_workspace( - """ - The Workspace's description - """ - description: String + """The column's unique identifier.""" + id: ID! + text: String - """ - The workspace's kind (open / closed) - """ - kind: WorkspaceKind! + """The column's type.""" + type: ColumnType! - """ - The Workspace's name - """ - name: String! - ): Workspace + """The column's raw value in JSON format.""" + value: JSON - """ - Delete a board. - """ - delete_board( - """ - The board's unique identifier - """ - board_id: ID! - ): Board + """The selected dropdown values.""" + values: [DropdownValueOption!]! +} - """ - Delete a column. - """ - delete_column( - """ - The board's unique identifier. - """ - board_id: ID! +type DropdownValueOption { + """The dropdown item's unique identifier.""" + id: ID! - """ - The column's unique identifier. - """ - column_id: String! - ): Column + """The dropdown item's label.""" + label: String! +} - """ - Delete a document block - """ - delete_doc_block( - """ - The block's unique identifier. - """ - block_id: String! - ): DocumentBlockIdOnly +"""The board duplicate types available.""" +enum DuplicateBoardType { + """Duplicate board with structure and items.""" + duplicate_board_with_pulses - """ - Deletes a folder in a specific workspace. - """ - delete_folder( - """ - The folder's unique identifier. - """ - folder_id: ID! - ): Folder + """Duplicate board with structure, items and updates.""" + duplicate_board_with_pulses_and_updates - """ - Deletes a group in a specific board. - """ - delete_group( - """ - The board's unique identifier. - """ - board_id: ID! + """Duplicate board with structure.""" + duplicate_board_with_structure +} - """ - The group's unique identifier. - """ - group_id: String! - ): Group +type EmailValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! + + """The column's email value.""" + email: String + + """The column's unique identifier.""" + id: ID! """ - Delete an item. + The column's text value. It can be the same as email when user didn't enter any text. """ - delete_item( - """ - The item's unique identifier. - """ - item_id: ID - ): Item + label: String """ - Remove subscribers from the board. + Text representation of the column value. Note: Not all columns support textual value """ - delete_subscribers_from_board( - """ - The board's unique identifier. - """ - board_id: ID! + text: String - """ - User ids to unsubscribe from a board - """ - user_ids: [ID!]! - ): [User] + """The column's type.""" + type: ColumnType! - """ - Remove team subscribers from the board. - """ - delete_teams_from_board( - """ - The board's unique identifier - """ - board_id: ID! + """The date when column value was last updated.""" + updated_at: Date - """ - Team ids to unsubscribe from a workspace - """ - team_ids: [ID!]! - ): [Team] + """The column's raw value in JSON format.""" + value: JSON +} - """ - Delete teams from a workspace. - """ - delete_teams_from_workspace( - """ - Team ids to unsubscribe from a workspace - """ - team_ids: [ID!]! +"""Result of a single operation""" +type ExtendTrialPeriod { + """Account slug""" + account_slug: String! - """ - The workspace's unique identifier. - """ - workspace_id: ID! - ): [Team] + """Reason of an error""" + reason: String - """ - Delete users from a workspace. - """ - delete_users_from_workspace( - """ - User ids to unsubscribe from a workspace - """ - user_ids: [ID!]! + """Result of a single operation""" + success: Boolean! +} - """ - The workspace's unique identifier. - """ - workspace_id: ID! - ): [User] +"""A multipart file""" +scalar File - """ - Delete a new webhook. - """ - delete_webhook( - """ - The webhook's unique identifier. - """ - id: ID! - ): Webhook +type FileAssetValue { + """The asset associated with the file.""" + asset: Asset! - """ - Delete workspace. - """ - delete_workspace( - """ - The workspace's unique identifier - """ - workspace_id: ID! - ): Workspace + """The asset's id.""" + asset_id: ID! - """ - Duplicate a board. - """ - duplicate_board( - """ - The board's unique identifier. - """ - board_id: ID! + """The file's creation date.""" + created_at: Date! - """ - Optional the new board's name. If omitted then automatically generated - """ - board_name: String + """The user who created the file.""" + creator: User - """ - The duplication type. - """ - duplicate_type: DuplicateBoardType! + """The ID of user who created the file.""" + creator_id: ID - """ - Optional destination folder in destination workspace. Defaults to the original board folder. - """ - folder_id: ID + """Whether the file is an image.""" + is_image: Boolean! - """ - Duplicate the subscribers to the new board. Defaults to false. - """ - keep_subscribers: Boolean + """The file's name.""" + name: String! +} - """ - Optional destination workspace. Defaults to the original board workspace. - """ - workspace_id: ID - ): BoardDuplication +"""The type of a link value stored inside a file column""" +enum FileColumnValue { + """Asset file""" + asset - """ - Duplicate a group. - """ - duplicate_group( - """ - Should the new group be added to the top. - """ - add_to_top: Boolean + """Box file""" + box - """ - The board's unique identifier. - """ - board_id: ID! + """Doc file""" + doc - """ - The group's unique identifier. - """ - group_id: String! + """Dropbox file""" + dropbox - """ - The group's title. - """ - group_title: String - ): Group + """Google Drive file""" + google_drive - """ - Duplicate an item. - """ - duplicate_item( - """ - The board's unique identifier. - """ - board_id: ID! + """Generic link file""" + link - """ - The item's unique identifier. *Required - """ - item_id: ID + """OneDrive file""" + onedrive +} - """ - Duplicate with the item's updates. - """ - with_updates: Boolean - ): Item +type FileDocValue { + """The file's creation date.""" + created_at: Date! - """ - Increase operations counter - """ - increase_app_subscription_operations( - """ - Must be positive number. - """ - increment_by: Int = 1 + """The user who created the file.""" + creator: User - """ - Operation name. A string of up to 14 characters containing alphanumeric characters and the symbols -_ - """ - kind: String = "global" - ): AppSubscriptionOperationsCounter + """The ID of user who created the file.""" + creator_id: ID - """ - Move an item to a different board. - """ - move_item_to_board( - """ - The unique identifier of a target board. - """ - board_id: ID! + """The doc associated with the file.""" + doc: Document! - """ - Mapping of columns between the original board and target board - """ - columns_mapping: [ColumnMappingInput!] + """The file's unique identifier.""" + file_id: ID! - """ - The unique identifier of a target group. - """ - group_id: ID! + """The associated board or object's unique identifier.""" + object_id: ID! - """ - The unique identifier of an item to move. - """ - item_id: ID! + """The file's url.""" + url: String +} - """ - Mapping of subitem columns between the original board and target board - """ - subitems_columns_mapping: [ColumnMappingInput!] - ): Item +input FileInput { + """The asset's id.""" + assetId: ID - """ - Move an item to a different group. - """ - move_item_to_group( - """ - The group's unique identifier. - """ - group_id: String! + """File kind""" + fileType: FileColumnValue! - """ - The item's unique identifier. - """ - item_id: ID - ): Item + """File link""" + linkToFile: String - """ - Remove mock app subscription for the current account - """ - remove_mock_app_subscription( - """ - The app id of the app to remove the mocked subscription for. - """ - app_id: ID! + """File display name""" + name: String! - """ - The last 10 characters of the app's signing secret. - """ - partial_signing_secret: String! - ): AppSubscription + """The doc's id""" + objectId: ID +} - """ - Remove users from team. - """ - remove_users_from_team( - """ - The team's unique identifier. - """ - team_id: ID! +type FileLinkValue { + """The file's creation date.""" + created_at: Date! - """ - User ids to add to/remove from the team - """ - user_ids: [ID!]! - ): ChangeTeamMembershipsResult + """The user who created the file.""" + creator: User - """ - Set mock app subscription for the current account - """ - set_mock_app_subscription( - """ - The app id of the app to mock subscription for. - """ - app_id: ID! + """The ID of user who created the file.""" + creator_id: ID - """ - Billing period [monthly/yearly] - """ - billing_period: String + """The file's id.""" + file_id: ID! - """ - Is the subscription a trial - """ - is_trial: Boolean + """The file's kind.""" + kind: FileLinkValueKind! - """ - Maximum number of units for the mocked plan - """ - max_units: Int + """The file's name.""" + name: String! - """ - The last 10 characters of the app's signing secret. - """ - partial_signing_secret: String! + """The file's url.""" + url: String +} - """ - The plan id for the mocked plan - """ - plan_id: String +"""The type of a link value stored inside a file column""" +enum FileLinkValueKind { + """Box file""" + box + + """Dropbox file""" + dropbox + + """Google Drive file""" + google_drive + + """Generic link file""" + link - """ - Pricing plans version - """ - pricing_version: Int + """OneDrive file""" + onedrive +} - """ - The subscription renewal date - """ - renewal_date: Date - ): AppSubscription +type FileValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - Update item column value by existing assets - """ - update_assets_on_item( - """ - The board's unique identifier. - """ - board_id: ID! + """The files attached to the column.""" + files: [FileValueItem!]! - """ - The column's unique identifier. - """ - column_id: String! + """The column's unique identifier.""" + id: ID! + text: String - """ - Array of files values. - """ - files: [FileInput!]! + """The column's type.""" + type: ColumnType! - """ - The item's unique identifier. - """ - item_id: ID! - ): Item + """The column's raw value in JSON format.""" + value: JSON +} - """ - Update Board attribute. - """ - update_board( - """ - The board's attribute to update (name / description / communication) - """ - board_attribute: BoardAttributes! +"""A single file in a column.""" +union FileValueItem = FileAssetValue | FileDocValue | FileLinkValue - """ - The board's unique identifier - """ - board_id: ID! +"""The first day of work week""" +enum FirstDayOfTheWeek { + """Monday""" + monday - """ - The new attribute value. - """ - new_value: String! - ): JSON + """Sunday""" + sunday +} +"""A workspace folder containing boards, docs, sub folders, etc.""" +type Folder { """ - Update a document block + The various items in the folder, not including sub-folders and dashboards. """ - update_doc_block( - """ - The block's unique identifier. - """ - block_id: String! + children: [Board]! - """ - The block's content. - """ - content: JSON! - ): DocumentBlock + """The folder's color.""" + color: FolderColor - """ - Updates a folder. - """ - update_folder( - """ - The folder's color. - """ - color: FolderColor + """The folder's creation date.""" + created_at: Date! - """ - The folder's custom icon. - """ - custom_icon: FolderCustomIcon + """The folder's custom icon.""" + custom_icon: FolderCustomIcon - """ - The folder's unique identifier - """ - folder_id: ID! + """The folder's font weight.""" + font_weight: FolderFontWeight - """ - The folder's font weight. - """ - font_weight: FolderFontWeight + """The folder's unique identifier.""" + id: ID! - """ - The folder's name - """ - name: String + """The folder's name.""" + name: String! - """ - The folder's parent folder. - """ - parent_folder_id: ID - ): Folder + """The folder's user owner unique identifier.""" + owner_id: ID - """ - Update an existing group. - """ - update_group( - """ - The board's unique identifier. - """ - board_id: ID! + """The folder's parent folder.""" + parent: Folder - """ - The groups's attribute to update (title / color / position / relative_position_after / relative_position_before) - """ - group_attribute: GroupAttributes! + """Sub-folders inside this folder.""" + sub_folders: [Folder]! - """ - The Group's unique identifier. - """ - group_id: String! + """The workspace that contains this folder (null id for main workspace).""" + workspace: Workspace! +} - """ - The new attribute value. - """ - new_value: String! - ): Group +"""One value out of a list of valid folder colors""" +enum FolderColor { + """aquamarine""" + AQUAMARINE - """ - Update an existing workspace. - """ - update_workspace( - """ - The attributes of the workspace to update - """ - attributes: UpdateWorkspaceAttributesInput! + """bright-blue""" + BRIGHT_BLUE - """ - The workspace ID. - """ - id: ID - ): Workspace + """bright-green""" + BRIGHT_GREEN - """ - Use a template - """ - use_template( - """ - The board's kind (public / private / share) - """ - board_kind: BoardKind + """chili-blue""" + CHILI_BLUE - """ - Optional board owner user ids - """ - board_owner_ids: [Int] + """dark-orange""" + DARK_ORANGE - """ - Optional board owner team ids - """ - board_owner_team_ids: [Int] + """dark_purple""" + DARK_PURPLE - """ - Optional board subscriber ids - """ - board_subscriber_ids: [Int] + """dark-red""" + DARK_RED - """ - Optional list of subscriber team ids - """ - board_subscriber_teams_ids: [Int] + """done-green""" + DONE_GREEN - """ - The callback URL to send the workspace, boards and dashboards IDs result, after its completed in the background - """ - callback_url_on_complete: String + """indigo""" + INDIGO - """ - The folder ID to duplicate the template to. - """ - destination_folder_id: Int + """lipstick""" + LIPSTICK - """ - The folder name to duplicate the template to, in case of multiple boards template - """ - destination_folder_name: String + """No color""" + NULL - """ - The name of the instance - """ - destination_name: String + """purple""" + PURPLE - """ - The workspace ID to duplicate the template to, If not defined, it will be created in Main Workspace - """ - destination_workspace_id: Int + """sofia_pink""" + SOFIA_PINK - """ - Skips target folder creation in multiple entities templates - """ - skip_target_folder_creation: Boolean + """stuck-red""" + STUCK_RED - """ - Optional adding extra options - """ - solution_extra_options: JSON + """sunset""" + SUNSET - """ - The template ID - """ - template_id: Int! - ): Template + """working_orange""" + WORKING_ORANGE +} - """ - Creates a new team. - """ - create_team(input: CreateTeamAttributesInput!, options: CreateTeamOptionsInput): Team +"""One value out of a list of valid folder custom icons""" +enum FolderCustomIcon { + """Folder""" + FOLDER - """ - Activates the specified users. - """ - activate_users( - """ - The ids of the users to activate. (Limit: 200) - """ - user_ids: [ID!]! - ): ActivateUsersResult + """MoreBelow""" + MOREBELOW - """ - Deactivates the specified users. - """ - deactivate_users( - """ - The ids of the users to deactivate. (Limit: 200) - """ - user_ids: [ID!]! - ): DeactivateUsersResult + """MoreBelowFilled""" + MOREBELOWFILLED - """ - Deletes the specified team. - """ - delete_team( - """ - The team to be deleted. - """ - team_id: ID! - ): Team + """No custom icon""" + NULL - """ - Updates the role of the specified users. - """ - update_users_role( - """ - The ids of the users to update. (Limit: 200) - """ - user_ids: [ID!]! + """Work""" + WORK +} - """ - The base role name (e.g. admin, member, etc.) - """ - new_role: BaseRoleName +"""One value out of a list of valid folder font weights""" +enum FolderFontWeight { + """font-weight-bold""" + FONT_WEIGHT_BOLD - """ - The ID of a custom role - """ - role_id: ID - ): UpdateUsersRoleResult + """font-weight-light""" + FONT_WEIGHT_LIGHT - """ - Assigns the specified users as owners of the specified team. - """ - assign_team_owners( - """ - The team identifier. - """ - team_id: ID! + """font-weight-normal""" + FONT_WEIGHT_NORMAL - """ - The user identifiers (max 200) - """ - user_ids: [ID!]! - ): AssignTeamOwnersResult + """font-weight-very-light""" + FONT_WEIGHT_VERY_LIGHT - """ - Removes the specified users as owners of the specified team. - """ - remove_team_owners( - """ - The team identifier. - """ - team_id: ID! + """No font weight""" + NULL +} + +type FormulaValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - The user identifiers (max 200) - """ - user_ids: [ID!]! - ): RemoveTeamOwnersResult + """The column's unique identifier.""" + id: ID! """ - Updates the email domain for the specified users. + Text representation of the column value. Note: Not all columns support textual value """ - update_email_domain(input: UpdateEmailDomainAttributesInput!): UpdateEmailDomainResult + text: String - """ - Updates attributes for users. - """ - update_multiple_users( - """ - List of user updates, each containing an ID and attribute updates. - """ - user_updates: [UserUpdateInput!]! + """The column's type.""" + type: ColumnType! - """ - Whether to bypass email confirmation for claimed domains. - """ - bypass_confirmation_for_claimed_domains: Boolean - ): UpdateUserAttributesResult + """The column's raw value in JSON format.""" + value: JSON - """ - Invite users to the account. - """ - invite_users( + """A string representing all the formula values, separated by commas""" + display_value: String! +} + +"""A group of items in a board.""" +type Group { + """Is the group archived or not.""" + archived: Boolean + + """The group's color.""" + color: String! + + """Is the group deleted or not.""" + deleted: Boolean + + """The group's unique identifier.""" + id: ID! + + """The items in the group.""" + items_page( """ - The emails of the users to invite. + An opaque token representing the position in the result set from which to + resume fetching items. Use this to paginate through large result sets. """ - emails: [String!]! + cursor: String """ - The new role of the users. + The maximum number of items to fetch in a single request. Use this to + control the size of the result set and manage pagination. Maximum: 500. """ - user_role: UserRole + limit: Int! = 25 """ - The product to invite the users to + A set of parameters to filter, sort, and control the scope of the items + query. Use this to customize the results based on specific criteria. """ - product: Product - ): InviteUsersResult -} + query_params: ItemsQuery + ): ItemsResponse! -""" -A notification. -""" -type Notification { - """ - The notification's unique identifier. - """ - id: ID! + """The group's position in the board.""" + position: String! - """ - The notification text. - """ - text: String + """The group's title.""" + title: String! } -""" -The notification's target type. -""" -enum NotificationTargetType { +"""The group attributes available.""" +enum GroupAttributes { """ - Update + Group color (one of the supported colors, check the API documentation). """ - Post + color """ - Item or Board. + The group's position in the board. Deprecated! - replaced with relative position """ - Project + position + + """The group's relative position after another group in the board.""" + relative_position_after + + """The group's relative position before another group in the board.""" + relative_position_before + + """Group title.""" + title } -type NumbersValue implements ColumnValue { - """ - The column that this value belongs to. - """ +type GroupValue implements ColumnValue { + """The column that this value belongs to.""" column: Column! - """ - Indicates where the symbol should be placed - on the right or left of the number - """ - direction: NumberValueUnitDirection + """The group value.""" + group: Group - """ - The column's unique identifier. - """ - id: ID! + """The group identifier.""" + group_id: ID - """ - Number - """ - number: Float + """The column's unique identifier.""" + id: ID! """ - The symbol of the unit + Text representation of the column value. Note: Not all columns support textual value """ - symbol: String text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -""" -Indicates where the unit symbol should be placed in a number value -""" -enum NumberValueUnitDirection { - """ - The symbol is placed on the left of the number - """ - left - - """ - The symbol is placed on the right of the number - """ - right -} - -""" -The working status of a user. -""" -type OutOfOffice { - """ - Is the status active? - """ - active: Boolean +type HourValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - Are notification disabled? - """ - disable_notifications: Boolean + """Hour""" + hour: Int - """ - The status end date. - """ - end_date: Date + """The column's unique identifier.""" + id: ID! - """ - The status start date. - """ - start_date: Date + """Minute""" + minute: Int + text: String - """ - Out of office type. - """ - type: String -} + """The column's type.""" + type: ColumnType! -type PeopleEntity { - """ - Id of the entity: a person or a team - """ - id: ID! + """The date when column value was last updated.""" + updated_at: Date - """ - Type of entity - """ - kind: Kind + """The column's raw value in JSON format.""" + value: JSON } -type PeopleValue implements ColumnValue { - """ - The column that this value belongs to. - """ +type IntegrationValue implements ColumnValue { + """The column that this value belongs to.""" column: Column! - """ - The column's unique identifier. - """ + """ID of the entity""" + entity_id: ID + + """The column's unique identifier.""" id: ID! + """URL of the issue""" + issue_api_url: ID + + """ID of the issue""" + issue_id: String + """ - The people and teams assigned to the item. + Text representation of the column value. Note: Not all columns support textual value """ - persons_and_teams: [PeopleEntity!] text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The date when column value was last updated. - """ - updated_at: Date - - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -type PersonValue implements ColumnValue { - """ - The column that this value belongs to. - """ +type ItemIdValue implements ColumnValue { + """The column that this value belongs to.""" column: Column! - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! - """ - The person assigned to the item. - """ - person_id: ID + """ID of the item""" + item_id: ID! text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The date when column value was last updated. - """ - updated_at: Date - - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -type PhoneValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! +"""The direction to order the items by""" +enum ItemsOrderByDirection { + """Ascending order""" + asc - """ - ISO-2 country code - """ - country_short_name: String + """Descending order""" + desc +} - """ - The column's unique identifier. - """ - id: ID! +input ItemsPageByColumnValuesQuery { + """The column's unique identifier.""" + column_id: String! - """ - Phone number - """ - phone: String - text: String + """The column values to search items by.""" + column_values: [String]! +} - """ - The column's type. - """ - type: ColumnType! +input ItemsQuery { + """A list of rule groups""" + groups: [ItemsQueryGroup!] """ - The date when column value was last updated. + A list of item IDs to fetch. Use this to fetch a specific set of items by their IDs. Max: 100 IDs """ - updated_at: Date + ids: [ID!] - """ - The column's raw value in JSON format. - """ - value: JSON + """The operator to use for the query rules or rule groups""" + operator: ItemsQueryOperator = and + order_by: [ItemsQueryOrderBy!] + + """A list of rules""" + rules: [ItemsQueryRule!] +} + +input ItemsQueryGroup { + """A list of rule groups""" + groups: [ItemsQueryGroup!] + + """The operator to use for the query rules or rule groups""" + operator: ItemsQueryOperator = and + + """A list of rules""" + rules: [ItemsQueryRule!] +} + +"""The condition between the query rules""" +enum ItemsQueryOperator { + """Logical AND""" + and + + """Logical OR""" + or +} + +input ItemsQueryOrderBy { + column_id: String! + direction: ItemsOrderByDirection = asc +} + +input ItemsQueryRule { + column_id: ID! + compare_attribute: String + compare_value: CompareValue! + operator: ItemsQueryRuleOperator = any_of } -""" -A payment plan. -""" -type Plan { - """ - The maximum users allowed in the plan. - """ - max_users: Int! +"""The operator to use for the value comparison""" +enum ItemsQueryRuleOperator { + """Any of the values""" + any_of + + """Between the two values""" + between + + """Contains all the terms""" + contains_terms - """ - The plan's time period. - """ - period: String + """Contains the text""" + contains_text - """ - The plan's tier. - """ - tier: String + """Ends with the value""" + ends_with - """ - The plan's version. - """ - version: Int! -} + """Greater than the value""" + greater_than -""" -The Platform API's data. -""" -type PlatformApi { - """ - Platform API daily limit. - """ - daily_limit: DailyLimit + """Greater than or equal to the value""" + greater_than_or_equals - """ - API analytics. - """ - daily_analytics: DailyAnalytics -} + """Empty value""" + is_empty -""" -API usage per app. -""" -type PlatformApiDailyAnalyticsByApp { - """ - Application. - """ - app: AppType + """Not empty value""" + is_not_empty - """ - API usage for the app. - """ - usage: Int! + """Lower than the value""" + lower_than - """ - API app id - """ - api_app_id: ID! -} + """Lower than or equal to the value""" + lower_than_or_equal -""" -API usage per day. -""" -type PlatformApiDailyAnalyticsByDay { - """ - Day. - """ - day: String! + """None of the values""" + not_any_of - """ - API usage for the day. - """ - usage: Int! -} + """Does not contain the text""" + not_contains_text -""" -API usage per user. -""" -type PlatformApiDailyAnalyticsByUser { - """ - User. - """ - user: User! + """Starts with the value""" + starts_with - """ - API usage for the user. - """ - usage: Int! + """Within the last""" + within_the_last + + """Within the next """ + within_the_next } -""" -The position relative method. -""" -enum PositionRelative { +type ItemsResponse { """ - position after at the given entity. + An opaque cursor that represents the position in the list after the last + returned item. Use this cursor for pagination to fetch the next set of items. + If the cursor is null, there are no more items to fetch. """ - after_at + cursor: String - """ - position before at the given entity. - """ - before_at + """The items associated with the cursor.""" + items: [Item!]! } -""" -The product to invite the users to. -""" -enum Product { - work_management - crm - dev - service - whiteboard - knowledge - forms - workflows +"""Kind of assignee""" +enum Kind { + """Represents a person""" + person + + """Represents a team""" + team } -type ProgressValue implements ColumnValue { - """ - The column that this value belongs to. - """ +type LastUpdatedValue implements ColumnValue { + """The column that this value belongs to.""" column: Column! - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! - - """ - Text representation of the column value. Note: Not all columns support textual value - """ text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The column's raw value in JSON format. - """ - value: JSON -} - -""" -Get your data from monday.com -""" -type Query { - """ - Get a collection of updates. - """ - updates( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 - - """ - Page number to get, starting at 1. - """ - page: Int = 1 - - """ - A list of items unique identifiers. - """ - ids: [ID!] - ): [Update!] - custom_activity( - """ - The ids of the custom activities to fetch - """ - ids: [String!] + """Timestamp of the last time the item was updated""" + updated_at: Date - """ - The name of the custom activity, case insensitive and partial match - """ - name: String + """User who updated the item""" + updater: User - """ - The icon of the custom activity - """ - icon_id: CustomActivityIcon + """ID of the user who updated the item""" + updater_id: ID - """ - The color of the custom activity - """ - color: CustomActivityColor - ): [CustomActivity!] - timeline_item( - """ - The id of the timeline item to delete - """ - id: ID! - ): TimelineItem + """The column's raw value in JSON format.""" + value: JSON +} - """ - Fetches timeline items for a given item - """ - timeline( - """ - The id of the item - """ - id: ID! - ): TimelineResponse +type LinkValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - Get managed column data. - """ - managed_column( - """ - The managed column ids. - """ - id: [String!] + """The column's unique identifier.""" + id: ID! + text: String - """ - The state of the managed column. - """ - state: [ManagedColumnState!] - ): [ManagedColumn!] - marketplace_app_discounts( - """ - The id of an app - """ - app_id: ID! - ): [MarketplaceAppDiscount!]! - app_subscriptions( - """ - The ID of an app - """ - app_id: ID! - status: SubscriptionStatus + """The column's type.""" + type: ColumnType! - """ - The ID of an account - """ - account_id: Int + """The date when column value was last updated.""" + updated_at: Date - """ - The value, which identifies the exact point to continue fetching the subscriptions from - """ - cursor: String + """Url""" + url: String - """ - The size of the requested page - """ - limit: Int - ): AppSubscriptions! + """Url text""" + url_text: String - """ - Get an app by ID. - """ - app( - """ - The ID of the app - """ - id: ID! - ): AppType + """The column's raw value in JSON format.""" + value: JSON +} - """ - Get the connected account's information. - """ - account: Account +type LocationValue implements ColumnValue { + """Address""" + address: String - """ - Get a collection of installs of an app. - """ - app_installs( - """ - The id of an account to filter app installs by. - """ - account_id: ID + """City""" + city: String - """ - The id of an application. - """ - app_id: ID! + """City""" + city_short: String - """ - Number of items to get, the default is 25. Max: 100 - """ - limit: Int = 25 + """The column that this value belongs to.""" + column: Column! - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [AppInstall] + """Country""" + country: String - """ - Get the current app subscription. Note: This query does not work in the playground - """ - app_subscription: [AppSubscription] + """Country short name (e.g. PE for Peru)""" + country_short: String - """ - Get operations counter current value - """ - app_subscription_operations( - """ - Operation name. A string of up to 14 characters containing alphanumeric characters and the symbols -_ - """ - kind: String = "global" - ): AppSubscriptionOperationsCounter + """The column's unique identifier.""" + id: ID! - """ - Get apps monetization information for an account - """ - apps_monetization_info: AppsMonetizationInfo + """Latitude""" + lat: Float - """ - Get apps monetization status for an account - """ - apps_monetization_status: AppMonetizationStatus + """Longitude""" + lng: Float - """ - Get a collection of assets by ids. - """ - assets( - """ - Ids of the assets/files you want to get - """ - ids: [ID!]! - ): [Asset] + """Place ID of the location""" + place_id: String - """ - Get a collection of boards. - """ - boards( - """ - The board's kind (public / private / share) - """ - board_kind: BoardKind + """Street""" + street: String - """ - A list of boards unique identifiers. - """ - ids: [ID!] + """Number of building in the street""" + street_number: String - """ - Boolean that brings the latest data - """ - latest: Boolean + """Short number of building in the street""" + street_number_short: String - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """Street""" + street_short: String + text: String - """ - Property to order by (created_at / used_at). - """ - order_by: BoardsOrderBy + """The column's type.""" + type: ColumnType! - """ - Page number to get, starting at 1. - """ - page: Int = 1 + """The date when column value was last updated.""" + updated_at: Date - """ - The state of the board (all / active / archived / deleted), the default is active. - """ - state: State = active + """The column's raw value in JSON format.""" + value: JSON +} - """ - A list of workspace ids the boards are contained in. - """ - workspace_ids: [ID] - ): [Board] +type LongTextValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - Get the complexity data of your queries. - """ - complexity: Complexity + """The column's unique identifier.""" + id: ID! """ - Get a collection of docs. + Text representation of the column value. Note: Not all columns support textual value """ - docs( - """ - A list of document unique identifiers. - """ - ids: [ID!] + text: String - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """The column's type.""" + type: ColumnType! - """ - A list of associated board or object’s unique identifier. - """ - object_ids: [ID!] + """The date when column value was last updated.""" + updated_at: Date - """ - Property to order by (created_at / used_at). - """ - order_by: DocsOrderBy + """The column's raw value in JSON format.""" + value: JSON +} - """ - Page number to get, starting at 1. - """ - page: Int = 1 +type MirroredItem { + """The linked board.""" + linked_board: Board! - """ - A list of workspace ids the documents are contained in. - """ - workspace_ids: [ID] - ): [Document] + """The linked board's unique identifier.""" + linked_board_id: ID! - """ - Get a collection of folders. Note: This query won't return folders from closed workspaces to which you are not subscribed - """ - folders( - """ - A list of folders unique identifiers. - """ - ids: [ID!] + """The linked item.""" + linked_item: Item! - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """The mirrored values.""" + mirrored_value: MirroredValue +} - """ - Page number to get, starting at 1. - """ - page: Int = 1 +"""Represents a mirrored value (column value, group, or board).""" +union MirroredValue = Board | BoardRelationValue | ButtonValue | CheckboxValue | ColorPickerValue | CountryValue | CreationLogValue | DateValue | DependencyValue | DocValue | DropdownValue | EmailValue | FileValue | FormulaValue | Group | GroupValue | HourValue | IntegrationValue | ItemIdValue | LastUpdatedValue | LinkValue | LocationValue | LongTextValue | MirrorValue | NumbersValue | PeopleValue | PersonValue | PhoneValue | ProgressValue | RatingValue | StatusValue | SubtasksValue | TagsValue | TeamValue | TextValue | TimeTrackingValue | TimelineValue | UnsupportedValue | VoteValue | WeekValue | WorldClockValue - """ - A list of workspace unique identifiers to filter folders by workspaces. (pass null to include Main Workspace) - """ - workspace_ids: [ID] - ): [Folder] +type MirrorValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! """ - Get a collection of items. + A string representing all the names of the linked items, separated by commas """ - items( - """ - Excludes items that are inactive, deleted or belong to deleted items - """ - exclude_nonactive: Boolean - - """ - A list of items unique identifiers. - """ - ids: [ID!] - - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + display_value: String! - """ - Get the recently created items at the top of the list - """ - newest_first: Boolean + """The column's unique identifier.""" + id: ID! - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [Item] + """The mirrored items.""" + mirrored_items: [MirroredItem!]! """ - Search items by multiple columns and values. + Text representation of the column value. Note: Not all columns support textual value """ - items_page_by_column_values( - """ - The board's unique identifier. - """ - board_id: ID! + text: String - """ - One or more columns, and their values to search items by. - """ - columns: [ItemsPageByColumnValuesQuery!] + """The column's type.""" + type: ColumnType! - """ - An opaque token representing the position in the result set from which to - resume fetching items. Use this to paginate through large result sets. - """ - cursor: String + """The column's raw value in JSON format.""" + value: JSON +} - """ - The maximum number of items to fetch in a single request. Use this to - control the size of the result set and manage pagination. Maximum: 500. - """ - limit: Int! = 25 - ): ItemsResponse! +"""A notification.""" +type Notification { + """The notification's unique identifier.""" + id: ID! - """ - Get the connected user's information. - """ - me: User + """The notification text.""" + text: String +} - """ - Get next pages of board's items (rows) by cursor. - """ - next_items_page( - """ - An opaque token representing the position in the result set from which to - resume fetching items. Use this to paginate through large result sets. - """ - cursor: String! +"""The notification's target type.""" +enum NotificationTargetType { + """Update""" + Post - """ - The maximum number of items to fetch in a single request. Use this to - control the size of the result set and manage pagination. Maximum: 500. - """ - limit: Int! = 25 - ): ItemsResponse! + """Item or Board.""" + Project +} - """ - Get a collection of tags. - """ - tags( - """ - A list of tags unique identifiers. - """ - ids: [ID!] - ): [Tag] +type NumbersValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! """ - Get a collection of teams. + Indicates where the symbol should be placed - on the right or left of the number """ - teams( - """ - A list of teams unique identifiers. - """ - ids: [ID!] - ): [Team] + direction: NumberValueUnitDirection - """ - Get a collection of users. - """ - users( - """ - A list of users' emails. - """ - emails: [String] + """The column's unique identifier.""" + id: ID! - """ - A list of users' unique identifiers. - """ - ids: [ID!] + """Number""" + number: Float - """ - The kind to search users by (all / non_guests / guests / non_pending). - """ - kind: UserKind + """The symbol of the unit""" + symbol: String + text: String - """ - Number of users to get. - """ - limit: Int + """The column's type.""" + type: ColumnType! - """ - Allows to fuzzy search by name - """ - name: String + """The column's raw value in JSON format.""" + value: JSON +} - """ - Get the recently created users at the top of the list - """ - newest_first: Boolean +"""Indicates where the unit symbol should be placed in a number value""" +enum NumberValueUnitDirection { + """The symbol is placed on the left of the number""" + left - """ - Return non active users in the account. - """ - non_active: Boolean + """The symbol is placed on the right of the number""" + right +} - """ - Page number to get, starting at 1. - """ - page: Int - ): [User] +"""The working status of a user.""" +type OutOfOffice { + """Is the status active?""" + active: Boolean - """ - Get a collection of webhooks for the board - """ - webhooks( - """ - Filters webhooks that were created by the app initiating the request - """ - app_webhooks_only: Boolean + """Are notification disabled?""" + disable_notifications: Boolean + + """The status end date.""" + end_date: Date + + """The status start date.""" + start_date: Date + + """Out of office type.""" + type: String +} + +type PeopleEntity { + """Id of the entity: a person or a team""" + id: ID! + + """Type of entity""" + kind: Kind +} - """ - Board unique identifier. - """ - board_id: ID! - ): [Webhook] +type PeopleValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - Get a collection of workspaces. - """ - workspaces( - """ - A list of workspace unique identifiers. - """ - ids: [ID!] + """The column's unique identifier.""" + id: ID! - """ - The workspace's kind (open / closed) - """ - kind: WorkspaceKind + """The people and teams assigned to the item.""" + persons_and_teams: [PeopleEntity!] + text: String - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """The column's type.""" + type: ColumnType! - """ - Property to order by (created_at). - """ - order_by: WorkspacesOrderBy + """The date when column value was last updated.""" + updated_at: Date - """ - Page number to get, starting at 1. - """ - page: Int = 1 + """The column's raw value in JSON format.""" + value: JSON +} - """ - The state of the workspace (all / active / archived / deleted), the default is active. - """ - state: State = active - ): [Workspace] +type PersonValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - Get the API version in use - """ - version: Version! + """The column's unique identifier.""" + id: ID! - """ - Get a list containing the versions of the API - """ - versions: [Version!] + """The person assigned to the item.""" + person_id: ID + text: String - """ - Platform API data. - """ - platform_api: PlatformApi + """The column's type.""" + type: ColumnType! - """ - Get all roles for the account - """ - account_roles: [AccountRole!] + """The date when column value was last updated.""" + updated_at: Date + + """The column's raw value in JSON format.""" + value: JSON } -type RatingValue implements ColumnValue { - """ - The column that this value belongs to. - """ +type PhoneValue implements ColumnValue { + """The column that this value belongs to.""" column: Column! - """ - The column's unique identifier. - """ + """ISO-2 country code""" + country_short_name: String + + """The column's unique identifier.""" id: ID! - """ - Rating value - """ - rating: Int + """Phone number""" + phone: String text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The date when column value was last updated. - """ + """The date when column value was last updated.""" updated_at: Date - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -""" -Error that occurred while removing team owners. -""" -type RemoveTeamOwnersError { - """ - The error message. - """ - message: String +"""A payment plan.""" +type Plan { + """The maximum users allowed in the plan.""" + max_users: Int! - """ - The error code. - """ - code: RemoveTeamOwnersErrorCode + """The plan's time period.""" + period: String - """ - The id of the user that caused the error. - """ - user_id: ID -} + """The plan's tier.""" + tier: String -""" -Error codes that can occur while removing team owners. -""" -enum RemoveTeamOwnersErrorCode { - VIEWERS_OR_GUESTS - USER_NOT_MEMBER_OF_TEAM - EXCEEDS_BATCH_LIMIT - INVALID_INPUT - USER_NOT_FOUND - CANNOT_UPDATE_SELF - FAILED + """The plan's version.""" + version: Int! } -""" -Result of removing the team's ownership. -""" -type RemoveTeamOwnersResult { - """ - The team for which the owners were removed. - """ - team: Team +"""The position relative method.""" +enum PositionRelative { + """position after at the given entity.""" + after_at - """ - Errors that occurred while removing team owners. - """ - errors: [RemoveTeamOwnersError!] + """position before at the given entity.""" + before_at } -""" -A reply for an update. -""" -type Reply { - """ - The reply's unique identifier. - """ +type ProgressValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! + + """The column's unique identifier.""" id: ID! """ - The reply's html formatted body. + Text representation of the column value. Note: Not all columns support textual value """ - body: String! - kind: String! + text: String - """ - The unique identifier of the reply creator. - """ - creator_id: String - edited_at: Date! + """The column's type.""" + type: ColumnType! - """ - The reply's creator. - """ - creator: User - likes: [Like!]! - pinned_to_top: [UpdatePin!]! - viewers( - """ - Number of items to get, the default is 100. - """ - limit: Int = 100 + """The column's raw value in JSON format.""" + value: JSON +} - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [Watcher!]! +type RatingValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - The reply's creation date. - """ - created_at: Date + """The column's unique identifier.""" + id: ID! - """ - The reply's last edit date. - """ + """Rating value""" + rating: Int + text: String + + """The column's type.""" + type: ColumnType! + + """The date when column value was last updated.""" updated_at: Date - """ - The reply's text body. - """ - text_body: String + """The column's raw value in JSON format.""" + value: JSON } -""" -The possible states for a board or item. -""" +"""The possible states for a board or item.""" enum State { - """ - Active only (Default). - """ + """Active only (Default).""" active - """ - Active, Archived and Deleted. - """ + """Active, Archived and Deleted.""" all - """ - Archived only. - """ + """Archived only.""" archived - """ - Deleted only. - """ + """Deleted only.""" deleted } -enum StatusColumnColors { - working_orange - done_green - stuck_red - dark_blue - purple - explosive - grass_green - bright_blue - saladish - egg_yolk - blackish - dark_red - sofia_pink - lipstick - dark_purple - bright_green - chili_blue - american_gray - brown - dark_orange - sunset - bubble - peach - berry - winter - river - navy - aquamarine - indigo - dark_indigo - pecan - lavender - royal - steel - orchid - lilac - tan - sky - coffee - teal -} - -type StatusColumnSettings { - type: ManagedColumnTypes - labels: [StatusLabel!] -} - -type StatusLabel { - id: Int - label: String - color: StatusColumnColors - index: Int - description: String - is_deactivated: Boolean - is_done: Boolean -} - -""" -A status label style. -""" +"""A status label style.""" type StatusLabelStyle { - """ - The label's border color in hex format. - """ - border: String! - - """ - The label's color in hex format. - """ - color: String! -} - -type StatusManagedColumn { - id: String - title: String - description: String - settings_json: JSON - created_by: Int - updated_by: Int - revision: Int - state: ManagedColumnState - created_at: Date - updated_at: Date - settings: StatusColumnSettings + """The label's border color in hex format.""" + border: String! + + """The label's color in hex format.""" + color: String! } type StatusValue implements ColumnValue { - """ - The column that this value belongs to. - """ + """The column that this value belongs to.""" column: Column! - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! - """ - The index of the status in the board - """ + """The index of the status in the board""" index: Int - """ - Whether the status is done - """ + """Whether the status is done""" is_done: Boolean - """ - The label of the status - """ + """The label of the status""" label: String - """ - The style of the status label - """ + """The style of the status label""" label_style: StatusLabelStyle text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The ID of an update attached to the status - """ + """The ID of an update attached to the status""" update_id: ID - """ - The date when column value was last updated. - """ + """The date when column value was last updated.""" updated_at: Date - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -""" -The discounts granted to the subscription -""" -type SubscriptionDiscount { - """ - The value of the discount in percentage (e.g. the value 80 refers to 80%) - """ - value: Int! - discount_model_type: SubscriptionDiscountModelType! - discount_type: SubscriptionDiscountType! -} - -""" -The information whether the discount is percentage or nominal -""" -enum SubscriptionDiscountModelType { - percent - nominal -} - -""" -The information whether the discount has been granted one time or recurring -""" -enum SubscriptionDiscountType { - recurring - one_time -} - -""" -The billing period of the subscription. Possible values: monthly, yearly -""" -enum SubscriptionPeriodType { - monthly - yearly -} - -""" -The status of the subscription. Possible values: active, inactive. -""" -enum SubscriptionStatus { - active - inactive -} - type SubtasksValue implements ColumnValue { - """ - The column that this value belongs to. - """ + """The column that this value belongs to.""" column: Column! """ @@ -7007,19 +4495,13 @@ type SubtasksValue implements ColumnValue { """ display_value: String! - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! - """ - The subitems - """ + """The subitems""" subitems: [Item!]! - """ - The subitems IDs - """ + """The subitems IDs""" subitems_ids: [ID!]! """ @@ -7027,387 +4509,190 @@ type SubtasksValue implements ColumnValue { """ text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -""" -A tag -""" +"""A tag""" type Tag { - """ - The tag's color. - """ + """The tag's color.""" color: String! - """ - The tag's unique identifier. - """ + """The tag's unique identifier.""" id: ID! - """ - The tag's name. - """ + """The tag's name.""" name: String! } type TagsValue implements ColumnValue { - """ - The column that this value belongs to. - """ + """The column that this value belongs to.""" column: Column! - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! - """ - Tag ID's - """ + """Tag ID's""" tag_ids: [Int!]! - """ - A list of tags - """ + """A list of tags""" tags: [Tag!]! text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -""" -A team of users. -""" +"""A team of users.""" type Team { - """ - The team's unique identifier. - """ + """The team's unique identifier.""" id: ID! - """ - The users who are the owners of the team. - """ + """The users who are the owners of the team.""" owners( - """ - A list of users' unique identifiers. - """ + """A list of users' unique identifiers.""" ids: [ID!] ): [User!]! - """ - The team's picture url. - """ + """The team's picture url.""" picture_url: String - """ - The users in the team. - """ + """The users in the team.""" users( - """ - A list of users' emails. - """ + """A list of users' emails.""" emails: [String] - """ - A list of users' unique identifiers. - """ + """A list of users' unique identifiers.""" ids: [ID!] - """ - The kind to search users by (all / non_guests / guests / non_pending). - """ + """The kind to search users by (all / non_guests / guests / non_pending).""" kind: UserKind - """ - Number of users to get. - """ + """Number of users to get.""" limit: Int - """ - Allows to fuzzy search by name - """ + """Allows to fuzzy search by name""" name: String - """ - Get the recently created users at the top of the list - """ + """Get the recently created users at the top of the list""" newest_first: Boolean - """ - Return non active users in the account. - """ + """Return non active users in the account.""" non_active: Boolean - """ - Page number to get, starting at 1. - """ + """Page number to get, starting at 1.""" page: Int ): [User] - """ - The team's name. - """ + """The team's name.""" name: String! - """ - Whether the team is a guest team - """ + """Whether the team is a guest team""" is_guest: Boolean } type TeamValue implements ColumnValue { - """ - The column that this value belongs to. - """ + """The column that this value belongs to.""" column: Column! - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! - """ - ID of the assigned team - """ + """ID of the assigned team""" team_id: Int text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The date when column value was last updated. - """ + """The date when column value was last updated.""" updated_at: Date - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -""" -A monday.com template. -""" +"""A monday.com template.""" type Template { - """ - The template process unique identifier for async operations. - """ + """The template process unique identifier for async operations.""" process_id: String } type TextValue implements ColumnValue { - """ - The column that this value belongs to. - """ + """The column that this value belongs to.""" column: Column! - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! - """ - The column's textual value - """ + """The column's textual value""" text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -type TimelineItem { - id: ID - type: String - - """ - The item that the timeline item is on. - """ - item: Item - - """ - The board that the timeline item is on. - """ - board: Board - - """ - The user who created the timeline item. - """ - user: User - - """ - The title of the timeline item. - """ - title: String - - """ - The external ID of the custom activity of the timeline item. - """ - custom_activity_id: String - - """ - The content of the timeline item. - """ - content: String - - """ - The creation date of the timeline item. - """ - created_at: Date! -} - -type TimelineItemsPage { - """ - The timeline items in the current page - """ - timeline_items: [TimelineItem!]! - - """ - Cursor for fetching the next page - """ - cursor: String -} - -input TimelineItemTimeRange { - """ - Start time - """ - start_timestamp: ISO8601DateTime! - - """ - End time - """ - end_timestamp: ISO8601DateTime! -} - -type TimelineResponse { - """ - Paginated set of timeline items and a cursor to get the next page - """ - timeline_items_page( - """ - The cursor for the next set of timeline items - """ - cursor: String = null - - """ - The limit for the current page of timeline items - """ - limit: Int = 25 - ): TimelineItemsPage! -} - type TimelineValue implements ColumnValue { - """ - The column that this value belongs to. - """ + """The column that this value belongs to.""" column: Column! - """ - The start date of the timeline - """ + """The start date of the timeline""" from: Date - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! - """ - The range of dates representing the timeline (YYYY-MM-DD) - """ + """The range of dates representing the timeline (YYYY-MM-DD)""" text: String - """ - The end date of the timeline - """ + """The end date of the timeline""" to: Date - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The date when column value was last updated. - """ + """The date when column value was last updated.""" updated_at: Date - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON - """ - The visualization type for the timeline - """ + """The visualization type for the timeline""" visualization_type: String } type TimeTrackingHistoryItem { - """ - When the session was added to the cell - """ + """When the session was added to the cell""" created_at: Date! - """ - Only applicable if the session has ended - """ + """Only applicable if the session has ended""" ended_at: Date - """ - The identifier of an user which ended the tracking - """ + """The identifier of an user which ended the tracking""" ended_user_id: ID - """ - A unique session identifier - """ + """A unique session identifier""" id: ID! - """ - Is true if the session end date was manually entered - """ + """Is true if the session end date was manually entered""" manually_entered_end_date: Boolean! - """ - Is true if the session end time was manually entered - """ + """Is true if the session end time was manually entered""" manually_entered_end_time: Boolean! - """ - Is true if the session start date was manually entered - """ + """Is true if the session start date was manually entered""" manually_entered_start_date: Boolean! - - """ - Is true if the session start time was manually entered - """ + + """Is true if the session start time was manually entered""" manually_entered_start_time: Boolean! """ @@ -7415,71 +4700,47 @@ type TimeTrackingHistoryItem { """ started_at: Date - """ - The identifier of an user which started the tracking - """ + """The identifier of an user which started the tracking""" started_user_id: ID - """ - The status of the session - """ + """The status of the session""" status: String! - """ - When the session was updated - """ + """When the session was updated""" updated_at: Date } type TimeTrackingValue implements ColumnValue { - """ - The column that this value belongs to. - """ + """The column that this value belongs to.""" column: Column! - """ - Total duration of the time tracker - """ + """Total duration of the time tracker""" duration: Int history: [TimeTrackingHistoryItem!]! - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! - """ - Whether the time tracker is running - """ + """Whether the time tracker is running""" running: Boolean - """ - The date when the time tracker was started - """ + """The date when the time tracker was started""" started_at: Date text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The date when column value was last updated. - """ + """The date when column value was last updated.""" updated_at: Date value: JSON } type UnsupportedValue implements ColumnValue { - """ - The column that this value belongs to. - """ + """The column that this value belongs to.""" column: Column! - """ - The column's unique identifier. - """ + """The column's unique identifier.""" id: ID! """ @@ -7487,1059 +4748,765 @@ type UnsupportedValue implements ColumnValue { """ text: String - """ - The column's type. - """ + """The column's type.""" type: ColumnType! - """ - The column's raw value in JSON format. - """ + """The column's raw value in JSON format.""" value: JSON } -""" -An update. -""" -type Update { - """ - The update's unique identifier. - """ - id: ID! - - """ - The update's html formatted body. - """ - body: String! - - """ - The unique identifier of the update creator. - """ - creator_id: String - edited_at: Date! +"""Attributes of a workspace to update""" +input UpdateWorkspaceAttributesInput { + """The description of the workspace to update""" + description: String - """ - The update's creator. - """ - creator: User - likes: [Like!]! - pinned_to_top: [UpdatePin!]! - viewers( - """ - Number of items to get, the default is 100. - """ - limit: Int = 100 + """The kind of the workspace to update (open / closed)""" + kind: WorkspaceKind - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [Watcher!]! + """The name of the workspace to update""" + name: String +} - """ - The update's creation date. - """ - created_at: Date +"""The possibilities for a user kind.""" +enum UserKind { + """All users in account.""" + all - """ - The update's last edit date. - """ - updated_at: Date + """Only guests.""" + guests - """ - The update's item ID. - """ - item_id: String - item: Item + """Only company members.""" + non_guests - """ - The update's replies. - """ - replies: [Reply!] + """All non pending members.""" + non_pending +} - """ - The update's assets/files. - """ - assets: [Asset] +"""An object containing the API version details""" +type Version { + """The display name of the API version""" + display_name: String! - """ - The update's text body. - """ - text_body: String -} + """The type of the API version""" + kind: VersionKind! -input UpdateDropdownColumnSettingsInput { - labels: [UpdateDropdownLabelInput!]! + """Version string that can be used in API-Version header""" + value: String! } -input UpdateDropdownLabelInput { - label: String! - id: Int - is_deactivated: Boolean -} +"""All possible API version types""" +enum VersionKind { + """Current version""" + current -""" -Attributes of the email domain to be updated. -""" -input UpdateEmailDomainAttributesInput { """ - The user identifiers (max 200) + No longer supported version. Migrate to current version as soon as possible """ - user_ids: [ID!]! + deprecated - """ - The new email domain. - """ - new_domain: String! -} + """Bleeding-edge rolling version that constantly changes""" + dev + + """Previous version. Migrate to current version as soon as possible""" + maintenance -""" -Error that occurred while changing email domain. -""" -type UpdateEmailDomainError { """ - The error message. + Old version that will be deprecated in January. Migrate to current version as soon as possible """ - message: String + old__maintenance """ - The error code. + Old version that will be deprecated in January. Migrate to current version as soon as possible """ - code: UpdateEmailDomainErrorCode + old_previous_maintenance """ - The id of the user that caused the error. + Older version that will be deprecated in January. Migrate to current version as soon as possible """ - user_id: ID -} + previous_maintenance -""" -Error codes that can occur while changing email domain. -""" -enum UpdateEmailDomainErrorCode { - UPDATE_EMAIL_DOMAIN_ERROR - EXCEEDS_BATCH_LIMIT - INVALID_INPUT - USER_NOT_FOUND - CANNOT_UPDATE_SELF - FAILED + """Next version""" + release_candidate } -""" -Result of updating the email domain for the specified users. -""" -type UpdateEmailDomainResult { - """ - The users for which the email domain was updated. - """ - updated_users: [User!] +type VoteValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - Errors that occurred during the update. - """ - errors: [UpdateEmailDomainError!] -} + """The column's unique identifier.""" + id: ID! + text: String -""" -The pin to top data of the update. -""" -type UpdatePin { - item_id: ID! -} + """The column's type.""" + type: ColumnType! -input UpdateStatusColumnSettingsInput { - labels: [UpdateStatusLabelInput!]! -} + """The date when column value was last updated.""" + updated_at: Date -input UpdateStatusLabelInput { - label: String! - color: StatusColumnColors! - index: Int! - description: String - is_done: Boolean - id: Int - is_deactivated: Boolean -} + """The column's raw value in JSON format.""" + value: JSON -""" -Error that occurred while updating users attributes. -""" -type UpdateUserAttributesError { - """ - The error message. - """ - message: String + """The total number of votes""" + vote_count: Int! - """ - The error code. - """ - code: UpdateUserAttributesErrorCode + """A list of IDs of users who voted""" + voter_ids: [ID!]! - """ - The id of the user that caused the error. - """ - user_id: ID + """A list of users who voted""" + voters: [User!]! } -""" -Error codes that can occur while updating user attributes. -""" -enum UpdateUserAttributesErrorCode { - INVALID_FIELD -} +"""Monday webhooks""" +type Webhook { + """The webhooks's board id.""" + board_id: ID! -""" -The result of updating users attributes. -""" -type UpdateUserAttributesResult { - """ - The users that were updated. - """ - updated_users: [User!] + """The webhooks's config.""" + config: String - """ - Errors that occurred during the update. - """ - errors: [UpdateUserAttributesError!] + """The event webhook will listen to""" + event: WebhookEventType! + + """The webhooks's unique identifier.""" + id: ID! } -""" -Error that occurred during updating users role. -""" -type UpdateUsersRoleError { - """ - The error message. - """ - message: String +"""The webhook's target type.""" +enum WebhookEventType { + """Column value changed on board""" + change_column_value - """ - The error code. - """ - code: UpdateUsersRoleErrorCode + """An item name changed on board""" + change_name - """ - The id of the user that caused the error. - """ - user_id: ID -} + """Specific Column value changed on board""" + change_specific_column_value -""" -Error codes for updating users roles. -""" -enum UpdateUsersRoleErrorCode { - EXCEEDS_BATCH_LIMIT - INVALID_INPUT - USER_NOT_FOUND - CANNOT_UPDATE_SELF - FAILED -} + """Status column value changed on board""" + change_status_column_value -""" -Result of updating users role. -""" -type UpdateUsersRoleResult { - """ - The users that were updated. - """ - updated_users: [User!] + """Column value changed on board subitem""" + change_subitem_column_value - """ - Errors that occurred during updating users role. - """ - errors: [UpdateUsersRoleError!] -} + """An subitem name changed on board""" + change_subitem_name -""" -Attributes of a workspace to update -""" -input UpdateWorkspaceAttributesInput { - """ - The description of the workspace to update - """ - description: String + """Column created on a board""" + create_column + + """An item was created on board""" + create_item + + """A subitem was created on a board""" + create_subitem - """ - The kind of the workspace to update (open / closed) - """ - kind: WorkspaceKind + """An update was posted on board subitem""" + create_subitem_update - """ - The name of the workspace to update - """ - name: String -} + """An update was posted on board item""" + create_update -""" -A monday.com user. -""" -type User { - """ - The user's unique identifier. - """ - id: ID! + """An update was deleted from board item""" + delete_update - """ - The user's account. - """ - account: Account! + """An update was edited on board item""" + edit_update - """ - The products the user is assigned to. - """ - account_products: [AccountProduct!] + """An item was archived on a board""" + item_archived - """ - The user's birthday. - """ - birthday: Date + """An item was deleted from a board""" + item_deleted - """ - The user's country code. - """ - country_code: String + """An item is moved to any group""" + item_moved_to_any_group - """ - The user's creation date. - """ - created_at: Date + """An item is moved to a specific group""" + item_moved_to_specific_group - """ - The current user's language - """ - current_language: String + """An item restored back to board""" + item_restored - """ - The custom field metas of the user profile. - """ - custom_field_metas: [CustomFieldMetas] + """A subitem is moved from one parent to another""" + move_subitem - """ - The custom field values of the user profile. - """ - custom_field_values: [CustomFieldValue] + """A subitem was archived on a board""" + subitem_archived - """ - The user's email. - """ - email: String! + """A subitem was deleted from a board""" + subitem_deleted +} - """ - Is the user enabled or not. - """ - enabled: Boolean! +type WeekValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - The token of the user for email to board. - """ - encrypt_api_token: String + """The end date of the week""" + end_date: Date - """ - Is the user an account admin. - """ - is_admin: Boolean + """The column's unique identifier.""" + id: ID! - """ - Is the user a guest or not. - """ - is_guest: Boolean + """The start date of the week""" + start_date: Date - """ - Is the user a pending user - """ - is_pending: Boolean + """The range of dates representing the week (YYYY-MM-DD)""" + text: String - """ - Is user verified his email. - """ - is_verified: Boolean + """The column's type.""" + type: ColumnType! - """ - Is the user a view only user or not. - """ - is_view_only: Boolean + """The column's raw value in JSON format.""" + value: JSON +} - """ - The date the user joined the account. - """ - join_date: Date +"""A monday.com workspace.""" +type Workspace { + """The account product that contains workspace.""" + account_product: AccountProduct - """ - Last date & time when user was active - """ - last_activity: Date + """The workspace's creation date.""" + created_at: Date - """ - The user's location. - """ - location: String + """The workspace's description.""" + description: String - """ - The user's mobile phone number. - """ - mobile_phone: String + """The workspace's unique identifier.""" + id: ID - """ - The user's name. - """ - name: String! + """Returns true if it is the default workspace of the product or account""" + is_default_workspace: Boolean - """ - The user's out of office status. - """ - out_of_office: OutOfOffice + """The workspace's kind (open / closed).""" + kind: WorkspaceKind - """ - The user's phone number. - """ - phone: String + """The workspace's name.""" + name: String! - """ - The user's photo in the original size. - """ - photo_original: String + """The workspace's user owners.""" + owners_subscribers( + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - The user's photo in small size (150x150). - """ - photo_small: String + """Page number to get, starting at 1.""" + page: Int = 1 + ): [User] - """ - The user's photo in thumbnail size (100x100). - """ - photo_thumb: String + """The workspace's settings.""" + settings: WorkspaceSettings - """ - The user's photo in small thumbnail size (50x50). - """ - photo_thumb_small: String + """The workspace's state (all / active / archived / deleted).""" + state: State - """ - The user's photo in tiny size (30x30). - """ - photo_tiny: String + """The workspace's team owners.""" + team_owners_subscribers( + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - The product to which the user signed up to first. - """ - sign_up_product_kind: String + """Page number to get, starting at 1.""" + page: Int = 1 + ): [Team!] - """ - The teams the user is a member in. - """ - teams( - """ - A list of teams unique identifiers. - """ - ids: [ID!] + """The teams subscribed to the workspace.""" + teams_subscribers( + """Number of items to get, the default is 25.""" + limit: Int = 25 + + """Page number to get, starting at 1.""" + page: Int = 1 ): [Team] - """ - The user's timezone identifier. - """ - time_zone_identifier: String + """The users subscribed to the workspace""" + users_subscribers( + """Number of items to get, the default is 25.""" + limit: Int = 25 - """ - The user's title. - """ - title: String + """Page number to get, starting at 1.""" + page: Int = 1 + ): [User] +} - """ - The user's profile url. - """ - url: String! +"""The workspace's icon.""" +type WorkspaceIcon { + """The icon color in hex value. Used as a background for the image.""" + color: String """ - The user’s utc hours difference. + The public image URL, which is temporary in the case of a file that was + uploaded by the user, so you'll need to pull a new version at least once an hour. + In case it is null, you can use the first letter of the workspace name. """ - utc_hours_diff: Int + image: String } -""" -The attributes to update for a user. -""" -input UserAttributesInput { - """ - The birthday of the user. - """ - birthday: String +"""The workspace kinds available.""" +enum WorkspaceKind { + """Closed workspace, available to enterprise only.""" + closed - """ - The email of the user. - """ - email: String + """Open workspace.""" + open +} - """ - The join date of the user. - """ - join_date: String +"""The workspace's settings.""" +type WorkspaceSettings { + """The workspace icon.""" + icon: WorkspaceIcon +} - """ - The name of the user. - """ - name: String +"""Options to order by.""" +enum WorkspacesOrderBy { + """The rank order of the workspace creation time (desc).""" + created_at +} - """ - The location of the user. - """ - location: String +"""The workspace subscriber kind.""" +enum WorkspaceSubscriberKind { + """Workspace owner.""" + owner - """ - The mobile phone of the user. - """ - mobile_phone: String + """Workspace subscriber.""" + subscriber +} - """ - The phone of the user. - """ - phone: String +type WorldClockValue implements ColumnValue { + """The column that this value belongs to.""" + column: Column! - """ - The title of the user. - """ - title: String + """The column's unique identifier.""" + id: ID! + text: String - """ - The department of the user. - """ - department: String + """Timezone""" + timezone: String + + """The column's type.""" + type: ColumnType! + + """The date when column value was last updated.""" + updated_at: Date + + """The column's raw value in JSON format.""" + value: JSON } -""" -The possibilities for a user kind. -""" -enum UserKind { - """ - All users in account. - """ - all +"""API usage data.""" +type DailyAnalytics { + """Last time the API usage data was updated.""" + last_updated: ISO8601DateTime - """ - Only guests. - """ - guests + """API usage per day.""" + by_day: [PlatformApiDailyAnalyticsByDay!]! - """ - Only company members. - """ - non_guests + """API usage per app.""" + by_app: [PlatformApiDailyAnalyticsByApp!]! - """ - All non pending members. - """ - non_pending + """API usage per user.""" + by_user: [PlatformApiDailyAnalyticsByUser!]! } -""" -The role of the user. -""" -enum UserRole { - PORTAL_USER - GUEST - VIEW_ONLY - MEMBER - ADMIN +"""Platform API daily limit.""" +type DailyLimit { + """Base daily limit.""" + base: Int + + """Total daily limit.""" + total: Int } -input UserUpdateInput { - user_id: ID! - user_attribute_updates: UserAttributesInput! +"""The Platform API's data.""" +type PlatformApi { + """Platform API daily limit.""" + daily_limit: DailyLimit + + """API analytics.""" + daily_analytics: DailyAnalytics } -""" -An object containing the API version details -""" -type Version { - """ - The display name of the API version - """ - display_name: String! +"""API usage per app.""" +type PlatformApiDailyAnalyticsByApp { + """Application.""" + app: AppType - """ - The type of the API version - """ - kind: VersionKind! + """API usage for the app.""" + usage: Int! - """ - Version string that can be used in API-Version header - """ - value: String! + """API app id""" + api_app_id: ID! } -""" -All possible API version types -""" -enum VersionKind { - """ - Current version - """ - current +"""API usage per day.""" +type PlatformApiDailyAnalyticsByDay { + """Day.""" + day: String! - """ - No longer supported version. Migrate to current version as soon as possible - """ - deprecated + """API usage for the day.""" + usage: Int! +} - """ - Bleeding-edge rolling version that constantly changes - """ - dev +"""API usage per user.""" +type PlatformApiDailyAnalyticsByUser { + """User.""" + user: User! - """ - Previous version. Migrate to current version as soon as possible - """ - maintenance + """API usage for the user.""" + usage: Int! +} - """ - Old version that will be deprecated in January. Migrate to current version as soon as possible - """ - old__maintenance +type ConnectProjectResult { + """The unique identifier of the operation.""" + request_id: ID - """ - Old version that will be deprecated in January. Migrate to current version as soon as possible - """ - old_previous_maintenance + """Indicates if the operation was successful.""" + success: Boolean - """ - Older version that will be deprecated in January. Migrate to current version as soon as possible - """ - previous_maintenance + """A message describing the result of the operation.""" + message: String - """ - Next version - """ - release_candidate + """The ID of the created portfolio item, if successful.""" + portfolio_item_id: String } -type VoteValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! - - """ - The column's unique identifier. - """ - id: ID! - text: String - - """ - The column's type. - """ - type: ColumnType! +"""A role in the account""" +type AccountRole { + """The ID of the role""" + id: ID - """ - The date when column value was last updated. - """ - updated_at: Date + """The name of the role""" + name: String - """ - The column's raw value in JSON format. - """ - value: JSON + """The type of the role""" + roleType: String +} - """ - The total number of votes - """ - vote_count: Int! +"""Error that occurred during activation.""" +type ActivateUsersError { + """The error message.""" + message: String - """ - A list of IDs of users who voted - """ - voter_ids: [ID!]! + """The error code.""" + code: ActivateUsersErrorCode - """ - A list of users who voted - """ - voters: [User!]! + """The id of the user that caused the error.""" + user_id: ID } -""" -The viewer of the update. -""" -type Watcher { - user_id: ID! - medium: String! - user: User +"""Error codes for activating users.""" +enum ActivateUsersErrorCode { + EXCEEDS_BATCH_LIMIT + INVALID_INPUT + USER_NOT_FOUND + CANNOT_UPDATE_SELF + FAILED } -""" -Monday webhooks -""" -type Webhook { - """ - The webhooks's board id. - """ - board_id: ID! +"""Result of activating users.""" +type ActivateUsersResult { + """The users that were activated.""" + activated_users: [User!] - """ - The webhooks's config. - """ - config: String + """Errors that occurred during activation.""" + errors: [ActivateUsersError!] +} - """ - The event webhook will listen to - """ - event: WebhookEventType! +"""Error that occurred while changing team owners.""" +type AssignTeamOwnersError { + """The error message.""" + message: String - """ - The webhooks's unique identifier. - """ - id: ID! + """The error code.""" + code: AssignTeamOwnersErrorCode + + """The id of the user that caused the error.""" + user_id: ID } -""" -The webhook's target type. -""" -enum WebhookEventType { - """ - Column value changed on board - """ - change_column_value +"""Error codes that can occur while changing team owners.""" +enum AssignTeamOwnersErrorCode { + VIEWERS_OR_GUESTS + USER_NOT_MEMBER_OF_TEAM + EXCEEDS_BATCH_LIMIT + INVALID_INPUT + USER_NOT_FOUND + CANNOT_UPDATE_SELF + FAILED +} - """ - An item name changed on board - """ - change_name +"""Result of changing the team's ownership.""" +type AssignTeamOwnersResult { + """The team for which the owners were changed.""" + team: Team - """ - Specific Column value changed on board - """ - change_specific_column_value + """Errors that occurred while changing team owners.""" + errors: [AssignTeamOwnersError!] +} - """ - Status column value changed on board - """ - change_status_column_value +"""The role of the user.""" +enum BaseRoleName { + PORTAL_USER + GUEST + VIEW_ONLY + MEMBER + ADMIN +} - """ - Column value changed on board subitem - """ - change_subitem_column_value +"""Attributes of the team to be created.""" +input CreateTeamAttributesInput { + """The team's name.""" + name: String! - """ - An subitem name changed on board - """ - change_subitem_name + """Whether the team can contain guest users.""" + is_guest_team: Boolean - """ - Column created on a board - """ - create_column + """The parent team identifier.""" + parent_team_id: ID - """ - An item was created on board - """ - create_item + """The team members. Must not be empty, unless allow_empty_team is set.""" + subscriber_ids: [ID!] +} - """ - A subitem was created on a board - """ - create_subitem +"""Options for creating a team.""" +input CreateTeamOptionsInput { + """Whether to allow a team without any subscribers.""" + allow_empty_team: Boolean +} - """ - An update was posted on board subitem - """ - create_subitem_update +"""Error that occurred during deactivation.""" +type DeactivateUsersError { + """The error message.""" + message: String - """ - An update was posted on board item - """ - create_update + """The error code.""" + code: DeactivateUsersErrorCode - """ - An update was deleted from board item - """ - delete_update + """The id of the user that caused the error.""" + user_id: ID +} - """ - An update was edited on board item - """ - edit_update +"""Error codes for deactivating users.""" +enum DeactivateUsersErrorCode { + EXCEEDS_BATCH_LIMIT + INVALID_INPUT + USER_NOT_FOUND + CANNOT_UPDATE_SELF + FAILED +} - """ - An item was archived on a board - """ - item_archived +"""Result of deactivating users.""" +type DeactivateUsersResult { + """The users that were deactivated.""" + deactivated_users: [User!] - """ - An item was deleted from a board - """ - item_deleted + """Errors that occurred during deactivation.""" + errors: [DeactivateUsersError!] +} - """ - An item is moved to any group - """ - item_moved_to_any_group +"""Error that occurred while inviting users""" +type InviteUsersError { + """The error message.""" + message: String - """ - An item is moved to a specific group - """ - item_moved_to_specific_group + """The error code.""" + code: InviteUsersErrorCode - """ - An item restored back to board - """ - item_restored + """The email address for the user that caused the error.""" + email: ID +} - """ - A subitem is moved from one parent to another - """ - move_subitem +"""Error codes that can occur while changing email domain.""" +enum InviteUsersErrorCode { + ERROR +} - """ - A subitem was archived on a board - """ - subitem_archived +"""Result of inviting users to the account.""" +type InviteUsersResult { + """The users that were successfully invited.""" + invited_users: [User!] - """ - A subitem was deleted from a board - """ - subitem_deleted + """Errors that occurred while inviting users""" + errors: [InviteUsersError!] } -type WeekValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! +"""The product to invite the users to.""" +enum Product { + work_management + crm + dev + service + whiteboard + knowledge + forms + workflows +} - """ - The end date of the week - """ - end_date: Date +"""Error that occurred while removing team owners.""" +type RemoveTeamOwnersError { + """The error message.""" + message: String - """ - The column's unique identifier. - """ - id: ID! + """The error code.""" + code: RemoveTeamOwnersErrorCode - """ - The start date of the week - """ - start_date: Date + """The id of the user that caused the error.""" + user_id: ID +} - """ - The range of dates representing the week (YYYY-MM-DD) - """ - text: String +"""Error codes that can occur while removing team owners.""" +enum RemoveTeamOwnersErrorCode { + VIEWERS_OR_GUESTS + USER_NOT_MEMBER_OF_TEAM + EXCEEDS_BATCH_LIMIT + INVALID_INPUT + USER_NOT_FOUND + CANNOT_UPDATE_SELF + FAILED +} - """ - The column's type. - """ - type: ColumnType! +"""Result of removing the team's ownership.""" +type RemoveTeamOwnersResult { + """The team for which the owners were removed.""" + team: Team - """ - The column's raw value in JSON format. - """ - value: JSON + """Errors that occurred while removing team owners.""" + errors: [RemoveTeamOwnersError!] } -""" -A monday.com workspace. -""" -type Workspace { - """ - The account product that contains workspace. - """ - account_product: AccountProduct +"""Attributes of the email domain to be updated.""" +input UpdateEmailDomainAttributesInput { + """The user identifiers (max 200)""" + user_ids: [ID!]! - """ - The workspace's creation date. - """ - created_at: Date + """The new email domain.""" + new_domain: String! +} - """ - The workspace's description. - """ - description: String +"""Error that occurred while changing email domain.""" +type UpdateEmailDomainError { + """The error message.""" + message: String - """ - The workspace's unique identifier. - """ - id: ID + """The error code.""" + code: UpdateEmailDomainErrorCode - """ - Returns true if it is the default workspace of the product or account - """ - is_default_workspace: Boolean + """The id of the user that caused the error.""" + user_id: ID +} - """ - The workspace's kind (open / closed). - """ - kind: WorkspaceKind +"""Error codes that can occur while changing email domain.""" +enum UpdateEmailDomainErrorCode { + UPDATE_EMAIL_DOMAIN_ERROR + EXCEEDS_BATCH_LIMIT + INVALID_INPUT + USER_NOT_FOUND + CANNOT_UPDATE_SELF + FAILED +} - """ - The workspace's name. - """ - name: String! +"""Result of updating the email domain for the specified users.""" +type UpdateEmailDomainResult { + """The users for which the email domain was updated.""" + updated_users: [User!] - """ - The workspace's user owners. - """ - owners_subscribers( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """Errors that occurred during the update.""" + errors: [UpdateEmailDomainError!] +} - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [User] +"""Error that occurred while updating users attributes.""" +type UpdateUserAttributesError { + """The error message.""" + message: String - """ - The workspace's settings. - """ - settings: WorkspaceSettings + """The error code.""" + code: UpdateUserAttributesErrorCode - """ - The workspace's state (all / active / archived / deleted). - """ - state: State + """The id of the user that caused the error.""" + user_id: ID +} - """ - The workspace's team owners. - """ - team_owners_subscribers( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 +"""Error codes that can occur while updating user attributes.""" +enum UpdateUserAttributesErrorCode { + INVALID_FIELD +} - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [Team!] +"""The result of updating users attributes.""" +type UpdateUserAttributesResult { + """The users that were updated.""" + updated_users: [User!] - """ - The teams subscribed to the workspace. - """ - teams_subscribers( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """Errors that occurred during the update.""" + errors: [UpdateUserAttributesError!] +} - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [Team] +"""Error that occurred during updating users role.""" +type UpdateUsersRoleError { + """The error message.""" + message: String - """ - The users subscribed to the workspace - """ - users_subscribers( - """ - Number of items to get, the default is 25. - """ - limit: Int = 25 + """The error code.""" + code: UpdateUsersRoleErrorCode - """ - Page number to get, starting at 1. - """ - page: Int = 1 - ): [User] + """The id of the user that caused the error.""" + user_id: ID } -""" -The workspace's icon. -""" -type WorkspaceIcon { - """ - The icon color in hex value. Used as a background for the image. - """ - color: String - - """ - The public image URL, which is temporary in the case of a file that was - uploaded by the user, so you'll need to pull a new version at least once an hour. - In case it is null, you can use the first letter of the workspace name. - """ - image: String +"""Error codes for updating users roles.""" +enum UpdateUsersRoleErrorCode { + EXCEEDS_BATCH_LIMIT + INVALID_INPUT + USER_NOT_FOUND + CANNOT_UPDATE_SELF + FAILED } -""" -The workspace kinds available. -""" -enum WorkspaceKind { - """ - Closed workspace, available to enterprise only. - """ - closed +"""Result of updating users role.""" +type UpdateUsersRoleResult { + """The users that were updated.""" + updated_users: [User!] - """ - Open workspace. - """ - open + """Errors that occurred during updating users role.""" + errors: [UpdateUsersRoleError!] } -""" -The workspace's settings. -""" -type WorkspaceSettings { - """ - The workspace icon. - """ - icon: WorkspaceIcon -} +"""The attributes to update for a user.""" +input UserAttributesInput { + """The birthday of the user.""" + birthday: String -""" -Options to order by. -""" -enum WorkspacesOrderBy { - """ - The rank order of the workspace creation time (desc). - """ - created_at -} + """The email of the user.""" + email: String -""" -The workspace subscriber kind. -""" -enum WorkspaceSubscriberKind { - """ - Workspace owner. - """ - owner + """The join date of the user.""" + join_date: String - """ - Workspace subscriber. - """ - subscriber -} + """The name of the user.""" + name: String -type WorldClockValue implements ColumnValue { - """ - The column that this value belongs to. - """ - column: Column! + """The location of the user.""" + location: String - """ - The column's unique identifier. - """ - id: ID! - text: String + """The mobile phone of the user.""" + mobile_phone: String - """ - Timezone - """ - timezone: String + """The phone of the user.""" + phone: String - """ - The column's type. - """ - type: ColumnType! + """The title of the user.""" + title: String - """ - The date when column value was last updated. - """ - updated_at: Date + """The department of the user.""" + department: String +} - """ - The column's raw value in JSON format. - """ - value: JSON +"""The role of the user.""" +enum UserRole { + PORTAL_USER + GUEST + VIEW_ONLY + MEMBER + ADMIN } + +input UserUpdateInput { + user_id: ID! + user_attribute_updates: UserAttributesInput! +} \ No newline at end of file diff --git a/packages/agent-toolkit/tests/core/platform-api-tools/list-board-items-tool.test.ts b/packages/agent-toolkit/tests/core/platform-api-tools/list-board-items-tool.test.ts new file mode 100644 index 00000000..ddcf9390 --- /dev/null +++ b/packages/agent-toolkit/tests/core/platform-api-tools/list-board-items-tool.test.ts @@ -0,0 +1,370 @@ +import { ListBoardItemsTool, listBoardItemsToolSchema } from '../../../src/core/platform-api-tools/list-board-items-tool'; +import { ApiClient } from '@mondaydotcomorg/api'; +import { + ListBoardItemsQuery, + ItemsQueryRuleOperator, + // ItemsQuery, // Not directly needed for mocks if we construct queryParams manually +} from '../../../src/monday-graphql/generated/graphql'; +import { listBoardItems } from '../../../src/monday-graphql/queries.graphql'; + +// Mock the ApiClient +jest.mock('@mondaydotcomorg/api'); + +const MockApiClient = ApiClient as jest.MockedClass; + +describe('ListBoardItemsTool', () => { + let tool: ListBoardItemsTool; + let mockRequest: jest.Mock; + + beforeEach(() => { + MockApiClient.mockClear(); + mockRequest = jest.fn(); + MockApiClient.prototype.request = mockRequest; + tool = new ListBoardItemsTool(new MockApiClient({ token: 'test-token' })); + }); + + describe('execute method', () => { + it('should fetch the first page of items without filters', async () => { + const boardId = 12345; + const limit = 2; + const mockApiResponse: ListBoardItemsQuery = { + boards: [ + { + name: 'Test Board', + items_page: { + cursor: 'next_cursor_abc', + items: [ + { id: 'item1', name: 'Item One', group: { id: 'group1', title: 'Group 1' } }, + { id: 'item2', name: 'Item Two', group: { id: 'group1', title: 'Group 1' } }, + ], + }, + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { boardId, limit }; + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(listBoardItems, { + boardId: boardId.toString(), + limit, + cursor: undefined, + queryParams: undefined, // No filters applied + }); + + const expectedResponse = { + boardName: 'Test Board', + items: mockApiResponse.boards![0]!.items_page.items, + cursor: 'next_cursor_abc', + }; + expect(JSON.parse(result.content)).toEqual(expectedResponse); + }); + + it('should fetch the next page of items using a cursor', async () => { + const boardId = 12345; + const limit = 2; + const cursor = 'next_cursor_abc'; + const mockApiResponse: ListBoardItemsQuery = { + boards: [ + { + name: 'Test Board', + items_page: { + cursor: 'next_cursor_def', // Cursor for the page after this one + items: [ + { id: 'item3', name: 'Item Three', group: { id: 'group2', title: 'Group 2' } }, + { id: 'item4', name: 'Item Four', group: { id: 'group2', title: 'Group 2' } }, + ], + }, + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { boardId, limit, cursor }; + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(listBoardItems, { + boardId: boardId.toString(), + limit, + cursor, + queryParams: undefined, // No filters applied + }); + + const expectedResponse = { + boardName: 'Test Board', + items: mockApiResponse.boards![0]!.items_page.items, + cursor: 'next_cursor_def', + }; + expect(JSON.parse(result.content)).toEqual(expectedResponse); + }); + + it('should filter items by nameQuery', async () => { + const boardId = 12345; + const nameQuery = 'Special Item'; + const mockApiResponse: ListBoardItemsQuery = { + boards: [ + { + name: 'Test Board', + items_page: { + cursor: null, + items: [ + { id: 'itemSpecial1', name: 'Special Item Alpha', group: { id: 'group1', title: 'Group 1' } }, + ], + }, + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { boardId, nameQuery, limit: 25 }; + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(listBoardItems, { + boardId: boardId.toString(), + limit: 25, + cursor: undefined, + queryParams: { + rules: [ + { + column_id: 'name', + compare_value: nameQuery, + operator: ItemsQueryRuleOperator.ContainsText, + }, + ], + }, + }); + + const expectedResponse = { + boardName: 'Test Board', + items: mockApiResponse.boards![0]!.items_page.items, + cursor: null, + }; + expect(JSON.parse(result.content)).toEqual(expectedResponse); + }); + + it('should not filter by name if nameQuery is an empty string', async () => { + const boardId = 12345; + const mockApiResponse: ListBoardItemsQuery = { + boards: [ + { + name: 'Test Board', + items_page: { + cursor: null, + items: [ + { id: 'item1', name: 'Item One', group: { id: 'group1', title: 'Group 1' } }, + { id: 'item2', name: 'Item Two', group: { id: 'group1', title: 'Group 1' } }, + ], + }, + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { boardId, nameQuery: '', limit: 25 }; + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(listBoardItems, { + boardId: boardId.toString(), + limit: 25, + cursor: undefined, + queryParams: undefined, + }); + const expectedResponse = { + boardName: 'Test Board', + items: mockApiResponse.boards![0]!.items_page.items, + cursor: null, + }; + expect(JSON.parse(result.content)).toEqual(expectedResponse); + }); + + it('should filter items by groupId', async () => { + const boardId = 12345; + const groupId = 'test_group_1'; + const mockApiResponse: ListBoardItemsQuery = { + boards: [ + { + name: 'Test Board', + items_page: { + cursor: null, + items: [ + { id: 'itemInGroup1', name: 'Item in Group 1', group: { id: groupId, title: 'Test Group 1' } }, + ], + }, + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { boardId, groupId, limit: 25 }; + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(listBoardItems, { + boardId: boardId.toString(), + limit: 25, + cursor: undefined, + queryParams: { + rules: [ + { + column_id: 'group', // This matches the assumption in the tool + compare_value: [groupId], + operator: ItemsQueryRuleOperator.AnyOf, + }, + ], + }, + }); + + const expectedResponse = { + boardName: 'Test Board', + items: mockApiResponse.boards![0]!.items_page.items, + cursor: null, + }; + expect(JSON.parse(result.content)).toEqual(expectedResponse); + }); + + it('should filter items by both nameQuery and groupId', async () => { + const boardId = 12345; + const nameQuery = 'Specific'; + const groupId = 'test_group_2'; + const mockApiResponse: ListBoardItemsQuery = { + boards: [ + { + name: 'Test Board', + items_page: { + cursor: null, + items: [ + { id: 'specificItemInGroup2', name: 'Specific Item in Group 2', group: { id: groupId, title: 'Test Group 2' } }, + ], + }, + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { boardId, nameQuery, groupId, limit: 25 }; + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(listBoardItems, { + boardId: boardId.toString(), + limit: 25, + cursor: undefined, + queryParams: { + rules: [ + { + column_id: 'name', + compare_value: nameQuery, + operator: ItemsQueryRuleOperator.ContainsText, + }, + { + column_id: 'group', + compare_value: [groupId], + operator: ItemsQueryRuleOperator.AnyOf, + }, + ], + // operator: ItemsQueryOperator.And, // Default behavior if multiple rules, usually AND + }, + }); + + const expectedResponse = { + boardName: 'Test Board', + items: mockApiResponse.boards![0]!.items_page.items, + cursor: null, + }; + expect(JSON.parse(result.content)).toEqual(expectedResponse); + }); + + it('should handle API errors gracefully', async () => { + const boardId = 67890; + const errorMessage = 'API Error Occurred'; + mockRequest.mockRejectedValue(new Error(errorMessage)); + + const input = { boardId, limit: 10 }; + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(listBoardItems, { + boardId: boardId.toString(), + limit: 10, + cursor: undefined, + queryParams: undefined, + }); + expect(result.content).toEqual(`Failed to list items for board ${boardId}. Error: ${errorMessage}`); + }); + + it('should handle board not found or access denied', async () => { + const boardId = 11111; + const mockApiResponse: ListBoardItemsQuery = { + boards: null, // Simulate board not found or no access by API returning null for boards array + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { boardId, limit: 10 }; + const result = await tool.execute(input); + expect(result.content).toEqual(`Board with ID ${boardId} not found or access denied.`); + }); + + it('should return an empty items array if board items_page has empty items and null cursor', async () => { + const boardId = 22222; + const mockApiResponse: ListBoardItemsQuery = { + boards: [ + { + name: 'Empty Board Items', + // items_page itself is an object, its content can be empty/null + items_page: { items: [], cursor: null }, + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + const input = { boardId, limit: 10 }; + const result = await tool.execute(input); + const expectedResponse = { + boardName: 'Empty Board Items', + items: [], + cursor: null, + }; + expect(JSON.parse(result.content)).toEqual(expectedResponse); + }); + + it('should return an empty items array if items_page.items is explicitly null or empty array', async () => { + const boardId = 33333; + const input = { boardId, limit: 10 }; + + // Scenario 1: items_page.items is empty array + const mockApiResponseEmpty: ListBoardItemsQuery = { + boards: [ + { + name: 'Board With Empty Items Array', + items_page: { items: [], cursor: null }, + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponseEmpty); + let result = await tool.execute(input); + const expectedResponseEmpty: any = { + boardName: 'Board With Empty Items Array', + items: [], + cursor: null, + }; + expect(JSON.parse(result.content)).toEqual(expectedResponseEmpty); + + // Scenario 2: items_page.items is null (robustness test) + const mockApiResponseItemsNull: ListBoardItemsQuery = { + boards: [ + { + name: 'Board With Null Items Field (Robustness Test)', + items_page: { items: null as any, cursor: null }, + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponseItemsNull); + result = await tool.execute(input); + const expectedResponseItemsNull: any = { + boardName: 'Board With Null Items Field (Robustness Test)', + items: [], + cursor: null, + }; + expect(JSON.parse(result.content)).toEqual(expectedResponseItemsNull); + }); + + // More test cases will be added here for pagination, filters, errors, etc. + }); +}); \ No newline at end of file diff --git a/packages/agent-toolkit/tests/core/platform-api-tools/manage-item-updates-tool.test.ts b/packages/agent-toolkit/tests/core/platform-api-tools/manage-item-updates-tool.test.ts new file mode 100644 index 00000000..9456f40e --- /dev/null +++ b/packages/agent-toolkit/tests/core/platform-api-tools/manage-item-updates-tool.test.ts @@ -0,0 +1,558 @@ +import { ManageItemUpdatesTool, manageItemUpdatesToolSchema } from '../../../src/core/platform-api-tools/manage-item-updates-tool'; +import { ApiClient } from '@mondaydotcomorg/api'; +import { FetchItemUpdatesQuery, CreateUpdateMutation, DeleteUpdateMutation, Item } from '../../../src/monday-graphql/generated/graphql'; +import { fetchItemUpdates, createUpdate as createUpdateMutation, deleteUpdate as deleteUpdateMutation } from '../../../src/monday-graphql/queries.graphql'; + +// Mock the ApiClient +jest.mock('@mondaydotcomorg/api'); + +const MockApiClient = ApiClient as jest.MockedClass; + +describe('ManageItemUpdatesTool', () => { + let tool: ManageItemUpdatesTool; + let mockRequest: jest.Mock; + let consoleWarnSpy: jest.SpyInstance; + + beforeEach(() => { + // Reset mocks before each test + MockApiClient.mockClear(); + mockRequest = jest.fn(); + MockApiClient.prototype.request = mockRequest; + // Instantiate the tool with the mocked ApiClient instance + // The actual token value doesn't matter here as ApiClient is mocked + tool = new ManageItemUpdatesTool(new MockApiClient({ token: 'test-token' })); + consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); // Mock console.warn + }); + + afterEach(() => { + consoleWarnSpy.mockRestore(); // Restore console.warn + }); + + describe('fetch operation', () => { + it('should successfully fetch updates for a single item ID using schema default limit', async () => { + const mockItemId = 123; + const schemaDefaultLimit = 25; + const mockApiResponse: FetchItemUpdatesQuery = { + items: [ + { + id: mockItemId.toString(), + name: 'Item 123', + updates: [ + { id: 'update1', body: 'Update 1 body', text_body: 'Update 1 text', created_at: '2023-01-01T12:00:00Z', creator: { id: 'user1', name: 'User One' } }, + ], + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + // To test the tool's internal default when user omits limit, we need to see how Zod handles it. + // The type ToolInputType makes limit: number (non-optional due to .default()). + // So, if the user called the tool via MCP and omitted limit, Zod would fill it with 25 before execute is called. + // Thus, our input to execute() should reflect this post-Zod-parsing state. + const input = { + itemId: [mockItemId], + operation: 'fetch' as const, + limit: schemaDefaultLimit, // Simulate Zod having applied the default + }; + + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: [mockItemId.toString()], + limit: schemaDefaultLimit, + }); + expect(JSON.parse(result.content)).toEqual(mockApiResponse.items); + }); + + it('should successfully fetch updates when itemId is an array with a single number', async () => { + const mockItemId = 777; + const schemaDefaultLimit = 25; + const mockApiResponse: FetchItemUpdatesQuery = { + items: [ + { + id: mockItemId.toString(), + name: 'Item 777', + updates: [ + { id: 'updateSingle777', body: 'Update for single item ID', text_body: 'Text for single item ID', created_at: '2023-01-03T12:00:00Z', creator: { id: 'user3', name: 'User Three' } }, + ], + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: [mockItemId], + operation: 'fetch' as const, + limit: schemaDefaultLimit, + }; + + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: [mockItemId.toString()], + limit: schemaDefaultLimit, + }); + expect(JSON.parse(result.content)).toEqual(mockApiResponse.items); + }); + + it('should cap the limit at 100 if a higher limit is provided', async () => { + const mockItemId = 124; + const mockApiResponse: FetchItemUpdatesQuery = { + items: [ + { + id: mockItemId.toString(), + name: 'Item 124', + updates: [/* ... some updates ... */], + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + const consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + + const input = { + itemId: [mockItemId], + operation: 'fetch' as const, + limit: 150, + }; + + await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: [mockItemId.toString()], + limit: 100, + }); + // expect(consoleWarnSpy).toHaveBeenCalledWith('[ManageItemUpdatesTool] Requested limit 150 exceeds API max of 100. Using 100 instead.'); + consoleWarnSpy.mockRestore(); + }); + + it('should use provided limit if it is under 100', async () => { + const mockItemId = 125; + const providedLimit = 15; + const mockApiResponse: FetchItemUpdatesQuery = { + items: [ + { + id: mockItemId.toString(), + name: 'Item 125', + updates: [/* ... some updates ... */], + }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: [mockItemId], + operation: 'fetch' as const, + limit: providedLimit, + }; + + await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: [mockItemId.toString()], + limit: providedLimit, + }); + }); + + it('should successfully fetch updates for multiple item IDs', async () => { + const mockItemIds = [123, 456]; + const mockLimit = 3; + const mockApiResponse: FetchItemUpdatesQuery = { + items: [ + { + id: '123', + name: 'Test Item 123', + updates: [ + { id: 'update1', body: 'Update 1 for 123', text_body: 'Text 1 for 123', created_at: '2023-01-01T12:00:00Z', creator: { id: 'user1', name: 'User One' } }, + ], + } as any as Item, // Cast to any then Item + { + id: '456', + name: 'Test Item 456', + updates: [ + { id: 'update2', body: 'Update 1 for 456', text_body: 'Text 1 for 456', created_at: '2023-01-02T12:00:00Z', creator: { id: 'user2', name: 'User Two' } }, + ], + } as any as Item, // Cast to any then Item + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: mockItemIds, // Array of IDs + operation: 'fetch' as const, + limit: mockLimit, + }; + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: mockItemIds.map(id => id.toString()), + limit: mockLimit, + }); + expect(result.content).toEqual(JSON.stringify(mockApiResponse.items, null, 2)); + }); + + it('should return the item structure when items are found but have no updates for multiple IDs', async () => { + const mockItemIds = [112, 113]; + const mockApiResponse: FetchItemUpdatesQuery = { + items: [ + { id: '112', name: 'Item 112', updates: [] }, // Empty updates + { id: '113', name: 'Item 113', updates: null }, // Null updates + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: mockItemIds, + operation: 'fetch' as const, + limit: 5, + }; + const result = await tool.execute(input); + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: mockItemIds.map(id => id.toString()), + limit: 5, + }); + // Expect the JSON string of the items array + expect(result.content).toEqual(JSON.stringify(mockApiResponse.items, null, 2)); + }); + + it('should return the item structure when no updates are found for a single item', async () => { + const mockItemId = 456; + const mockLimit = 5; + + const input = { + itemId: [mockItemId], + operation: 'fetch' as const, + limit: mockLimit, + }; + + // Scenario 1: Item found, updates array is null + let mockApiResponse: FetchItemUpdatesQuery = { + items: [ + { id: mockItemId.toString(), name: 'Test Item', updates: null }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + let result = await tool.execute(input); + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: [mockItemId.toString()], + limit: mockLimit, + }); + expect(result.content).toEqual(JSON.stringify(mockApiResponse.items, null, 2)); + + // Scenario 2: Item found, updates array is empty + mockApiResponse = { + items: [ + { id: mockItemId.toString(), name: 'Test Item', updates: [] }, + ], + }; + mockRequest.mockResolvedValue(mockApiResponse); + result = await tool.execute(input); + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: [mockItemId.toString()], + limit: mockLimit, + }); + expect(result.content).toEqual(JSON.stringify(mockApiResponse.items, null, 2)); + }); + + it('should handle API errors when fetching updates for multiple IDs', async () => { + const mockItemIds = [789, 101112]; + const mockLimit = 10; + const errorMessage = 'Network Error with multiple IDs'; + mockRequest.mockRejectedValue(new Error(errorMessage)); + + const input = { + itemId: mockItemIds, + operation: 'fetch' as const, + limit: mockLimit, + }; + const result = await tool.execute(input); + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: mockItemIds.map(id => id.toString()), + limit: mockLimit, + }); + expect(result.content).toEqual(`Failed to fetch updates for item ID(s) ${mockItemIds.join(', ')}. Error: ${errorMessage}`); + }); + + it('should handle API errors when fetching updates', async () => { + const mockItemId = 789; + const mockLimit = 10; + const errorMessage = 'Network Error'; + mockRequest.mockRejectedValue(new Error(errorMessage)); + + const input = { + itemId: [mockItemId], + operation: 'fetch' as const, + limit: mockLimit, + }; + + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(fetchItemUpdates, { + itemIds: [mockItemId.toString()], + limit: mockLimit, + }); + expect(result.content).toEqual(`Failed to fetch updates for item ID(s) ${mockItemId}. Error: ${errorMessage}`); + }); + }); + + describe('create operation', () => { + it('should successfully create an update (no parentId)', async () => { + const mockItemId = 123; + const mockBody = 'This is a new update!'; + const mockCreatedUpdateId = 'update_new_123'; + const mockApiResponse: CreateUpdateMutation = { + create_update: { + id: mockCreatedUpdateId, + }, + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: [mockItemId], + operation: 'create' as const, + body: mockBody, + limit: 25, // Satisfy type, not used by create op + // parentId is omitted + }; + const result = await tool.execute(input); + expect(mockRequest).toHaveBeenCalledWith(createUpdateMutation, { + itemId: mockItemId.toString(), + body: mockBody, + parentId: undefined, // Explicitly check it's undefined if not passed + }); + expect(result.content).toEqual(`Successfully created update with ID ${mockCreatedUpdateId} for item ${mockItemId}.`); + }); + + it('should successfully create a reply (with parentId)', async () => { + const mockItemId = 124; + const mockBody = 'This is a reply!'; + const mockParentId = 987; + const mockCreatedReplyId = 'reply_new_456'; + const mockApiResponse: CreateUpdateMutation = { + create_update: { + id: mockCreatedReplyId, + }, + }; + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: [mockItemId], + operation: 'create' as const, + body: mockBody, + parentId: mockParentId, + limit: 25, // Satisfy type + }; + const result = await tool.execute(input); + expect(mockRequest).toHaveBeenCalledWith(createUpdateMutation, { + itemId: mockItemId.toString(), + body: mockBody, + parentId: mockParentId.toString(), + }); + expect(result.content).toEqual(`Successfully created update with ID ${mockCreatedReplyId} for item ${mockItemId}.`); + }); + + it('should successfully create an update using the first item ID if an array is provided, and warn', async () => { + const mockItemIds = [123, 456, 789]; + const mockBody = 'This is a new update from array!'; + const mockCreatedUpdateId = 'update_new_multi_123'; + const mockApiResponse: CreateUpdateMutation = { + create_update: { + id: mockCreatedUpdateId, + }, + }; + + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: mockItemIds, // Array of IDs + operation: 'create' as const, + body: mockBody, + limit: 10, // limit is not used by create but often included in tests + }; + + const result = await tool.execute(input); + + // expect(consoleWarnSpy).toHaveBeenCalledWith( + // `[ManageItemUpdatesTool] For 'create' operation, only the first item ID (${mockItemIds[0]}) from the provided array [${mockItemIds.join(', ')}] will be used.` + // ); + expect(mockRequest).toHaveBeenCalledWith(createUpdateMutation, { + itemId: mockItemIds[0].toString(), // Uses the first ID + body: mockBody, + }); + expect(result.content).toEqual(`Successfully created update with ID ${mockCreatedUpdateId} for item ${mockItemIds[0]}.`); + }); + + it('should return an error if body is not provided for create operation', async () => { + const mockItemId = 456; + const input = { + itemId: [mockItemId], + operation: 'create' as const, + // body is intentionally omitted + limit: 10, + }; + + const result = await tool.execute(input as any); + + expect(mockRequest).not.toHaveBeenCalled(); + expect(result.content).toEqual('Error: Update body is required for the "create" operation.'); + }); + + it('should handle API errors when creating an update', async () => { + const mockItemId = 789; + const mockBody = 'Another update'; + const errorMessage = 'API Error on create'; + mockRequest.mockRejectedValue(new Error(errorMessage)); + + const input = { + itemId: [mockItemId], + operation: 'create' as const, + body: mockBody, + limit: 10, + }; + + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(createUpdateMutation, { + itemId: mockItemId.toString(), + body: mockBody, + }); + expect(result.content).toEqual(`Failed to create update for item ${mockItemId}. Error: ${errorMessage}`); + }); + + it('should handle API response not returning an ID when creating an update', async () => { + const mockItemId = 101; + const mockBody = 'Update with no ID return'; + const mockApiResponse: CreateUpdateMutation = { + create_update: null, // Simulate API not returning an ID or returning null for create_update + }; + + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: [mockItemId], + operation: 'create' as const, + body: mockBody, + limit: 10, + }; + + const result = await tool.execute(input); + expect(result.content).toEqual(`Failed to create update for item ${mockItemId}. No update ID returned.`); + }); + }); + + describe('delete operation', () => { + it('should successfully delete an update for an item when a single itemId is provided', async () => { + const mockItemId = 123; + const mockUpdateId = 987; + const mockApiResponse: DeleteUpdateMutation = { + delete_update: { + id: mockUpdateId.toString(), + }, + }; + + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: [mockItemId], + operation: 'delete' as const, + updateId: mockUpdateId, + limit: 10, + }; + + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(deleteUpdateMutation, { + updateId: mockUpdateId.toString(), + }); + expect(result.content).toEqual(`Successfully deleted update with ID ${mockUpdateId} from item ${mockItemId}.`); + }); + + it('should successfully delete an update using the first item ID if an array is provided (for context message), and warn', async () => { + const mockItemIds = [123, 777]; + const mockUpdateId = 987; + const mockApiResponse: DeleteUpdateMutation = { + delete_update: { + id: mockUpdateId.toString(), + }, + }; + + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: mockItemIds, // Array of IDs + operation: 'delete' as const, + updateId: mockUpdateId, + limit: 10, // limit is not used by delete + }; + + const result = await tool.execute(input); + + // expect(consoleWarnSpy).toHaveBeenCalledWith( + // `[ManageItemUpdatesTool] For 'delete' operation, only the first item ID (${mockItemIds[0]}) from the provided array [${mockItemIds.join(', ')}] will be used.` + // ); + expect(mockRequest).toHaveBeenCalledWith(deleteUpdateMutation, { + updateId: mockUpdateId.toString(), // delete uses updateId directly for the mutation + }); + // The message uses the first item ID for context + expect(result.content).toEqual(`Successfully deleted update with ID ${mockUpdateId} from item ${mockItemIds[0]}.`); + }); + + it('should return an error if updateId is not provided for delete operation', async () => { + const mockItemId = 456; + const input = { + itemId: [mockItemId], + operation: 'delete' as const, + // updateId is intentionally omitted + limit: 10, + }; + + const result = await tool.execute(input as any); // Cast to any to bypass TS check for this test + + expect(mockRequest).not.toHaveBeenCalled(); + expect(result.content).toEqual('Error: Update ID (updateId) is required for the "delete" operation.'); + }); + + it('should handle API errors when deleting an update', async () => { + const mockItemId = 789; + const mockUpdateId = 654; + const errorMessage = 'API Error on delete'; + mockRequest.mockRejectedValue(new Error(errorMessage)); + + const input = { + itemId: [mockItemId], + operation: 'delete' as const, + updateId: mockUpdateId, + limit: 10, + }; + + const result = await tool.execute(input); + + expect(mockRequest).toHaveBeenCalledWith(deleteUpdateMutation, { + updateId: mockUpdateId.toString(), + }); + expect(result.content).toEqual(`Failed to delete update ${mockUpdateId} for item ${mockItemId}. Error: ${errorMessage}`); + }); + + it('should handle API response not returning an ID when deleting an update', async () => { + const mockItemId = 101; + const mockUpdateId = 321; + const mockApiResponse: DeleteUpdateMutation = { + delete_update: null, // Simulate API not returning an ID or returning null + }; + + mockRequest.mockResolvedValue(mockApiResponse); + + const input = { + itemId: [mockItemId], + operation: 'delete' as const, + updateId: mockUpdateId, + limit: 10, + }; + + const result = await tool.execute(input); + expect(mockRequest).toHaveBeenCalledWith(deleteUpdateMutation, { + updateId: mockUpdateId.toString(), + }); + expect(result.content).toEqual(`Failed to delete update ${mockUpdateId} for item ${mockItemId}. Update may not exist or an API error occurred.`); + }); + }); +}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index a23384bb..a7ffd5bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,114 +26,114 @@ relay-runtime "12.0.0" signedsource "^1.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-validator-identifier" "^7.27.1" js-tokens "^4.0.0" - picocolors "^1.0.0" + picocolors "^1.1.1" -"@babel/compat-data@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" - integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== +"@babel/compat-data@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.2.tgz#4183f9e642fd84e74e3eea7ffa93a412e3b102c9" + integrity sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.26.10": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" - integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6" + integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.10" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.10" - "@babel/parser" "^7.26.10" - "@babel/template" "^7.26.9" - "@babel/traverse" "^7.26.10" - "@babel/types" "^7.26.10" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.1" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helpers" "^7.27.1" + "@babel/parser" "^7.27.1" + "@babel/template" "^7.27.1" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.18.13", "@babel/generator@^7.26.10", "@babel/generator@^7.27.0", "@babel/generator@^7.7.2": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" - integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== +"@babel/generator@^7.18.13", "@babel/generator@^7.26.10", "@babel/generator@^7.27.1", "@babel/generator@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230" + integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w== dependencies: - "@babel/parser" "^7.27.0" - "@babel/types" "^7.27.0" + "@babel/parser" "^7.27.1" + "@babel/types" "^7.27.1" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" -"@babel/helper-compilation-targets@^7.26.5": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" - integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== +"@babel/helper-compilation-targets@^7.27.1": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== dependencies: - "@babel/compat-data" "^7.26.8" - "@babel/helper-validator-option" "^7.25.9" + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== +"@babel/helper-module-transforms@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f" + integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g== dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" - integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helpers@^7.26.10": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" - integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== +"@babel/helpers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4" + integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ== dependencies: - "@babel/template" "^7.27.0" - "@babel/types" "^7.27.0" + "@babel/template" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" - integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.26.10", "@babel/parser@^7.27.1", "@babel/parser@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127" + integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw== dependencies: - "@babel/types" "^7.27.0" + "@babel/types" "^7.27.1" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -164,18 +164,18 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-import-assertions@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" - integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" @@ -192,11 +192,11 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" + integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -255,48 +255,46 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/runtime@^7.0.0", "@babel/runtime@^7.26.10": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.26.9", "@babel/template@^7.27.0", "@babel/template@^7.3.3": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" - integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.27.0" - "@babel/types" "^7.27.0" - -"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" - integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.27.0" - "@babel/parser" "^7.27.0" - "@babel/template" "^7.27.0" - "@babel/types" "^7.27.0" + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541" + integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog== + +"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.27.1", "@babel/template@^7.3.3": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.26.10", "@babel/traverse@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291" + integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.1" + "@babel/parser" "^7.27.1" + "@babel/template" "^7.27.1" + "@babel/types" "^7.27.1" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.13", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0", "@babel/types@^7.3.3": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" - integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== +"@babel/types@^7.0.0", "@babel/types@^7.18.13", "@babel/types@^7.20.7", "@babel/types@^7.26.10", "@babel/types@^7.27.1", "@babel/types@^7.3.3": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560" + integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q== dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -336,10 +334,10 @@ "@whatwg-node/promise-helpers" "^1.0.0" tslib "^2.5.0" -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz#b0fc7e06d0c94f801537fd4237edc2706d3b8e4c" - integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w== +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== dependencies: eslint-visitor-keys "^3.4.3" @@ -368,6 +366,11 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== +"@fastify/busboy@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-3.1.1.tgz#af3aea7f1e52ec916d8b5c9dcc0f09d4c060a3fc" + integrity sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw== + "@graphql-codegen/add@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@graphql-codegen/add/-/add-5.0.3.tgz#1ede6bac9a93661ed7fa5808b203d079e1b1d215" @@ -377,14 +380,14 @@ tslib "~2.6.0" "@graphql-codegen/cli@^5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-5.0.5.tgz#9a29b2c7a459e333fbae025dff951927fafe5d2f" - integrity sha512-9p9SI5dPhJdyU+O6p1LUqi5ajDwpm6pUhutb1fBONd0GZltLFwkgWFiFtM6smxkYXlYVzw61p1kTtwqsuXO16w== + version "5.0.6" + resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-5.0.6.tgz#586bd45ef7620406950687d0ed080ff383340e0a" + integrity sha512-1r5dtZ2l1jiCF/4qLMTcT7mEoWWWeqQlmn7HcPHgnV/OXIEodwox7XRGAmOKUygoabRjFF3S0jd0TWbkq5Otsw== dependencies: "@babel/generator" "^7.18.13" "@babel/template" "^7.18.10" "@babel/types" "^7.18.13" - "@graphql-codegen/client-preset" "^4.6.0" + "@graphql-codegen/client-preset" "^4.8.1" "@graphql-codegen/core" "^4.0.2" "@graphql-codegen/plugin-helpers" "^5.0.3" "@graphql-tools/apollo-engine-loader" "^8.0.0" @@ -393,7 +396,7 @@ "@graphql-tools/github-loader" "^8.0.0" "@graphql-tools/graphql-file-loader" "^8.0.0" "@graphql-tools/json-file-loader" "^8.0.0" - "@graphql-tools/load" "^8.0.0" + "@graphql-tools/load" "^8.1.0" "@graphql-tools/prisma-loader" "^8.0.0" "@graphql-tools/url-loader" "^8.0.0" "@graphql-tools/utils" "^10.0.0" @@ -417,10 +420,10 @@ yaml "^2.3.1" yargs "^17.0.0" -"@graphql-codegen/client-preset@^4.6.0": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@graphql-codegen/client-preset/-/client-preset-4.8.0.tgz#600f5fa5a1326fa765743268cefe08fae7678ce9" - integrity sha512-IVtTl7GsPMbQihk5+l5fDYksnPPOoC52sKxzquyIyuecZLEB7W3nNLV29r6+y+tjXTRPA774FR7CHGA2adzhjw== +"@graphql-codegen/client-preset@^4.8.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@graphql-codegen/client-preset/-/client-preset-4.8.1.tgz#2743875bb4884f9936c875d903f507c6aa77a5e6" + integrity sha512-XLF2V7WKLnepvrGE44JP+AvjS+Oz9AT0oYgTl/6d9btQ+2VYFcmwQPjNAuMVHipqE9I6h8hSEfH9hUrzUptB1g== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/template" "^7.20.7" @@ -429,7 +432,7 @@ "@graphql-codegen/plugin-helpers" "^5.1.0" "@graphql-codegen/typed-document-node" "^5.1.1" "@graphql-codegen/typescript" "^4.1.6" - "@graphql-codegen/typescript-operations" "^4.6.0" + "@graphql-codegen/typescript-operations" "^4.6.1" "@graphql-codegen/visitor-plugin-common" "^5.8.0" "@graphql-tools/documents" "^1.0.0" "@graphql-tools/utils" "^10.0.0" @@ -489,10 +492,10 @@ change-case-all "1.0.15" tslib "~2.6.0" -"@graphql-codegen/typescript-operations@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-4.6.0.tgz#29b277647ec16b00019e03c083a93262b79d978a" - integrity sha512-/EltSdE/uPoEAblRTVLABVDhsrE//Kl3pCflyG1PWl4gWL9/OzQXYGjo6TF6bPMVn/QBWoO0FeboWf+bk84SXA== +"@graphql-codegen/typescript-operations@^4.6.0", "@graphql-codegen/typescript-operations@^4.6.1": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-4.6.1.tgz#763eda28c77fddee2b9ae9bd7baad050cffff0a5" + integrity sha512-k92laxhih7s0WZ8j5WMIbgKwhe64C0As6x+PdcvgZFMudDJ7rPJ/hFqJ9DCRxNjXoHmSjnr6VUuQZq4lT1RzCA== dependencies: "@graphql-codegen/plugin-helpers" "^5.1.0" "@graphql-codegen/typescript" "^4.1.6" @@ -713,10 +716,10 @@ tslib "^2.4.0" unixify "^1.0.0" -"@graphql-tools/load@^8.0.0": - version "8.0.19" - resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-8.0.19.tgz#d01258388cd80f9356535c203ff6dfb1c309c1fc" - integrity sha512-YA3T9xTy2B6dNTnqsCzqSclA23j4v3p3A2Vdn0jEbZPGLMRPzWW8MJu2nlgQ8uua1IpYD/J8xgyrFxxAo3qPmQ== +"@graphql-tools/load@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-8.1.0.tgz#4aa03f071a8777e314b10289b7d6097daaaf8783" + integrity sha512-OGfOm09VyXdNGJS/rLqZ6ztCiG2g6AMxhwtET8GZXTbnjptFc17GtKwJ3Jv5w7mjJ8dn0BHydvIuEKEUK4ciYw== dependencies: "@graphql-tools/schema" "^10.0.23" "@graphql-tools/utils" "^10.8.6" @@ -1099,9 +1102,9 @@ "@jridgewell/sourcemap-codec" "^1.4.14" "@modelcontextprotocol/sdk@^1.7.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.9.0.tgz#1bf7a4843870b81da26983b8e69bf398d87055f1" - integrity sha512-Jq2EUCQpe0iyO5FGpzVYDNFR6oR53AIrwph9yWl7uSc7IWUMsrmpmSaTGra5hQNunXpM+9oit85p924jWuHzUA== + version "1.11.2" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz#d81784c140d1a9cc937f61af9f071d8b78befe30" + integrity sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ== dependencies: content-type "^1.0.5" cors "^2.8.5" @@ -1330,23 +1333,23 @@ form-data "^4.0.0" "@types/node@*": - version "22.14.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.0.tgz#d3bfa3936fef0dbacd79ea3eb17d521c628bb47e" - integrity sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA== + version "22.15.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.18.tgz#2f8240f7e932f571c2d45f555ba0b6c3f7a75963" + integrity sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg== dependencies: undici-types "~6.21.0" "@types/node@^18.11.18": - version "18.19.86" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.86.tgz#a7e1785289c343155578b9d84a0e3e924deb948b" - integrity sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ== + version "18.19.100" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.100.tgz#7f3aefbb6911099ab7e0902a1f373b1a4d2c1947" + integrity sha512-ojmMP8SZBKprc3qGrGk8Ujpo80AXkrP7G2tOT4VWr5jlr5DHjsJF+emXJz+Wm0glmy4Js62oKMdZZ6B9Y+tEcA== dependencies: undici-types "~5.26.4" "@types/node@^20.11.18": - version "20.17.30" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.30.tgz#1d93f656d3b869dbef7b796568ac457606ba58d0" - integrity sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg== + version "20.17.47" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.47.tgz#f9cb375993fffdae609c8e17d2b3dd8d3c4bfa14" + integrity sha512-3dLX0Upo1v7RvUimvxLeXqwrfyKxUINk0EAM83swP2mlSUcwV73sZy8XhNz8bcZ3VbsfQyC/y6jRdL5tgCNpDQ== dependencies: undici-types "~6.19.2" @@ -1380,84 +1383,84 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^8.29.0": - version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz#593639d9bb5239b2d877d65757b7e2c9100a2e84" - integrity sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg== + version "8.32.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz#9185b3eaa3b083d8318910e12d56c68b3c4f45b4" + integrity sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.29.1" - "@typescript-eslint/type-utils" "8.29.1" - "@typescript-eslint/utils" "8.29.1" - "@typescript-eslint/visitor-keys" "8.29.1" + "@typescript-eslint/scope-manager" "8.32.1" + "@typescript-eslint/type-utils" "8.32.1" + "@typescript-eslint/utils" "8.32.1" + "@typescript-eslint/visitor-keys" "8.32.1" graphemer "^1.4.0" - ignore "^5.3.1" + ignore "^7.0.0" natural-compare "^1.4.0" - ts-api-utils "^2.0.1" + ts-api-utils "^2.1.0" "@typescript-eslint/parser@^8.29.0": - version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.29.1.tgz#10bf37411be0a199c27b6515726e22fe8d3df8d0" - integrity sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg== - dependencies: - "@typescript-eslint/scope-manager" "8.29.1" - "@typescript-eslint/types" "8.29.1" - "@typescript-eslint/typescript-estree" "8.29.1" - "@typescript-eslint/visitor-keys" "8.29.1" + version "8.32.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.32.1.tgz#18b0e53315e0bc22b2619d398ae49a968370935e" + integrity sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg== + dependencies: + "@typescript-eslint/scope-manager" "8.32.1" + "@typescript-eslint/types" "8.32.1" + "@typescript-eslint/typescript-estree" "8.32.1" + "@typescript-eslint/visitor-keys" "8.32.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.29.1": - version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz#cfdfd4144f20c38b9d3e430efd6480e297ef52f6" - integrity sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA== +"@typescript-eslint/scope-manager@8.32.1": + version "8.32.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz#9a6bf5fb2c5380e14fe9d38ccac6e4bbe17e8afc" + integrity sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA== dependencies: - "@typescript-eslint/types" "8.29.1" - "@typescript-eslint/visitor-keys" "8.29.1" + "@typescript-eslint/types" "8.32.1" + "@typescript-eslint/visitor-keys" "8.32.1" -"@typescript-eslint/type-utils@8.29.1": - version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz#653dfff5c1711bc920a6a46a5a2c274899f00179" - integrity sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw== +"@typescript-eslint/type-utils@8.32.1": + version "8.32.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz#b9292a45f69ecdb7db74d1696e57d1a89514d21e" + integrity sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA== dependencies: - "@typescript-eslint/typescript-estree" "8.29.1" - "@typescript-eslint/utils" "8.29.1" + "@typescript-eslint/typescript-estree" "8.32.1" + "@typescript-eslint/utils" "8.32.1" debug "^4.3.4" - ts-api-utils "^2.0.1" + ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.29.1": - version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.29.1.tgz#984ed1283fedbfb41d3993a9abdcb7b299971500" - integrity sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ== +"@typescript-eslint/types@8.32.1": + version "8.32.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.32.1.tgz#b19fe4ac0dc08317bae0ce9ec1168123576c1d4b" + integrity sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg== -"@typescript-eslint/typescript-estree@8.29.1": - version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz#4ac085665ed5390d11c0e3426427978570e3b747" - integrity sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g== +"@typescript-eslint/typescript-estree@8.32.1": + version "8.32.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz#9023720ca4ecf4f59c275a05b5fed69b1276face" + integrity sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg== dependencies: - "@typescript-eslint/types" "8.29.1" - "@typescript-eslint/visitor-keys" "8.29.1" + "@typescript-eslint/types" "8.32.1" + "@typescript-eslint/visitor-keys" "8.32.1" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" - ts-api-utils "^2.0.1" + ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.29.1": - version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.29.1.tgz#3d206c8c8def3527a8eb0588e94e3e60f7e167c9" - integrity sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA== +"@typescript-eslint/utils@8.32.1": + version "8.32.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.32.1.tgz#4d6d5d29b9e519e9a85e9a74e9f7bdb58abe9704" + integrity sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA== dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.29.1" - "@typescript-eslint/types" "8.29.1" - "@typescript-eslint/typescript-estree" "8.29.1" + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.32.1" + "@typescript-eslint/types" "8.32.1" + "@typescript-eslint/typescript-estree" "8.32.1" -"@typescript-eslint/visitor-keys@8.29.1": - version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz#9b74e5098c71138d42bbf2178fbe4dfad45d6b9a" - integrity sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg== +"@typescript-eslint/visitor-keys@8.32.1": + version "8.32.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz#4321395cc55c2eb46036cbbb03e101994d11ddca" + integrity sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w== dependencies: - "@typescript-eslint/types" "8.29.1" + "@typescript-eslint/types" "8.32.1" eslint-visitor-keys "^4.2.0" "@ungap/structured-clone@^1.2.0": @@ -1474,27 +1477,27 @@ tslib "^2.6.3" "@whatwg-node/fetch@^0.10.0", "@whatwg-node/fetch@^0.10.4": - version "0.10.5" - resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.10.5.tgz#8537e50d32bac0f2e9cecff206588ca41d836df5" - integrity sha512-+yFJU3hmXPAHJULwx0VzCIsvr/H0lvbPvbOH3areOH3NAuCxCwaJsQ8w6/MwwMcvEWIynSsmAxoyaH04KeosPg== + version "0.10.7" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.10.7.tgz#f5f6839ba4af694259480f191d528ffef91e0361" + integrity sha512-sL31zX8BqZovZc38ovBFmKEfao9AzZ/24sWSHKNhDhcnzIO/PYAX2xF6vYtgU9hinrEGlvScTTyKSMynHGdfEA== dependencies: - "@whatwg-node/node-fetch" "^0.7.11" + "@whatwg-node/node-fetch" "^0.7.19" urlpattern-polyfill "^10.0.0" -"@whatwg-node/node-fetch@^0.7.11": - version "0.7.17" - resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.7.17.tgz#86adaaddf06d7d098f17dfa504cd91562d81f89e" - integrity sha512-Ni8A2H/r6brNf4u8Y7ATxmWUD0xltsQ6a4NnjWSbw4PgaT34CbY+u4QtVsFj9pTC3dBKJADKjac3AieAig+PZA== +"@whatwg-node/node-fetch@^0.7.19": + version "0.7.19" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.7.19.tgz#b8c09eb785782512972137f3bc7e0dad78667cbc" + integrity sha512-ippPt75epj7Tg6H5znI9lBBQ4gi+x23QsIF7UN1Z02MUqzhbkjhGsUtNnYGS3osrqvyKtbGKmEya6IqIPRmtdw== dependencies: + "@fastify/busboy" "^3.1.1" "@whatwg-node/disposablestack" "^0.0.6" - "@whatwg-node/promise-helpers" "^1.2.5" - busboy "^1.6.0" + "@whatwg-node/promise-helpers" "^1.3.2" tslib "^2.6.3" -"@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.2.1", "@whatwg-node/promise-helpers@^1.2.4", "@whatwg-node/promise-helpers@^1.2.5", "@whatwg-node/promise-helpers@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.0.tgz#33629c853cfa309009b1329d3cb6208241ec2bf0" - integrity sha512-486CouizxHXucj8Ky153DDragfkMcHtVEToF5Pn/fInhUUSiCmt9Q4JVBa6UK5q4RammFBtGQ4C9qhGlXU9YbA== +"@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.2.1", "@whatwg-node/promise-helpers@^1.2.4", "@whatwg-node/promise-helpers@^1.3.0", "@whatwg-node/promise-helpers@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz#3b54987ad6517ef6db5920c66a6f0dada606587d" + integrity sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA== dependencies: tslib "^2.6.3" @@ -1759,14 +1762,14 @@ braces@^3.0.3: fill-range "^7.1.1" browserslist@^4.24.0: - version "4.24.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" - integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== + version "4.24.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b" + integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw== dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" + caniuse-lite "^1.0.30001716" + electron-to-chromium "^1.5.149" node-releases "^2.0.19" - update-browserslist-db "^1.1.1" + update-browserslist-db "^1.1.3" bs-logger@^0.2.6: version "0.2.6" @@ -1795,13 +1798,6 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - bytes@3.1.2, bytes@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -1846,10 +1842,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001688: - version "1.0.30001712" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz#41ee150f12de11b5f57c5889d4f30deb451deedf" - integrity sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig== +caniuse-lite@^1.0.30001716: + version "1.0.30001718" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz#dae13a9c80d517c30c6197515a96131c194d8f82" + integrity sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw== capital-case@^1.0.4: version "1.0.4" @@ -2131,16 +2127,16 @@ debounce@^1.2.0: integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.6.0.tgz#79d52d6389b1ffa67d2bcef59ba51847a9d503b2" + integrity sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA== deep-is@^0.1.3: version "0.1.4" @@ -2231,9 +2227,9 @@ dot-case@^3.0.4: tslib "^2.0.3" dotenv@^16.0.0, dotenv@^16.4.7: - version "16.4.7" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" - integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + version "16.5.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" + integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== dset@^3.1.2, dset@^3.1.4: version "3.1.4" @@ -2261,10 +2257,10 @@ ejs@^3.1.10: dependencies: jake "^10.8.5" -electron-to-chromium@^1.5.73: - version "1.5.134" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.134.tgz#d90008c4f8a506c1a6d1b329f922d83e18904101" - integrity sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og== +electron-to-chromium@^1.5.149: + version "1.5.152" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.152.tgz#bcdd39567e291b930ec26b930031137a05593695" + integrity sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg== emittery@^0.13.1: version "0.13.1" @@ -2461,9 +2457,9 @@ eventsource-parser@^3.0.1: integrity sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA== eventsource@^3.0.2: - version "3.0.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-3.0.6.tgz#5c4b24cd70c0323eed2651a5ee07bd4bc391e656" - integrity sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA== + version "3.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-3.0.7.tgz#1157622e2f5377bb6aef2114372728ba0c156989" + integrity sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA== dependencies: eventsource-parser "^3.0.1" @@ -2857,13 +2853,13 @@ graphemer@^1.4.0: integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== graphql-config@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-5.1.3.tgz#343e2867dafd5b009cd97fe6b29a5e9604001819" - integrity sha512-RBhejsPjrNSuwtckRlilWzLVt2j8itl74W9Gke1KejDTz7oaA5kVd6wRn9zK9TS5mcmIYGxf7zN7a1ORMdxp1Q== + version "5.1.5" + resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-5.1.5.tgz#34e0bfba88e74b6eefd889716a9378086f595f7f" + integrity sha512-mG2LL1HccpU8qg5ajLROgdsBzx/o2M6kgI3uAmoaXiSH9PCUbtIyLomLqUtCFaAeG2YCFsl0M5cfQ9rKmDoMVA== dependencies: "@graphql-tools/graphql-file-loader" "^8.0.0" "@graphql-tools/json-file-loader" "^8.0.0" - "@graphql-tools/load" "^8.0.0" + "@graphql-tools/load" "^8.1.0" "@graphql-tools/merge" "^9.0.0" "@graphql-tools/url-loader" "^8.0.0" "@graphql-tools/utils" "^10.0.0" @@ -2889,9 +2885,9 @@ graphql-tag@^2.11.0, graphql-tag@^2.12.6: tslib "^2.1.0" graphql-ws@^6.0.3: - version "6.0.4" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-6.0.4.tgz#f0376170965f9535576b2d3e897db38b463a31f0" - integrity sha512-8b4OZtNOvv8+NZva8HXamrc0y1jluYC0+13gdh7198FKjVzXyTvVc95DCwGzaKEfn3YuWZxUqjJlHe3qKM/F2g== + version "6.0.5" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-6.0.5.tgz#24adcf444602df83477b9e07cd4b57f411ada024" + integrity sha512-HzYw057ch0hx2gZjkbgk1pur4kAtgljlWRP+Gccudqm3BRrTpExjWCQ9OHdIsq47Y6lHL++1lTvuQHhgRRcevw== graphql@16.8.2: version "16.8.2" @@ -2993,11 +2989,16 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0, ignore@^5.3.1: +ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +ignore@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.4.tgz#a12c70d0f2607c5bf508fb65a40c75f037d7a078" + integrity sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A== + immutable@~3.7.6: version "3.7.6" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" @@ -4086,9 +4087,9 @@ onetime@^5.1.0, onetime@^5.1.2: mimic-fn "^2.1.0" openai@^4.93.0: - version "4.93.0" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.93.0.tgz#12e74a5bff0b15fdb12e523232af1a8d5ee11e3f" - integrity sha512-2kONcISbThKLfm7T9paVzg+QCE1FOZtNMMUfXyXckUAoXRRS/mTP89JSDHPMp8uM5s0bz28RISbvQjArD6mgUQ== + version "4.98.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.98.0.tgz#81d8228e06e5d9195bac3b170af42a5454391999" + integrity sha512-TmDKur1WjxxMPQAtLG5sgBSCJmX7ynTsGmewKzoDwl1fRxtbLOsiR0FA/AOAAtYUmP6azal+MYQuOENfdU+7yg== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -4267,7 +4268,7 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^1.0.0, picocolors@^1.1.1: +picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -4406,11 +4407,6 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - relay-runtime@12.0.0: version "12.0.0" resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-12.0.0.tgz#1e039282bdb5e0c1b9a7dc7f6b9a09d4f4ff8237" @@ -4569,10 +4565,10 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1: - version "7.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== +semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== send@^1.1.0, send@^1.2.0: version "1.2.0" @@ -4802,11 +4798,6 @@ statuses@2.0.1, statuses@^2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - string-env-interpolation@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" @@ -4894,9 +4885,9 @@ sync-fetch@0.6.0-2: whatwg-mimetype "^4.0.0" terser@^5.17.4: - version "5.39.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.39.0.tgz#0e82033ed57b3ddf1f96708d123cca717d86ca3a" - integrity sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw== + version "5.39.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.39.1.tgz#1c80e6bde2b362c6f9f3e79e295c228a3882d983" + integrity sha512-Mm6+uad0ZuDtcV8/4uOZQDQ8RuiC5Pu+iZRedJtF7yA/27sPL7d++In/AJKpWZlU3SYMPPkVfwetn6sgZ66pUA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -4963,15 +4954,15 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-api-utils@^2.0.1: +ts-api-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== ts-jest@^29.1.2, ts-jest@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.3.1.tgz#2e459e1f94a833bd8216ba4b045fac948e265937" - integrity sha512-FT2PIRtZABwl6+ZCry8IY7JZ3xMuppsEV9qFVHOVe8jDzggwUZ9TsM4chyJxL9yi6LvkqcZYU3LmapEE454zBQ== + version "29.3.3" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.3.3.tgz#c24c31a9d12268f88899e3eeb05912cab42c574c" + integrity sha512-y6jLm19SL4GroiBmHwFK4dSHUfDNmOrJbRfp6QmDIlI9p5tT5Q8ItccB4pTIslCIqOZuQnBwpTR0bQ5eUMYwkw== dependencies: bs-logger "^0.2.6" ejs "^3.1.10" @@ -4980,8 +4971,8 @@ ts-jest@^29.1.2, ts-jest@^29.3.1: json5 "^2.2.3" lodash.memoize "^4.1.2" make-error "^1.3.6" - semver "^7.7.1" - type-fest "^4.38.0" + semver "^7.7.2" + type-fest "^4.41.0" yargs-parser "^21.1.1" ts-log@^2.2.3: @@ -5018,47 +5009,47 @@ tslib@~2.6.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== -turbo-darwin-64@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-2.5.0.tgz#3d966d03b98b9b41dd5abf80bc792e251195a905" - integrity sha512-fP1hhI9zY8hv0idym3hAaXdPi80TLovmGmgZFocVAykFtOxF+GlfIgM/l4iLAV9ObIO4SUXPVWHeBZQQ+Hpjag== +turbo-darwin-64@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-2.5.3.tgz#e1f19e816f76e0d636e31e66f8238c43bf870f45" + integrity sha512-YSItEVBUIvAGPUDpAB9etEmSqZI3T6BHrkBkeSErvICXn3dfqXUfeLx35LfptLDEbrzFUdwYFNmt8QXOwe9yaw== -turbo-darwin-arm64@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-2.5.0.tgz#94bf89c6f2d942eadad08741a11ef36601980b58" - integrity sha512-p9sYq7kXH7qeJwIQE86cOWv/xNqvow846l6c/qWc26Ib1ci5W7V0sI5thsrP3eH+VA0d+SHalTKg5SQXgNQBWA== +turbo-darwin-arm64@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-2.5.3.tgz#f80074fd786f703bcb0415e13df225ba781950fc" + integrity sha512-5PefrwHd42UiZX7YA9m1LPW6x9YJBDErXmsegCkVp+GjmWrADfEOxpFrGQNonH3ZMj77WZB2PVE5Aw3gA+IOhg== -turbo-linux-64@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-2.5.0.tgz#878dae794436581d781c4573ff7975deab5b9d67" - integrity sha512-1iEln2GWiF3iPPPS1HQJT6ZCFXynJPd89gs9SkggH2EJsj3eRUSVMmMC8y6d7bBbhBFsiGGazwFIYrI12zs6uQ== +turbo-linux-64@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-2.5.3.tgz#93bfe009a24a76295c8164896845b5098c293293" + integrity sha512-M9xigFgawn5ofTmRzvjjLj3Lqc05O8VHKuOlWNUlnHPUltFquyEeSkpQNkE/vpPdOR14AzxqHbhhxtfS4qvb1w== -turbo-linux-arm64@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-2.5.0.tgz#c2d84b11a340d480fd0a44bfd7c8cece2383d6fb" - integrity sha512-bKBcbvuQHmsX116KcxHJuAcppiiBOfivOObh2O5aXNER6mce7YDDQJy00xQQNp1DhEfcSV2uOsvb3O3nN2cbcA== +turbo-linux-arm64@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-2.5.3.tgz#bf4664561094711aa289d92b9443de2aefca5d6e" + integrity sha512-auJRbYZ8SGJVqvzTikpg1bsRAsiI9Tk0/SDkA5Xgg0GdiHDH/BOzv1ZjDE2mjmlrO/obr19Dw+39OlMhwLffrw== -turbo-windows-64@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-2.5.0.tgz#104dbe9466e98196dd2c9f5b0fcad223c3c05fb6" - integrity sha512-9BCo8oQ7BO7J0K913Czbc3tw8QwLqn2nTe4E47k6aVYkM12ASTScweXPTuaPFP5iYXAT6z5Dsniw704Ixa5eGg== +turbo-windows-64@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-2.5.3.tgz#acbc2db093c7a74f0e692b899e649284285a2e7b" + integrity sha512-arLQYohuHtIEKkmQSCU9vtrKUg+/1TTstWB9VYRSsz+khvg81eX6LYHtXJfH/dK7Ho6ck+JaEh5G+QrE1jEmCQ== -turbo-windows-arm64@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-2.5.0.tgz#a7b4b5efea74001253ccf08f0edf004d9620e73e" - integrity sha512-OUHCV+ueXa3UzfZ4co/ueIHgeq9B2K48pZwIxKSm5VaLVuv8M13MhM7unukW09g++dpdrrE1w4IOVgxKZ0/exg== +turbo-windows-arm64@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-2.5.3.tgz#78e8cfdb49b69fbadf03031532f1524be3661729" + integrity sha512-3JPn66HAynJ0gtr6H+hjY4VHpu1RPKcEwGATvGUTmLmYSYBQieVlnGDRMMoYN066YfyPqnNGCfhYbXfH92Cm0g== turbo@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/turbo/-/turbo-2.5.0.tgz#6ea89f4511e7fb68b866c51e709bfbace7efc62a" - integrity sha512-PvSRruOsitjy6qdqwIIyolv99+fEn57gP6gn4zhsHTEcCYgXPhv6BAxzAjleS8XKpo+Y582vTTA9nuqYDmbRuA== + version "2.5.3" + resolved "https://registry.yarnpkg.com/turbo/-/turbo-2.5.3.tgz#657dcae430552d9bb237e9e1d91f711c465c9f28" + integrity sha512-iHuaNcq5GZZnr3XDZNuu2LSyCzAOPwDuo5Qt+q64DfsTP1i3T2bKfxJhni2ZQxsvAoxRbuUK5QetJki4qc5aYA== optionalDependencies: - turbo-darwin-64 "2.5.0" - turbo-darwin-arm64 "2.5.0" - turbo-linux-64 "2.5.0" - turbo-linux-arm64 "2.5.0" - turbo-windows-64 "2.5.0" - turbo-windows-arm64 "2.5.0" + turbo-darwin-64 "2.5.3" + turbo-darwin-arm64 "2.5.3" + turbo-linux-64 "2.5.3" + turbo-linux-arm64 "2.5.3" + turbo-windows-64 "2.5.3" + turbo-windows-arm64 "2.5.3" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -5082,10 +5073,10 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^4.38.0: - version "4.39.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.39.1.tgz#7521f6944e279abaf79cf60cfbc4823f4858083e" - integrity sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w== +type-fest@^4.41.0: + version "4.41.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== type-is@^2.0.0, type-is@^2.0.1: version "2.0.1" @@ -5143,7 +5134,7 @@ unpipe@1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.1.1: +update-browserslist-db@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== @@ -5173,9 +5164,9 @@ uri-js@^4.2.2: punycode "^2.1.0" urlpattern-polyfill@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" - integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== + version "10.1.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz#1b2517e614136c73ba32948d5e7a3a063cba8e74" + integrity sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw== util-deprecate@^1.0.1: version "1.0.2" @@ -5287,9 +5278,9 @@ write-file-atomic@^4.0.2: signal-exit "^3.0.7" ws@^8.17.1: - version "8.18.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" - integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== + version "8.18.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" + integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== y18n@^5.0.5: version "5.0.8" @@ -5345,6 +5336,6 @@ zod-to-json-schema@^3.24.1, zod-to-json-schema@^3.24.5: integrity sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g== zod@^3.23.8, zod@^3.24.2: - version "3.24.2" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" - integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== + version "3.24.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.4.tgz#e2e2cca5faaa012d76e527d0d36622e0a90c315f" + integrity sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==