From 136e993f68dd1c76fef119f5f91c398152d9fa5e Mon Sep 17 00:00:00 2001 From: Bob Qiu Date: Tue, 29 Sep 2026 15:25:40 +0800 Subject: [PATCH] refactor(projects): add timeout parameter to fetchTeamProjects for improved performance --- packages/insomnia-api/src/project.ts | 3 ++- packages/insomnia-data/node-src/services/project.ts | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/insomnia-api/src/project.ts b/packages/insomnia-api/src/project.ts index 1d732f48c2..8ffca29eea 100644 --- a/packages/insomnia-api/src/project.ts +++ b/packages/insomnia-api/src/project.ts @@ -7,11 +7,12 @@ interface TeamProjects { }[]; } -export const fetchTeamProjects = ({ sessionId, organizationId }: { sessionId: string; organizationId: string }) => { +export const fetchTeamProjects = ({ sessionId, organizationId, timeout }: { sessionId: string; organizationId: string; timeout?: number }) => { return fetch({ method: 'GET', path: `/v1/organizations/${organizationId}/team-projects`, sessionId, + timeout, }); }; diff --git a/packages/insomnia-data/node-src/services/project.ts b/packages/insomnia-data/node-src/services/project.ts index 3a0f268aee..5567ca0054 100644 --- a/packages/insomnia-data/node-src/services/project.ts +++ b/packages/insomnia-data/node-src/services/project.ts @@ -67,6 +67,13 @@ export async function getFirstProjectOfOrganization(organizationId: string) { return db.findOne(type, { parentId: organizationId }); } +// syncProjects() runs this in the background under the same lock that +// guards interactive project creation (see `projectLock` in +// packages/insomnia/src/common/project.ts), so it must not be allowed to +// hold that lock for as long as the default fetch timeout (30s) — that +// blocks a user's "Create project" action for far longer than they'd wait. +const TEAM_PROJECTS_FETCH_TIMEOUT_MS = 8000; + export async function getAllTeamProjects(organizationId: string) { const { id: sessionId } = await userSessionService.get(); if (!sessionId) { @@ -74,7 +81,7 @@ export async function getAllTeamProjects(organizationId: string) { } console.log('[project] Fetching', organizationId); - const response = await fetchTeamProjects({ sessionId, organizationId }); + const response = await fetchTeamProjects({ sessionId, organizationId, timeout: TEAM_PROJECTS_FETCH_TIMEOUT_MS }); return response.data; }