@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
|
@@ -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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"}
|
package/vibes-msg-evento.js
CHANGED
|
@@ -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) => {
|
package/vibes-msg-evento.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vibes-msg-evento.js","sourceRoot":"","sources":["../jsr/vibes-msg-evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;
|
|
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;
|
package/intern/ensure-storage.js
DELETED
|
@@ -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
|