UNPKG

@lineai/bluebeam-api

Version:

Your unofficial library for Bluebeam API for human and AI developers. Provides TypeScript support, entity classes, and developer-friendly features. Perfect for AI coders, construction professionals, and document management tasks. Includes comprehensive JS

136 lines 11.4 kB
import { DEFAULT_BASE_URL } from './constants'; export const createHttpClient = (config) => { const baseUrl = config.base_url || DEFAULT_BASE_URL; const getHeaders = (endpoint, isFormData = false) => { const isOAuth = endpoint.startsWith('/oauth2/'); const baseHeaders = { client_id: config.client_id }; const contentTypeHeaders = isFormData ? { 'Content-Type': 'application/x-www-form-urlencoded' } : { 'Content-Type': 'application/json' }; const authHeaders = !isOAuth && config.access_token ? { Authorization: `Bearer ${config.access_token}` } : {}; return { ...baseHeaders, ...contentTypeHeaders, ...authHeaders }; }; const createApiError = (response, error) => { const baseError = { error: response?.statusText || (error instanceof Error ? error.message : 'Network error'), status: response?.status || 0, }; return baseError; }; const parseResponseHeaders = (response) => { const headerEntries = Array.from(response.headers.entries()); return Object.fromEntries(headerEntries); }; const parseResponseData = async (response) => { const contentType = response.headers.get('content-type'); if (contentType && contentType.includes('application/json')) { return response.json(); } return response.text(); }; const makeRequest = async (options) => { const { method, url, headers = {}, body } = options; const requestInit = { method, headers: { ...headers }, ...(body && { body }), }; try { const response = await fetch(url, requestInit); if (!response.ok) { const errorData = createApiError(response); try { const errorJson = (await response.json()); const errorObj = { ...errorData, ...errorJson }; const error = new Error(errorObj.error || `HTTP ${response.status}`); // eslint-disable-next-line functional/immutable-data Object.assign(error, errorObj); return Promise.reject(error); } catch { const error = new Error(errorData.error || `HTTP ${response.status}`); // eslint-disable-next-line functional/immutable-data Object.assign(error, errorData); return Promise.reject(error); } } const data = await parseResponseData(response); const responseHeaders = parseResponseHeaders(response); return { data, status: response.status, headers: responseHeaders, }; } catch (error) { if (error && typeof error === 'object' && 'status' in error) { return Promise.reject(error); } const apiError = createApiError({}, error); return Promise.reject(apiError); } }; const getBaseUrl = () => { return baseUrl; }; const prepareRequestBody = (data, isFormData) => { if (!data) return undefined; if (isFormData && data instanceof FormData) { return data; } if (isFormData) { const params = new URLSearchParams(); Object.entries(data).forEach(([key, value]) => { if (value !== undefined && value !== null) { params.append(key, value); } }); return params.toString(); } return JSON.stringify(data); }; return { async get(endpoint) { const baseUrl = getBaseUrl(); return makeRequest({ method: 'GET', url: `${baseUrl}${endpoint}`, headers: getHeaders(endpoint), }); }, async post(endpoint, data, isFormData = false) { const baseUrl = getBaseUrl(); const body = prepareRequestBody(data, isFormData); return makeRequest({ method: 'POST', url: `${baseUrl}${endpoint}`, headers: getHeaders(endpoint, isFormData), body, isFormData, }); }, async put(endpoint, data) { const baseUrl = getBaseUrl(); const body = data ? JSON.stringify(data) : undefined; return makeRequest({ method: 'PUT', url: `${baseUrl}${endpoint}`, headers: getHeaders(endpoint), body, }); }, async delete(endpoint) { const baseUrl = getBaseUrl(); return makeRequest({ method: 'DELETE', url: `${baseUrl}${endpoint}`, headers: getHeaders(endpoint), }); }, }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2h0dHAtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWdCL0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUFvQixFQUFFLEVBQUU7SUFDdkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQztJQUVwRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixRQUFnQixFQUNoQixVQUFVLEdBQUcsS0FBSyxFQUNNLEVBQUU7UUFDMUIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FBMkIsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sa0JBQWtCLEdBQTJCLFVBQVU7WUFDM0QsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLG1DQUFtQyxFQUFFO1lBQ3pELENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQzNDLE1BQU0sV0FBVyxHQUNmLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxZQUFZO1lBQzdCLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxVQUFVLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUNwRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVQsT0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUNuRSxDQUFDLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLFFBQWtCLEVBQUUsS0FBZSxFQUFZLEVBQUU7UUFDdkUsTUFBTSxTQUFTLEdBQWE7WUFDMUIsS0FBSyxFQUNILFFBQVEsRUFBRSxVQUFVO2dC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