UNPKG

@itwin/itwins-client

Version:

iTwins client for the iTwin platform

158 lines 5.67 kB
import axios from "axios"; export class BaseClient { constructor(url) { this._baseUrl = "https://api.bentley.com/itwins"; if (url !== undefined) { this._baseUrl = url; } else { const urlPrefix = process.env.IMJS_URL_PREFIX; if (urlPrefix) { const baseUrl = new URL(this._baseUrl); baseUrl.hostname = urlPrefix + baseUrl.hostname; this._baseUrl = baseUrl.href; } } } /** * Sends a basic API request * @param accessToken The client access token string * @param method The method type of the request (ex. GET, POST, DELETE, etc.) * @param url The url of the request * @param data (Optional) The payload of the request * @param property (Optional) The target property (ex. iTwins, repositories, etc.) * @param headers (Optional) Extra request headers. */ async sendGenericAPIRequest(accessToken, method, url, data, property, headers) { // TODO: Change any response const requestOptions = this.getRequestOptions(accessToken, method, url, data, headers); try { const response = await axios(requestOptions); return { status: response.status, data: response.data.error || response.data === "" ? undefined : property ? response.data[property] : response.data, error: response.data.error, }; } catch (err) { return { status: 500, error: { code: "InternalServerError", message: "An internal exception happened while calling iTwins Service", }, }; } } /** * Build the request methods, headers, and other options * @param accessTokenString The client access token string * @param method The method type of the request (ex. GET, POST, DELETE, etc.) * @param url The url of the request * @param data (Optional) The payload of the request * @param headers (Optional) Extra request headers. */ getRequestOptions(accessTokenString, method, url, data, headers = {}) { return { method, url, data, headers: { ...headers, "authorization": accessTokenString, "content-type": "application/json", }, validateStatus(status) { return status < 500; // Resolve only if the status code is less than 500 }, }; } /** * Build a query to be appended to a URL * @param queryArg Object container queryable properties * @returns query string with AccessControlQueryArg applied, which should be appended to a url */ getQueryStringArgBase(queryArg, subClass) { let queryString = ""; if (queryArg && queryArg.subClass) { queryString += `subClass=${queryArg.subClass}`; } else if (subClass) { queryString += `subClass=${subClass}`; } if (!queryArg) { return queryString; } if (queryArg.includeInactive) { queryString += `&includeInactive=${queryArg.includeInactive}`; } if (queryArg.top) { queryString += `&$top=${queryArg.top}`; } if (queryArg.skip) { queryString += `&$skip=${queryArg.skip}`; } if (queryArg.status) { queryString += `&status=${queryArg.status}`; } if (queryArg.type) { queryString += `&type=${queryArg.type}`; } // trim & from start of string queryString.replace(/^&+/, ""); return queryString; } /** * Build a query to be appended to a URL * @param queryArg Object container queryable properties * @returns query string with AccessControlQueryArg applied, which should be appended to a url */ getQueryStringArg(queryArg, subClass) { let queryString = this.getQueryStringArgBase(queryArg, subClass); if (!queryArg) { return queryString; } if (queryArg.search) { queryString += `&$search=${queryArg.search}`; } if (queryArg.displayName) { queryString += `&displayName=${queryArg.displayName}`; } if (queryArg.number) { queryString += `&number=${queryArg.number}`; } if (queryArg.parentId) { queryString += `&parentId=${queryArg.parentId}`; } if (queryArg.iTwinAccountId) { queryString += `&iTwinAccountId=${queryArg.iTwinAccountId}`; } // trim & from start of string queryString.replace(/^&+/, ""); return queryString; } /** * Build a query to be appended to the URL for iTwin Repositories * @param queryArg Object container queryable properties * @returns query string with RepositoriesQueryArg applied, which should be appended to a url */ getRepositoryQueryString(queryArg) { if (!queryArg) return ""; let queryString = ""; if (queryArg.class) { queryString += `class=${queryArg.class}`; } if (queryArg.subClass) { queryString += `&subClass=${queryArg.subClass}`; } // trim & from start of string queryString.replace(/^&+/, ""); return queryString; } } //# sourceMappingURL=BaseClient.js.map