Spaces:
Sleeping
Sleeping
Download src/services/api.js from goat1242/pixelroast: direct link, hf CLI and curl.
- Browser
- Download file 4.13 kB
-
https://huggingface.co/spaces/goat1242/pixelroast/resolve/main/src/services/api.js
- Command line
-
hf download hf://spaces/goat1242/pixelroast/src/services/api.js
-
curl -L -o api.js https://huggingface.co/spaces/goat1242/pixelroast/resolve/main/src/services/api.js
4.13 kB
| // =========================== | |
| // PixelRoast API Service | |
| // =========================== | |
| const API_URL = import.meta.env.VITE_API_URL || 'https://goat1242-pixelroast-app.hf.space'; | |
| /** | |
| * Roast a website | |
| * @param {string} url - Website URL to roast | |
| * @param {string} personality - gen_z, boomer, or ramsay | |
| * @param {string|null} token - Optional auth token for premium users | |
| */ | |
| export const roastWebsite = async (url, personality = 'gen_z', token = null) => { | |
| const headers = { 'Content-Type': 'application/json' }; | |
| if (token) { | |
| headers['Authorization'] = `Bearer ${token}`; | |
| } | |
| const response = await fetch(`${API_URL}/roast`, { | |
| method: 'POST', | |
| headers, | |
| body: JSON.stringify({ | |
| url, | |
| personality | |
| }) | |
| }); | |
| if (!response.ok) { | |
| const error = await response.json(); | |
| throw new Error(error.detail || 'Failed to roast website'); | |
| } | |
| return response.json(); | |
| }; | |
| /** | |
| * Detect if a website is AI-generated | |
| * @param {string} url - Website URL to analyze | |
| * @param {string|null} token - Optional auth token | |
| */ | |
| export const detectAI = async (url, token = null) => { | |
| const headers = { 'Content-Type': 'application/json' }; | |
| if (token) { | |
| headers['Authorization'] = `Bearer ${token}`; | |
| } | |
| const response = await fetch(`${API_URL}/detect-ai`, { | |
| method: 'POST', | |
| headers, | |
| body: JSON.stringify({ url }) | |
| }); | |
| if (!response.ok) { | |
| const error = await response.json(); | |
| throw new Error(error.detail || 'Failed to detect AI'); | |
| } | |
| return response.json(); | |
| }; | |
| /** | |
| * Send a chat message to the Clapback Engine | |
| * @param {string} message - User's message | |
| * @param {Array} history - Previous messages [{role, content}] | |
| * @param {Object} roastContext - The original roast data | |
| * @param {string} personality - Current personality | |
| */ | |
| export const sendChatMessage = async (message, history = [], roastContext = {}, personality = 'gen_z') => { | |
| const response = await fetch(`${API_URL}/chat`, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ | |
| message, | |
| history, | |
| roast_context: roastContext, | |
| personality | |
| }) | |
| }); | |
| if (!response.ok) { | |
| const error = await response.json(); | |
| throw new Error(error.detail || 'Chat failed'); | |
| } | |
| return response.json(); | |
| }; | |
| /** | |
| * Save roast to history | |
| */ | |
| export const saveScanHistory = async (scanData, token) => { | |
| if (!token) return null; // Can't save if not logged in | |
| const response = await fetch(`${API_URL}/scans`, { | |
| method: 'POST', | |
| headers: { | |
| 'Content-Type': 'application/json', | |
| 'Authorization': `Bearer ${token}` | |
| }, | |
| body: JSON.stringify(scanData) | |
| }); | |
| if (!response.ok) { | |
| if (response.status === 403) { | |
| throw new Error('STORAGE_LIMIT_REACHED'); | |
| } | |
| throw new Error('Failed to save history'); | |
| } | |
| return response.json(); | |
| }; | |
| /** | |
| * Get user's scan history (uses token from auth context) | |
| */ | |
| export const getScanHistory = async (token) => { | |
| if (!token) return []; | |
| const response = await fetch(`${API_URL}/scans`, { | |
| headers: { 'Authorization': `Bearer ${token}` } | |
| }); | |
| if (!response.ok) throw new Error('Failed to fetch history'); | |
| return response.json(); | |
| }; | |
| /** | |
| * Delete a scan | |
| */ | |
| export const deleteScan = async (id, token) => { | |
| if (!token) throw new Error('Not logged in'); | |
| const response = await fetch(`${API_URL}/scans/${id}`, { | |
| method: 'DELETE', | |
| headers: { 'Authorization': `Bearer ${token}` } | |
| }); | |
| if (!response.ok) throw new Error('Failed to delete scan'); | |
| return true; | |
| }; | |
| /** | |
| * Check API health status | |
| */ | |
| export const checkHealth = async () => { | |
| const response = await fetch(`${API_URL}/health`); | |
| return response.json(); | |
| }; | |
| export default { | |
| roastWebsite, | |
| detectAI, | |
| sendChatMessage, | |
| saveScanHistory, | |
| getScanHistory, | |
| deleteScan, | |
| checkHealth, | |
| API_URL | |
| }; | |