MCPcopy Create free account
hub / github.com/tiann/hapi / extractErrorInfo

Function extractErrorInfo

cli/src/utils/errorUtils.ts:35–79  ·  view source on GitHub ↗
(error: unknown)

Source from the content-addressed store, hash-verified

33 * Extract structured error information from an unknown error
34 */
35export function extractErrorInfo(error: unknown): ErrorInfo {
36 const message = error instanceof Error ? error.message : 'Unknown error'
37 const messageLower = message.toLowerCase()
38
39 if (typeof error !== 'object' || error === null) {
40 return { message, messageLower, responseErrorText: '' }
41 }
42
43 const record = error as Record<string, unknown>
44 const axiosCode = typeof record.code === 'string' ? record.code : undefined
45 const response = typeof record.response === 'object' && record.response !== null
46 ? (record.response as Record<string, unknown>)
47 : undefined
48 const httpStatus = typeof response?.status === 'number' ? response.status : undefined
49 const responseData = response?.data
50 const responseError = typeof responseData === 'object' && responseData !== null
51 ? (responseData as Record<string, unknown>).error
52 : undefined
53 const responseErrorText = typeof responseError === 'string' ? responseError : ''
54
55 // Protocol version: prefer direct property (set by apiValidationError),
56 // fall back to axios response header (set by server on error responses)
57 let serverProtocolVersion: number | undefined
58 if (typeof record.serverProtocolVersion === 'number' && Number.isFinite(record.serverProtocolVersion)) {
59 serverProtocolVersion = record.serverProtocolVersion
60 } else {
61 const headers = typeof response?.headers === 'object' && response.headers !== null
62 ? (response.headers as Record<string, unknown>)
63 : undefined
64 const protocolHeader = headers?.['x-hapi-protocol-version']
65 if (typeof protocolHeader === 'string' && protocolHeader !== '') {
66 const pv = Number(protocolHeader)
67 if (Number.isFinite(pv)) serverProtocolVersion = pv
68 }
69 }
70
71 return {
72 message,
73 messageLower,
74 axiosCode,
75 httpStatus,
76 responseErrorText,
77 serverProtocolVersion
78 }
79}
80
81/**
82 * Check if an error is a retryable connection error

Callers 3

errorUtils.test.tsFile · 0.90
claude.tsFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected