@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.
Files changed (96) hide show
  1. package/cf-serve.d.ts +1 -4
  2. package/cf-serve.js +10 -15
  3. package/cf-serve.js.map +1 -1
  4. package/check-auth.js +13 -3
  5. package/check-auth.js.map +1 -1
  6. package/create-handler.d.ts +5 -6
  7. package/create-handler.js +6 -32
  8. package/create-handler.js.map +1 -1
  9. package/index.d.ts +0 -1
  10. package/index.js +0 -1
  11. package/index.js.map +1 -1
  12. package/intern/ensure-application-chat-id.js +5 -5
  13. package/intern/ensure-application-chat-id.js.map +1 -1
  14. package/intern/ensure-chat-id.js +45 -33
  15. package/intern/ensure-chat-id.js.map +1 -1
  16. package/intern/ensure-slug-binding.d.ts +12 -26
  17. package/intern/ensure-slug-binding.js +125 -29
  18. package/intern/ensure-slug-binding.js.map +1 -1
  19. package/intern/get-model-defaults.d.ts +12 -0
  20. package/intern/get-model-defaults.js +90 -0
  21. package/intern/get-model-defaults.js.map +1 -0
  22. package/intern/get-slug-binding.d.ts +2 -3
  23. package/intern/get-slug-binding.js +13 -4
  24. package/intern/get-slug-binding.js.map +1 -1
  25. package/intern/grouped-vibe-import-map.d.ts +2 -0
  26. package/intern/grouped-vibe-import-map.js +2 -0
  27. package/intern/grouped-vibe-import-map.js.map +1 -1
  28. package/intern/render-vibe.d.ts +2 -2
  29. package/intern/render-vibe.js.map +1 -1
  30. package/intern/resend-prev-msg.js +5 -13
  31. package/intern/resend-prev-msg.js.map +1 -1
  32. package/intern/write-apps.d.ts +4 -5
  33. package/intern/write-apps.js +27 -18
  34. package/intern/write-apps.js.map +1 -1
  35. package/models.json +179 -0
  36. package/package.json +12 -9
  37. package/peers/s3.d.ts +1 -1
  38. package/public/ensure-app-settings.js +39 -12
  39. package/public/ensure-app-settings.js.map +1 -1
  40. package/public/ensure-app-slug-item.js +23 -47
  41. package/public/ensure-app-slug-item.js.map +1 -1
  42. package/public/ensure-user-settings.js +9 -8
  43. package/public/ensure-user-settings.js.map +1 -1
  44. package/public/get-chat-details.js +7 -5
  45. package/public/get-chat-details.js.map +1 -1
  46. package/public/invite-flow.js +59 -36
  47. package/public/invite-flow.js.map +1 -1
  48. package/public/list-models.d.ts +14 -0
  49. package/public/list-models.js +41 -0
  50. package/public/list-models.js.map +1 -0
  51. package/public/open-chat.js +2 -2
  52. package/public/open-chat.js.map +1 -1
  53. package/public/prompt-chat-section.d.ts +1 -1
  54. package/public/prompt-chat-section.js +40 -15
  55. package/public/prompt-chat-section.js.map +1 -1
  56. package/public/request-flow.js +65 -53
  57. package/public/request-flow.js.map +1 -1
  58. package/public/user-slug-bindings.d.ts +5 -0
  59. package/public/user-slug-bindings.js +144 -0
  60. package/public/user-slug-bindings.js.map +1 -0
  61. package/types.d.ts +37 -18
  62. package/types.js +27 -1
  63. package/types.js.map +1 -1
  64. package/usage-report/README.md +27 -0
  65. package/usage-report/inspect-db-report-template.d.ts +29 -0
  66. package/usage-report/inspect-db-report-template.js +379 -0
  67. package/usage-report/inspect-db-report-template.js.map +1 -0
  68. package/usage-report/inspect-db-report.d.ts +1 -0
  69. package/usage-report/inspect-db-report.js +264 -0
  70. package/usage-report/inspect-db-report.js.map +1 -0
  71. package/usage-report/inspect-db.d.ts +1 -0
  72. package/usage-report/inspect-db.js +226 -0
  73. package/usage-report/inspect-db.js.map +1 -0
  74. package/vibes-msg-evento.js +3 -1
  75. package/vibes-msg-evento.js.map +1 -1
  76. package/intern/ensure-storage.d.ts +0 -26
  77. package/intern/ensure-storage.js +0 -86
  78. package/intern/ensure-storage.js.map +0 -1
  79. package/intern/send-email.d.ts +0 -4
  80. package/intern/send-email.js +0 -55
  81. package/intern/send-email.js.map +0 -1
  82. package/intern/store-screenshot.d.ts +0 -17
  83. package/intern/store-screenshot.js +0 -36
  84. package/intern/store-screenshot.js.map +0 -1
  85. package/peers/sql.d.ts +0 -22
  86. package/peers/sql.js +0 -102
  87. package/peers/sql.js.map +0 -1
  88. package/sql/tables.d.ts +0 -1536
  89. package/sql/tables.js +0 -38
  90. package/sql/tables.js.map +0 -1
  91. package/sql/vibes-diy-api-schema-pg.d.ts +0 -1418
  92. package/sql/vibes-diy-api-schema-pg.js +0 -141
  93. package/sql/vibes-diy-api-schema-pg.js.map +0 -1
  94. package/sql/vibes-diy-api-schema-sqlite.d.ts +0 -1536
  95. package/sql/vibes-diy-api-schema-sqlite.js +0 -131
  96. package/sql/vibes-diy-api-schema-sqlite.js.map +0 -1
@@ -0,0 +1,264 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { spawnSync } from "node:child_process";
5
+ import { Result, exception2Result } from "@adviser/cement";
6
+ import { renderHtmlReport } from "./inspect-db-report-template.jsx";
7
+ const scriptDir = path.dirname(fileURLToPath(import.meta.url));
8
+ const inspectScriptPath = path.join(scriptDir, "inspect-db.ts");
9
+ const outDir = path.join(scriptDir, "../dist/inspect-db-report");
10
+ function runInspect(args) {
11
+ const tsxBin = path.join(scriptDir, "../node_modules/.bin/tsx");
12
+ const result = spawnSync(tsxBin, [inspectScriptPath, ...args], {
13
+ cwd: path.join(scriptDir, ".."),
14
+ encoding: "utf8",
15
+ env: process.env,
16
+ });
17
+ if (result.status !== 0) {
18
+ return Result.Err((result.stderr || result.stdout || `inspect-db failed for ${args.join(" ")}`).trim());
19
+ }
20
+ const stdout = result.stdout.trim();
21
+ if (stdout === "") {
22
+ return Result.Err(`inspect-db returned no output for ${args.join(" ")}`);
23
+ }
24
+ return exception2Result(() => JSON.parse(stdout));
25
+ }
26
+ function flattenValue(value) {
27
+ if (value === null || value === undefined)
28
+ return "";
29
+ if (typeof value === "string")
30
+ return value;
31
+ if (typeof value === "number" || typeof value === "boolean")
32
+ return String(value);
33
+ return JSON.stringify(value);
34
+ }
35
+ function toCsv(rows) {
36
+ const keys = Array.from(rows.reduce((set, row) => {
37
+ Object.keys(row).forEach((key) => set.add(key));
38
+ return set;
39
+ }, new Set()));
40
+ const escapeCell = (value) => {
41
+ const text = flattenValue(value);
42
+ if (/[",\n]/.test(text)) {
43
+ return `"${text.replaceAll('"', '""')}"`;
44
+ }
45
+ return text;
46
+ };
47
+ const lines = [keys.join(",")];
48
+ for (const row of rows) {
49
+ lines.push(keys.map((key) => escapeCell(row[key])).join(","));
50
+ }
51
+ return `${lines.join("\n")}\n`;
52
+ }
53
+ function writeCsv(name, rows) {
54
+ const outPath = path.join(outDir, name);
55
+ fs.writeFileSync(outPath, toCsv(rows), "utf8");
56
+ return outPath;
57
+ }
58
+ function unwrapInspect(args) {
59
+ const r = runInspect(args);
60
+ if (r.isErr()) {
61
+ console.error(`inspect-db failed for: ${args.join(" ")}: ${r.Err().message}`);
62
+ process.exitCode = 1;
63
+ return {};
64
+ }
65
+ return r.Ok();
66
+ }
67
+ async function main() {
68
+ fs.mkdirSync(outDir, { recursive: true });
69
+ const tablesPayload = unwrapInspect(["tables"]);
70
+ const info = {
71
+ database: tablesPayload["database"],
72
+ current_schema: tablesPayload["current_schema"],
73
+ current_user: tablesPayload["current_user"],
74
+ server_addr: tablesPayload["server_addr"],
75
+ server_port: tablesPayload["server_port"],
76
+ schemas: tablesPayload["schemas"],
77
+ };
78
+ const tables = tablesPayload["tables"] ?? [];
79
+ const tableCounts = tables.map((table) => {
80
+ const payload = unwrapInspect(["sql", `select count(*)::int as "rowCount" from "${table.table_schema}"."${table.table_name}"`]);
81
+ return {
82
+ table: `${table.table_schema}.${table.table_name}`,
83
+ rowCount: payload["rows"]?.[0]?.["rowCount"] ?? 0,
84
+ };
85
+ });
86
+ const membershipSummaryPayload = unwrapInspect([
87
+ "sql",
88
+ `with memberships as (
89
+ select
90
+ a."userId" as owner_user_id,
91
+ a."userSlug",
92
+ a."appSlug",
93
+ elem->>'state' as state,
94
+ elem->'request'->>'userId' as member_user_id
95
+ from public."AppSettings" a
96
+ cross join lateral jsonb_array_elements(a.settings) as elem
97
+ where elem->>'type' = 'app.acl.active.request'
98
+ and elem->>'state' = 'approved'
99
+ ),
100
+ deduped as (
101
+ select distinct owner_user_id, "userSlug", "appSlug", member_user_id
102
+ from memberships
103
+ )
104
+ select
105
+ count(*)::int as membership_count,
106
+ count(distinct ("userSlug", "appSlug"))::int as shared_app_count,
107
+ count(distinct member_user_id)::int as distinct_member_count
108
+ from deduped`,
109
+ ]);
110
+ const membershipSummary = (membershipSummaryPayload["rows"] ?? [])[0] ?? {
111
+ membership_count: 0,
112
+ shared_app_count: 0,
113
+ distinct_member_count: 0,
114
+ };
115
+ const membershipsByAppPayload = unwrapInspect([
116
+ "sql",
117
+ `with memberships as (
118
+ select
119
+ a."userId" as owner_user_id,
120
+ a."userSlug",
121
+ a."appSlug",
122
+ elem->'request'->>'userId' as member_user_id
123
+ from public."AppSettings" a
124
+ cross join lateral jsonb_array_elements(a.settings) as elem
125
+ where elem->>'type' = 'app.acl.active.request'
126
+ and elem->>'state' = 'approved'
127
+ )
128
+ select
129
+ owner_user_id,
130
+ "userSlug",
131
+ "appSlug",
132
+ count(distinct member_user_id)::int as memberships
133
+ from memberships
134
+ group by 1, 2, 3
135
+ order by memberships desc, "userSlug", "appSlug"
136
+ limit 200`,
137
+ ]);
138
+ const membershipsByApp = membershipsByAppPayload["rows"] ?? [];
139
+ const membershipTimeseriesPayload = unwrapInspect([
140
+ "sql",
141
+ `with days as (
142
+ select generate_series(current_date - interval '29 days', current_date, interval '1 day')::date as day
143
+ ),
144
+ memberships as (
145
+ select
146
+ a."userId" as owner_user_id,
147
+ a."userSlug",
148
+ a."appSlug",
149
+ elem->'request'->>'userId' as member_user_id,
150
+ (elem->'grant'->>'on')::timestamptz as created_at
151
+ from public."AppSettings" a
152
+ cross join lateral jsonb_array_elements(a.settings) as elem
153
+ where elem->>'type' = 'app.acl.active.request'
154
+ and elem->>'state' = 'approved'
155
+ and elem->'grant'->>'on' is not null
156
+ ),
157
+ first_memberships as (
158
+ select
159
+ owner_user_id,
160
+ "userSlug",
161
+ "appSlug",
162
+ member_user_id,
163
+ min(created_at)::date as first_day
164
+ from memberships
165
+ group by 1, 2, 3, 4
166
+ )
167
+ select
168
+ to_char(day, 'YYYY-MM-DD') as day,
169
+ (
170
+ select count(*)::int
171
+ from first_memberships fm
172
+ where fm.first_day <= day
173
+ ) as membership_count
174
+ from days
175
+ order by day`,
176
+ ]);
177
+ const membershipTimeseries = membershipTimeseriesPayload["rows"] ?? [];
178
+ const userSlugBindingsTimeseriesPayload = unwrapInspect([
179
+ "sql",
180
+ `with days as (
181
+ select generate_series(current_date - interval '29 days', current_date, interval '1 day')::date as day
182
+ ),
183
+ bindings as (
184
+ select created::timestamptz::date as created_day
185
+ from public."UserSlugBindings"
186
+ )
187
+ select
188
+ to_char(day, 'YYYY-MM-DD') as day,
189
+ (
190
+ select count(*)::int
191
+ from bindings b
192
+ where b.created_day <= day
193
+ ) as user_slug_bindings_count
194
+ from days
195
+ order by day`,
196
+ ]);
197
+ const userSlugBindingsTimeseries = userSlugBindingsTimeseriesPayload["rows"] ?? [];
198
+ const userModelPayload = unwrapInspect([
199
+ "sql",
200
+ `select "userId", elem as setting, updated from public."UserSettings" cross join lateral jsonb_array_elements(settings) as elem where elem->>'type' = 'model' order by updated desc limit 200`,
201
+ ]);
202
+ const userModelRows = userModelPayload["rows"] ?? [];
203
+ const appModelPayload = unwrapInspect([
204
+ "sql",
205
+ `select "userId", "userSlug", "appSlug", elem as setting, updated from public."AppSettings" cross join lateral jsonb_array_elements(settings) as elem where elem->>'type' = 'active.model' order by updated desc limit 200`,
206
+ ]);
207
+ const appModelRows = appModelPayload["rows"] ?? [];
208
+ const userSettingsPayload = unwrapInspect(["table", "public.UserSettings", "--limit", "20"]);
209
+ const userSettingsSample = (userSettingsPayload["rows"] ?? []).map((row) => ({
210
+ userId: row["userId"],
211
+ updated: row["updated"],
212
+ created: row["created"],
213
+ settings: row["settings"],
214
+ }));
215
+ const appSettingsPayload = unwrapInspect(["table", "public.AppSettings", "--limit", "20"]);
216
+ const appSettingsSample = (appSettingsPayload["rows"] ?? []).map((row) => ({
217
+ userId: row["userId"],
218
+ userSlug: row["userSlug"],
219
+ appSlug: row["appSlug"],
220
+ updated: row["updated"],
221
+ created: row["created"],
222
+ settings: row["settings"],
223
+ }));
224
+ const generatedAt = new Date().toISOString();
225
+ const files = {
226
+ membershipsTimeseriesCsv: writeCsv("memberships-timeseries.csv", membershipTimeseries),
227
+ userSlugBindingsTimeseriesCsv: writeCsv("user-slug-bindings-timeseries.csv", userSlugBindingsTimeseries),
228
+ membershipsByAppCsv: writeCsv("memberships-by-app.csv", membershipsByApp),
229
+ tableCountsCsv: writeCsv("table-counts.csv", tableCounts),
230
+ userModelCsv: writeCsv("user-model-settings.csv", userModelRows),
231
+ appModelCsv: writeCsv("app-model-settings.csv", appModelRows),
232
+ userSettingsCsv: writeCsv("user-settings-sample.csv", userSettingsSample),
233
+ appSettingsCsv: writeCsv("app-settings-sample.csv", appSettingsSample),
234
+ };
235
+ const html = renderHtmlReport({
236
+ generatedAt,
237
+ info,
238
+ tableCounts,
239
+ membershipSummary: membershipSummary,
240
+ membershipTimeseries,
241
+ userSlugBindingsTimeseries,
242
+ membershipsByApp,
243
+ userModelRows,
244
+ appModelRows,
245
+ userSettingsSample,
246
+ appSettingsSample,
247
+ });
248
+ const htmlPath = path.join(outDir, "index.html");
249
+ fs.writeFileSync(htmlPath, html, "utf8");
250
+ console.log(JSON.stringify({
251
+ generatedAt,
252
+ outputDir: outDir,
253
+ htmlPath,
254
+ ...files,
255
+ }, null, 2));
256
+ return Result.Ok(undefined);
257
+ }
258
+ main().then((result) => {
259
+ if (result.isErr()) {
260
+ console.error(result.Err().message);
261
+ process.exitCode = 1;
262
+ }
263
+ });
264
+ //# sourceMappingURL=inspect-db-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-db-report.js","sourceRoot":"","sources":["../../jsr/usage-report/inspect-db-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,226 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { Pool } from "@neondatabase/serverless";
5
+ import { Result, exception2Result } from "@adviser/cement";
6
+ function printUsage() {
7
+ console.log(`
8
+ Usage:
9
+ pnpm --dir vibes.diy/api/svc run inspect:db info
10
+ pnpm --dir vibes.diy/api/svc run inspect:db tables
11
+ pnpm --dir vibes.diy/api/svc run inspect:db table UserSettings --limit 20
12
+ pnpm --dir vibes.diy/api/svc run inspect:db sql "select * from \\"UserSettings\\" limit 5"
13
+
14
+ Environment:
15
+ NEON_DATABASE_URL or DATABASE_URL must be set.
16
+
17
+ Examples:
18
+ NEON_DATABASE_URL="$(pbpaste)" pnpm --dir vibes.diy/api/svc run inspect:db info
19
+ NEON_DATABASE_URL="$(pbpaste)" pnpm --dir vibes.diy/api/svc run inspect:db tables
20
+ NEON_DATABASE_URL="$(pbpaste)" pnpm --dir vibes.diy/api/svc run inspect:db table UserSettings --limit 5
21
+ NEON_DATABASE_URL="$(pbpaste)" pnpm --dir vibes.diy/api/svc run inspect:db sql "select userId, updated from \\"UserSettings\\" order by updated desc limit 5"
22
+ `.trim());
23
+ }
24
+ function quoteIdentifier(value) {
25
+ return `"${value.replaceAll('"', '""')}"`;
26
+ }
27
+ async function listTables(pool) {
28
+ const result = await pool.query(`
29
+ select table_schema, table_name
30
+ from information_schema.tables
31
+ where table_type = 'BASE TABLE'
32
+ and table_schema not in ('pg_catalog', 'information_schema')
33
+ order by table_schema, table_name
34
+ `);
35
+ return result.rows;
36
+ }
37
+ async function getConnectionInfo(pool) {
38
+ const [{ rows: currentRows }, { rows: schemaRows }] = await Promise.all([
39
+ pool.query(`
40
+ select
41
+ current_database() as database,
42
+ current_schema() as current_schema,
43
+ current_user as current_user,
44
+ inet_server_addr()::text as server_addr,
45
+ inet_server_port() as server_port
46
+ `),
47
+ pool.query(`
48
+ select schema_name
49
+ from information_schema.schemata
50
+ where schema_name not in ('pg_catalog', 'information_schema')
51
+ order by schema_name
52
+ `),
53
+ ]);
54
+ return {
55
+ ...(currentRows[0] ?? {}),
56
+ schemas: schemaRows.map((row) => row.schema_name),
57
+ };
58
+ }
59
+ async function resolveTable(pool, requestedName) {
60
+ const tables = await listTables(pool);
61
+ const normalizedRequest = requestedName.trim();
62
+ const dottedRequest = normalizedRequest.includes(".") ? normalizedRequest : `public.${normalizedRequest}`;
63
+ const exact = tables.find((table) => table.table_name === normalizedRequest || `${table.table_schema}.${table.table_name}` === normalizedRequest);
64
+ if (exact !== undefined) {
65
+ return Result.Ok(exact);
66
+ }
67
+ const folded = normalizedRequest.toLowerCase();
68
+ const foldedDotted = dottedRequest.toLowerCase();
69
+ const caseInsensitive = tables.find((table) => table.table_name.toLowerCase() === folded || `${table.table_schema}.${table.table_name}`.toLowerCase() === foldedDotted);
70
+ if (caseInsensitive !== undefined) {
71
+ return Result.Ok(caseInsensitive);
72
+ }
73
+ return Result.Err(`unknown table: ${requestedName}. Run 'pnpm --dir vibes.diy/api/svc run inspect:db tables' to see actual tables in this database`);
74
+ }
75
+ function loadDevVars() {
76
+ const scriptDir = path.dirname(fileURLToPath(import.meta.url));
77
+ const candidatePaths = [path.join(scriptDir, "..", ".dev.vars"), path.join(process.cwd(), ".dev.vars")];
78
+ for (const candidatePath of candidatePaths) {
79
+ if (!fs.existsSync(candidatePath)) {
80
+ continue;
81
+ }
82
+ const content = fs.readFileSync(candidatePath, "utf8");
83
+ for (const rawLine of content.split(/\r?\n/)) {
84
+ const line = rawLine.trim();
85
+ if (line === "" || line.startsWith("#")) {
86
+ continue;
87
+ }
88
+ const separator = line.indexOf("=");
89
+ if (separator <= 0) {
90
+ continue;
91
+ }
92
+ const key = line.slice(0, separator).trim();
93
+ let value = line.slice(separator + 1).trim();
94
+ if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
95
+ value = value.slice(1, -1);
96
+ }
97
+ if (!(key in process.env)) {
98
+ process.env[key] = value;
99
+ }
100
+ }
101
+ }
102
+ }
103
+ function parseArgs(argv) {
104
+ const args = [...argv];
105
+ const command = args.shift();
106
+ let limit = 20;
107
+ while (args.length > 0) {
108
+ const idx = args.findIndex((arg) => arg === "--limit");
109
+ if (idx === -1)
110
+ break;
111
+ const raw = args[idx + 1];
112
+ if (raw === undefined) {
113
+ return Result.Err("--limit requires a number");
114
+ }
115
+ const parsed = Number.parseInt(raw, 10);
116
+ if (!Number.isFinite(parsed) || parsed <= 0) {
117
+ return Result.Err(`invalid --limit value: ${raw}`);
118
+ }
119
+ limit = parsed;
120
+ args.splice(idx, 2);
121
+ }
122
+ return Result.Ok({ command, args, limit });
123
+ }
124
+ function assertReadonlySql(sql) {
125
+ const normalized = sql.trim().replace(/;+$/, "").toLowerCase();
126
+ if (normalized === "") {
127
+ return Result.Err("SQL is empty");
128
+ }
129
+ if (!(normalized.startsWith("select ") ||
130
+ normalized.startsWith("with ") ||
131
+ normalized.startsWith("show ") ||
132
+ normalized.startsWith("explain "))) {
133
+ return Result.Err("Only read-only SELECT/WITH/SHOW/EXPLAIN statements are allowed");
134
+ }
135
+ return Result.Ok(sql);
136
+ }
137
+ async function run() {
138
+ loadDevVars();
139
+ const rParsed = parseArgs(process.argv.slice(2));
140
+ if (rParsed.isErr()) {
141
+ return Result.Err(rParsed);
142
+ }
143
+ const { command, args, limit } = rParsed.Ok();
144
+ if (command === undefined || command === "help" || command === "--help" || command === "-h") {
145
+ printUsage();
146
+ return Result.Ok(undefined);
147
+ }
148
+ const connectionString = process.env["NEON_DATABASE_URL"] ?? process.env["DATABASE_URL"];
149
+ if (connectionString === undefined) {
150
+ printUsage();
151
+ return Result.Err("NEON_DATABASE_URL or DATABASE_URL is required");
152
+ }
153
+ const pool = new Pool({ connectionString });
154
+ const result = await exception2Result(async () => {
155
+ if (command === "info") {
156
+ const info = await getConnectionInfo(pool);
157
+ console.log(JSON.stringify(info, null, 2));
158
+ return;
159
+ }
160
+ if (command === "tables") {
161
+ const [info, tables] = await Promise.all([getConnectionInfo(pool), listTables(pool)]);
162
+ console.log(JSON.stringify({ ...info, tables }, null, 2));
163
+ return;
164
+ }
165
+ if (command === "table") {
166
+ const requestedTableName = args[0];
167
+ if (requestedTableName === undefined) {
168
+ throw new Error("table name is required");
169
+ }
170
+ const rTable = await resolveTable(pool, requestedTableName);
171
+ if (rTable.isErr()) {
172
+ throw new Error(rTable.Err().message);
173
+ }
174
+ const table = rTable.Ok();
175
+ const sql = `select * from ${quoteIdentifier(table.table_schema)}.${quoteIdentifier(table.table_name)} order by 1 desc limit $1`;
176
+ const queryResult = await pool.query(sql, [limit]);
177
+ console.log(JSON.stringify({
178
+ table: `${table.table_schema}.${table.table_name}`,
179
+ rowCount: queryResult.rowCount,
180
+ rows: queryResult.rows,
181
+ }, null, 2));
182
+ return;
183
+ }
184
+ if (command === "sql") {
185
+ const sql = args.join(" ").trim();
186
+ const rSql = assertReadonlySql(sql);
187
+ if (rSql.isErr()) {
188
+ throw new Error(rSql.Err().message);
189
+ }
190
+ const queryResult = await pool.query(sql);
191
+ console.log(JSON.stringify({
192
+ rowCount: queryResult.rowCount,
193
+ rows: queryResult.rows,
194
+ }, null, 2));
195
+ return;
196
+ }
197
+ throw new Error(`unknown command: ${command}`);
198
+ });
199
+ await pool.end();
200
+ return result;
201
+ }
202
+ function formatError(error) {
203
+ if (typeof error === "string")
204
+ return error;
205
+ if (typeof error === "object" && error !== null) {
206
+ const obj = error;
207
+ if (typeof obj["message"] === "string" && obj["message"] !== "") {
208
+ return obj["message"];
209
+ }
210
+ const nested = obj["error"];
211
+ if (typeof nested === "object" && nested !== null) {
212
+ const nestedObj = nested;
213
+ if (typeof nestedObj["message"] === "string" && nestedObj["message"] !== "") {
214
+ return nestedObj["message"];
215
+ }
216
+ }
217
+ }
218
+ return String(error);
219
+ }
220
+ run().then((result) => {
221
+ if (result.isErr()) {
222
+ console.error(formatError(result.Err()));
223
+ process.exitCode = 1;
224
+ }
225
+ });
226
+ //# sourceMappingURL=inspect-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-db.js","sourceRoot":"","sources":["../../jsr/usage-report/inspect-db.ts"],"names":[],"mappings":"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"}
@@ -14,10 +14,12 @@ import { getCertFromCsrEvento } from "./public/get-cert-from-csr.js";
14
14
  import { getFPCloudTokenEvento } from "./public/get-fp-cloud-token.js";
15
15
  import { promptChatAddFS } from "./public/prompt-chat-add-fs.js";
16
16
  import { createInviteEvento, revokeInviteEvento, redeemInviteEvento, hasAccessInviteEvento, inviteSetRoleEvento, listInviteGrantsEvento, } from "./public/invite-flow.js";
17
+ import { listUserSlugBindingsEvento, createUserSlugBindingEvento, deleteUserSlugBindingEvento, } from "./public/user-slug-bindings.js";
17
18
  import { listRequestGrantsEvento, requestAccessEvento, approveRequestEvento, requestSetRoleEvento, revokeRequestEvento, hasAccessRequestEvento, } from "./public/request-flow.js";
19
+ import { listModelsEvento } from "./public/list-models.js";
18
20
  export const vibesMsgEvento = Lazy(() => {
19
21
  const evento = new Evento(new W3CWebSocketEventEventoEnDecoder());
20
- evento.push(ensureAppSlugItemEvento, getFPCloudTokenEvento, listUserSlugAppSlugEvento, getChatDetailsEvento, getAppByFsIdEvento, openChat, promptChatSection, promptChatAddFS, createInviteEvento, revokeInviteEvento, redeemInviteEvento, hasAccessInviteEvento, inviteSetRoleEvento, listInviteGrantsEvento, requestAccessEvento, hasAccessRequestEvento, approveRequestEvento, requestSetRoleEvento, revokeRequestEvento, listRequestGrantsEvento, getCertFromCsrEvento, ensureAppSettingsEvento, setModeFsIdEvento, ensureUserSettingsEvento, listApplicationChats, {
22
+ evento.push(ensureAppSlugItemEvento, getFPCloudTokenEvento, listUserSlugAppSlugEvento, getChatDetailsEvento, getAppByFsIdEvento, openChat, promptChatSection, promptChatAddFS, createInviteEvento, revokeInviteEvento, redeemInviteEvento, hasAccessInviteEvento, inviteSetRoleEvento, listInviteGrantsEvento, requestAccessEvento, hasAccessRequestEvento, approveRequestEvento, requestSetRoleEvento, revokeRequestEvento, listRequestGrantsEvento, getCertFromCsrEvento, listModelsEvento, ensureAppSettingsEvento, setModeFsIdEvento, ensureUserSettingsEvento, listApplicationChats, listUserSlugBindingsEvento, createUserSlugBindingEvento, deleteUserSlugBindingEvento, {
21
23
  type: EventoType.WildCard,
22
24
  hash: "not-msg-implemented-handler",
23
25
  handle: async (ctx) => {
@@ -1 +1 @@
1
- {"version":3,"file":"vibes-msg-evento.js","sourceRoot":"","sources":["../jsr/vibes-msg-evento.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vibes-msg-evento.js","sourceRoot":"","sources":["../jsr/vibes-msg-evento.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import { Result, PeerStream, Peer } from "@adviser/cement";
2
- import { Storage, VibesApiTables } from "../types.js";
3
- import { VibesSqlite } from "../create-handler.js";
4
- import { sha256 } from "@noble/hashes/sha2.js";
5
- import { S3Api } from "@vibes.diy/api-types";
6
- import { DBFlavour } from "../sql/tables.js";
7
- export interface CalcCidResult {
8
- cid: string;
9
- size: number;
10
- }
11
- export type PeerStreamWithCommit = PeerStream & {
12
- commit: (iname?: string) => Promise<Result<{
13
- url: string;
14
- }>>;
15
- };
16
- export interface PeerWithCommit extends Peer {
17
- begin: () => Promise<Result<PeerStreamWithCommit>>;
18
- }
19
- export declare class Cider {
20
- readonly h: ReturnType<typeof sha256.create>;
21
- size: number;
22
- readonly processStreamPromise: Promise<void>;
23
- constructor(inStream: ReadableStream<Uint8Array>);
24
- readonly getCID: () => Promise<CalcCidResult>;
25
- }
26
- export declare function ensureStorage(flavour: DBFlavour, db: VibesSqlite, assets: VibesApiTables["assets"], s3: S3Api): Storage;
@@ -1,86 +0,0 @@
1
- import { Result, URI, teeWriter, processStream, Lazy, coerceStreamUint8 } from "@adviser/cement";
2
- import { sha256 } from "@noble/hashes/sha2.js";
3
- import { base58btc } from "multiformats/bases/base58";
4
- import { S3PeerFetch } from "../peers/s3.js";
5
- import { SQLPeer, SQLPeerFetch } from "../peers/sql.js";
6
- export class Cider {
7
- h;
8
- size = 0;
9
- processStreamPromise;
10
- constructor(inStream) {
11
- this.h = sha256.create();
12
- this.processStreamPromise = processStream(inStream, (chunk) => {
13
- this.h.update(chunk);
14
- this.size += chunk.length;
15
- });
16
- }
17
- getCID = Lazy(() => {
18
- return this.processStreamPromise.then(() => {
19
- const cid = base58btc.encode(this.h.digest());
20
- return {
21
- cid,
22
- size: this.size,
23
- };
24
- });
25
- });
26
- }
27
- export function ensureStorage(flavour, db, assets, s3) {
28
- return {
29
- fetch: async (iurl) => {
30
- const peers = [new SQLPeerFetch(flavour, db, assets), new S3PeerFetch(s3)];
31
- const url = URI.from(iurl);
32
- for (const peer of peers) {
33
- const res = await peer.fetch(url);
34
- if (res.IsSome()) {
35
- return res.unwrap();
36
- }
37
- }
38
- return {
39
- type: "fetch.notfound",
40
- url: url.toString(),
41
- };
42
- },
43
- ensure: async (...items) => {
44
- const tees = await Promise.allSettled(items.map((item) => {
45
- const [lag1, lag2] = coerceStreamUint8(item).tee();
46
- const cider = new Cider(lag1);
47
- const peers = [new SQLPeer(flavour, db, assets, cider, 10 * 1024 * 1024)];
48
- return teeWriter(peers, lag2).then(async (rTee) => {
49
- if (rTee.isErr()) {
50
- return Result.Err(rTee);
51
- }
52
- return cider.getCID().then(({ cid, size }) => {
53
- const tok = rTee.Ok().peer;
54
- return tok.commit(cid).then((r) => {
55
- if (r.isErr()) {
56
- return Result.Err(r);
57
- }
58
- return Result.Ok({
59
- cid,
60
- url: r.Ok().url,
61
- size,
62
- });
63
- });
64
- });
65
- });
66
- }));
67
- return tees.map((res) => {
68
- if (res.status !== "fulfilled") {
69
- return Result.Err(new Error(`Failed to process item: ${res.reason}`));
70
- }
71
- if (res.value.isErr()) {
72
- return Result.Err(new Error(`Failed to write to peer: ${res.value.Err()}`));
73
- }
74
- const { cid, url, size } = res.value.Ok();
75
- return Result.Ok({
76
- cid,
77
- getURL: url,
78
- mode: "created",
79
- created: new Date(),
80
- size,
81
- });
82
- });
83
- },
84
- };
85
- }
86
- //# sourceMappingURL=ensure-storage.js.map