import config from './config.js'; import { generateKey, encryptData, decryptData, exportKey, importKey } from './crypto.js'; const textarea = document.getElementById('secretInput'); const shareButton = document.getElementById('shareButton'); const spinner = document.getElementById('spinner'); async function handleShare() { if (!textarea.value.trim()) return; try { spinner.classList.remove('hidden'); // Generate encryption key and encrypt data const key = await generateKey(); const encryptedData = await encryptData(textarea.value, key); // Send encrypted data to server const response = await fetch(`${config.API_BASE_URL}/secret`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ data: encryptedData }) }); const { key: secretKey } = await response.json(); const exportedKey = await exportKey(key); // Create sharing URL const combinedData = `${secretKey}::${exportedKey}`; const encodedData = btoa(combinedData); const shareUrl = `${window.location.origin}/${encodedData}`; textarea.value = shareUrl; } catch (error) { console.error('Sharing failed:', error); } finally { spinner.classList.add('hidden'); } } async function handlePageLoad() { const path = window.location.pathname.substring(1); if (!path) return; try { // Try to decode the URL const decodedData = atob(path); const [secretKey, encryptionKeyData] = decodedData.split('::'); if (!secretKey || !encryptionKeyData) return; spinner.classList.remove('hidden'); // Fetch the secret const response = await fetch(`${config.API_BASE_URL}/secret/${secretKey}`); if (response.status === 404) { textarea.value = "Oops, your secret could not be found. Have you already retrieved it?"; return; } const { data: encryptedData } = await response.json(); // Decrypt the data const key = await importKey(encryptionKeyData); const decryptedData = await decryptData(encryptedData, key); textarea.value = decryptedData; } catch (error) { console.error('Loading secret failed:', error); } finally { spinner.classList.add('hidden'); } } shareButton.addEventListener('click', handleShare); window.addEventListener('load', handlePageLoad);