@schlessera/brain-ui-server 0.13.1 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -12
- package/dist/agent/backend.d.ts +163 -37
- package/dist/agent/backend.d.ts.map +1 -1
- package/dist/agent/backend.js +281 -286
- package/dist/agent/backend.js.map +1 -1
- package/dist/app.d.ts +46 -5
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +94 -35
- package/dist/app.js.map +1 -1
- package/dist/brain/client.d.ts +41 -30
- package/dist/brain/client.d.ts.map +1 -1
- package/dist/brain/client.js +138 -132
- package/dist/brain/client.js.map +1 -1
- package/dist/config/env.d.ts +104 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +296 -0
- package/dist/config/env.js.map +1 -0
- package/dist/cron/scheduler.d.ts +16 -8
- package/dist/cron/scheduler.d.ts.map +1 -1
- package/dist/cron/scheduler.js +54 -53
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/db/brain-db.d.ts +50 -0
- package/dist/db/brain-db.d.ts.map +1 -0
- package/dist/db/brain-db.js +75 -0
- package/dist/db/brain-db.js.map +1 -0
- package/dist/db/client.d.ts +8 -6
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +12 -25
- package/dist/db/client.js.map +1 -1
- package/dist/db/settings.d.ts +5 -4
- package/dist/db/settings.d.ts.map +1 -1
- package/dist/db/settings.js +9 -12
- package/dist/db/settings.js.map +1 -1
- package/dist/files/walker.d.ts +6 -7
- package/dist/files/walker.d.ts.map +1 -1
- package/dist/files/walker.js +6 -9
- package/dist/files/walker.js.map +1 -1
- package/dist/graph/reader.d.ts +6 -6
- package/dist/graph/reader.d.ts.map +1 -1
- package/dist/graph/reader.js +22 -12
- package/dist/graph/reader.js.map +1 -1
- package/dist/index.d.ts +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -10
- package/dist/index.js.map +1 -1
- package/dist/middleware/auth.d.ts +17 -6
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +34 -43
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/origin.d.ts +1 -2
- package/dist/middleware/origin.d.ts.map +1 -1
- package/dist/middleware/origin.js +1 -7
- package/dist/middleware/origin.js.map +1 -1
- package/dist/middleware/passkeys.d.ts +29 -5
- package/dist/middleware/passkeys.d.ts.map +1 -1
- package/dist/middleware/passkeys.js +47 -76
- package/dist/middleware/passkeys.js.map +1 -1
- package/dist/middleware/tailscale.d.ts +14 -11
- package/dist/middleware/tailscale.d.ts.map +1 -1
- package/dist/middleware/tailscale.js +11 -10
- package/dist/middleware/tailscale.js.map +1 -1
- package/dist/routes/brain.d.ts +9 -154
- package/dist/routes/brain.d.ts.map +1 -1
- package/dist/routes/brain.js +187 -188
- package/dist/routes/brain.js.map +1 -1
- package/dist/routes/files.d.ts +4 -88
- package/dist/routes/files.d.ts.map +1 -1
- package/dist/routes/files.js +74 -71
- package/dist/routes/files.js.map +1 -1
- package/dist/routes/graph.d.ts +4 -255
- package/dist/routes/graph.d.ts.map +1 -1
- package/dist/routes/graph.js +67 -64
- package/dist/routes/graph.js.map +1 -1
- package/dist/routes/health.d.ts +8 -22
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +10 -10
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/models.d.ts +7 -90
- package/dist/routes/models.d.ts.map +1 -1
- package/dist/routes/models.js +53 -51
- package/dist/routes/models.js.map +1 -1
- package/dist/routes/providers.d.ts +5 -34
- package/dist/routes/providers.d.ts.map +1 -1
- package/dist/routes/providers.js +13 -11
- package/dist/routes/providers.js.map +1 -1
- package/dist/routes/sessions.d.ts +7 -78
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +35 -34
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/share.d.ts +7 -60
- package/dist/routes/share.d.ts.map +1 -1
- package/dist/routes/share.js +80 -77
- package/dist/routes/share.js.map +1 -1
- package/dist/routes/voice.d.ts +8 -91
- package/dist/routes/voice.d.ts.map +1 -1
- package/dist/routes/voice.js +62 -59
- package/dist/routes/voice.js.map +1 -1
- package/dist/share/staging.d.ts +4 -4
- package/dist/share/staging.d.ts.map +1 -1
- package/dist/share/staging.js +7 -8
- package/dist/share/staging.js.map +1 -1
- package/dist/voice/deepgram-token.d.ts +1 -1
- package/dist/voice/deepgram-token.d.ts.map +1 -1
- package/dist/voice/deepgram-token.js +1 -2
- package/dist/voice/deepgram-token.js.map +1 -1
- package/dist/voice/keyterm-builder.d.ts +23 -8
- package/dist/voice/keyterm-builder.d.ts.map +1 -1
- package/dist/voice/keyterm-builder.js +67 -43
- package/dist/voice/keyterm-builder.js.map +1 -1
- package/dist/voice/speech-providers.d.ts +6 -4
- package/dist/voice/speech-providers.d.ts.map +1 -1
- package/dist/voice/speech-providers.js +28 -25
- package/dist/voice/speech-providers.js.map +1 -1
- package/dist/ws/bridge.d.ts.map +1 -1
- package/dist/ws/bridge.js +2 -3
- package/dist/ws/bridge.js.map +1 -1
- package/dist/ws/clients.d.ts +18 -10
- package/dist/ws/clients.d.ts.map +1 -1
- package/dist/ws/clients.js +35 -37
- package/dist/ws/clients.js.map +1 -1
- package/dist/ws/connection.d.ts.map +1 -1
- package/dist/ws/connection.js +5 -7
- package/dist/ws/connection.js.map +1 -1
- package/dist/ws/dispatch.d.ts.map +1 -1
- package/dist/ws/dispatch.js +1 -2
- package/dist/ws/dispatch.js.map +1 -1
- package/dist/ws/host.d.ts +16 -12
- package/dist/ws/host.d.ts.map +1 -1
- package/dist/ws/host.js +14 -23
- package/dist/ws/host.js.map +1 -1
- package/dist/ws/routing.d.ts +2 -1
- package/dist/ws/routing.d.ts.map +1 -1
- package/dist/ws/routing.js +5 -6
- package/dist/ws/routing.js.map +1 -1
- package/dist/ws/run-session.js +1 -1
- package/dist/ws/run-session.js.map +1 -1
- package/dist/ws/session-catalog.d.ts +2 -2
- package/dist/ws/session-catalog.d.ts.map +1 -1
- package/dist/ws/session-catalog.js +2 -3
- package/dist/ws/session-catalog.js.map +1 -1
- package/package.json +8 -5
- package/src/agent/backend.ts +509 -340
- package/src/app.ts +157 -36
- package/src/brain/client.ts +166 -143
- package/src/config/env.ts +401 -0
- package/src/cron/scheduler.ts +77 -59
- package/src/db/brain-db.ts +104 -0
- package/src/db/client.ts +12 -31
- package/src/db/settings.ts +12 -14
- package/src/files/walker.ts +6 -10
- package/src/graph/reader.ts +26 -15
- package/src/index.ts +56 -17
- package/src/middleware/auth.ts +51 -45
- package/src/middleware/origin.ts +1 -8
- package/src/middleware/passkeys.ts +72 -68
- package/src/middleware/tailscale.ts +22 -17
- package/src/routes/brain.ts +31 -30
- package/src/routes/files.ts +10 -7
- package/src/routes/graph.ts +9 -6
- package/src/routes/health.ts +17 -10
- package/src/routes/models.ts +19 -15
- package/src/routes/providers.ts +14 -15
- package/src/routes/sessions.ts +18 -11
- package/src/routes/share.ts +35 -24
- package/src/routes/voice.ts +78 -68
- package/src/share/staging.ts +10 -8
- package/src/voice/deepgram-token.ts +4 -2
- package/src/voice/keyterm-builder.ts +90 -56
- package/src/voice/speech-providers.ts +28 -24
- package/src/ws/bridge.ts +2 -3
- package/src/ws/clients.ts +38 -41
- package/src/ws/connection.ts +5 -7
- package/src/ws/dispatch.ts +1 -2
- package/src/ws/host.ts +24 -27
- package/src/ws/routing.ts +6 -10
- package/src/ws/run-session.ts +1 -1
- package/src/ws/session-catalog.ts +2 -3
- package/dist/ws/handler.d.ts +0 -34
- package/dist/ws/handler.d.ts.map +0 -1
- package/dist/ws/handler.js +0 -33
- package/dist/ws/handler.js.map +0 -1
- package/src/ws/handler.ts +0 -50
|
@@ -2,33 +2,14 @@ import { Hono } from "hono";
|
|
|
2
2
|
import { generateAuthenticationOptions, generateRegistrationOptions, verifyAuthenticationResponse as realVerifyAuthentication, verifyRegistrationResponse as realVerifyRegistration, } from "@simplewebauthn/server";
|
|
3
3
|
import { issueSessionCookie, consumeLoginToken, LOGIN_RATE_LIMIT, GLOBAL_LOGIN_RATE_LIMIT, } from "./auth.js";
|
|
4
4
|
import { clientIp } from "./tailscale.js";
|
|
5
|
-
import { getDb } from "../db/client.js";
|
|
6
|
-
/**
|
|
7
|
-
* WebAuthn passkeys as an extension of `password` mode: the password bootstraps
|
|
8
|
-
* the first registration (and stays as recovery), passkeys are the day-to-day
|
|
9
|
-
* login. A successful assertion mints the same session cookie as password login
|
|
10
|
-
* (issueSessionCookie), so authGuard / isWsAuthorized / TTL are untouched.
|
|
11
|
-
*
|
|
12
|
-
* Self-contained on purpose — this module (plus its auth.ts imports) is slated
|
|
13
|
-
* to move wholesale into @schlessera/ui-server.
|
|
14
|
-
*
|
|
15
|
-
* Credentials are RP-scoped: a credential registered on localhost does not
|
|
16
|
-
* exist for the production domain and vice versa. Rows carry rp_id so all
|
|
17
|
-
* environments share the table.
|
|
18
|
-
*/
|
|
19
5
|
const CHALLENGE_TTL_MS = 120_000; // > the 60s ceremony timeout
|
|
20
6
|
// Pending challenges are unauthenticated state; cap and evict oldest-first so
|
|
21
7
|
// login-options spam can't grow memory. Losing one costs a retried ceremony.
|
|
22
8
|
const MAX_PENDING_CHALLENGES = 100;
|
|
23
9
|
const OPTIONS_RATE_LIMIT = 10; // login-options per IP per minute (own bucket)
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
return process.env.WEBAUTHN_RP_NAME || "Brain UI";
|
|
28
|
-
}
|
|
29
|
-
// The single "user" every passkey belongs to. Stable across registrations so
|
|
30
|
-
// an authenticator overwrites its existing entry instead of stacking
|
|
31
|
-
// duplicates for the same site.
|
|
10
|
+
// The single "user" every passkey belongs to (webauthn.userId). Stable across
|
|
11
|
+
// registrations so an authenticator overwrites its existing entry instead of
|
|
12
|
+
// stacking duplicates for the same site.
|
|
32
13
|
//
|
|
33
14
|
// WARNING: the user handle is part of the WebAuthn wire contract — it is
|
|
34
15
|
// burned into every resident credential at registration. Changing
|
|
@@ -36,21 +17,18 @@ function rpName() {
|
|
|
36
17
|
// (authenticators will present a handle the server no longer recognizes as
|
|
37
18
|
// the same user and re-registration stacks a second entry). Set it before the
|
|
38
19
|
// first passkey is registered and never change it.
|
|
39
|
-
function
|
|
40
|
-
return
|
|
20
|
+
function userId(webauthn) {
|
|
21
|
+
return new TextEncoder().encode(webauthn.userId);
|
|
41
22
|
}
|
|
42
23
|
/** WebAuthn caps `user.id` at 64 bytes; browsers reject anything longer. */
|
|
43
24
|
const MAX_USER_ID_BYTES = 64;
|
|
44
|
-
function userId() {
|
|
45
|
-
return new TextEncoder().encode(process.env.WEBAUTHN_USER_ID || "brain-ui-owner");
|
|
46
|
-
}
|
|
47
25
|
/**
|
|
48
26
|
* Refuse to boot on a WebAuthn user handle the browser would reject. Called
|
|
49
27
|
* from createApp(): an oversized handle otherwise produces registration
|
|
50
28
|
* options that look fine server-side and fail silently in every browser.
|
|
51
29
|
*/
|
|
52
|
-
export function assertPasskeyConfig() {
|
|
53
|
-
const bytes = userId().byteLength;
|
|
30
|
+
export function assertPasskeyConfig(webauthn) {
|
|
31
|
+
const bytes = userId(webauthn).byteLength;
|
|
54
32
|
if (bytes > MAX_USER_ID_BYTES) {
|
|
55
33
|
throw new Error(`WEBAUTHN_USER_ID is ${bytes} bytes; WebAuthn allows at most ${MAX_USER_ID_BYTES}. ` +
|
|
56
34
|
"Pick a shorter stable identifier (it is burned into every credential).");
|
|
@@ -95,12 +73,6 @@ function challengeFromResponse(response) {
|
|
|
95
73
|
}
|
|
96
74
|
}
|
|
97
75
|
// --- RP / origin resolution ---
|
|
98
|
-
function envList(name) {
|
|
99
|
-
return (process.env[name] ?? "")
|
|
100
|
-
.split(",")
|
|
101
|
-
.map((s) => s.trim())
|
|
102
|
-
.filter(Boolean);
|
|
103
|
-
}
|
|
104
76
|
function isLoopbackHostname(hostname) {
|
|
105
77
|
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1";
|
|
106
78
|
}
|
|
@@ -110,7 +82,7 @@ function isLoopbackHostname(hostname) {
|
|
|
110
82
|
* unconfigured. WEBAUTHN_ORIGINS / WEBAUTHN_RP_ID remain as overrides for
|
|
111
83
|
* proxies that rewrite Host.
|
|
112
84
|
*/
|
|
113
|
-
function resolveRp(c) {
|
|
85
|
+
function resolveRp(c, ctx) {
|
|
114
86
|
const origin = c.req.header("origin");
|
|
115
87
|
if (!origin)
|
|
116
88
|
return null;
|
|
@@ -121,22 +93,21 @@ function resolveRp(c) {
|
|
|
121
93
|
catch {
|
|
122
94
|
return null;
|
|
123
95
|
}
|
|
124
|
-
const allowed =
|
|
125
|
-
|
|
96
|
+
const allowed = ctx.webauthn.origins.includes(origin) ||
|
|
97
|
+
ctx.allowedOrigins.includes(origin) ||
|
|
126
98
|
url.host === c.req.header("host") ||
|
|
127
99
|
// Dev escape hatch: the vite proxy sets changeOrigin, so the server sees
|
|
128
100
|
// Host localhost:3000 but Origin http://localhost:5173. Opt-in via an
|
|
129
101
|
// explicit flag — NOT NODE_ENV, whose absence must never widen the RP.
|
|
130
|
-
(
|
|
131
|
-
isLoopbackHostname(url.hostname));
|
|
102
|
+
(ctx.webauthn.allowLoopbackOrigin && isLoopbackHostname(url.hostname));
|
|
132
103
|
if (!allowed)
|
|
133
104
|
return null;
|
|
134
|
-
return { rpID:
|
|
105
|
+
return { rpID: ctx.webauthn.rpId ?? url.hostname, origin };
|
|
135
106
|
}
|
|
136
107
|
/** rpID for endpoints where same-origin GETs legitimately omit Origin. */
|
|
137
|
-
function rpIdForRead(c) {
|
|
138
|
-
if (
|
|
139
|
-
return
|
|
108
|
+
function rpIdForRead(c, ctx) {
|
|
109
|
+
if (ctx.webauthn.rpId)
|
|
110
|
+
return ctx.webauthn.rpId;
|
|
140
111
|
const origin = c.req.header("origin");
|
|
141
112
|
if (origin) {
|
|
142
113
|
try {
|
|
@@ -163,13 +134,13 @@ function toSummary(row) {
|
|
|
163
134
|
aaguid: row.aaguid,
|
|
164
135
|
};
|
|
165
136
|
}
|
|
166
|
-
function credentialsForRp(rpID) {
|
|
167
|
-
return
|
|
137
|
+
function credentialsForRp(db, rpID) {
|
|
138
|
+
return db
|
|
168
139
|
.query("SELECT * FROM passkey_credentials WHERE rp_id = ?")
|
|
169
140
|
.all(rpID);
|
|
170
141
|
}
|
|
171
|
-
function credentialById(id) {
|
|
172
|
-
return
|
|
142
|
+
function credentialById(db, id) {
|
|
143
|
+
return db
|
|
173
144
|
.query("SELECT * FROM passkey_credentials WHERE id = ?")
|
|
174
145
|
.get(id);
|
|
175
146
|
}
|
|
@@ -197,19 +168,19 @@ function notEnabled(c) {
|
|
|
197
168
|
* until it has its own credential. Host-derived rpID is fine here: a forged
|
|
198
169
|
* Host can at most re-enable password auth, which still requires the password.
|
|
199
170
|
*/
|
|
200
|
-
export function passwordLoginDisabled(c) {
|
|
201
|
-
if (
|
|
171
|
+
export function passwordLoginDisabled(c, ctx) {
|
|
172
|
+
if (ctx.auth.allowPassword)
|
|
202
173
|
return false;
|
|
203
|
-
const row =
|
|
174
|
+
const row = ctx.db
|
|
204
175
|
.query("SELECT COUNT(*) AS n FROM passkey_credentials WHERE rp_id = ?")
|
|
205
|
-
.get(rpIdForRead(c));
|
|
176
|
+
.get(rpIdForRead(c, ctx));
|
|
206
177
|
return row.n > 0;
|
|
207
178
|
}
|
|
208
179
|
/**
|
|
209
180
|
* Unauthenticated passkey routes. Mount BEFORE the auth guard, next to
|
|
210
181
|
* authRoutes.
|
|
211
182
|
*/
|
|
212
|
-
export function passkeyPublicRoutes(mode, deps = {}) {
|
|
183
|
+
export function passkeyPublicRoutes(mode, ctx, deps = {}) {
|
|
213
184
|
const verifyAuthentication = deps.verifyAuthenticationResponse ?? realVerifyAuthentication;
|
|
214
185
|
const now = deps.now ?? Date.now;
|
|
215
186
|
const app = new Hono();
|
|
@@ -219,21 +190,21 @@ export function passkeyPublicRoutes(mode, deps = {}) {
|
|
|
219
190
|
if (mode !== "password") {
|
|
220
191
|
return c.json({ password: false, passkey: false });
|
|
221
192
|
}
|
|
222
|
-
const row =
|
|
193
|
+
const row = ctx.db
|
|
223
194
|
.query("SELECT COUNT(*) AS n FROM passkey_credentials WHERE rp_id = ?")
|
|
224
|
-
.get(rpIdForRead(c));
|
|
225
|
-
return c.json({ password: !passwordLoginDisabled(c), passkey: row.n > 0 });
|
|
195
|
+
.get(rpIdForRead(c, ctx));
|
|
196
|
+
return c.json({ password: !passwordLoginDisabled(c, ctx), passkey: row.n > 0 });
|
|
226
197
|
});
|
|
227
198
|
app.post("/auth/passkey/login-options", async (c) => {
|
|
228
199
|
if (mode !== "password")
|
|
229
200
|
return notEnabled(c);
|
|
230
|
-
const ip = clientIp(c,
|
|
201
|
+
const ip = clientIp(c, ctx.auth.trustProxy, ctx.auth.trustProxyHops) || "unknown";
|
|
231
202
|
// Own bucket: conditional-UI mounts fire this on every login-screen load
|
|
232
203
|
// and must not starve real verify attempts of their shared budget.
|
|
233
204
|
if (!consumeLoginToken(`pk-opt:${ip}`, OPTIONS_RATE_LIMIT)) {
|
|
234
205
|
return c.json({ error: "Too many attempts. Try again in a minute." }, 429);
|
|
235
206
|
}
|
|
236
|
-
const rp = resolveRp(c);
|
|
207
|
+
const rp = resolveRp(c, ctx);
|
|
237
208
|
if (!rp)
|
|
238
209
|
return c.json({ error: "Origin not allowed" }, 400);
|
|
239
210
|
// Empty allowCredentials + discoverable credentials = usernameless login.
|
|
@@ -248,14 +219,14 @@ export function passkeyPublicRoutes(mode, deps = {}) {
|
|
|
248
219
|
app.post("/auth/passkey/login-verify", async (c) => {
|
|
249
220
|
if (mode !== "password")
|
|
250
221
|
return notEnabled(c);
|
|
251
|
-
const ip = clientIp(c,
|
|
222
|
+
const ip = clientIp(c, ctx.auth.trustProxy, ctx.auth.trustProxyHops) || "unknown";
|
|
252
223
|
// Same buckets as password login: one combined online-guess budget.
|
|
253
224
|
const perIpOk = consumeLoginToken(`ip:${ip}`, LOGIN_RATE_LIMIT);
|
|
254
225
|
const globalOk = consumeLoginToken("global", GLOBAL_LOGIN_RATE_LIMIT);
|
|
255
226
|
if (!perIpOk || !globalOk) {
|
|
256
227
|
return c.json({ error: "Too many attempts. Try again in a minute." }, 429);
|
|
257
228
|
}
|
|
258
|
-
const rp = resolveRp(c);
|
|
229
|
+
const rp = resolveRp(c, ctx);
|
|
259
230
|
if (!rp)
|
|
260
231
|
return c.json({ error: "Origin not allowed" }, 400);
|
|
261
232
|
let response;
|
|
@@ -266,7 +237,7 @@ export function passkeyPublicRoutes(mode, deps = {}) {
|
|
|
266
237
|
return c.json({ error: "Invalid request body" }, 400);
|
|
267
238
|
}
|
|
268
239
|
const fail = () => c.json({ error: "Passkey verification failed" }, 401);
|
|
269
|
-
const row = typeof response?.id === "string" ? credentialById(response.id) : null;
|
|
240
|
+
const row = typeof response?.id === "string" ? credentialById(ctx.db, response.id) : null;
|
|
270
241
|
if (!row || row.rp_id !== rp.rpID)
|
|
271
242
|
return fail();
|
|
272
243
|
const challenge = challengeFromResponse(response);
|
|
@@ -283,7 +254,7 @@ export function passkeyPublicRoutes(mode, deps = {}) {
|
|
|
283
254
|
});
|
|
284
255
|
if (!result.verified)
|
|
285
256
|
return fail();
|
|
286
|
-
|
|
257
|
+
ctx.db
|
|
287
258
|
.prepare("UPDATE passkey_credentials SET counter = ?, last_used_at = ? WHERE id = ?")
|
|
288
259
|
.run(result.authenticationInfo.newCounter, now(), row.id);
|
|
289
260
|
}
|
|
@@ -300,7 +271,7 @@ export function passkeyPublicRoutes(mode, deps = {}) {
|
|
|
300
271
|
}
|
|
301
272
|
return fail();
|
|
302
273
|
}
|
|
303
|
-
await issueSessionCookie(c);
|
|
274
|
+
await issueSessionCookie(c, ctx.auth);
|
|
304
275
|
return c.json({ ok: true });
|
|
305
276
|
});
|
|
306
277
|
return app;
|
|
@@ -309,24 +280,24 @@ export function passkeyPublicRoutes(mode, deps = {}) {
|
|
|
309
280
|
* Session-gated passkey routes. Mount AFTER the auth guard — gating comes from
|
|
310
281
|
* mount position, not per-route checks.
|
|
311
282
|
*/
|
|
312
|
-
export function passkeyManagementRoutes(mode, deps = {}) {
|
|
283
|
+
export function passkeyManagementRoutes(mode, ctx, deps = {}) {
|
|
313
284
|
const verifyRegistration = deps.verifyRegistrationResponse ?? realVerifyRegistration;
|
|
314
285
|
const now = deps.now ?? Date.now;
|
|
315
286
|
const app = new Hono();
|
|
316
287
|
app.post("/auth/passkey/register-options", async (c) => {
|
|
317
288
|
if (mode !== "password")
|
|
318
289
|
return notEnabled(c);
|
|
319
|
-
const rp = resolveRp(c);
|
|
290
|
+
const rp = resolveRp(c, ctx);
|
|
320
291
|
if (!rp)
|
|
321
292
|
return c.json({ error: "Origin not allowed" }, 400);
|
|
322
293
|
const options = await generateRegistrationOptions({
|
|
323
|
-
rpName: rpName
|
|
294
|
+
rpName: ctx.webauthn.rpName,
|
|
324
295
|
rpID: rp.rpID,
|
|
325
|
-
userName: userName
|
|
326
|
-
userID: userId(),
|
|
327
|
-
userDisplayName: rpName
|
|
296
|
+
userName: ctx.webauthn.userName,
|
|
297
|
+
userID: userId(ctx.webauthn),
|
|
298
|
+
userDisplayName: ctx.webauthn.rpName,
|
|
328
299
|
attestationType: "none",
|
|
329
|
-
excludeCredentials: credentialsForRp(rp.rpID).map((row) => ({
|
|
300
|
+
excludeCredentials: credentialsForRp(ctx.db, rp.rpID).map((row) => ({
|
|
330
301
|
id: row.id,
|
|
331
302
|
transports: toWebAuthnCredential(row).transports,
|
|
332
303
|
})),
|
|
@@ -342,7 +313,7 @@ export function passkeyManagementRoutes(mode, deps = {}) {
|
|
|
342
313
|
app.post("/auth/passkey/register-verify", async (c) => {
|
|
343
314
|
if (mode !== "password")
|
|
344
315
|
return notEnabled(c);
|
|
345
|
-
const rp = resolveRp(c);
|
|
316
|
+
const rp = resolveRp(c, ctx);
|
|
346
317
|
if (!rp)
|
|
347
318
|
return c.json({ error: "Origin not allowed" }, 400);
|
|
348
319
|
let body;
|
|
@@ -370,13 +341,13 @@ export function passkeyManagementRoutes(mode, deps = {}) {
|
|
|
370
341
|
}
|
|
371
342
|
const { credential, aaguid, credentialDeviceType, credentialBackedUp } = result.registrationInfo;
|
|
372
343
|
const createdAt = now();
|
|
373
|
-
|
|
344
|
+
ctx.db
|
|
374
345
|
.prepare(`INSERT INTO passkey_credentials
|
|
375
346
|
(id, public_key, counter, transports, rp_id, aaguid, device_type,
|
|
376
347
|
backed_up, label, created_at)
|
|
377
348
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
378
349
|
.run(credential.id, credential.publicKey, credential.counter, credential.transports ? JSON.stringify(credential.transports) : null, rp.rpID, aaguid || null, credentialDeviceType, credentialBackedUp ? 1 : 0, sanitizeLabel(body.label), createdAt);
|
|
379
|
-
const row = credentialById(credential.id);
|
|
350
|
+
const row = credentialById(ctx.db, credential.id);
|
|
380
351
|
return c.json({ ok: true, credential: row ? toSummary(row) : null });
|
|
381
352
|
}
|
|
382
353
|
catch (err) {
|
|
@@ -390,7 +361,7 @@ export function passkeyManagementRoutes(mode, deps = {}) {
|
|
|
390
361
|
app.get("/auth/passkey/list", (c) => {
|
|
391
362
|
if (mode !== "password")
|
|
392
363
|
return notEnabled(c);
|
|
393
|
-
const rows =
|
|
364
|
+
const rows = ctx.db
|
|
394
365
|
.query("SELECT * FROM passkey_credentials ORDER BY created_at DESC")
|
|
395
366
|
.all();
|
|
396
367
|
return c.json({ credentials: rows.map(toSummary) });
|
|
@@ -405,7 +376,7 @@ export function passkeyManagementRoutes(mode, deps = {}) {
|
|
|
405
376
|
catch {
|
|
406
377
|
return c.json({ error: "Invalid request body" }, 400);
|
|
407
378
|
}
|
|
408
|
-
const result =
|
|
379
|
+
const result = ctx.db
|
|
409
380
|
.prepare("UPDATE passkey_credentials SET label = ? WHERE id = ?")
|
|
410
381
|
.run(sanitizeLabel(body.label), c.req.param("id"));
|
|
411
382
|
if (result.changes === 0)
|
|
@@ -415,7 +386,7 @@ export function passkeyManagementRoutes(mode, deps = {}) {
|
|
|
415
386
|
app.delete("/auth/passkey/:id", (c) => {
|
|
416
387
|
if (mode !== "password")
|
|
417
388
|
return notEnabled(c);
|
|
418
|
-
const result =
|
|
389
|
+
const result = ctx.db
|
|
419
390
|
.prepare("DELETE FROM passkey_credentials WHERE id = ?")
|
|
420
391
|
.run(c.req.param("id"));
|
|
421
392
|
if (result.changes === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkeys.js","sourceRoot":"","sources":["../../src/middleware/passkeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,IAAI,wBAAwB,EACxD,0BAA0B,IAAI,sBAAsB,GACrD,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAEL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC;;;;;;;;;;;;GAYG;AAEH,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,6BAA6B;AAC/D,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,kBAAkB,GAAG,EAAE,CAAC,CAAC,+CAA+C;AAC9E,sEAAsE;AACtE,4DAA4D;AAC5D,SAAS,MAAM;IACb,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU,CAAC;AACpD,CAAC;AACD,6EAA6E;AAC7E,qEAAqE;AACrE,gCAAgC;AAChC,EAAE;AACF,yEAAyE;AACzE,kEAAkE;AAClE,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,mDAAmD;AACnD,SAAS,QAAQ;IACf,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC;AACnD,CAAC;AACD,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,SAAS,MAAM;IACb,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAC7B,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,gBAAgB,CACtB,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC;IAClC,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,mCAAmC,iBAAiB,IAAI;YAClF,wEAAwE,CAC3E,CAAC;IACJ,CAAC;AACH,CAAC;AACD,4EAA4E;AAC5E,4EAA4E;AAC5E,0DAA0D;AAC1D,MAAM,uBAAuB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAW3C,0EAA0E;AAC1E,6CAA6C;AAE7C,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAsD,CAAC;AAExF,SAAS,YAAY,CAAC,SAAiB,EAAE,IAAmB,EAAE,GAAW;IACvE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG;YAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,iBAAiB,CAAC,IAAI,IAAI,sBAAsB,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACrD,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM;QAChC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,GAAG,gBAAgB,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,kFAAkF;AAClF,SAAS,gBAAgB,CAAC,SAAiB,EAAE,IAAmB,EAAE,GAAW;IAC3E,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;AACtD,CAAC;AAED,sEAAsE;AACtE,SAAS,qBAAqB,CAAC,QAE9B;IACC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACrB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CACjD,CAAC;QAC7B,OAAO,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,iCAAiC;AAEjC,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC7B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,KAAK,CAAC;AACpF,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,CAAU;IAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GACX,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3C,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC,yEAAyE;QACzE,sEAAsE;QACtE,uEAAuE;QACvE,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,GAAG;YACjD,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;AACtE,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,CAAU;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAClE,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;IACjD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAkBD,6EAA6E;AAC7E,SAAS,SAAS,CAAC,GAAkB;IACnC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,KAAK;QACf,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,YAAY;QAC5B,QAAQ,EAAE,GAAG,CAAC,SAAS,KAAK,CAAC;QAC7B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAc,CAAC,CAAC,CAAC,IAAI;QAC5E,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,KAAK,EAAE;SACX,KAAK,CAAC,mDAAmD,CAAC;SAC1D,GAAG,CAAC,IAAI,CAAoB,CAAC;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IAChC,OAAO,KAAK,EAAE;SACX,KAAK,CAAC,gDAAgD,CAAC;SACvD,GAAG,CAAC,EAAE,CAAyB,CAAC;AACrC,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAkB;IAC9C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;QACzC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;YACxB,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAsC;YAClE,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,CAAU;IAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,GAAG,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,CAAU;IAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAK,EAAE;SAChB,KAAK,CAAC,+DAA+D,CAAC;SACtE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAkB,CAAC;IACxC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAc,EAAE,OAAoB,EAAE;IACxE,MAAM,oBAAoB,GAAG,IAAI,CAAC,4BAA4B,IAAI,wBAAwB,CAAC;IAC3F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,oEAAoE;IACpE,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;QAC7B,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,EAAE;aAChB,KAAK,CAAC,+DAA+D,CAAC;aACtE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAkB,CAAC;QACxC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClD,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC;QACrE,yEAAyE;QACzE,mEAAmE;QACnE,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,EAAE,kBAAkB,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2CAA2C,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;QAE7D,0EAA0E;QAC1E,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC;YAClD,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,gBAAgB,EAAE,EAAE;YACpB,gBAAgB,EAAE,UAAU;SAC7B,CAAC,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjD,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC;QACrE,oEAAoE;QACpE,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2CAA2C,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;QAE7D,IAAI,QAAoC,CAAC;QACzC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,EAAE,GAAG,CAAC,CAAC;QAEzE,MAAM,GAAG,GAAG,OAAO,QAAQ,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI;YAAE,OAAO,IAAI,EAAE,CAAC;QAEjD,MAAM,SAAS,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACxE,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;gBACxC,QAAQ;gBACR,iBAAiB,EAAE,SAAS;gBAC5B,cAAc,EAAE,EAAE,CAAC,MAAM;gBACzB,YAAY,EAAE,EAAE,CAAC,IAAI;gBACrB,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC;aACtC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,IAAI,EAAE,CAAC;YACpC,KAAK,EAAE;iBACJ,OAAO,CACN,2EAA2E,CAC5E;iBACA,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,+DAA+D;YAC/D,mEAAmE;YACnE,UAAU;YACV,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,IAAI,CACV,gDAAgD,GAAG,CAAC,EAAE,+BAA+B,CACtF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAc,EAAE,OAAoB,EAAE;IAC5E,MAAM,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,IAAI,sBAAsB,CAAC;IACrF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrD,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,MAAM,2BAA2B,CAAC;YAChD,MAAM,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,QAAQ,EAAE,QAAQ,EAAE;YACpB,MAAM,EAAE,MAAM,EAAE;YAChB,eAAe,EAAE,MAAM,EAAE;YACzB,eAAe,EAAE,MAAM;YACvB,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC1D,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,UAAU;aACjD,CAAC,CAAC;YACH,sBAAsB,EAAE;gBACtB,WAAW,EAAE,UAAU;gBACvB,gBAAgB,EAAE,UAAU;aAC7B;YACD,qBAAqB,EAAE,uBAAuB;SAC/C,CAAC,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpD,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;QAE7D,IAAI,IAA8D,CAAC;QACnE,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,GAAG,CAAC,CAAC;QAE1E,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACtE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;gBACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,iBAAiB,EAAE,SAAS;gBAC5B,cAAc,EAAE,EAAE,CAAC,MAAM;gBACzB,YAAY,EAAE,EAAE,CAAC,IAAI;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACjD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,GACpE,MAAM,CAAC,gBAAgB,CAAC;YAC1B,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;YACxB,KAAK,EAAE;iBACJ,OAAO,CACN;;;iDAGuC,CACxC;iBACA,GAAG,CACF,UAAU,CAAC,EAAE,EACb,UAAU,CAAC,SAAS,EACpB,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EACpE,EAAE,CAAC,IAAI,EACP,MAAM,IAAI,IAAI,EACd,oBAAoB,EACpB,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EACzB,SAAS,CACV,CAAC;YACJ,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,yEAAyE;IACzE,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE;QAClC,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,EAAE;aACjB,KAAK,CAAC,4DAA4D,CAAC;aACnE,GAAG,EAAqB,CAAC;QAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,IAAyB,CAAC;QAC9B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,EAAE;aACnB,OAAO,CAAC,uDAAuD,CAAC;aAChE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE;QACpC,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,EAAE;aACnB,OAAO,CAAC,8CAA8C,CAAC;aACvD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"passkeys.js","sourceRoot":"","sources":["../../src/middleware/passkeys.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,17 +4,19 @@ import type { Context, MiddlewareHandler } from "hono";
|
|
|
4
4
|
* localhost.
|
|
5
5
|
*
|
|
6
6
|
* SECURITY: header trust is OFF by default. An exposed port lets anyone spoof
|
|
7
|
-
* `x-forwarded-for`, so the real socket address is used unless
|
|
8
|
-
* — set that ONLY when a trusted
|
|
9
|
-
* forwarding header.
|
|
7
|
+
* `x-forwarded-for`, so the real socket address is used unless the resolved
|
|
8
|
+
* config says `trustProxy` (TRUST_PROXY=1) — set that ONLY when a trusted
|
|
9
|
+
* reverse proxy in front of brain-ui sets the forwarding header.
|
|
10
10
|
*/
|
|
11
11
|
export interface TailscaleGuardOptions {
|
|
12
|
-
/** Trust x-forwarded-for / x-real-ip.
|
|
13
|
-
trustProxy
|
|
12
|
+
/** Trust x-forwarded-for / x-real-ip. */
|
|
13
|
+
trustProxy: boolean;
|
|
14
|
+
/** How many trusted proxies front the app (default 1). */
|
|
15
|
+
trustProxyHops?: number;
|
|
14
16
|
}
|
|
15
|
-
export declare function tailscaleGuard(options
|
|
17
|
+
export declare function tailscaleGuard(options: TailscaleGuardOptions): MiddlewareHandler;
|
|
16
18
|
/** True when the request's client IP is a Tailscale or loopback address. */
|
|
17
|
-
export declare function isTailscaleAllowed(c: Context, trustProxy: boolean): boolean;
|
|
19
|
+
export declare function isTailscaleAllowed(c: Context, trustProxy: boolean, trustProxyHops?: number): boolean;
|
|
18
20
|
/**
|
|
19
21
|
* The client IP. With `trustProxy`, read the forwarding header a trusted proxy
|
|
20
22
|
* set; otherwise use the real socket address (unspoofable). Returns "" when the
|
|
@@ -23,9 +25,10 @@ export declare function isTailscaleAllowed(c: Context, trustProxy: boolean): boo
|
|
|
23
25
|
*
|
|
24
26
|
* X-Forwarded-For is parsed RIGHT-TO-LEFT: each proxy appends the address it saw,
|
|
25
27
|
* so the rightmost entries are the trusted hops we control and the leftmost is
|
|
26
|
-
* client-controllable. `
|
|
27
|
-
* this app; the client IP is the entry just before them. Taking the
|
|
28
|
-
* entry (the old behaviour) let a client spoof its address by
|
|
28
|
+
* client-controllable. `trustProxyHops` (TRUST_PROXY_HOPS, default 1) is how many
|
|
29
|
+
* proxies front this app; the client IP is the entry just before them. Taking the
|
|
30
|
+
* leftmost entry (the old behaviour) let a client spoof its address by
|
|
31
|
+
* pre-seeding XFF.
|
|
29
32
|
*/
|
|
30
|
-
export declare function clientIp(c: Context, trustProxy: boolean): string;
|
|
33
|
+
export declare function clientIp(c: Context, trustProxy: boolean, trustProxyHops?: number): string;
|
|
31
34
|
//# sourceMappingURL=tailscale.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailscale.d.ts","sourceRoot":"","sources":["../../src/middleware/tailscale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAGvD;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC,
|
|
1
|
+
{"version":3,"file":"tailscale.d.ts","sourceRoot":"","sources":["../../src/middleware/tailscale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAGvD;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC,yCAAyC;IACzC,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,CAShF;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,OAAO,EACV,UAAU,EAAE,OAAO,EACnB,cAAc,SAAI,GACjB,OAAO,CAGT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,SAAI,GAAG,MAAM,CAqBpF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { getConnInfo } from "hono/bun";
|
|
2
|
-
export function tailscaleGuard(options
|
|
3
|
-
const
|
|
2
|
+
export function tailscaleGuard(options) {
|
|
3
|
+
const { trustProxy, trustProxyHops } = options;
|
|
4
4
|
return async (c, next) => {
|
|
5
|
-
if (isTailscaleAllowed(c, trustProxy)) {
|
|
5
|
+
if (isTailscaleAllowed(c, trustProxy, trustProxyHops)) {
|
|
6
6
|
await next();
|
|
7
7
|
}
|
|
8
8
|
else {
|
|
@@ -11,8 +11,8 @@ export function tailscaleGuard(options = {}) {
|
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
/** True when the request's client IP is a Tailscale or loopback address. */
|
|
14
|
-
export function isTailscaleAllowed(c, trustProxy) {
|
|
15
|
-
const ip = clientIp(c, trustProxy);
|
|
14
|
+
export function isTailscaleAllowed(c, trustProxy, trustProxyHops = 1) {
|
|
15
|
+
const ip = clientIp(c, trustProxy, trustProxyHops);
|
|
16
16
|
return isTailscaleIp(ip) || isLocalIp(ip);
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
@@ -23,11 +23,12 @@ export function isTailscaleAllowed(c, trustProxy) {
|
|
|
23
23
|
*
|
|
24
24
|
* X-Forwarded-For is parsed RIGHT-TO-LEFT: each proxy appends the address it saw,
|
|
25
25
|
* so the rightmost entries are the trusted hops we control and the leftmost is
|
|
26
|
-
* client-controllable. `
|
|
27
|
-
* this app; the client IP is the entry just before them. Taking the
|
|
28
|
-
* entry (the old behaviour) let a client spoof its address by
|
|
26
|
+
* client-controllable. `trustProxyHops` (TRUST_PROXY_HOPS, default 1) is how many
|
|
27
|
+
* proxies front this app; the client IP is the entry just before them. Taking the
|
|
28
|
+
* leftmost entry (the old behaviour) let a client spoof its address by
|
|
29
|
+
* pre-seeding XFF.
|
|
29
30
|
*/
|
|
30
|
-
export function clientIp(c, trustProxy) {
|
|
31
|
+
export function clientIp(c, trustProxy, trustProxyHops = 1) {
|
|
31
32
|
if (trustProxy) {
|
|
32
33
|
const forwarded = c.req.header("x-forwarded-for");
|
|
33
34
|
if (forwarded) {
|
|
@@ -36,7 +37,7 @@ export function clientIp(c, trustProxy) {
|
|
|
36
37
|
.map((part) => part.trim())
|
|
37
38
|
.filter(Boolean);
|
|
38
39
|
if (parts.length > 0) {
|
|
39
|
-
const hops = Math.max(1,
|
|
40
|
+
const hops = Math.max(1, trustProxyHops);
|
|
40
41
|
const ip = parts[Math.max(0, parts.length - hops)];
|
|
41
42
|
if (ip)
|
|
42
43
|
return ip;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailscale.js","sourceRoot":"","sources":["../../src/middleware/tailscale.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"tailscale.js","sourceRoot":"","sources":["../../src/middleware/tailscale.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAkBvC,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC/C,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAChC,CAAU,EACV,UAAmB,EACnB,cAAc,GAAG,CAAC;IAElB,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IACnD,OAAO,aAAa,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAU,EAAE,UAAmB,EAAE,cAAc,GAAG,CAAC;IAC1E,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAClD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,SAAS;iBACpB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;gBACzC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;gBACnD,IAAI,EAAE;oBAAE,OAAO,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EAAU;IAC/B,sEAAsE;IACtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,OAAO,MAAM,IAAI,EAAE,IAAI,MAAM,IAAI,GAAG,CAAC;AACvC,CAAC;AAED,SAAS,SAAS,CAAC,EAAU;IAC3B,OAAO,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,WAAW,CAAC;AAClE,CAAC"}
|
package/dist/routes/brain.d.ts
CHANGED
|
@@ -1,155 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
} | {
|
|
11
|
-
input: {};
|
|
12
|
-
output: {
|
|
13
|
-
results: {
|
|
14
|
-
path: string;
|
|
15
|
-
title: string;
|
|
16
|
-
type: string;
|
|
17
|
-
relevance: string;
|
|
18
|
-
score: number;
|
|
19
|
-
snippet: string;
|
|
20
|
-
}[];
|
|
21
|
-
warnings: string[];
|
|
22
|
-
};
|
|
23
|
-
outputFormat: "json";
|
|
24
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
25
|
-
} | {
|
|
26
|
-
input: {};
|
|
27
|
-
output: {
|
|
28
|
-
error: string;
|
|
29
|
-
};
|
|
30
|
-
outputFormat: "json";
|
|
31
|
-
status: 500;
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
} & {
|
|
35
|
-
"/brain/briefing": {
|
|
36
|
-
$get: {
|
|
37
|
-
input: {};
|
|
38
|
-
output: {
|
|
39
|
-
content: string;
|
|
40
|
-
};
|
|
41
|
-
outputFormat: "json";
|
|
42
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
43
|
-
} | {
|
|
44
|
-
input: {};
|
|
45
|
-
output: {
|
|
46
|
-
error: string;
|
|
47
|
-
};
|
|
48
|
-
outputFormat: "json";
|
|
49
|
-
status: 500;
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
} & {
|
|
53
|
-
"/brain/whatsup": {
|
|
54
|
-
$post: {
|
|
55
|
-
input: {};
|
|
56
|
-
output: {};
|
|
57
|
-
outputFormat: string;
|
|
58
|
-
status: import("hono/utils/http-status").StatusCode;
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
} & {
|
|
62
|
-
"/brain/stats": {
|
|
63
|
-
$get: {
|
|
64
|
-
input: {};
|
|
65
|
-
output: {
|
|
66
|
-
documents: number;
|
|
67
|
-
byType: {
|
|
68
|
-
[x: string]: number;
|
|
69
|
-
};
|
|
70
|
-
byStatus: {
|
|
71
|
-
[x: string]: number;
|
|
72
|
-
};
|
|
73
|
-
byRelevance: {
|
|
74
|
-
[x: string]: number;
|
|
75
|
-
};
|
|
76
|
-
tags: number;
|
|
77
|
-
links: number;
|
|
78
|
-
brokenLinks: number;
|
|
79
|
-
chunks: number;
|
|
80
|
-
};
|
|
81
|
-
outputFormat: "json";
|
|
82
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
83
|
-
} | {
|
|
84
|
-
input: {};
|
|
85
|
-
output: {
|
|
86
|
-
error: string;
|
|
87
|
-
};
|
|
88
|
-
outputFormat: "json";
|
|
89
|
-
status: 500;
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
} & {
|
|
93
|
-
"/brain/list": {
|
|
94
|
-
$get: {
|
|
95
|
-
input: {};
|
|
96
|
-
output: {
|
|
97
|
-
results: {
|
|
98
|
-
path: string;
|
|
99
|
-
title: string;
|
|
100
|
-
type: string;
|
|
101
|
-
status: string;
|
|
102
|
-
relevance: string;
|
|
103
|
-
tags: string[];
|
|
104
|
-
created: string;
|
|
105
|
-
updated: string;
|
|
106
|
-
summary?: string | undefined;
|
|
107
|
-
}[];
|
|
108
|
-
};
|
|
109
|
-
outputFormat: "json";
|
|
110
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
111
|
-
} | {
|
|
112
|
-
input: {};
|
|
113
|
-
output: {
|
|
114
|
-
error: string;
|
|
115
|
-
};
|
|
116
|
-
outputFormat: "json";
|
|
117
|
-
status: 500;
|
|
118
|
-
};
|
|
119
|
-
};
|
|
120
|
-
} & {
|
|
121
|
-
"/brain/sync": {
|
|
122
|
-
$post: {
|
|
123
|
-
input: {};
|
|
124
|
-
output: {};
|
|
125
|
-
outputFormat: string;
|
|
126
|
-
status: import("hono/utils/http-status").StatusCode;
|
|
127
|
-
};
|
|
128
|
-
};
|
|
129
|
-
} & {
|
|
130
|
-
"/brain/add": {
|
|
131
|
-
$post: {
|
|
132
|
-
input: {};
|
|
133
|
-
output: {
|
|
134
|
-
error: string;
|
|
135
|
-
};
|
|
136
|
-
outputFormat: "json";
|
|
137
|
-
status: 400;
|
|
138
|
-
} | {
|
|
139
|
-
input: {};
|
|
140
|
-
output: {
|
|
141
|
-
success: true;
|
|
142
|
-
};
|
|
143
|
-
outputFormat: "json";
|
|
144
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
145
|
-
} | {
|
|
146
|
-
input: {};
|
|
147
|
-
output: {
|
|
148
|
-
error: string;
|
|
149
|
-
};
|
|
150
|
-
outputFormat: "json";
|
|
151
|
-
status: 500;
|
|
152
|
-
};
|
|
153
|
-
};
|
|
154
|
-
}, "/", "/brain/add">;
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import type { BrainClient } from "../brain/client.js";
|
|
3
|
+
import { type KeytermSettings } from "../voice/keyterm-builder.js";
|
|
4
|
+
export interface BrainRoutesDeps {
|
|
5
|
+
brain: BrainClient;
|
|
6
|
+
brainPath: string;
|
|
7
|
+
keyterms: KeytermSettings;
|
|
8
|
+
}
|
|
9
|
+
export declare function createBrainRoutes(deps: BrainRoutesDeps): Hono;
|
|
155
10
|
//# sourceMappingURL=brain.d.ts.map
|