60 lines
2.0 KiB
JavaScript
60 lines
2.0 KiB
JavaScript
import { ValidationError } from "./types/errors.js";
|
|
import { DEFAULT_CONFIG, ENDPOINTS } from "./constants.js";
|
|
import { handleResponse, toBlob } from "./utils.js";
|
|
export class CaballoClient {
|
|
config;
|
|
constructor(config) {
|
|
this.config = {
|
|
...DEFAULT_CONFIG,
|
|
...config,
|
|
};
|
|
if (!this.config.baseUrl) {
|
|
throw new Error("baseUrl is required");
|
|
}
|
|
}
|
|
async validateXml(content) {
|
|
try {
|
|
const blob = toBlob(content);
|
|
if (blob.size === 0) {
|
|
throw new ValidationError("Empty file content");
|
|
}
|
|
const formData = new FormData();
|
|
formData.append("file", blob);
|
|
const response = await fetch(`${this.config.baseUrl}${ENDPOINTS.validateXml}`, {
|
|
method: "POST",
|
|
body: formData,
|
|
signal: AbortSignal.timeout(this.config.timeout),
|
|
});
|
|
return handleResponse(response);
|
|
}
|
|
catch (error) {
|
|
if (error instanceof TypeError) {
|
|
throw new ValidationError("Network error or invalid URL");
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
async validatePdf(content) {
|
|
try {
|
|
const blob = toBlob(content);
|
|
if (blob.size === 0) {
|
|
throw new ValidationError("Empty file content");
|
|
}
|
|
const formData = new FormData();
|
|
formData.append("file", blob);
|
|
const response = await fetch(`${this.config.baseUrl}${ENDPOINTS.validatePdf}`, {
|
|
method: "POST",
|
|
body: formData,
|
|
signal: AbortSignal.timeout(this.config.timeout),
|
|
});
|
|
return handleResponse(response);
|
|
}
|
|
catch (error) {
|
|
if (error instanceof TypeError) {
|
|
throw new ValidationError("Network error or invalid URL");
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
}
|