30
31 const anthropic = new Anthropic({
32 apiKey: Deno.env.get("ANTHROPIC_API_KEY"),
33 });
34
48 });
49 } catch (error) {
50 console.error("Error calling Anthropic API:", error);
51 return new Response("Error generating completion. Please try again later.", { status: 500 });
52 }
5
6export async function getCalendars(accountId: string) {
7 const calendarAPI = await pipeDreamGoogle("calendar", accountId);
8 const calendars = await calendarAPI.calendarList.list();
9 return calendars.data.items;
10}
9[](https://www.val.town/v/stevekrouse/blob_admin_app/fork)
10
11It uses [basic authentication](https://www.val.town/v/pomdtr/basicAuth) with your [Val Town API Token](https://www.val.town/settings/api) as the password (leave the username field blank).
12
13# TODO
13## Authentication
14
15Login to your SQLite Explorer with [password authentication](https://www.val.town/v/pomdtr/password_auth) with your [Val Town API Token](https://www.val.town/settings/api) as the password.
16
17## Todos / Plans
27 <head>
28 <title>SQLite Explorer</title>
29 <link rel="preconnect" href="https://fonts.googleapis.com" />
30
31 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
32 <link
33 href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@300..700&family=Source+Sans+3:ital,wght@0,200..900;1,200..900&display=swap"
34 rel="stylesheet"
35 />
1import { createClient, type NormalizeOAS } from "npm:fets@0.8.3";
2import type openapi from "npm:smallweb@0.14.4";
3
4if (!Deno.env.get("SMALLWEB_API_URL")) {
5 throw new Error("Missing SMALLWEB_API_URL");
6}
7
8if (!Deno.env.get("SMALLWEB_API_TOKEN")) {
9 throw new Error("Missing SMALLWEB_API_TOKEN");
10}
11
12export const smallweb = createClient<NormalizeOAS<typeof openapi>>({
13 endpoint: Deno.env.get("SMALLWEB_API_URL"),
14 globalParams: {
15 headers: { Authorization: `Bearer ${Deno.env.get("SMALLWEB_API_TOKEN")}` },
16 },
17});
244 const { code, name } = await request.json();
245
246 // Create a new val using the Val Town API
247 const response = await fetch("https://api.val.town/v1/vals", {
248 method: "POST",
249 headers: {
250 "Content-Type": "application/json",
251 "Authorization": `Bearer ${Deno.env.get("VAL_TOWN_API_KEY")}`,
252 },
253 body: JSON.stringify({
290
291const css = `
292@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap');
293
294body {
244 const { code, name } = await request.json();
245
246 // Create a new val using the Val Town API
247 const response = await fetch("https://api.val.town/v1/vals", {
248 method: "POST",
249 headers: {
250 "Content-Type": "application/json",
251 "Authorization": `Bearer ${Deno.env.get("VAL_TOWN_API_KEY")}`,
252 },
253 body: JSON.stringify({
290
291const css = `
292@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap');
293
294body {
8
91. Click `Fork`
102. Change `location` (Line 4) to describe your location. It accepts fairly flexible English descriptions which it turns into locations via [nominatim's geocoder API](https://www.val.town/v/stevekrouse/nominatimSearch).
113. Click `Run`
12
8
91. Click `Fork`
102. Change `location` (Line 4) to describe your location. It accepts fairly flexible English descriptions which it turns into locations via [nominatim's geocoder API](https://www.val.town/v/stevekrouse/nominatimSearch).
113. Click `Run`
12