From 8f4fbec41218e52154b9cc7c0dc6398fd66774cf Mon Sep 17 00:00:00 2001 From: Andrew Jiang Date: Thu, 10 Oct 2024 16:00:01 -0400 Subject: [PATCH] fix: threading api types bug (#1642) --- .../src/api-definition/endpoint-context.ts | 4 ++-- packages/fdr-sdk/src/api-definition/unwrap.ts | 19 ++++++++++++++----- .../api-reference/web-socket/WebSocket.tsx | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/fdr-sdk/src/api-definition/endpoint-context.ts b/packages/fdr-sdk/src/api-definition/endpoint-context.ts index 0bf86004ac..9e85ed6178 100644 --- a/packages/fdr-sdk/src/api-definition/endpoint-context.ts +++ b/packages/fdr-sdk/src/api-definition/endpoint-context.ts @@ -53,7 +53,7 @@ export function createWebSocketContext( channel, auth: channel.auth?.map((id) => api.auths[id])[0], globalHeaders: api.globalHeaders ?? [], - types: api.auths, + types: api.types, }; } @@ -77,6 +77,6 @@ export function createWebhookContext( return { node, webhook, - types: api.auths, + types: api.types, }; } diff --git a/packages/fdr-sdk/src/api-definition/unwrap.ts b/packages/fdr-sdk/src/api-definition/unwrap.ts index 7179b5432d..918d5d3f91 100644 --- a/packages/fdr-sdk/src/api-definition/unwrap.ts +++ b/packages/fdr-sdk/src/api-definition/unwrap.ts @@ -74,6 +74,7 @@ export function unwrapReference( const visitedTypeIds: Latest.TypeId[] = []; let internalTypeRef: TypeShapeOrReference | undefined = typeRef; let loop = 0; + let circularReference = false; while (internalTypeRef != null) { if (loop > LOOP_TOLERANCE) { // infinite loop detected @@ -94,6 +95,7 @@ export function unwrapReference( visitedTypeIds.push(internalTypeRef.id); // circular reference detected internalTypeRef = undefined; + circularReference = true; break; } @@ -102,12 +104,12 @@ export function unwrapReference( } const typeDef: Latest.TypeDefinition | undefined = types[internalTypeRef.id]; visitedTypeIds.push(internalTypeRef.id); + internalTypeRef = typeDef?.shape; if (typeDef != null) { if (typeDef.availability) { availabilities.push(typeDef.availability); } - internalTypeRef = typeDef.shape; if (typeDef.description != null) { descriptions.push(typeDef.description); } @@ -121,10 +123,17 @@ export function unwrapReference( if (internalTypeRef == null) { // Note: this should be a fatal error, but we're handling it gracefully for now - // eslint-disable-next-line no-console - console.error( - `Type reference is invalid. Falling back to unknown type.${visitedTypeIds.length > 0 ? ` path=[${visitedTypeIds.join(", ")}]` : ""}`, - ); + if (circularReference) { + // eslint-disable-next-line no-console + console.error( + `Circular reference detected. Falling back to unknown type. path=[${visitedTypeIds.join(", ")}]`, + ); + } else { + // eslint-disable-next-line no-console + console.error( + `Type reference is invalid. Falling back to unknown type. path=[${visitedTypeIds.join(", ")}]`, + ); + } } const toRet = { diff --git a/packages/ui/app/src/api-reference/web-socket/WebSocket.tsx b/packages/ui/app/src/api-reference/web-socket/WebSocket.tsx index af04c4534e..f1c8e7a2b6 100644 --- a/packages/ui/app/src/api-reference/web-socket/WebSocket.tsx +++ b/packages/ui/app/src/api-reference/web-socket/WebSocket.tsx @@ -385,7 +385,7 @@ function CardedSection({ } function flattenWebSocketShape( subscribeMessages: ApiDefinition.WebSocketMessage[], - types: Record, + types: Record, ) { return subscribeMessages.flatMap((message): ApiDefinition.UndiscriminatedUnionVariant[] => { const unwrapped = ApiDefinition.unwrapReference(message.body, types);