1import fetchWithCache from "./fetchWithCache.ts";
2
3const GUARDIAN_API_KEY = Deno.env.get("GUARDIAN_API_KEY");
25 const cacheKey = `guardian_headlines_${size}`;
26
27 const data = await fetchWithCache(apiUrl, cacheKey).then((res) => res.json());
28 return new Response(JSON.stringify(data), {
29 headers: {
46 <h3 class="text-xl pb-2">Example frame previews</h3>
47 <p>
48 Frames data is fetched, cached, and displayed with val.town, then fetched and rendered on an e-ink
49 display.
50 </p>
32 ))
33 )
34 : <div className="text-2xl mt-2.5">Unable to fetch data</div>}
35 </ul>
36 </Content>
1import fetchWithCache from "./fetchWithCache.ts";
2
3export type HEMOLOG_TREATMENT = {
22 const cacheKey = "hemolog-recent-treatments";
23
24 const data: HEMOLOG_TREATMENT[] = await fetchWithCache(apiUrl, cacheKey).then((res) => res.json());
25 return new Response(JSON.stringify(data), {
26 headers: {
16
17 try {
18 const response = await fetch(generateUrl);
19 if (!response.ok) {
20 throw new Error(`APIFlash responded with status: ${response.status}`);
6};
7
8export default async function fetchWithCache(
9 apiUrl: string,
10 cacheKey: string,
37 }
38
39 // Fetch new data if no valid cache exists
40 const response = await fetch(apiUrl);
41 if (!response.ok) {
42 throw new Error(`API responded with status: ${response.status}`);
64 });
65 } catch (error) {
66 console.error("Error fetching data:", error);
67 return new Response(JSON.stringify({ error: "Failed to fetch data" }), {
68 status: 500,
69 headers: { "Content-Type": "application/json" },
1import fetchWithCache from "./fetchWithCache.ts";
2
3export type APOD = {
18 const cacheMinutes = 60;
19
20 const data: APOD = await fetchWithCache(url, cacheKey, cacheMinutes).then((res) => res.json());
21
22 if (!data) {
14
15async function listWebhooks(apiKey: string, propertyId: string): Promise<CloudbedsWebhook[]> {
16 const res = await fetch(`https://hotels.cloudbeds.com/api/v1.2/getWebhooks?propertyID=${propertyId}`, {
17 headers: { Authorization: `Bearer ${apiKey}` },
18 });
37 });
38
39 const res = await fetch("https://hotels.cloudbeds.com/api/v1.2/deleteWebhook", {
40 method: "POST",
41 headers: {
135 const lastSunday = today.startOf("week").minus({ days: 1 });
136
137 // Fetch relevant memories using the utility function
138 const memories = await getRelevantMemories();
139
67 const [currentPage, setCurrentPage] = useState(1);
68
69 const fetchMemories = useCallback(async () => {
70 setLoading(true);
71 setError(null);
72 try {
73 const response = await fetch(API_BASE);
74 if (!response.ok) {
75 throw new Error(`HTTP error! status: ${response.status}`);
78 setMemories(data);
79 } catch (e) {
80 console.error("Failed to fetch memories:", e);
81 setError(e.message || "Failed to fetch memories.");
82 } finally {
83 setLoading(false);
86
87 useEffect(() => {
88 fetchMemories();
89 }, [fetchMemories]);
90
91 const handleAddMemory = async (e: React.FormEvent) => {
100
101 try {
102 const response = await fetch(API_BASE, {
103 method: "POST",
104 headers: { "Content-Type": "application/json" },
112 setNewMemoryTags("");
113 setShowAddForm(false);
114 await fetchMemories();
115 } catch (e) {
116 console.error("Failed to add memory:", e);
123
124 try {
125 const response = await fetch(`${API_BASE}/${id}`, {
126 method: "DELETE",
127 });
129 throw new Error(`HTTP error! status: ${response.status}`);
130 }
131 await fetchMemories();
132 } catch (e) {
133 console.error("Failed to delete memory:", e);
155
156 try {
157 const response = await fetch(`${API_BASE}/${editingMemory.id}`, {
158 method: "PUT",
159 headers: { "Content-Type": "application/json" },
164 }
165 setEditingMemory(null);
166 await fetchMemories();
167 } catch (e) {
168 console.error("Failed to update memory:", e);