* refactor: start refactor of pyro servers module-based class * refactor: finish modules * refactor: start on type checking + matching api * refactor: finish pyro servers composable refactor * refactor: pyro -> modrinth * fix: import not refactored * fix: broken power action enums * fix: remove pyro mentions * fix: lint * refactor: fix option pages * fix: error renames * remove empty pyro-servers.ts file --------- Signed-off-by: IMB11 <hendersoncal117@gmail.com> Co-authored-by: Prospector <prospectordev@gmail.com>
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import { FetchError } from 'ofetch'
|
|
import { V1ErrorInfo } from '../types'
|
|
|
|
export class ModrinthServerError extends Error {
|
|
constructor(
|
|
message: string,
|
|
public readonly statusCode?: number,
|
|
public readonly originalError?: Error,
|
|
public readonly module?: string,
|
|
public readonly v1Error?: V1ErrorInfo,
|
|
) {
|
|
let errorMessage = message
|
|
let method = 'GET'
|
|
let path = ''
|
|
|
|
if (originalError instanceof FetchError) {
|
|
const matches = message.match(/\[([A-Z]+)\]\s+"([^"]+)":/)
|
|
if (matches) {
|
|
method = matches[1]
|
|
path = matches[2].replace(/https?:\/\/[^/]+\/[^/]+\/v\d+\//, '')
|
|
}
|
|
|
|
const statusMessage = (() => {
|
|
if (!statusCode) return 'Unknown Error'
|
|
switch (statusCode) {
|
|
case 400:
|
|
return 'Bad Request'
|
|
case 401:
|
|
return 'Unauthorized'
|
|
case 403:
|
|
return 'Forbidden'
|
|
case 404:
|
|
return 'Not Found'
|
|
case 408:
|
|
return 'Request Timeout'
|
|
case 429:
|
|
return 'Too Many Requests'
|
|
case 500:
|
|
return 'Internal Server Error'
|
|
case 502:
|
|
return 'Bad Gateway'
|
|
case 503:
|
|
return 'Service Unavailable'
|
|
case 504:
|
|
return 'Gateway Timeout'
|
|
default:
|
|
return `HTTP ${statusCode}`
|
|
}
|
|
})()
|
|
|
|
errorMessage = `[${method}] ${statusMessage} (${statusCode}) while fetching ${path}${module ? ` in ${module}` : ''}`
|
|
} else {
|
|
errorMessage = `${message}${statusCode ? ` (${statusCode})` : ''}${module ? ` in ${module}` : ''}`
|
|
}
|
|
|
|
super(errorMessage)
|
|
this.name = 'PyroServersFetchError'
|
|
}
|
|
}
|