82 lines
2.5 KiB
TypeScript
82 lines
2.5 KiB
TypeScript
import axios, { AxiosResponse } from 'axios';
|
|
|
|
export async function storeData(servers: string[], key: string, value: Blob, ttl: number | null): Promise<AxiosResponse | null> {
|
|
for (const server of servers) {
|
|
try {
|
|
// Append key and ttl as query parameters
|
|
const url = new URL(`${server}/store`);
|
|
url.searchParams.append('key', key);
|
|
if (ttl !== null) {
|
|
url.searchParams.append('ttl', ttl.toString());
|
|
}
|
|
|
|
// Send the encrypted ArrayBuffer as the raw request body.
|
|
const response = await axios.post(url.toString(), value, {
|
|
headers: {
|
|
'Content-Type': 'application/octet-stream'
|
|
},
|
|
});
|
|
console.log('Data stored successfully:', key);
|
|
if (response.status !== 200) {
|
|
console.error('Received response status', response.status);
|
|
continue;
|
|
}
|
|
return response;
|
|
} catch (error) {
|
|
if (axios.isAxiosError(error) && error.response?.status === 409) {
|
|
return null;
|
|
}
|
|
console.error('Error storing data:', error);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export async function retrieveData(servers: string[], key: string): Promise<ArrayBuffer | null> {
|
|
for (const server of servers) {
|
|
try {
|
|
// When fetching the data from the server:
|
|
const response = await axios.get(`${server}/retrieve/${key}`, {
|
|
responseType: 'arraybuffer'
|
|
});
|
|
if (response.status !== 200) {
|
|
console.error('Received response status', response.status);
|
|
continue;
|
|
}
|
|
// console.log('Retrieved data:', response.data);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('Error retrieving data:', error);
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
|
|
interface TestResponse {
|
|
key: string;
|
|
value: boolean;
|
|
}
|
|
|
|
export async function testData(servers: string[], key: string): Promise<Record<string, boolean | null> | null> {
|
|
const res: Record<string, boolean | null> = {};
|
|
for (const server of servers) {
|
|
res[server] = null;
|
|
try {
|
|
const response = await axios.get(`${server}/test/${key}`);
|
|
if (response.status !== 200) {
|
|
console.error(`${server}: Test response status: ${response.status}`);
|
|
continue;
|
|
}
|
|
|
|
const data: TestResponse = response.data;
|
|
|
|
res[server] = data.value;
|
|
} catch (error) {
|
|
console.error('Error retrieving data:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return res;
|
|
}
|