UNPKG

@xlink-network/xlink-sdk

Version:
101 lines (99 loc) 2.63 kB
import { backendAPIPrefix } from "./chunk-KW3PGVXY.mjs"; // src/utils/apiHelpers.ts async function requestAPI(sdkContext, options) { const queryPairs = Object.entries(options.query ?? {}); const querystring = new URLSearchParams(queryPairs).toString(); const res = await fetch( `${backendAPIPrefix}${options.path}`.replace(/(\w)\/\//g, "$1/") + (querystring ? "?" + querystring : ""), { method: options.method, headers: { "Content-Type": "application/json", "X-Xlink-Runtime-Env": sdkContext.backendAPI.runtimeEnv }, body: JSON.stringify(options.body) } ); return readAPIResponse(res); } var readAPIResponse = async (resp) => { if (resp.status >= 200 && resp.status < 300) { return resp.json(); } if (resp.status === 429) { throw new TooManyRequestsError(resp); } const respText = await resp.text(); let respData = null; try { respData = JSON.parse(respText); } catch { respData = respText; } const thirdPartyError = ThirdPartyRequestError.fromSerializedError(respData); if (thirdPartyError != null) { throw thirdPartyError; } throw new RequestError( { url: resp.url, status: resp.status, body: respText }, { cause: respData } ); }; var TooManyRequestsError = class extends Error { requestUrl; retryAfter; constructor(resp, options) { const _retryAfter = Number(resp.headers.get("Retry-After")); const retryAfter = Number.isNaN(_retryAfter) ? void 0 : _retryAfter; let errMsg = `Too many requests to SDK API server`; if (retryAfter != null) { errMsg += `; retry after ${retryAfter} seconds`; } super(errMsg, { ...options, cause: options?.cause ?? resp }); this.requestUrl = resp.url; this.retryAfter = retryAfter; } }; var ThirdPartyRequestError = class _ThirdPartyRequestError extends Error { constructor(serviceName, options) { super(`Request service ${serviceName} failed`, options); this.serviceName = serviceName; } isThirdPartyRequestError = true; static fromSerializedError(err) { if (!err.isThirdPartyRequestError) return; return new _ThirdPartyRequestError(err.serviceName, { cause: err.cause }); } }; var RequestError = class extends Error { constructor(response, options) { super( `Request failed: url: ${response.url} detail: ${response.body}`, options ); this.response = response; } }; export { requestAPI, readAPIResponse, TooManyRequestsError, ThirdPartyRequestError, RequestError }; //# sourceMappingURL=chunk-3OBVOHLZ.mjs.map