12};
13
14export function buildSpotifyTrackKey(artist: string, title: string) {
15 const key = `${SPOTIFY_TRACK_KEY_PREFIX}_artist:${kebabCase(artist)}_title:${kebabCase(title)}`.toLowerCase();
16 console.debug("buildSpotifyTrackKey", artist, title, key);
18}
19
20export function spotifyTrackUrl(track, format: SpotifyTrackUrlFormat) {
21 if (!track) return;
22
30}
31
32export function spotifyTrackAppLink(track) {
33 if (!track) return;
34
38}
39
40async function cacheTrack(spotifyTrackKey: string, track: any) {
41 console.debug(`Caching track ${spotifyTrackKey}`);
42 await blob.setJSON(spotifyTrackKey, track);
51}
52
53export async function getSpotifyTrackUrl(artist: string, title: string, options?: SpotifyTrackUrlOptions) {
54 const format = options?.format || "web";
55
5import { integer, sqliteTable, text } from "npm:drizzle-orm/sqlite-core";
6
7async function dropDb() {
8 await sqlite.execute(`
9 drop table if exists tracks`);
28});
29
30async function setUpDb() {
31 await sqlite.execute(`
32 create table if not exists tracks (
46}
47
48export async function refreshTrackFromBlobKey(key: string) {
49 const trackInfo = await blob.getJSON(key);
50
75}
76
77export async function perform() {
78 const spotifyTracks = await blob.list("spotify_track_id");
79 for (const spotifyTrack of spotifyTracks) {
83}
84
85export default async function(interval: Interval) {
86 // await dropDb();
87 // await setUpDb();
10};
11
12export async function getRandomTrack(artist?: string): Promise<RandomTrack> {
13 const { rows } = artist
14 ? await sqlite.execute({
20] as Track[];
21
22export default async function(interval: Interval) {
23 await sqlite.execute(`drop table if exists favorite_song_searches;`);
24
9 : `${Duration.toMillis(d)}ms`;
10
11export function withTimeLog<A, E, C>(
12 label: string,
13): (self: Effect.Effect<A, E, C>) => Effect.Effect<A, E, C> {
14 return (self) =>
15 Effect.gen(function*() {
16 const start = yield* Clock.currentTimeMillis;
17 const result = yield* self;
31 countdown: {
32 // This will return the value on every 1 sec until it reaches 0
33 subscribe: async function*(_, { from }) {
34 for (let i = from; i >= 0; i--) {
35 await setTimeout(1000);
36const resp = await fetch("https://maxm-wasmBlobHost.web.val.run/jpxqvyy5tphiwehzklmioklpkpz4gpzs.wasm");
37const handler = await wasmHandler(new Uint8Array(await resp.arrayBuffer()));
38export default async function(req: Request): Promise<Response> {
39 return handler(req);
40}
59const resp = await fetch("${url}");
60const handler = await wasmHandler(new Uint8Array(await resp.arrayBuffer()));
61export default async function(req: Request): Promise<Response> {
62 return handler(req);
63}`);
1export function handler(request: Request) {
2 return Response.redirect('https://www.thyresson.io')
3}
1import { blob } from "https://esm.town/v/std/blob?v=12";
2export default async function(interval: Interval) {
3 await fetch("https://tempguy-scarletsole.web.val.run/refresh");
4 const date = new Date();
A helper function to build a file's email
Simple functional CSS library for Val Town
import { OpenAI } from "https://esm.town/v/std/openai";
export default async function(req: Request): Promise<Response> {
if (req.method === "OPTIONS") {
return new Response(null, {
headers: {
"Access-Control-Allow-Origin": "*",
LangChain (https://langchain.com) Ambassador, KubeSphere (https://kubesphere.io) Ambassador, CNCF OpenFunction (https://openfunction.dev) TOC Member.