@polishd/next 0.2.2 → 0.2.3-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +102 -0
- package/README.md +32 -0
- package/bin/doctor.mjs +8 -1
- package/dist/client/init.d.ts.map +1 -1
- package/dist/client/init.js +39 -8
- package/dist/client/init.js.map +1 -1
- package/dist/client/script-provenance.d.ts +21 -0
- package/dist/client/script-provenance.d.ts.map +1 -0
- package/dist/client/script-provenance.js +127 -0
- package/dist/client/script-provenance.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/dashboard/design-review-card.d.ts.map +1 -1
- package/dist/dashboard/design-review-card.js +3 -3
- package/dist/dashboard/design-review-card.js.map +1 -1
- package/dist/dashboard/design.d.ts +3 -1
- package/dist/dashboard/design.d.ts.map +1 -1
- package/dist/dashboard/design.js +3 -2
- package/dist/dashboard/design.js.map +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +24 -19
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/installs.d.ts.map +1 -1
- package/dist/dashboard/installs.js +2 -1
- package/dist/dashboard/installs.js.map +1 -1
- package/dist/dashboard/journeys.d.ts.map +1 -1
- package/dist/dashboard/journeys.js +3 -2
- package/dist/dashboard/journeys.js.map +1 -1
- package/dist/dashboard/pages.d.ts.map +1 -1
- package/dist/dashboard/pages.js +1 -1
- package/dist/dashboard/pages.js.map +1 -1
- package/dist/dashboard/settings.d.ts.map +1 -1
- package/dist/dashboard/settings.js +6 -2
- package/dist/dashboard/settings.js.map +1 -1
- package/dist/dashboard/show-more.d.ts.map +1 -1
- package/dist/dashboard/show-more.js +1 -1
- package/dist/dashboard/show-more.js.map +1 -1
- package/dist/dashboard/snapshot-actions.d.ts +16 -0
- package/dist/dashboard/snapshot-actions.d.ts.map +1 -0
- package/dist/dashboard/snapshot-actions.js +79 -0
- package/dist/dashboard/snapshot-actions.js.map +1 -0
- package/dist/dashboard/snapshots.d.ts +6 -0
- package/dist/dashboard/snapshots.d.ts.map +1 -0
- package/dist/dashboard/snapshots.js +86 -0
- package/dist/dashboard/snapshots.js.map +1 -0
- package/dist/dashboard/summary.d.ts.map +1 -1
- package/dist/dashboard/summary.js +11 -6
- package/dist/dashboard/summary.js.map +1 -1
- package/dist/dashboard/telemetry.d.ts +3 -1
- package/dist/dashboard/telemetry.d.ts.map +1 -1
- package/dist/dashboard/telemetry.js +50 -8
- package/dist/dashboard/telemetry.js.map +1 -1
- package/dist/dashboard.css +79 -2
- package/dist/server/ingest.d.ts +2 -5
- package/dist/server/ingest.d.ts.map +1 -1
- package/dist/server/ingest.js +40 -10
- package/dist/server/ingest.js.map +1 -1
- package/dist/server/queries.d.ts +23 -11
- package/dist/server/queries.d.ts.map +1 -1
- package/dist/server/queries.js +98 -34
- package/dist/server/queries.js.map +1 -1
- package/dist/server/snapshots.d.ts +65 -0
- package/dist/server/snapshots.d.ts.map +1 -0
- package/dist/server/snapshots.js +194 -0
- package/dist/server/snapshots.js.map +1 -0
- package/dist/server/telemetry.d.ts +13 -0
- package/dist/server/telemetry.d.ts.map +1 -1
- package/dist/server/telemetry.js +28 -7
- package/dist/server/telemetry.js.map +1 -1
- package/dist/shared/capture-status.d.ts +99 -0
- package/dist/shared/capture-status.d.ts.map +1 -0
- package/dist/shared/capture-status.js +133 -0
- package/dist/shared/capture-status.js.map +1 -0
- package/dist/shared/error-noise.d.ts +39 -0
- package/dist/shared/error-noise.d.ts.map +1 -0
- package/dist/shared/error-noise.js +101 -0
- package/dist/shared/error-noise.js.map +1 -0
- package/dist/shared/types.d.ts +1 -1
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +4 -0
- package/dist/shared/types.js.map +1 -1
- package/docs/SETUP.md +25 -0
- package/package.json +6 -1
package/dist/server/queries.js
CHANGED
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
* spelled `SUM(CASE WHEN … THEN 1 ELSE 0 END)` rather than SQLite's `SUM(x = y)`.
|
|
11
11
|
*/
|
|
12
12
|
import { getMeta, parseMeta, query, storeReady } from "./store";
|
|
13
|
+
import { CAPTURE_WINDOW_MS, noSessionCountSince, parseNoSessionRecord, } from "../shared/capture-status";
|
|
13
14
|
import { NO_SESSION_META_KEY } from "./ingest";
|
|
14
15
|
import { resolveAnalyticsSource } from "./telemetry";
|
|
15
16
|
import { resolveDashboardRoute } from "../config";
|
|
17
|
+
import { isIgnorableError } from "../shared/error-noise";
|
|
16
18
|
/**
|
|
17
19
|
* The events table with the dashboard's own route filtered out, aliased back to
|
|
18
20
|
* `events` so every query below reads from it unchanged.
|
|
@@ -563,29 +565,57 @@ export async function getMonitoredComponents() {
|
|
|
563
565
|
});
|
|
564
566
|
}
|
|
565
567
|
/**
|
|
566
|
-
* Read the proxy-health
|
|
568
|
+
* Read the proxy-health counters: the drop record ingest writes, plus what
|
|
569
|
+
* the events table says about storing over the same window.
|
|
567
570
|
*
|
|
568
|
-
*
|
|
569
|
-
* "everybody
|
|
570
|
-
*
|
|
571
|
+
* The pair is the point. A drop count on its own cannot tell "nobody has
|
|
572
|
+
* visited yet" from "everybody visited and every event was thrown away" —
|
|
573
|
+
* that is why it is recorded — but neither can it tell a broken proxy from a
|
|
574
|
+
* crawler POSTing at a public endpoint. `lastStoredAt` settles that outright:
|
|
575
|
+
* every event is attributed to the cookie the proxy mints, so a store dated
|
|
576
|
+
* after the most recent drop means the proxy is minting right now. The
|
|
577
|
+
* windowed counts let the dashboard describe the rest in proportion.
|
|
571
578
|
*/
|
|
572
579
|
export async function getCaptureHealth() {
|
|
573
|
-
const
|
|
580
|
+
const windowMs = CAPTURE_WINDOW_MS;
|
|
581
|
+
const empty = {
|
|
582
|
+
noSessionCount: 0,
|
|
583
|
+
recentNoSessionCount: 0,
|
|
584
|
+
lastNoSessionAt: null,
|
|
585
|
+
lastStoredAt: null,
|
|
586
|
+
recentEvents: 0,
|
|
587
|
+
recentBatches: 0,
|
|
588
|
+
windowMs,
|
|
589
|
+
};
|
|
574
590
|
if (!(await storeReady()))
|
|
575
591
|
return empty;
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
592
|
+
const since = Date.now() - windowMs;
|
|
593
|
+
// `received_at` is stamped once per insert call, so distinct values count
|
|
594
|
+
// batches — approximately: two batches landing in the same millisecond
|
|
595
|
+
// collapse into one. Good enough for a percentage, and it costs no schema.
|
|
596
|
+
const [rows, raw] = await Promise.all([
|
|
597
|
+
query(`SELECT
|
|
598
|
+
MAX(received_at) AS "lastStoredAt",
|
|
599
|
+
SUM(CASE WHEN received_at >= ? THEN 1 ELSE 0 END) AS "recentEvents",
|
|
600
|
+
COUNT(DISTINCT CASE WHEN received_at >= ? THEN received_at END) AS "recentBatches"
|
|
601
|
+
FROM ${polishdEventsSource()}`, [since, since]),
|
|
602
|
+
getMeta(NO_SESSION_META_KEY),
|
|
603
|
+
]);
|
|
604
|
+
const row = rows[0];
|
|
605
|
+
// MAX() over an empty table is NULL, which `num` would flatten to 0 — and a
|
|
606
|
+
// stored-at of 0 reads as "stored in 1970", i.e. older than any drop. Keep
|
|
607
|
+
// the absence.
|
|
608
|
+
const everStored = row?.lastStoredAt !== null && row?.lastStoredAt !== undefined;
|
|
609
|
+
const rec = parseNoSessionRecord(raw);
|
|
610
|
+
return {
|
|
611
|
+
noSessionCount: rec?.count ?? 0,
|
|
612
|
+
recentNoSessionCount: noSessionCountSince(rec, since),
|
|
613
|
+
lastNoSessionAt: rec && rec.lastAt > 0 ? rec.lastAt : null,
|
|
614
|
+
lastStoredAt: everStored ? num(row, "lastStoredAt") : null,
|
|
615
|
+
recentEvents: num(row, "recentEvents"),
|
|
616
|
+
recentBatches: num(row, "recentBatches"),
|
|
617
|
+
windowMs,
|
|
618
|
+
};
|
|
589
619
|
}
|
|
590
620
|
/**
|
|
591
621
|
* Fetch every dashboard query in parallel. Server-only. Lives here (not in the
|
|
@@ -606,21 +636,31 @@ export async function loadPolishdDashboardData() {
|
|
|
606
636
|
return { overview, health, pages, elements, devices, topUsed, journeys, errors, monitored };
|
|
607
637
|
}
|
|
608
638
|
export async function getRecentErrors(limit = 10) {
|
|
639
|
+
// Extension errors are dropped at capture and again at ingest, but rows
|
|
640
|
+
// written before that filter existed are still in the table — and this list
|
|
641
|
+
// is where they were loudest. Over-fetch and drop them on the way out, so
|
|
642
|
+
// the fix applies to history and not just to new sessions.
|
|
609
643
|
const rows = await query(`SELECT path, component, meta, ts
|
|
610
644
|
FROM ${polishdEventsSource()} WHERE type = 'js_error'
|
|
611
|
-
ORDER BY id DESC LIMIT ?`, [limit]);
|
|
612
|
-
return rows
|
|
613
|
-
|
|
645
|
+
ORDER BY id DESC LIMIT ?`, [limit * 4]);
|
|
646
|
+
return rows
|
|
647
|
+
.map((r) => {
|
|
614
648
|
const meta = parseMeta(r.meta);
|
|
615
|
-
|
|
616
|
-
|
|
649
|
+
const message = meta && typeof meta.message === "string" ? meta.message : "Unknown error";
|
|
650
|
+
const source = meta && typeof meta.source === "string" ? meta.source : "";
|
|
651
|
+
const origin = meta?.origin === "foreign" || meta?.origin === "unknown" ? meta.origin : undefined;
|
|
617
652
|
return {
|
|
618
653
|
path: r.path,
|
|
619
654
|
component: r.component ?? undefined,
|
|
620
655
|
message,
|
|
656
|
+
source,
|
|
657
|
+
origin,
|
|
621
658
|
ts: num(r, "ts"),
|
|
622
659
|
};
|
|
623
|
-
})
|
|
660
|
+
})
|
|
661
|
+
.filter(({ message, source }) => !isIgnorableError({ message, source }))
|
|
662
|
+
.slice(0, limit)
|
|
663
|
+
.map(({ source: _source, ...error }) => error);
|
|
624
664
|
}
|
|
625
665
|
/** One row per reporting installation, most recently active first. */
|
|
626
666
|
export async function getTelemetryInstalls(limit = 100) {
|
|
@@ -637,16 +677,40 @@ export async function getTelemetryInstalls(limit = 100) {
|
|
|
637
677
|
GROUP BY install_id
|
|
638
678
|
ORDER BY last_seen DESC
|
|
639
679
|
LIMIT ?`, [limit]);
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
680
|
+
// The newest install_state per install answers "is a model connected, and
|
|
681
|
+
// which one" — state the click stream can't carry. Latest wins so an
|
|
682
|
+
// install that connects (or disconnects) a model reads correctly.
|
|
683
|
+
const stateRows = await query(`SELECT install_id, meta FROM events e
|
|
684
|
+
WHERE type = 'install_state' AND install_id IS NOT NULL
|
|
685
|
+
AND id = (SELECT MAX(id) FROM events e2
|
|
686
|
+
WHERE e2.type = 'install_state' AND e2.install_id = e.install_id)`);
|
|
687
|
+
const states = new Map();
|
|
688
|
+
for (const r of stateRows) {
|
|
689
|
+
const meta = parseMeta(r.meta);
|
|
690
|
+
if (!meta)
|
|
691
|
+
continue;
|
|
692
|
+
states.set(r.install_id, {
|
|
693
|
+
hasModel: meta.hasModel === true,
|
|
694
|
+
provider: typeof meta.provider === "string" && meta.provider ? meta.provider : null,
|
|
695
|
+
model: typeof meta.model === "string" && meta.model ? meta.model : null,
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
return rows.map((r) => {
|
|
699
|
+
const state = states.get(r.install_id);
|
|
700
|
+
return {
|
|
701
|
+
install: r.install_id,
|
|
702
|
+
sessions: num(r, "sessions"),
|
|
703
|
+
events: num(r, "events"),
|
|
704
|
+
pageViews: num(r, "page_views"),
|
|
705
|
+
clicks: num(r, "clicks"),
|
|
706
|
+
rageClicks: num(r, "rage_clicks"),
|
|
707
|
+
deadClicks: num(r, "dead_clicks"),
|
|
708
|
+
lastSeen: num(r, "last_seen"),
|
|
709
|
+
hasModel: state ? state.hasModel : null,
|
|
710
|
+
provider: state?.hasModel ? state.provider : null,
|
|
711
|
+
model: state?.hasModel ? state.model : null,
|
|
712
|
+
};
|
|
713
|
+
});
|
|
650
714
|
}
|
|
651
715
|
/** Which dashboard tabs get used, across every reporting installation. */
|
|
652
716
|
export async function getTelemetryTopPaths(limit = 10) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/server/queries.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/server/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** One captured (or deliberately skipped) screenshot within a snapshot. */
|
|
2
|
+
export interface PolishdSnapshotShot {
|
|
3
|
+
/** Route path, e.g. "/pricing". */
|
|
4
|
+
route: string;
|
|
5
|
+
/** Device name: "phone" | "desktop". */
|
|
6
|
+
device: string;
|
|
7
|
+
/** "light" | "dark". */
|
|
8
|
+
theme: string;
|
|
9
|
+
/**
|
|
10
|
+
* Image filename inside the snapshot's `shots/` subdirectory — allpages
|
|
11
|
+
* reports and writes bare names there. Empty when the cell was skipped.
|
|
12
|
+
*/
|
|
13
|
+
file: string;
|
|
14
|
+
/** Why the cell has no image, when it doesn't. */
|
|
15
|
+
skipped?: string;
|
|
16
|
+
}
|
|
17
|
+
/** One capture run: every page of the site at one moment in time. */
|
|
18
|
+
export interface PolishdSnapshot {
|
|
19
|
+
id: string;
|
|
20
|
+
capturedAt: number;
|
|
21
|
+
/** The origin that was shot, e.g. "http://localhost:3000". */
|
|
22
|
+
origin: string;
|
|
23
|
+
/**
|
|
24
|
+
* The design-metrics fingerprint at capture time (same hash the AI review
|
|
25
|
+
* caches under). Two snapshots with different fingerprints bracket a design
|
|
26
|
+
* change — the raw material for before/after diffing.
|
|
27
|
+
*/
|
|
28
|
+
fingerprint: string | null;
|
|
29
|
+
shots: PolishdSnapshotShot[];
|
|
30
|
+
/** Routes that redirected to something that looked like a login. */
|
|
31
|
+
authWalled: string[];
|
|
32
|
+
/** True when the site rendered identically in light and dark. */
|
|
33
|
+
noDarkMode: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** Cap on routes shot per run, to bound how long the capture action holds. */
|
|
36
|
+
export declare const MAX_SNAPSHOT_ROUTES = 12;
|
|
37
|
+
/** Every recorded snapshot, newest first. Read-only; `[]` when none/no store. */
|
|
38
|
+
export declare function listSnapshots(): Promise<PolishdSnapshot[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Read one shot's image as a data URL, or null when it doesn't exist. The
|
|
41
|
+
* filename is only accepted when the index lists it for that snapshot, so a
|
|
42
|
+
* caller can never read outside a snapshot directory.
|
|
43
|
+
*/
|
|
44
|
+
export declare function readSnapshotImage(snapshotId: string, file: string): Promise<string | null>;
|
|
45
|
+
export interface CaptureSnapshotInput {
|
|
46
|
+
/** The site to shoot, scheme included. */
|
|
47
|
+
origin: string;
|
|
48
|
+
/** Paths to shoot — discovery is skipped, these are shot exactly. */
|
|
49
|
+
routes: string[];
|
|
50
|
+
/** Design-metrics fingerprint at capture time, for later pairing. */
|
|
51
|
+
fingerprint: string | null;
|
|
52
|
+
}
|
|
53
|
+
export type CaptureSnapshotResult = {
|
|
54
|
+
ok: true;
|
|
55
|
+
snapshot: PolishdSnapshot;
|
|
56
|
+
} | {
|
|
57
|
+
ok: false;
|
|
58
|
+
message: string;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Shoot the given routes and record the run in the snapshot index. Old
|
|
62
|
+
* snapshots past `MAX_SNAPSHOTS` are pruned, files included.
|
|
63
|
+
*/
|
|
64
|
+
export declare function captureSnapshot(input: CaptureSnapshotInput): Promise<CaptureSnapshotResult>;
|
|
65
|
+
//# sourceMappingURL=snapshots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"AAqBA,2EAA2E;AAC3E,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,oEAAoE;IACpE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAC;CACrB;AAYD,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,KAAK,CAAC;AA4BtC,iFAAiF;AACjF,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAEhE;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB;AAID,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qEAAqE;IACrE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA0BnC;;;GAGG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CA4GhC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polishd — site snapshots (server only).
|
|
3
|
+
*
|
|
4
|
+
* Full-page screenshots of the host site, captured with `allpages` (Playwright
|
|
5
|
+
* underneath) and kept on disk under `.polishd/snapshots/<id>/`. The store's
|
|
6
|
+
* metadata table holds only the index — which snapshots exist, the shots each
|
|
7
|
+
* produced, and the design-metrics fingerprint at capture time — so a snapshot
|
|
8
|
+
* taken before a round of design fixes can later be paired with one taken
|
|
9
|
+
* after, and shots can feed the aesthetic review.
|
|
10
|
+
*
|
|
11
|
+
* Capture is a dev-time affair: it needs a writable filesystem and a Chromium
|
|
12
|
+
* it can launch, both true on the laptop running `next dev` and generally
|
|
13
|
+
* false on serverless hosts. Every failure degrades to a message, never a
|
|
14
|
+
* crash — the same contract as the rest of the server layer.
|
|
15
|
+
*/
|
|
16
|
+
import { isAbsolute, join } from "node:path";
|
|
17
|
+
import { mkdir, readFile, rm } from "node:fs/promises";
|
|
18
|
+
import { getMeta, setMeta, storeReady } from "./store";
|
|
19
|
+
const INDEX_KEY = "design_snapshots";
|
|
20
|
+
/** Snapshots kept before the oldest is pruned (files and index entry both). */
|
|
21
|
+
const MAX_SNAPSHOTS = 6;
|
|
22
|
+
/** Cap on routes shot per run, to bound how long the capture action holds. */
|
|
23
|
+
export const MAX_SNAPSHOT_ROUTES = 12;
|
|
24
|
+
/** The device/theme matrix every snapshot shoots. */
|
|
25
|
+
const SNAPSHOT_DEVICES = ["phone", "desktop"];
|
|
26
|
+
const SNAPSHOT_THEMES = ["light", "dark"];
|
|
27
|
+
/** Where snapshot directories live. Sits next to the dev SQLite file. */
|
|
28
|
+
function snapshotsRoot() {
|
|
29
|
+
const configured = process.env.POLISHD_SNAPSHOT_DIR;
|
|
30
|
+
if (configured) {
|
|
31
|
+
return isAbsolute(configured) ? configured : join(process.cwd(), configured);
|
|
32
|
+
}
|
|
33
|
+
return join(process.cwd(), ".polishd", "snapshots");
|
|
34
|
+
}
|
|
35
|
+
async function loadIndex() {
|
|
36
|
+
const raw = await getMeta(INDEX_KEY);
|
|
37
|
+
if (raw) {
|
|
38
|
+
try {
|
|
39
|
+
const parsed = JSON.parse(raw);
|
|
40
|
+
if (parsed?.v === 1 && Array.isArray(parsed.snapshots))
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// A corrupt index is replaced on the next successful capture.
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { v: 1, snapshots: [] };
|
|
48
|
+
}
|
|
49
|
+
/** Every recorded snapshot, newest first. Read-only; `[]` when none/no store. */
|
|
50
|
+
export async function listSnapshots() {
|
|
51
|
+
return (await loadIndex()).snapshots;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read one shot's image as a data URL, or null when it doesn't exist. The
|
|
55
|
+
* filename is only accepted when the index lists it for that snapshot, so a
|
|
56
|
+
* caller can never read outside a snapshot directory.
|
|
57
|
+
*/
|
|
58
|
+
export async function readSnapshotImage(snapshotId, file) {
|
|
59
|
+
const index = await loadIndex();
|
|
60
|
+
const snapshot = index.snapshots.find((s) => s.id === snapshotId);
|
|
61
|
+
const shot = snapshot?.shots.find((s) => s.file === file && s.file.length > 0);
|
|
62
|
+
if (!snapshot || !shot)
|
|
63
|
+
return null;
|
|
64
|
+
try {
|
|
65
|
+
const bytes = await readFile(join(snapshotsRoot(), snapshot.id, "shots", shot.file));
|
|
66
|
+
return `data:image/png;base64,${bytes.toString("base64")}`;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null; // Directory pruned or deleted by hand — the tile shows a blank.
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Launch a Chromium the way the allpages CLI does — the user's own Chrome or
|
|
74
|
+
* Edge first, Playwright's downloaded Chromium as the fallback — but never
|
|
75
|
+
* auto-download a browser: that is a 120 MB side effect no dashboard button
|
|
76
|
+
* should trigger silently, so it surfaces as an instruction instead.
|
|
77
|
+
*/
|
|
78
|
+
async function launchBrowser() {
|
|
79
|
+
const { chromium } = await import("playwright-core");
|
|
80
|
+
const args = ["--force-color-profile=srgb", "--hide-scrollbars"];
|
|
81
|
+
for (const channel of ["chrome", "msedge", undefined]) {
|
|
82
|
+
try {
|
|
83
|
+
return { browser: await chromium.launch({ args, ...(channel ? { channel } : {}) }) };
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Try the next channel.
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
message: "Couldn't start a browser for screenshots — no Chrome or Edge was found, and " +
|
|
91
|
+
"Playwright's Chromium isn't installed. Run `npx playwright install chromium` " +
|
|
92
|
+
"once, then capture again.",
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Shoot the given routes and record the run in the snapshot index. Old
|
|
97
|
+
* snapshots past `MAX_SNAPSHOTS` are pruned, files included.
|
|
98
|
+
*/
|
|
99
|
+
export async function captureSnapshot(input) {
|
|
100
|
+
if (!(await storeReady())) {
|
|
101
|
+
return {
|
|
102
|
+
ok: false,
|
|
103
|
+
message: "The analytics store isn't writable here, so a snapshot couldn't be recorded. " +
|
|
104
|
+
"Run locally or configure a database — see DATABASE.md.",
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
let run;
|
|
108
|
+
try {
|
|
109
|
+
({ allpages: run } = await import("allpages"));
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
return {
|
|
113
|
+
ok: false,
|
|
114
|
+
message: `The allpages screenshot engine failed to load: ${err instanceof Error ? err.message : "unknown error"}`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const launched = await launchBrowser();
|
|
118
|
+
if ("message" in launched)
|
|
119
|
+
return { ok: false, message: launched.message };
|
|
120
|
+
const id = `${Date.now().toString(36)}`;
|
|
121
|
+
const outDir = join(snapshotsRoot(), id);
|
|
122
|
+
try {
|
|
123
|
+
await mkdir(outDir, { recursive: true });
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
await launched.browser.close().catch(() => { });
|
|
127
|
+
return {
|
|
128
|
+
ok: false,
|
|
129
|
+
message: `Couldn't create the snapshot directory (${err instanceof Error ? err.message : "unknown error"}) — is the filesystem writable?`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const result = await run({
|
|
134
|
+
url: input.origin,
|
|
135
|
+
routes: input.routes.slice(0, MAX_SNAPSHOT_ROUTES),
|
|
136
|
+
outDir,
|
|
137
|
+
devices: [...SNAPSHOT_DEVICES],
|
|
138
|
+
themes: [...SNAPSHOT_THEMES],
|
|
139
|
+
// The dashboard composes its own grid; the stitched contact sheet would
|
|
140
|
+
// only duplicate every image on disk.
|
|
141
|
+
skipSheet: true,
|
|
142
|
+
browser: launched.browser,
|
|
143
|
+
});
|
|
144
|
+
const snapshot = {
|
|
145
|
+
id,
|
|
146
|
+
capturedAt: Date.now(),
|
|
147
|
+
origin: input.origin,
|
|
148
|
+
fingerprint: input.fingerprint,
|
|
149
|
+
shots: result.shots.map((s) => ({
|
|
150
|
+
route: s.route.path,
|
|
151
|
+
device: s.device.name,
|
|
152
|
+
theme: s.theme,
|
|
153
|
+
file: s.file ?? "",
|
|
154
|
+
...(s.skipped ? { skipped: s.skipped } : {}),
|
|
155
|
+
})),
|
|
156
|
+
authWalled: result.authWalled,
|
|
157
|
+
noDarkMode: result.noDarkMode,
|
|
158
|
+
};
|
|
159
|
+
if (snapshot.shots.every((s) => !s.file)) {
|
|
160
|
+
await rm(outDir, { recursive: true, force: true }).catch(() => { });
|
|
161
|
+
return {
|
|
162
|
+
ok: false,
|
|
163
|
+
message: "Every page failed to capture — is the site reachable at " +
|
|
164
|
+
`${input.origin} from this process?`,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
const index = await loadIndex();
|
|
168
|
+
index.snapshots.unshift(snapshot);
|
|
169
|
+
const pruned = index.snapshots.slice(MAX_SNAPSHOTS);
|
|
170
|
+
index.snapshots = index.snapshots.slice(0, MAX_SNAPSHOTS);
|
|
171
|
+
if (!(await setMeta(INDEX_KEY, JSON.stringify(index)))) {
|
|
172
|
+
await rm(outDir, { recursive: true, force: true }).catch(() => { });
|
|
173
|
+
return {
|
|
174
|
+
ok: false,
|
|
175
|
+
message: "The snapshot was shot but the store refused to record it.",
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
for (const old of pruned) {
|
|
179
|
+
await rm(join(snapshotsRoot(), old.id), { recursive: true, force: true }).catch(() => { });
|
|
180
|
+
}
|
|
181
|
+
return { ok: true, snapshot };
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
await rm(outDir, { recursive: true, force: true }).catch(() => { });
|
|
185
|
+
return {
|
|
186
|
+
ok: false,
|
|
187
|
+
message: `Screenshot capture failed: ${err instanceof Error ? err.message : "unknown error"}`,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
await launched.browser.close().catch(() => { });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=snapshots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA2CvD,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAErC,+EAA+E;AAC/E,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,qDAAqD;AACrD,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,SAAS,CAAU,CAAC;AACvD,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;AAEnD,yEAAyE;AACzE,SAAS,aAAa;IACpB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACpD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;YAChD,IAAI,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;gBAAE,OAAO,MAAM,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;QAChE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACjC,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,IAAY;IAEZ,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/E,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,OAAO,yBAAyB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,gEAAgE;IAC/E,CAAC;AACH,CAAC;AAiBD;;;;;GAKG;AACH,KAAK,UAAU,aAAa;IAC1B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,CAAC,4BAA4B,EAAE,mBAAmB,CAAC,CAAC;IACjE,KAAK,MAAM,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EACL,8EAA8E;YAC9E,+EAA+E;YAC/E,2BAA2B;KAC9B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA2B;IAE3B,IAAI,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EACL,+EAA+E;gBAC/E,wDAAwD;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,GAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,kDACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eACvC,EAAE;SACH,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;IACvC,IAAI,SAAS,IAAI,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IAE3E,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/C,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,2CACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eACvC,iCAAiC;SAClC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC;YACvB,GAAG,EAAE,KAAK,CAAC,MAAM;YACjB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC;YAClD,MAAM;YACN,OAAO,EAAE,CAAC,GAAG,gBAAgB,CAAC;YAC9B,MAAM,EAAE,CAAC,GAAG,eAAe,CAAC;YAC5B,wEAAwE;YACxE,sCAAsC;YACtC,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAoB;YAChC,EAAE;YACF,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI;gBACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;gBACrB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gBAClB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC,CAAC;YACH,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;QAEF,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnE,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EACL,0DAA0D;oBAC1D,GAAG,KAAK,CAAC,MAAM,qBAAqB;aACvC,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpD,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnE,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,2DAA2D;aACrE,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAC7E,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,8BACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eACvC,EAAE;SACH,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -9,9 +9,22 @@ export type PolishdTelemetryStatus =
|
|
|
9
9
|
| "unset"
|
|
10
10
|
/** Env kill switch, or no writable store to keep consent in. */
|
|
11
11
|
| "disabled";
|
|
12
|
+
/**
|
|
13
|
+
* The reporting install's own state, sent once per session as an
|
|
14
|
+
* `install_state` event so the collecting side can answer "how many installs
|
|
15
|
+
* have a model connected, and which ones". Resolved server-side from the same
|
|
16
|
+
* settings the dashboard renders — never the key itself, only its presence.
|
|
17
|
+
*/
|
|
18
|
+
export interface PolishdTelemetryInstallState {
|
|
19
|
+
hasModel: boolean;
|
|
20
|
+
provider: string;
|
|
21
|
+
model: string;
|
|
22
|
+
}
|
|
12
23
|
export interface PolishdTelemetryState {
|
|
13
24
|
status: PolishdTelemetryStatus;
|
|
14
25
|
endpoint: string;
|
|
26
|
+
/** Set only when status is "granted" — nothing is resolved before consent. */
|
|
27
|
+
installState: PolishdTelemetryInstallState | null;
|
|
15
28
|
}
|
|
16
29
|
export declare function telemetryDisabledByEnv(): boolean;
|
|
17
30
|
export type PolishdAnalyticsSource = "site" | "telemetry";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/server/telemetry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/server/telemetry.ts"],"names":[],"mappings":"AAuBA,kEAAkE;AAClE,eAAO,MAAM,0BAA0B,2DACmB,CAAC;AAI3D,MAAM,MAAM,sBAAsB;AAChC,wCAAwC;AACtC,SAAS;AACX,uDAAuD;GACrD,QAAQ;AACV,4DAA4D;GAC1D,OAAO;AACT,gEAAgE;GAC9D,UAAU,CAAC;AAEf;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,YAAY,EAAE,4BAA4B,GAAG,IAAI,CAAC;CACnD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAID,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,WAAW,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,IAAI,sBAAsB,CAE/D;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,gEAAgE;AAChE,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1E;AAgBD,mEAAmE;AACnE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAwBhF"}
|
package/dist/server/telemetry.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* the host site's analytics, never its visitors' events.
|
|
20
20
|
*/
|
|
21
21
|
import { getMeta, setMeta, storeReady } from "./store";
|
|
22
|
+
import { resolveSettings } from "../ai/settings";
|
|
22
23
|
/** Where telemetry lands: the polishd site's own installation. */
|
|
23
24
|
export const DEFAULT_TELEMETRY_ENDPOINT = "https://polishd.muskanvaswan.xyz/api/polishd-telemetry";
|
|
24
25
|
const CONSENT_KEY = "telemetry_consent";
|
|
@@ -47,28 +48,48 @@ export function resolveTelemetryEndpoint() {
|
|
|
47
48
|
export async function saveTelemetryConsent(granted) {
|
|
48
49
|
await setMeta(CONSENT_KEY, JSON.stringify({ status: granted ? "granted" : "denied", at: Date.now() }));
|
|
49
50
|
}
|
|
51
|
+
/** The install-state snapshot the emitter reports. Never includes secrets. */
|
|
52
|
+
async function loadInstallState() {
|
|
53
|
+
try {
|
|
54
|
+
const { settings } = await resolveSettings();
|
|
55
|
+
return {
|
|
56
|
+
hasModel: settings.apiKey.length > 0,
|
|
57
|
+
provider: settings.provider,
|
|
58
|
+
model: settings.model,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return { hasModel: false, provider: "", model: "" };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
50
65
|
/** What the dashboard should do about telemetry on this render. */
|
|
51
66
|
export async function loadPolishdTelemetryState() {
|
|
52
67
|
const endpoint = resolveTelemetryEndpoint();
|
|
68
|
+
const off = (status) => ({
|
|
69
|
+
status,
|
|
70
|
+
endpoint,
|
|
71
|
+
installState: null,
|
|
72
|
+
});
|
|
53
73
|
if (telemetryDisabledByEnv())
|
|
54
|
-
return
|
|
74
|
+
return off("disabled");
|
|
55
75
|
// Without a writable store there is nowhere to keep the answer, so asking
|
|
56
76
|
// would mean asking on every single render. Stay quiet instead.
|
|
57
77
|
if (!(await storeReady()))
|
|
58
|
-
return
|
|
78
|
+
return off("disabled");
|
|
59
79
|
const raw = await getMeta(CONSENT_KEY);
|
|
60
80
|
if (!raw)
|
|
61
|
-
return
|
|
81
|
+
return off("unset");
|
|
62
82
|
try {
|
|
63
83
|
const parsed = JSON.parse(raw);
|
|
64
|
-
if (parsed.status === "granted")
|
|
65
|
-
return { status: "granted", endpoint };
|
|
84
|
+
if (parsed.status === "granted") {
|
|
85
|
+
return { status: "granted", endpoint, installState: await loadInstallState() };
|
|
86
|
+
}
|
|
66
87
|
if (parsed.status === "denied")
|
|
67
|
-
return
|
|
88
|
+
return off("denied");
|
|
68
89
|
}
|
|
69
90
|
catch {
|
|
70
91
|
// Unreadable record — treat as never asked rather than silently sending.
|
|
71
92
|
}
|
|
72
|
-
return
|
|
93
|
+
return off("unset");
|
|
73
94
|
}
|
|
74
95
|
//# sourceMappingURL=telemetry.js.map
|