@snagset/server 0.1.39 → 0.1.40
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/dist/app.js +74 -2
- package/dist/app.js.map +1 -1
- package/dist/config.generated.js +2 -1
- package/dist/config.generated.js.map +1 -1
- package/dist/db/migrations/0014_password_resets.sql +69 -0
- package/dist/email.js +29 -0
- package/dist/email.js.map +1 -0
- package/dist/instance/settings.js +30 -2
- package/dist/instance/settings.js.map +1 -1
- package/dist/jobs/reaper.js +13 -6
- package/dist/jobs/reaper.js.map +1 -1
- package/dist/orgs.js +42 -12
- package/dist/orgs.js.map +1 -1
- package/dist/routes/assignees.js +2 -1
- package/dist/routes/assignees.js.map +1 -1
- package/dist/routes/instance.js +50 -1
- package/dist/routes/instance.js.map +1 -1
- package/dist/routes/integrations.js +2 -1
- package/dist/routes/integrations.js.map +1 -1
- package/dist/routes/invites.js +3 -3
- package/dist/routes/invites.js.map +1 -1
- package/dist/routes/orgs.js +8 -3
- package/dist/routes/orgs.js.map +1 -1
- package/dist/routes/owner.js +52 -9
- package/dist/routes/owner.js.map +1 -1
- package/dist/routes/passwordReset.js +302 -0
- package/dist/routes/passwordReset.js.map +1 -0
- package/package.json +4 -4
- package/static/dashboard/assets/{CompositeItem-Yi3wWYM7.js → CompositeItem-CP7pxc5U.js} +1 -1
- package/static/dashboard/assets/{ConfirmDialog-D6hyhISD.js → ConfirmDialog-D7eZU5Z6.js} +1 -1
- package/static/dashboard/assets/{CopyButton-hyiQh1Zr.js → CopyButton-_X7ITEaj.js} +1 -1
- package/static/dashboard/assets/{FieldItemContext-Gb3Lo5Ci.js → FieldItemContext-BgajCxI_.js} +1 -1
- package/static/dashboard/assets/InstallTag-Bxq5AWM0.js +1 -0
- package/static/dashboard/assets/McpTokens-D_0BEsPb.js +1 -0
- package/static/dashboard/assets/{SaveState-CmcJ4unZ.js → SaveState-WYxHW3VJ.js} +1 -1
- package/static/dashboard/assets/{_app-Dsd1bbNv.js → _app-Bv20PwQa.js} +1 -1
- package/static/dashboard/assets/{_app-CBnYJfLp.js → _app-C4LQnv_m.js} +1 -1
- package/static/dashboard/assets/{activity-DG1e6z-2.js → activity-Ch0XQ9sf.js} +1 -1
- package/static/dashboard/assets/{arrow-left-CWiSdgA-.js → arrow-left-BVcH0ZD5.js} +1 -1
- package/static/dashboard/assets/{avatar-nrKPMD7A.js → avatar-B4uC-2Rd.js} +1 -1
- package/static/dashboard/assets/{badge-DEvpNOzs.js → badge-D4-0NV1D.js} +1 -1
- package/static/dashboard/assets/{card--8RLEIGP.js → card-_fRmCPLn.js} +1 -1
- package/static/dashboard/assets/{check-XHwuM5zg.js → check-BTd2LoGN.js} +1 -1
- package/static/dashboard/assets/{chevron-right-CG2rSUns.js → chevron-right-Co0UMSkz.js} +1 -1
- package/static/dashboard/assets/{copy-eakuUTpI.js → copy-CEpGdeGb.js} +1 -1
- package/static/dashboard/assets/{dialog-D0b9dX2m.js → dialog-C7r1DbuZ.js} +2 -2
- package/static/dashboard/assets/{dropdown-menu-BMIst4Wj.js → dropdown-menu-Clnp0fwC.js} +2 -2
- package/static/dashboard/assets/forgot-nTWEgSRm.js +1 -0
- package/static/dashboard/assets/{image-off-DZOyJVTM.js → image-off-DP5YbLdB.js} +1 -1
- package/static/dashboard/assets/index-Ddw_j6S-.js +162 -0
- package/static/dashboard/assets/index-Do3jpVIF.css +1 -0
- package/static/dashboard/assets/invite-CHU_LQYP.js +1 -0
- package/static/dashboard/assets/{label-Ds2CYKth.js → label-CeY5IHdJ.js} +1 -1
- package/static/dashboard/assets/{labels-CUVq_Uf0.js → labels-BuZpvtvw.js} +1 -1
- package/static/dashboard/assets/{layout-grid-BXWirugp.js → layout-grid-DpWj1k0D.js} +1 -1
- package/static/dashboard/assets/{parts-B46j7QJi.js → parts-DuhvDJGT.js} +1 -1
- package/static/dashboard/assets/{plus-yZPLf0r6.js → plus-fom7ulPf.js} +1 -1
- package/static/dashboard/assets/reset-CQMD1ToU.js +1 -0
- package/static/dashboard/assets/s._site-XzH7h0kY.js +1 -0
- package/static/dashboard/assets/{s._site.comments-CQYkPWo4.js → s._site.comments-D_QbkDGk.js} +5 -5
- package/static/dashboard/assets/s._site.reviewers-DKQj9ftE.js +1 -0
- package/static/dashboard/assets/{s._site.settings-D9Qix9dj.js → s._site.settings-DGhg9pWK.js} +1 -1
- package/static/dashboard/assets/{setup-CefvYWGy.js → setup-nee74nI7.js} +1 -1
- package/static/dashboard/assets/sign-in-DJSdsL9I.js +1 -0
- package/static/dashboard/assets/{sign-up-nsUll0Gy.js → sign-up-DeQDeqC_.js} +1 -1
- package/static/dashboard/assets/sites-l8LQQwZW.js +1 -0
- package/static/dashboard/assets/studio-CL5TjGsb.js +1 -0
- package/static/dashboard/assets/studio-CLnwa1jr.js +1 -0
- package/static/dashboard/assets/studio.index-D4sAU91A.js +1 -0
- package/static/dashboard/assets/studio.integrations-BLkBekJf.js +1 -0
- package/static/dashboard/assets/studio.members-KzPokmYW.js +6 -0
- package/static/dashboard/assets/{sun-Djjj3CUF.js → sun-C6_OdtRI.js} +1 -1
- package/static/dashboard/assets/{switch-WMRF6OK1.js → switch-CGYNLqP6.js} +1 -1
- package/static/dashboard/assets/{table-CgakQRAC.js → table-WdFx8YPW.js} +1 -1
- package/static/dashboard/assets/{useAriaLabelledBy-obWCIEg1.js → useAriaLabelledBy-CYXdXCKz.js} +1 -1
- package/static/dashboard/assets/{useBaseQuery-DG87f6yY.js → useBaseQuery-bYBwKcW7.js} +1 -1
- package/static/dashboard/assets/useQuery-CaIu0ohN.js +1 -0
- package/static/dashboard/assets/useRender-Rh7x0Dwc.js +1 -0
- package/static/dashboard/assets/{useValueChanged-CHzVruZ0.js → useValueChanged-DCX5-3sY.js} +1 -1
- package/static/dashboard/assets/{users-BvfczmcS.js → users-BSiXsvcu.js} +1 -1
- package/static/dashboard/assets/{welcome-D5mKF-J3.js → welcome-C96YFTXf.js} +3 -3
- package/static/dashboard/assets/{widget-signin-BmCBYJgF.js → widget-signin-DIvRFGYL.js} +1 -1
- package/static/dashboard/assets/you-CNN1L9wO.js +1 -0
- package/static/dashboard/assets/{zod-D7wsVto4.js → zod-BXAKx0ML.js} +1 -1
- package/static/dashboard/index.html +2 -2
- package/static/widget/build.json +2 -2
- package/static/widget/snag.js +1 -1
- package/static/widget/snag.runtime.js +1 -1
- package/static/dashboard/assets/InstallTag-BRvgfS91.js +0 -1
- package/static/dashboard/assets/McpTokens--C1TeZqq.js +0 -1
- package/static/dashboard/assets/index-COORBw3J.js +0 -169
- package/static/dashboard/assets/index-CpG77B7f.css +0 -1
- package/static/dashboard/assets/invite-Df7qdHBL.js +0 -1
- package/static/dashboard/assets/s._site-BQiiE9w4.js +0 -1
- package/static/dashboard/assets/s._site.reviewers-BCQWB5GA.js +0 -1
- package/static/dashboard/assets/sign-in-Q4AWMmvk.js +0 -1
- package/static/dashboard/assets/sites-BKsg9Pla.js +0 -1
- package/static/dashboard/assets/studio-CSGo60dt.js +0 -1
- package/static/dashboard/assets/studio-ytRb_WCk.js +0 -1
- package/static/dashboard/assets/studio.index-Cul4Sj15.js +0 -1
- package/static/dashboard/assets/studio.integrations-CC61jGXL.js +0 -1
- package/static/dashboard/assets/studio.members-DEM1MjLy.js +0 -6
- package/static/dashboard/assets/useQuery-DT3w11tR.js +0 -1
- package/static/dashboard/assets/useRender-Bu6Vyu1g.js +0 -1
- package/static/dashboard/assets/you-Dsp9kUVS.js +0 -1
package/dist/routes/owner.js
CHANGED
|
@@ -2,7 +2,8 @@ import { Hono } from "hono";
|
|
|
2
2
|
import { randomUUID, randomBytes, createHash, timingSafeEqual, scryptSync } from "node:crypto";
|
|
3
3
|
import { DASHBOARD_SESSION_COOKIE, DASHBOARD_CSRF_COOKIE, HTTP_HEADER, ID_PREFIX } from "../vendor/types/names.js";
|
|
4
4
|
import { usage } from "../plan.js";
|
|
5
|
-
import {
|
|
5
|
+
import { studiosIn } from "../orgs.js";
|
|
6
|
+
import { firstOrgIdIn } from "../instance/settings.js";
|
|
6
7
|
import { inOrg, maintenance } from "../db/scope.js";
|
|
7
8
|
import { effectiveWriteMode } from "./sessions.js";
|
|
8
9
|
import { pendingMigrations } from "../db/migrate.js";
|
|
@@ -240,11 +241,42 @@ export function ownerRoutes(deps) {
|
|
|
240
241
|
const token = randomBytes(32).toString("base64url");
|
|
241
242
|
const csrf = randomBytes(32).toString("base64url");
|
|
242
243
|
const expires = new Date(now().getTime() + ABSOLUTE_MS);
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
244
|
+
/*
|
|
245
|
+
* The session is opened only if the password that was just verified is
|
|
246
|
+
* STILL the password, checked under a lock on the person's row.
|
|
247
|
+
*
|
|
248
|
+
* The hash above was read, then a tenth of a second of scrypt was spent
|
|
249
|
+
* on it, and until 2026-11-10 the session was then inserted without
|
|
250
|
+
* looking again. A password changed in that tenth of a second — by a
|
|
251
|
+
* mailed reset, by `snagset passwd`, on the account page — revokes the
|
|
252
|
+
* sessions that exist at that instant, and this one did not exist yet: it
|
|
253
|
+
* arrived a moment later and was good for thirty days. Whoever knew the
|
|
254
|
+
* old password only had to be signing in at the time, and an attacker who
|
|
255
|
+
* knows it can arrange to be, in a loop.
|
|
256
|
+
*
|
|
257
|
+
* FOR SHARE waits for a change in flight (every one of those takes this
|
|
258
|
+
* row for update first) and then reads what it committed; holding it to
|
|
259
|
+
* the INSERT makes a change that starts now wait for this session to
|
|
260
|
+
* exist, so its revoke finds it. Either order, nothing outlives the change.
|
|
261
|
+
*/
|
|
262
|
+
const opened = await maintenance(sql, async (tx) => {
|
|
263
|
+
const [still] = await tx `
|
|
264
|
+
SELECT id FROM users
|
|
265
|
+
WHERE id = ${user.id} AND deleted_at IS NULL AND password_hash = ${user.password_hash}
|
|
266
|
+
FOR SHARE
|
|
267
|
+
`;
|
|
268
|
+
if (!still)
|
|
269
|
+
return false;
|
|
270
|
+
await tx `
|
|
271
|
+
INSERT INTO user_sessions (id, org_id, user_id, token_hash, user_agent, expires_at)
|
|
272
|
+
VALUES (${randomUUID()}, ${user.org_id}, ${user.id}, ${sha256(token)},
|
|
273
|
+
${(c.req.header("User-Agent") ?? "").slice(0, 400)}, ${expires})
|
|
274
|
+
`;
|
|
275
|
+
return true;
|
|
276
|
+
});
|
|
277
|
+
// The one sentence, as for every other failure here: the password that was typed is no longer one.
|
|
278
|
+
if (!opened)
|
|
279
|
+
return fail(c, 401, "invalid_credentials", "That email address and password do not match an account.");
|
|
248
280
|
setSessionCookies(c, token, csrf, deps.secure, Math.floor(ABSOLUTE_MS / 1000));
|
|
249
281
|
// No id, for the reason `/api/v1/me` gives: nothing outside the database
|
|
250
282
|
// needs it, and an internal id put on the wire because it was to hand is
|
|
@@ -338,8 +370,19 @@ export function ownerRoutes(deps) {
|
|
|
338
370
|
// shown where a limit exists, silent where there is none.
|
|
339
371
|
return { org, projects, used: await usage(tx, owner.orgId) };
|
|
340
372
|
});
|
|
341
|
-
//
|
|
342
|
-
|
|
373
|
+
// Two questions that cross studios, so one transaction under the
|
|
374
|
+
// maintenance claim. Every studio this person belongs to, for the
|
|
375
|
+
// switcher; the current one is marked. And whether the current one is the
|
|
376
|
+
// operator's, the studio the instance's settings belong to: Studio ›
|
|
377
|
+
// General draws the address, Storage and Mail only then, because from any
|
|
378
|
+
// other studio the instance routes answer 403 (routes/instance.ts) and a
|
|
379
|
+
// page that asked would be drawing a refusal. Together, because this
|
|
380
|
+
// route is asked on every load and again after most writes, and a
|
|
381
|
+
// transaction of its own for the second would be four more round trips.
|
|
382
|
+
const { studios, operator } = await maintenance(sql, async (tx) => ({
|
|
383
|
+
studios: await studiosIn(tx, owner.userId),
|
|
384
|
+
operator: (await firstOrgIdIn(tx)) === owner.orgId,
|
|
385
|
+
}));
|
|
343
386
|
const l = await deps.limits(owner.orgId);
|
|
344
387
|
return c.json({
|
|
345
388
|
limits: {
|
|
@@ -356,7 +399,7 @@ export function ownerRoutes(deps) {
|
|
|
356
399
|
// id put on the wire because it was to hand is how the first one always
|
|
357
400
|
// gets out.
|
|
358
401
|
user: { email: owner.email, name: owner.name, role: owner.role },
|
|
359
|
-
org: { name: org?.name ?? "", slug: org?.slug ?? "" },
|
|
402
|
+
org: { name: org?.name ?? "", slug: org?.slug ?? "", operator },
|
|
360
403
|
orgs: studios.map((s) => ({ slug: s.slug, name: s.name, role: s.role, current: s.id === owner.orgId })),
|
|
361
404
|
signupOpen: deps.signupOpen?.() ?? false,
|
|
362
405
|
// The migrations this build ships that the database has not run
|
package/dist/routes/owner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner.js","sourceRoot":"","sources":["../../src/routes/owner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"owner.js","sourceRoot":"","sources":["../../src/routes/owner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { randomUUID, randomBytes, createHash } from "node:crypto";
|
|
3
|
+
import { hashPassword, setSessionCookies } from "./owner.js";
|
|
4
|
+
import { openSession, SESSION_S } from "../orgs.js";
|
|
5
|
+
import { maintenance } from "../db/scope.js";
|
|
6
|
+
import { isConfigured } from "../mail/index.js";
|
|
7
|
+
import { firstOrgId } from "../instance/settings.js";
|
|
8
|
+
import { looksLikeEmail } from "../email.js";
|
|
9
|
+
/** An hour: long enough to find the mail, short enough that a mailbox read later is not a way in. */
|
|
10
|
+
export const RESET_TTL_MIN = 60;
|
|
11
|
+
const WINDOW_MS = 60 * 60 * 1000;
|
|
12
|
+
const CALLER_PER_WINDOW = 10;
|
|
13
|
+
const MAILBOX_PER_WINDOW = 3;
|
|
14
|
+
const ATTEMPTS_PER_WINDOW = 20;
|
|
15
|
+
const sha256 = (s) => createHash("sha256").update(s, "utf8").digest();
|
|
16
|
+
function fail(c, status, code, message, details) {
|
|
17
|
+
return c.json({ error: { code, message, ...(details ? { details } : {}), requestId: c.get("requestId") } }, status);
|
|
18
|
+
}
|
|
19
|
+
/** The link. One function, so the mail and a test cannot point at different places. */
|
|
20
|
+
export function resetUrl(base, token) {
|
|
21
|
+
return `${base.replace(/\/+$/, "")}/reset#${token}`;
|
|
22
|
+
}
|
|
23
|
+
/** Ordered so the more useful sentence wins: a used link that has since expired was USED. */
|
|
24
|
+
function gone(r, at) {
|
|
25
|
+
if (r.used_at)
|
|
26
|
+
return "link_used";
|
|
27
|
+
if (r.expires_at <= at)
|
|
28
|
+
return "link_expired";
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const SENTENCE = {
|
|
32
|
+
link_not_found: "This reset link is not valid. Check that you copied all of it, or ask for a new one.",
|
|
33
|
+
link_used: "This reset link has already been used. Sign in with the password you chose, or ask for a new link.",
|
|
34
|
+
link_expired: "This reset link has expired. They last an hour. Ask for a new one.",
|
|
35
|
+
};
|
|
36
|
+
/** Why a link cannot be used, as the status and the sentence a route answers with. */
|
|
37
|
+
class Refused extends Error {
|
|
38
|
+
status;
|
|
39
|
+
code;
|
|
40
|
+
constructor(why) {
|
|
41
|
+
super(SENTENCE[why]);
|
|
42
|
+
// 404 for a token nobody minted, 410 for one that existed and no longer
|
|
43
|
+
// works: the page can tell "typo" from "too late", as an invite's does.
|
|
44
|
+
this.status = why === "link_not_found" ? 404 : 410;
|
|
45
|
+
this.code = why;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** A link that can still be used, or the refusal that says why not. The maintenance claim: whose it is, is what this finds out. */
|
|
49
|
+
async function liveLink(sql, token, at) {
|
|
50
|
+
const [row] = token
|
|
51
|
+
? await maintenance(sql, (tx) => tx `
|
|
52
|
+
SELECT id, email, user_id, expires_at, used_at FROM password_resets WHERE token_hash = ${sha256(token)}
|
|
53
|
+
`)
|
|
54
|
+
: [];
|
|
55
|
+
if (!row)
|
|
56
|
+
throw new Refused("link_not_found");
|
|
57
|
+
const why = gone(row, at);
|
|
58
|
+
if (why)
|
|
59
|
+
throw new Refused(why);
|
|
60
|
+
return row;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Bump one hourly counter under the instance's first studio, and say whether
|
|
64
|
+
* it is past its limit. The same statement the mail and MCP budgets run.
|
|
65
|
+
*/
|
|
66
|
+
async function over(sql, anchor, key, limit, nowMs) {
|
|
67
|
+
const now = new Date(nowMs);
|
|
68
|
+
const windowStart = new Date(nowMs - WINDOW_MS);
|
|
69
|
+
const expires = new Date(nowMs + WINDOW_MS);
|
|
70
|
+
const [row] = await maintenance(sql, (tx) => tx `
|
|
71
|
+
INSERT INTO rate_counters (org_id, bucket_key, window_start, count, expires_at)
|
|
72
|
+
VALUES (${anchor}::uuid, ${key}, ${now}, 1, ${expires})
|
|
73
|
+
ON CONFLICT (org_id, bucket_key) DO UPDATE
|
|
74
|
+
SET count = CASE WHEN rate_counters.window_start < ${windowStart} THEN 1 ELSE rate_counters.count + 1 END,
|
|
75
|
+
window_start = CASE WHEN rate_counters.window_start < ${windowStart} THEN ${now} ELSE rate_counters.window_start END,
|
|
76
|
+
expires_at = CASE WHEN rate_counters.window_start < ${windowStart} THEN ${expires} ELSE rate_counters.expires_at END
|
|
77
|
+
RETURNING count::text
|
|
78
|
+
`);
|
|
79
|
+
return !!row && Number(row.count) > limit;
|
|
80
|
+
}
|
|
81
|
+
const callerOf = (c) => c.req.header("x-forwarded-for")?.split(",")[0]?.trim() || c.req.header("x-real-ip")?.trim() || "local";
|
|
82
|
+
const bucket = (what, value) => `reset:${what}:${sha256(value).toString("base64url")}`;
|
|
83
|
+
/**
|
|
84
|
+
* The inbox an address delivers to, for COUNTING only — never for identity,
|
|
85
|
+
* where `a+x@` and `a@` stay two accounts.
|
|
86
|
+
*
|
|
87
|
+
* Folded only where two spellings are KNOWN to be one inbox, which is Gmail:
|
|
88
|
+
* a tag after `+`, and dots anywhere. There one inbox with several accounts
|
|
89
|
+
* would otherwise be as many mailboxes as it has spellings. A tag is a
|
|
90
|
+
* provider's feature and not a rule of mail, and folding it everywhere was a
|
|
91
|
+
* way to lock somebody out: where `victim+1@corp` is not delivered to
|
|
92
|
+
* `victim@corp`, whoever held an account spelled that way spent the other
|
|
93
|
+
* person's three an hour on mail that person never saw.
|
|
94
|
+
*/
|
|
95
|
+
export function mailboxOf(email) {
|
|
96
|
+
const at = email.lastIndexOf("@");
|
|
97
|
+
let local = email.slice(0, at);
|
|
98
|
+
let domain = email.slice(at + 1);
|
|
99
|
+
if (domain === "googlemail.com")
|
|
100
|
+
domain = "gmail.com";
|
|
101
|
+
if (domain === "gmail.com") {
|
|
102
|
+
const plus = local.indexOf("+");
|
|
103
|
+
if (plus > 0)
|
|
104
|
+
local = local.slice(0, plus);
|
|
105
|
+
local = local.replace(/\./g, "");
|
|
106
|
+
}
|
|
107
|
+
return `${local}@${domain}`;
|
|
108
|
+
}
|
|
109
|
+
const NO_MAIL = "This instance cannot send mail, so it cannot mail a reset link. Whoever runs it can set a new password on the server: snagset passwd you@example.com";
|
|
110
|
+
const TOO_MANY = "Too many attempts from this address. Try again in an hour.";
|
|
111
|
+
export function passwordResetRoutes(deps) {
|
|
112
|
+
const { sql } = deps;
|
|
113
|
+
const now = deps.now ?? (() => Date.now());
|
|
114
|
+
const app = new Hono();
|
|
115
|
+
const attempts = new Map();
|
|
116
|
+
/** invites.ts's limiter, the same shape: the lookup and the confirm, in this process's memory. */
|
|
117
|
+
const overAttempts = (c) => {
|
|
118
|
+
const who = callerOf(c);
|
|
119
|
+
const t = now();
|
|
120
|
+
const recent = (attempts.get(who) ?? []).filter((at) => t - at < WINDOW_MS);
|
|
121
|
+
recent.push(t);
|
|
122
|
+
attempts.set(who, recent);
|
|
123
|
+
if (attempts.size > 10_000)
|
|
124
|
+
attempts.clear();
|
|
125
|
+
return recent.length > ATTEMPTS_PER_WINDOW;
|
|
126
|
+
};
|
|
127
|
+
/** `/auth/login`'s origin rule: a cross-site page must not be able to start any of this in a visitor's name. */
|
|
128
|
+
const foreign = (c) => {
|
|
129
|
+
const origin = c.req.header("Origin");
|
|
130
|
+
const host = c.req.header("Host");
|
|
131
|
+
const ours = new Set([deps.origin, host ? `http://${host}` : "", host ? `https://${host}` : ""]);
|
|
132
|
+
return !!origin && !ours.has(origin);
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Hand the address-dependent half of a request to the platform. It never
|
|
136
|
+
* becomes an unhandled rejection: the caller has been told 202, and what
|
|
137
|
+
* went wrong is the operator's to read.
|
|
138
|
+
*/
|
|
139
|
+
const afterwards = async (work) => {
|
|
140
|
+
const quiet = work().then(() => undefined, (e) => console.error("password reset: the mail did not go —", e instanceof Error ? e.message : e));
|
|
141
|
+
const wait = deps.later ? deps.later(quiet) : undefined;
|
|
142
|
+
if (wait)
|
|
143
|
+
await wait;
|
|
144
|
+
};
|
|
145
|
+
// Bodies here are a token or a password. Never logged, as the invite routes' are not.
|
|
146
|
+
app.use("/auth/reset/*", async (c, next) => {
|
|
147
|
+
c.set("noBodyLogging", true);
|
|
148
|
+
await next();
|
|
149
|
+
});
|
|
150
|
+
app.post("/auth/reset/request", async (c) => {
|
|
151
|
+
if (foreign(c))
|
|
152
|
+
return fail(c, 403, "forbidden", "That request came from another site.");
|
|
153
|
+
const mailer = await deps.mailer();
|
|
154
|
+
if (!isConfigured(mailer))
|
|
155
|
+
return fail(c, 409, "integration_not_configured", NO_MAIL);
|
|
156
|
+
const body = (await c.req.json().catch(() => null));
|
|
157
|
+
const email = typeof body?.email === "string" ? body.email.trim().toLowerCase() : "";
|
|
158
|
+
if (!looksLikeEmail(email)) {
|
|
159
|
+
return fail(c, 400, "validation_failed", "That does not look like an email address.", { field: "email" });
|
|
160
|
+
}
|
|
161
|
+
// No studio means no account to reset, and nowhere to count; the answer is the same.
|
|
162
|
+
const anchor = await firstOrgId(sql);
|
|
163
|
+
if (!anchor)
|
|
164
|
+
return c.json({ ok: true }, 202);
|
|
165
|
+
if (await over(sql, anchor, bucket("from", callerOf(c)), CALLER_PER_WINDOW, now()))
|
|
166
|
+
return fail(c, 429, "quota_exceeded", TOO_MANY);
|
|
167
|
+
// From here on nothing is awaited that knows whose address this is: the
|
|
168
|
+
// answer below is already decided, and it is the same for all of them.
|
|
169
|
+
await afterwards(async () => {
|
|
170
|
+
const [user] = await maintenance(sql, (tx) => tx `
|
|
171
|
+
SELECT id, org_id FROM users WHERE email = ${email} AND deleted_at IS NULL
|
|
172
|
+
`);
|
|
173
|
+
if (!user)
|
|
174
|
+
return;
|
|
175
|
+
if (await over(sql, anchor, bucket("to", mailboxOf(email)), MAILBOX_PER_WINDOW, now()))
|
|
176
|
+
return;
|
|
177
|
+
const token = randomBytes(32).toString("base64url");
|
|
178
|
+
await maintenance(sql, (tx) => tx `
|
|
179
|
+
INSERT INTO password_resets (id, org_id, user_id, token_hash, email, expires_at)
|
|
180
|
+
VALUES (${randomUUID()}, ${user.org_id}::uuid, ${user.id}::uuid, ${sha256(token)}, ${email}, ${new Date(now() + RESET_TTL_MIN * 60_000)})
|
|
181
|
+
`);
|
|
182
|
+
const base = await deps.address();
|
|
183
|
+
await mailer.send({
|
|
184
|
+
to: email,
|
|
185
|
+
subject: "Reset your Snagset password",
|
|
186
|
+
text: `Somebody asked to reset the password for ${email} on ${hostOf(base)}.\n\n` +
|
|
187
|
+
`Open this link to choose a new one:\n${resetUrl(base, token)}\n\n` +
|
|
188
|
+
`It works once and expires in an hour. ` +
|
|
189
|
+
`If that was not you, ignore this email: nothing changes unless the link is used.\n`,
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
// One answer for an account, for no account, and for a mailbox over its cap.
|
|
193
|
+
return c.json({ ok: true }, 202);
|
|
194
|
+
});
|
|
195
|
+
app.post("/auth/reset/lookup", async (c) => {
|
|
196
|
+
if (overAttempts(c))
|
|
197
|
+
return fail(c, 429, "quota_exceeded", TOO_MANY);
|
|
198
|
+
const body = (await c.req.json().catch(() => null));
|
|
199
|
+
const token = typeof body?.token === "string" ? body.token.trim() : "";
|
|
200
|
+
try {
|
|
201
|
+
const link = await liveLink(sql, token, new Date(now()));
|
|
202
|
+
return c.json({ email: link.email, expiresAt: link.expires_at.toISOString() });
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
if (e instanceof Refused)
|
|
206
|
+
return fail(c, e.status, e.code, e.message);
|
|
207
|
+
throw e;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
app.post("/auth/reset/confirm", async (c) => {
|
|
211
|
+
if (foreign(c))
|
|
212
|
+
return fail(c, 403, "forbidden", "That request came from another site.");
|
|
213
|
+
if (overAttempts(c))
|
|
214
|
+
return fail(c, 429, "quota_exceeded", TOO_MANY);
|
|
215
|
+
const body = (await c.req.json().catch(() => null));
|
|
216
|
+
const token = typeof body?.token === "string" ? body.token.trim() : "";
|
|
217
|
+
const password = typeof body?.password === "string" ? body.password : "";
|
|
218
|
+
let link;
|
|
219
|
+
try {
|
|
220
|
+
link = await liveLink(sql, token, new Date(now()));
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
if (e instanceof Refused)
|
|
224
|
+
return fail(c, e.status, e.code, e.message);
|
|
225
|
+
throw e;
|
|
226
|
+
}
|
|
227
|
+
// Twelve, no composition rules — said as setup, sign-up and the account page say it.
|
|
228
|
+
if (password.length < 12) {
|
|
229
|
+
return fail(c, 400, "validation_failed", "The password must be at least 12 characters. A short phrase of real words is fine.", { field: "password" });
|
|
230
|
+
}
|
|
231
|
+
// scrypt before the transaction, as the invite accept does: a tenth of a
|
|
232
|
+
// second of work is not done holding a row lock a racing confirm waits on.
|
|
233
|
+
const passwordHash = hashPassword(password);
|
|
234
|
+
let out;
|
|
235
|
+
try {
|
|
236
|
+
out = await sql.begin(async (tx) => {
|
|
237
|
+
await tx `SET LOCAL app.maintenance = 'on'`;
|
|
238
|
+
// The PERSON's row first, held to the end, and every confirm for
|
|
239
|
+
// them in that order. Two links for one account confirmed together
|
|
240
|
+
// used to take their locks crosswise — each its own link, then the
|
|
241
|
+
// other's — and Postgres ended one as a deadlock, a 500. Queued on
|
|
242
|
+
// this row, the second finds its link already spent and says so.
|
|
243
|
+
// `/auth/login` waits on the same row (owner.ts), which is what
|
|
244
|
+
// stops a sign-in already in flight from outliving the reset.
|
|
245
|
+
const [held] = await tx `SELECT id FROM users WHERE id = ${link.user_id} AND deleted_at IS NULL FOR UPDATE`;
|
|
246
|
+
// Removed from the instance after the link was sent: there is nothing to reset.
|
|
247
|
+
if (!held)
|
|
248
|
+
throw new Refused("link_not_found");
|
|
249
|
+
// THE consume. One statement on the whole live predicate: a link is
|
|
250
|
+
// never used twice, and anything that fails below rolls it back, so
|
|
251
|
+
// it is never spent on nothing.
|
|
252
|
+
const [won] = await tx `
|
|
253
|
+
UPDATE password_resets SET used_at = now()
|
|
254
|
+
WHERE id = ${link.id} AND used_at IS NULL AND expires_at > now()
|
|
255
|
+
RETURNING id
|
|
256
|
+
`;
|
|
257
|
+
if (!won) {
|
|
258
|
+
const [again] = await tx `SELECT used_at, expires_at FROM password_resets WHERE id = ${link.id}`;
|
|
259
|
+
throw new Refused(again ? gone(again, new Date()) ?? "link_used" : "link_used");
|
|
260
|
+
}
|
|
261
|
+
// The mailbox is proven by the link having arrived, whatever the column said before.
|
|
262
|
+
const [user] = await tx `
|
|
263
|
+
UPDATE users SET password_hash = ${passwordHash}, email_verified = true, updated_at = now()
|
|
264
|
+
WHERE id = ${link.user_id} AND deleted_at IS NULL
|
|
265
|
+
RETURNING id, org_id, email, name
|
|
266
|
+
`;
|
|
267
|
+
if (!user)
|
|
268
|
+
throw new Refused("link_not_found");
|
|
269
|
+
// What `snagset passwd` does: whoever knew the old password is signed out everywhere.
|
|
270
|
+
await tx `UPDATE user_sessions SET revoked_at = now() WHERE user_id = ${user.id} AND revoked_at IS NULL`;
|
|
271
|
+
// Everywhere includes the widget. A member's widget session was minted
|
|
272
|
+
// from a dashboard session and refreshes on its own for twelve hours;
|
|
273
|
+
// this is the per-identity sign-out a removal uses (members.ts), so
|
|
274
|
+
// one minted before this instant is refused at its next request.
|
|
275
|
+
await tx `UPDATE reviewers SET identity_valid_after = now() WHERE user_id = ${user.id}`;
|
|
276
|
+
// And every other reset link still out for this person dies with the password it would have replaced.
|
|
277
|
+
await tx `UPDATE password_resets SET used_at = now() WHERE user_id = ${user.id} AND used_at IS NULL`;
|
|
278
|
+
// Signed in exactly as `/auth/login` signs in, to the home studio.
|
|
279
|
+
const session = await openSession(tx, { orgId: user.org_id, userId: user.id, userAgent: c.req.header("User-Agent") ?? "" });
|
|
280
|
+
return { email: user.email, name: user.name, session };
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
catch (e) {
|
|
284
|
+
if (e instanceof Refused)
|
|
285
|
+
return fail(c, e.status, e.code, e.message);
|
|
286
|
+
throw e;
|
|
287
|
+
}
|
|
288
|
+
setSessionCookies(c, out.session.token, out.session.csrf, deps.secure, SESSION_S);
|
|
289
|
+
return c.json({ user: { email: out.email, name: out.name }, csrfToken: out.session.csrf });
|
|
290
|
+
});
|
|
291
|
+
return app;
|
|
292
|
+
}
|
|
293
|
+
/** The instance's name in a mail: its host, which is what the person typed to get here. */
|
|
294
|
+
function hostOf(base) {
|
|
295
|
+
try {
|
|
296
|
+
return new URL(base).host;
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
return base;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=passwordReset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passwordReset.js","sourceRoot":"","sources":["../../src/routes/passwordReset.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@snagset/server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.40",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "The Snagset server: API, dashboard and widget in one package. Node and Postgres, or Vercel.",
|
|
@@ -24,14 +24,14 @@
|
|
|
24
24
|
"postpack": "node ../../tools/publish-manifest.mjs restore"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@hono/node-server": "2.1.
|
|
27
|
+
"@hono/node-server": "2.1.6",
|
|
28
28
|
"@modelcontextprotocol/sdk": "1.32.1",
|
|
29
29
|
"aws4fetch": "1.0.20",
|
|
30
30
|
"drizzle-orm": "0.45.2",
|
|
31
|
-
"hono": "4.13.
|
|
31
|
+
"hono": "4.13.16",
|
|
32
32
|
"jose": "6.2.8",
|
|
33
33
|
"postgres": "3.4.9",
|
|
34
|
-
"zod": "4.
|
|
34
|
+
"zod": "4.6.7"
|
|
35
35
|
},
|
|
36
36
|
"main": "./dist/app.js",
|
|
37
37
|
"exports": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as f,e as
|
|
1
|
+
import{r as f,e as O,f as M,ae as w,j as T,aR as k,ah as _,E as j,aQ as S,k as H}from"./index-Ddw_j6S-.js";const Y=f.createContext(void 0);function q(){return f.useContext(Y)?.direction??"ltr"}const y=f.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function B(){return f.useContext(y)}function F(s={}){const{guess:o,label:e,metadata:r,textRef:l,index:t}=s,{register:i,unregister:u,subscribeMapChange:d,nextIndexRef:h}=B(),c=f.useRef(-1),[g,C]=f.useState(t==null&&o?()=>{if(c.current===-1){const x=h.current;h.current+=1,c.current=x}return c.current}:-1),v=t??g,R=f.useRef(null),E=f.useCallback(x=>{const b=R.current;b&&u(b),R.current=x,x&&i(x,{metadata:r??null,index:t??null,label:e,textRef:l})},[t,i,u,r,e,l]);return O(()=>{if(t==null)return d(x=>{const b=R.current?x.get(R.current)?.index:null;b!=null&&C(b)})},[t,d]),{ref:E,index:v}}function K(s){const{children:o,elementsRef:e,labelsRef:r,onMapChange:l}=s,t=M(l),[,i]=f.useState(!1),u=w(W).current,d=w(U).current,h=f.useRef(0),c=f.useRef(!0),g=f.useRef([]),C=f.useRef(null),v=M(()=>{c.current||(c.current=!0,i(n=>!n))}),R=M((n,p)=>{d.set(n,p),v()}),E=M(n=>{d.delete(n),v()}),x=M(n=>{const p=new Map;return e.current.length=0,r&&(r.current.length=0),n.forEach(a=>{p.set(a.element,{...a.registration.metadata??{},index:a.index}),e.current[a.index]=a.element,r&&(r.current[a.index]=a.registration.label!==void 0?a.registration.label:a.registration.textRef?.current?.textContent??a.element.textContent)}),h.current=e.current.length,p});function b(n){if(C.current?.disconnect(),C.current=null,typeof MutationObserver!="function"||n.length<2)return;const p=new MutationObserver(m=>{if(!J(m))return;let I=null;for(const L of n)if(L.isConnected){if(I&&D(I,L)>0){p.disconnect(),v();return}I=L}});C.current=p;const a=new Set;for(let m=1;m<n.length;m+=1){const I=G(n[m-1],n[m]);I&&a.add(I)}a.forEach(m=>p.observe(m,{childList:!0}))}const N=M(()=>{const[n,p]=z(d),a=x(n);b(p),g.current=n,c.current=!1,u.forEach(m=>m(a)),t(a)});O(()=>(c.current||x(g.current),()=>{e.current=[],r&&(r.current=[])}),[e,r,x]),O(()=>{c.current&&N()}),O(()=>()=>{C.current?.disconnect(),c.current=!0},[]);const P=M(n=>(u.add(n),()=>{u.delete(n)})),A=f.useMemo(()=>({register:R,unregister:E,subscribeMapChange:P,nextIndexRef:h}),[R,E,P,h]);return T.jsx(y.Provider,{value:A,children:o})}function U(){return new Map}function W(){return new Set}function z(s){const o=new Set,e=[],r=[];s.forEach((t,i)=>{if(!i.isConnected)return;const u=t.index,d={index:u??-1,element:i,registration:t};u===null?r.push(d):u>=0&&(o.add(u),e.push(d))});let l=0;return r.sort((t,i)=>D(t.element,i.element)),r.forEach(t=>{for(;o.has(l);)l+=1;t.index=l,e.push(t),l+=1}),o.size>0&&e.sort((t,i)=>t.index-i.index),[e,r.map(t=>t.element)]}function G(s,o){let e=s.parentElement;for(;e&&!e.contains(o);)e=e.parentElement;return e}function J(s){for(const o of s)for(let e=0;e<o.removedNodes.length;e+=1)if(o.removedNodes[e].isConnected)return!0;return!1}function D(s,o){return s.compareDocumentPosition(o)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1}function Q(s={}){const{highlightItemOnHover:o,highlightedIndex:e,onHighlightedIndexChange:r}=k(),{ref:l,index:t}=F(s),i=e===t,u=f.useRef(null),d=_(l,u);return{compositeProps:{tabIndex:i?0:-1,onFocus(){r(t)},onMouseMove(){const c=u.current;if(!o||!c)return;const g=c.hasAttribute("disabled")||c.ariaDisabled==="true";!i&&!g&&c.focus()}},compositeRef:d,index:t}}function X(s){const{render:o,className:e,style:r,state:l=j,props:t=S,refs:i=S,metadata:u,stateAttributesMapping:d,tag:h="div",...c}=s,{compositeProps:g,compositeRef:C}=Q({metadata:u});return H(h,s,{state:l,ref:[C,...i],props:[g,...t,c],stateAttributesMapping:d})}export{K as C,F as a,X as b,q as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as i,j as e,B as x}from"./index-
|
|
1
|
+
import{r as i,j as e,B as x}from"./index-Ddw_j6S-.js";import{E as u,G as g,I as C,H as D,J as v,K as b}from"./dialog-C7r1DbuZ.js";import{L as E,I}from"./label-CeY5IHdJ.js";function T({open:t,onOpenChange:o,title:m,description:r,children:h,confirmLabel:j,confirmWord:l,busy:s=!1,onConfirm:p}){const[n,c]=i.useState(""),d=i.useId();i.useEffect(()=>{t&&c("")},[t]);const f=!l||n.trim()===l;return e.jsx(u,{open:t,onOpenChange:a=>{!a&&s||o(a)},children:e.jsx(g,{showCloseButton:!1,children:e.jsxs("form",{className:"flex flex-col gap-4",onSubmit:a=>{a.preventDefault(),f&&!s&&p()},children:[e.jsxs(C,{children:[e.jsx(D,{children:m}),r&&e.jsx(v,{children:r})]}),h,l&&e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsxs(E,{htmlFor:d,children:["Type ",e.jsx("b",{className:"font-semibold text-foreground",children:l})," to confirm"]}),e.jsx(I,{id:d,value:n,autoComplete:"off",spellCheck:!1,disabled:s,onChange:a=>c(a.target.value)})]}),e.jsxs(b,{children:[e.jsx(x,{type:"button",variant:"outline",disabled:s,onClick:()=>o(!1),children:"Cancel"}),e.jsx(x,{type:"submit",variant:"destructive",loading:s,disabled:!f,children:s?"Working…":j})]})]})})})}export{T as C};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,j as t,B as c}from"./index-
|
|
1
|
+
import{r as n,j as t,B as c}from"./index-Ddw_j6S-.js";import{C}from"./check-BTd2LoGN.js";import{C as m}from"./copy-CEpGdeGb.js";function l({text:r,label:e="Copy",withText:s=!1,size:a="icon-sm",className:p}){const[o,i]=n.useState(!1);return t.jsxs(c,{type:"button",variant:"outline",size:s?"sm":a,className:p,"aria-label":o?"Copied":e,onClick:()=>{navigator.clipboard?.writeText(r).catch(()=>{}),i(!0),setTimeout(()=>i(!1),1500)},children:[o?t.jsx(C,{}):t.jsx(m,{}),s&&(o?"Copied":e)]})}export{l as C};
|
package/static/dashboard/assets/{FieldItemContext-Gb3Lo5Ci.js → FieldItemContext-BgajCxI_.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as t}from"./index-
|
|
1
|
+
import{r as t}from"./index-Ddw_j6S-.js";const e=t.createContext({disabled:!1});function r(){return t.useContext(e)}export{r as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as o,j as e,B as i,b1 as n}from"./index-Ddw_j6S-.js";import{C as c}from"./check-BTd2LoGN.js";import{C as l}from"./copy-CEpGdeGb.js";function p(t){return`<script src="${location.origin}/snag.js" ${n("site")}="${t}" defer><\/script>`}function g({uid:t}){const[r,s]=o.useState(!1),a=p(t);return e.jsxs("div",{className:"relative rounded-md border border-border bg-background px-3 py-2.5 pr-11 font-mono text-[12.5px] leading-relaxed",children:[e.jsx("code",{className:"whitespace-pre-wrap break-all",children:a}),e.jsx(i,{variant:"ghost",size:"icon-sm",className:"absolute right-1.5 top-1.5","aria-label":r?"Copied":"Copy the tag",onClick:()=>{navigator.clipboard?.writeText(a),s(!0),setTimeout(()=>s(!1),1500)},children:r?e.jsx(c,{}):e.jsx(l,{})})]})}export{g as I};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as L,r as x,a2 as R,j as e,_ as J,B as N,a3 as A,a1 as D,z as E,s as T,a7 as K,A as Q}from"./index-Ddw_j6S-.js";import{u as z}from"./useQuery-CaIu0ohN.js";import{B as M}from"./badge-D4-0NV1D.js";import{E as O,G as _,I as F,H as B,J as $,K as I}from"./dialog-C7r1DbuZ.js";import{L as S,I as G}from"./label-CeY5IHdJ.js";import{S as H}from"./switch-CGYNLqP6.js";import{C as W}from"./ConfirmDialog-D7eZU5Z6.js";import{C}from"./CopyButton-_X7ITEaj.js";import{a as U}from"./parts-DuhvDJGT.js";import{b as Y}from"./labels-BuZpvtvw.js";function ce({owner:n,instanceOwner:l,sites:g,mine:f=!1}){const c=L(),a=z(E.mcpTokens()),[u,d]=x.useState(!1),[j,o]=x.useState(null),[r,m]=x.useState(null),v=R({mutationFn:t=>T.revokeMcpToken(t),onSuccess:()=>{m(null),c.invalidateQueries({queryKey:["mcp-tokens"]})},onError:t=>A.error(D(t))}),y=a.data?.data??[],w=y.filter(t=>!t.revokedAt),i=a.data?.http??null,k=R({mutationFn:t=>T.setMcpHttp(t),onSuccess:(t,p)=>{c.setQueryData(E.instance().queryKey,t),c.invalidateQueries({queryKey:["mcp-tokens"]}),A.success(p?"Remote transport on — the token dialog shows its config":"Remote transport off — the endpoint answers 404 again")},onError:t=>A.error(D(t))}),b=t=>{const p=new Set(t),s=p.has("comments:write")||p.has("threads:write");return!s&&!p.has("context:read")?"Read-only":s?`Writes: ${[p.has("comments:write")?"reply":"",p.has("threads:write")?"mark ready":""].filter(Boolean).join(", ")}`:"Read-only, with capture context"};return e.jsxs(U,{title:f?"Your agent tokens":"MCP",description:"A coding agent — Claude Code, Cursor, any MCP client — reads the same brief this dashboard copies, maps a comment to the file in its checkout, and can reply or mark a fix ready. It never resolves: whoever reported a snag decides when it is fixed. A token per agent, shown once, revocable here.",children:[a.isPending&&e.jsx(J,{rows:2}),i&&e.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-md border border-border px-3 py-2.5",children:[e.jsxs("div",{children:[e.jsx(S,{htmlFor:"mcp-http-on",className:"text-[13px] font-medium",children:"Remote transport"}),e.jsxs("p",{className:"m-0 mt-0.5 text-[12px] leading-normal text-muted-foreground",children:[i.enabled?e.jsxs(e.Fragment,{children:["On. An agent anywhere talks to this studio at ",e.jsx("code",{className:"font-mono text-[11.5px]",children:i.url})," with a token as a bearer. No source mapping there; a write needs a token minted for it."]}):e.jsxs(e.Fragment,{children:["Off. Agents reach this studio only from a machine with the checkout. On, ",e.jsx("code",{className:"font-mono text-[11.5px]",children:i.url})," serves the same tools to an agent anywhere, with a token as a bearer."]}),i.source==="env"?" Set by the environment (SNAGSET_MCP_HTTP_ENABLED).":""]})]}),e.jsx(H,{id:"mcp-http-on","aria-label":"Remote transport",checked:i.enabled,disabled:!l||i.source==="env"||k.isPending,onCheckedChange:t=>k.mutate(t)})]}),a.isSuccess&&w.length===0&&e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(M,{variant:"outline",children:"No tokens"}),e.jsx("span",{className:"text-[13px] text-muted-foreground",children:f?"You have no agent tokens yet.":"No agent can read this studio yet."})]}),y.length>0&&e.jsx("ul",{className:"m-0 flex list-none flex-col gap-2 p-0","aria-label":"Agent tokens",children:y.map(t=>e.jsxs("li",{className:`flex flex-wrap items-center gap-x-3 gap-y-1 rounded-md border border-border px-3 py-2.5 text-[13px] ${t.revokedAt?"opacity-60":""}`,children:[e.jsx("span",{className:"font-medium",children:t.name}),e.jsxs("code",{className:"font-mono text-[12.5px] text-muted-foreground",children:[t.prefix,"…"]}),e.jsx(M,{variant:"outline",className:t.revokedAt?"":"border-ok text-ok",children:t.revokedAt?"Revoked":b(t.scopes)}),e.jsxs("span",{className:"text-[12px] text-muted-foreground",children:[t.site?t.site.name:"All sites"," · ",t.lastUsedAt?`last used ${Y(t.lastUsedAt)}`:"never used",t.expiresAt&&!t.revokedAt?` · expires ${new Date(t.expiresAt).toLocaleDateString()}`:"",t.createdBy?` · by ${t.createdBy}`:""]}),t.canRevoke&&e.jsx("span",{className:"ml-auto flex gap-1",children:e.jsx(N,{variant:"ghost",size:"sm",onClick:()=>m(t),children:"Revoke"})})]},t.id))}),n&&e.jsx("div",{children:e.jsx(N,{variant:"outline",size:"sm",onClick:()=>d(!0),children:"New token…"})}),e.jsx(V,{open:u,onOpenChange:d,sites:g,http:a.data?.http??null,onDone:t=>{c.invalidateQueries({queryKey:["mcp-tokens"]}),o(t)}}),e.jsx(X,{state:j,http:a.data?.http??null,onClose:()=>o(null)}),e.jsx(W,{open:r!==null,onOpenChange:t=>!t&&m(null),title:`Revoke “${r?.name??""}”?`,description:e.jsx(e.Fragment,{children:"The agent holding it loses access on its next request. Its past replies stay, under its name. This cannot be undone — mint a new token instead."}),confirmLabel:"Revoke",busy:v.isPending,onConfirm:async()=>{r&&await v.mutateAsync(r.id)}})]})}function V({open:n,onOpenChange:l,sites:g,http:f,onDone:c}){const[a,u]=x.useState(""),[d,j]=x.useState(""),[o,r]=x.useState(["threads:read","source:map"]),[m,v]=x.useState(""),[y,w]=x.useState(!1),[i,k]=x.useState(""),b=R({mutationFn:()=>T.mintMcpToken({name:a.trim(),...d?{site:d}:{},scopes:o,...m?{expiresInDays:Number(m)}:{},...y?{allowRemoteWrites:!0}:{}})}),t=(s,h)=>r(P=>h?[...new Set([...P,s])]:P.filter(q=>q!==s)),p=async s=>{s.preventDefault(),k("");try{const h=await b.mutateAsync();u(""),j(""),r(["threads:read","source:map"]),v(""),w(!1),l(!1),c(h)}catch(h){k(h instanceof Q?h.message:"Could not reach the server.")}};return e.jsx(O,{open:n,onOpenChange:l,children:e.jsx(_,{children:e.jsxs("form",{onSubmit:s=>void p(s),className:"flex flex-col gap-4",noValidate:!0,children:[e.jsxs(F,{children:[e.jsx(B,{children:"New agent token"}),e.jsx($,{children:"Read-only by default, plus mapping a comment to a file in the agent's own checkout. Tick more only for an agent you want writing here — and it still cannot resolve anything."})]}),i&&e.jsx("p",{role:"alert",className:"m-0 rounded-md border border-destructive/40 bg-warn-soft px-3 py-2 text-[13px] text-destructive",children:i}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(S,{htmlFor:"mcp-name",children:"Name"}),e.jsx(G,{id:"mcp-name",placeholder:"Claude Code",value:a,onChange:s=>u(s.target.value),autoComplete:"off",maxLength:80}),e.jsx("p",{className:"m-0 text-[12px] text-muted-foreground",children:"What a client sees on the agent's replies, so name the agent, not the person."})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(S,{htmlFor:"mcp-site",children:"Site"}),e.jsxs("select",{id:"mcp-site",value:d,onChange:s=>j(s.target.value),className:"h-8 rounded-md border border-input bg-background px-2.5 text-[13px]",children:[e.jsx("option",{value:"",children:"All sites"}),g.map(s=>e.jsx("option",{value:s.uid,children:s.name},s.uid))]})]}),e.jsxs("fieldset",{className:"m-0 flex flex-col gap-2 border-0 p-0",children:[e.jsx("legend",{className:"mb-1 text-[13px] font-medium",children:"Scopes"}),K.map(s=>e.jsxs("label",{className:"flex cursor-pointer items-start gap-2.5 text-[13px]",children:[e.jsx("input",{type:"checkbox",className:"mt-0.5",checked:o.includes(s.scope),onChange:h=>t(s.scope,h.target.checked)}),e.jsxs("span",{children:[e.jsx("span",{className:"block font-medium",children:s.label}),e.jsx("span",{className:"block text-[12px] text-muted-foreground",children:s.hint})]})]},s.scope))]}),f?.enabled&&(o.includes("comments:write")||o.includes("threads:write"))&&e.jsxs("label",{className:"flex cursor-pointer items-start gap-2.5 text-[13px]",children:[e.jsx("input",{type:"checkbox",className:"mt-0.5",checked:y,onChange:s=>w(s.target.checked)}),e.jsxs("span",{children:[e.jsx("span",{className:"block font-medium",children:"May write over the remote transport"}),e.jsx("span",{className:"block text-[12px] text-muted-foreground",children:"Off by default. Over POST /mcp the agent is not on a machine you can see; a write there is a decision."})]})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx(S,{htmlFor:"mcp-expires",children:"Expires"}),e.jsxs("select",{id:"mcp-expires",value:m,onChange:s=>v(s.target.value),className:"h-8 rounded-md border border-input bg-background px-2.5 text-[13px]",children:[e.jsx("option",{value:"",children:"Never"}),e.jsx("option",{value:"30",children:"In 30 days"}),e.jsx("option",{value:"90",children:"In 90 days"}),e.jsx("option",{value:"365",children:"In a year"})]})]}),e.jsxs(I,{children:[e.jsx(N,{type:"button",variant:"outline",onClick:()=>l(!1),children:"Cancel"}),e.jsx(N,{type:"submit",loading:b.isPending,disabled:!a.trim()||o.length===0,children:b.isPending?"Minting…":"Create token"})]})]})})})}function X({state:n,http:l,onClose:g}){const f=typeof location<"u"?location.origin:"",c={SNAGSET_MCP_TOKEN:n?.secret??"",SNAGSET_MCP_HOST:f,...n?.token.site?{SNAGSET_MCP_PROJECT:n.token.site.uid}:{}},a=JSON.stringify({mcpServers:{snagset:{command:"npx",args:["-y","@snagset/mcp"],env:c}}},null,2),u=["claude mcp add snagset",...Object.entries(c).map(([r,m])=>`-e ${r}=${m}`),"--","npx -y @snagset/mcp"].join(" "),d=`Bearer ${n?.secret??""}`,j=["claude mcp add","--transport http","snagset",l?.url??"",`--header "Authorization: ${d}"`].join(" "),o=JSON.stringify({mcpServers:{snagset:{type:"http",url:l?.url??"",headers:{Authorization:d}}}},null,2);return e.jsx(O,{open:n!==null,onOpenChange:r=>!r&&g(),children:e.jsxs(_,{className:"sm:max-w-xl",children:[e.jsxs(F,{children:[e.jsxs(B,{children:["Token for “",n?.token.name??"","”"]}),e.jsx($,{children:"Shown this once — only its hash is stored. Put it in the agent's config, then start the agent from the site's checkout so it can map comments to files."})]}),n&&e.jsxs("div",{className:"flex flex-col gap-4 text-[13px]",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"min-w-0 flex-1 truncate rounded-md bg-muted px-2 py-1.5 font-mono text-[12px]","data-testid":"mcp-token",children:n.secret}),e.jsx(C,{text:n.secret,label:"Copy the token"})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"font-medium",children:"Claude Code"}),e.jsx(C,{text:u,label:"Copy the Claude Code command"})]}),e.jsx("pre",{className:"m-0 whitespace-pre-wrap break-all rounded-md bg-muted px-3 py-2 font-mono text-[12px]",children:u})]}),l?.enabled&&e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"font-medium",children:"Remote — an agent that is not on a machine with the checkout"}),e.jsx(C,{text:o,label:"Copy the remote config"})]}),e.jsx("pre",{className:"m-0 whitespace-pre-wrap break-all rounded-md bg-muted px-3 py-2 font-mono text-[12px]",children:j}),e.jsx("pre",{className:"m-0 overflow-x-auto rounded-md bg-muted px-3 py-2 font-mono text-[12px]",children:o}),e.jsx("p",{className:"m-0 text-[12px] text-muted-foreground",children:"No source mapping there — nothing to search. Writes need the token minted with remote writes allowed."})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"font-medium",children:"Cursor, Claude Desktop, any MCP client"}),e.jsx(C,{text:a,label:"Copy the JSON config"})]}),e.jsx("pre",{className:"m-0 overflow-x-auto rounded-md bg-muted px-3 py-2 font-mono text-[12px]",children:a}),e.jsx("p",{className:"m-0 text-[12px] text-muted-foreground",children:"Cursor reads it from .cursor/mcp.json in the project; Claude Desktop from its claude_desktop_config.json."})]})]}),e.jsx(I,{children:e.jsx(N,{type:"button",onClick:g,children:"Done"})})]})})}export{ce as M};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r,j as e,
|
|
1
|
+
import{r,j as e,b0 as o}from"./index-Ddw_j6S-.js";function l({saving:s,savedAt:t}){const[i,a]=r.useState(!1);return r.useEffect(()=>{if(!t)return;a(!0);const n=setTimeout(()=>a(!1),1800);return()=>clearTimeout(n)},[t]),s?e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-[12.5px] text-muted-foreground","aria-live":"polite",children:[e.jsx(o,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Saving"]}):e.jsx("span",{className:"text-[12.5px] text-muted-foreground","aria-live":"polite",children:i?"Saved":""})}export{l as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as e,u as n,G as a,B as r}from"./index-
|
|
1
|
+
import{j as e,u as n,G as a,B as r}from"./index-Ddw_j6S-.js";function i({error:s}){const t=n(),o=s instanceof Error?s.message:"Something went wrong.";return e.jsx(a,{children:e.jsxs("div",{className:"flex flex-col items-start gap-3",children:[e.jsx("h1",{className:"m-0 text-lg font-semibold",children:"Could not load the dashboard"}),e.jsx("p",{className:"m-0 text-muted-foreground",children:o}),e.jsx(r,{variant:"outline",size:"sm",onClick:()=>void t.invalidate(),children:"Try again"})]})})}const m=({error:s})=>e.jsx(i,{error:s});export{m as errorComponent};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{u as gt,a as ft,b as ht,c as I,d as ve,r as o,e as L,f as de,g as xt,j as e,B as Z,h as w,i as ne,m as je,E as mt,k as ye,l as fe,n as bt,o as vt,p as ae,q as K,S as jt,s as ee,t as yt,L as H,v as St,M as wt,w as Nt,x as Ct,y as kt,z as Tt,O as Pt}from"./index-
|
|
1
|
+
import{u as gt,a as ft,b as ht,c as I,d as ve,r as o,e as L,f as de,g as xt,j as e,B as Z,h as w,i as ne,m as je,E as mt,k as ye,l as fe,n as bt,o as vt,p as ae,q as K,S as jt,s as ee,t as yt,L as H,v as St,M as wt,w as Nt,x as Ct,y as kt,z as Tt,O as Pt}from"./index-Ddw_j6S-.js";import{u as Le}from"./useQuery-CaIu0ohN.js";import{T as Rt,i as $e,a as Mt,D as Et,b as Ot,c as Dt,X as It,d as At,e as _t,f as Ht,g as zt,R as Lt,p as $t,h as Bt,j as Ft,k as Ut,P as qt,l as Gt,u as Vt,m as Kt,n as Yt,o as Wt,q as Xt,r as Qt,s as Jt,t as Zt,v as es,w as ts,x as ss,y as ns,z as as,A as rs,F as os,B as is,C as ls,E as Be,G as Fe,H as Ue,I as ds,J as cs,K as us}from"./dialog-C7r1DbuZ.js";import{c as B,n as qe,g as ps,a as he,t as gs,d as fs,i as hs,u as xs,b as ce,L as ms,I as bs}from"./label-CeY5IHdJ.js";import{g as xe,u as vs,a as js,b as ys,s as Ss,c as ws,d as Ns,e as Cs,f as ks,h as Ts,S as Ge,E as J,D as re,i as oe,j as ie,k as Se,l as te,m as D,n as V,o as Ps,p as ue}from"./dropdown-menu-Clnp0fwC.js";import{u as Ve}from"./useRender-Rh7x0Dwc.js";import{A as Rs,a as Ms}from"./avatar-B4uC-2Rd.js";import{u as we,S as Es,i as Os,a as Ds}from"./labels-BuZpvtvw.js";import{L as se}from"./layout-grid-DpWj1k0D.js";import{U as me}from"./users-BSiXsvcu.js";import{c as Is}from"./update-duXzIzFS.js";import{P as Ke}from"./plus-fom7ulPf.js";import{M as As,S as _s,a as Hs}from"./sun-C6_OdtRI.js";import"./useBaseQuery-bYBwKcW7.js";import"./check-BTd2LoGN.js";import"./CompositeItem-CP7pxc5U.js";import"./useValueChanged-DCX5-3sY.js";function zs(t){const s=gt({warn:t?.router===void 0}),n=t?.router||s;return ft(n.stores.__store,ht(t,n))}/**
|
|
2
2
|
* @license lucide-react v1.39.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|