@jerome-benoit/sap-ai-provider 4.6.4 → 4.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/dist/{chunk-VVJCWWDC.js → chunk-26WNWERS.js} +5 -5
  2. package/dist/chunk-26WNWERS.js.map +1 -0
  3. package/dist/{chunk-UZU24CQH.js → chunk-NXIKTWY3.js} +3 -3
  4. package/dist/{chunk-ORUTDXQO.js → chunk-OQIELEJP.js} +2 -2
  5. package/dist/{chunk-GLGLTUZM.js → chunk-SWBHSRPT.js} +21 -18
  6. package/dist/{chunk-GLGLTUZM.js.map → chunk-SWBHSRPT.js.map} +1 -1
  7. package/dist/{foundation-models-embedding-model-strategy-JTZUKIYM.js → foundation-models-embedding-model-strategy-FVVUOPNF.js} +4 -4
  8. package/dist/{foundation-models-language-model-strategy-NT5HVEM5.js → foundation-models-language-model-strategy-WNNDNZNZ.js} +4 -4
  9. package/dist/index.cjs +22 -19
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.js +5 -5
  12. package/dist/{orchestration-embedding-model-strategy-BBCIC45Q.js → orchestration-embedding-model-strategy-HV7ACKOY.js} +4 -4
  13. package/dist/{orchestration-language-model-strategy-YPDJAXBL.js → orchestration-language-model-strategy-GIWRWQNG.js} +4 -4
  14. package/package.json +1 -1
  15. package/dist/chunk-VVJCWWDC.js.map +0 -1
  16. /package/dist/{chunk-UZU24CQH.js.map → chunk-NXIKTWY3.js.map} +0 -0
  17. /package/dist/{chunk-ORUTDXQO.js.map → chunk-OQIELEJP.js.map} +0 -0
  18. /package/dist/{foundation-models-embedding-model-strategy-JTZUKIYM.js.map → foundation-models-embedding-model-strategy-FVVUOPNF.js.map} +0 -0
  19. /package/dist/{foundation-models-language-model-strategy-NT5HVEM5.js.map → foundation-models-language-model-strategy-WNNDNZNZ.js.map} +0 -0
  20. /package/dist/{orchestration-embedding-model-strategy-BBCIC45Q.js.map → orchestration-embedding-model-strategy-HV7ACKOY.js.map} +0 -0
  21. /package/dist/{orchestration-language-model-strategy-YPDJAXBL.js.map → orchestration-language-model-strategy-GIWRWQNG.js.map} +0 -0
@@ -9,7 +9,7 @@ import {
9
9
  createAISDKRequestBodySummary,
10
10
  createStreamTransformer,
11
11
  mapToolChoice
12
- } from "./chunk-ORUTDXQO.js";
12
+ } from "./chunk-OQIELEJP.js";
13
13
  import {
14
14
  VERSION,
15
15
  convertToAISDKError,
@@ -17,7 +17,7 @@ import {
17
17
  isPrefillError,
18
18
  normalizeHeaders,
19
19
  sapAILanguageModelProviderOptions
20
- } from "./chunk-GLGLTUZM.js";
20
+ } from "./chunk-SWBHSRPT.js";
21
21
 
22
22
  // src/base-language-model-strategy.ts
23
23
  import { parseProviderOptions } from "@ai-sdk/provider-utils";
@@ -61,7 +61,7 @@ var BaseLanguageModelStrategy = class {
61
61
  } catch (error) {
62
62
  if (this.shouldRetryWithoutPrefill(error, settings, options)) {
63
63
  const retryPrompt = this.stripTrailingAssistantMessages(options.prompt);
64
- if (retryPrompt.length > 0 && retryPrompt.at(-1)?.role === "user") {
64
+ if (retryPrompt.length > 0) {
65
65
  return this.doGenerate(config, settings, {
66
66
  ...options,
67
67
  prompt: retryPrompt
@@ -119,7 +119,7 @@ var BaseLanguageModelStrategy = class {
119
119
  } catch (error) {
120
120
  if (this.shouldRetryWithoutPrefill(error, settings, options)) {
121
121
  const retryPrompt = this.stripTrailingAssistantMessages(options.prompt);
122
- if (retryPrompt.length > 0 && retryPrompt.at(-1)?.role === "user") {
122
+ if (retryPrompt.length > 0) {
123
123
  return this.doStream(config, settings, {
124
124
  ...options,
125
125
  prompt: retryPrompt
@@ -232,4 +232,4 @@ var BaseLanguageModelStrategy = class {
232
232
  export {
233
233
  BaseLanguageModelStrategy
234
234
  };
235
- //# sourceMappingURL=chunk-VVJCWWDC.js.map
235
+ //# sourceMappingURL=chunk-26WNWERS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/base-language-model-strategy.ts"],"sourcesContent":["/** Base class for language model strategies using the Template Method pattern. */\nimport type {\n LanguageModelV3CallOptions,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport type { ChatMessage } from \"@sap-ai-sdk/orchestration\";\n\nimport { parseProviderOptions } from \"@ai-sdk/provider-utils\";\n\nimport type { SAPAIModelSettings } from \"./sap-ai-settings.js\";\nimport type { LanguageModelAPIStrategy, LanguageModelStrategyConfig } from \"./sap-ai-strategy.js\";\n\nimport { convertToSAPMessages } from \"./convert-to-sap-messages.js\";\nimport { convertToAISDKError, isPrefillError, normalizeHeaders } from \"./sap-ai-error.js\";\nimport { getProviderName, sapAILanguageModelProviderOptions } from \"./sap-ai-provider-options.js\";\nimport {\n buildGenerateResult,\n buildModelParams,\n createAISDKRequestBodySummary,\n createStreamTransformer,\n mapToolChoice,\n type ParamMapping,\n type SAPToolChoice,\n type SDKCitation,\n type SDKResponse,\n type SDKStreamChunk,\n type SDKTokenUsage,\n StreamIdGenerator,\n} from \"./strategy-utils.js\";\nimport { VERSION } from \"./version.js\";\n\n/**\n * Result of building common parts for a language model request.\n * @template TMessages - The message array type (e.g., `ChatMessage[]`, `AzureOpenAiChatCompletionRequestMessage[]`)\n * @template TToolChoice - The tool choice type (e.g., `SAPToolChoice`)\n * @internal\n */\nexport interface CommonBuildResult<TMessages extends unknown[] = unknown[], TToolChoice = unknown> {\n readonly messages: TMessages;\n readonly modelParams: Record<string, unknown>;\n readonly providerName: string;\n readonly sapOptions: Record<string, unknown> | undefined;\n readonly toolChoice: TToolChoice;\n readonly warnings: SharedV3Warning[];\n}\n\n/**\n * Stream response shape returned by executeStreamCall.\n * @internal\n */\nexport interface StreamCallResponse {\n readonly getCitations?: () => SDKCitation[] | undefined;\n readonly getFinishReason: () => null | string | undefined;\n readonly getIntermediateFailures?: () => undefined | unknown[];\n readonly getTokenUsage: () => null | SDKTokenUsage | undefined;\n readonly responseHeaders?: Record<string, string>;\n /** Server-provided completion ID extracted from _data, if available. */\n readonly responseId?: string;\n readonly stream: AsyncIterable<SDKStreamChunk>;\n}\n\n/**\n * Abstract base class for language model strategies using the Template Method pattern.\n * @template TClient - The SDK client type (e.g., AzureOpenAiChatClient, OrchestrationClient).\n * @template TRequest - The API request type (e.g., AzureOpenAiChatCompletionParameters).\n * @template TSettings - The model settings type extending SAPAIModelSettings.\n * @internal\n */\nexport abstract class BaseLanguageModelStrategy<\n TClient,\n TRequest,\n TSettings extends SAPAIModelSettings = SAPAIModelSettings,\n> implements LanguageModelAPIStrategy<TSettings> {\n /**\n * Common parameter mappings for language model APIs.\n * @internal\n */\n static readonly COMMON_PARAM_MAPPINGS: readonly ParamMapping[] = [\n { camelCaseKey: \"maxTokens\", optionKey: \"maxOutputTokens\", outputKey: \"max_tokens\" },\n { camelCaseKey: \"temperature\", optionKey: \"temperature\", outputKey: \"temperature\" },\n { camelCaseKey: \"topP\", optionKey: \"topP\", outputKey: \"top_p\" },\n {\n camelCaseKey: \"frequencyPenalty\",\n optionKey: \"frequencyPenalty\",\n outputKey: \"frequency_penalty\",\n },\n {\n camelCaseKey: \"presencePenalty\",\n optionKey: \"presencePenalty\",\n outputKey: \"presence_penalty\",\n },\n { camelCaseKey: \"seed\", optionKey: \"seed\", outputKey: \"seed\" },\n { camelCaseKey: \"parallel_tool_calls\", outputKey: \"parallel_tool_calls\" },\n ] as const;\n\n async doGenerate(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n try {\n const commonParts = await this.buildCommonParts(config, settings, options);\n const { request, warnings } = this.buildRequest(config, settings, options, commonParts);\n\n const client = this.createClient(config, settings, commonParts);\n\n const response = await this.executeApiCall(client, request, options.abortSignal ?? undefined);\n\n return buildGenerateResult({\n modelId: config.modelId,\n providerName: commonParts.providerName,\n requestBody: request,\n response,\n responseHeaders: normalizeHeaders(response.rawResponse.headers),\n version: VERSION,\n warnings: [...commonParts.warnings, ...warnings],\n });\n } catch (error) {\n if (this.shouldRetryWithoutPrefill(error, settings, options)) {\n const retryPrompt = this.stripTrailingAssistantMessages(options.prompt);\n if (retryPrompt.length > 0) {\n return this.doGenerate(config, settings, {\n ...options,\n prompt: retryPrompt,\n });\n }\n }\n throw convertToAISDKError(error, {\n operation: \"doGenerate\",\n requestBody: createAISDKRequestBodySummary(options),\n url: this.getUrl(),\n });\n }\n }\n\n async doStream(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n try {\n const commonParts = await this.buildCommonParts(config, settings, options);\n const { request, warnings } = this.buildRequest(config, settings, options, commonParts);\n\n const client = this.createClient(config, settings, commonParts);\n\n const streamResponse = await this.executeStreamCall(\n client,\n request,\n options.abortSignal ?? undefined,\n settings,\n );\n\n const idGenerator = new StreamIdGenerator();\n const responseId = streamResponse.responseId ?? idGenerator.generateResponseId();\n\n const streamWarnings = this.collectStreamWarnings(settings, commonParts.sapOptions);\n\n const transformedStream = createStreamTransformer({\n convertToAISDKError,\n idGenerator,\n includeRawChunks: options.includeRawChunks ?? false,\n modelId: config.modelId,\n options,\n providerName: commonParts.providerName,\n responseHeaders: streamResponse.responseHeaders,\n responseId,\n sdkStream: streamResponse.stream,\n streamResponseGetCitations: streamResponse.getCitations,\n streamResponseGetFinishReason: streamResponse.getFinishReason,\n streamResponseGetIntermediateFailures: streamResponse.getIntermediateFailures,\n streamResponseGetTokenUsage: streamResponse.getTokenUsage,\n url: this.getUrl(),\n version: VERSION,\n warnings: [...commonParts.warnings, ...warnings, ...streamWarnings],\n });\n\n return {\n request: {\n body: request,\n },\n response: {\n headers: streamResponse.responseHeaders,\n },\n stream: transformedStream,\n };\n } catch (error) {\n if (this.shouldRetryWithoutPrefill(error, settings, options)) {\n const retryPrompt = this.stripTrailingAssistantMessages(options.prompt);\n if (retryPrompt.length > 0) {\n return this.doStream(config, settings, {\n ...options,\n prompt: retryPrompt,\n });\n }\n }\n throw convertToAISDKError(error, {\n operation: \"doStream\",\n requestBody: createAISDKRequestBodySummary(options),\n url: this.getUrl(),\n });\n }\n }\n\n /**\n * Builds common parts shared between doGenerate and doStream.\n * @param config - Strategy configuration.\n * @param settings - Model settings.\n * @param options - AI SDK call options.\n * @returns Common build result with typed messages and tool choice.\n * @internal\n */\n protected async buildCommonParts(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): Promise<CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>> {\n const providerName = getProviderName(config.provider);\n\n const sapOptions = await parseProviderOptions({\n provider: providerName,\n providerOptions: options.providerOptions,\n schema: sapAILanguageModelProviderOptions,\n });\n\n const warnings: SharedV3Warning[] = [];\n\n const messages = convertToSAPMessages(options.prompt, {\n escapeTemplatePlaceholders: this.getEscapeTemplatePlaceholders(sapOptions, settings),\n includeReasoning: this.getIncludeReasoning(sapOptions, settings),\n });\n\n const { modelParams, warnings: paramWarnings } = buildModelParams({\n options,\n paramMappings: this.getParamMappings(),\n providerModelParams: sapOptions?.modelParams as Record<string, unknown> | undefined,\n settingsModelParams: settings.modelParams as Record<string, unknown> | undefined,\n });\n warnings.push(...paramWarnings);\n\n const toolChoice = mapToolChoice(options.toolChoice);\n\n return {\n messages,\n modelParams,\n providerName,\n sapOptions,\n toolChoice,\n warnings,\n };\n }\n\n /**\n * Builds the API-specific request body.\n * @param config - Strategy configuration.\n * @param settings - Model settings.\n * @param options - AI SDK call options.\n * @param commonParts - Common build result from base class.\n * @returns Request body and accumulated warnings.\n * @internal\n */\n protected abstract buildRequest(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n commonParts: CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>,\n ): { readonly request: TRequest; readonly warnings: SharedV3Warning[] };\n\n /**\n * Collects stream-specific warnings.\n * Override in subclasses to add API-specific streaming warnings.\n * @param _settings - Model settings (unused in base implementation).\n * @param _sapOptions - Provider options (unused in base implementation).\n * @returns Array of warnings for streaming operations.\n * @internal\n */\n protected collectStreamWarnings(\n _settings: TSettings,\n _sapOptions?: Record<string, unknown>,\n ): SharedV3Warning[] {\n return [];\n }\n\n /**\n * Creates the appropriate SDK client for this API.\n * @param config - Strategy configuration.\n * @param settings - Model settings.\n * @param commonParts - Common build result (messages, options, etc.).\n * @returns SDK client instance.\n * @internal\n */\n protected abstract createClient(\n config: LanguageModelStrategyConfig,\n settings: TSettings,\n commonParts: CommonBuildResult<ChatMessage[], SAPToolChoice | undefined>,\n ): TClient;\n\n /**\n * Executes the non-streaming API call.\n * @param client - SDK client instance.\n * @param request - Request body.\n * @param abortSignal - Optional abort signal.\n * @returns SDK response.\n * @internal\n */\n protected abstract executeApiCall(\n client: TClient,\n request: TRequest,\n abortSignal: AbortSignal | undefined,\n ): Promise<SDKResponse>;\n\n /**\n * Executes the streaming API call.\n * @param client - SDK client instance.\n * @param request - Request body.\n * @param abortSignal - Optional abort signal.\n * @param settings - Model settings for API-specific stream options.\n * @returns Stream response with accessors.\n * @internal\n */\n protected abstract executeStreamCall(\n client: TClient,\n request: TRequest,\n abortSignal: AbortSignal | undefined,\n settings: TSettings,\n ): Promise<StreamCallResponse>;\n\n /**\n * Returns whether to escape template placeholders for this API.\n * @param _sapOptions - Parsed provider options (unused in base implementation).\n * @param _settings - Model settings (unused in base implementation).\n * @returns false by default; Orchestration strategy overrides to return true.\n * @internal\n */\n protected getEscapeTemplatePlaceholders(\n _sapOptions: Record<string, unknown> | undefined,\n _settings: TSettings,\n ): boolean {\n return false;\n }\n\n /**\n * Returns whether to include reasoning in the response.\n * @param sapOptions - Parsed provider options.\n * @param settings - Model settings.\n * @returns Whether to include reasoning (checks sapOptions then settings, defaults to false).\n * @internal\n */\n protected getIncludeReasoning(\n sapOptions: Record<string, unknown> | undefined,\n settings: TSettings,\n ): boolean {\n return (\n (sapOptions?.includeReasoning as boolean | undefined) ??\n (settings as SAPAIModelSettings & { includeReasoning?: boolean }).includeReasoning ??\n false\n );\n }\n\n /**\n * Returns the parameter mappings specific to this API strategy.\n * @returns Array of parameter mappings.\n * @internal\n */\n protected abstract getParamMappings(): readonly ParamMapping[];\n\n /**\n * Returns the URL identifier for this API (used in error messages).\n * @returns URL string identifier.\n * @internal\n */\n protected abstract getUrl(): string;\n\n /**\n * Checks whether a prefill error should trigger a retry without trailing assistant messages.\n * @param error - Caught error from API call.\n * @param settings - Model settings.\n * @param options - Call options containing the prompt.\n * @returns Whether the request should be retried without trailing assistant messages.\n * @internal\n */\n private shouldRetryWithoutPrefill(\n error: unknown,\n settings: TSettings,\n options: LanguageModelV3CallOptions,\n ): boolean {\n const suppress =\n (settings as SAPAIModelSettings & { suppressPrefillErrors?: boolean })\n .suppressPrefillErrors ?? true;\n return (\n suppress &&\n isPrefillError(error) &&\n options.prompt.length > 0 &&\n options.prompt.at(-1)?.role === \"assistant\"\n );\n }\n\n /**\n * Strips all trailing assistant messages from a prompt for prefill retry.\n * Removes all (not just the last) to guarantee the retry cannot re-trigger.\n * @param prompt - Original prompt array.\n * @returns Prompt with trailing assistant messages removed.\n * @internal\n */\n private stripTrailingAssistantMessages(\n prompt: LanguageModelV3CallOptions[\"prompt\"],\n ): LanguageModelV3CallOptions[\"prompt\"] {\n let end = prompt.length;\n while (end > 0 && prompt[end - 1]?.role === \"assistant\") {\n end--;\n }\n return prompt.slice(0, end);\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,12 +2,12 @@ import {createRequire as __createRequire} from 'module';var require=__createRequ
2
2
  import {
3
3
  buildEmbeddingResult,
4
4
  prepareEmbeddingCall
5
- } from "./chunk-ORUTDXQO.js";
5
+ } from "./chunk-OQIELEJP.js";
6
6
  import {
7
7
  VERSION,
8
8
  convertToAISDKError,
9
9
  deepMerge
10
- } from "./chunk-GLGLTUZM.js";
10
+ } from "./chunk-SWBHSRPT.js";
11
11
 
12
12
  // src/base-embedding-model-strategy.ts
13
13
  var BaseEmbeddingModelStrategy = class {
@@ -58,4 +58,4 @@ var BaseEmbeddingModelStrategy = class {
58
58
  export {
59
59
  BaseEmbeddingModelStrategy
60
60
  };
61
- //# sourceMappingURL=chunk-UZU24CQH.js.map
61
+ //# sourceMappingURL=chunk-NXIKTWY3.js.map
@@ -4,7 +4,7 @@ import {
4
4
  getProviderName,
5
5
  sapAIEmbeddingProviderOptions,
6
6
  validateModelParamsWithWarnings
7
- } from "./chunk-GLGLTUZM.js";
7
+ } from "./chunk-SWBHSRPT.js";
8
8
 
9
9
  // src/strategy-utils.ts
10
10
  import { TooManyEmbeddingValuesForCallError } from "@ai-sdk/provider";
@@ -682,4 +682,4 @@ export {
682
682
  normalizeEmbedding,
683
683
  prepareEmbeddingCall
684
684
  };
685
- //# sourceMappingURL=chunk-ORUTDXQO.js.map
685
+ //# sourceMappingURL=chunk-OQIELEJP.js.map
@@ -30051,7 +30051,7 @@ var UnsupportedFeatureError = class extends Error {
30051
30051
  };
30052
30052
  function convertSAPErrorToAPICallError(errorResponse, context) {
30053
30053
  const { code, location, message, requestId } = extractErrorFields(errorResponse);
30054
- const statusCode = getStatusCodeFromSAPError(code);
30054
+ const statusCode = getStatusCodeFromSAPError(code, context?.httpStatusCode);
30055
30055
  const responseBody = JSON.stringify({
30056
30056
  error: {
30057
30057
  code,
@@ -30112,10 +30112,11 @@ function convertToAISDKError(error, context) {
30112
30112
  return error;
30113
30113
  }
30114
30114
  const rootError = getRootError(error);
30115
- const errorResponse = findOrchestrationErrorResponse(error);
30115
+ const errorResponse = findStructuredErrorResponse(error);
30116
30116
  if (errorResponse) {
30117
30117
  return convertSAPErrorToAPICallError(errorResponse, {
30118
30118
  ...context,
30119
+ httpStatusCode: getAxiosError(error)?.response?.status,
30119
30120
  responseHeaders: context?.responseHeaders ?? getAxiosResponseHeaders(error)
30120
30121
  });
30121
30122
  }
@@ -30276,7 +30277,7 @@ function extractModelIdentifier(message, location) {
30276
30277
  return void 0;
30277
30278
  }
30278
30279
  function extractSAPErrorMessage(error) {
30279
- const errorResponse = findOrchestrationErrorResponse(error);
30280
+ const errorResponse = findStructuredErrorResponse(error);
30280
30281
  if (errorResponse) {
30281
30282
  return extractErrorFields(errorResponse).message;
30282
30283
  }
@@ -30286,18 +30287,18 @@ function extractSAPErrorMessage(error) {
30286
30287
  }
30287
30288
  return typeof rootError === "string" ? rootError : void 0;
30288
30289
  }
30289
- function findOrchestrationErrorResponse(error) {
30290
+ function findStructuredErrorResponse(error) {
30290
30291
  const rootError = getRootError(error);
30291
- if (isOrchestrationErrorResponse(rootError)) {
30292
+ if (isStructuredErrorResponse(rootError)) {
30292
30293
  return rootError;
30293
30294
  }
30294
30295
  const axiosData = getAxiosError(error)?.response?.data;
30295
- if (axiosData && isOrchestrationErrorResponse(axiosData)) {
30296
+ if (axiosData && isStructuredErrorResponse(axiosData)) {
30296
30297
  return axiosData;
30297
30298
  }
30298
30299
  if (rootError instanceof Error) {
30299
30300
  const parsed = tryExtractSAPErrorFromMessage(rootError.message);
30300
- if (parsed && isOrchestrationErrorResponse(parsed)) {
30301
+ if (parsed && isStructuredErrorResponse(parsed)) {
30301
30302
  return parsed;
30302
30303
  }
30303
30304
  }
@@ -30324,11 +30325,13 @@ function getAxiosResponseHeaders(error) {
30324
30325
  function getRootError(error) {
30325
30326
  return error instanceof Error && (0, import_util.isErrorWithCause)(error) ? error.rootCause : error;
30326
30327
  }
30327
- function getStatusCodeFromSAPError(code) {
30328
- if (!code) return HTTP_STATUS.INTERNAL_ERROR;
30329
- if (code >= 100 && code < 600) {
30328
+ function getStatusCodeFromSAPError(code, httpStatusCode) {
30329
+ if (code && code >= 100 && code < 600) {
30330
30330
  return code;
30331
30331
  }
30332
+ if (httpStatusCode && httpStatusCode >= 100 && httpStatusCode < 600) {
30333
+ return httpStatusCode;
30334
+ }
30332
30335
  return HTTP_STATUS.INTERNAL_ERROR;
30333
30336
  }
30334
30337
  function isAbortError(error) {
@@ -30340,7 +30343,10 @@ function isAbortError(error) {
30340
30343
  }
30341
30344
  return false;
30342
30345
  }
30343
- function isOrchestrationErrorResponse(error) {
30346
+ function isRetryable(statusCode) {
30347
+ return statusCode === HTTP_STATUS.REQUEST_TIMEOUT || statusCode === HTTP_STATUS.CONFLICT || statusCode === HTTP_STATUS.RATE_LIMIT || statusCode >= HTTP_STATUS.INTERNAL_ERROR && statusCode < 600;
30348
+ }
30349
+ function isStructuredErrorResponse(error) {
30344
30350
  if (error === null || typeof error !== "object" || !("error" in error)) {
30345
30351
  return false;
30346
30352
  }
@@ -30356,7 +30362,7 @@ function isOrchestrationErrorResponse(error) {
30356
30362
  if (typeof errorEntry.message !== "string") {
30357
30363
  return false;
30358
30364
  }
30359
- if ("code" in entry && typeof errorEntry.code !== "number") {
30365
+ if ("code" in entry && errorEntry.code != null && typeof errorEntry.code !== "number") {
30360
30366
  return false;
30361
30367
  }
30362
30368
  return true;
@@ -30369,14 +30375,11 @@ function isOrchestrationErrorResponse(error) {
30369
30375
  if (typeof errorObj.message !== "string") {
30370
30376
  return false;
30371
30377
  }
30372
- if ("code" in innerError && typeof errorObj.code !== "number") {
30378
+ if ("code" in innerError && errorObj.code != null && typeof errorObj.code !== "number") {
30373
30379
  return false;
30374
30380
  }
30375
30381
  return true;
30376
30382
  }
30377
- function isRetryable(statusCode) {
30378
- return statusCode === HTTP_STATUS.REQUEST_TIMEOUT || statusCode === HTTP_STATUS.CONFLICT || statusCode === HTTP_STATUS.RATE_LIMIT || statusCode >= HTTP_STATUS.INTERNAL_ERROR && statusCode < 600;
30379
- }
30380
30383
  function serializeAxiosResponseData(data, maxLength = 2e3) {
30381
30384
  if (data === void 0) return void 0;
30382
30385
  let serialized;
@@ -30412,7 +30415,7 @@ function tryExtractSAPErrorFromMessage(message) {
30412
30415
  }
30413
30416
 
30414
30417
  // src/version.ts
30415
- var VERSION = true ? "4.6.4" : "0.0.0-test";
30418
+ var VERSION = true ? "4.6.6" : "0.0.0-test";
30416
30419
 
30417
30420
  export {
30418
30421
  __toESM,
@@ -30466,4 +30469,4 @@ mime-types/index.js:
30466
30469
  axios/dist/node/axios.cjs:
30467
30470
  (*! Axios v1.14.0 Copyright (c) 2026 Matt Zabriskie and contributors *)
30468
30471
  */
30469
- //# sourceMappingURL=chunk-GLGLTUZM.js.map
30472
+ //# sourceMappingURL=chunk-SWBHSRPT.js.map