From 463630cc0a256a9652c6d84bab817190e77a9c37 Mon Sep 17 00:00:00 2001 From: akhisud3195 Date: Wed, 27 Aug 2025 20:52:31 +0530 Subject: [PATCH] Upgrade composio package and update no_auth logic --- apps/rowboat/package-lock.json | 229 +----------------- apps/rowboat/package.json | 2 +- .../src/application/lib/composio/composio.ts | 104 +++++++- 3 files changed, 114 insertions(+), 221 deletions(-) diff --git a/apps/rowboat/package-lock.json b/apps/rowboat/package-lock.json index 020e1b98..5e92e600 100644 --- a/apps/rowboat/package-lock.json +++ b/apps/rowboat/package-lock.json @@ -12,7 +12,7 @@ "@auth0/nextjs-auth0": "^4.7.0", "@aws-sdk/client-s3": "^3.743.0", "@aws-sdk/s3-request-presigner": "^3.743.0", - "@composio/core": "^0.1.40", + "@composio/core": "^0.1.48", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", @@ -1447,16 +1447,16 @@ "license": "Apache-2.0" }, "node_modules/@composio/core": { - "version": "0.1.41", - "resolved": "https://registry.npmjs.org/@composio/core/-/core-0.1.41.tgz", - "integrity": "sha512-wodFzWduAZ+7i08exCRDj5/0uDrQbNNrTA36EdBZE6T6+gzxH9GMnZmGXcg9WvU8dQSx/hWiJAyjp1IF4gGMtA==", + "version": "0.1.48", + "resolved": "https://registry.npmjs.org/@composio/core/-/core-0.1.48.tgz", + "integrity": "sha512-zTzxrdaOlzlBjjolJ+n/5xGBDrBP3Qr4lwgq37CZjTmJQ5T2Ypk6uvcNV1HkYq7cAXNGU+ojzFryNDkkNCfT3A==", "license": "ISC", "dependencies": { "@composio/client": "0.1.0-alpha.31", - "@composio/json-schema-to-zod": "0.1.11", + "@composio/json-schema-to-zod": "0.1.13", "@types/json-schema": "^7.0.15", "chalk": "^4.1.2", - "openai": "^4.94.0", + "openai": "^5.16.0", "pusher-js": "^8.4.0", "semver": "^7.7.2", "uuid": "^11.1.0", @@ -1478,9 +1478,9 @@ } }, "node_modules/@composio/json-schema-to-zod": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@composio/json-schema-to-zod/-/json-schema-to-zod-0.1.11.tgz", - "integrity": "sha512-6gcCof9xqLhmmHSCvWLW/E16PKr5C1dWJ9AOk4FJU8JA7gSt8JEdFHBwx80dyprBJdwPF6R54nlkmpXrEwApzg==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/@composio/json-schema-to-zod/-/json-schema-to-zod-0.1.13.tgz", + "integrity": "sha512-M/pppyhshlWB/5S6hjocFYYFCm9sFK1y9dTm70MpYl2EGJtpYDgwUeS9cFIzml+Iw/MUebr0wCJ0c+jOYeDU/A==", "license": "ISC", "dependencies": { "@types/json-schema": "^7.0.15", @@ -4445,26 +4445,6 @@ } } }, - "node_modules/@openai/agents-core/node_modules/openai": { - "version": "5.12.2", - "resolved": "https://registry.npmjs.org/openai/-/openai-5.12.2.tgz", - "integrity": "sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ==", - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, "node_modules/@openai/agents-extensions": { "version": "0.0.15", "resolved": "https://registry.npmjs.org/@openai/agents-extensions/-/agents-extensions-0.0.15.tgz", @@ -4491,26 +4471,6 @@ "openai": "^5.10.1" } }, - "node_modules/@openai/agents-openai/node_modules/openai": { - "version": "5.12.2", - "resolved": "https://registry.npmjs.org/openai/-/openai-5.12.2.tgz", - "integrity": "sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ==", - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, "node_modules/@openai/agents-realtime": { "version": "0.0.15", "resolved": "https://registry.npmjs.org/@openai/agents-realtime/-/agents-realtime-0.0.15.tgz", @@ -4523,26 +4483,6 @@ "ws": "^8.18.1" } }, - "node_modules/@openai/agents/node_modules/openai": { - "version": "5.12.2", - "resolved": "https://registry.npmjs.org/openai/-/openai-5.12.2.tgz", - "integrity": "sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ==", - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, "node_modules/@openai/zod": { "name": "zod", "version": "3.25.67", @@ -7606,15 +7546,6 @@ "undici-types": "~5.26.4" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", @@ -8005,17 +7936,6 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/accepts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", @@ -8079,17 +7999,6 @@ "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/ai": { "version": "4.3.13", "resolved": "https://registry.npmjs.org/ai/-/ai-4.3.13.tgz", @@ -10605,14 +10514,6 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -11004,23 +10905,6 @@ "node": ">= 6" } }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -11465,14 +11349,6 @@ "node": ">= 6" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -14587,62 +14463,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", @@ -14795,19 +14615,10 @@ } }, "node_modules/openai": { - "version": "4.104.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz", - "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.16.0.tgz", + "integrity": "sha512-hoEH8ZNvg1HXjU9mp88L/ZH8O082Z8r6FHCXGiWAzVRrEv443aI57qhch4snu07yQydj+AUAWLenAiBXhu89Tw==", "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, "bin": { "openai": "bin/cli" }, @@ -14824,14 +14635,6 @@ } } }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.54", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.54.tgz", - "integrity": "sha512-+BRgt0G5gYjTvdLac9sIeE0iZcJxi4Jc4PV5EUzqi+88jmQLr+fRZdv2tCTV7IHKSGxM6SaLoOXQWWUiLUItMw==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -17274,14 +17077,6 @@ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==" }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "engines": { - "node": ">= 14" - } - }, "node_modules/web-vitals": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", diff --git a/apps/rowboat/package.json b/apps/rowboat/package.json index ff5d8f61..5df95733 100644 --- a/apps/rowboat/package.json +++ b/apps/rowboat/package.json @@ -20,7 +20,7 @@ "@auth0/nextjs-auth0": "^4.7.0", "@aws-sdk/client-s3": "^3.743.0", "@aws-sdk/s3-request-presigner": "^3.743.0", - "@composio/core": "^0.1.40", + "@composio/core": "^0.1.48", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", diff --git a/apps/rowboat/src/application/lib/composio/composio.ts b/apps/rowboat/src/application/lib/composio/composio.ts index 057a14cc..d18ba8ff 100644 --- a/apps/rowboat/src/application/lib/composio/composio.ts +++ b/apps/rowboat/src/application/lib/composio/composio.ts @@ -74,13 +74,111 @@ export async function listTools(toolkitSlug: string, searchQuery: string | null url.searchParams.set("cursor", cursor); } - // fetch - return composioApiCall(ZListResponse(ZTool), url.toString()); + // First get the tools list response + const toolsResponse = await fetch(url.toString(), { + headers: { + "x-api-key": COMPOSIO_API_KEY, + }, + }); + + if (!toolsResponse.ok) { + throw new Error(`Failed to fetch tools list: ${toolsResponse.status} ${toolsResponse.statusText}`); + } + + const toolsData = await toolsResponse.json(); + + // Check for error response + if ('error' in toolsData) { + const response = ZErrorResponse.parse(toolsData); + throw new Error(`(code: ${response.error.error_code}): ${response.error.message}: ${response.error.suggested_fix}: ${response.error.errors?.join(', ')}`); + } + + // Get toolkit data to compute no_auth for all tools + const toolkitUrl = new URL(`${BASE_URL}/toolkits/${toolkitSlug}`); + const toolkitResponse = await fetch(toolkitUrl.toString(), { + headers: { + "x-api-key": COMPOSIO_API_KEY, + }, + }); + + if (!toolkitResponse.ok) { + throw new Error(`Failed to fetch toolkit: ${toolkitResponse.status} ${toolkitResponse.statusText}`); + } + + const toolkitData = await toolkitResponse.json(); + + // Compute no_auth from toolkit data + const no_auth = toolkitData.composio_managed_auth_schemes?.includes('NO_AUTH') || + toolkitData.auth_config_details?.some((config: any) => config.mode === 'NO_AUTH') || + false; + + // Enrich all tools in the list with computed no_auth + const enrichedToolsData = { + ...toolsData, + items: toolsData.items.map((tool: any) => ({ + ...tool, + no_auth + })) + }; + + // Now parse with our schema + return ZListResponse(ZTool).parse(enrichedToolsData); } export async function getTool(toolSlug: string): Promise> { const url = new URL(`${BASE_URL}/tools/${toolSlug}`); - return composioApiCall(ZTool, url.toString()); + + // First get the tool response + const toolResponse = await fetch(url.toString(), { + headers: { + "x-api-key": COMPOSIO_API_KEY, + }, + }); + + if (!toolResponse.ok) { + throw new Error(`Failed to fetch tool: ${toolResponse.status} ${toolResponse.statusText}`); + } + + const toolData = await toolResponse.json(); + + // Check for error response + if ('error' in toolData) { + const response = ZErrorResponse.parse(toolData); + throw new Error(`(code: ${response.error.error_code}): ${response.error.message}: ${response.error.suggested_fix}: ${response.error.errors?.join(', ')}`); + } + + // Get toolkit data to compute no_auth + const toolkitSlug = toolData.toolkit?.slug; + if (!toolkitSlug) { + throw new Error(`Tool response missing toolkit slug: ${JSON.stringify(toolData)}`); + } + + const toolkitUrl = new URL(`${BASE_URL}/toolkits/${toolkitSlug}`); + const toolkitResponse = await fetch(toolkitUrl.toString(), { + headers: { + "x-api-key": COMPOSIO_API_KEY, + }, + }); + + if (!toolkitResponse.ok) { + throw new Error(`Failed to fetch toolkit: ${toolkitResponse.status} ${toolkitResponse.statusText}`); + } + + const toolkitData = await toolkitResponse.json(); + + // Compute no_auth from toolkit data + const no_auth = toolkitData.composio_managed_auth_schemes?.includes('NO_AUTH') || + toolkitData.auth_config_details?.some((config: any) => config.mode === 'NO_AUTH') || + false; + + // Inject computed no_auth into tool data + const enrichedToolData = { + ...toolData, + no_auth + }; + + // Now parse with our schema + return ZTool.parse(enrichedToolData); } export async function listAuthConfigs(toolkitSlug: string, cursor: string | null = null, managedOnly: boolean = false): Promise>>> {