@vibes.diy/api-svc 2.0.0-dev-cli-e → 2.0.0-dev-cli-j
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/cf-serve.d.ts +1 -4
- package/cf-serve.js +10 -15
- package/cf-serve.js.map +1 -1
- package/check-auth.js +13 -3
- package/check-auth.js.map +1 -1
- package/create-handler.d.ts +5 -6
- package/create-handler.js +6 -32
- package/create-handler.js.map +1 -1
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/index.js.map +1 -1
- package/intern/ensure-application-chat-id.js +5 -5
- package/intern/ensure-application-chat-id.js.map +1 -1
- package/intern/ensure-chat-id.js +45 -33
- package/intern/ensure-chat-id.js.map +1 -1
- package/intern/ensure-slug-binding.d.ts +12 -26
- package/intern/ensure-slug-binding.js +125 -29
- package/intern/ensure-slug-binding.js.map +1 -1
- package/intern/get-model-defaults.d.ts +12 -0
- package/intern/get-model-defaults.js +90 -0
- package/intern/get-model-defaults.js.map +1 -0
- package/intern/get-slug-binding.d.ts +2 -3
- package/intern/get-slug-binding.js +13 -4
- package/intern/get-slug-binding.js.map +1 -1
- package/intern/grouped-vibe-import-map.d.ts +2 -0
- package/intern/grouped-vibe-import-map.js +2 -0
- package/intern/grouped-vibe-import-map.js.map +1 -1
- package/intern/render-vibe.d.ts +2 -2
- package/intern/render-vibe.js.map +1 -1
- package/intern/resend-prev-msg.js +5 -13
- package/intern/resend-prev-msg.js.map +1 -1
- package/intern/write-apps.d.ts +4 -5
- package/intern/write-apps.js +27 -18
- package/intern/write-apps.js.map +1 -1
- package/models.json +179 -0
- package/package.json +12 -9
- package/peers/s3.d.ts +1 -1
- package/public/ensure-app-settings.js +39 -12
- package/public/ensure-app-settings.js.map +1 -1
- package/public/ensure-app-slug-item.js +23 -47
- package/public/ensure-app-slug-item.js.map +1 -1
- package/public/ensure-user-settings.js +9 -8
- package/public/ensure-user-settings.js.map +1 -1
- package/public/get-chat-details.js +7 -5
- package/public/get-chat-details.js.map +1 -1
- package/public/invite-flow.js +59 -36
- package/public/invite-flow.js.map +1 -1
- package/public/list-models.d.ts +14 -0
- package/public/list-models.js +41 -0
- package/public/list-models.js.map +1 -0
- package/public/open-chat.js +2 -2
- package/public/open-chat.js.map +1 -1
- package/public/prompt-chat-section.d.ts +1 -1
- package/public/prompt-chat-section.js +40 -15
- package/public/prompt-chat-section.js.map +1 -1
- package/public/request-flow.js +65 -53
- package/public/request-flow.js.map +1 -1
- package/public/user-slug-bindings.d.ts +5 -0
- package/public/user-slug-bindings.js +144 -0
- package/public/user-slug-bindings.js.map +1 -0
- package/types.d.ts +37 -18
- package/types.js +27 -1
- package/types.js.map +1 -1
- package/usage-report/README.md +27 -0
- package/usage-report/inspect-db-report-template.d.ts +29 -0
- package/usage-report/inspect-db-report-template.js +379 -0
- package/usage-report/inspect-db-report-template.js.map +1 -0
- package/usage-report/inspect-db-report.d.ts +1 -0
- package/usage-report/inspect-db-report.js +264 -0
- package/usage-report/inspect-db-report.js.map +1 -0
- package/usage-report/inspect-db.d.ts +1 -0
- package/usage-report/inspect-db.js +226 -0
- package/usage-report/inspect-db.js.map +1 -0
- package/vibes-msg-evento.js +3 -1
- package/vibes-msg-evento.js.map +1 -1
- package/intern/ensure-storage.d.ts +0 -26
- package/intern/ensure-storage.js +0 -86
- package/intern/ensure-storage.js.map +0 -1
- package/intern/send-email.d.ts +0 -4
- package/intern/send-email.js +0 -55
- package/intern/send-email.js.map +0 -1
- package/intern/store-screenshot.d.ts +0 -17
- package/intern/store-screenshot.js +0 -36
- package/intern/store-screenshot.js.map +0 -1
- package/peers/sql.d.ts +0 -22
- package/peers/sql.js +0 -102
- package/peers/sql.js.map +0 -1
- package/sql/tables.d.ts +0 -1536
- package/sql/tables.js +0 -38
- package/sql/tables.js.map +0 -1
- package/sql/vibes-diy-api-schema-pg.d.ts +0 -1418
- package/sql/vibes-diy-api-schema-pg.js +0 -141
- package/sql/vibes-diy-api-schema-pg.js.map +0 -1
- package/sql/vibes-diy-api-schema-sqlite.d.ts +0 -1536
- package/sql/vibes-diy-api-schema-sqlite.js +0 -131
- package/sql/vibes-diy-api-schema-sqlite.js.map +0 -1
package/types.js
CHANGED
|
@@ -1,2 +1,28 @@
|
|
|
1
|
-
|
|
1
|
+
import { type } from "arktype";
|
|
2
|
+
export const UserSlugBinding = type({
|
|
3
|
+
type: "'vibes.diy-user-slug-binding'",
|
|
4
|
+
userId: "string",
|
|
5
|
+
userSlug: "string",
|
|
6
|
+
tenant: "string",
|
|
7
|
+
});
|
|
8
|
+
export function isUserSlugBinding(obj) {
|
|
9
|
+
return !(UserSlugBinding(obj) instanceof type.errors);
|
|
10
|
+
}
|
|
11
|
+
export const AppSlugBinding = type({
|
|
12
|
+
type: "'vibes.diy-app-slug-binding'",
|
|
13
|
+
userId: "string",
|
|
14
|
+
appSlug: "string",
|
|
15
|
+
ledger: "string",
|
|
16
|
+
});
|
|
17
|
+
export function isAppSlugBinding(obj) {
|
|
18
|
+
return !(AppSlugBinding(obj) instanceof type.errors);
|
|
19
|
+
}
|
|
20
|
+
export const AppUserSlugBinding = type({
|
|
21
|
+
type: "'vibes.diy-app-user-slug-binding'",
|
|
22
|
+
userSlug: UserSlugBinding,
|
|
23
|
+
appSlug: AppSlugBinding,
|
|
24
|
+
});
|
|
25
|
+
export function isAppUserSlugBinding(obj) {
|
|
26
|
+
return !(AppUserSlugBinding(obj) instanceof type.errors);
|
|
27
|
+
}
|
|
2
28
|
//# sourceMappingURL=types.js.map
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../jsr/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../jsr/types.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAyC/B,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;IAClC,IAAI,EAAE,+BAA+B;IACrC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAC;AAGH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,8BAA8B;IACpC,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAC;AAGH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;IACrC,IAAI,EAAE,mCAAmC;IACzC,QAAQ,EAAE,eAAe;IACzB,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AAGH,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Usage Report
|
|
2
|
+
|
|
3
|
+
This directory contains the database inspection and usage-report tooling for team reporting.
|
|
4
|
+
|
|
5
|
+
Files:
|
|
6
|
+
|
|
7
|
+
- `inspect-db.ts`: read-only database inspector for connection info, table listings, table samples, and ad hoc SQL.
|
|
8
|
+
- `inspect-db-report.ts`: report generator that queries the database, writes CSV snapshots, and produces the HTML report.
|
|
9
|
+
- `inspect-db-report-template.ts`: HTML template/rendering module used by the report generator.
|
|
10
|
+
|
|
11
|
+
Commands:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pnpm --dir /Users/jchris/code/fp/vibes.diy/vibes.diy/api/svc run inspect:db info
|
|
15
|
+
pnpm --dir /Users/jchris/code/fp/vibes.diy/vibes.diy/api/svc run inspect:db tables
|
|
16
|
+
pnpm --dir /Users/jchris/code/fp/vibes.diy/vibes.diy/api/svc run inspect:db-report
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Local configuration:
|
|
20
|
+
|
|
21
|
+
- Put `NEON_DATABASE_URL=...` in `/Users/jchris/code/fp/vibes.diy/vibes.diy/api/svc/.dev.vars`
|
|
22
|
+
- `.dev.vars` is gitignored
|
|
23
|
+
|
|
24
|
+
Generated output:
|
|
25
|
+
|
|
26
|
+
- HTML and CSV files are written to `vibes.diy/api/svc/dist/inspect-db-report`
|
|
27
|
+
- rerunning the report overwrites the same files in place
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
interface ReportData {
|
|
2
|
+
readonly generatedAt: string;
|
|
3
|
+
readonly info: {
|
|
4
|
+
readonly database: string;
|
|
5
|
+
readonly current_schema: string;
|
|
6
|
+
readonly current_user: string;
|
|
7
|
+
readonly server_addr: string;
|
|
8
|
+
readonly server_port: number;
|
|
9
|
+
readonly schemas: readonly string[];
|
|
10
|
+
};
|
|
11
|
+
readonly tableCounts: readonly {
|
|
12
|
+
readonly table: string;
|
|
13
|
+
readonly rowCount: number;
|
|
14
|
+
}[];
|
|
15
|
+
readonly membershipSummary: {
|
|
16
|
+
readonly membership_count: number;
|
|
17
|
+
readonly shared_app_count: number;
|
|
18
|
+
readonly distinct_member_count: number;
|
|
19
|
+
};
|
|
20
|
+
readonly membershipTimeseries: readonly Record<string, unknown>[];
|
|
21
|
+
readonly userSlugBindingsTimeseries: readonly Record<string, unknown>[];
|
|
22
|
+
readonly membershipsByApp: readonly Record<string, unknown>[];
|
|
23
|
+
readonly userModelRows: readonly Record<string, unknown>[];
|
|
24
|
+
readonly appModelRows: readonly Record<string, unknown>[];
|
|
25
|
+
readonly userSettingsSample: readonly Record<string, unknown>[];
|
|
26
|
+
readonly appSettingsSample: readonly Record<string, unknown>[];
|
|
27
|
+
}
|
|
28
|
+
export declare function renderHtmlReport(data: ReportData): string;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { renderToStaticMarkup } from "react-dom/server";
|
|
3
|
+
function flattenValue(value) {
|
|
4
|
+
if (value === null || value === undefined)
|
|
5
|
+
return "";
|
|
6
|
+
if (typeof value === "string")
|
|
7
|
+
return value;
|
|
8
|
+
if (typeof value === "number" || typeof value === "boolean")
|
|
9
|
+
return String(value);
|
|
10
|
+
return JSON.stringify(value);
|
|
11
|
+
}
|
|
12
|
+
function collectKeys(rows) {
|
|
13
|
+
return Array.from(rows.reduce((set, row) => {
|
|
14
|
+
Object.keys(row).forEach((key) => set.add(key));
|
|
15
|
+
return set;
|
|
16
|
+
}, new Set()));
|
|
17
|
+
}
|
|
18
|
+
function DataTable({ rows }) {
|
|
19
|
+
if (rows.length === 0) {
|
|
20
|
+
return React.createElement("p", { className: "empty" }, "No rows");
|
|
21
|
+
}
|
|
22
|
+
const keys = collectKeys(rows);
|
|
23
|
+
return (React.createElement("div", { className: "table-wrap" },
|
|
24
|
+
React.createElement("table", null,
|
|
25
|
+
React.createElement("thead", null,
|
|
26
|
+
React.createElement("tr", null, keys.map((key) => (React.createElement("th", { key: key }, key))))),
|
|
27
|
+
React.createElement("tbody", null, rows.map((row, rowIdx) => (React.createElement("tr", { key: rowIdx }, keys.map((key) => (React.createElement("td", { key: key },
|
|
28
|
+
React.createElement("pre", null, flattenValue(row[key]))))))))))));
|
|
29
|
+
}
|
|
30
|
+
function TrendChart({ rows, valueKey, }) {
|
|
31
|
+
if (rows.length === 0) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const values = rows.map((row) => Number(row[valueKey] ?? 0));
|
|
35
|
+
const max = Math.max(...values, 1);
|
|
36
|
+
const width = 720;
|
|
37
|
+
const height = 220;
|
|
38
|
+
const padding = 18;
|
|
39
|
+
const pointCoords = values.map((value, index) => {
|
|
40
|
+
const x = rows.length === 1 ? width / 2 : padding + (index * (width - padding * 2)) / (rows.length - 1);
|
|
41
|
+
const y = height - padding - (value / max) * (height - padding * 2);
|
|
42
|
+
return { x, y };
|
|
43
|
+
});
|
|
44
|
+
const pointsStr = pointCoords.map(({ x, y }) => `${x},${y}`).join(" ");
|
|
45
|
+
const lastValue = values[values.length - 1] ?? 0;
|
|
46
|
+
const firstDay = rows[0]?.["day"] ?? "";
|
|
47
|
+
const lastDay = rows[rows.length - 1]?.["day"] ?? "";
|
|
48
|
+
return (React.createElement("div", { className: "trend-card" },
|
|
49
|
+
React.createElement("div", { className: "trend-meta" },
|
|
50
|
+
React.createElement("div", null,
|
|
51
|
+
React.createElement("div", { className: "label" }, "Current Total"),
|
|
52
|
+
React.createElement("div", { className: "trend-value" }, lastValue)),
|
|
53
|
+
React.createElement("div", { className: "trend-range" },
|
|
54
|
+
firstDay,
|
|
55
|
+
" to ",
|
|
56
|
+
lastDay)),
|
|
57
|
+
React.createElement("svg", { viewBox: `0 0 ${width} ${height}`, className: "trend-chart", role: "img", "aria-label": "30 day trend" },
|
|
58
|
+
React.createElement("rect", { x: "0", y: "0", width: width, height: height, fill: "transparent" }),
|
|
59
|
+
React.createElement("g", { stroke: "rgba(15, 23, 42, 0.18)", strokeWidth: "1" },
|
|
60
|
+
React.createElement("line", { x1: padding, y1: padding, x2: padding, y2: height - padding }),
|
|
61
|
+
React.createElement("line", { x1: padding, y1: height - padding, x2: width - padding, y2: height - padding }),
|
|
62
|
+
React.createElement("line", { x1: padding, y1: height / 2, x2: width - padding, y2: height / 2 })),
|
|
63
|
+
React.createElement("polyline", { fill: "none", stroke: "var(--ink)", strokeWidth: "5", points: pointsStr }),
|
|
64
|
+
pointCoords.map(({ x, y }, i) => (React.createElement("circle", { key: i, cx: x, cy: y, r: "4", fill: "var(--plate)", stroke: "var(--ink)", strokeWidth: "3" }))))));
|
|
65
|
+
}
|
|
66
|
+
function TrendSection({ title, description, rows, valueKey, }) {
|
|
67
|
+
return (React.createElement("section", null,
|
|
68
|
+
React.createElement("h2", null, title),
|
|
69
|
+
React.createElement("p", null, description),
|
|
70
|
+
React.createElement(TrendChart, { rows: rows, valueKey: valueKey })));
|
|
71
|
+
}
|
|
72
|
+
function MetricCard({ label, value }) {
|
|
73
|
+
return (React.createElement("div", { className: "card" },
|
|
74
|
+
React.createElement("div", { className: "label" }, label),
|
|
75
|
+
React.createElement("div", { className: "value" }, String(value))));
|
|
76
|
+
}
|
|
77
|
+
const reportCss = `
|
|
78
|
+
:root {
|
|
79
|
+
color-scheme: light;
|
|
80
|
+
--paper: #f1f5f9;
|
|
81
|
+
--grid-soft: #cbd5e1;
|
|
82
|
+
--grid-strong: #94a3b8;
|
|
83
|
+
--slate: #64748b;
|
|
84
|
+
--ink: #0f172a;
|
|
85
|
+
--plate: #ffffff;
|
|
86
|
+
--panel: #e2e8f0;
|
|
87
|
+
--shadow: #242424;
|
|
88
|
+
--accent: #94a3b8;
|
|
89
|
+
--accent-strong: #64748b;
|
|
90
|
+
--grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.2' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='0.35'/%3E%3C/svg%3E");
|
|
91
|
+
}
|
|
92
|
+
* { box-sizing: border-box; }
|
|
93
|
+
html {
|
|
94
|
+
background:
|
|
95
|
+
repeating-linear-gradient(0deg, transparent 0 19px, var(--grid-soft) 19px 20px),
|
|
96
|
+
repeating-linear-gradient(90deg, transparent 0 19px, var(--grid-soft) 19px 20px),
|
|
97
|
+
linear-gradient(180deg, #f8fbff 0%, var(--paper) 100%);
|
|
98
|
+
background-attachment: fixed;
|
|
99
|
+
}
|
|
100
|
+
body {
|
|
101
|
+
margin: 0;
|
|
102
|
+
font-family: "Arial Black", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
103
|
+
background: transparent;
|
|
104
|
+
color: var(--ink);
|
|
105
|
+
min-height: 100vh;
|
|
106
|
+
position: relative;
|
|
107
|
+
}
|
|
108
|
+
body::before {
|
|
109
|
+
content: "";
|
|
110
|
+
position: fixed;
|
|
111
|
+
inset: 0;
|
|
112
|
+
background-image: var(--grain);
|
|
113
|
+
opacity: 0.05;
|
|
114
|
+
mix-blend-mode: multiply;
|
|
115
|
+
pointer-events: none;
|
|
116
|
+
filter: blur(0.6px) contrast(102%) brightness(101%);
|
|
117
|
+
}
|
|
118
|
+
main {
|
|
119
|
+
max-width: 1200px;
|
|
120
|
+
margin: 0 auto;
|
|
121
|
+
padding: 32px 20px 72px;
|
|
122
|
+
position: relative;
|
|
123
|
+
}
|
|
124
|
+
h1, h2, h3 { margin: 0; }
|
|
125
|
+
h1 {
|
|
126
|
+
font-size: clamp(40px, 7vw, 72px);
|
|
127
|
+
line-height: 0.95;
|
|
128
|
+
letter-spacing: -0.04em;
|
|
129
|
+
text-transform: uppercase;
|
|
130
|
+
}
|
|
131
|
+
h2 {
|
|
132
|
+
font-size: 28px;
|
|
133
|
+
margin-bottom: 12px;
|
|
134
|
+
text-transform: uppercase;
|
|
135
|
+
letter-spacing: 0.04em;
|
|
136
|
+
}
|
|
137
|
+
p {
|
|
138
|
+
color: var(--slate);
|
|
139
|
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
140
|
+
font-size: 15px;
|
|
141
|
+
line-height: 1.5;
|
|
142
|
+
}
|
|
143
|
+
.hero {
|
|
144
|
+
display: grid;
|
|
145
|
+
gap: 20px;
|
|
146
|
+
margin-bottom: 32px;
|
|
147
|
+
}
|
|
148
|
+
.meta {
|
|
149
|
+
display: grid;
|
|
150
|
+
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
|
151
|
+
gap: 16px;
|
|
152
|
+
}
|
|
153
|
+
.card {
|
|
154
|
+
background: var(--plate);
|
|
155
|
+
border: 4px solid var(--ink);
|
|
156
|
+
border-radius: 0;
|
|
157
|
+
padding: 16px;
|
|
158
|
+
box-shadow: 8px 8px 0 var(--shadow);
|
|
159
|
+
}
|
|
160
|
+
.label {
|
|
161
|
+
font-size: 12px;
|
|
162
|
+
text-transform: uppercase;
|
|
163
|
+
letter-spacing: 0.08em;
|
|
164
|
+
color: var(--slate);
|
|
165
|
+
margin-bottom: 8px;
|
|
166
|
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
167
|
+
font-weight: 700;
|
|
168
|
+
}
|
|
169
|
+
.value {
|
|
170
|
+
font-size: 30px;
|
|
171
|
+
color: var(--ink);
|
|
172
|
+
}
|
|
173
|
+
section {
|
|
174
|
+
margin-top: 32px;
|
|
175
|
+
}
|
|
176
|
+
section > h2,
|
|
177
|
+
section > p {
|
|
178
|
+
position: relative;
|
|
179
|
+
z-index: 1;
|
|
180
|
+
}
|
|
181
|
+
section > h2 {
|
|
182
|
+
display: inline-block;
|
|
183
|
+
background: var(--panel);
|
|
184
|
+
border: 4px solid var(--ink);
|
|
185
|
+
padding: 10px 14px 8px;
|
|
186
|
+
box-shadow: 6px 6px 0 var(--shadow);
|
|
187
|
+
}
|
|
188
|
+
section > p {
|
|
189
|
+
margin: 14px 0 0;
|
|
190
|
+
max-width: 860px;
|
|
191
|
+
}
|
|
192
|
+
.table-wrap {
|
|
193
|
+
overflow: auto;
|
|
194
|
+
border: 4px solid var(--ink);
|
|
195
|
+
border-radius: 0;
|
|
196
|
+
background: var(--plate);
|
|
197
|
+
box-shadow: 10px 10px 0 var(--shadow);
|
|
198
|
+
margin-top: 16px;
|
|
199
|
+
}
|
|
200
|
+
table {
|
|
201
|
+
width: 100%;
|
|
202
|
+
border-collapse: collapse;
|
|
203
|
+
}
|
|
204
|
+
th, td {
|
|
205
|
+
text-align: left;
|
|
206
|
+
vertical-align: top;
|
|
207
|
+
padding: 12px 14px;
|
|
208
|
+
border-bottom: 3px solid var(--ink);
|
|
209
|
+
border-right: 3px solid var(--ink);
|
|
210
|
+
}
|
|
211
|
+
th:last-child,
|
|
212
|
+
td:last-child {
|
|
213
|
+
border-right: 0;
|
|
214
|
+
}
|
|
215
|
+
tbody tr:last-child td {
|
|
216
|
+
border-bottom: 0;
|
|
217
|
+
}
|
|
218
|
+
th {
|
|
219
|
+
position: sticky;
|
|
220
|
+
top: 0;
|
|
221
|
+
background:
|
|
222
|
+
radial-gradient(circle at 1px 1px, rgba(15, 23, 42, 0.16) 1px, transparent 0) 0 0 / 12px 12px,
|
|
223
|
+
linear-gradient(180deg, var(--panel) 0%, #dbe4ef 100%);
|
|
224
|
+
font-size: 13px;
|
|
225
|
+
text-transform: uppercase;
|
|
226
|
+
letter-spacing: 0.06em;
|
|
227
|
+
z-index: 1;
|
|
228
|
+
}
|
|
229
|
+
td pre {
|
|
230
|
+
margin: 0;
|
|
231
|
+
white-space: pre-wrap;
|
|
232
|
+
word-break: break-word;
|
|
233
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
234
|
+
font-size: 12px;
|
|
235
|
+
}
|
|
236
|
+
.empty {
|
|
237
|
+
margin-top: 16px;
|
|
238
|
+
padding: 18px;
|
|
239
|
+
background: var(--plate);
|
|
240
|
+
border: 4px dashed var(--ink);
|
|
241
|
+
border-radius: 0;
|
|
242
|
+
box-shadow: 8px 8px 0 var(--shadow);
|
|
243
|
+
}
|
|
244
|
+
.hero-panel {
|
|
245
|
+
background: var(--plate);
|
|
246
|
+
border: 6px solid var(--ink);
|
|
247
|
+
box-shadow: 12px 12px 0 var(--shadow);
|
|
248
|
+
padding: 20px;
|
|
249
|
+
}
|
|
250
|
+
.hero-kicker {
|
|
251
|
+
display: inline-block;
|
|
252
|
+
margin-bottom: 14px;
|
|
253
|
+
padding: 8px 12px;
|
|
254
|
+
background: linear-gradient(180deg, #dbe4ef 0%, var(--accent) 100%);
|
|
255
|
+
color: var(--ink);
|
|
256
|
+
border: 3px solid var(--ink);
|
|
257
|
+
font-size: 12px;
|
|
258
|
+
line-height: 1;
|
|
259
|
+
letter-spacing: 0.1em;
|
|
260
|
+
text-transform: uppercase;
|
|
261
|
+
}
|
|
262
|
+
.hero-panel p {
|
|
263
|
+
margin: 14px 0 0;
|
|
264
|
+
max-width: 760px;
|
|
265
|
+
}
|
|
266
|
+
.trend-card {
|
|
267
|
+
margin-top: 16px;
|
|
268
|
+
background: var(--plate);
|
|
269
|
+
border: 4px solid var(--ink);
|
|
270
|
+
box-shadow: 10px 10px 0 var(--shadow);
|
|
271
|
+
padding: 16px;
|
|
272
|
+
}
|
|
273
|
+
.trend-meta {
|
|
274
|
+
display: flex;
|
|
275
|
+
justify-content: space-between;
|
|
276
|
+
gap: 12px;
|
|
277
|
+
align-items: end;
|
|
278
|
+
margin-bottom: 12px;
|
|
279
|
+
}
|
|
280
|
+
.trend-value {
|
|
281
|
+
font-size: 40px;
|
|
282
|
+
line-height: 1;
|
|
283
|
+
}
|
|
284
|
+
.trend-range {
|
|
285
|
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
286
|
+
color: var(--slate);
|
|
287
|
+
font-size: 13px;
|
|
288
|
+
text-transform: uppercase;
|
|
289
|
+
letter-spacing: 0.08em;
|
|
290
|
+
}
|
|
291
|
+
.trend-chart {
|
|
292
|
+
width: 100%;
|
|
293
|
+
height: auto;
|
|
294
|
+
display: block;
|
|
295
|
+
background:
|
|
296
|
+
repeating-linear-gradient(0deg, transparent 0 19px, rgba(148, 163, 184, 0.2) 19px 20px);
|
|
297
|
+
}
|
|
298
|
+
@media (max-width: 640px) {
|
|
299
|
+
main {
|
|
300
|
+
padding: 20px 12px 56px;
|
|
301
|
+
}
|
|
302
|
+
.card,
|
|
303
|
+
.empty,
|
|
304
|
+
.hero-panel,
|
|
305
|
+
.trend-card,
|
|
306
|
+
.table-wrap,
|
|
307
|
+
section > h2 {
|
|
308
|
+
box-shadow: 6px 6px 0 var(--shadow);
|
|
309
|
+
}
|
|
310
|
+
th, td {
|
|
311
|
+
padding: 10px;
|
|
312
|
+
}
|
|
313
|
+
.trend-meta {
|
|
314
|
+
flex-direction: column;
|
|
315
|
+
align-items: start;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
`;
|
|
319
|
+
function ReportPage(data) {
|
|
320
|
+
const { generatedAt, info, tableCounts, membershipSummary, membershipTimeseries, userSlugBindingsTimeseries, membershipsByApp, userModelRows, appModelRows, userSettingsSample, appSettingsSample, } = data;
|
|
321
|
+
const totalRows = tableCounts.reduce((sum, row) => sum + Number(row.rowCount || 0), 0);
|
|
322
|
+
const lastBindingsCount = userSlugBindingsTimeseries[userSlugBindingsTimeseries.length - 1]?.["user_slug_bindings_count"] ?? 0;
|
|
323
|
+
return (React.createElement("html", { lang: "en" },
|
|
324
|
+
React.createElement("head", null,
|
|
325
|
+
React.createElement("meta", { charSet: "utf-8" }),
|
|
326
|
+
React.createElement("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }),
|
|
327
|
+
React.createElement("title", null, "Inspect DB Report"),
|
|
328
|
+
React.createElement("style", { dangerouslySetInnerHTML: { __html: reportCss } })),
|
|
329
|
+
React.createElement("body", null,
|
|
330
|
+
React.createElement("main", null,
|
|
331
|
+
React.createElement("div", { className: "hero" },
|
|
332
|
+
React.createElement("div", { className: "hero-panel" },
|
|
333
|
+
React.createElement("div", { className: "hero-kicker" }, "Team Snapshot"),
|
|
334
|
+
React.createElement("h1", null, "Inspect DB Report"),
|
|
335
|
+
React.createElement("p", null,
|
|
336
|
+
"Generated ",
|
|
337
|
+
generatedAt,
|
|
338
|
+
" for ",
|
|
339
|
+
info.database,
|
|
340
|
+
" / ",
|
|
341
|
+
info.current_schema,
|
|
342
|
+
".")),
|
|
343
|
+
React.createElement("div", { className: "meta" },
|
|
344
|
+
React.createElement(MetricCard, { label: "Memberships", value: membershipSummary.membership_count ?? 0 }),
|
|
345
|
+
React.createElement(MetricCard, { label: "User Slug Bindings", value: lastBindingsCount }),
|
|
346
|
+
React.createElement(MetricCard, { label: "Shared Apps", value: membershipSummary.shared_app_count ?? 0 }),
|
|
347
|
+
React.createElement(MetricCard, { label: "Distinct Members", value: membershipSummary.distinct_member_count ?? 0 }),
|
|
348
|
+
React.createElement(MetricCard, { label: "Database", value: info.database }),
|
|
349
|
+
React.createElement(MetricCard, { label: "Schema", value: info.current_schema }),
|
|
350
|
+
React.createElement(MetricCard, { label: "User", value: info.current_user }),
|
|
351
|
+
React.createElement(MetricCard, { label: "Tables", value: tableCounts.length }),
|
|
352
|
+
React.createElement(MetricCard, { label: "Rows Counted", value: totalRows }),
|
|
353
|
+
React.createElement(MetricCard, { label: "Model Rows", value: userModelRows.length + appModelRows.length }))),
|
|
354
|
+
React.createElement(TrendSection, { title: "Memberships Over 30 Days", description: "Daily cumulative total of currently active memberships, where one membership is one non-owner user with durable access to one specific vibe by approved request or accepted invite.", rows: membershipTimeseries, valueKey: "membership_count" }),
|
|
355
|
+
React.createElement(TrendSection, { title: "User Slug Bindings Over 30 Days", description: "Daily cumulative total of rows in UserSlugBindings over the last 30 days.", rows: userSlugBindingsTimeseries, valueKey: "user_slug_bindings_count" }),
|
|
356
|
+
React.createElement("section", null,
|
|
357
|
+
React.createElement("h2", null, "Memberships By App"),
|
|
358
|
+
React.createElement("p", null, "A membership is one non-owner user with durable access to one specific vibe, whether that access came from an accepted invite or an approved request including auto-approval."),
|
|
359
|
+
React.createElement(DataTable, { rows: membershipsByApp })),
|
|
360
|
+
React.createElement("section", null,
|
|
361
|
+
React.createElement("h2", null, "Table Counts"),
|
|
362
|
+
React.createElement(DataTable, { rows: tableCounts })),
|
|
363
|
+
React.createElement("section", null,
|
|
364
|
+
React.createElement("h2", null, "User Model Settings"),
|
|
365
|
+
React.createElement(DataTable, { rows: userModelRows })),
|
|
366
|
+
React.createElement("section", null,
|
|
367
|
+
React.createElement("h2", null, "App Model Settings"),
|
|
368
|
+
React.createElement(DataTable, { rows: appModelRows })),
|
|
369
|
+
React.createElement("section", null,
|
|
370
|
+
React.createElement("h2", null, "User Settings Sample"),
|
|
371
|
+
React.createElement(DataTable, { rows: userSettingsSample })),
|
|
372
|
+
React.createElement("section", null,
|
|
373
|
+
React.createElement("h2", null, "App Settings Sample"),
|
|
374
|
+
React.createElement(DataTable, { rows: appSettingsSample }))))));
|
|
375
|
+
}
|
|
376
|
+
export function renderHtmlReport(data) {
|
|
377
|
+
return "<!doctype html>" + renderToStaticMarkup(ReportPage(data));
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=inspect-db-report-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect-db-report-template.js","sourceRoot":"","sources":["../../jsr/usage-report/inspect-db-report-template.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|