UNPKG

@sap-ai-sdk/core

Version:

**This package is designed for internal usage and should not be consumed directly.**

65 lines 2.71 kB
import { ErrorWithCause, mergeIgnoreCase, removeLeadingSlashes, removeTrailingSlashes } from '@sap-cloud-sdk/util'; import { executeHttpRequest } from '@sap-cloud-sdk/http-client'; import { getAiCoreDestination } from './context.js'; /** * Executes a request to the AI Core service. * @param endpointOptions - The options to call an endpoint. * @param data - The input parameters for the request. * @param requestConfig - The request configuration. * @param destination - The destination to use for the request. * @returns The {@link HttpResponse} from the AI Core service. */ export async function executeRequest(endpointOptions, data, requestConfig, destination) { const aiCoreDestination = await getAiCoreDestination(destination); const { url, apiVersion, resourceGroup = 'default' } = endpointOptions; const mergedRequestConfig = { ...mergeWithDefaultRequestConfig(apiVersion, resourceGroup, requestConfig), data: JSON.stringify(data) }; try { const response = await executeHttpRequest({ ...aiCoreDestination, url: getTargetUrl(aiCoreDestination.url, url) }, mergedRequestConfig, { fetchCsrfToken: false }); return response; } catch (error) { throw new ErrorWithCause(`Request failed with status code ${error.status}.`, error); } } function mergeWithDefaultRequestConfig(apiVersion, resourceGroup, requestConfig) { const defaultConfig = { method: 'post', headers: { 'content-type': 'application/json', 'ai-resource-group': resourceGroup, 'ai-client-type': 'AI SDK JavaScript' }, params: apiVersion ? { 'api-version': apiVersion } : {} }; return { ...defaultConfig, ...requestConfig, headers: mergeIgnoreCase(defaultConfig.headers, requestConfig?.headers), params: mergeIgnoreCase(defaultConfig.params, requestConfig?.params) }; } /** * Get target url with endpoint path appended. * Append path `v2` if the url contains empty pathname `/`. * @param url - The url, e.g., `http://example.com` or `http://example.com:8000/abc`. * @param endpointPath - The path to the endpoint, e.g., `/some/endpoint`. * @returns Target url combining the url and endpoint path. * @internal */ export function getTargetUrl(url, endpointPath) { // Remove the last trailing slash url = removeTrailingSlashes(url); // Remove the first leading slashes endpointPath = removeLeadingSlashes(endpointPath); const urlObj = new URL(url); if (urlObj.pathname === '/') { return url + '/v2/' + endpointPath; } return url + '/' + endpointPath; } //# sourceMappingURL=http-client.js.map