@realitydefender/realitydefender
Version:
SDK for the Reality Defender API for deepfake detection
111 lines (110 loc) • 3.54 kB
JavaScript
;
/**
* HTTP client implementation using Axios
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAxiosClient = createAxiosClient;
exports.createHttpClient = createHttpClient;
exports.handleAxiosError = handleAxiosError;
const axios_1 = __importDefault(require("axios"));
const constants_1 = require("../core/constants");
const errors_1 = require("../errors");
/**
* Creates an Axios HTTP client
* @param config Client configuration
* @returns Axios client instance
*/
function createAxiosClient(config) {
const baseUrl = config.baseUrl || constants_1.DEFAULT_BASE_URL;
const client = axios_1.default.create({
baseURL: baseUrl,
headers: {
'X-API-KEY': config.apiKey,
'Content-Type': 'application/json',
},
});
return {
client,
baseUrl,
};
}
/**
* Create an HTTP client for API communication
* @param config Client configuration
* @returns HTTP client instance
*/
function createHttpClient(config) {
const { client } = createAxiosClient(config);
return {
/**
* Send a GET request
*/
async get(path, params) {
try {
const response = await client.get(path, { params });
return response.data;
}
catch (error) {
throw handleAxiosError(error);
}
},
/**
* Send a POST request
*/
async post(path, data) {
try {
const response = await client.post(path, data);
return response.data;
}
catch (error) {
throw handleAxiosError(error);
}
},
/**
* Send a PUT request
*/
async put(url, data, contentType = 'application/octet-stream') {
try {
const config = {
headers: {
'Content-Type': contentType,
},
};
await axios_1.default.put(url, data, config);
}
catch (error) {
throw handleAxiosError(error);
}
},
};
}
/**
* Handle Axios errors and convert them to SDK errors
* @param error Error from Axios
* @returns SDK error
*/
function handleAxiosError(error) {
if (axios_1.default.isAxiosError(error)) {
const axiosError = error;
if (axiosError.response) {
const status = axiosError.response.status;
if (status === 401) {
return new errors_1.RealityDefenderError('Unauthorized: Invalid API key', 'unauthorized');
}
else if (status === 404) {
return new errors_1.RealityDefenderError(`Resource not found: ${axiosError.config?.url || ''}`, 'not_found');
}
else if (status === 415) {
return new errors_1.RealityDefenderError('Unsupported file type', 'invalid_file');
}
else if (status >= 500) {
return new errors_1.RealityDefenderError('Server error', 'server_error');
}
}
return new errors_1.RealityDefenderError(`API error: ${axiosError.message}`, 'unknown_error');
}
return new errors_1.RealityDefenderError(`Request failed: ${error.message}`, 'unknown_error');
}