@snagset/server 0.1.18 → 0.1.20
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/db/migrations/0010_round_archive.sql +23 -0
- package/dist/db/migrations/0011_guest_status.sql +24 -0
- package/dist/projectCache.js +1 -1
- package/dist/projectCache.js.map +1 -1
- package/dist/routes/owner.js +5 -2
- package/dist/routes/owner.js.map +1 -1
- package/dist/routes/rounds.js +130 -37
- package/dist/routes/rounds.js.map +1 -1
- package/dist/routes/sessions.js +26 -7
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/sites.js +24 -3
- package/dist/routes/sites.js.map +1 -1
- package/dist/routes/threads.js +224 -53
- package/dist/routes/threads.js.map +1 -1
- package/package.json +1 -1
- package/static/dashboard/assets/{CompositeItem-D1SCvKo_.js → CompositeItem-DFk-PY9L.js} +1 -1
- package/static/dashboard/assets/{ConfirmDialog-DdUOWt96.js → ConfirmDialog-COCFkJPd.js} +1 -1
- package/static/dashboard/assets/{CopyButton-DX7vax3M.js → CopyButton-BSZUdGOe.js} +1 -1
- package/static/dashboard/assets/{FieldItemContext-CMpCHNX8.js → FieldItemContext-B1tO9RIm.js} +1 -1
- package/static/dashboard/assets/{InstallTag-DkYPsEI0.js → InstallTag-C-bSYUSW.js} +1 -1
- package/static/dashboard/assets/{SaveState-D0Hl8cny.js → SaveState-9-TiAnKs.js} +1 -1
- package/static/dashboard/assets/{_app-CnG-wKIX.js → _app-B6Dr81cl.js} +1 -1
- package/static/dashboard/assets/{_app-CcUZ9WT2.js → _app-dK3H_NFl.js} +1 -1
- package/static/dashboard/assets/{activity-DnvsedIb.js → activity-B-4_ONuX.js} +1 -1
- package/static/dashboard/assets/{arrow-left-4jbTF1bA.js → arrow-left-et5uGMTY.js} +1 -1
- package/static/dashboard/assets/{avatar-BKSc7tnv.js → avatar-BYKf3ktl.js} +1 -1
- package/static/dashboard/assets/{badge-aWVtPffe.js → badge-DRNYZLcD.js} +1 -1
- package/static/dashboard/assets/{card-Bz0VdsxC.js → card-DktMrBl6.js} +1 -1
- package/static/dashboard/assets/{check-Ti2IOlgc.js → check-BeXhTRNQ.js} +1 -1
- package/static/dashboard/assets/{chevron-right-g-zbIopD.js → chevron-right-BoL12ADN.js} +1 -1
- package/static/dashboard/assets/{copy-BwBuD0FO.js → copy-0Bxto2zb.js} +1 -1
- package/static/dashboard/assets/{dialog-DdpHZobU.js → dialog-CNPOwLFE.js} +2 -2
- package/static/dashboard/assets/{dropdown-menu-CB2L3nig.js → dropdown-menu-QyfFmK0B.js} +1 -1
- package/static/dashboard/assets/{image-off-w_ej9pIJ.js → image-off-1l9j0o-Y.js} +1 -1
- package/static/dashboard/assets/index-BzWDSuyB.css +1 -0
- package/static/dashboard/assets/{index-DtF8YHqn.js → index-C9T0i6pH.js} +18 -18
- package/static/dashboard/assets/{invite-Dy3iQjzf.js → invite-B3ovcCvz.js} +1 -1
- package/static/dashboard/assets/{label-Dj8L94iS.js → label-CgEiXFTT.js} +1 -1
- package/static/dashboard/assets/{layout-grid-DuweH0Vl.js → layout-grid-CFk40Q2_.js} +1 -1
- package/static/dashboard/assets/me-DnFJ72fX.js +1 -0
- package/static/dashboard/assets/{parts-CA4cbfy3.js → parts-BGzYN_gW.js} +1 -1
- package/static/dashboard/assets/{plus-CEWgXDLj.js → plus-D5bA9-ud.js} +1 -1
- package/static/dashboard/assets/s._site-BU8qgyq7.js +1 -0
- package/static/dashboard/assets/s._site.comments-DPD4knbJ.js +54 -0
- package/static/dashboard/assets/s._site.reviewers-cXimPkop.js +1 -0
- package/static/dashboard/assets/s._site.settings-S8ZkUOGQ.js +1 -0
- package/static/dashboard/assets/{setup-DcjjtB3g.js → setup-ytPE-o-a.js} +1 -1
- package/static/dashboard/assets/{sign-in-gfvOs6Jw.js → sign-in-CApTsuZI.js} +1 -1
- package/static/dashboard/assets/{sign-up-CFJt7ibH.js → sign-up-DV3c0gT-.js} +1 -1
- package/static/dashboard/assets/{sites-DbB5cjz5.js → sites-DpoUZ8eC.js} +1 -1
- package/static/dashboard/assets/studio-CFiRRKhi.js +1 -0
- package/static/dashboard/assets/{studio-D9GxJaSF.js → studio-Cd2-mZl3.js} +1 -1
- package/static/dashboard/assets/{studio.index-DktAxIPT.js → studio.index-CdwWnkIX.js} +1 -1
- package/static/dashboard/assets/{studio.integrations-CbLyqPLX.js → studio.integrations-Bwi2ns8H.js} +1 -1
- package/static/dashboard/assets/{studio.members-DFtIL3JS.js → studio.members-DwvB-uiz.js} +1 -1
- package/static/dashboard/assets/{sun-Bg7U-6Y0.js → sun-DYPmuuya.js} +1 -1
- package/static/dashboard/assets/{switch-CTN6hIca.js → switch-C4MjDp48.js} +1 -1
- package/static/dashboard/assets/{table-zQ3pj50_.js → table-CoSJYMlW.js} +1 -1
- package/static/dashboard/assets/{useAriaLabelledBy-BsNncGbx.js → useAriaLabelledBy-CVMe8zQw.js} +1 -1
- package/static/dashboard/assets/{useBaseQuery-DSqwWD_O.js → useBaseQuery-BNAoRl4M.js} +1 -1
- package/static/dashboard/assets/useQuery-D4G3Az8s.js +1 -0
- package/static/dashboard/assets/useRender-BIly5s7F.js +1 -0
- package/static/dashboard/assets/{useValueChanged-B9k7l-mp.js → useValueChanged-BzSqaaKy.js} +1 -1
- package/static/dashboard/assets/{users-CRiOyD0f.js → users-CxehfZhl.js} +1 -1
- package/static/dashboard/assets/{welcome-DT2DB4jN.js → welcome-B0Xqk_GB.js} +1 -1
- package/static/dashboard/assets/{widget-signin-CC9owVvs.js → widget-signin-BaYrguyh.js} +1 -1
- package/static/dashboard/assets/{you-CtcXklc_.js → you-CYkvyH8i.js} +1 -1
- package/static/dashboard/assets/{zod-CLxHj89d.js → zod-CYYNMx2f.js} +1 -1
- package/static/dashboard/index.html +2 -2
- package/static/widget/snag.dock.js +5 -5
- package/static/widget/snag.panels.js +2 -2
- package/static/widget/snag.runtime.js +2 -2
- package/static/dashboard/assets/index-DAgnfv_E.css +0 -1
- package/static/dashboard/assets/me-7-r9OeMR.js +0 -1
- package/static/dashboard/assets/s._site-D69M50OI.js +0 -1
- package/static/dashboard/assets/s._site.comments-DNJ2SE5c.js +0 -54
- package/static/dashboard/assets/s._site.reviewers-B07NzSWj.js +0 -1
- package/static/dashboard/assets/s._site.settings-B577G5iG.js +0 -1
- package/static/dashboard/assets/studio-BO-MHFqc.js +0 -1
- package/static/dashboard/assets/useQuery-OgrKuHbc.js +0 -1
- package/static/dashboard/assets/useRender-DOFVvGfR.js +0 -1
package/dist/routes/sites.js
CHANGED
|
@@ -205,12 +205,14 @@ export function siteRoutes(deps) {
|
|
|
205
205
|
const rawOrigins = body?.["origins"];
|
|
206
206
|
const rawDomain = body?.["domain"];
|
|
207
207
|
const rawStatus = body?.["status"];
|
|
208
|
+
const rawGuests = body?.["guestsCanChangeStatus"];
|
|
208
209
|
if (mode === undefined &&
|
|
209
210
|
rawName === undefined &&
|
|
210
211
|
rawOrigins === undefined &&
|
|
211
212
|
rawDomain === undefined &&
|
|
212
|
-
rawStatus === undefined
|
|
213
|
-
|
|
213
|
+
rawStatus === undefined &&
|
|
214
|
+
rawGuests === undefined) {
|
|
215
|
+
return fail(c, 400, "validation_failed", "Send at least one of name, origins, domain, status, writeMode or guestsCanChangeStatus.");
|
|
214
216
|
}
|
|
215
217
|
if (mode !== undefined && mode !== "open" && mode !== "link-required" && mode !== "verified-only") {
|
|
216
218
|
return fail(c, 400, "validation_failed", "writeMode must be open, link-required or verified-only.");
|
|
@@ -250,6 +252,22 @@ export function siteRoutes(deps) {
|
|
|
250
252
|
}
|
|
251
253
|
status = rawStatus;
|
|
252
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* Whether guests may change a comment's status. Who may do what on
|
|
257
|
+
* the site is the same register as rounds' rename and archive, so the
|
|
258
|
+
* same roles: an owner or an admin. The other fields keep the route's
|
|
259
|
+
* existing gate (any member of the studio).
|
|
260
|
+
*/
|
|
261
|
+
let guests;
|
|
262
|
+
if (rawGuests !== undefined) {
|
|
263
|
+
if (typeof rawGuests !== "boolean") {
|
|
264
|
+
return fail(c, 400, "validation_failed", "guestsCanChangeStatus must be true or false.");
|
|
265
|
+
}
|
|
266
|
+
if (owner.role !== "owner" && owner.role !== "admin") {
|
|
267
|
+
return fail(c, 403, "forbidden", "Only an owner or an admin can change what guests may do.");
|
|
268
|
+
}
|
|
269
|
+
guests = rawGuests;
|
|
270
|
+
}
|
|
253
271
|
/**
|
|
254
272
|
* Origins are REPLACED, not merged, because this is an edit form and the
|
|
255
273
|
* only way to correct a wrong one is to be able to remove it. `POST
|
|
@@ -287,6 +305,7 @@ export function siteRoutes(deps) {
|
|
|
287
305
|
? tx `settings - 'domain'`
|
|
288
306
|
: tx `settings || jsonb_build_object('domain', ${domain}::text)`},
|
|
289
307
|
write_mode = ${mode === undefined ? tx `write_mode` : tx `${mode}::snag_write_mode`},
|
|
308
|
+
guest_can_resolve = ${guests === undefined ? tx `guest_can_resolve` : tx `${guests}`},
|
|
290
309
|
write_mode_downgrade_at = ${mode === undefined
|
|
291
310
|
? tx `write_mode_downgrade_at`
|
|
292
311
|
: mode === "open"
|
|
@@ -315,7 +334,8 @@ export function siteRoutes(deps) {
|
|
|
315
334
|
// one after.
|
|
316
335
|
deps.projects?.invalidate(c.req.param("uid"));
|
|
317
336
|
const [row] = await inOrg(sql, project.org_id, (tx) => tx `
|
|
318
|
-
SELECT name, write_mode, write_mode_downgrade_at, status, settings->>'domain' AS domain
|
|
337
|
+
SELECT name, write_mode, write_mode_downgrade_at, status, settings->>'domain' AS domain, guest_can_resolve
|
|
338
|
+
FROM projects WHERE id = ${project.id}::uuid
|
|
319
339
|
`);
|
|
320
340
|
const all = await inOrg(sql, project.org_id, (tx) => tx `
|
|
321
341
|
SELECT pattern FROM project_origins WHERE project_id = ${project.id}::uuid ORDER BY pattern
|
|
@@ -327,6 +347,7 @@ export function siteRoutes(deps) {
|
|
|
327
347
|
writeMode: row ? effectiveWriteMode(row, new Date()) : undefined,
|
|
328
348
|
status: row?.status,
|
|
329
349
|
domain: row?.domain ?? null,
|
|
350
|
+
guestsCanChangeStatus: row?.guest_can_resolve,
|
|
330
351
|
origins: all.map((r) => r.pattern),
|
|
331
352
|
});
|
|
332
353
|
});
|
package/dist/routes/sites.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/routes/sites.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/routes/sites.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/threads.js
CHANGED
|
@@ -197,10 +197,12 @@ assignDelayMs) {
|
|
|
197
197
|
// T10/: the round HISTORY rides the config the widget already fetches
|
|
198
198
|
// at mount, so the dock's selector costs no extra request. Behind the
|
|
199
199
|
// origin split with `keyPrefix`: the least sensitive PRIVATE things
|
|
200
|
-
// on the project, which is not the same as public.
|
|
200
|
+
// on the project, which is not the same as public. An ARCHIVED round is
|
|
201
|
+
// left out: the studio put it away, and the selector is where it
|
|
202
|
+
// would otherwise come back for every reviewer.
|
|
201
203
|
const rounds = await inOrg(sql, p.org_id, (tx) => tx `
|
|
202
204
|
SELECT number, name, closed_at IS NOT NULL AS closed
|
|
203
|
-
FROM rounds WHERE project_id = ${p.id} AND deleted_at IS NULL
|
|
205
|
+
FROM rounds WHERE project_id = ${p.id} AND deleted_at IS NULL AND archived_at IS NULL
|
|
204
206
|
ORDER BY number DESC
|
|
205
207
|
`);
|
|
206
208
|
return c.json({
|
|
@@ -356,6 +358,29 @@ assignDelayMs) {
|
|
|
356
358
|
* explanation.
|
|
357
359
|
*/
|
|
358
360
|
const rows = await inOrg(sql, p.org_id, async (tx) => {
|
|
361
|
+
// Absent round query param: an OWNER still sees every round
|
|
362
|
+
// (unchanged), but a non-owner reader defaults to the latest OPEN
|
|
363
|
+
// round, so a fresh page load is -clean rather than showing a round
|
|
364
|
+
// that closed weeks ago. Not an archived or deleted one either:
|
|
365
|
+
// the same round a new thread would land in. The correlated subquery is
|
|
366
|
+
// cheap — one project's round table is a handful of rows.
|
|
367
|
+
//
|
|
368
|
+
// ON A POLL the predicate moves into `visible`, like privacy does: a
|
|
369
|
+
// thread the studio MOVED to another round has to come back as a
|
|
370
|
+
// tombstone for the list it left, and a WHERE clause would only make it
|
|
371
|
+
// vanish from the delta, so the old round's list kept showing it.
|
|
372
|
+
const inRound = key
|
|
373
|
+
? null
|
|
374
|
+
: requestedRound
|
|
375
|
+
? tx `rd.number = ${requestedRound}`
|
|
376
|
+
: asStudio
|
|
377
|
+
? null
|
|
378
|
+
: tx `rd.number = (
|
|
379
|
+
SELECT number FROM rounds
|
|
380
|
+
WHERE project_id = ${p.id} AND closed_at IS NULL
|
|
381
|
+
AND deleted_at IS NULL AND archived_at IS NULL
|
|
382
|
+
ORDER BY number DESC LIMIT 1
|
|
383
|
+
)`;
|
|
359
384
|
return tx `
|
|
360
385
|
SELECT t.id, t.key, t.status, t.version, t.anchor, t.anchor_state, t.context, t.round_number,
|
|
361
386
|
t.created_at, t.updated_at, t.resolved_at, t.comment_count_public,
|
|
@@ -383,7 +408,8 @@ assignDelayMs) {
|
|
|
383
408
|
-- VISIBLE, computed rather than filtered. See the note above
|
|
384
409
|
-- the query: a thread that becomes private must be TOMBSTONED,
|
|
385
410
|
-- and a WHERE clause can only make it vanish.
|
|
386
|
-
(t.deleted_at IS NULL AND ${asOwner ? tx `true` : tx `t.private = false`}
|
|
411
|
+
(t.deleted_at IS NULL AND ${asOwner ? tx `true` : tx `t.private = false`}
|
|
412
|
+
AND ${since && inRound ? inRound : tx `true`}) AS visible
|
|
387
413
|
FROM threads t
|
|
388
414
|
JOIN reviewers r ON r.id = t.created_by
|
|
389
415
|
-- The assignee, when there is one (05 section 6.4b). LEFT: most
|
|
@@ -422,23 +448,9 @@ assignDelayMs) {
|
|
|
422
448
|
: assigneeFilter === "unassigned"
|
|
423
449
|
? tx `AND t.assignee_id IS NULL`
|
|
424
450
|
: tx `AND t.assignee_id = ${assigneeFilter}::uuid`}
|
|
425
|
-
--
|
|
426
|
-
--
|
|
427
|
-
|
|
428
|
-
-- round that closed weeks ago. The ORDER BY number DESC LIMIT 1
|
|
429
|
-
-- correlated subquery is cheap here -- one project's round table
|
|
430
|
-
-- is a handful of rows, never a scan of threads.
|
|
431
|
-
${key
|
|
432
|
-
? tx ``
|
|
433
|
-
: requestedRound
|
|
434
|
-
? tx `AND rd.number = ${requestedRound}`
|
|
435
|
-
: asStudio
|
|
436
|
-
? tx ``
|
|
437
|
-
: tx `AND rd.number = (
|
|
438
|
-
SELECT number FROM rounds
|
|
439
|
-
WHERE project_id = ${p.id} AND closed_at IS NULL
|
|
440
|
-
ORDER BY number DESC LIMIT 1
|
|
441
|
-
)`}
|
|
451
|
+
-- The round, from inRound above: here on a full list, in the
|
|
452
|
+
-- visible column on a poll.
|
|
453
|
+
${inRound && !since ? tx `AND ${inRound}` : tx ``}
|
|
442
454
|
${q && !key
|
|
443
455
|
? tx `AND (t.key ILIKE ${"%" + q + "%"}
|
|
444
456
|
OR t.anchor_label ILIKE ${"%" + q + "%"}
|
|
@@ -496,6 +508,88 @@ assignDelayMs) {
|
|
|
496
508
|
serverTime: (clock?.now ?? new Date()).toISOString(),
|
|
497
509
|
});
|
|
498
510
|
});
|
|
511
|
+
/**
|
|
512
|
+
* Move threads to another round, the studio's filing act, and the
|
|
513
|
+
* one exception to the "a thread never moves": automatic placement never
|
|
514
|
+
* moves a thread; only this explicit move does. Owner or admin, from the
|
|
515
|
+
* dashboard (cookie and CSRF pair, checked inline because the bearer
|
|
516
|
+
* middleware owns this path for the widget).
|
|
517
|
+
*
|
|
518
|
+
* `{ ids: ["thr_…"], round: <number> }`. The target may be open or closed
|
|
519
|
+
* — filing a stray comment into a finished round is a filing decision — but
|
|
520
|
+
* not archived or deleted. One transaction: the target round's row is
|
|
521
|
+
* locked, its `thread_seq` advanced by the number moving, and each thread
|
|
522
|
+
* takes the next per-round number in creation order. The old round keeps
|
|
523
|
+
* its gap (a number quoted in an email is never handed to another thread)
|
|
524
|
+
* and the project-wide key is untouched, so every permalink still works.
|
|
525
|
+
* `version` moves, so every open dashboard's poll drops the thread from
|
|
526
|
+
* the round it left (the list's visible column) and shows it in the new one.
|
|
527
|
+
* Threads already in the target, deleted, or not in this site are skipped.
|
|
528
|
+
* No `events` row: status and assignee changes write none either.
|
|
529
|
+
*/
|
|
530
|
+
app.post("/api/v1/projects/:uid/threads/move", async (c) => {
|
|
531
|
+
const p = await project(c.req.param("uid"));
|
|
532
|
+
if (!p)
|
|
533
|
+
return fail(c, 404, "project_not_found", "No project with that uid.");
|
|
534
|
+
const owner = c.get("owner");
|
|
535
|
+
if (!owner)
|
|
536
|
+
return fail(c, 401, "unauthorized", "Sign in to the dashboard first.");
|
|
537
|
+
if (owner.orgId !== p.org_id || (owner.role !== "owner" && owner.role !== "admin")) {
|
|
538
|
+
return fail(c, 403, "forbidden", "Only an owner or an admin can move comments between rounds.");
|
|
539
|
+
}
|
|
540
|
+
if (!csrfOk(c)) {
|
|
541
|
+
return fail(c, 403, "csrf_failed", "That request could not be verified. Reload the dashboard and try again.");
|
|
542
|
+
}
|
|
543
|
+
const body = (await c.req.json().catch(() => null));
|
|
544
|
+
const round = body?.round;
|
|
545
|
+
const ids = Array.isArray(body?.ids) ? body.ids.map((w) => rowId(w, ID_PREFIX.thread)) : [];
|
|
546
|
+
if (!ids.length || ids.length > 200 || ids.some((x) => !x)) {
|
|
547
|
+
return fail(c, 400, "validation_failed", "ids must be 1 to 200 thread ids (thr_…).");
|
|
548
|
+
}
|
|
549
|
+
if (!(typeof round === "number" && Number.isInteger(round) && round > 0)) {
|
|
550
|
+
return fail(c, 400, "validation_failed", "round must be a round number (1, 2, …).");
|
|
551
|
+
}
|
|
552
|
+
const out = await inOrg(sql, p.org_id, async (tx) => {
|
|
553
|
+
const [target] = await tx `
|
|
554
|
+
SELECT id, archived_at IS NOT NULL AS archived FROM rounds
|
|
555
|
+
WHERE project_id = ${p.id}::uuid AND number = ${round}::int AND deleted_at IS NULL
|
|
556
|
+
FOR UPDATE
|
|
557
|
+
`;
|
|
558
|
+
if (!target)
|
|
559
|
+
return "missing";
|
|
560
|
+
if (target.archived)
|
|
561
|
+
return "archived";
|
|
562
|
+
const moving = await tx `
|
|
563
|
+
SELECT id FROM threads
|
|
564
|
+
WHERE id = ANY(${ids}::uuid[]) AND project_id = ${p.id}::uuid
|
|
565
|
+
AND deleted_at IS NULL AND round_id <> ${target.id}::uuid
|
|
566
|
+
ORDER BY created_at, id
|
|
567
|
+
FOR UPDATE
|
|
568
|
+
`;
|
|
569
|
+
if (!moving.length)
|
|
570
|
+
return 0;
|
|
571
|
+
const [seq] = await tx `
|
|
572
|
+
UPDATE rounds SET thread_seq = thread_seq + ${moving.length}::int, updated_at = now()
|
|
573
|
+
WHERE id = ${target.id}::uuid
|
|
574
|
+
RETURNING thread_seq AS last
|
|
575
|
+
`;
|
|
576
|
+
const first = seq.last - moving.length;
|
|
577
|
+
await tx `
|
|
578
|
+
UPDATE threads t
|
|
579
|
+
SET round_id = ${target.id}::uuid, round_number = ${first}::int + o.n::int,
|
|
580
|
+
version = t.version + 1, updated_at = now()
|
|
581
|
+
FROM unnest(${moving.map((m) => m.id)}::uuid[]) WITH ORDINALITY AS o(id, n)
|
|
582
|
+
WHERE t.id = o.id
|
|
583
|
+
`;
|
|
584
|
+
return moving.length;
|
|
585
|
+
});
|
|
586
|
+
if (out === "missing")
|
|
587
|
+
return fail(c, 404, "round_not_found", `This site has no round ${round}.`);
|
|
588
|
+
if (out === "archived") {
|
|
589
|
+
return fail(c, 409, "round_archived", "That round is archived. Restore it in Settings to move comments into it.");
|
|
590
|
+
}
|
|
591
|
+
return c.json({ moved: out, round });
|
|
592
|
+
});
|
|
499
593
|
/**
|
|
500
594
|
* Create. The whole thing is one transaction because a thread
|
|
501
595
|
* without its first comment is not a snag, it is a pin nobody can read.
|
|
@@ -525,6 +619,16 @@ assignDelayMs) {
|
|
|
525
619
|
// the host put one on the script tag, and inventing one here would put a
|
|
526
620
|
// comment in an environment the dashboard is not looking at.
|
|
527
621
|
const envKey = typeof body.scope?.environment === "string" ? body.scope.environment : null;
|
|
622
|
+
// The round the reviewer is LOOKING AT, by number (the only round
|
|
623
|
+
// identity the widget holds). Rounds run side by side, so "the newest
|
|
624
|
+
// open one" stopped being the right answer the day a studio kept its own
|
|
625
|
+
// QA round going while the client's ran: a comment left while viewing
|
|
626
|
+
// Internal QA belongs to Internal QA.
|
|
627
|
+
const askedRound = body.scope?.round;
|
|
628
|
+
if (askedRound !== undefined && askedRound !== null && !(Number.isInteger(askedRound) && askedRound > 0)) {
|
|
629
|
+
return fail(c, 400, "validation_failed", "scope.round must be a round number (1, 2, …).");
|
|
630
|
+
}
|
|
631
|
+
const roundNo = typeof askedRound === "number" ? askedRound : null;
|
|
528
632
|
// A client-minted id that is not a UUID is a bug in the client, not
|
|
529
633
|
// something to paper over with a server-minted one: the widget's optimistic
|
|
530
634
|
// copy would then be a different snag from the stored one. Parsed out here,
|
|
@@ -572,19 +676,43 @@ assignDelayMs) {
|
|
|
572
676
|
* exactly once, to completion, and the insert that reads pseq/rseq
|
|
573
677
|
* cannot begin before they have produced their rows.
|
|
574
678
|
*/
|
|
679
|
+
/*
|
|
680
|
+
* WHICH ROUND, in this order:
|
|
681
|
+
* 1. the one asked for, when it is open and not archived -- and a
|
|
682
|
+
* 409 when it is not, rather than a silent move elsewhere: the
|
|
683
|
+
* reviewer chose it, and a comment that lands somewhere else
|
|
684
|
+
* without a word is the bug parallel rounds exist to remove;
|
|
685
|
+
* 2. else the review link's pinned round, when it is open;
|
|
686
|
+
* 3. Else the newest open, unarchived round -- the original rule.
|
|
687
|
+
* Still the same one statement: the environment and both candidates
|
|
688
|
+
* come back together, and the choice is made below.
|
|
689
|
+
*/
|
|
575
690
|
const [ctx] = await tx `
|
|
576
691
|
SELECT
|
|
577
692
|
(SELECT id FROM environments
|
|
578
693
|
WHERE project_id = ${p.id} AND deleted_at IS NULL
|
|
579
694
|
AND ${envKey ? tx `key = ${envKey}` : tx `is_default`}
|
|
580
695
|
LIMIT 1) AS environment_id,
|
|
581
|
-
|
|
696
|
+
a.id AS asked_id,
|
|
697
|
+
(a.closed_at IS NULL AND a.archived_at IS NULL) AS asked_open,
|
|
698
|
+
COALESCE(
|
|
699
|
+
${session.lnk
|
|
700
|
+
? tx `(SELECT rd.id FROM review_links rl JOIN rounds rd ON rd.id = rl.round_id
|
|
701
|
+
WHERE rl.id = ${session.lnk}::uuid AND rd.project_id = ${p.id}
|
|
702
|
+
AND rd.deleted_at IS NULL AND rd.archived_at IS NULL AND rd.closed_at IS NULL)`
|
|
703
|
+
: tx `NULL::uuid`},
|
|
704
|
+
r.id
|
|
705
|
+
) AS round_id
|
|
582
706
|
FROM (SELECT 1) one
|
|
583
707
|
LEFT JOIN LATERAL (
|
|
584
708
|
SELECT id FROM rounds
|
|
585
|
-
WHERE project_id = ${p.id} AND deleted_at IS NULL AND closed_at IS NULL
|
|
709
|
+
WHERE project_id = ${p.id} AND deleted_at IS NULL AND closed_at IS NULL AND archived_at IS NULL
|
|
586
710
|
ORDER BY number DESC LIMIT 1
|
|
587
711
|
) r ON true
|
|
712
|
+
LEFT JOIN LATERAL (
|
|
713
|
+
SELECT id, closed_at, archived_at FROM rounds
|
|
714
|
+
WHERE project_id = ${p.id} AND deleted_at IS NULL AND number = ${roundNo ?? 0}::int
|
|
715
|
+
) a ON true
|
|
588
716
|
`;
|
|
589
717
|
// Kept as its own statement rather than folded into the write below,
|
|
590
718
|
// because these two are the only failures a caller can act on and
|
|
@@ -595,9 +723,16 @@ assignDelayMs) {
|
|
|
595
723
|
? `This project has no environment called "${envKey}".`
|
|
596
724
|
: "This project has no default environment.");
|
|
597
725
|
}
|
|
598
|
-
//
|
|
599
|
-
//
|
|
600
|
-
if (!ctx.
|
|
726
|
+
// Still holds whichever round is chosen: a thread belongs to the
|
|
727
|
+
// round it was created in, and never moves.
|
|
728
|
+
if (roundNo !== null && !ctx.asked_id) {
|
|
729
|
+
throw new HttpError(409, "round_not_found", `This site has no round ${roundNo}. Reload to see its rounds.`);
|
|
730
|
+
}
|
|
731
|
+
if (roundNo !== null && !ctx.asked_open) {
|
|
732
|
+
throw new HttpError(409, "round_closed", `Round ${roundNo} is closed, so it takes no new comments. Pick an open round, or leave the round out.`);
|
|
733
|
+
}
|
|
734
|
+
const roundId = roundNo !== null ? ctx.asked_id : ctx.round_id;
|
|
735
|
+
if (!roundId)
|
|
601
736
|
throw new HttpError(409, "no_active_round", "This project has no open round.");
|
|
602
737
|
const counted = commentBody === null ? 0 : 1;
|
|
603
738
|
const [row] = await tx `
|
|
@@ -608,7 +743,7 @@ assignDelayMs) {
|
|
|
608
743
|
),
|
|
609
744
|
rseq AS (
|
|
610
745
|
UPDATE rounds SET thread_seq = thread_seq + 1
|
|
611
|
-
WHERE id = ${
|
|
746
|
+
WHERE id = ${roundId}::uuid
|
|
612
747
|
RETURNING thread_seq
|
|
613
748
|
),
|
|
614
749
|
ins AS (
|
|
@@ -617,7 +752,7 @@ assignDelayMs) {
|
|
|
617
752
|
comment_count, comment_count_public)
|
|
618
753
|
SELECT ${threadId}::uuid, ${p.org_id}::uuid, ${p.id}::uuid,
|
|
619
754
|
${p.key_prefix}::text || '-' || pseq.thread_seq::text,
|
|
620
|
-
${ctx.environment_id}::uuid, ${
|
|
755
|
+
${ctx.environment_id}::uuid, ${roundId}::uuid, rseq.thread_seq,
|
|
621
756
|
${tx.json(body.anchor)}::jsonb, ${tx.json(body.context)}::jsonb,
|
|
622
757
|
${reviewerId}::uuid, ${body.anchorState ?? "anchored"}::snag_anchor_state,
|
|
623
758
|
${counted}::int, ${counted}::int
|
|
@@ -896,17 +1031,33 @@ assignDelayMs) {
|
|
|
896
1031
|
if (!asOwner && !asAgent && !session) {
|
|
897
1032
|
return fail(c, 401, "unauthorized", "Open your review link, or reload the page, and try again.");
|
|
898
1033
|
}
|
|
899
|
-
|
|
900
|
-
|
|
1034
|
+
/**
|
|
1035
|
+
* For a GUEST the site's current setting is the answer, not the
|
|
1036
|
+
* token. The token's `perm` was right when it was minted, but a studio
|
|
1037
|
+
* that turns guest status changes off means now, not at the guest's next
|
|
1038
|
+
* refresh — and one that turns them on should not leave a guest refused
|
|
1039
|
+
* for up to fifteen minutes. `p` is the 10-second project cache, which the
|
|
1040
|
+
* settings route invalidates on save. Link and member sessions are
|
|
1041
|
+
* unchanged: their grant comes from the link or the membership.
|
|
1042
|
+
*/
|
|
1043
|
+
if (!asOwner && !asAgent) {
|
|
1044
|
+
const mayChangeStatus = session.kind === "guest" ? p.guest_can_resolve : session.perm.includes("thread:resolve");
|
|
1045
|
+
if (!mayChangeStatus) {
|
|
1046
|
+
return fail(c, 403, "forbidden", session.kind === "guest"
|
|
1047
|
+
? "Only the studio can change status on this site."
|
|
1048
|
+
: "This review link does not allow changing status.");
|
|
1049
|
+
}
|
|
901
1050
|
}
|
|
902
1051
|
const body = (await c.req.json().catch(() => null));
|
|
903
|
-
// A thread
|
|
904
|
-
//
|
|
905
|
-
//
|
|
906
|
-
//
|
|
1052
|
+
// A thread never moves BY ACCIDENT. Refused explicitly rather than
|
|
1053
|
+
// ignored, because a caller that sends `round` and gets a 200 will believe
|
|
1054
|
+
// it moved. Moving is a studio act with its own route (the
|
|
1055
|
+
// move below), which renumbers inside the target round; a PATCH field
|
|
1056
|
+
// would be a second, quieter way to do it. The `field_not_permitted`
|
|
1057
|
+
// is the registered code.
|
|
907
1058
|
for (const field of ["round", "roundId", "roundNumber"]) {
|
|
908
1059
|
if (body && field in body) {
|
|
909
|
-
return fail(c, 422, "field_not_permitted", "A comment
|
|
1060
|
+
return fail(c, 422, "field_not_permitted", "A comment's round is not changed here. The studio moves comments between rounds from the dashboard.", { field });
|
|
910
1061
|
}
|
|
911
1062
|
}
|
|
912
1063
|
/**
|
|
@@ -1438,12 +1589,7 @@ assignDelayMs) {
|
|
|
1438
1589
|
if (!threadRow)
|
|
1439
1590
|
return fail(c, 404, "thread_not_found", "No such thread in this project.");
|
|
1440
1591
|
const found = await inOrg(sql, p.org_id, async (tx) => {
|
|
1441
|
-
const
|
|
1442
|
-
UPDATE threads
|
|
1443
|
-
SET deleted_at = now(), version = version + 1, updated_at = now()
|
|
1444
|
-
WHERE id = ${threadRow}::uuid AND project_id = ${p.id}::uuid AND deleted_at IS NULL
|
|
1445
|
-
RETURNING id
|
|
1446
|
-
`;
|
|
1592
|
+
const gone = await softDeleteThreads(tx, p.id, { thread: threadRow }, "the thread was deleted");
|
|
1447
1593
|
if (!gone) {
|
|
1448
1594
|
// Already deleted, or never here. Only the second is an error.
|
|
1449
1595
|
const [was] = await tx `
|
|
@@ -1451,19 +1597,6 @@ assignDelayMs) {
|
|
|
1451
1597
|
`;
|
|
1452
1598
|
return !!was;
|
|
1453
1599
|
}
|
|
1454
|
-
// The thread's own pictures and any bound to its comments:
|
|
1455
|
-
// section A6 hangs an attachment off exactly one of the two.
|
|
1456
|
-
await tx `
|
|
1457
|
-
UPDATE attachments SET deleted_at = now()
|
|
1458
|
-
WHERE deleted_at IS NULL
|
|
1459
|
-
AND (thread_id = ${threadRow}::uuid
|
|
1460
|
-
OR comment_id IN (SELECT id FROM comments WHERE thread_id = ${threadRow}::uuid))
|
|
1461
|
-
`;
|
|
1462
|
-
await tx `
|
|
1463
|
-
UPDATE outbox
|
|
1464
|
-
SET status = 'dropped', last_error = 'the thread was deleted', completed_at = now()
|
|
1465
|
-
WHERE thread_id = ${threadRow}::uuid AND status = 'pending'
|
|
1466
|
-
`;
|
|
1467
1600
|
return true;
|
|
1468
1601
|
});
|
|
1469
1602
|
if (!found)
|
|
@@ -1472,6 +1605,44 @@ assignDelayMs) {
|
|
|
1472
1605
|
});
|
|
1473
1606
|
return app;
|
|
1474
1607
|
}
|
|
1608
|
+
/**
|
|
1609
|
+
* The thread DELETE's work, for one thread or for every live thread in a
|
|
1610
|
+
* round (the round delete) — one copy, so a round's threads go exactly the
|
|
1611
|
+
* way a single thread does and "what else goes with it" (the route's comment
|
|
1612
|
+
* above) is answered in one place. Inside the caller's transaction, which has
|
|
1613
|
+
* already set `app.org_id`. Returns how many threads it marked.
|
|
1614
|
+
*
|
|
1615
|
+
* `version` and `updated_at` move so a `?since=` poll tombstones each one;
|
|
1616
|
+
* attachments on the thread or its comments are marked; pending outbox rows
|
|
1617
|
+
* are dropped with `reason` in `last_error`. Comments are left alone, for the
|
|
1618
|
+
* reason given above.
|
|
1619
|
+
*/
|
|
1620
|
+
export async function softDeleteThreads(tx, projectId, which, reason) {
|
|
1621
|
+
const gone = await tx `
|
|
1622
|
+
UPDATE threads
|
|
1623
|
+
SET deleted_at = now(), version = version + 1, updated_at = now()
|
|
1624
|
+
WHERE project_id = ${projectId}::uuid AND deleted_at IS NULL
|
|
1625
|
+
AND ${"thread" in which ? tx `id = ${which.thread}::uuid` : tx `round_id = ${which.round}::uuid`}
|
|
1626
|
+
RETURNING id
|
|
1627
|
+
`;
|
|
1628
|
+
if (!gone.length)
|
|
1629
|
+
return 0;
|
|
1630
|
+
const ids = gone.map((g) => g.id);
|
|
1631
|
+
// The thread's own pictures and any bound to its comments:
|
|
1632
|
+
// section A6 hangs an attachment off exactly one of the two.
|
|
1633
|
+
await tx `
|
|
1634
|
+
UPDATE attachments SET deleted_at = now()
|
|
1635
|
+
WHERE deleted_at IS NULL
|
|
1636
|
+
AND (thread_id = ANY(${ids}::uuid[])
|
|
1637
|
+
OR comment_id IN (SELECT id FROM comments WHERE thread_id = ANY(${ids}::uuid[])))
|
|
1638
|
+
`;
|
|
1639
|
+
await tx `
|
|
1640
|
+
UPDATE outbox
|
|
1641
|
+
SET status = 'dropped', last_error = ${reason}, completed_at = now()
|
|
1642
|
+
WHERE thread_id = ANY(${ids}::uuid[]) AND status = 'pending'
|
|
1643
|
+
`;
|
|
1644
|
+
return ids.length;
|
|
1645
|
+
}
|
|
1475
1646
|
/**
|
|
1476
1647
|
* Fields declared and assigned, NOT constructor parameter properties.
|
|
1477
1648
|
*
|