Some toolkits' getCurrentUserEndpoint references connection-supplied fields that aren't part of the auth scheme defaults — e.g. telegram's https://api.telegram.org/bot{bot_token}/getMe. After getBestPossibleUrlWithoutAuthInfo fills in default scheme fields, these placeholders remain. Neither constructProxyUrl nor executeProxy substitute templates on absolute endpoints, so we ship the literal {bot_token} to Telegram, the API returns 404 after a real network round-trip (500–1500ms), and the 4xx-skip-cache branch (PR #9938) discards the response anyway — the probe is wasted latency.
Add a small hasUnresolvedUrlTemplate(url) helper that detects mustache pairs ({{name}}) and OpenAPI-style single-brace params ({name}), restricted to identifier-shaped tokens so accidental curlies in query strings don't false-match. getUserInfoViaProxy short-circuits when the resolved endpoint still carries a placeholder, returning undefined (the same value the 4xx path produces). All getUserInfoViaProxy callers already tolerate undefined (used to populate optional user_info / current_user_info fields in MANAGE_CONNECTIONS, SEARCH_TOOLS post-result enrichment, WAIT_FOR_CONNECTIONS, and search-connection-builders).
Production signal. A representative slow MANAGE_CONNECTIONS trace (573d51ea8a799026222eddfe772405be, 2966ms) shows 6 parallel telegram user-info probes — same toolkit, six connected accounts — all firing against https://api.telegram.org/bot{bot_token}/getMe, each waiting 500-1500ms before returning 404. The tail of the request is dominated by the slowest of those probes. In the last few hours of prod logs, 21 telegram + 2 plain + 2 neon + 2 google_chat + 1 metabase probes returned 404 — all matching the templated-URL pattern.
E2E timing on local Apollo (single telegram conn, fresh session):
OLD (probe enabled): 2615ms, 1665ms, 1620ms
NEW (probe skipped): 874ms, 760ms, 747ms
~900ms saved per MANAGE_CONNECTIONS call with one templated-URL toolkit. Savings scale with parallel-probe count: 6 telegrams → ~1500ms saved off the tail (parallel-bound by slowest probe).
The skip log fires at info so prod can measure savings via @message:"Skipping user info probe".
connections_skip_templated_user_info.test.ts cover the helper regex (single-brace, double-brace, dot-in-identifier, fully-resolved URLs, query-string curlies, whitespace, empty curlies) and the integration with getUserInfoViaProxy (skip on template, fall through on clean URL, no-cache short-circuit, cache-hit pre-empts the check).connections_dcr_oauth, connections_auth_config_enabled_filter, manageConnections.test.ts, manageConnections.unit.test.ts, searchRace, search_action_multi_account, waitForConnection).pnpm check-types clean.isToolRouterConfig = true, fired MANAGE_CONNECTIONS against the running server, confirmed the new log line Skipping user info probe for telegram — endpoint has unresolved template placeholders: https://api.telegram.org/bot{bot_token}/getMe fires and that no https://api.telegram.org/... proxy GET request is made.$ doppler run -- pnpm with-env vitest run \
src/lib/composio_actions/utils/__tests__/connections_skip_templated_user_info.test.ts \
src/lib/composio_actions/utils/__tests__/connections_dcr_oauth.test.ts \
src/lib/composio_actions/utils/__tests__/connections_auth_config_enabled_filter.test.ts \
src/lib/composio_actions/actions/manageConnections.test.ts \
src/lib/composio_actions/actions/toolRouter/__tests__/manageConnections.unit.test.ts \
src/lib/composio_actions/actions/__tests__/searchRace.test.ts \
src/lib/composio_actions/actions/__tests__/search_action_multi_account.unit.test.ts \
src/lib/composio_actions/actions/toolRouter/__tests__/waitForConnection.test.ts
# Test Files 8 passed, Tests 109 passed
Origin: cron-1b67184aec75 / zen-cron-155f8782d60e
Triggered by: dhawal@composio.dev | Source: unknown Session: https://zen-api-production-4c98.up.railway.app/dashboard/#/chat/zen-cron-155f8782d60e
Based on git blame analysis of 2 file(s):
| Contributor | Contribution | Files |
|---|---|---|
| Zen | 56% | 2 |
| Dhawal Upadhyay |
| 22% |
| 1 |
| lingalarahul7 | 15% | 1 |
| Rohan Prabhu | 4% | 1 |
| abir-taheer | 1% | 1 |
Recommend Dhawal Upadhyay and lingalarahul7. Both have substantial recent edits to apps/apollo/src/lib/composio_actions/utils/connections.ts (Dhawal 46% — last edit ~5 months ago; lingalarahul7 30% — ~4 months ago) and will be familiar with the module’s logic and how the new tests should behave.
🤖 Based on git blame with recency weighting (recent edits count more).
:white_check_mark: All modified and coverable lines are covered by tests.
| Flag | Coverage Δ | |
|---|---|---|
| e2e-tests | 6.06% <0.00%> (-0.01%) | :arrow_down: |
| self-hosted-tests | 5.60% <0.00%> (-0.01%) | :arrow_down: |
| thermos-unit-tests | ? | |
| unit-tests | 58.75% <100.00%> (+0.06%) | :arrow_up: |
Flags with carried forward coverage won't be shown. Click here to find out more.
| Files with missing lines | Coverage Δ | |
|---|---|---|
| ...ollo/src/lib/composio_actions/utils/connections.ts | 81.90% <100.00%> (+25.50%) | :arrow_up: |
... and 269 files with indirect coverage changes