Skip to main content
Glama
openapi-direct.ts2.07 kB
import { Metadata } from "@superglue/shared"; import * as yaml from 'js-yaml'; import { logMessage } from "../../utils/logs.js"; import { isValidOpenApiSpec } from '../documentation-utils.js'; import { OpenApiFetchingStrategy } from '../types.js'; export class DirectOpenApiStrategy implements OpenApiFetchingStrategy { async tryFetch(responseData: any, openApiUrl: string, metadata: Metadata): Promise<string | null> { try { let parsedData: any = null; if (typeof responseData === 'object' && responseData !== null) { parsedData = responseData; } else if (typeof responseData === 'string') { const trimmedData = responseData.trim(); try { parsedData = JSON.parse(trimmedData); // if parsedData is empty, throw an error to try yaml instead if ( !parsedData || parsedData === null || parsedData === undefined || typeof parsedData !== 'object' || (Array.isArray(parsedData) && parsedData.length === 0) || (!Array.isArray(parsedData) && Object.keys(parsedData).length === 0) ) { throw new Error('Parsed data is empty'); } } catch { try { parsedData = yaml.load(trimmedData) as any; } catch (yamlError) { logMessage('debug', `DirectOpenApiStrategy: Failed to parse content as JSON or YAML from ${openApiUrl}`, metadata); return null; } } } else { return null; } if (!isValidOpenApiSpec(parsedData)) { logMessage('debug', `DirectOpenApiStrategy: Parsed data is not a valid OpenAPI spec for ${openApiUrl}`, metadata); return null; } logMessage('info', `Successfully found valid OpenAPI spec at ${openApiUrl}`, metadata); return JSON.stringify(parsedData, null, 2); } catch (error) { logMessage('warn', `DirectOpenApiStrategy: Unexpected error processing ${openApiUrl}: ${error?.message}`, metadata); return null; } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/superglue-ai/superglue'

If you have feedback or need assistance with the MCP directory API, please join our Discord server