import { OpenGeniApiError, type ToolGatewayCallResponse } from "@opengeni/sdk"; import { createSiteToolBridge as createSharedSiteToolBridge, type CreateSiteToolBridgeOptions, } from "@opengeni/sdk/site"; import type { PublishedHtmlArtifactToolBridge } from "../../artifacts"; import { ApiError, type AppApiHost } from "./app-api"; type NativeOptions = T extends CreateSiteToolBridgeOptions ? Omit & { callTool?: CreateSiteToolBridgeOptions["callTool"] | undefined; } : never; /** Native authentication only; Site routing, origin, filtering and version pinning are shared. */ export function createSiteToolBridge( api: AppApiHost, input: NativeOptions, ): PublishedHtmlArtifactToolBridge { return createSharedSiteToolBridge({ ...input, isCatalogStale: isCatalogStaleApiError, fetchResponse: (path, init) => api.requestResponse(path, init), callTool: input.callTool ?? (async ({ workspaceId, request: body, signal }) => api.request( `/v1/workspaces/${encodeURIComponent(workspaceId)}/tools/calls`, { method: "POST", signal, body: JSON.stringify(body), }, )), }); } export function isCatalogStaleApiError(error: unknown): boolean { return ( (error instanceof OpenGeniApiError || error instanceof ApiError) && error.status === 409 && (error.details?.code === "catalog_stale" || (error instanceof ApiError && error.code === "catalog_stale")) ); }