Skip to main content
Glama

mcp-google-sheets

client.ts2.76 kB
import { HttpMethod, httpClient } from '@activepieces/pieces-common'; const BASE_URL = 'https://api.edenai.run/v2'; const DEFAULT_TIMEOUT = 20000; const MAX_RETRIES = 3; const RETRY_BACKOFF = 1000; function logEdenAiError(error: any, context: Record<string, any>) { const log = { error: error?.message || error, status: error?.response?.status, body: error?.response?.body, context, }; if (typeof console !== 'undefined' && console.error) { console.error('Eden AI API Error:', JSON.stringify(log)); } } function parseEdenAiError(error: any): string { if (error?.response?.body?.error) return error.response.body.error; if (error?.response?.body?.message) return error.response.body.message; if (error?.message) return error.message; return String(error); } export async function edenAiApiCall<T = any>({ apiKey, method, resourceUri, body, query, headers: customHeaders = {}, timeout = DEFAULT_TIMEOUT, maxRetries = MAX_RETRIES, }: { apiKey: string; method: HttpMethod; resourceUri: string; body?: unknown; query?: Record<string, string | number | boolean>; headers?: Record<string, string>; timeout?: number; maxRetries?: number; }): Promise<T> { if (!apiKey || typeof apiKey !== 'string' || apiKey.trim().length < 10) { throw new Error('Missing or invalid Eden AI API key. Please check your credentials.'); } const headers: Record<string, string> = { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', ...customHeaders, }; const url = `${BASE_URL}${resourceUri}`; let lastError; const stringQueryParams = query ? Object.fromEntries(Object.entries(query).map(([k, v]) => [k, String(v)])) : undefined; for (let attempt = 0; attempt < maxRetries; ++attempt) { try { const response = await httpClient.sendRequest<T>({ method, url, headers, body, queryParams: stringQueryParams, timeout, }); if (response.status < 200 || response.status >= 300) { const err = new Error(`Eden AI API error: ${response.status} ${JSON.stringify(response.body)}`); (err as any).response = response; throw err; } return response.body; } catch (err: any) { lastError = err; logEdenAiError(err, { url, method, body, query, attempt }); const status = err?.response?.status; if (status === 429 || (status && status >= 500 && status < 600)) { if (attempt < maxRetries - 1) { const delay = RETRY_BACKOFF * Math.pow(2, attempt); await new Promise(res => setTimeout(res, delay)); continue; } } break; } } throw new Error(parseEdenAiError(lastError)); }

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/activepieces/activepieces'

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