3
4export async function dailyDadJoke() {
5 let { setup, punchline } = await fetchJSON("https://official-joke-api.appspot.com/random_joke");
6 return email({
7 text: punchline,
1import { fetchJSON } from "https://esm.town/v/stevekrouse/fetchJSON";
2
3export let getDadJoke = () => fetchJSON("https://official-joke-api.appspot.com/random_joke");
1import { API_URL } from "https://esm.town/v/std/API_URL";
2import { LibsqlError, type ResultSet, type TransactionMode } from "npm:@libsql/client";
3import { z } from "npm:zod";
13
14async function execute(statement: InStatement): Promise<ResultSet> {
15 const res = await fetch(`${API_URL}/v1/sqlite/execute`, {
16 method: "POST",
17 headers: {
27
28async function batch(statements: InStatement[], mode?: TransactionMode): Promise<ResultSet[]> {
29 const res = await fetch(`${API_URL}/v1/sqlite/batch`, {
30 method: "POST",
31 headers: {
6 );
7 const googleAuthOptions = {
8 scope: ["https://www.googleapis.com/auth/spreadsheets"],
9 };
10 const token = await getToken(service_account, googleAuthOptions);
11 const result = fetchJSON(
12 `https://sheets.googleapis.com/v4/spreadsheets/${sheet_id}/${action}`,
13 {
14 method,
1import { api } from "https://esm.town/v/pomdtr/api";
2import { extractMetadata } from "https://esm.town/v/pomdtr/extractMetadata?v=4";
3import { extractValInfo } from "https://esm.town/v/pomdtr/extractValInfo";
4
5export default async function() {
6 let { data: articles } = await api(`/v1/search/vals?query=${encodeURIComponent("@vtIdeas")}`);
7
8 return articles.filter(val => {
19
20```
21import { api } from "https://esm.town/v/pomdtr/api";
22
23export const dynamicFolder = async () => {
24 const { data: posts } = await api(`/v1/search/vals?q=${encodeURIComponent("@post")}`);
25 return {
26 folder: "Blog",
9To use it on your own Val Town SQLite database, [fork it](https://www.val.town/v/stevekrouse/sqlite_admin/fork) to your account.
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).
9To use it on your own Val Town SQLite database, [fork it](https://www.val.town/v/stevekrouse/sqlite_admin/fork) to your account.
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).
1// @title My Val Town Wish List
2
3import { api } from "https://esm.town/v/pomdtr/api";
4import { extractMetadata } from "https://esm.town/v/pomdtr/extractMetadata";
5import { extractValInfo } from "https://esm.town/v/pomdtr/extractValInfo";
9export async function examplePost(req: Request) {
10 const { author, name } = extractValInfo(import.meta.url);
11 const { code, readme } = await api(`/v1/alias/${author}/${name}`);
12 const title = extractMetadata("title", code);
13 return html(await gfm(readme, { title, favicon: "🎁" }));
3Some things I'd love to see come to val town (some of these are already on the way according to the team)
4
5- [x] Editing a val's readme through the API
6- [x] A command bar (something like [paco's cmdk](https://cmdk.paco.me/) would be *dope*)
7- [ ] The ability or programmatically respond to events (like a val being run) right within Val Town