@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.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createHttpClient = void 0;
const constants_1 = require("./constants");
const createHttpClient = (config) => {
const baseUrl = config.base_url || constants_1.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 Object.assign(Object.assign(Object.assign({}, baseHeaders), contentTypeHeaders), authHeaders);
};
const createApiError = (response, error) => {
const baseError = {
error: (response === null || response === void 0 ? void 0 : response.statusText) ||
(error instanceof Error ? error.message : 'Network error'),
status: (response === null || response === void 0 ? void 0 : 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 = Object.assign({ method, headers: Object.assign({}, 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 = Object.assign(Object.assign({}, 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 (_a) {
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),
});
},
};
};
exports.createHttpClient = createHttpClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2h0dHAtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDJDQUErQztBQWdCeEMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQW9CLEVBQUUsRUFBRTtJQUN2RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLDRCQUFnQixDQUFDO0lBRXBELE1BQU0sVUFBVSxHQUFHLENBQ2pCLFFBQWdCLEVBQ2hCLFVBQVUsR0FBRyxLQUFLLEVBQ00sRUFBRTtRQUMxQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sV0FBVyxHQUEyQixFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUUsTUFBTSxrQkFBa0IsR0FBMkIsVUFBVTtZQUMzRCxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsbUNBQW1DLEVBQUU7WUFDekQsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQ2YsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLFlBQVk7WUFDN0IsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFVCxxREFBWSxXQUFXLEdBQUssa0JBQWtCLEdBQUssV0FBVyxFQUFHO0lBQ25FLENBQUMsQ0FBQztJQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsUUFBa0IsRUFBRSxLQUFlLEVBQVksRUFBRTtRQUN2RSxNQUFNLFNBQVMsR0FBYTtZQUMxQixLQUFLLEVBQ0gsQ0FBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsVUFBVTtnQkFDcEIsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMs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