import axios, { AxiosResponse } from 'axios'; export async function storeData(servers: string[], key: string, value: Blob, ttl: number | null): Promise { 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 { 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 | null> { const res: Record = {}; 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; }