stevensDemoindex.ts2 matches
135));
136137// HTTP vals expect an exported "fetch handler"
138export default app.fetch;
stevensDemo.cursorrules5 matches
163```
1641655. **fetchTranspiledJavaScript** - Fetch and transpile TypeScript to JavaScript:
166```ts
167const jsCode = await fetchTranspiledJavaScript("https://esm.town/v/username/project/path/to/file.ts");
168```
169242243// Inject data to avoid extra round-trips
244const initialData = await fetchInitialData();
245const dataScript = `<script>
246window.__INITIAL_DATA__ = ${JSON.stringify(initialData)};
3003015. **API Design:**
302- `fetch` handler is the entry point for HTTP vals
303- Run the Hono app with `export default app.fetch // This is the entry point for HTTP vals`
304- Properly handle CORS if needed for external access
stevensDemoApp.tsx17 matches
82const [cookieAndTeaMode, setCookieAndTeaMode] = useState(false);
8384// Fetch images from backend instead of blob storage directly
85useEffect(() => {
86// Set default background color in case image doesn't load
89}
9091// Fetch avatar image
92fetch("/api/images/stevens.jpg")
93.then((response) => {
94if (response.ok) return response.blob();
103});
104105// Fetch wood background
106fetch("/api/images/wood.jpg")
107.then((response) => {
108if (response.ok) return response.blob();
129}, []);
130131const fetchMemories = useCallback(async () => {
132setLoading(true);
133setError(null);
134try {
135const response = await fetch(API_BASE);
136if (!response.ok) {
137throw new Error(`HTTP error! status: ${response.status}`);
154}
155} catch (e) {
156console.error("Failed to fetch memories:", e);
157setError(e.message || "Failed to fetch memories.");
158} finally {
159setLoading(false);
162163useEffect(() => {
164fetchMemories();
165}, [fetchMemories]);
166167const handleAddMemory = async (e: React.FormEvent) => {
176177try {
178const response = await fetch(API_BASE, {
179method: "POST",
180headers: { "Content-Type": "application/json" },
188setNewMemoryTags("");
189setShowAddForm(false);
190await fetchMemories();
191} catch (e) {
192console.error("Failed to add memory:", e);
199200try {
201const response = await fetch(`${API_BASE}/${id}`, {
202method: "DELETE",
203});
205throw new Error(`HTTP error! status: ${response.status}`);
206}
207await fetchMemories();
208} catch (e) {
209console.error("Failed to delete memory:", e);
231232try {
233const response = await fetch(`${API_BASE}/${editingMemory.id}`, {
234method: "PUT",
235headers: { "Content-Type": "application/json" },
240}
241setEditingMemory(null);
242await fetchMemories();
243} catch (e) {
244console.error("Failed to update memory:", e);
5const responses = await Promise.all(
6tailscaleNodeIds.map(async (tailscaleNodeId) => {
7const response = await fetch(`https://api.tailscale.com/api/v2/device/${tailscaleNodeId}`, {
8headers: {
9"Authorization": `Bearer ${Deno.env.get("tailscaleApiKey")}`,
survivor-planindex.ts19 matches
93return c.json(tracks);
94} catch (error) {
95console.error("Error fetching tracks:", error);
96return c.json({ error: "Failed to fetch tracks" }, 500);
97}
98});
123return c.json(tasks);
124} catch (error) {
125console.error("Error fetching tasks:", error);
126return c.json({ error: "Failed to fetch tasks" }, 500);
127}
128});
136return c.json(tasks);
137} catch (error) {
138console.error(`Error fetching tasks for track ${trackId}:`, error);
139return c.json({ error: "Failed to fetch tasks" }, 500);
140}
141});
188return c.json(dailyLog);
189} catch (error) {
190console.error(`Error fetching daily log for ${date}:`, error);
191return c.json({ error: "Failed to fetch daily log" }, 500);
192}
193});
267return c.json(weeklyReview);
268} catch (error) {
269console.error(`Error fetching weekly review for week ${weekNumber}:`, error);
270return c.json({ error: "Failed to fetch weekly review" }, 500);
271}
272});
347return c.json(userStatus);
348} catch (error) {
349console.error("Error fetching user status:", error);
350return c.json({ error: "Failed to fetch user status" }, 500);
351}
352});
379return c.json(trackPrompts);
380} catch (error) {
381console.error("Error fetching track prompts:", error);
382return c.json({ error: "Failed to fetch track prompts" }, 500);
383}
384});
397return c.json(trackPrompt);
398} catch (error) {
399console.error(`Error fetching prompt for track ${trackId}:`, error);
400return c.json({ error: "Failed to fetch track prompt" }, 500);
401}
402});
580return c.json(responses);
581} catch (error) {
582console.error("Error fetching AI responses:", error);
583return c.json({ error: "Failed to fetch AI responses" }, 500);
584}
585});
634635// Export the app for HTTP val
636export default app.fetch
blob_adminmain.tsx1 match
195});
196197export default lastlogin((request: Request) => app.fetch(request));
blob_adminapp.tsx22 matches
231const [isDragging, setIsDragging] = useState(false);
232233const fetchBlobs = useCallback(async () => {
234setLoading(true);
235try {
236const response = await fetch(`/api/blobs?prefix=${encodeKey(searchPrefix)}&limit=${limit}`);
237const data = await response.json();
238setBlobs(data);
239} catch (error) {
240console.error("Error fetching blobs:", error);
241} finally {
242setLoading(false);
245246useEffect(() => {
247fetchBlobs();
248}, [fetchBlobs]);
249250const handleSearch = (e) => {
261setBlobContentLoading(true);
262try {
263const response = await fetch(`/api/blob?key=${encodeKey(clickedBlob.key)}`);
264const content = await response.text();
265setSelectedBlob({ ...clickedBlob, key: decodeKey(clickedBlob.key) });
266setEditContent(content);
267} catch (error) {
268console.error("Error fetching blob content:", error);
269} finally {
270setBlobContentLoading(false);
275const handleSave = async () => {
276try {
277await fetch(`/api/blob?key=${encodeKey(selectedBlob.key)}`, {
278method: "PUT",
279body: editContent,
287const handleDelete = async (key) => {
288try {
289await fetch(`/api/blob?key=${encodeKey(key)}`, { method: "DELETE" });
290setBlobs(blobs.filter(b => b.key !== key));
291if (selectedBlob && selectedBlob.key === key) {
304const key = `${searchPrefix}${file.name}`;
305formData.append("key", encodeKey(key));
306await fetch("/api/blob", { method: "POST", body: formData });
307const newBlob = { key, size: file.size, lastModified: new Date().toISOString() };
308setBlobs([newBlob, ...blobs]);
312}
313}
314fetchBlobs();
315};
316326try {
327const fullKey = `${searchPrefix}${key}`;
328await fetch(`/api/blob?key=${encodeKey(fullKey)}`, {
329method: "PUT",
330body: "",
341const handleDownload = async (key) => {
342try {
343const response = await fetch(`/api/blob?key=${encodeKey(key)}`);
344const blob = await response.blob();
345const url = window.URL.createObjectURL(blob);
360if (newKey && newKey !== oldKey) {
361try {
362const response = await fetch(`/api/blob?key=${encodeKey(oldKey)}`);
363const content = await response.blob();
364await fetch(`/api/blob?key=${encodeKey(newKey)}`, {
365method: "PUT",
366body: content,
367});
368await fetch(`/api/blob?key=${encodeKey(oldKey)}`, { method: "DELETE" });
369setBlobs(blobs.map(b => b.key === oldKey ? { ...b, key: newKey } : b));
370if (selectedBlob && selectedBlob.key === oldKey) {
380const newKey = `__public/${key}`;
381try {
382const response = await fetch(`/api/blob?key=${encodeKey(key)}`);
383const content = await response.blob();
384await fetch(`/api/blob?key=${encodeKey(newKey)}`, {
385method: "PUT",
386body: content,
387});
388await fetch(`/api/blob?key=${encodeKey(key)}`, { method: "DELETE" });
389setBlobs(blobs.map(b => b.key === key ? { ...b, key: newKey } : b));
390if (selectedBlob && selectedBlob.key === key) {
399const newKey = key.slice(9); // Remove "__public/" prefix
400try {
401const response = await fetch(`/api/blob?key=${encodeKey(key)}`);
402const content = await response.blob();
403await fetch(`/api/blob?key=${encodeKey(newKey)}`, {
404method: "PUT",
405body: content,
406});
407await fetch(`/api/blob?key=${encodeKey(key)}`, { method: "DELETE" });
408setBlobs(blobs.map(b => b.key === key ? { ...b, key: newKey } : b));
409if (selectedBlob && selectedBlob.key === key) {
29
30try {
31const response = await fetch('/api/quick-guidance', {
32method: 'POST',
33headers: {
survivor-planWeeklyReview.js11 matches
21
22useEffect(() => {
23fetchData();
24}, [weekNumber]);
25
26const fetchData = async () => {
27setIsLoading(true);
28setError(null);
29
30try {
31// Fetch tracks, tasks, and weekly review in parallel
32const [tracksResponse, tasksResponse, weeklyReviewResponse] = await Promise.all([
33fetch('/api/tracks'),
34fetch('/api/tasks'),
35fetch(`/api/weekly-reviews/${weekNumber}`)
36]);
37
38if (!tracksResponse.ok || !tasksResponse.ok) {
39throw new Error('Failed to fetch data');
40}
41
87}
88} catch (error) {
89console.error('Error fetching data:', error);
90setError('Failed to load data. Please try refreshing the page.');
91} finally {
227
228try {
229const response = await fetch('/api/weekly-reviews', {
230method: 'POST',
231headers: {
250// Send weekly email
251try {
252await fetch('/api/send-weekly-email', {
253method: 'POST'
254});
271
272try {
273const response = await fetch('/api/weekly-review-feedback', {
274method: 'POST',
275headers: {
survivor-planSetupWizard.js1 match
81
82try {
83const response = await fetch('/api/user-status', {
84method: 'POST',
85headers: {