1import findIdeaLists from "https://esm.town/v/nbbaier/findIdeaLists";
2import { ideaList } from "https://esm.town/v/nbbaier/ideaList";
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";
3 links: [
4 httpLink({
5 url: "https://www.val.town/api/trpc",
6 }),
7 ],
1import codeOnValTown from "https://esm.town/v/andreterron/codeOnValTown?v=46";
2import { api } from "https://esm.town/v/pomdtr/api";
3import { gfm } from "https://esm.town/v/pomdtr/gfm";
4import { html } from "https://esm.town/v/stevekrouse/html?v=5";
5
6async function handler(req: Request) {
7 const { data: vals } = await api(`/v1/search/vals?query=${encodeURIComponent("- [ ]")}`);
8
9 let markdown = "# Todos\n";
13 }
14
15 const { readme } = await api<{ readme: string }>(`/v1/vals/${val.id}`);
16 if (!readme) {
17 continue;
11 let { to, s, m, k } = c.req.query();
12
13 s = s || "message from api";
14 m = m || "<empty>";
15
33
34In order to define a test, the user need to import the Test class from `https://val.town/v/<account>/Test`.
35So we can use the api to search for vals containing the `https://val.town/v/<account>/Test` string to locate the vals containing tests.
36
37Next, we need to extract the tests from the val exports. We use `exported instanceof Test` to filter them (at some point we will probably use static analysis for this).
52
53export default async function() {
54 const API_KEY = Deno.env.get("YOUTUBE_API_KEY");
55 const CHANNEL_ID = Deno.env.get("YOUTUBE_CHANNEL_ID");
56 const now = (new Date()).toISOString();
59 async function fetchComments(pageToken: string = ""): Promise<void> {
60 const url =
61 `https://www.googleapis.com/youtube/v3/commentThreads?key=${API_KEY}&textFormat=plainText&part=snippet&allThreadsRelatedToChannelId=${CHANNEL_ID}&pageToken=${pageToken}`;
62
63 const response = await fetch(url);
22 <head>
23 <title>SQLite Explorer</title>
24 <link rel="preconnect" href="https://fonts.googleapis.com" />
25 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
26 <link
27 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"
28 rel="stylesheet"
29 />
13## Authentication
14
15SQLite Explorer [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).
16
17## Todos / Plans
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
1import ky from "npm:ky";
2
3const prefixUrl = "https://public.api.bsky.app/xrpc/";
4
5// @see: https://docs.bsky.app/docs/api/com-atproto-identity-resolve-handle
6export function resolveHandle(handle: string) {
7 return ky.get("com.atproto.identity.resolveHandle", {
11}
12
13// @see: https://docs.bsky.app/docs/api/app-bsky-feed-get-post-thread
14export function getPostThread(uri: string) {
15 return ky.get("app.bsky.feed.getPostThread", {