From a70e154ba5776b74131d5e1170bf84a7ed2b88bb Mon Sep 17 00:00:00 2001 From: Christopher Nelson Date: Tue, 29 Sep 2026 22:37:25 -0400 Subject: [PATCH] feat: add native pages and sources analytics with EmDash screenshots --- .github/workflows/ci.yml | 20 + .gitignore | 2 + README.md | 32 +- demo/README.md | 9 + demo/astro.config.mjs | 34 ++ demo/src/pages/demo-health.ts | 12 + demo/tsconfig.json | 3 + docs/implementation-footprint.md | 49 ++- docs/screenshots/openanalytics-narrow.png | Bin 0 -> 111550 bytes docs/screenshots/openanalytics-overview.png | Bin 0 -> 117669 bytes docs/screenshots/openanalytics-reports.png | Bin 0 -> 110665 bytes docs/upstream-contracts.md | 84 +++- package.json | 11 +- pnpm-lock.yaml | 63 +++ scripts/check-package.mjs | 26 +- scripts/demo-openanalytics.mjs | 208 ++++++++++ scripts/screenshot-demo.mjs | 369 +++++++++++++++++ src/admin/connection.ts | 128 ++++++ src/admin/overview.ts | 141 +++++++ src/admin/page.ts | 426 ++++---------------- src/admin/ranges.ts | 64 +++ src/admin/reports.ts | 80 ++++ src/openanalytics/client.ts | 130 +++++- src/openanalytics/types.ts | 35 ++ tests/admin.test.ts | 301 ++++++++++++-- tests/analytics-client.test.ts | 188 ++++++++- tests/http.test.ts | 81 +++- 27 files changed, 2092 insertions(+), 404 deletions(-) create mode 100644 demo/README.md create mode 100644 demo/astro.config.mjs create mode 100644 demo/src/pages/demo-health.ts create mode 100644 demo/tsconfig.json create mode 100644 docs/screenshots/openanalytics-narrow.png create mode 100644 docs/screenshots/openanalytics-overview.png create mode 100644 docs/screenshots/openanalytics-reports.png create mode 100644 scripts/demo-openanalytics.mjs create mode 100644 scripts/screenshot-demo.mjs create mode 100644 src/admin/connection.ts create mode 100644 src/admin/overview.ts create mode 100644 src/admin/ranges.ts create mode 100644 src/admin/reports.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f1483c7..37adaa6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,3 +26,23 @@ jobs: cache: pnpm - run: pnpm install --frozen-lockfile - run: pnpm run check + screenshots: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v7 + - uses: pnpm/action-setup@v6 + with: + version: 10.32.1 + - uses: actions/setup-node@v7 + with: + node-version: 24 + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm exec playwright install --with-deps chromium + - run: pnpm screenshot + - uses: actions/upload-artifact@v7 + with: + name: emdash-openanalytics-screenshots + path: docs/screenshots/*.png + if-no-files-found: error diff --git a/.gitignore b/.gitignore index 34370a2..4d2ef35 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ node_modules/ dist/ coverage/ +.astro/ +demo/emdash-env.d.ts .turbo/ .DS_Store *.tgz diff --git a/README.md b/README.md index 03155c6..b97eabc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,8 @@ Native EmDash CMS integration for OpenAnalytics, by Black Swamp AI. Native connection validation, public-site tracker installation, and an analytics overview inside EmDash. The admin page uses EmDash Block Kit controls, metric -cards, notices, and a timeseries chart. Private credentials stay on the server. +cards, notices, a timeseries chart, Top Pages, and Traffic Sources. Private +credentials stay on the server. ## Installation @@ -103,8 +104,19 @@ numbers are easier to interpret. Missing freshness is shown as unavailable. Authentication failures, missing analytics scope, suspended service, rate limits, and unavailable upstream service have safe messages and validation/retry controls. -Opening the page or changing its range makes two server-side reads: overview and -timeseries. Revalidation first reads site metadata and refreshes the installation +Top Pages shows the first ten pages ranked by views, with views and visitors. +Traffic Sources shows the first ten attribution groups ranked by views, with +views and visitors. Campaign source, medium, and campaign values appear when +recorded; rows with the same referrer can represent different campaigns. +Untagged rows with an empty referrer are shown as Direct / internal. Tagged +rows keep their recorded UTM source. +These are per-row visitor counts and should not be summed into the overview. +Empty reports have their own messages. A failed report leaves other successful +sections visible, and each section reports its own data caveats. + +Opening the page or changing its range makes four server-side reads: overview, +timeseries, pages, and sources. All reuse one requested interval and timezone. +Revalidation first reads site metadata and refreshes the installation snapshot. There is no polling, automatic retry, or shared analytics cache. The private admin route requires `plugins:manage` and EmDash's CSRF protection. @@ -152,14 +164,17 @@ manual tracker URL overrides. ## Current limitations -- The overview is intentionally small: no top pages, sources, sessions, funnels, - revenue, visitor profiles, editor analytics, or realtime polling. +- The summary is intentionally small: no pagination, custom filters, geography, + devices, sessions browser, individual visitors, custom-event reports, funnels, + revenue, web vitals, editor analytics, or realtime polling. OAuth and account + or site creation are also outside this plugin's current scope. - Revalidate after tracker rotation or a collector URL change. Saved installation metadata has no automatic expiry; private-key revocation is detected on validation. - Static pages receive the snapshot available when they are rendered. Rebuild those pages after changing the connection or tracking switch. - The tracker independently fetches OpenAnalytics's browser configuration. A - suspended site may validate successfully; ingestion follows OpenAnalytics policy. + suspended site may validate successfully and still have its tracker installed; + collection and analytics access follow OpenAnalytics's suspension policy. - Duplicate protection covers EmDash fragments in a placement. Remove any tracker tag already installed manually in the theme. @@ -173,6 +188,11 @@ pnpm check `check` runs typechecking, linting, formatting checks, tests, build, and package verification. CI runs the same checks. No npm publication is performed. +Run `pnpm exec playwright install chromium`, then `pnpm screenshot` to generate +three screenshots from a local EmDash admin instance using synthetic analytics. +See the [demo instructions](demo/README.md) for the authentication, fixture, +artifact safety checks, and screenshot locations. CI also runs this workflow. + Source boundaries are the native plugin entry, settings/configuration, the server-side OpenAnalytics client, saved connection state, tracker fragments, and native admin page. diff --git a/demo/README.md b/demo/README.md new file mode 100644 index 0000000..e2a5ef8 --- /dev/null +++ b/demo/README.md @@ -0,0 +1,9 @@ +# EmDash OpenAnalytics screenshot demo + +Run `pnpm screenshot` from the repository root. It builds `dist/`, starts a local OpenAnalytics fixture and an actual EmDash Astro admin using the packaged plugin descriptor, authenticates through EmDash's development-only bypass, configures the fixture connection through the protected settings API, validates it, and captures three screenshots under `docs/screenshots/`. + +The fixture and EmDash app bind to `127.0.0.1` on reserved ephemeral ports. Their readiness routes require a per-run random token, and EmDash also refuses to start if its configured port is occupied. The fixture accepts only its synthetic `oa_sk_demo_fixture_only_…` key. The EmDash demo database lives in a newly created temporary directory and is removed on exit. Captures are staged in another temporary directory; before they are copied into the repository, the harness scans rendered DOM text, page HTML, text/JSON browser responses, process output, and PNG bytes for private-key-shaped values and the fixture key. This environment has no OCR tool, so the screenshot check supplements the scan of the exact DOM used to take each image. + +The fixture keeps totals, comparison values, report rows, and chart shape fixed. It echoes the selected request range and timezone in response metadata and verifies overview, timeseries, pages, and sources all receive one matching interval. Request bounds and connection-validation time follow the current system clock; no production code is patched to freeze time. The chart generates points within the selected window. This gives stable content and layout while preserving the real admin range behavior. + +EmDash's `/_emdash/api/setup/dev-bypass` is used only on the loopback-bound Astro development server. EmDash guards this route behind `import.meta.env.DEV`. No dev bypass is exposed by the screenshot harness on a non-loopback address. diff --git a/demo/astro.config.mjs b/demo/astro.config.mjs new file mode 100644 index 0000000..b2488cd --- /dev/null +++ b/demo/astro.config.mjs @@ -0,0 +1,34 @@ +import { fileURLToPath } from "node:url"; + +import node from "@astrojs/node"; +import react from "@astrojs/react"; +import { defineConfig } from "astro/config"; +import emdash from "emdash/astro"; +import { sqlite } from "emdash/db"; + +import { openAnalytics } from "../dist/index.mjs"; + +const descriptor = openAnalytics(); + +export default defineConfig({ + output: "server", + adapter: node({ mode: "standalone" }), + devToolbar: { enabled: false }, + server: { + host: "127.0.0.1", + port: Number(process.env.EMDASH_DEMO_PORT ?? 4390), + strictPort: true, + }, + integrations: [ + react(), + emdash({ + database: sqlite({ url: process.env.EMDASH_DEMO_DB_URL ?? "file:./data.db" }), + plugins: [ + { + ...descriptor, + entrypoint: fileURLToPath(new URL("../dist/index.mjs", import.meta.url)), + }, + ], + }), + ], +}); diff --git a/demo/src/pages/demo-health.ts b/demo/src/pages/demo-health.ts new file mode 100644 index 0000000..78c7d9f --- /dev/null +++ b/demo/src/pages/demo-health.ts @@ -0,0 +1,12 @@ +import type { APIRoute } from "astro"; + +export const prerender = false; + +export const GET: APIRoute = ({ request }) => { + const expected = process.env.EMDASH_DEMO_RUN_ID; + const supplied = new URL(request.url).searchParams.get("run"); + if (!expected || supplied !== expected) return new Response("Not found", { status: 404 }); + return new Response(JSON.stringify({ run: expected }), { + headers: { "Content-Type": "application/json" }, + }); +}; diff --git a/demo/tsconfig.json b/demo/tsconfig.json new file mode 100644 index 0000000..a3f6981 --- /dev/null +++ b/demo/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "astro/tsconfigs/strict" +} diff --git a/docs/implementation-footprint.md b/docs/implementation-footprint.md index 923ced1..eac3446 100644 --- a/docs/implementation-footprint.md +++ b/docs/implementation-footprint.md @@ -7,11 +7,12 @@ counts include `src/**/*.ts` for EmDash and `nodes/**/*.ts` plus fixtures/helpers. Lockfiles, generated code, docs, CI, and package tooling are excluded. These are size comparisons, not runtime performance measurements. -| Implementation | Production LOC | Test LOC | Production modules | OpenAnalytics HTTP endpoints | -| ----------------------------- | -------------: | -------: | -----------------: | ---------------------------: | -| EmDash scaffold, PR #1 | 495 | 721 | 9 | 1 | -| EmDash native overview, PR #2 | 1458 | 1923 | 10 | 3 | -| n8n OpenAnalytics 0.1.1 | 607 | 613 | 5 | 11 | +| Implementation | Production LOC | Test LOC | Production modules | OpenAnalytics HTTP endpoints | +| ------------------------------- | -------------: | -------: | -----------------: | ---------------------------: | +| EmDash scaffold, PR #1 | 495 | 721 | 9 | 1 | +| EmDash native overview, PR #2 | 1458 | 1923 | 10 | 3 | +| EmDash pages and sources, PR #3 | 1770 | 2423 | 14 | 5 | +| n8n OpenAnalytics 0.1.1 | 607 | 613 | 5 | 11 | PR #2 adds **963 production lines** and **1202 test lines** over the scaffold. The scaffold tree at `a9e69a2` is identical to the original @@ -19,6 +20,12 @@ over the scaffold. The scaffold tree at `a9e69a2` is identical to the original `8caaa20c6385f6fba1fcf2e8c2dbec0a1ac5efb1` from the local `@blackswampai/n8n-nodes-openanalytics` checkout. +PR #3 adds **312 production lines** and **500 test lines** over merged PR #2 +(`2865caa`). It supports site metadata, overview, timeseries, pages, and sources. +The admin coordinator delegates range handling, connection blocks, overview/chart +rendering, and report tables to four small modules. Successful sections remain +visible when another read fails. + The EmDash plugin now owns a native admin page, public tracker insertion, credential-bound installation snapshots, secure read transport, response validation/projection, and useful connection/error/freshness states. The n8n @@ -28,13 +35,15 @@ The size difference reflects those different responsibilities. EmDash production modules remain narrowly scoped: plugin/descriptor, connection state, configuration/settings, OpenAnalytics transport/errors/types, tracker -fragment, and one admin page. PR #2 adds no production dependencies, custom +fragment, and native admin modules. PR #3 adds no production dependencies, custom browser bundle, chart library, application framework, polling, or shared cache. `@emdash-cms/blocks@1.0.1` is a development dependency for type-only authoring and upstream response validation in tests; EmDash provides its renderer at runtime. -Analytics use exactly two HTTP reads per requested overview: overview (including -its server-provided preceding-period totals) and timeseries. Revalidation adds +Analytics use exactly four HTTP reads per interaction: overview (including +its server-provided preceding-period totals), timeseries, pages, and sources. +All reuse one requested interval and timezone. Pages and sources each request +the first ten rows ranked by views. Revalidation adds one site read. Public page rendering adds no read-key requests. A transient revalidation failure returns its error and preserves a matching tracker snapshot without starting additional analytics requests. @@ -43,3 +52,27 @@ To reproduce the line counts, enumerate the directories above, include only `.ts` files, and sum their physical lines. For baseline comparison, read those same files from `git show a9e69a2:`; for n8n, read files at the pinned commit. Apply the same formatting/measurement convention in future PRs. + +| Implementation | Runtime dependencies | Development dependencies | Host peer | +| ----------------------- | -------------------: | -----------------------: | -------------- | +| EmDash PR #2 | 0 | 8 | `emdash` | +| EmDash PR #3 | 0 | 14 | `emdash` | +| n8n OpenAnalytics 0.1.1 | 0 | 7 | `n8n-workflow` | + +PR #3 adds only development tooling: Astro, its Node and React adapters and React peers +for EmDash's host admin, and Playwright. The plugin still uses native Block Kit +and has no browser entrypoint. The React dependencies serve EmDash itself in +the demo; they add no React application to the plugin. The demo runs an actual +EmDash instance with an isolated temporary SQLite database and a loopback +OpenAnalytics HTTP fixture. Screenshots come from its authenticated admin page +and are checked for credential exposure before being retained. Demo code and +screenshots are excluded from npm. + +Package sizes are measured with `npm pack --ignore-scripts --dry-run --json` +after building; packed size is the compressed tarball, not dependency install +size. EmDash PR #3 packs to **about 23.7 kB** (decimal), compared with +**19.3 kB** for PR #2. The existing n8n checkout at the pinned commit packs to +**8,919 bytes**. +Its package includes compiled workflow operations, source maps, and icons; the +EmDash package includes the compiled plugin, declarations, README, and two +contract/footprint documents. Package size reflects those different contents. diff --git a/docs/screenshots/openanalytics-narrow.png b/docs/screenshots/openanalytics-narrow.png new file mode 100644 index 0000000000000000000000000000000000000000..77fcee4760da64078ba25f1d969a5c6abdaecbd5 GIT binary patch literal 111550 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 gX&{3QlysOGu1DVdFIFVdQ&MBb@09@|f+W-In literal 0 HcmV?d00001 diff --git a/docs/screenshots/openanalytics-overview.png b/docs/screenshots/openanalytics-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..190d2504a8c10b852ddb336ed70e8f537ae0a5a3 GIT binary patch literal 117669 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ΜM`a?xG__yxF6$Oj^GdK4TyFLpC5K$_*D5i$S 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

H?t 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.12.0'} @@ -2614,6 +2637,11 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3160,6 +3188,16 @@ packages: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} + playwright-core@1.61.1: + resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.61.1: + resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} + engines: {node: '>=18'} + hasBin: true + postcss@8.5.28: resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} @@ -3393,6 +3431,9 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} + server-destroy@1.0.1: + resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -3987,6 +4028,15 @@ snapshots: github-slugger: 2.0.0 satteri: 0.10.5 + '@astrojs/node@11.1.6(astro@7.3.5(@types/node@24.10.1))': + dependencies: + '@astrojs/internal-helpers': 0.11.0 + astro: 7.3.5(@types/node@24.10.1) + send: 1.2.1 + server-destroy: 1.0.1 + transitivePeerDependencies: + - supports-color + '@astrojs/prism@4.0.2': dependencies: prismjs: 1.30.0 @@ -6351,6 +6401,9 @@ snapshots: fresh@2.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -6861,6 +6914,14 @@ snapshots: pkce-challenge@5.0.1: {} + playwright-core@1.61.1: {} + + playwright@1.61.1: + dependencies: + playwright-core: 1.61.1 + optionalDependencies: + fsevents: 2.3.2 + postcss@8.5.28: dependencies: nanoid: 3.3.19 @@ -7226,6 +7287,8 @@ snapshots: transitivePeerDependencies: - supports-color + server-destroy@1.0.1: {} + setprototypeof@1.2.0: {} sharp@0.35.5(@types/node@24.10.1): diff --git a/scripts/check-package.mjs b/scripts/check-package.mjs index 4368e4c..48f7b11 100644 --- a/scripts/check-package.mjs +++ b/scripts/check-package.mjs @@ -1,6 +1,9 @@ import assert from "node:assert/strict"; +import { execFileSync } from "node:child_process"; +import { mkdtempSync, rmSync } from "node:fs"; import { readdir, readFile } from "node:fs/promises"; -import { resolve } from "node:path"; +import { tmpdir } from "node:os"; +import { join, resolve } from "node:path"; const root = resolve(import.meta.dirname, ".."); const pkg = JSON.parse(await readFile(resolve(root, "package.json"), "utf8")); @@ -33,4 +36,23 @@ for (const file of await readdir(resolve(root, "dist"))) { const contents = await readFile(resolve(root, "dist", file), "utf8"); assert(!/oa_sk_[A-Za-z0-9_-]{8,}/.test(contents), `Private credential in ${file}`); } -console.log("Package exports, native metadata, and artifact credential scan passed."); +const cache = mkdtempSync(join(tmpdir(), "openanalytics-package-check-")); +let packed; +try { + [packed] = JSON.parse( + execFileSync("npm", ["pack", "--ignore-scripts", "--dry-run", "--json", "--cache", cache], { + cwd: root, + encoding: "utf8", + stdio: ["ignore", "pipe", "pipe"], + }), + ); +} finally { + rmSync(cache, { recursive: true, force: true }); +} +for (const { path } of packed.files) { + assert(!/^(demo|scripts|tests)\//.test(path), `Development fixture packed: ${path}`); + assert(!path.startsWith("docs/screenshots/"), `Screenshot packed: ${path}`); + const contents = await readFile(resolve(root, path), "utf8"); + assert(!/oa_sk_[A-Za-z0-9_-]{8,}/.test(contents), `Private credential packed: ${path}`); +} +console.log("Package exports, native metadata, packed files, and artifact credential scan passed."); diff --git a/scripts/demo-openanalytics.mjs b/scripts/demo-openanalytics.mjs new file mode 100644 index 0000000..384f745 --- /dev/null +++ b/scripts/demo-openanalytics.mjs @@ -0,0 +1,208 @@ +import { createServer } from "node:http"; + +const PORT = Number(process.env.OA_FIXTURE_PORT ?? 4389); +const RUN_ID = process.env.OA_FIXTURE_RUN_ID ?? "demo-only"; +const SYNTHETIC_KEY = "oa_sk_demo_fixture_only_00000000000000000000000000000000"; +const STABLE_NOW = "2026-09-29T15:45:00.000Z"; +const SERIES_VALUES = [58, 72, 64, 91, 106, 88, 112, 94, 126, 119, 101, 138, 147, 168]; +const observedReads = []; + +function send(res, status, body) { + res.writeHead(status, { "content-type": "application/json; charset=utf-8" }); + res.end(JSON.stringify(body)); +} + +function requestInfo(req, report = false) { + const url = new URL(req.url ?? "/", `http://127.0.0.1:${PORT}`); + const from = url.searchParams.get("from") ?? "2026-08-30T16:00:00.000Z"; + const to = url.searchParams.get("to") ?? "2026-09-29T16:00:00.000Z"; + const span = Date.parse(to) - Date.parse(from); + const prior = { from: new Date(Date.parse(from) - span).toISOString(), to: from }; + const timezone = url.searchParams.get("timezone") ?? "America/New_York"; + const isComparison = !report && url.searchParams.get("compare") === "true"; + return { + from, + to, + limit: Number(url.searchParams.get("limit") ?? 10), + meta: { + requested_range: { from, to }, + effective_range: { from, to }, + timezone, + resolution: url.searchParams.get("resolution") ?? (report ? "day" : "hour"), + data_sources: ["live"], + accuracy: "exact", + freshness: { state: "ok", watermark: STABLE_NOW, as_of: STABLE_NOW }, + comparison_range: isComparison ? prior : null, + truncated: false, + cached: false, + partial: false, + }, + }; +} + +const server = createServer((req, res) => { + if (new URL(req.url ?? "/", `http://127.0.0.1:${PORT}`).pathname === "/__health") { + const supplied = new URL(req.url ?? "/", `http://127.0.0.1:${PORT}`).searchParams.get("run"); + return supplied === RUN_ID + ? send(res, 200, { ok: true, run: RUN_ID }) + : send(res, 404, { error: { code: "NOT_FOUND" } }); + } + if (req.url === "/__requests") return send(res, 200, observedReads); + if (req.headers.authorization !== `Bearer ${SYNTHETIC_KEY}`) + return send(res, 401, { error: { code: "UNAUTHORIZED", message: "fixture auth required" } }); + if (req.method !== "GET") return send(res, 405, { error: { code: "METHOD_NOT_ALLOWED" } }); + const path = new URL(req.url ?? "/", `http://127.0.0.1:${PORT}`).pathname; + if (path.startsWith("/v1/read/analytics/")) { + const url = new URL(req.url ?? "/", `http://127.0.0.1:${PORT}`); + observedReads.push({ + path, + from: url.searchParams.get("from"), + to: url.searchParams.get("to"), + timezone: url.searchParams.get("timezone"), + limit: url.searchParams.get("limit"), + }); + } + if (path === "/v1/read/site") { + return send(res, 200, { + site_id: "site_demo_openanalytics", + slug: "emdash-demo", + name: "EmDash Demo", + status: "active", + install: { + tracking_key: "oa_pk_demo_tracking_00000000000000000000000000000000", + script_url: `http://127.0.0.1:${PORT}/tracker.js`, + collector_url: `http://127.0.0.1:${PORT}/v1/collect`, + }, + }); + } + if (path === "/v1/read/analytics/overview") { + const request = requestInfo(req); + return send(res, 200, { + totals: { visitors: 1284, pageviews: 2911, events: 4201, billable_events: 4201 }, + comparison: request.meta.comparison_range + ? { totals: { visitors: 1102, pageviews: 2458, events: 3660, billable_events: 3660 } } + : null, + meta: request.meta, + }); + } + if (path === "/v1/read/analytics/timeseries") { + const request = requestInfo(req); + const from = Date.parse(request.from); + const span = Date.parse(request.to) - from; + const series = SERIES_VALUES.map((visitors, i) => { + const bucket = new Date(from + span * ((i + 0.5) / SERIES_VALUES.length)); + return { + bucket: bucket.toISOString(), + visitors, + pageviews: visitors * 2 + (i % 3) * 5, + events: visitors * 3 + (i % 4) * 7, + }; + }); + return send(res, 200, { series, meta: request.meta, comparison: null }); + } + if (path === "/v1/read/analytics/pages") { + const request = requestInfo(req, true); + return send(res, 200, { + items: [ + { + page_path: "/", + views: 1482, + visitors: 904, + entrances: 514, + exits: 302, + bounces: 201, + bounce_rate: 0.392, + }, + { + page_path: "/blog/openanalytics", + views: 712, + visitors: 518, + entrances: 210, + exits: 177, + bounces: 86, + bounce_rate: 0.41, + }, + { + page_path: "/workflows/content-operations", + views: 431, + visitors: 302, + entrances: 108, + exits: 95, + bounces: 39, + bounce_rate: 0.36, + }, + { + page_path: "/contact", + views: 219, + visitors: 184, + entrances: 97, + exits: 81, + bounces: 44, + bounce_rate: 0.45, + }, + ].slice(0, request.limit), + meta: request.meta, + }); + } + if (path === "/v1/read/analytics/sources") { + const request = requestInfo(req, true); + return send(res, 200, { + items: [ + { + referrer_domain: "", + utm_source: "newsletter", + utm_medium: "email", + utm_campaign: "autumn_launch", + views: 511, + visitors: 482, + }, + { + referrer_domain: "", + utm_source: "", + utm_medium: "", + utm_campaign: "", + views: 393, + visitors: 361, + }, + { + referrer_domain: "google.com", + utm_source: "", + utm_medium: "", + utm_campaign: "", + views: 327, + visitors: 299, + }, + { + referrer_domain: "reddit.com", + utm_source: "", + utm_medium: "", + utm_campaign: "", + views: 205, + visitors: 177, + }, + { + referrer_domain: "linkedin.com", + utm_source: "", + utm_medium: "social", + utm_campaign: "openanalytics_guide", + views: 144, + visitors: 126, + }, + { + referrer_domain: "github.com", + utm_source: "", + utm_medium: "", + utm_campaign: "", + views: 92, + visitors: 84, + }, + ].slice(0, request.limit), + meta: request.meta, + }); + } + return send(res, 404, { error: { code: "NOT_FOUND" } }); +}); + +server.listen(PORT, "127.0.0.1", () => console.log(`[oa-fixture] listening on 127.0.0.1:${PORT}`)); +for (const signal of ["SIGINT", "SIGTERM"]) + process.on(signal, () => server.close(() => process.exit(0))); diff --git a/scripts/screenshot-demo.mjs b/scripts/screenshot-demo.mjs new file mode 100644 index 0000000..757b2d4 --- /dev/null +++ b/scripts/screenshot-demo.mjs @@ -0,0 +1,369 @@ +import { spawn } from "node:child_process"; +import { randomUUID } from "node:crypto"; +import { mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises"; +import { createServer } from "node:http"; +import { tmpdir } from "node:os"; +import { join, resolve } from "node:path"; +import { setTimeout as delay } from "node:timers/promises"; +import { fileURLToPath } from "node:url"; + +import { chromium } from "playwright"; + +const ROOT = resolve(fileURLToPath(new URL("..", import.meta.url))); +const SCREENSHOTS = join(ROOT, "docs/screenshots"); +const usedPorts = new Set(); +async function availablePort() { + while (true) { + const port = await new Promise((resolvePort, rejectPort) => { + const socket = createServer(); + socket.once("error", rejectPort); + socket.listen(0, "127.0.0.1", () => { + const address = socket.address(); + if (!address || typeof address === "string") + return rejectPort(new Error("Could not reserve a port")); + socket.close((error) => (error ? rejectPort(error) : resolvePort(address.port))); + }); + }); + if (usedPorts.has(port)) continue; + usedPorts.add(port); + return port; + } +} +const OA_PORT = await availablePort(); +const PORT = await availablePort(); +const runId = randomUUID(); +const BASE = `http://127.0.0.1:${PORT}`; +const FIXTURE_BASE = `http://127.0.0.1:${OA_PORT}`; +const SYNTHETIC_KEY = "oa_sk_demo_fixture_only_00000000000000000000000000000000"; +const SECRET_PATTERN = /oa_sk_[a-zA-Z0-9_-]{12,}/g; +const staging = await mkdtemp(join(tmpdir(), "openanalytics-ui-shot-")); +const childLogs = []; +const responseText = []; +const children = []; +let browser; + +function start(command, args, label, env = {}) { + const child = spawn(command, args, { + cwd: label === "emdash" ? join(ROOT, "demo") : ROOT, + env: { ...process.env, ...env }, + stdio: ["ignore", "pipe", "pipe"], + }); + children.push(child); + for (const stream of [child.stdout, child.stderr]) { + let pending = ""; + stream.setEncoding("utf8"); + stream.on("data", (chunk) => { + pending += chunk; + const lines = pending.split("\n"); + pending = lines.pop() ?? ""; + for (const line of lines) childLogs.push(`[${label}] ${line}`); + }); + } + return child; +} + +async function waitFor(url, child, label, matchRunId = false) { + const deadline = Date.now() + 90_000; + while (Date.now() < deadline) { + if (child.exitCode !== null) + throw new Error( + `${label} exited (${child.exitCode}) before becoming ready.\n${childLogs.slice(-30).join("\n")}`, + ); + let response; + try { + response = await fetch(url, { signal: AbortSignal.timeout(1500) }); + } catch { + // The process has not bound its loopback port yet. + await delay(250); + continue; + } + if (!response.ok) { + if (matchRunId && response.status === 404) + throw new Error(`${label} readiness route was not found at ${url}.`); + await delay(250); + continue; + } + if (matchRunId) { + const body = await response.json(); + if (body.run !== runId) throw new Error(`${label} readiness token did not match this run.`); + } + if (child.exitCode !== null) throw new Error(`${label} process exited after its health check.`); + return; + } + throw new Error(`${label} did not become ready at ${url}.\n${childLogs.slice(-30).join("\n")}`); +} + +async function requireOk(response, label) { + const body = await response.text(); + responseText.push(`${label}: ${body}`); + if (!response.ok()) throw new Error(`${label} failed (${response.status()})`); + try { + return JSON.parse(body); + } catch { + throw new Error(`${label} returned invalid JSON`); + } +} + +function assertNoSecret(value, label) { + const text = Buffer.isBuffer(value) + ? value.toString("latin1") + : typeof value === "string" + ? value + : JSON.stringify(value); + const variants = Buffer.isBuffer(value) + ? [text, value.toString("utf8"), value.toString("base64")] + : [text]; + try { + variants.push(decodeURIComponent(text)); + } catch { + /* Not percent encoded. */ + } + try { + variants.push(Buffer.from(text, "base64").toString("utf8")); + } catch { + /* Not base64. */ + } + for (const candidate of variants) { + if (SYNTHETIC_KEY && candidate.includes(SYNTHETIC_KEY)) + throw new Error(`Fixture credential appeared in ${label}`); + if (SECRET_PATTERN.test(candidate)) throw new Error(`Credential-like value found in ${label}`); + SECRET_PATTERN.lastIndex = 0; + } +} + +async function getSession(page) { + await page.goto(`${BASE}/_emdash/api/setup/dev-bypass?redirect=/_emdash/api/auth/me`); + await page.waitForURL((url) => url.pathname === "/_emdash/api/auth/me", { timeout: 30_000 }); + const dismissed = await page.request.post(`${BASE}/_emdash/api/auth/me`, { + headers: { "X-EmDash-Request": "1" }, + data: { action: "dismissWelcome" }, + }); + if (!dismissed.ok()) + throw new Error(`Could not clear first-login welcome (${dismissed.status()})`); +} + +async function waitForStableChart(page) { + await page.waitForFunction( + () => { + const charts = [...document.querySelectorAll("canvas")].filter((canvas) => { + const rect = canvas.getBoundingClientRect(); + return rect.width >= 400 && rect.height >= 150; + }); + if (charts.length === 0) return false; + let pixels; + try { + pixels = charts.map((canvas) => canvas.toDataURL()).join(":"); + } catch { + return false; + } + const windowWithChartState = window; + const state = windowWithChartState.oaChartCapture; + if (!state || state.pixels !== pixels) { + windowWithChartState.oaChartCapture = { pixels, stableFrames: 0 }; + return false; + } + state.stableFrames += 1; + return state.stableFrames >= 90; + }, + undefined, + { timeout: 30_000, polling: "raf" }, + ); +} + +try { + if (new URL(BASE).hostname !== "127.0.0.1" || new URL(FIXTURE_BASE).hostname !== "127.0.0.1") + throw new Error("The screenshot demo must bind to loopback only."); + start(process.execPath, [join(ROOT, "scripts/demo-openanalytics.mjs")], "oa-fixture", { + OA_FIXTURE_PORT: String(OA_PORT), + OA_FIXTURE_RUN_ID: runId, + }); + await waitFor( + `${FIXTURE_BASE}/__health?run=${runId}`, + children[0], + "OpenAnalytics fixture", + true, + ); + start( + join(ROOT, "node_modules/.bin/astro"), + ["dev", "--no-background", "--host", "127.0.0.1", "--port", String(PORT)], + "emdash", + { + HOST: "127.0.0.1", + TZ: "America/New_York", + EMDASH_DEMO_DB_URL: `file:${join(staging, "demo.db")}`, + EMDASH_ENCRYPTION_KEY: "emdash_enc_v1_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + ASTRO_DEV_BACKGROUND: "1", + EMDASH_DEMO_PORT: String(PORT), + EMDASH_DEMO_RUN_ID: runId, + }, + ); + await waitFor(`${BASE}/demo-health?run=${runId}`, children[1], "EmDash", true); + + browser = await chromium.launch({ headless: true }); + const context = await browser.newContext({ + viewport: { width: 1440, height: 1100 }, + deviceScaleFactor: 1, + }); + const page = await context.newPage(); + const responseScans = []; + page.on("response", (response) => { + if (!response.url().startsWith(BASE)) return; + responseScans.push( + (async () => { + try { + const type = response.headers()["content-type"] ?? ""; + if (!/(json|text|javascript|xml|svg)/i.test(type)) return; + responseText.push(`${response.url()}: ${await response.text()}`); + } catch { + /* Request was cancelled or returned a non-text body. */ + } + })(), + ); + }); + await getSession(page); + const headers = { "X-EmDash-Request": "1", "Content-Type": "application/json", Origin: BASE }; + const settings = await page.request.put( + `${BASE}/_emdash/api/admin/plugins/emdash-openanalytics/settings`, + { + headers, + data: { + values: { + apiUrl: FIXTURE_BASE, + privateReadKey: SYNTHETIC_KEY, + trackingEnabled: true, + timezone: "America/New_York", + }, + }, + }, + ); + await requireOk(settings, "seed synthetic plugin settings"); + const validation = await page.request.post( + `${BASE}/_emdash/api/plugins/emdash-openanalytics/validate-connection`, + { + headers, + data: {}, + }, + ); + const validationJson = await requireOk(validation, "validate fixture connection"); + const validationResult = validationJson.data ?? validationJson; + if (validationResult.success !== true) + throw new Error("The fixture connection did not validate successfully."); + + const requested = []; + page.on("request", (request) => { + if (request.url().includes("/_emdash/api/plugins/emdash-openanalytics")) + requested.push(request.url()); + }); + await page.goto(`${BASE}/_emdash/admin/plugins/emdash-openanalytics/analytics`); + await page.locator("text=Top Pages").waitFor({ state: "visible", timeout: 30_000 }); + await page.locator("text=Traffic Sources").waitFor({ state: "visible", timeout: 30_000 }); + await page.getByText("1284", { exact: true }).waitFor({ state: "visible" }); + await page.getByText("EmDash Demo", { exact: true }).waitFor({ state: "visible" }); + await page.locator("canvas").first().waitFor({ state: "visible", timeout: 30_000 }); + await waitForStableChart(page); + await Promise.all(responseScans); + + // Inspect exactly the rendered page contents and all returned text before any PNG is retained. + const desktopText = await page.locator("body").innerText(); + const desktopHtml = await page.content(); + assertNoSecret(desktopText, "desktop rendered text"); + assertNoSecret(desktopHtml, "desktop page HTML"); + for (const item of responseText) assertNoSecret(item, "browser HTML/API response body"); + for (const line of childLogs) assertNoSecret(line, "demo process logs"); + const readLogResponse = await fetch(`${FIXTURE_BASE}/__requests`); + const readLog = await readLogResponse.json(); + const analyticsReads = readLog.filter((item) => item.path.startsWith("/v1/read/analytics/")); + const relevant = [ + "/v1/read/analytics/overview", + "/v1/read/analytics/timeseries", + "/v1/read/analytics/pages", + "/v1/read/analytics/sources", + ]; + for (const path of relevant) { + const entry = analyticsReads.find((item) => item.path === path); + if (!entry || !entry.from || !entry.to || entry.timezone !== "America/New_York") + throw new Error(`Expected range and timezone were not sent to ${path}.`); + if (path.endsWith("/pages") || path.endsWith("/sources")) { + if (entry.limit !== "10") throw new Error(`Expected fixed limit=10 on ${path}.`); + } + } + if (new Set(analyticsReads.map(({ from, to }) => `${from}|${to}`)).size !== 1) + throw new Error("Overview and report calls did not share one selected range."); + await mkdir(staging, { recursive: true }); + await waitForStableChart(page); + await page.screenshot({ path: join(staging, "openanalytics-overview.png"), fullPage: false }); + await page.getByText("Top Pages", { exact: true }).scrollIntoViewIfNeeded(); + await waitForStableChart(page); + await page.screenshot({ path: join(staging, "openanalytics-reports.png"), fullPage: false }); + + await page.setViewportSize({ width: 640, height: 1800 }); + await page.evaluate(() => { + delete window.oaChartCapture; + window.scrollTo(0, 0); + for (const element of document.querySelectorAll("*")) { + const style = getComputedStyle(element); + if ( + element.scrollHeight > element.clientHeight && + (style.overflowY === "auto" || style.overflowY === "scroll") + ) + element.scrollTop = 0; + } + }); + await page.getByRole("heading", { name: "OpenAnalytics" }).waitFor({ state: "visible" }); + await waitForStableChart(page); + await Promise.all(responseScans); + const narrowText = await page.locator("body").innerText(); + const narrowHtml = await page.content(); + assertNoSecret(narrowText, "narrow rendered text"); + assertNoSecret(narrowHtml, "narrow page HTML"); + await page.screenshot({ path: join(staging, "openanalytics-narrow.png"), fullPage: false }); + assertNoSecret( + await readFile(join(staging, "openanalytics-overview.png")), + "overview screenshot bytes", + ); + assertNoSecret( + await readFile(join(staging, "openanalytics-reports.png")), + "reports screenshot bytes", + ); + assertNoSecret( + await readFile(join(staging, "openanalytics-narrow.png")), + "narrow screenshot bytes", + ); + if (requested.length === 0) + throw new Error("The actual plugin admin route did not make an analytics request."); + await mkdir(SCREENSHOTS, { recursive: true }); + for (const name of [ + "openanalytics-overview.png", + "openanalytics-reports.png", + "openanalytics-narrow.png", + ]) + await writeFile(join(SCREENSHOTS, name), await readFile(join(staging, name))); + console.log(`Screenshots saved to ${SCREENSHOTS}`); +} catch (error) { + if (error instanceof Error) { + error.message = error.message.replace(SECRET_PATTERN, "[REDACTED]"); + if (error.stack) error.stack = error.stack.replace(SECRET_PATTERN, "[REDACTED]"); + // Keep upstream response bodies out of surfaced error causes. + // oxlint-disable-next-line preserve-caught-error -- Raw errors may contain credentials. + throw new Error(error.message); + } + // oxlint-disable-next-line preserve-caught-error -- Raw values may contain credentials. + throw new Error("Unknown screenshot failure"); +} finally { + if (browser) await browser.close().catch(() => {}); + for (const child of children) child.kill("SIGTERM"); + await Promise.all( + children.map( + (child) => + new Promise((resolveDone) => { + if (child.exitCode !== null || child.signalCode !== null) return resolveDone(); + child.once("exit", resolveDone); + setTimeout(() => { + child.kill("SIGKILL"); + resolveDone(); + }, 3000).unref(); + }), + ), + ); + await rm(staging, { recursive: true, force: true }); +} diff --git a/src/admin/connection.ts b/src/admin/connection.ts new file mode 100644 index 0000000..edc4c82 --- /dev/null +++ b/src/admin/connection.ts @@ -0,0 +1,128 @@ +import type { Block } from "@emdash-cms/blocks"; + +import { containsPrivateKey } from "../openanalytics/client"; +import { dateText, type DateRange } from "./ranges"; + +export function displayApiUrl(value: unknown): string { + if (typeof value !== "string" || !value.trim()) return "Not configured"; + if (containsPrivateKey(value)) return "Invalid API URL"; + try { + const parsed = new URL(value.trim()); + if ( + parsed.username || + parsed.password || + parsed.search || + parsed.hash || + !["http:", "https:"].includes(parsed.protocol) + ) + return "Invalid API URL"; + return parsed.toString().replace(/\/$/, ""); + } catch { + return "Invalid API URL"; + } +} + +export function connectionBlocks(args: { + apiUrl: string; + site?: { + name: string; + status: string; + install: { hasTrackingKey: boolean; trackerReady: boolean }; + }; + trackingEnabled: boolean; + validatedAt?: string; + needsValidation?: boolean; + notConfigured?: boolean; + error?: string; +}): Block[] { + let title = args.notConfigured + ? "Not configured" + : args.needsValidation + ? "Needs validation" + : "Connected"; + let description = args.notConfigured + ? "Add an OpenAnalytics private read key in plugin settings to connect this site." + : args.needsValidation + ? "Validate your private read key to connect this EmDash site." + : "Last validation confirmed this connection."; + let variant: "default" | "alert" | "error" = + args.notConfigured || args.needsValidation ? "alert" : "default"; + if (args.error) { + title = "Connection needs attention"; + description = args.error; + variant = "error"; + } else if (args.site && args.site.status !== "active") { + title = `Connected · site ${args.site.status}`; + description = "OpenAnalytics reports that this site is not active."; + variant = "alert"; + } + const install = args.site?.install; + const tracking = !install?.hasTrackingKey + ? "No tracking key" + : !install.trackerReady + ? "Tracking installation incomplete" + : !args.trackingEnabled + ? "Tracking disabled" + : args.site?.status === "active" + ? "Tracking active" + : args.site?.status === "suspended" + ? "Tracker installed · collection suspended" + : "Tracker installed · collection unavailable"; + return [ + { type: "banner", title, description, variant }, + { + type: "fields", + fields: [ + { label: "Site", value: args.site?.name ?? "—" }, + { label: "Tracking", value: args.site ? tracking : "Not validated" }, + { label: "API", value: args.apiUrl }, + { + label: "Last validated", + value: args.site + ? (dateText(args.validatedAt ?? null, "UTC") ?? "Not recorded") + : "Never", + }, + ], + }, + ]; +} + +export function controls( + selected: DateRange, + options: { validate?: boolean; retry?: boolean } = {}, +): Block { + const labels: Record = { + "24h": "Last 24 hours", + "7d": "Last 7 days", + "30d": "Last 30 days", + "90d": "Last 90 days", + }; + const elements: Extract["elements"] = [ + { + type: "select", + action_id: "range", + label: "Date range", + initial_value: selected, + options: (["24h", "7d", "30d", "90d"] as const).map((value) => ({ + label: labels[value], + value, + })), + }, + ]; + if (options.retry) + elements.push({ + type: "button", + action_id: "retry", + label: "Retry analytics", + style: "primary", + value: { range: selected }, + }); + elements.push({ + type: "button", + action_id: "revalidate", + label: options.validate ? "Validate connection" : "Revalidate connection", + style: "secondary", + value: { range: selected }, + }); + return { type: "actions", elements }; +} diff --git a/src/admin/overview.ts b/src/admin/overview.ts new file mode 100644 index 0000000..3e34e0d --- /dev/null +++ b/src/admin/overview.ts @@ -0,0 +1,141 @@ +import type { Block } from "@emdash-cms/blocks"; + +import type { + AnalyticsOverviewResponse, + AnalyticsTimeseriesResponse, +} from "../openanalytics/types"; +import { dateText, rangeText } from "./ranges"; + +const STATUS = { + ok: "current", + no_data: "no data", + stale: "delayed", + degraded: "status unavailable", +} as const; + +export function renderOverview(args: { + timezone: string; + overview?: AnalyticsOverviewResponse; + timeseries?: AnalyticsTimeseriesResponse; + overviewError?: string; + timeseriesError?: string; +}): Block[] { + const blocks: Block[] = []; + if (args.overview) { + const overview = args.overview; + blocks.push({ + type: "stats", + items: (["visitors", "pageviews", "events"] as const).map((metric) => ({ + label: { visitors: "Visitors", pageviews: "Pageviews", events: "Events" }[metric], + value: overview.totals[metric], + ...(overview.comparison + ? { description: `Previous period: ${overview.comparison.totals[metric]}` } + : {}), + })), + }); + const freshness = args.overview.meta.freshness; + const watermark = freshness ? dateText(freshness.watermark, args.timezone) : null; + blocks.push({ + type: "context", + text: watermark + ? `Latest rolled-up data: ${watermark}.` + : "Latest rolled-up data timestamp is unavailable.", + }); + blocks.push({ + type: "context", + text: `Totals cover ${rangeText(args.overview.meta.effective_range, args.timezone)}.`, + }); + if (args.overview.comparison && args.overview.meta.comparison_range) { + blocks.push({ + type: "context", + text: `Previous period: ${rangeText(args.overview.meta.comparison_range, args.timezone)}.`, + }); + } + if (freshness) + blocks.push({ type: "context", text: `Data status: totals ${STATUS[freshness.state]}.` }); + const warning = metaWarning(args.overview.meta); + if (warning) + blocks.push({ + type: "banner", + title: "Overview data status", + description: warning, + variant: "alert", + }); + } else if (args.overviewError) { + blocks.push({ + type: "banner", + title: "Overview unavailable", + description: args.overviewError, + variant: "error", + }); + } + + if (args.timeseries) { + blocks.push({ + type: "chart", + config: { + chart_type: "timeseries", + style: "line", + x_axis_name: "Time", + y_axis_name: "Count", + series: [ + { + name: "Visitors", + data: args.timeseries.series.map((p) => [Date.parse(p.bucket), p.visitors]), + }, + { + name: "Pageviews", + data: args.timeseries.series.map((p) => [Date.parse(p.bucket), p.pageviews]), + }, + ], + }, + }); + blocks.push({ + type: "context", + text: `Chart covers ${rangeText(args.timeseries.meta.effective_range, args.timezone)}. Buckets use ${args.timezone}; timestamps are displayed in the browser timezone.`, + }); + if (args.timeseries.meta.freshness) + blocks.push({ + type: "context", + text: `Data status: chart ${STATUS[args.timeseries.meta.freshness.state]}.`, + }); + const warning = metaWarning(args.timeseries.meta); + if (warning) + blocks.push({ + type: "banner", + title: "Chart data status", + description: warning, + variant: "alert", + }); + } else if (args.timeseriesError) { + blocks.push({ + type: "banner", + title: "Chart unavailable", + description: args.timeseriesError, + variant: "error", + }); + } + return blocks; +} + +function metaWarning(meta: AnalyticsOverviewResponse["meta"]): string | null { + if (meta.freshness?.state === "no_data") + return "No analytics data is available for part or all of this range."; + const delayed = + meta.freshness?.state === "stale" || + meta.freshness?.state === "degraded" || + meta.partial || + meta.truncated; + const imported = meta.data_sources.includes("imported"); + const estimated = meta.accuracy !== "exact"; + if (delayed && imported) + return "Some imported data may be delayed or incomplete while OpenAnalytics finishes processing."; + if (delayed) + return "Results may be delayed or incomplete while OpenAnalytics finishes processing events."; + if (imported && estimated) + return "This range includes imported analytics. Some values are estimated or follow the import provider's definitions."; + if (imported) return "This range includes imported analytics data."; + if (estimated) return "OpenAnalytics marks some values as estimated or provider-defined."; + if (meta.freshness === null) return "Freshness information is unavailable for this response."; + return null; +} diff --git a/src/admin/page.ts b/src/admin/page.ts index d8d4baa..18e1cfd 100644 --- a/src/admin/page.ts +++ b/src/admin/page.ts @@ -10,17 +10,15 @@ import { type SiteSnapshot, validateConnection, } from "../connection"; -import { containsPrivateKey, getOverview, getTimeseries } from "../openanalytics/client"; +import { getOverview, getPages, getSources, getTimeseries } from "../openanalytics/client"; import { OpenAnalyticsError } from "../openanalytics/errors"; -import type { - AnalyticsReadQuery, - AnalyticsOverviewResponse, - AnalyticsTimeseriesResponse, -} from "../openanalytics/types"; +import type { AnalyticsReadQuery } from "../openanalytics/types"; import { DEFAULT_API_URL, type OpenAnalyticsConfig } from "../settings/config"; +import { connectionBlocks, controls, displayApiUrl } from "./connection"; +import { renderOverview } from "./overview"; +import { queryFor, rangeLabel, RANGES, selectedRange, type DateRange } from "./ranges"; +import { renderPages, renderSources } from "./reports"; -const RANGES = ["24h", "7d", "30d", "90d"] as const; -type DateRange = (typeof RANGES)[number]; type Input = | { type: "page_load"; page: string } | { type: "block_action"; action_id: string; value?: unknown; page?: string }; @@ -42,56 +40,6 @@ function parseInput(value: unknown): Input | null { return null; } -function range(value: unknown): DateRange { - if (typeof value === "string" && RANGES.includes(value as DateRange)) return value as DateRange; - if (record(value) && typeof value.range === "string" && RANGES.includes(value.range as DateRange)) - return value.range as DateRange; - return "30d"; -} - -function displayApiUrl(value: unknown): string { - if (typeof value !== "string" || !value.trim()) return "Not configured"; - if (containsPrivateKey(value)) return "Invalid API URL"; - try { - const parsed = new URL(value.trim()); - if ( - parsed.username || - parsed.password || - parsed.search || - parsed.hash || - !["http:", "https:"].includes(parsed.protocol) - ) - return "Invalid API URL"; - return parsed.toString().replace(/\/$/, ""); - } catch { - return "Invalid API URL"; - } -} - -function queryFor(selected: DateRange, tz: string, now = Date.now()): AnalyticsReadQuery { - const ms: Record = { - "24h": 24 * 60 * 60 * 1000, - "7d": 7 * 24 * 60 * 60 * 1000, - "30d": 30 * 24 * 60 * 60 * 1000, - "90d": 90 * 24 * 60 * 60 * 1000, - }; - return { - from: new Date(now - ms[selected]).toISOString(), - to: new Date(now).toISOString(), - timezone: tz, - resolution: selected === "24h" ? "hour" : "day", - }; -} - -function label(selected: DateRange): string { - return { - "24h": "Last 24 hours", - "7d": "Last 7 days", - "30d": "Last 30 days", - "90d": "Last 90 days", - }[selected]; -} - function safeError(kind: unknown, retryAfterSeconds?: number): string { switch (kind) { case "analytics_forbidden": @@ -127,122 +75,6 @@ function errorCopy(error: unknown): string { : "OpenAnalytics is temporarily unavailable. Try again shortly."; } -function dateText(value: string | null, tz: string): string | null { - if (!value || !Number.isFinite(Date.parse(value))) return null; - return new Intl.DateTimeFormat(undefined, { - year: "numeric", - month: "short", - day: "numeric", - hour: "numeric", - minute: "2-digit", - timeZoneName: "short", - timeZone: tz, - }).format(new Date(value)); -} - -function rangeText(value: { from: string; to: string }, tz: string): string { - const from = dateText(value.from, tz); - const to = dateText(value.to, tz); - return from && to ? `${from} – ${to}` : "unavailable"; -} - -function connectionBlocks(args: { - apiUrl: string; - site?: { - name: string; - status: string; - install: { hasTrackingKey: boolean; trackerReady: boolean }; - }; - trackingEnabled: boolean; - validatedAt?: string; - needsValidation?: boolean; - notConfigured?: boolean; - error?: string; -}): Block[] { - let title = args.notConfigured - ? "Not configured" - : args.needsValidation - ? "Needs validation" - : "Connected"; - let description = args.notConfigured - ? "Add an OpenAnalytics private read key in plugin settings to connect this site." - : args.needsValidation - ? "Validate your private read key to connect this EmDash site." - : "Last validation confirmed this connection."; - let variant: "default" | "alert" | "error" = - args.notConfigured || args.needsValidation ? "alert" : "default"; - if (args.error) { - title = "Connection needs attention"; - description = args.error; - variant = "error"; - } else if (args.site && args.site.status !== "active") { - title = `Connected · site ${args.site.status}`; - description = "OpenAnalytics reports that this site is not active."; - variant = "alert"; - } - const install = args.site?.install; - const tracking = !install?.hasTrackingKey - ? "No tracking key" - : !install.trackerReady - ? "Tracking installation incomplete" - : !args.trackingEnabled - ? "Tracking disabled" - : args.site?.status === "active" - ? "Tracking active" - : "Tracking inactive"; - return [ - { type: "banner", title, description, variant }, - { - type: "fields", - fields: [ - { label: "Site", value: args.site?.name ?? "—" }, - { label: "Tracking", value: args.site ? tracking : "Not validated" }, - { label: "API", value: args.apiUrl }, - { - label: "Last validated", - value: args.site - ? (dateText(args.validatedAt ?? null, "UTC") ?? "Not recorded") - : "Never", - }, - ], - }, - ]; -} - -function controls( - selected: DateRange, - options: { validate?: boolean; retry?: boolean } = {}, -): Block { - const elements: Extract["elements"] = [ - { - type: "select", - action_id: "range", - label: "Date range", - initial_value: selected, - options: RANGES.map((value) => ({ label: label(value), value })), - }, - ]; - if (options.retry) - elements.push({ - type: "button", - action_id: "retry", - label: "Retry analytics", - style: "primary", - value: { range: selected }, - }); - elements.push({ - type: "button", - action_id: "revalidate", - label: options.validate ? "Validate connection" : "Revalidate connection", - style: "secondary", - value: { range: selected }, - }); - return { - type: "actions", - elements, - }; -} - function waitingPage( selected: DateRange, apiUrl: string, @@ -269,72 +101,48 @@ function waitingPage( }; } -function getMetaWarning( - response: AnalyticsOverviewResponse, - timeseries: AnalyticsTimeseriesResponse, -): string | null { - const metas = [response.meta, timeseries.meta]; - const unavailable = metas.some((meta) => meta.freshness === null); - const delayed = metas.some( - (meta) => - meta.freshness?.state === "stale" || - meta.freshness?.state === "degraded" || - meta.partial || - meta.truncated, - ); - const imported = metas.some((meta) => meta.data_sources.includes("imported")); - const estimated = metas.some((meta) => meta.accuracy !== "exact"); - if (metas.some((meta) => meta.freshness?.state === "no_data")) - return "No analytics data is available for part or all of this range."; - if (delayed && imported) - return "Some imported data may be delayed or incomplete while OpenAnalytics finishes processing."; - if (delayed) - return "Results may be delayed or incomplete while OpenAnalytics finishes processing events."; - if (imported && estimated) - return "This range includes imported analytics. Some values are estimated or follow the import provider's definitions."; - if (imported) return "This range includes imported analytics data."; - if (estimated) return "OpenAnalytics marks some values as estimated or provider-defined."; - if (unavailable) return "Freshness information is unavailable for part of this response."; - return null; +function timezoneFromSetting(value: unknown): { timezone: string; error: string | null } { + const raw = typeof value === "string" ? value.trim() : ""; + if (!raw) return { timezone: "UTC", error: null }; + try { + new Intl.DateTimeFormat("en", { timeZone: raw }).format(0); + return { timezone: raw, error: null }; + } catch { + return { + timezone: "UTC", + error: + "Analytics timezone is invalid. Set an IANA timezone such as America/New_York in plugin settings.", + }; + } } async function loadAnalytics( config: OpenAnalyticsConfig, snapshot: SiteSnapshot, selected: DateRange, - tz: string, + timezone: string, trackingEnabled: boolean, ): Promise { const site = safeConnectionSummary(snapshot.site); - const query = queryFor(selected, tz); - const overviewQuery: AnalyticsReadQuery = { ...query, resolution: "hour", compare: true }; - let overview: AnalyticsOverviewResponse; - let timeseries: AnalyticsTimeseriesResponse; - try { - [overview, timeseries] = await Promise.all([ - getOverview(config, overviewQuery), - getTimeseries(config, query), - ]); - } catch (error) { - return { - blocks: [ - { type: "header", text: "OpenAnalytics" }, - ...connectionBlocks({ - apiUrl: config.apiUrl, - site, - trackingEnabled, - validatedAt: snapshot.validatedAt, - }), - controls(selected, { retry: true }), - { - type: "banner", - title: "Analytics unavailable", - description: errorCopy(error), - variant: "error", - }, - ], - }; - } + const bounds = queryFor(selected, timezone); + const overviewQuery: AnalyticsReadQuery = { ...bounds, resolution: "hour", compare: true }; + const chartQuery: AnalyticsReadQuery = { + ...bounds, + resolution: selected === "24h" ? "hour" : "day", + }; + const reportQuery = { from: bounds.from, to: bounds.to, timezone, limit: 10 }; + const results = await Promise.allSettled([ + getOverview(config, overviewQuery), + getTimeseries(config, chartQuery), + getPages(config, reportQuery), + getSources(config, reportQuery), + ]); + const [overviewResult, chartResult, pagesResult, sourcesResult] = results; + const overview = overviewResult.status === "fulfilled" ? overviewResult.value : undefined; + const timeseries = chartResult.status === "fulfilled" ? chartResult.value : undefined; + const pages = pagesResult.status === "fulfilled" ? pagesResult.value : undefined; + const sources = sourcesResult.status === "fulfilled" ? sourcesResult.value : undefined; + const failures = results.some((result) => result.status === "rejected"); const blocks: Block[] = [ { type: "header", text: "OpenAnalytics" }, ...connectionBlocks({ @@ -343,79 +151,26 @@ async function loadAnalytics( trackingEnabled, validatedAt: snapshot.validatedAt, }), - controls(selected), - { type: "header", text: label(selected) }, - { - type: "context", - text: `Buckets use ${tz}; chart timestamps are displayed in the browser timezone.`, - }, - { - type: "stats", - items: (["visitors", "pageviews", "events"] as const).map((metric) => ({ - label: { visitors: "Visitors", pageviews: "Pageviews", events: "Events" }[metric], - value: overview.totals[metric], - ...(overview.comparison - ? { description: `Previous period: ${overview.comparison.totals[metric]}` } - : {}), - })), - }, - { - type: "chart", - config: { - chart_type: "timeseries", - style: "line", - x_axis_name: "Time", - y_axis_name: "Count", - series: [ - { - name: "Visitors", - data: timeseries.series.map( - (p) => [Date.parse(p.bucket), p.visitors] as [number, number], - ), - }, - { - name: "Pageviews", - data: timeseries.series.map( - (p) => [Date.parse(p.bucket), p.pageviews] as [number, number], - ), - }, - ], - }, - }, + controls(selected, { retry: failures }), + { type: "header", text: rangeLabel(selected) }, + ...renderOverview({ + timezone, + overview, + timeseries, + overviewError: + overviewResult.status === "rejected" ? errorCopy(overviewResult.reason) : undefined, + timeseriesError: + chartResult.status === "rejected" ? errorCopy(chartResult.reason) : undefined, + }), + ...renderPages( + pages, + pagesResult.status === "rejected" ? errorCopy(pagesResult.reason) : undefined, + ), + ...renderSources( + sources, + sourcesResult.status === "rejected" ? errorCopy(sourcesResult.reason) : undefined, + ), ]; - const freshness = overview.meta.freshness; - const watermark = freshness ? dateText(freshness.watermark, tz) : null; - blocks.push({ - type: "context", - text: watermark - ? `Latest rolled-up data: ${watermark}.` - : "Latest rolled-up data timestamp is unavailable.", - }); - blocks.push({ - type: "context", - text: `Totals cover ${rangeText(overview.meta.effective_range, tz)}. Chart covers ${rangeText(timeseries.meta.effective_range, tz)}.`, - }); - if (overview.comparison && overview.meta.comparison_range) { - blocks.push({ - type: "context", - text: `Previous period: ${rangeText(overview.meta.comparison_range, tz)}.`, - }); - } - if (overview.meta.freshness && timeseries.meta.freshness) { - const states = { - ok: "current", - no_data: "no data", - stale: "delayed", - degraded: "status unavailable", - }; - blocks.push({ - type: "context", - text: `Data status: totals ${states[overview.meta.freshness.state]}; chart ${states[timeseries.meta.freshness.state]}.`, - }); - } - const warning = getMetaWarning(overview, timeseries); - if (warning) - blocks.push({ type: "banner", title: "Data status", description: warning, variant: "alert" }); return { blocks }; } @@ -436,7 +191,7 @@ export async function renderAdminPage(ctx: RouteContext): Promise interaction.type === "block_action" && interaction.action_id === "range" && (typeof interaction.value !== "string" || !RANGES.includes(interaction.value as DateRange)) - ) { + ) return { blocks: [ { type: "header", text: "OpenAnalytics" }, @@ -448,8 +203,7 @@ export async function renderAdminPage(ctx: RouteContext): Promise }, ], }; - } - const selected = interaction.type === "block_action" ? range(interaction.value) : "30d"; + const selected = interaction.type === "block_action" ? selectedRange(interaction.value) : "30d"; const [apiUrlValue, key, trackingValue, timezoneValue] = await Promise.all([ ctx.settings.get("apiUrl"), ctx.settings.get("privateReadKey"), @@ -473,18 +227,7 @@ export async function renderAdminPage(ctx: RouteContext): Promise !configured, ); } - const rawTimezone = typeof timezoneValue === "string" ? timezoneValue.trim() : ""; - let tz = "UTC"; - let timezoneError: string | null = null; - if (rawTimezone) { - try { - new Intl.DateTimeFormat("en", { timeZone: rawTimezone }).format(0); - tz = rawTimezone; - } catch { - timezoneError = - "Analytics timezone is invalid. Set an IANA timezone such as America/New_York in plugin settings."; - } - } + const { timezone, error: timezoneError } = timezoneFromSetting(timezoneValue); let validationError: string | null = null; if (interaction.type === "block_action" && interaction.action_id === "revalidate") { const validation = await validateConnection(ctx); @@ -499,13 +242,12 @@ export async function renderAdminPage(ctx: RouteContext): Promise const snapshot = await ctx.kv.get(SITE_SNAPSHOT_KEY); if (validationError) { if (isSiteSnapshot(snapshot) && snapshot.fingerprint === fingerprint) { - const site = safeConnectionSummary(snapshot.site); return { blocks: [ { type: "header", text: "OpenAnalytics" }, ...connectionBlocks({ apiUrl: config.apiUrl, - site, + site: safeConnectionSummary(snapshot.site), trackingEnabled, validatedAt: snapshot.validatedAt, }), @@ -522,36 +264,36 @@ export async function renderAdminPage(ctx: RouteContext): Promise return waitingPage(selected, config.apiUrl, trackingEnabled, validationError, false); } if (timezoneError) { - const blocks: Block[] = [ - { type: "header", text: "OpenAnalytics" }, - ...(isSiteSnapshot(snapshot) && snapshot.fingerprint === fingerprint - ? connectionBlocks({ - apiUrl: config.apiUrl, - site: safeConnectionSummary(snapshot.site), - trackingEnabled, - validatedAt: snapshot.validatedAt, - }) - : connectionBlocks({ apiUrl: config.apiUrl, trackingEnabled, needsValidation: true })), - controls(selected), - { - type: "banner", - title: "Check analytics settings", - description: timezoneError, - variant: "error", - }, - ]; - return { blocks }; + return { + blocks: [ + { type: "header", text: "OpenAnalytics" }, + ...(isSiteSnapshot(snapshot) && snapshot.fingerprint === fingerprint + ? connectionBlocks({ + apiUrl: config.apiUrl, + site: safeConnectionSummary(snapshot.site), + trackingEnabled, + validatedAt: snapshot.validatedAt, + }) + : connectionBlocks({ apiUrl: config.apiUrl, trackingEnabled, needsValidation: true })), + controls(selected), + { + type: "banner", + title: "Check analytics settings", + description: timezoneError, + variant: "error", + }, + ], + }; } if (!isSiteSnapshot(snapshot) || snapshot.fingerprint !== fingerprint) { - const stale = isSiteSnapshot(snapshot); return waitingPage( selected, config.apiUrl, trackingEnabled, - stale + isSiteSnapshot(snapshot) ? "Configuration changed. Revalidate the connection to resume tracking and load analytics." : "Validate the connection to load analytics.", ); } - return loadAnalytics(config, snapshot, selected, tz, trackingEnabled); + return loadAnalytics(config, snapshot, selected, timezone, trackingEnabled); } diff --git a/src/admin/ranges.ts b/src/admin/ranges.ts new file mode 100644 index 0000000..e32b18d --- /dev/null +++ b/src/admin/ranges.ts @@ -0,0 +1,64 @@ +import type { AnalyticsReadQuery } from "../openanalytics/types"; + +export const RANGES = ["24h", "7d", "30d", "90d"] as const; +export type DateRange = (typeof RANGES)[number]; + +export function selectedRange(value: unknown): DateRange { + if (typeof value === "string" && RANGES.includes(value as DateRange)) return value as DateRange; + if ( + value && + typeof value === "object" && + "range" in value && + typeof value.range === "string" && + RANGES.includes(value.range as DateRange) + ) + return value.range as DateRange; + return "30d"; +} + +export function rangeLabel(selected: DateRange): string { + return { + "24h": "Last 24 hours", + "7d": "Last 7 days", + "30d": "Last 30 days", + "90d": "Last 90 days", + }[selected]; +} + +export function queryFor( + selected: DateRange, + timezone: string, + now = Date.now(), +): AnalyticsReadQuery { + const duration: Record = { + "24h": 24 * 60 * 60 * 1000, + "7d": 7 * 24 * 60 * 60 * 1000, + "30d": 30 * 24 * 60 * 60 * 1000, + "90d": 90 * 24 * 60 * 60 * 1000, + }; + return { + from: new Date(now - duration[selected]).toISOString(), + to: new Date(now).toISOString(), + timezone, + resolution: selected === "24h" ? "hour" : "day", + }; +} + +export function dateText(value: string | null, timezone: string): string | null { + if (!value || !Number.isFinite(Date.parse(value))) return null; + return new Intl.DateTimeFormat(undefined, { + year: "numeric", + month: "short", + day: "numeric", + hour: "numeric", + minute: "2-digit", + timeZoneName: "short", + timeZone: timezone, + }).format(new Date(value)); +} + +export function rangeText(value: { from: string; to: string }, timezone: string): string { + const from = dateText(value.from, timezone); + const to = dateText(value.to, timezone); + return from && to ? `${from} – ${to}` : "unavailable"; +} diff --git a/src/admin/reports.ts b/src/admin/reports.ts new file mode 100644 index 0000000..3947205 --- /dev/null +++ b/src/admin/reports.ts @@ -0,0 +1,80 @@ +import type { Block } from "@emdash-cms/blocks"; + +import type { AnalyticsPagesResponse, AnalyticsSourcesResponse } from "../openanalytics/types"; + +function reportWarning(meta: AnalyticsPagesResponse["meta"]): string | null { + const notices: string[] = []; + if (meta.freshness?.state === "stale" || meta.freshness?.state === "degraded") + notices.push("data may be delayed"); + if (meta.partial || meta.truncated) notices.push("results may be incomplete"); + if (meta.data_sources.includes("imported")) notices.push("includes imported data"); + if (meta.accuracy !== "exact") notices.push("some values are estimated or provider-defined"); + if (meta.freshness === null) notices.push("freshness information is unavailable"); + return notices.length ? `Report status: ${notices.join("; ")}.` : null; +} + +export function renderPages(response?: AnalyticsPagesResponse, error?: string): Block[] { + const blocks: Block[] = [{ type: "header", text: "Top Pages" }]; + if (error) { + blocks.push({ type: "context", text: `Top pages temporarily unavailable. ${error}` }); + return blocks; + } + if (!response) return blocks; + blocks.push({ + type: "table", + page_action_id: "unused-pages-pagination", + empty_text: "No page activity in this range.", + columns: [ + { key: "page", label: "Page", format: "code" }, + { key: "views", label: "Views", format: "number" }, + { key: "visitors", label: "Visitors", format: "number" }, + ], + rows: response.items.map((row) => ({ + page: row.page_path, + views: row.views, + visitors: row.visitors, + })), + }); + const warning = reportWarning(response.meta); + if (warning) blocks.push({ type: "context", text: warning }); + return blocks; +} + +function sourceLabel(row: AnalyticsSourcesResponse["items"][number]): string { + const hasUtm = row.utm_source !== "" || row.utm_medium !== "" || row.utm_campaign !== ""; + const primary = + row.referrer_domain || row.utm_source || (hasUtm ? "No referrer" : "Direct / internal"); + const dimensions = [ + row.utm_source && row.utm_source !== primary ? `source: ${row.utm_source}` : "", + row.utm_medium ? `medium: ${row.utm_medium}` : "", + row.utm_campaign ? `campaign: ${row.utm_campaign}` : "", + ].filter(Boolean); + return dimensions.length ? `${primary} · ${dimensions.join(" · ")}` : primary; +} + +export function renderSources(response?: AnalyticsSourcesResponse, error?: string): Block[] { + const blocks: Block[] = [{ type: "header", text: "Traffic Sources" }]; + if (error) { + blocks.push({ type: "context", text: `Traffic sources temporarily unavailable. ${error}` }); + return blocks; + } + if (!response) return blocks; + blocks.push({ + type: "table", + page_action_id: "unused-sources-pagination", + empty_text: "No traffic sources recorded in this range.", + columns: [ + { key: "source", label: "Source", format: "text" }, + { key: "views", label: "Views", format: "number" }, + { key: "visitors", label: "Visitors", format: "number" }, + ], + rows: response.items.map((row) => ({ + source: sourceLabel(row), + views: row.views, + visitors: row.visitors, + })), + }); + const warning = reportWarning(response.meta); + if (warning) blocks.push({ type: "context", text: warning }); + return blocks; +} diff --git a/src/openanalytics/client.ts b/src/openanalytics/client.ts index 4742db0..2ea3787 100644 --- a/src/openanalytics/client.ts +++ b/src/openanalytics/client.ts @@ -6,6 +6,11 @@ import type { AnalyticsMeta, AnalyticsOverviewResponse, AnalyticsReadQuery, + AnalyticsReportQuery, + AnalyticsPageRow, + AnalyticsPagesResponse, + AnalyticsSourceRow, + AnalyticsSourcesResponse, AnalyticsTimeseriesResponse, OverviewTotals, SiteReadContext, @@ -194,13 +199,29 @@ function isAnalyticsReadQuery(value: AnalyticsReadQuery): boolean { return true; } +function isAnalyticsReportQuery(value: AnalyticsReportQuery): boolean { + return ( + isUtcInstant(value.from) && + isUtcInstant(value.to) && + Date.parse(value.from) < Date.parse(value.to) && + isTimezone(value.timezone) && + (value.limit === undefined || + (Number.isInteger(value.limit) && value.limit >= 1 && value.limit <= 500)) + ); +} + +type AnalyticsRequestQuery = AnalyticsReadQuery | AnalyticsReportQuery; + async function getJSON( config: OpenAnalyticsConfig, path: string, - query?: AnalyticsReadQuery, + query?: AnalyticsRequestQuery, ): Promise { const validated = parseConfiguration(config); - if (query && !isAnalyticsReadQuery(query)) { + if ( + query && + !("resolution" in query ? isAnalyticsReadQuery(query) : isAnalyticsReportQuery(query)) + ) { throw new OpenAnalyticsError("configuration", "OpenAnalytics analytics query is invalid."); } const controller = new AbortController(); @@ -211,8 +232,13 @@ async function getJSON( url.searchParams.set("from", query.from); url.searchParams.set("to", query.to); url.searchParams.set("timezone", query.timezone); - url.searchParams.set("resolution", query.resolution); - if (query.compare !== undefined) url.searchParams.set("compare", String(query.compare)); + if ("resolution" in query) { + url.searchParams.set("resolution", query.resolution); + if (query.compare !== undefined) url.searchParams.set("compare", String(query.compare)); + } else { + url.searchParams.set("limit", String(query.limit ?? 10)); + if (path.endsWith("/pages")) url.searchParams.set("sort", "views"); + } } const response = await fetch(url.toString(), { method: "GET", @@ -357,3 +383,99 @@ export async function getTimeseries( if (containsPrivateKey(result)) throw new OpenAnalyticsError("invalid_response"); return result; } + +function isPageRow(value: unknown): value is AnalyticsPageRow { + return ( + isRecord(value) && + typeof value.page_path === "string" && + isCount(value.views) && + isCount(value.visitors) && + (value.entrances === null || isCount(value.entrances)) && + (value.exits === null || isCount(value.exits)) && + (value.bounces === null || isCount(value.bounces)) && + (value.bounce_rate === null || + (typeof value.bounce_rate === "number" && + Number.isFinite(value.bounce_rate) && + value.bounce_rate >= 0 && + value.bounce_rate <= 1)) + ); +} + +function isSourceRow(value: unknown): value is AnalyticsSourceRow { + return ( + isRecord(value) && + typeof value.referrer_domain === "string" && + typeof value.utm_source === "string" && + typeof value.utm_medium === "string" && + typeof value.utm_campaign === "string" && + isCount(value.views) && + isCount(value.visitors) + ); +} + +function isReportResponse( + value: unknown, + isRow: (row: unknown) => row is T, +): value is { meta: AnalyticsMeta; items: T[] } { + return ( + isRecord(value) && + isMeta(value.meta) && + isFreshness(value.meta.freshness) && + value.meta.comparison_range === null && + Array.isArray(value.items) && + value.items.every(isRow) + ); +} + +/** Read top pages, ranked by views, with session measures when available. */ +export async function getPages( + config: OpenAnalyticsConfig, + query: AnalyticsReportQuery, +): Promise { + const payload = await getJSON(config, "/v1/read/analytics/pages", query); + if (!isReportResponse(payload, isPageRow)) throw new OpenAnalyticsError("invalid_response"); + const result: AnalyticsPagesResponse = Object.freeze({ + meta: projectMeta(payload.meta), + items: Object.freeze( + payload.items.map((row) => + Object.freeze({ + page_path: row.page_path, + views: row.views, + visitors: row.visitors, + entrances: row.entrances, + exits: row.exits, + bounces: row.bounces, + bounce_rate: row.bounce_rate, + }), + ), + ), + }); + if (containsPrivateKey(result)) throw new OpenAnalyticsError("invalid_response"); + return result; +} + +/** Read acquisition rows by referrer domain and UTM tuple, ranked by views. */ +export async function getSources( + config: OpenAnalyticsConfig, + query: AnalyticsReportQuery, +): Promise { + const payload = await getJSON(config, "/v1/read/analytics/sources", query); + if (!isReportResponse(payload, isSourceRow)) throw new OpenAnalyticsError("invalid_response"); + const result: AnalyticsSourcesResponse = Object.freeze({ + meta: projectMeta(payload.meta), + items: Object.freeze( + payload.items.map((row) => + Object.freeze({ + referrer_domain: row.referrer_domain, + utm_source: row.utm_source, + utm_medium: row.utm_medium, + utm_campaign: row.utm_campaign, + views: row.views, + visitors: row.visitors, + }), + ), + ), + }); + if (containsPrivateKey(result)) throw new OpenAnalyticsError("invalid_response"); + return result; +} diff --git a/src/openanalytics/types.ts b/src/openanalytics/types.ts index fbf906d..7299651 100644 --- a/src/openanalytics/types.ts +++ b/src/openanalytics/types.ts @@ -28,6 +28,12 @@ export interface AnalyticsReadQuery extends AnalyticsDateRange { readonly compare?: boolean; } +/** The query shared by the top-N reports; their API has no resolution option. */ +export interface AnalyticsReportQuery extends AnalyticsDateRange { + readonly timezone: string; + readonly limit?: number; +} + export interface AnalyticsFreshness { readonly state: AnalyticsFreshnessState; readonly watermark: string | null; @@ -74,3 +80,32 @@ export interface AnalyticsTimeseriesResponse { readonly series: readonly TimeseriesPoint[]; readonly comparison: { readonly series: readonly TimeseriesPoint[] } | null; } + +export interface AnalyticsPageRow { + readonly page_path: string; + readonly views: number; + readonly visitors: number; + readonly entrances: number | null; + readonly exits: number | null; + readonly bounces: number | null; + readonly bounce_rate: number | null; +} + +export interface AnalyticsSourceRow { + readonly referrer_domain: string; + readonly utm_source: string; + readonly utm_medium: string; + readonly utm_campaign: string; + readonly views: number; + readonly visitors: number; +} + +export interface AnalyticsPagesResponse { + readonly meta: AnalyticsMeta; + readonly items: readonly AnalyticsPageRow[]; +} + +export interface AnalyticsSourcesResponse { + readonly meta: AnalyticsMeta; + readonly items: readonly AnalyticsSourceRow[]; +} diff --git a/tests/admin.test.ts b/tests/admin.test.ts index f87d1a7..3c0899f 100644 --- a/tests/admin.test.ts +++ b/tests/admin.test.ts @@ -125,9 +125,19 @@ function installFetch( site?: unknown; analyticsStatus?: number; analyticsErrorCode?: string; + analyticsFailurePath?: string; siteStatus?: number; missingFreshness?: boolean; freshnessState?: string; + emptyReports?: boolean; + sourceRows?: Array<{ + referrer_domain: string; + utm_source: string; + utm_medium: string; + utm_campaign: string; + views: number; + visitors: number; + }>; } = {}, ) { const requests: Array<{ url: string; init: RequestInit | undefined }> = []; @@ -168,7 +178,11 @@ function installFetch( headers: { "content-type": "application/json" }, }); } - if (options.analyticsStatus && options.analyticsStatus !== 200) { + if ( + options.analyticsStatus && + options.analyticsStatus !== 200 && + (!options.analyticsFailurePath || path.endsWith(options.analyticsFailurePath)) + ) { return new Response( JSON.stringify({ error: { @@ -225,11 +239,48 @@ function installFetch( ? { totals: { events: 1100, pageviews: 900, visitors: 350, billable_events: 1000 } } : null, } - : { - meta: responseMetadata, - series: [{ bucket: meta.effective_range.from, events: 30, pageviews: 25, visitors: 20 }], - comparison: null, - }; + : path.endsWith("/timeseries") + ? { + meta: responseMetadata, + series: [ + { bucket: meta.effective_range.from, events: 30, pageviews: 25, visitors: 20 }, + ], + comparison: null, + } + : path.endsWith("/analytics/pages") + ? { + meta: responseMetadata, + items: options.emptyReports + ? [] + : [ + { + page_path: "/blog/openanalytics", + views: 712, + visitors: 518, + entrances: 80, + exits: 42, + bounces: 20, + bounce_rate: 0.25, + ignored: privateKey, + }, + ], + } + : { + meta: responseMetadata, + items: options.emptyReports + ? [] + : (options.sourceRows ?? [ + { + referrer_domain: "reddit.com", + utm_source: "reddit", + utm_medium: "social", + utm_campaign: "launch", + views: 301, + visitors: 230, + ignored: privateKey, + }, + ]), + }; return new Response(JSON.stringify(body), { status: 200, headers: { "content-type": "application/json" }, @@ -485,7 +536,12 @@ describe("OpenAnalytics native admin page", () => { expect(output).toContain("Previous period: 350"); expect(output).toContain("Previous period: 900"); expect(output).not.toContain(privateKey); - expect(fetchMock).toHaveBeenCalledTimes(3); + expect(fetchMock).toHaveBeenCalledTimes(5); + expect(output).toContain("Top Pages"); + expect(output).toContain("/blog/openanalytics"); + expect(output).toContain("Traffic Sources"); + expect(output).toContain("reddit.com"); + expect(output).toContain("medium: social"); for (const { url, init } of requests) { expect(url).not.toContain(privateKey); if (url.includes("analytics/")) { @@ -494,7 +550,11 @@ describe("OpenAnalytics native admin page", () => { expect(parsed.searchParams.get("to")).toBeTruthy(); expect(parsed.searchParams.get("timezone")).toBe("America/New_York"); expect(parsed.searchParams.get("resolution")).toBe( - parsed.pathname.endsWith("/overview") ? "hour" : "day", + parsed.pathname.endsWith("/overview") || parsed.pathname.endsWith("/timeseries") + ? parsed.pathname.endsWith("/overview") + ? "hour" + : "day" + : null, ); expect(parsed.searchParams.get("compare")).toBe( parsed.pathname.endsWith("/overview") ? "true" : null, @@ -502,6 +562,15 @@ describe("OpenAnalytics native admin page", () => { expect(init?.headers).toMatchObject({ Authorization: `Bearer ${privateKey}` }); } } + const firstRangeQueries = requests + .filter(({ url }) => url.includes("analytics/")) + .map(({ url }) => new URL(url)); + expect(firstRangeQueries).toHaveLength(4); + for (const query of firstRangeQueries) { + expect(query.searchParams.get("from")).toBe(firstRangeQueries[0]!.searchParams.get("from")); + expect(query.searchParams.get("to")).toBe(firstRangeQueries[0]!.searchParams.get("to")); + expect(query.searchParams.get("timezone")).toBe("America/New_York"); + } const hourly = await dispatchAdmin( runtime, { type: "block_action", action_id: "range", value: "24h", page: "/analytics" }, @@ -509,7 +578,7 @@ describe("OpenAnalytics native admin page", () => { ); expect(hourly.response.status).toBe(200); const analyticsRequests = requests.filter(({ url }) => url.includes("analytics/")); - const lastPair = analyticsRequests.slice(-2).map(({ url }) => new URL(url)); + const lastPair = analyticsRequests.slice(-4).map(({ url }) => new URL(url)); const recentQuery = lastPair[0]!; const from = Date.parse(recentQuery.searchParams.get("from")!); const to = Date.parse(recentQuery.searchParams.get("to")!); @@ -535,26 +604,31 @@ describe("OpenAnalytics native admin page", () => { expect(selected.response.status).toBe(200); const pair = requests .filter(({ url }) => url.includes("analytics/")) - .slice(-2) + .slice(-4) .map(({ url }) => new URL(url)); + const byPath = (suffix: string) => pair.find((item) => item.pathname.endsWith(suffix))!; const rangeMs = - Date.parse(pair[0]!.searchParams.get("to")!) - - Date.parse(pair[0]!.searchParams.get("from")!); + Date.parse(byPath("/overview").searchParams.get("to")!) - + Date.parse(byPath("/overview").searchParams.get("from")!); expect(rangeMs).toBeCloseTo(days * 24 * 60 * 60 * 1000, -2); - expect( - pair.find((item) => item.pathname.endsWith("/overview"))!.searchParams.get("resolution"), - ).toBe("hour"); - expect( - pair.find((item) => item.pathname.endsWith("/timeseries"))!.searchParams.get("resolution"), - ).toBe("day"); - expect(pair[0]!.searchParams.get("from")).toBe(pair[1]!.searchParams.get("from")); - expect(pair[0]!.searchParams.get("to")).toBe(pair[1]!.searchParams.get("to")); - expect( - pair.find((item) => item.pathname.endsWith("/overview"))!.searchParams.get("compare"), - ).toBe("true"); - expect( - pair.find((item) => item.pathname.endsWith("/timeseries"))!.searchParams.has("compare"), - ).toBe(false); + expect(byPath("/overview").searchParams.get("resolution")).toBe("hour"); + expect(byPath("/timeseries").searchParams.get("resolution")).toBe("day"); + for (const reportPath of ["/pages", "/sources"]) { + const report = byPath(reportPath); + expect(report.searchParams.get("from")).toBe(byPath("/overview").searchParams.get("from")); + expect(report.searchParams.get("to")).toBe(byPath("/overview").searchParams.get("to")); + expect(report.searchParams.get("timezone")).toBe("America/New_York"); + expect(report.searchParams.get("limit")).toBe("10"); + expect(report.searchParams.has("resolution")).toBe(false); + } + expect(byPath("/timeseries").searchParams.get("from")).toBe( + byPath("/overview").searchParams.get("from"), + ); + expect(byPath("/timeseries").searchParams.get("to")).toBe( + byPath("/overview").searchParams.get("to"), + ); + expect(byPath("/overview").searchParams.get("compare")).toBe("true"); + expect(byPath("/timeseries").searchParams.has("compare")).toBe(false); expect(JSON.stringify(selected.data)).toContain(`Last ${days} days`); } }); @@ -581,6 +655,179 @@ describe("OpenAnalytics native admin page", () => { expect(requests.some(({ url }) => url.includes("analytics/"))).toBe(true); }); + it("renders empty report states as native tables with no pagination controls", async () => { + const runtime = await makeRuntime(); + installFetch({ emptyReports: true }); + await setSettings(runtime, { + apiUrl, + privateReadKey: privateKey, + trackingEnabled: true, + timezone: "UTC", + }); + await validate(runtime, { role: 50, tokenScopes: ["admin"] }); + const result = await dispatchAdmin( + runtime, + { type: "page_load", page: "/analytics" }, + { role: 50, tokenScopes: ["admin"] }, + ); + const text = JSON.stringify(result.data); + expect(text).toContain("No page activity in this range."); + expect(text).toContain("No traffic sources recorded in this range."); + const tables = (result.data.blocks?.filter((block) => block.type === "table") ?? []) as Array<{ + rows?: unknown[]; + next_cursor?: unknown; + columns?: Array<{ sortable?: boolean }>; + }>; + expect(tables).toHaveLength(2); + for (const table of tables) { + expect(table.rows).toEqual([]); + expect(table.next_cursor).toBeUndefined(); + expect(table.columns?.some((column: { sortable?: boolean }) => column.sortable)).toBe(false); + } + expect(validateBlockResponse(result.data, { pluginPagePaths: ["/analytics"] }).valid).toBe( + true, + ); + }); + + it("labels tagged traffic without misclassifying it as direct or internal", async () => { + const runtime = await makeRuntime(); + installFetch({ + sourceRows: [ + { + referrer_domain: "", + utm_source: "newsletter", + utm_medium: "email", + utm_campaign: "launch", + views: 42, + visitors: 31, + }, + { + referrer_domain: "", + utm_source: "", + utm_medium: "paid", + utm_campaign: "spring", + views: 12, + visitors: 8, + }, + { + referrer_domain: "", + utm_source: "", + utm_medium: "", + utm_campaign: "", + views: 5, + visitors: 4, + }, + ], + }); + await setSettings(runtime, { + apiUrl, + privateReadKey: privateKey, + trackingEnabled: true, + timezone: "UTC", + }); + await validate(runtime, { role: 50, tokenScopes: ["admin"] }); + const result = await dispatchAdmin( + runtime, + { type: "page_load", page: "/analytics" }, + { role: 50, tokenScopes: ["admin"] }, + ); + const table = result.data.blocks?.find( + (block) => block.type === "table" && JSON.stringify(block.columns).includes('"source"'), + ); + const text = JSON.stringify(table); + expect(text).toContain("newsletter · medium: email · campaign: launch"); + expect(text).toContain("No referrer · medium: paid · campaign: spring"); + expect(text).toContain("Direct / internal"); + expect(text).not.toContain("Direct / internal · newsletter"); + }); + + it.each([ + [ + "/v1/read/analytics/pages", + "Top pages temporarily unavailable.", + "Traffic Sources", + "reddit.com", + ], + [ + "/v1/read/analytics/sources", + "Traffic sources temporarily unavailable.", + "/blog/openanalytics", + "Visitors", + ], + ] as const)( + "isolates report failure for %s", + async (failurePath, sectionMessage, visiblePage, otherReport) => { + const runtime = await makeRuntime(); + installFetch({ analyticsStatus: 503, analyticsFailurePath: failurePath }); + await setSettings(runtime, { + apiUrl, + privateReadKey: privateKey, + trackingEnabled: true, + timezone: "UTC", + }); + await validate(runtime, { role: 50, tokenScopes: ["admin"] }); + const result = await dispatchAdmin( + runtime, + { type: "page_load", page: "/analytics" }, + { role: 50, tokenScopes: ["admin"] }, + ); + const output = JSON.stringify(result.data); + expect(output).toContain("Visitors"); + expect(output).toContain(visiblePage); + expect(output).toContain(otherReport); + expect(output).toContain(sectionMessage); + expect(output).not.toContain(privateKey); + }, + ); + + it.each([ + ["/overview", "Overview unavailable", "Chart covers", "reddit.com"], + ["/timeseries", "Chart unavailable", "Previous period: 350", "/blog/openanalytics"], + ] as const)( + "keeps the other analytics sections visible when %s fails", + async (failurePath, message, survivingOverview, survivingReport) => { + const runtime = await makeRuntime(); + installFetch({ analyticsStatus: 503, analyticsFailurePath: failurePath }); + await setSettings(runtime, { + apiUrl, + privateReadKey: privateKey, + trackingEnabled: true, + timezone: "UTC", + }); + await validate(runtime, { role: 50, tokenScopes: ["admin"] }); + const result = await dispatchAdmin( + runtime, + { type: "page_load", page: "/analytics" }, + { role: 50, tokenScopes: ["admin"] }, + ); + const output = JSON.stringify(result.data); + expect(output).toContain(message); + expect(output).toContain(survivingOverview); + expect(output).toContain(survivingReport); + expect(output).not.toContain(privateKey); + }, + ); + + it("shows tracker installation separately from suspended collection state", async () => { + const runtime = await makeRuntime(); + installFetch({ site: { ...site, status: "suspended" } }); + await setSettings(runtime, { + apiUrl, + privateReadKey: privateKey, + trackingEnabled: true, + timezone: "UTC", + }); + await validate(runtime, { role: 50, tokenScopes: ["admin"] }); + const result = await dispatchAdmin( + runtime, + { type: "page_load", page: "/analytics" }, + { role: 50, tokenScopes: ["admin"] }, + ); + expect(JSON.stringify(result.data)).toContain("Tracker installed · collection suspended"); + expect(JSON.stringify(result.data)).not.toContain("Tracking inactive"); + expect(await renderedTracking(runtime)).toContain('data-key="oa_pk_admin_public"'); + }); + it.each([ [403, "This private key does not have analytics:read permission."], [402, "OpenAnalytics paused this request because of a billing or service issue."], @@ -722,7 +969,7 @@ describe("OpenAnalytics native admin page", () => { expect(validated.response.status).toBe(200); expect(JSON.stringify(validated.data)).toContain("Connected"); expect(JSON.stringify(validated.data)).not.toContain(privateKey); - expect(fetchMock).toHaveBeenCalledTimes(3); + expect(fetchMock).toHaveBeenCalledTimes(5); }); it("keeps a matching validated snapshot through transient revalidation failures", async () => { diff --git a/tests/analytics-client.test.ts b/tests/analytics-client.test.ts index 3235ea7..2020a48 100644 --- a/tests/analytics-client.test.ts +++ b/tests/analytics-client.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { getOverview, getTimeseries } from "../src/openanalytics/client"; +import { getOverview, getPages, getSources, getTimeseries } from "../src/openanalytics/client"; import { OpenAnalyticsError } from "../src/openanalytics/errors"; import { parseConfiguration } from "../src/settings/config"; @@ -51,6 +51,41 @@ const timeseries = { comparison: null, }; +const reportQuery = { + from: query.from, + to: query.to, + timezone: query.timezone, +}; + +const pages = { + meta, + items: [ + { + page_path: "/blog/openanalytics", + views: 712, + visitors: 518, + entrances: 201, + exits: 95, + bounces: 41, + bounce_rate: 41 / 201, + }, + ], +}; + +const sources = { + meta, + items: [ + { + referrer_domain: "google.com", + utm_source: "", + utm_medium: "", + utm_campaign: "", + views: 240, + visitors: 210, + }, + ], +}; + function mockFetch(status: number, body: unknown, headers: HeadersInit = {}) { const response = new Response(typeof body === "string" ? body : JSON.stringify(body), { status, @@ -64,6 +99,157 @@ function mockFetch(status: number, body: unknown, headers: HeadersInit = {}) { afterEach(() => vi.unstubAllGlobals()); describe("OpenAnalytics analytics read client", () => { + it.each([ + ["pages", getPages, pages], + ["sources", getSources, sources], + ] as const)( + "reads typed %s rows with the explicit selected range, timezone, and limit", + async (name, call, body) => { + const fetchMock = mockFetch(200, body); + const result = await call(config, reportQuery); + expect(result).toEqual(body); + const [input, init] = fetchMock.mock.calls[0] ?? []; + const url = new URL(String(input)); + expect(url.pathname).toBe(`/v1/read/analytics/${name}`); + expect(url.searchParams.get("from")).toBe(query.from); + expect(url.searchParams.get("to")).toBe(query.to); + expect(url.searchParams.get("timezone")).toBe(query.timezone); + expect(url.searchParams.get("limit")).toBe("10"); + expect(url.searchParams.get("sort")).toBe(name === "pages" ? "views" : null); + expect(url.searchParams.has("resolution")).toBe(false); + expect(init).toMatchObject({ redirect: "error", cache: "no-store" }); + }, + ); + + it.each([ + ["pages", getPages, pages], + ["sources", getSources, sources], + ] as const)( + "accepts an empty %s result and supports a custom top-N limit", + async (_name, call, body) => { + const fetchMock = mockFetch(200, { ...body, items: [] }); + expect((await call(config, { ...reportQuery, limit: 500 })).items).toEqual([]); + expect(new URL(String(fetchMock.mock.calls[0]?.[0])).searchParams.get("limit")).toBe("500"); + }, + ); + + it.each([ + ["pages", getPages, pages], + ["sources", getSources, sources], + ] as const)( + "projects documented %s fields and ignores additive upstream fields", + async (_name, call, body) => { + mockFetch(200, { + meta: { ...meta, ignored_future_meta: readKey }, + items: [{ ...body.items[0], ignored_future_field: readKey }], + ignored: readKey, + }); + const result = await call(config, reportQuery); + expect(JSON.stringify(result)).not.toContain(readKey); + expect(result.items[0]).not.toHaveProperty("ignored_future_field"); + expect(result.meta).not.toHaveProperty("ignored_future_meta"); + }, + ); + + it.each([ + ["pages", getPages, pages, "items"], + ["sources", getSources, sources, "items"], + ] as const)("rejects malformed %s rows and metadata", async (_name, call, body, field) => { + mockFetch(200, { ...body, [field]: [{ ...body.items[0], views: -1 }] }); + await expect(call(config, reportQuery)).rejects.toMatchObject({ kind: "invalid_response" }); + mockFetch(200, { ...body, meta: { ...meta, truncated: "false" } }); + await expect(call(config, reportQuery)).rejects.toMatchObject({ kind: "invalid_response" }); + mockFetch(200, { ...body, meta: { ...meta, freshness: null } }); + await expect(call(config, reportQuery)).rejects.toMatchObject({ kind: "invalid_response" }); + mockFetch(200, { + ...body, + meta: { ...meta, comparison_range: { from: query.from, to: query.to } }, + }); + await expect(call(config, reportQuery)).rejects.toMatchObject({ kind: "invalid_response" }); + }); + + it.each([ + { ...pages, items: [{ ...pages.items[0], entrances: undefined }] }, + { ...pages, items: [{ ...pages.items[0], bounce_rate: 1.1 }] }, + { + ...pages, + items: [ + { + ...pages.items[0], + entrances: 0, + exits: 0, + bounces: 0, + bounce_rate: null, + }, + ], + }, + { + ...pages, + items: [ + { + ...pages.items[0], + entrances: null, + exits: null, + bounces: null, + bounce_rate: null, + }, + ], + }, + ])("rejects missing or invalid nullable session measures", async (body) => { + mockFetch(200, body); + if (body.items[0]?.entrances === 0 || body.items[0]?.entrances === null) { + expect((await getPages(config, reportQuery)).items[0]).toMatchObject(body.items[0]); + } else { + await expect(getPages(config, reportQuery)).rejects.toMatchObject({ + kind: "invalid_response", + }); + } + }); + + it("rejects private-key material in projected page or source fields", async () => { + mockFetch(200, { ...pages, items: [{ ...pages.items[0], page_path: `/path/${readKey}` }] }); + await expect(getPages(config, reportQuery)).rejects.toMatchObject({ kind: "invalid_response" }); + mockFetch(200, { + ...sources, + items: [{ ...sources.items[0], utm_campaign: encodeURIComponent(readKey) }], + }); + await expect(getSources(config, reportQuery)).rejects.toMatchObject({ + kind: "invalid_response", + }); + }); + + it.each([ + [401, {}, "unauthorized"], + [403, { error: { code: "FORBIDDEN" } }, "analytics_forbidden"], + [403, { error: { code: "SITE_SUSPENDED" } }, "suspended"], + [400, { error: { code: "RANGE_TOO_LARGE" } }, "range_invalid"], + [429, {}, "rate_limited"], + [500, {}, "server"], + [503, {}, "server"], + ] as const)( + "normalizes report HTTP %i without exposing response content", + async (status, payload, kind) => { + mockFetch(status, { ...payload, detail: readKey }, { "retry-after": "13" }); + await expect(getPages(config, reportQuery)).rejects.toMatchObject({ kind, status }); + mockFetch(status, { ...payload, detail: readKey }, { "retry-after": "13" }); + await expect(getSources(config, reportQuery)).rejects.toMatchObject({ kind, status }); + }, + ); + + it.each([getPages, getSources] as const)( + "rejects invalid report limits before requesting", + async (call) => { + for (const limit of [0, 501, 1.5]) { + const fetchMock = vi.fn(); + vi.stubGlobal("fetch", fetchMock); + await expect(call(config, { ...reportQuery, limit })).rejects.toMatchObject({ + kind: "configuration", + }); + expect(fetchMock).not.toHaveBeenCalled(); + } + }, + ); + it("reads the typed overview with explicit range, timezone, and resolution", async () => { const fetchMock = mockFetch(200, overview); diff --git a/tests/http.test.ts b/tests/http.test.ts index 56eacef..d0269c5 100644 --- a/tests/http.test.ts +++ b/tests/http.test.ts @@ -3,7 +3,13 @@ import { createServer, type IncomingMessage, type Server, type ServerResponse } import { afterAll, beforeAll, describe, expect, it } from "vitest"; -import { getOverview, getSite, getTimeseries } from "../src/openanalytics/client"; +import { + getOverview, + getPages, + getSite, + getSources, + getTimeseries, +} from "../src/openanalytics/client"; import { OpenAnalyticsError } from "../src/openanalytics/errors"; import { parseConfiguration } from "../src/settings/config"; @@ -56,6 +62,8 @@ async function route(request: IncomingMessage, response: ServerResponse) { "/api-root/v1/read/site", "/api-root/v1/read/analytics/overview", "/api-root/v1/read/analytics/timeseries", + "/api-root/v1/read/analytics/pages", + "/api-root/v1/read/analytics/sources", ].includes(path) ) { response.writeHead(404); @@ -86,7 +94,7 @@ async function route(request: IncomingMessage, response: ServerResponse) { requested_range: { from: url.searchParams.get("from"), to: url.searchParams.get("to") }, effective_range: { from: url.searchParams.get("from"), to: url.searchParams.get("to") }, timezone: url.searchParams.get("timezone"), - resolution: url.searchParams.get("resolution"), + resolution: url.searchParams.get("resolution") ?? "hour", data_sources: ["live"], accuracy: "exact", freshness: { state: "ok", watermark: analyticsQuery.to, as_of: analyticsQuery.to }, @@ -101,11 +109,40 @@ async function route(request: IncomingMessage, response: ServerResponse) { totals: { events: 1200, pageviews: 980, visitors: 380, billable_events: 1150 }, comparison: null, } - : { - meta, - series: [{ bucket: analyticsQuery.from, events: 50, pageviews: 40, visitors: 20 }], - comparison: null, - }; + : path.endsWith("/timeseries") + ? { + meta, + series: [{ bucket: analyticsQuery.from, events: 50, pageviews: 40, visitors: 20 }], + comparison: null, + } + : path.endsWith("/pages") + ? { + meta, + items: [ + { + page_path: "/", + views: 40, + visitors: 20, + entrances: 12, + exits: 8, + bounces: 3, + bounce_rate: 0.25, + }, + ], + } + : { + meta, + items: [ + { + referrer_domain: "google.com", + utm_source: "", + utm_medium: "", + utm_campaign: "", + views: 40, + visitors: 20, + }, + ], + }; sendJson(response, body); } @@ -204,4 +241,34 @@ describe("OpenAnalytics HTTP transport", () => { slowResponse = false; } }); + + it.each([ + ["pages", getPages], + ["sources", getSources], + ] as const)("refuses redirects for the %s report without following them", async (_name, call) => { + redirectedRequestCount = 0; + redirectToFixture = true; + try { + await expect( + call(parseConfiguration({ apiUrl: baseUrl, readKey }), analyticsQuery), + ).rejects.toMatchObject({ kind: "network" }); + expect(redirectedRequestCount).toBe(0); + } finally { + redirectToFixture = false; + } + }); + + it.each([ + ["pages", getPages], + ["sources", getSources], + ] as const)("times out while the %s report response body is pending", async (_name, call) => { + slowResponse = true; + try { + await expect( + call(parseConfiguration({ apiUrl: baseUrl, readKey, timeoutMs: 20 }), analyticsQuery), + ).rejects.toMatchObject({ kind: "timeout" }); + } finally { + slowResponse = false; + } + }); });