57 lines
1.1 KiB
TypeScript
57 lines
1.1 KiB
TypeScript
export interface ErrorWithCode {
|
|
code: number
|
|
message: string
|
|
}
|
|
|
|
export interface ErrorWithData<T> extends ErrorWithCode {
|
|
data: T
|
|
}
|
|
|
|
export interface ErrorResponse<T> {
|
|
jsonrpc: '2.0'
|
|
id: string | number | null
|
|
result: null
|
|
error: ErrorWithData<T>
|
|
}
|
|
|
|
export interface RPCError<T> extends Error {
|
|
code: number
|
|
statusCode: number
|
|
response: ErrorResponse<T>
|
|
}
|
|
|
|
export function isRPCError(err: any): err is RPCError<unknown> {
|
|
return err.name === 'RPCError' &&
|
|
typeof err.message === 'string' &&
|
|
Object.prototype.hasOwnProperty.call(err, 'code') &&
|
|
Object.prototype.hasOwnProperty.call(err, 'response')
|
|
}
|
|
|
|
export function createError<T = null>(
|
|
error: ErrorWithCode,
|
|
info: {
|
|
id: number | string | null
|
|
data: T
|
|
statusCode: number
|
|
},
|
|
): RPCError<T> {
|
|
|
|
const err = new Error(error.message) as RPCError<T>
|
|
|
|
err.name = 'RPCError'
|
|
err.code = error.code
|
|
err.statusCode = info.statusCode
|
|
err.response = {
|
|
jsonrpc: '2.0',
|
|
id: info.id,
|
|
error: {
|
|
message: error.message,
|
|
code: error.code,
|
|
data: info.data,
|
|
},
|
|
result: null,
|
|
}
|
|
|
|
return err
|
|
}
|