8const makeTableName = (name: string): string => `${DB_TABLE_PREFIX}${name}`;
9
10export async function addTaskToQueue({ name, args }: { name: string; args: any[] }, options?: {
11 scheduledFor?: Date;
12}) {
17}
18
19export async function getPendingTasks() {
20 return await tasksQuery(
21 `
28}
29
30async function claimTask(id: number) {
31 return await tasksQuery(
32 `UPDATE ${makeTableName("tasks")} SET status = 'processing' WHERE status = 'pending' AND id = ? RETURNING *`,
35}
36
37async function reportError(id: number, error: string) {
38 return await tasksQuery(
39 `UPDATE ${
44}
45
46export async function getTasks() {
47 return await tasksQuery(`SELECT * FROM ${makeTableName("tasks")}`);
48}
49
50export async function markTaskAsCompleted(id: number, result: any) {
51 return await tasksQuery(`UPDATE ${makeTableName("tasks")} SET status = 'completed', result = ? WHERE id = ?`, [
52 JSON.stringify(result),
55}
56
57async function tasksQuery(query: string, args?: InArgs) {
58 const rows = await sqlite.execute(query, args);
59 return (rows.rows as unknown as TaskRow[]).map(taskRowMap);
81};
82
83function taskRowMap(row: TaskRow): Task {
84 return {
85 id: row.id,
92}
93
94export async function runMigrations() {
95 await sqlite.batch([
96 // `DROP TABLE IF EXISTS ${makeTableName("tasks")}`,
109}
110
111export function serializeError(error: unknown): string {
112 // Handle null or undefined
113 if (error === null) return "Error: null";
149// console.log(await getPendingTasks());
150
151async function getUserId() {
152 const resp = await fetch("https://api.val.town/v1/me", {
153 headers: {
166 #startupComplete: boolean = false;
167 #userId: string | undefined;
168 #tasks: Record<string, Function>;
169 #error: Error | undefined;
170
171 #httpEndpoint: string;
172
173 constructor({ httpEndpoint, tasks }: { httpEndpoint: string; tasks: Record<string, Function> }) {
174 this.#tasks = tasks;
175 this.#startupPromise = (async () => {