@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.
Files changed (86) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +102 -0
  3. package/README.md +32 -0
  4. package/bin/doctor.mjs +8 -1
  5. package/dist/client/init.d.ts.map +1 -1
  6. package/dist/client/init.js +39 -8
  7. package/dist/client/init.js.map +1 -1
  8. package/dist/client/script-provenance.d.ts +21 -0
  9. package/dist/client/script-provenance.d.ts.map +1 -0
  10. package/dist/client/script-provenance.js +127 -0
  11. package/dist/client/script-provenance.js.map +1 -0
  12. package/dist/config.d.ts +10 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +1 -0
  15. package/dist/config.js.map +1 -1
  16. package/dist/dashboard/design-review-card.d.ts.map +1 -1
  17. package/dist/dashboard/design-review-card.js +3 -3
  18. package/dist/dashboard/design-review-card.js.map +1 -1
  19. package/dist/dashboard/design.d.ts +3 -1
  20. package/dist/dashboard/design.d.ts.map +1 -1
  21. package/dist/dashboard/design.js +3 -2
  22. package/dist/dashboard/design.js.map +1 -1
  23. package/dist/dashboard/index.d.ts.map +1 -1
  24. package/dist/dashboard/index.js +24 -19
  25. package/dist/dashboard/index.js.map +1 -1
  26. package/dist/dashboard/installs.d.ts.map +1 -1
  27. package/dist/dashboard/installs.js +2 -1
  28. package/dist/dashboard/installs.js.map +1 -1
  29. package/dist/dashboard/journeys.d.ts.map +1 -1
  30. package/dist/dashboard/journeys.js +3 -2
  31. package/dist/dashboard/journeys.js.map +1 -1
  32. package/dist/dashboard/pages.d.ts.map +1 -1
  33. package/dist/dashboard/pages.js +1 -1
  34. package/dist/dashboard/pages.js.map +1 -1
  35. package/dist/dashboard/settings.d.ts.map +1 -1
  36. package/dist/dashboard/settings.js +6 -2
  37. package/dist/dashboard/settings.js.map +1 -1
  38. package/dist/dashboard/show-more.d.ts.map +1 -1
  39. package/dist/dashboard/show-more.js +1 -1
  40. package/dist/dashboard/show-more.js.map +1 -1
  41. package/dist/dashboard/snapshot-actions.d.ts +16 -0
  42. package/dist/dashboard/snapshot-actions.d.ts.map +1 -0
  43. package/dist/dashboard/snapshot-actions.js +79 -0
  44. package/dist/dashboard/snapshot-actions.js.map +1 -0
  45. package/dist/dashboard/snapshots.d.ts +6 -0
  46. package/dist/dashboard/snapshots.d.ts.map +1 -0
  47. package/dist/dashboard/snapshots.js +86 -0
  48. package/dist/dashboard/snapshots.js.map +1 -0
  49. package/dist/dashboard/summary.d.ts.map +1 -1
  50. package/dist/dashboard/summary.js +11 -6
  51. package/dist/dashboard/summary.js.map +1 -1
  52. package/dist/dashboard/telemetry.d.ts +3 -1
  53. package/dist/dashboard/telemetry.d.ts.map +1 -1
  54. package/dist/dashboard/telemetry.js +50 -8
  55. package/dist/dashboard/telemetry.js.map +1 -1
  56. package/dist/dashboard.css +79 -2
  57. package/dist/server/ingest.d.ts +2 -5
  58. package/dist/server/ingest.d.ts.map +1 -1
  59. package/dist/server/ingest.js +40 -10
  60. package/dist/server/ingest.js.map +1 -1
  61. package/dist/server/queries.d.ts +23 -11
  62. package/dist/server/queries.d.ts.map +1 -1
  63. package/dist/server/queries.js +98 -34
  64. package/dist/server/queries.js.map +1 -1
  65. package/dist/server/snapshots.d.ts +65 -0
  66. package/dist/server/snapshots.d.ts.map +1 -0
  67. package/dist/server/snapshots.js +194 -0
  68. package/dist/server/snapshots.js.map +1 -0
  69. package/dist/server/telemetry.d.ts +13 -0
  70. package/dist/server/telemetry.d.ts.map +1 -1
  71. package/dist/server/telemetry.js +28 -7
  72. package/dist/server/telemetry.js.map +1 -1
  73. package/dist/shared/capture-status.d.ts +99 -0
  74. package/dist/shared/capture-status.d.ts.map +1 -0
  75. package/dist/shared/capture-status.js +133 -0
  76. package/dist/shared/capture-status.js.map +1 -0
  77. package/dist/shared/error-noise.d.ts +39 -0
  78. package/dist/shared/error-noise.d.ts.map +1 -0
  79. package/dist/shared/error-noise.js +101 -0
  80. package/dist/shared/error-noise.js.map +1 -0
  81. package/dist/shared/types.d.ts +1 -1
  82. package/dist/shared/types.d.ts.map +1 -1
  83. package/dist/shared/types.js +4 -0
  84. package/dist/shared/types.js.map +1 -1
  85. package/docs/SETUP.md +25 -0
  86. package/package.json +6 -1
@@ -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 counter recorded by ingest.
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
- * This is the one number that distinguishes "nobody has visited yet" from
569
- * "everybody has visited and every event was thrown away", which otherwise
570
- * look identical on the dashboard: an empty page with no error.
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 empty = { noSessionCount: 0, lastNoSessionAt: null };
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
- try {
577
- const raw = await getMeta(NO_SESSION_META_KEY);
578
- if (!raw)
579
- return empty;
580
- const rec = JSON.parse(raw);
581
- return {
582
- noSessionCount: typeof rec.count === "number" && Number.isFinite(rec.count) ? rec.count : 0,
583
- lastNoSessionAt: typeof rec.lastAt === "number" && Number.isFinite(rec.lastAt) ? rec.lastAt : null,
584
- };
585
- }
586
- catch {
587
- return empty;
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.map((r) => {
613
- let message = "Unknown error";
645
+ ORDER BY id DESC LIMIT ?`, [limit * 4]);
646
+ return rows
647
+ .map((r) => {
614
648
  const meta = parseMeta(r.meta);
615
- if (meta && typeof meta.message === "string")
616
- message = meta.message;
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
- return rows.map((r) => ({
641
- install: r.install_id,
642
- sessions: num(r, "sessions"),
643
- events: num(r, "events"),
644
- pageViews: num(r, "page_views"),
645
- clicks: num(r, "clicks"),
646
- rageClicks: num(r, "rage_clicks"),
647
- deadClicks: num(r, "dead_clicks"),
648
- lastSeen: num(r, "last_seen"),
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":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GAErB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,mBAAmB;IACjC,uEAAuE;IACvE,0EAA0E;IAC1E,mEAAmE;IACnE,sEAAsE;IACtE,2EAA2E;IAC3E,uEAAuE;IACvE,IAAI,sBAAsB,EAAE,KAAK,WAAW,EAAE,CAAC;QAC7C,OAAO,+DAA+D,CAAC;IACzE,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IACzE,oEAAoE;IACpE,yEAAyE;IACzE,2CAA2C;IAC3C,MAAM,UAAU,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1D,6EAA6E;IAC7E,kFAAkF;IAClF,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;QACtD,UAAU,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;QACtC,UAAU,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO;aACI,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AAC3D,CAAC;AAoFD,+EAA+E;AAC/E,SAAS,GAAG,CAAC,GAAwC,EAAE,GAAW;IAChE,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,CACvB;;;;;;;YAOQ,mBAAmB,EAAE,EAAE,CAChC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;QACpC,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;QAC9B,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC;QAChC,UAAU,EAAE,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC;QAClC,UAAU,EAAE,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC;QAClC,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAK,GAAG,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;;;;;;;;YAQQ,mBAAmB,EAAE;mBACd,CAChB,CAAC;IAEF,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,EAAY,EAAE;QACnB,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,CAAC,CAAC,cAAc,CAAC;QAC7B,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3F,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,MAAM,cAAc,GAClB,cAAc,KAAK,IAAI,IAAI,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,KAAK,GACT,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,GAAG,GAAG,cAAc,CAAC;QACpE,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,IAAc;YACtB,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;YAC5B,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC;YAC9B,UAAU;YACV,UAAU;YACV,QAAQ;YACR,cAAc;YACd,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE;SACnC,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAyBD,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,wEAAwE;AACxE,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,SAAS,QAAQ,CAAC,EAAU;IAC1B,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,MAAM,CAAC,EAAU;IACxB,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;QAChD,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,SAAS;QACd,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAK,GAAG,CAAC;IACzC,IAAI,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;;;;;;;;YAQQ,mBAAmB,EAAE;mBACd,CAChB,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,GAAG,GAAG,CAAC,CAAC,cAAc,CAAC;QAC7B,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3F,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,IAAc;YACtB,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;YAC5B,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC;YAC9B,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;YAChC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;YAChC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;YAC5B,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;SACpE,CAAC;IACJ,CAAC,CAAC;QACF,+CAA+C;SAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;SACpE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,wEAAwE;IACxE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,KAAK,CACvB;YACQ,mBAAmB,EAAE;6CACY,YAAY,GAAG,EACxD,KAAK,CACN,CAAC;IAEF,mDAAmD;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC3D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAc,CAAC;QAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAoB,CAAC,CAAC;IAClC,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,UAAU,GAAG,CAAC,IAA0C,EAAoB,EAAE;QAClF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,MAAM,GAAG,cAAc,GAAG,CAAC;YAAE,KAAK,GAAG,GAAG,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;QAC7F,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAW,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAK,GAAG,EAAE;IAC9C,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;;;;;;;;;YASQ,mBAAmB,EAAE;;8CAEa,CAC3C,CAAC;IAEF,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,EAAe,EAAE;QACtB,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO;YACL,KAAK,EAAE,CAAC,CAAC,KAAe;YACxB,QAAQ,EAAG,CAAC,CAAC,QAAmB,IAAI,IAAI;YACxC,UAAU,EAAG,CAAC,CAAC,UAAqB,IAAI,IAAI;YAC5C,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;YACtB,MAAM;YACN,UAAU;YACV,UAAU;YACV,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;YAC9D,eAAe,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;SAClC,CAAC;IACJ,CAAC,CAAC;QACF,kEAAkE;SACjE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SAC1E,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;;;;YAIQ,mBAAmB,EAAE;;mBAEd,CAChB,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3F,OAAO;YACL,QAAQ,EAAE,CAAC,CAAC,QAAkB;YAC9B,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;YAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;SAC9D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9D,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC;QACzB,GAAG,CAAC;QACJ,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;KAClE,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAK,GAAG,EAAE;IACjD,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;;;;;;;;YAQQ,mBAAmB,EAAE;;yDAEwB,CACtD,CAAC;IAEF,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAC,CAAC;QAC3B,KAAK,EAAE,CAAC,CAAC,KAAe;QACxB,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC;QACxC,QAAQ,EAAG,CAAC,CAAC,QAAmB,IAAI,IAAI;QACxC,UAAU,EAAG,CAAC,CAAC,UAAqB,IAAI,IAAI;QAC5C,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;QACxB,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;QAC5B,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SAC9D,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAkDD,kEAAkE;AAClE,MAAM,oBAAoB,GAAkC,IAAI,GAAG,CAAmB;IACpF,WAAW;IACX,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,aAAa;CACd,CAAC,CAAC;AAEH,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAK,GAAG,CAAC;IAChD,IAAI,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,qDAAqD;IACrD,MAAM,OAAO,GAAG,MAAM,KAAK,CACzB;;;;;;;;;;;YAWQ,mBAAmB,EAAE;yBACR,CACtB,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAY;YAClB,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;YAC1B,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;YACtB,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;YACtB,IAAI;YACJ,IAAI;YACJ,MAAM;YACN,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC;YAClC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;SAClE,CAAC;IACJ,CAAC,CAAC;QACF,sEAAsE;SACrE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;SAC7B,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;QACjB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CACpB;SACA,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,6EAA6E;IAC7E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;YACQ,mBAAmB,EAAE;4BACL,YAAY;6BACX,EACzB,GAAG,CACJ,CAAC;IAEF,qDAAqD;IACrD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC7D,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,CAAC,CAAC,UAAoB,CAAC;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAClB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,uEAAuE;IACvE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAkB,EAAE;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,MAAM,GAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvF,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAwB,CAAC;YAExC,kEAAkE;YAClE,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,MAAM,CAAC,QAAQ,GAAI,CAAC,CAAC,IAAe,IAAI,IAAI,CAAC;gBAC7C,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACxD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ;wBAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;oBACvD,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;wBAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;gBAC1D,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS,CAAC,0BAA0B;YACzE,IAAI,KAAK,CAAC,MAAM,IAAI,iBAAiB;gBAAE,MAAM;YAE7C,IAAI,KAAK,GAAkB,IAAI,CAAC;YAChC,IAAI,MAAM,GAAkB,IAAI,CAAC;YACjC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrF,CAAC;iBAAM,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC1D,KAAK;oBACF,CAAC,CAAC,SAAoB,IAAK,CAAC,CAAC,IAAe,IAAK,CAAC,CAAC,QAAmB,IAAI,IAAI,CAAC;YACpF,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,OAAO;YACpB,OAAO,EAAE,CAAC,CAAC,KAAK;YAChB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC;YAC5C,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM;YACN,UAAU,EAAE,CAAC,CAAC,IAAI;YAClB,UAAU,EAAE,CAAC,CAAC,IAAI;YAClB,QAAQ,EAAE,CAAC,CAAC,MAAM;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK;YACL,SAAS,EAAE,KAAK,CAAC,MAAM,IAAI,iBAAiB;SAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAmCD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,IAAI,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;;;;;;;;;;;;YAYQ,mBAAmB,EAAE;;wCAEO,mBAAmB,EAAE;;;;8DAIC,CAC3D,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,oEAAoE;IACpE,6EAA6E;IAC7E,uEAAuE;IACvE,yDAAyD;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,+BAA+B,mBAAmB,EAAE;uDACD,YAAY,GAAG,EAClE,KAAK,CACN,CAAC;IAEF,yDAAyD;IACzD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsE,CAAC;IAC3F,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,CAAC,SAAmB,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;YAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI;gBAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QAAC,CAAC;QAC9G,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;YAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QAAC,CAAC;IACvF,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,EAAE;QAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAAC,CAAC;QACzF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAsB,EAAE;QACxC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAc,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YACxB,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;YAChC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;YAChC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YACxB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YAClF,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YACxB,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC;YACxC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/E,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YACxD,cAAc,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YACxE,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;YAC5B,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAMD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;IACnC,MAAM,KAAK,GAAkB;QAC3B,cAAc,EAAE,CAAC;QACjB,oBAAoB,EAAE,CAAC;QACvB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,CAAC;QAChB,QAAQ;KACT,CAAC;IACF,IAAI,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;IACpC,0EAA0E;IAC1E,uEAAuE;IACvE,2EAA2E;IAC3E,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpC,KAAK,CACH;;;;cAIQ,mBAAmB,EAAE,EAAE,EAC/B,CAAC,KAAK,EAAE,KAAK,CAAC,CACf;QACD,OAAO,CAAC,mBAAmB,CAAC;KAC7B,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,4EAA4E;IAC5E,2EAA2E;IAC3E,eAAe;IACf,MAAM,UAAU,GAAG,GAAG,EAAE,YAAY,KAAK,IAAI,IAAI,GAAG,EAAE,YAAY,KAAK,SAAS,CAAC;IAEjF,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO;QACL,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAC/B,oBAAoB,EAAE,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC;QACrD,eAAe,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QAC1D,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1D,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC;QACtC,aAAa,EAAE,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC;QACxC,QAAQ;KACT,CAAC;AACJ,CAAC;AAiBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,GACtF,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,WAAW,EAAE;QACb,gBAAgB,EAAE;QAClB,WAAW,CAAC,CAAC,CAAC;QACd,eAAe,CAAC,EAAE,CAAC;QACnB,kBAAkB,EAAE;QACpB,kBAAkB,CAAC,EAAE,CAAC;QACtB,kBAAkB,CAAC,CAAC,CAAC;QACrB,eAAe,CAAC,CAAC,CAAC;QAClB,sBAAsB,EAAE;KACzB,CAAC,CAAC;IACL,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC9F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAK,GAAG,EAAE;IAC9C,wEAAwE;IACxE,4EAA4E;IAC5E,0EAA0E;IAC1E,2DAA2D;IAC3D,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;YACQ,mBAAmB,EAAE;8BACH,EAC1B,CAAC,KAAK,GAAG,CAAC,CAAC,CACZ,CAAC;IACF,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC1F,MAAM,MAAM,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,MAAM,GACV,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,IAAc;YACtB,SAAS,EAAG,CAAC,CAAC,SAAoB,IAAI,SAAS;YAC/C,OAAO;YACP,MAAM;YACN,MAAM;YACN,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;SACjB,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;SACvE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AA2BD,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAK,GAAG,GAAG;IACpD,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;;;;;;;;;;;;aAYS,EACT,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,0EAA0E;IAC1E,qEAAqE;IACrE,kEAAkE;IAClE,MAAM,SAAS,GAAG,MAAM,KAAK,CAC3B;;;mFAG+E,CAChF,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgF,CAAC;IACvG,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAoB,EAAE;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI;YAChC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;YACnF,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;SACxE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAoB,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,CAAC,CAAC,UAAoB;YAC/B,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;YAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YACxB,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;YAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YACxB,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC;YACjC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC;YACjC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC;YAC7B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;YACvC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;YACjD,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;SAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAUD,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAK,GAAG,EAAE;IACnD,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB;;;;;;;;aAQS,EACT,CAAC,KAAK,CAAC,CACR,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,CAAC,CAAC,IAAc;QACtB,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;QACtB,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;QAC5B,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;KAC7B,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,sEAAsE,CAAC,CAAC;IACjG,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,CAAC"}
@@ -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":"AAsBA,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,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;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;AAED,mEAAmE;AACnE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAiBhF"}
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"}
@@ -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 { status: "disabled", endpoint };
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 { status: "disabled", endpoint };
78
+ return off("disabled");
59
79
  const raw = await getMeta(CONSENT_KEY);
60
80
  if (!raw)
61
- return { status: "unset", endpoint };
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 { status: "denied", endpoint };
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 { status: "unset", endpoint };
93
+ return off("unset");
73
94
  }
74
95
  //# sourceMappingURL=telemetry.js.map