polls-free.openapps.xyz

Source

This app’s code and revision history are public. Download a copy or explore the files below.

Public
The app’s code and revision history are public.
Owned app · rev c06cea4889e9
Run it yourself
Take the whole tree and run it on your own machine. The download needs no account. Cloning needs a sign-in.
Download .zip
bounded clone 334801de44cb0fe911d5a88b
A copy you download is not bounded. The guarantees this app runs under - declared egress, proven invariants, writes that fail closed - live in the runtime serving this page, not in the files. What you get is auditable source you can read and run, with no runtime guarantees attached.
← All files
src/lib/mine.ts
// "Your events": the events this browser made or opened with an admin link, with their admin keys. Lives only in this browser.
const KEY = "polls:mine";

export interface Mine { id: string; key: string; title: string; code: string; at: number }

export function listMine(): Mine[] {
  try {
    const all = JSON.parse(localStorage.getItem(KEY) || "{}") as Record<string, Omit<Mine, "id">>;
    return Object.entries(all).map(([id, v]) => ({ id, ...v })).sort((a, b) => b.at - a.at);
  } catch {
    return [];
  }
}

export function keyFor(id: string): string | null {
  return listMine().find((m) => m.id === id)?.key ?? null;
}

export function remember(id: string, key: string, title: string, code: string) {
  const all = Object.fromEntries(listMine().map(({ id: i, ...v }) => [i, v]));
  all[id] = { key, title, code, at: all[id]?.at ?? Date.now() };
  try { localStorage.setItem(KEY, JSON.stringify(all)); } catch { /* private mode: the admin link still works */ }
}

export function forget(id: string) {
  const all = Object.fromEntries(listMine().filter((m) => m.id !== id).map(({ id: i, ...v }) => [i, v]));
  try { localStorage.setItem(KEY, JSON.stringify(all)); } catch { /* nothing to forget */ }
}

Change history

Point OpenApps links to openapps.free
c06cea4889 · 17 hours ago
Bind agent address in policy constants
a7de116d52 · 19 hours ago
Use OpenApps service URLs and add contribution strip
e8ce0b0bf0 · 19 hours ago
Bounded source sync
dcdc4d56e6 · 1 day ago
Bounded source sync
7acdace1e1 · 1 day ago
Bounded source sync
2140a66ea0 · 1 day ago
Bounded source sync
0db2fe3ca0 · 1 day ago
Bounded source sync
996f633a3c · 1 day ago