From 0adf3ecd0c512cac30bfa7229e738f90cb14919e Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Mon, 6 Jul 2026 17:27:03 -0700 Subject: [PATCH 1/2] Add datasette-paper embed provider for FEC candidates An FEC candidate can be pasted/embedded as a rich block inside a paper document. The provider is a no-op unless datasette-paper is installed (it owns the paper_embed_provider spec); `datasette-libfec[paper]` pulls it from PyPI. Co-Authored-By: Claude Opus 4.8 (1M context) --- datasette_libfec/__init__.py | 3 + datasette_libfec/paper.py | 82 +++++++++ frontend/src/paper_embed.ts | 323 +++++++++++++++++++++++++++++++++++ frontend/vite.config.ts | 8 + pyproject.toml | 11 ++ 5 files changed, 427 insertions(+) create mode 100644 datasette_libfec/paper.py create mode 100644 frontend/src/paper_embed.ts diff --git a/datasette_libfec/__init__.py b/datasette_libfec/__init__.py index 5fa776c..945bf2c 100644 --- a/datasette_libfec/__init__.py +++ b/datasette_libfec/__init__.py @@ -14,6 +14,9 @@ ) from .router import router, LIBFEC_ACCESS_NAME, LIBFEC_WRITE_NAME +# datasette-paper third-party embed provider (no-op unless paper is installed). +from .paper import paper_embed_provider # noqa: F401 + _ = ( routes_rss, routes_export, diff --git a/datasette_libfec/paper.py b/datasette_libfec/paper.py new file mode 100644 index 0000000..9ee7eca --- /dev/null +++ b/datasette_libfec/paper.py @@ -0,0 +1,82 @@ +"""datasette-paper integration: a ``paper_embed_provider`` so an FEC candidate +can be referenced/embedded inside a paper document. + +Paper resolves and renders embeds **entirely client-side** (see +``frontend/src/paper_embed.ts``): the bundle claims +``/-/libfec/candidate/{db}/{candidate_id}`` refs, fetches its own data from +Datasette's native table JSON API (``/{db}/libfec_candidates.json``) with the +viewer's cookie, and owns leak discipline. The backend's only job is to +*describe* this provider — its stable ``kind``, the ref namespace it owns, the +``/``-menu source, and where its JS/CSS bundle lives — so paper can lazy-load +that bundle on demand. There is no server-side resolve/render/search. + +Why the ref is reordered (``/-/libfec/candidate/{db}/{id}``) rather than the +literal page path (``/{db}/-/libfec/candidate/{id}``): every libfec URL leads +with a *variable* ``{database}`` segment, and paper claims a stored ref for +lazy-loading by ``ref.startswith(prefix)`` (server-side ``provider_for_ref`` + +the frontend manifest). A literal-path ref could therefore never sit under a +static ``ref_prefix``, so existing embeds would not re-inject this bundle on +page reload. Reordering puts the libfec namespace first, giving a stable static +prefix; the bundle's ``matchUrl`` transforms the real pasted page URL into this +ref, and resolve/mount rebuild the real page URL for the pill/card link. + +The hook is a no-op unless datasette-paper is installed (it owns the +``paper_embed_provider`` spec); when absent, nothing calls this. +""" + +from __future__ import annotations + +from datasette import hookimpl +from datasette_vite import vite_css_urls, vite_js_urls + +# Vite entry that defines the read-only card + default-exports the paper provider. +_PAPER_EMBED_ENTRY = "src/paper_embed.ts" + + +class LibfecCandidateEmbedProvider: + """Describes the FEC-candidate embed for datasette-paper's editor. + + ``kind`` must equal the bundle's default-exported provider ``kind``. The + actual resolve/render/search all live in that bundle. + """ + + kind = "libfec-candidate" + label = "FEC candidate" + # Stored refs are ``/-/libfec/candidate/{db}/{candidate_id}`` — all under + # this namespace. Lets paper inject our bundle for a doc's embeds before + # running our matchRef (see the module docstring for why it's reordered). + ref_prefixes = ["/-/libfec/candidate/"] + # Mirrors the bundle's picker() source so the `/` menu can list it before + # the bundle loads; picking it injects the bundle, then runs its search(). + sources = [ + { + "id": "libfec-candidate", + "label": "FEC candidate", + "icon": "person-vcard", + "mode": "block", + }, + ] + + def frontend_assets(self, datasette): + # Paper's embed loader does `import(url)` over a list of *string* URLs + # (see embedProviders.ts); vite_js_urls returns `{"url", "module"}` + # dicts (shaped for a script-tag consumer), so unwrap to the bare URL. + # vite_css_urls already returns plain href strings. + js = vite_js_urls( + datasette=datasette, + entrypoint=_PAPER_EMBED_ENTRY, + plugin_package="datasette_libfec", + ) + return { + "js": [u["url"] if isinstance(u, dict) else u for u in js], + "css": vite_css_urls( + datasette=datasette, + entrypoint=_PAPER_EMBED_ENTRY, + plugin_package="datasette_libfec", + ), + } + + +@hookimpl +def paper_embed_provider(datasette): + return LibfecCandidateEmbedProvider() diff --git a/frontend/src/paper_embed.ts b/frontend/src/paper_embed.ts new file mode 100644 index 0000000..e3b9c81 --- /dev/null +++ b/frontend/src/paper_embed.ts @@ -0,0 +1,323 @@ +/** + * datasette-paper embed integration for datasette-libfec. + * + * `export default`s a paper embed provider for the `libfec-candidate` kind: + * paper `import()`s this bundle on demand and registers the provider for us + * (see the descriptor in datasette_libfec/paper.py and + * docs/EMBED_PROVIDERS.md in datasette-paper). + * + * Everything is client-side. resolve/search/mount fetch Datasette's *native* + * table JSON API (`/{db}/libfec_candidates.json`) with the viewer's `ds_actor` + * cookie, so per-viewer leak discipline is Datasette's table permissions plus + * ours: a candidate in a db/table the viewer can't see yields `denied` / + * `not_found` / no search hit — never a leaked name. + * + * Ref shape: stored refs are `/-/libfec/candidate/{db}/{candidate_id}` + * (libfec namespace first so it sits under a static `ref_prefix` — the real + * page URL `/{db}/-/libfec/candidate/{id}` leads with a variable db segment). + * No external imports / no CSS import on purpose: a single standalone chunk + * sidesteps datasette-vite's base-prefixed-asset 404s for code-split bundles. + */ + +// bootstrap-icons/person-vcard — inline pill + block-card header icon. Static +// markup only (paper renders it as raw HTML, unsanitized — never interpolate +// resource data into it). +const VCARD_ICON = + ''; + +const REF_RE = /^\/-\/libfec\/candidate\/([^/]+)\/([^/]+)\/?$/; +const URL_RE = /^\/([^/]+)\/-\/libfec\/candidate\/([^/]+)\/?$/; + +interface CandidateRow { + candidate_id?: string; + name?: string | null; + party_affiliation?: string | null; + office?: string | null; + state?: string | null; + district?: string | null; + cycle?: number | null; + principal_campaign_committee?: string | null; +} + +interface Parsed { + db: string; + candidateId: string; +} + +function parseRef(ref: string): Parsed | null { + const m = REF_RE.exec(ref); + if (!m) return null; + const [, db, cid] = m; + if (db === undefined || cid === undefined) return null; + return { db: decodeURIComponent(db), candidateId: decodeURIComponent(cid) }; +} + +/** Real libfec page URL for the pill/card header link (cycle optional). */ +function pageHref(p: Parsed, cycle?: number | null): string { + const base = `/${encodeURIComponent(p.db)}/-/libfec/candidate/${encodeURIComponent(p.candidateId)}`; + return cycle != null ? `${base}?cycle=${cycle}` : base; +} + +const OFFICE_LABELS: Record = { + H: 'House', + S: 'Senate', + P: 'President', +}; + +function officeLabel(row: CandidateRow): string { + const code = (row.office || '').toUpperCase(); + const name = OFFICE_LABELS[code] || code; + if (!name) return ''; + if (code === 'H' && row.district) { + const d = String(row.district).replace(/^0+/, '') || '0'; + return `${name}, ${row.state || ''}-${d}`.trim(); + } + if (row.state) return `${name}, ${row.state}`; + return name; +} + +/** Normalize Datasette's table JSON (1.x `{rows:[...]}` or `_shape=array`). */ +function rowsOf(j: unknown): CandidateRow[] { + if (Array.isArray(j)) return j as CandidateRow[]; + if (j && typeof j === 'object' && Array.isArray((j as { rows?: unknown[] }).rows)) { + return (j as { rows: CandidateRow[] }).rows; + } + return []; +} + +/** + * Fetch the most-recent-cycle row for one candidate via Datasette's native + * table API. Returns the row, `"denied"` (403), or null (missing / error). + */ +async function fetchCandidate(p: Parsed): Promise { + const url = + `/${encodeURIComponent(p.db)}/libfec_candidates.json` + + `?candidate_id__exact=${encodeURIComponent(p.candidateId)}` + + `&_sort_desc=cycle&_size=1&_shape=array`; + let res: Response; + try { + res = await fetch(url, { headers: { Accept: 'application/json' } }); + } catch { + return null; + } + if (res.status === 403) return 'denied'; // never a label here + if (!res.ok) return null; + let j: unknown; + try { + j = await res.json(); + } catch { + return null; + } + return rowsOf(j)[0] ?? null; +} + +// --- types mirrored from paper's embed provider interface -------------------- + +type ResolveResult = + | { status: 'ok'; kind: string; label: string; href: string; icon?: string } + | { status: 'denied' } + | { status: 'not_found' } + | null; + +interface PaperEmbedContext { + ref: string; + mode: string; +} + +interface PickerSource { + id: string; + label: string; + icon?: string; + mode?: string; +} + +interface SearchHit { + ref: string; + label: string; + kind?: string; + detail?: string; +} + +// --- read-only card ---------------------------------------------------------- + +function fact(label: string, value: string): HTMLElement { + const row = document.createElement('div'); + row.style.cssText = 'display:flex;gap:0.5rem;font-size:0.85rem;line-height:1.5;'; + const k = document.createElement('span'); + k.textContent = label; + k.style.cssText = 'color:#6b7280;min-width:5.5rem;flex:0 0 auto;'; + const v = document.createElement('span'); + v.textContent = value; // text node — XSS-safe + v.style.cssText = 'color:#111827;font-weight:500;'; + row.append(k, v); + return row; +} + +function renderCard(host: HTMLElement, row: CandidateRow, p: Parsed): void { + host.replaceChildren(); + const card = document.createElement('div'); + card.style.cssText = 'padding:0.5rem 0.25rem;display:flex;flex-direction:column;gap:0.25rem;'; + + const name = document.createElement('div'); + name.textContent = row.name || p.candidateId; + name.style.cssText = 'font-size:1rem;font-weight:600;color:#111827;'; + card.appendChild(name); + + const office = officeLabel(row); + if (office) card.appendChild(fact('Office', office)); + if (row.party_affiliation) card.appendChild(fact('Party', row.party_affiliation)); + if (row.cycle != null) card.appendChild(fact('Cycle', String(row.cycle))); + if (row.principal_campaign_committee) + card.appendChild(fact('Committee', row.principal_campaign_committee)); + card.appendChild(fact('Candidate ID', row.candidate_id || p.candidateId)); + + host.appendChild(card); +} + +function renderMessage(host: HTMLElement, text: string): void { + host.replaceChildren(); + const el = document.createElement('div'); + el.textContent = text; + el.style.cssText = 'padding:0.5rem 0.25rem;color:#6b7280;font-size:0.9rem;'; + host.appendChild(el); +} + +// --- Paper embed provider (paper import()s this bundle + registers it) -------- + +const provider = { + kind: 'libfec-candidate', + + /** Claim a stored ref (checked before paper's native .json resolution). */ + matchRef(ref: string): boolean { + return REF_RE.test(ref); + }, + + /** Claim a pasted same-origin candidate page URL → the reordered ref. */ + matchUrl(url: URL): string | null { + const m = URL_RE.exec(url.pathname); + if (!m) return null; + const [, db, cid] = m; + if (db === undefined || cid === undefined) return null; + return `/-/libfec/candidate/${db}/${cid}`; + }, + + /** Inline-pill identity. Leak discipline: denied/missing never yield a label. */ + async resolve(ref: string): Promise { + const p = parseRef(ref); + if (!p) return { status: 'not_found' }; + const row = await fetchCandidate(p); + if (row === 'denied') return { status: 'denied' }; // never a label here + if (!row) return { status: 'not_found' }; + return { + status: 'ok', + kind: 'libfec-candidate', + label: row.name || p.candidateId, + href: pageHref(p, row.cycle), + icon: VCARD_ICON, + }; + }, + + /** Block card body. Paper owns the header; we fill `host` with the card. */ + mount(host: HTMLElement, ctx: PaperEmbedContext): () => void { + let cancelled = false; + const p = parseRef(ctx.ref); + if (!p) { + renderMessage(host, 'Invalid candidate reference'); + return () => {}; + } + renderMessage(host, 'Loading candidate…'); + void (async () => { + const row = await fetchCandidate(p); + if (cancelled) return; + if (row === 'denied') { + renderMessage(host, "You don't have access to this candidate"); + return; + } + if (!row) { + renderMessage(host, 'Candidate not found'); + return; + } + renderCard(host, row, p); + })(); + return () => { + cancelled = true; + host.replaceChildren(); + }; + }, + + /** Browsable `/`-menu source — mirrored by `sources` in paper.py so it shows + * before this bundle loads. */ + picker(): PickerSource { + return { id: 'libfec-candidate', label: 'FEC candidate', icon: 'person-vcard', mode: 'block' }; + }, + + /** + * Viewer-filtered candidates matching `q`, fanned out across the databases + * the viewer can see. Datasette's per-table permissions gate each db, so a + * db/table the viewer can't read just yields no hits (no leak). + */ + async search(q: string, limit: number): Promise { + const query = (q || '').trim(); + if (!query) return []; + let dbs: string[]; + try { + const res = await fetch('/-/databases.json', { + headers: { Accept: 'application/json' }, + }); + if (!res.ok) return []; + const list = (await res.json()) as Array<{ name?: string }>; + dbs = list.map((d) => d.name).filter((n): n is string => !!n && !n.startsWith('_')); + } catch { + return []; + } + + const perDb = Math.max(limit, 5); + const hits: SearchHit[] = []; + await Promise.all( + dbs.map(async (db) => { + const url = + `/${encodeURIComponent(db)}/libfec_candidates.json` + + `?name__contains=${encodeURIComponent(query)}` + + `&_sort=name&_size=${perDb}&_shape=array`; + let res: Response; + try { + res = await fetch(url, { headers: { Accept: 'application/json' } }); + } catch { + return; + } + if (!res.ok) return; // 403/404 (no perm / no table) → skip, no leak + let j: unknown; + try { + j = await res.json(); + } catch { + return; + } + const seen = new Set(); + for (const row of rowsOf(j)) { + const cid = row.candidate_id; + if (!cid || seen.has(cid)) continue; // de-dup across cycles + seen.add(cid); + const office = officeLabel(row); + hits.push({ + ref: `/-/libfec/candidate/${encodeURIComponent(db)}/${encodeURIComponent(cid)}`, + kind: 'libfec-candidate', + label: row.name || cid, + detail: [office, row.party_affiliation].filter(Boolean).join(' · '), + }); + } + }) + ); + + const qLow = query.toLowerCase(); + hits.sort((a, b) => { + const al = a.label.toLowerCase(); + const bl = b.label.toLowerCase(); + const aStarts = al.startsWith(qLow) ? 0 : 1; + const bStarts = bl.startsWith(qLow) ? 0 : 1; + return aStarts - bStarts || al.localeCompare(bl); + }); + return hits.slice(0, limit); + }, +}; + +export default provider; diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 661e9d3..dc811ba 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -42,6 +42,12 @@ export default defineConfig({ outDir: "../datasette_libfec", assetsDir: "static/gen", rollupOptions: { + // App builds default to `preserveEntrySignatures: false`, which strips an + // entry's exports — that tree-shakes away the paper-embed provider's + // `export default` (paper reads `import(url).default`). Keep signatures so + // the provider survives. The view entries have no exports, so this is a + // no-op for them. + preserveEntrySignatures: "allow-extension", input: { index: "src/index_view.ts", import: "src/import_view.ts", @@ -54,6 +60,8 @@ export default defineConfig({ filing_day: "src/filing_day_view.ts", alerts: "src/alerts_view.ts", alert_detail: "src/alert_detail_view.ts", + // datasette-paper embed provider (FEC candidate card + inline pill). + "paper-embed": "src/paper_embed.ts", }, }, }, diff --git a/pyproject.toml b/pyproject.toml index a795065..da43192 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,6 +30,17 @@ alerts = [ "datasette-alerts>=0.0.1a8", ] +[project.optional-dependencies] +# `datasette-libfec[paper]` adds datasette-paper so an FEC candidate can be +# pasted/embedded as a rich block inside a paper document (see paper.py + the +# frontend paper-embed target). The plugin itself is a no-op without it, so the +# default install (and CI) never needs this extra; it resolves from PyPI when +# requested (`uv sync --extra paper`). datasette-paper is a prerelease, so a +# fresh checkout may need `--prerelease=allow`. +paper = [ + "datasette-paper>=0.0.2a3", +] + [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" From 0c24b0bd7859dabaa149d7d589ea72b0b1f2a1b0 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Mon, 6 Jul 2026 17:28:05 -0700 Subject: [PATCH 2/2] Add paper-embed screenshot shot Adds a `paper` shot that boots datasette with `--extra paper` (datasette-paper from PyPI), seeds a paper document embedding two FEC candidates as cards via the real create API, and screenshots it. The server only pulls in datasette-paper / opens its permission gates when the paper shot is in the requested set. A throwaway shot-plugins/profiles.py gives the doc author a friendly name. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/screenshots/paper.png | Bin 0 -> 166373 bytes frontend/scripts/screenshots.mjs | 18 ++++++-- frontend/scripts/shot-plugins/profiles.py | 27 +++++++++++ frontend/scripts/shots/config.mjs | 19 +++++++- frontend/scripts/shots/cookie.mjs | 29 ++++++++++++ frontend/scripts/shots/defineShot.mjs | 35 ++++++++------ frontend/scripts/shots/defs/paper.mjs | 31 +++++++++++++ frontend/scripts/shots/helpers.mjs | 19 +++++--- frontend/scripts/shots/seed.mjs | 43 ++++++++++++++++++ frontend/scripts/shots/server.mjs | 53 +++++++++++++++++++--- 10 files changed, 242 insertions(+), 32 deletions(-) create mode 100644 docs/screenshots/paper.png create mode 100644 frontend/scripts/shot-plugins/profiles.py create mode 100644 frontend/scripts/shots/cookie.mjs create mode 100644 frontend/scripts/shots/defs/paper.mjs create mode 100644 frontend/scripts/shots/seed.mjs diff --git a/docs/screenshots/paper.png b/docs/screenshots/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..94071d473c8b82952fe50f752aa9bf6dfe3eff53 GIT binary patch literal 166373 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 bE-rU$)Cj}9SPVA)o#8#)z@Qe_hzGv`Jut*R literal 0 HcmV?d00001 diff --git a/frontend/scripts/screenshots.mjs b/frontend/scripts/screenshots.mjs index 3175217..38ba5fb 100644 --- a/frontend/scripts/screenshots.mjs +++ b/frontend/scripts/screenshots.mjs @@ -12,18 +12,23 @@ // datasette-paper / datasette-places convention): // * shots/config.mjs — constants + out(name) // * shots/server.mjs — boot/teardown of the throwaway datasette +// * shots/cookie.mjs — signed ds_actor cookie (itsdangerous via uv) +// * shots/seed.mjs — seed() the paper-embed doc (paper shot only) // * shots/helpers.mjs — STABILITY_CSS / freezeVolatile / makeContext // * shots/defineShot.mjs — per-shot context → goto → wait → freeze → capture // * shots/defs/.mjs — ONE FILE PER SHOT, auto-discovered below. // -// libfec's pages are anonymous, read-only views over the fixture db — no cookies -// or seeding, just open the access gate and browse. +// libfec specifics: its own pages are anonymous, read-only views over the +// fixture db (no cookies/seed). The one exception is the `paper` shot, which +// boots the server with datasette-paper and seeds a document embedding FEC +// candidates as cards, viewed as a signed-in owner — see shots/seed.mjs. import { chromium } from '@playwright/test'; import { fileURLToPath } from 'node:url'; import { dirname, resolve } from 'node:path'; import { mkdir, readdir } from 'node:fs/promises'; import { BASE, OUT, out } from './shots/config.mjs'; import { startServer, stopServer } from './shots/server.mjs'; +import { seed } from './shots/seed.mjs'; const HERE = dirname(fileURLToPath(import.meta.url)); @@ -60,10 +65,12 @@ async function main() { throw new Error(`unknown shot(s): ${unknown.join(', ')} (have: ${names.join(', ')})`); } const todo = requested.size ? shots.filter((s) => requested.has(s.name)) : shots; + // Only the paper shot needs datasette-paper booted + a seeded doc. + const needsPaper = todo.some((s) => s.name === 'paper'); await mkdir(OUT, { recursive: true }); - console.log(`booting datasette on ${BASE} …`); - const server = await startServer(); + console.log(`booting datasette on ${BASE}${needsPaper ? ' (with paper)' : ''} …`); + const server = await startServer(needsPaper); const onSignal = () => { stopServer(server); process.exit(130); @@ -73,8 +80,9 @@ async function main() { const browser = await chromium.launch(); try { + const ids = await seed(needsPaper); for (const { name, run } of todo) { - await run(browser, {}); + await run(browser, ids); console.log(`✓ ${name} → ${out(name)}`); } } finally { diff --git a/frontend/scripts/shot-plugins/profiles.py b/frontend/scripts/shot-plugins/profiles.py new file mode 100644 index 0000000..76b960b --- /dev/null +++ b/frontend/scripts/shot-plugins/profiles.py @@ -0,0 +1,27 @@ +"""Throwaway actor display names for the screenshot script. + +Loaded via ``datasette --plugins-dir`` from shots/server.mjs (only for the +``paper`` shot) so the seeded paper document shows a friendly author name +("Alice Ada") instead of the raw ``alice`` id in its header. NOT shipped — +dev/screenshot use only. +""" + +from datasette import hookimpl + +DISPLAY_NAMES = { + "alice": "Alice Ada", + "bob": "Bob Babbage", + "carol": "Carol Shaw", +} + + +@hookimpl +def actors_from_ids(actor_ids): + out = {} + for aid in actor_ids: + sid = str(aid) + actor = {"id": sid} + if sid in DISPLAY_NAMES: + actor["name"] = DISPLAY_NAMES[sid] + out[sid] = actor + return out diff --git a/frontend/scripts/shots/config.mjs b/frontend/scripts/shots/config.mjs index 4e04e82..5cbd170 100644 --- a/frontend/scripts/shots/config.mjs +++ b/frontend/scripts/shots/config.mjs @@ -11,8 +11,11 @@ export const BASE = `http://localhost:${PORT}`; export const DB_NAME = 'data'; // The plugin's base UI path; each shot builds its per-page URL off this. export const APP = `${BASE}/${DB_NAME}/-/libfec`; +// datasette-paper's base path (only the `paper` shot touches it). +export const PAPER = `${BASE}/-/paper`; -// Fixed --secret for the throwaway server; stable so runs stay reproducible. +// Fixed signing secret — lets us mint a signed actor cookie for the paper doc +// owner. Must match datasette's --secret. NOT a real secret. export const SECRET = 'screenshots-secret-not-for-prod'; const HERE = dirname(fileURLToPath(import.meta.url)); // frontend/scripts/shots @@ -22,14 +25,28 @@ const HERE = dirname(fileURLToPath(import.meta.url)); // frontend/scripts/shots export const FIXTURE_DB = resolve(HERE, '../shot-data/libfec.db'); export const DATA_DIR = '/tmp/datasette-libfec-shots-data'; // stem == DB_NAME export const DATA_DB = `${DATA_DIR}/${DB_NAME}.db`; +// datasette-paper stores docs in the internal DB; a throwaway one, wiped each +// run, keeps the seeded doc's id deterministic. Only used for the `paper` shot. +export const INTERNAL_DB = `${DATA_DIR}/internal.db`; +// Throwaway plugin dir: friendly display name for the paper doc author. +export const PLUGINS_DIR = resolve(HERE, '../shot-plugins'); export const OUT = resolve(HERE, '../../../docs/screenshots'); export const VIEWPORT = { width: 1200, height: 900 }; +// Cropped to the paper editor chrome + heading + the two stacked embed cards. +export const VIEWPORT_TALL = { width: 1200, height: 800 }; + +// The paper doc owner — create seeds an owner acl grant to this actor, and +// shot-plugins/profiles.py maps it to a friendly display name. +export const PAPER_ACTOR = 'alice'; // --- Concrete demo entities (from the fixture: 2024 Ohio Senate + big PACs) --- export const SHERROD_BROWN = 'S6OH00163'; // candidate id +export const BERNIE_MORENO = 'S4OH00192'; // his 2024 Senate opponent export const FAIRSHAKE = 'C00835959'; // crypto super PAC committee id export const BROWN_YE_FILING = '1870297'; // Friends of Sherrod Brown, F3 YE 2024 +// Candidates embedded as cards in the seeded paper doc. +export const PAPER_EMBED_CANDIDATES = [SHERROD_BROWN, BERNIE_MORENO]; // Absolute path of a shot's output PNG. export const out = (name) => resolve(OUT, `${name}.png`); diff --git a/frontend/scripts/shots/cookie.mjs b/frontend/scripts/shots/cookie.mjs new file mode 100644 index 0000000..ba7cc58 --- /dev/null +++ b/frontend/scripts/shots/cookie.mjs @@ -0,0 +1,29 @@ +// Signed ds_actor cookie for an actor id. itsdangerous has no maintained Node +// port, so shell out to the same one-liner datasette signs with. Cached per id. +import { execFileSync } from 'node:child_process'; +import { SECRET } from './config.mjs'; + +const _signed = new Map(); + +export function signActorCookie(actorId) { + let v = _signed.get(actorId); + if (!v) { + const out = execFileSync( + 'uv', + [ + 'run', + '--prerelease=allow', + 'python', + '-c', + 'import sys, json; from itsdangerous import URLSafeSerializer; ' + + 'print(URLSafeSerializer(sys.argv[1]).dumps(json.loads(sys.argv[2]), salt="actor"))', + SECRET, + JSON.stringify({ a: { id: actorId } }), + ], + { encoding: 'utf-8' } + ); + v = out.trim(); + _signed.set(actorId, v); + } + return v; +} diff --git a/frontend/scripts/shots/defineShot.mjs b/frontend/scripts/shots/defineShot.mjs index 7298542..9a9145f 100644 --- a/frontend/scripts/shots/defineShot.mjs +++ b/frontend/scripts/shots/defineShot.mjs @@ -1,18 +1,23 @@ // defineShot turns a declarative descriptor into the `async (browser, ids) => -// {…}` the runner calls, owning the per-shot boilerplate: open a fresh context → -// navigate → wait for readiness → interact → freeze → capture → close. +// {…}` the runner calls, owning the per-shot boilerplate: open a fresh context +// (with the right actor + viewport) → navigate → wait for readiness → interact → +// freeze → capture → close. // // Descriptor fields: -// name (required) — output PNG base name; MUST equal the shot's file name -// (asserted by the runner). -// order — run sequence (ascending, then by name). libfec shots are -// independent, so this just fixes a stable order. -// url (required) — (ids) => string, the page to screenshot. -// viewport — context viewport (default VIEWPORT). -// ready — a selector waited on after navigation (the common case). -// prepare — async (page, {ids}) for custom waits / interaction. -// capture — async (page, file, {ids}); default = full-page screenshot. -// freeze — default true; runs freezeVolatile before capture. +// name (required) — output PNG base name; MUST equal the shot's file name +// (asserted by the runner). +// order — run sequence (ascending, then by name). libfec shots are +// independent, so this just fixes a stable order. +// url (required) — (ids) => string, the page to screenshot. +// actor — actor id to sign a ds_actor cookie for (default null = anon). +// viewport — context viewport (default VIEWPORT). +// waitUntil — page.goto wait condition (default "networkidle"; the paper shot +// uses "domcontentloaded", as its editor holds a live SSE +// connection that never goes idle). +// ready — a selector waited on after navigation (the common case). +// prepare — async (page, {ids}) for custom waits / interaction. +// capture — async (page, file, {ids}); default = full-page screenshot. +// freeze — default true; runs freezeVolatile before capture. import { makeContext, freezeVolatile } from './helpers.mjs'; import { VIEWPORT, out } from './config.mjs'; @@ -21,7 +26,9 @@ export function defineShot(desc) { name, order = 0, url, + actor = null, viewport = VIEWPORT, + waitUntil = 'networkidle', ready, prepare, capture, @@ -33,10 +40,10 @@ export function defineShot(desc) { } const run = async (browser, ids) => { - const ctx = await makeContext(browser, { viewport }); + const ctx = await makeContext(browser, { actor, viewport }); try { const page = await ctx.newPage(); - await page.goto(url(ids), { waitUntil: 'networkidle' }); + await page.goto(url(ids), { waitUntil }); if (ready) await page.locator(ready).first().waitFor({ timeout: 15_000 }); if (prepare) await prepare(page, { ids }); if (freeze) await freezeVolatile(page); diff --git a/frontend/scripts/shots/defs/paper.mjs b/frontend/scripts/shots/defs/paper.mjs new file mode 100644 index 0000000..3f2cc69 --- /dev/null +++ b/frontend/scripts/shots/defs/paper.mjs @@ -0,0 +1,31 @@ +import { defineShot } from '../defineShot.mjs'; +import { PAPER, PAPER_ACTOR, PAPER_EMBED_CANDIDATES, VIEWPORT_TALL } from '../config.mjs'; + +// An FEC candidate embedded as a live card inside a datasette-paper document +// (the paper embed provider — datasette_libfec/paper.py + src/paper_embed.ts). +// Needs `--extra paper` + the doc seeded by shots/seed.mjs. +// +// The editor holds a live SSE connection that never goes network-idle, so wait +// on domcontentloaded + explicit readiness: the editor surface, then both cards +// resolved (each card's mount() swaps its "Loading candidate…" placeholder for +// a card carrying a "Candidate ID" row). +export default defineShot({ + name: 'paper', + order: 10, + actor: PAPER_ACTOR, + viewport: VIEWPORT_TALL, + waitUntil: 'domcontentloaded', + url: (ids) => `${PAPER}/doc/${ids.paperDocId}`, + prepare: async (page) => { + await page.locator('.ProseMirror').first().waitFor({ timeout: 15_000 }); + await page.waitForFunction( + (n) => + [...document.querySelectorAll('span')].filter((s) => s.textContent === 'Candidate ID') + .length >= n, + PAPER_EMBED_CANDIDATES.length, + { timeout: 15_000 } + ); + // Let the cards' final layout settle before capture. + await new Promise((r) => setTimeout(r, 300)); + }, +}); diff --git a/frontend/scripts/shots/helpers.mjs b/frontend/scripts/shots/helpers.mjs index 0c71432..0df8787 100644 --- a/frontend/scripts/shots/helpers.mjs +++ b/frontend/scripts/shots/helpers.mjs @@ -1,5 +1,6 @@ // Page-stabilization + capture helpers shared by every shot. -import { VIEWPORT } from './config.mjs'; +import { BASE, VIEWPORT } from './config.mjs'; +import { signActorCookie } from './cookie.mjs'; // Injected on the context (survives navigation) so re-runs produce no binary // diff: kill the caret, transitions and animations, and hide the debug bar. @@ -10,17 +11,20 @@ export const STABILITY_CSS = `*, *::before, *::after { } #datasette-debug-bar { display: none !important; }`; -// Rewrite any moving text to fixed strings just before each capture. libfec's -// pages carry none, so this only removes the dev debug bar if present. +// Rewrite the moving text to fixed strings just before each capture. libfec's +// own pages carry none, but the paper editor header shows a relative "edited …" +// time — pin it so the paper shot doesn't diff on the clock. export async function freezeVolatile(page) { await page.evaluate(() => { document.getElementById('datasette-debug-bar')?.remove(); + document.querySelectorAll('.updated-at').forEach((el) => (el.textContent = 'edited just now')); }); } -// New context: viewport + retina, with the stability stylesheet injected on -// every navigation. -export async function makeContext(browser, { viewport = VIEWPORT } = {}) { +// New context: viewport + retina, the stability stylesheet on every navigation, +// and (for the paper shot) a signed owner cookie. libfec's own pages browse +// anonymously — only `actor` shots get a cookie. +export async function makeContext(browser, { actor = null, viewport = VIEWPORT } = {}) { const ctx = await browser.newContext({ viewport, deviceScaleFactor: 2 }); await ctx.addInitScript((css) => { const inject = () => { @@ -33,5 +37,8 @@ export async function makeContext(browser, { viewport = VIEWPORT } = {}) { inject(); document.addEventListener('DOMContentLoaded', inject); }, STABILITY_CSS); + if (actor) { + await ctx.addCookies([{ name: 'ds_actor', value: signActorCookie(actor), url: BASE }]); + } return ctx; } diff --git a/frontend/scripts/shots/seed.mjs b/frontend/scripts/shots/seed.mjs new file mode 100644 index 0000000..9df98c0 --- /dev/null +++ b/frontend/scripts/shots/seed.mjs @@ -0,0 +1,43 @@ +// Seed the deterministic paper document the `paper` shot screenshots, over +// paper's real create API. Returns an `ids` object (`{ paperDocId }`) the shot +// reads via its `url(ids)`. Only creates anything when the paper shot is in the +// run set — the server is booted with datasette-paper then. +import { PAPER, DB_NAME, PAPER_ACTOR, PAPER_EMBED_CANDIDATES } from './config.mjs'; +import { signActorCookie } from './cookie.mjs'; + +// A block embed is a fenced ```paper-embed code block whose body is +// {config, mode, ref}; paper renders it via the provider that owns the ref's +// prefix (libfec, here), mounting our read-only FEC-candidate card. +function embedBlock(candidateId) { + const body = JSON.stringify({ + config: {}, + mode: 'block', + ref: `/-/libfec/candidate/${DB_NAME}/${candidateId}`, + }); + return '```paper-embed\n' + body + '\n```'; +} + +export async function seed(needsPaper) { + if (!needsPaper) return {}; + + const blocks = PAPER_EMBED_CANDIDATES.map(embedBlock).join('\n\n'); + const content = + '# 2024 Ohio Senate\n\n' + + 'The two campaigns in the race, embedded as live FEC-candidate cards:\n\n' + + blocks + + '\n'; + + const resp = await fetch(`${PAPER}/api/docs`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Cookie: `ds_actor=${signActorCookie(PAPER_ACTOR)}`, + }, + body: JSON.stringify({ name: '2024 Ohio Senate', content }), + }); + if (!resp.ok) { + throw new Error(`create paper doc → ${resp.status}: ${await resp.text()}`); + } + const { id } = await resp.json(); + return { paperDocId: id }; +} diff --git a/frontend/scripts/shots/server.mjs b/frontend/scripts/shots/server.mjs index f04a20a..be18abe 100644 --- a/frontend/scripts/shots/server.mjs +++ b/frontend/scripts/shots/server.mjs @@ -4,9 +4,23 @@ // so datasette opens it writable (the plugin's startup hook adds its alert-queue // table) without touching the committed fixture. The instance permission gates // every libfec page checks are opened globally. -import { mkdir, copyFile, access } from 'node:fs/promises'; +// +// The `paper` shot additionally boots with datasette-paper (`--extra paper`, +// from PyPI) + its permission gates + the actor-name plugin — only when that +// shot is in the run set, so the other shots stay lightweight. +import { mkdir, copyFile, access, rm } from 'node:fs/promises'; import { spawn } from 'node:child_process'; -import { APP, BASE, SECRET, FIXTURE_DB, DATA_DIR, DATA_DB, PORT } from './config.mjs'; +import { + APP, + BASE, + SECRET, + FIXTURE_DB, + DATA_DIR, + DATA_DB, + INTERNAL_DB, + PLUGINS_DIR, + PORT, +} from './config.mjs'; export const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); @@ -23,8 +37,9 @@ export async function reachable() { } } -// Fresh mutable copy of the fixture db. -async function setupDataDb() { +// Fresh mutable copy of the fixture db. `needsPaper` also wipes the internal DB +// so the seeded paper doc's id stays deterministic across runs. +async function setupDataDb(needsPaper) { try { await access(FIXTURE_DB); } catch { @@ -32,10 +47,33 @@ async function setupDataDb() { } await mkdir(DATA_DIR, { recursive: true }); await copyFile(FIXTURE_DB, DATA_DB); + if (needsPaper) await rm(INTERNAL_DB, { force: true }); +} + +// Extra `uv run` / datasette args that pull in datasette-paper + open its gates. +// `--extra paper` resolves it from PyPI; the `>=0.0.2a3` specifier is an alpha, +// so `--prerelease=allow` lets uv pick it (and any prerelease transitive deps). +// The plugin dir adds a friendly display name for the doc author. +function paperArgs() { + return { + uv: ['--prerelease=allow', '--extra', 'paper'], + ds: [ + '--internal', + INTERNAL_DB, + '--plugins-dir', + PLUGINS_DIR, + '-s', + 'permissions.datasette-paper-create', + 'true', + '-s', + 'permissions.paper-view', + 'true', + ], + }; } -export async function startServer() { - await setupDataDb(); +export async function startServer(needsPaper) { + await setupDataDb(needsPaper); // Refuse to start over an already-listening server rather than screenshot // whatever is there — the poll can't tell a stale server from ours. if (await reachable()) { @@ -43,12 +81,14 @@ export async function startServer() { `something is already serving on ${BASE}. Stop it (or set SHOTS_PORT) and retry.` ); } + const paper = needsPaper ? paperArgs() : { uv: [], ds: [] }; // `detached: true` puts datasette in its own process group. datasette is a // grandchild of `uv run`, so we kill the whole group in stopServer. const child = spawn( 'uv', [ 'run', + ...paper.uv, 'datasette', DATA_DB, '--secret', @@ -65,6 +105,7 @@ export async function startServer() { '-s', 'permissions.datasette-alerts-access', 'true', + ...paper.ds, '-p', String(PORT), ],