PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/avalanche/src/utils
Просмотр файла: fetchadapter.ts
import { AxiosRequestConfig, AxiosResponse, AxiosError } from "axios"
function createRequest(config: AxiosRequestConfig): Request {
const headers = new Headers(config.headers as Record<string, string>)
if (config.auth) {
const username = config.auth.username || ""
const password = config.auth.password
? encodeURIComponent(config.auth.password)
: ""
headers.set(
"Authorization",
`Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`
)
}
const method = config.method.toUpperCase()
const options: RequestInit = {
headers: headers,
method
}
if (method !== "GET" && method !== "HEAD") {
options.body = config.data
}
if (!!config.withCredentials) {
options.credentials = config.withCredentials ? "include" : "omit"
}
const fullPath = new URL(config.url, config.baseURL)
const params = new URLSearchParams(config.params)
const url = `${fullPath}${params}`
return new Request(url, options)
}
async function getResponse(request, config): Promise<AxiosResponse> {
let stageOne
try {
stageOne = await fetch(request)
} catch (e) {
const error: AxiosError = {
...new Error("Network Error"),
config,
request,
isAxiosError: true,
toJSON: () => error
}
return Promise.reject(error)
}
const response: AxiosResponse = {
status: stageOne.status,
statusText: stageOne.statusText,
headers: { ...stageOne.headers }, // make a copy of the headers
config: config,
request,
data: undefined // we set it below
}
if (stageOne.status >= 200 && stageOne.status !== 204) {
switch (config.responseType) {
case "arraybuffer":
response.data = await stageOne.arrayBuffer()
break
case "blob":
response.data = await stageOne.blob()
break
case "json":
response.data = await stageOne.json()
break
case "formData":
response.data = await stageOne.formData()
break
default:
response.data = await stageOne.text()
break
}
}
return Promise.resolve(response)
}
export async function fetchAdapter(
config: AxiosRequestConfig
): Promise<AxiosResponse> {
const request = createRequest(config)
const promiseChain = [getResponse(request, config)]
if (config.timeout && config.timeout > 0) {
promiseChain.push(
new Promise((res, reject) => {
setTimeout(() => {
const message = config.timeoutErrorMessage
? config.timeoutErrorMessage
: "timeout of " + config.timeout + "ms exceeded"
const error: AxiosError = {
...new Error(message),
config,
request,
code: "ECONNABORTED",
isAxiosError: true,
toJSON: () => error
}
reject(error)
}, config.timeout)
})
)
}
const response = await Promise.race(promiseChain)
return new Promise((resolve, reject) => {
if (response instanceof Error) {
reject(response)
} else {
if (
!response.status ||
!response.config.validateStatus ||
response.config.validateStatus(response.status)
) {
resolve(response)
} else {
const error: AxiosError = {
...new Error("Request failed with status code " + response.status),
config,
request,
code: response.status >= 500 ? "ERR_BAD_RESPONSE" : "ERR_BAD_REQUEST",
isAxiosError: true,
toJSON: () => error
}
reject(error)
}
}
})
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!