@snagset/server 0.0.4 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +4 -3
  2. package/dist/app.js +82 -9
  3. package/dist/app.js.map +1 -1
  4. package/dist/bin.js +85 -11
  5. package/dist/bin.js.map +1 -1
  6. package/dist/boot.js +67 -51
  7. package/dist/boot.js.map +1 -1
  8. package/dist/config.generated.js +5 -2
  9. package/dist/config.generated.js.map +1 -1
  10. package/dist/db/connect.js +7 -0
  11. package/dist/db/connect.js.map +1 -1
  12. package/dist/db/migrations/0005_studio_reviewers.sql +45 -0
  13. package/dist/db/migrations/0006_instance_settings.sql +69 -0
  14. package/dist/db/migrations/0007_jira_provider.no-txn.sql +13 -0
  15. package/dist/domain.js +129 -0
  16. package/dist/domain.js.map +1 -0
  17. package/dist/instance/settings.js +54 -0
  18. package/dist/instance/settings.js.map +1 -0
  19. package/dist/integrations/github.js +112 -0
  20. package/dist/integrations/github.js.map +1 -0
  21. package/dist/integrations/inbound.js +88 -0
  22. package/dist/integrations/inbound.js.map +1 -0
  23. package/dist/integrations/jira.js +129 -0
  24. package/dist/integrations/jira.js.map +1 -0
  25. package/dist/integrations/linear.js +111 -0
  26. package/dist/integrations/linear.js.map +1 -0
  27. package/dist/integrations/outbox.js +305 -0
  28. package/dist/integrations/outbox.js.map +1 -0
  29. package/dist/integrations/slack.js +135 -0
  30. package/dist/integrations/slack.js.map +1 -0
  31. package/dist/integrations/store.js +101 -0
  32. package/dist/integrations/store.js.map +1 -0
  33. package/dist/listen.js +58 -0
  34. package/dist/listen.js.map +1 -0
  35. package/dist/mail/index.js +21 -11
  36. package/dist/mail/index.js.map +1 -1
  37. package/dist/mail/resolve.js +80 -0
  38. package/dist/mail/resolve.js.map +1 -0
  39. package/dist/platform.js +27 -0
  40. package/dist/platform.js.map +1 -0
  41. package/dist/projectCache.js +3 -2
  42. package/dist/projectCache.js.map +1 -1
  43. package/dist/projects.js +8 -2
  44. package/dist/projects.js.map +1 -1
  45. package/dist/routes/account.js +59 -0
  46. package/dist/routes/account.js.map +1 -0
  47. package/dist/routes/activity.js +111 -0
  48. package/dist/routes/activity.js.map +1 -0
  49. package/dist/routes/assignees.js +139 -0
  50. package/dist/routes/assignees.js.map +1 -0
  51. package/dist/routes/attachments.js +2 -2
  52. package/dist/routes/attachments.js.map +1 -1
  53. package/dist/routes/comments.js +27 -17
  54. package/dist/routes/comments.js.map +1 -1
  55. package/dist/routes/cors.js +10 -1
  56. package/dist/routes/cors.js.map +1 -1
  57. package/dist/routes/instance.js +164 -0
  58. package/dist/routes/instance.js.map +1 -0
  59. package/dist/routes/integrations.js +610 -0
  60. package/dist/routes/integrations.js.map +1 -0
  61. package/dist/routes/jobs.js +15 -3
  62. package/dist/routes/jobs.js.map +1 -1
  63. package/dist/routes/mcpTokens.js +119 -0
  64. package/dist/routes/mcpTokens.js.map +1 -0
  65. package/dist/routes/members.js +177 -0
  66. package/dist/routes/members.js.map +1 -0
  67. package/dist/routes/owner.js +64 -7
  68. package/dist/routes/owner.js.map +1 -1
  69. package/dist/routes/sites.js +181 -8
  70. package/dist/routes/sites.js.map +1 -1
  71. package/dist/routes/threads.js +276 -9
  72. package/dist/routes/threads.js.map +1 -1
  73. package/dist/serverless.js +41 -6
  74. package/dist/serverless.js.map +1 -1
  75. package/dist/studioReviewers.js +67 -0
  76. package/dist/studioReviewers.js.map +1 -0
  77. package/dist/vendor/adapters/outbound/sanitise.js +18 -3
  78. package/dist/vendor/types/brief.js +121 -0
  79. package/package.json +1 -1
  80. package/static/dashboard/assets/CompositeItem-DnLNS57f.js +1 -0
  81. package/static/dashboard/assets/ConfirmDialog-CCAJDc_P.js +1 -0
  82. package/static/dashboard/assets/CopyButton-exuJDdXj.js +1 -0
  83. package/static/dashboard/assets/FieldItemContext-jf0Is3j7.js +1 -0
  84. package/static/dashboard/assets/InstallTag-CkeGLk1a.js +1 -0
  85. package/static/dashboard/assets/SaveState-BsrfwjoH.js +6 -0
  86. package/static/dashboard/assets/_app-CiDKmy_a.js +1 -0
  87. package/static/dashboard/assets/_app-xxJ7UG34.js +56 -0
  88. package/static/dashboard/assets/activity-mwHb7ir7.js +1 -0
  89. package/static/dashboard/assets/arrow-left-D08BSlJU.js +6 -0
  90. package/static/dashboard/assets/avatar-BITl2vTh.js +1 -0
  91. package/static/dashboard/assets/badge-CGEswzew.js +1 -0
  92. package/static/dashboard/assets/card-8T0wnIiU.js +1 -0
  93. package/static/dashboard/assets/check-CiLHTeII.js +6 -0
  94. package/static/dashboard/assets/chevron-right-BokKbPOn.js +6 -0
  95. package/static/dashboard/assets/copy-CKgsZbj1.js +6 -0
  96. package/static/dashboard/assets/createBaseUIEventDetails-CEmaecLi.js +1 -0
  97. package/static/dashboard/assets/createLucideIcon-llnWWh0E.js +36 -0
  98. package/static/dashboard/assets/dialog-DrrnCoT5.js +6 -0
  99. package/static/dashboard/assets/dropdown-menu-DIE2xmL5.js +11 -0
  100. package/static/dashboard/assets/image-off-CgUC8krg.js +6 -0
  101. package/static/dashboard/assets/index-BRTBtV91.css +1 -0
  102. package/static/dashboard/assets/index-C87aqO18.js +129 -0
  103. package/static/dashboard/assets/label-BfMHjFA7.js +1 -0
  104. package/static/dashboard/assets/labels--UUyt9uB.js +1 -0
  105. package/static/dashboard/assets/layout-grid-B7mn7n3K.js +6 -0
  106. package/static/dashboard/assets/me-D1prnPpY.js +1 -0
  107. package/static/dashboard/assets/parts-B-HQayFH.js +1 -0
  108. package/static/dashboard/assets/plus-CuMhvZUZ.js +6 -0
  109. package/static/dashboard/assets/s._site-Ccc7pzT-.js +1 -0
  110. package/static/dashboard/assets/s._site.comments-nJZLYDQh.js +39 -0
  111. package/static/dashboard/assets/s._site.reviewers-BmRPiC0a.js +1 -0
  112. package/static/dashboard/assets/s._site.settings-DNv5ovrJ.js +1 -0
  113. package/static/dashboard/assets/setup-B_VsIyK2.js +1 -0
  114. package/static/dashboard/assets/sign-in-sWUNd3Lp.js +1 -0
  115. package/static/dashboard/assets/sites-CSzUAHV6.js +1 -0
  116. package/static/dashboard/assets/studio-DVFn025O.js +1 -0
  117. package/static/dashboard/assets/studio-DzBapfQK.js +1 -0
  118. package/static/dashboard/assets/studio.index-Cp7lBb8S.js +1 -0
  119. package/static/dashboard/assets/studio.integrations-DD2EWaL-.js +1 -0
  120. package/static/dashboard/assets/studio.members-CVu-eP6p.js +1 -0
  121. package/static/dashboard/assets/sun-DTI4O-GM.js +16 -0
  122. package/static/dashboard/assets/table-DkqScFZb.js +1 -0
  123. package/static/dashboard/assets/update-duXzIzFS.js +1 -0
  124. package/static/dashboard/assets/useBaseQuery-0OqUJMfc.js +1 -0
  125. package/static/dashboard/assets/useQuery-COJ09EkU.js +1 -0
  126. package/static/dashboard/assets/useRender-dtgBGlgC.js +1 -0
  127. package/static/dashboard/assets/users-O11swHBQ.js +6 -0
  128. package/static/dashboard/assets/welcome-CT6oH0I8.js +11 -0
  129. package/static/dashboard/assets/you-_yIPqa_9.js +1 -0
  130. package/static/dashboard/assets/zod-iC-UhR5u.js +1 -0
  131. package/static/dashboard/index.html +17 -2
  132. package/static/widget/snag.capture.js +1 -1
  133. package/static/widget/snag.dock.js +1 -1
  134. package/static/widget/snag.panels.js +1 -1
  135. package/static/widget/snag.runtime.js +2 -2
  136. package/static/widget/snag.text.js +1 -1
  137. package/vercel.json +4 -0
  138. package/static/dashboard/assets/index-CATItBzT.js +0 -1
  139. package/static/dashboard/assets/index-DsUJ96yc.css +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/routes/integrations.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { Hono } from "hono";
2
2
  import { runDueJobs, summarise } from "../jobs/index.js";
3
3
  import { l1Jobs } from "../jobs/reaper.js";
4
- import { selectMailer } from "../mail/index.js";
4
+ import { resolveMailer } from "../mail/resolve.js";
5
+ import { pushToTrackers } from "../integrations/outbox.js";
5
6
  import { deliverEmail } from "../mail/notify.js";
6
7
  import { getBucket } from "../storage/settings.js";
7
8
  import { createKeyring } from "../keys.js";
@@ -27,8 +28,19 @@ export function jobsRoutes(deps) {
27
28
  }
28
29
  const keys = createKeyring(resolveSecretKey(cfg, null, () => { }), cfg.get("SNAGSET_SECRET_KEY_PREVIOUS"));
29
30
  const bucket = await getBucket(sql, keys).catch(() => null);
30
- const mailer = selectMailer(cfg);
31
- const jobs = [...l1Jobs(bucket), deliverEmail(mailer, cfg.get("SNAGSET_BASE_URL") ?? "", keys)];
31
+ // D89: the environment first, then the transport connected on Studio › General.
32
+ const mailer = (await resolveMailer(sql, keys, cfg)).status;
33
+ const jobs = [
34
+ ...l1Jobs(bucket),
35
+ deliverEmail(mailer, cfg.get("SNAGSET_BASE_URL") ?? "", keys),
36
+ pushToTrackers(sql, {
37
+ keys,
38
+ baseUrl: cfg.get("SNAGSET_BASE_URL") ?? "",
39
+ ...(cfg.get("SNAGSET_GITHUB_API_BASE") ? { githubApiBase: cfg.get("SNAGSET_GITHUB_API_BASE") } : {}),
40
+ ...(cfg.get("SNAGSET_LINEAR_API_BASE") ? { linearApiBase: cfg.get("SNAGSET_LINEAR_API_BASE") } : {}),
41
+ ...(cfg.get("SNAGSET_SLACK_API_BASE") ? { slackApiBase: cfg.get("SNAGSET_SLACK_API_BASE") } : {}),
42
+ }),
43
+ ];
32
44
  // Well inside a platform's function ceiling. A tick that runs out of budget
33
45
  // leaves the rest for the next minute, which is what `runDueJobs` is built
34
46
  // for; the alternative is a function killed mid-transaction.
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/routes/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/routes/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA8B9C,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE1B,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC,IAAI,CACX;gBACE,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EACL,gFAAgF;oBAChF,iFAAiF;oBACjF,wFAAwF;aAC3F,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,0EAA0E;QAC1E,wEAAwE;QACxE,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,4BAA4B,EAAE,EAAE,GAAG,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,IAAI,GAAG,aAAa,CACxB,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,EACrC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,CACvC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5D,gFAAgF;QAChF,MAAM,MAAM,GAAG,CAAC,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5D,MAAM,IAAI,GAAG;YACX,GAAG,MAAM,CAAC,MAAM,CAAC;YACjB,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC;YAC7D,cAAc,CAAC,GAAG,EAAE;gBAClB,IAAI;gBACJ,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE;gBAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnG,CAAC;SACH,CAAC;QAEF,4EAA4E;QAC5E,2EAA2E;QAC3E,6DAA6D;QAC7D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9F,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAEjG,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yEAAyE;AACzE,SAAS,kBAAkB,CAAC,CAAS,EAAE,CAAS;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7E,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,119 @@
1
+ import { Hono } from "hono";
2
+ import { randomUUID } from "node:crypto";
3
+ import { DEFAULT_SCOPES, MCP_SCOPES, mintMcpToken } from "./mcpToken.js";
4
+ function fail(c, status, code, message, details) {
5
+ return c.json({ error: { code, message, ...(details ? { details } : {}), requestId: c.get("requestId") } }, status);
6
+ }
7
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
8
+ const shape = (r) => ({
9
+ id: r.id,
10
+ name: r.name,
11
+ prefix: r.prefix,
12
+ scopes: r.scopes,
13
+ site: r.project_uid ? { uid: r.project_uid, name: r.project_name ?? "" } : null,
14
+ createdBy: r.created_by_name,
15
+ createdAt: r.created_at.toISOString(),
16
+ lastUsedAt: r.last_used_at?.toISOString() ?? null,
17
+ expiresAt: r.expires_at?.toISOString() ?? null,
18
+ revokedAt: r.revoked_at?.toISOString() ?? null,
19
+ });
20
+ export function mcpTokenRoutes(deps) {
21
+ const { sql, projects } = deps;
22
+ const app = new Hono();
23
+ const signedIn = (c) => {
24
+ const owner = c.get("owner");
25
+ if (!owner)
26
+ return fail(c, 401, "unauthorized", "Sign in to the dashboard first.");
27
+ return owner;
28
+ };
29
+ const mustBeOwner = (c) => {
30
+ const owner = signedIn(c);
31
+ if (owner instanceof Response)
32
+ return owner;
33
+ if (owner.role !== "owner")
34
+ return fail(c, 403, "forbidden", "Only an owner can mint or revoke an agent token.");
35
+ return owner;
36
+ };
37
+ const load = (orgId, id) => sql.begin(async (tx) => {
38
+ await tx `SELECT set_config('app.org_id', ${orgId}, true)`;
39
+ return tx `
40
+ SELECT t.id, t.name, t.prefix, t.scopes, p.uid AS project_uid, p.name AS project_name, u.name AS created_by_name,
41
+ t.created_at, t.last_used_at, t.expires_at, t.revoked_at
42
+ FROM mcp_tokens t
43
+ LEFT JOIN projects p ON p.id = t.project_id
44
+ LEFT JOIN users u ON u.id = t.created_by
45
+ WHERE t.org_id = ${orgId}::uuid ${id ? tx `AND t.id = ${id}::uuid` : tx ``}
46
+ ORDER BY t.revoked_at IS NOT NULL, t.created_at DESC
47
+ `;
48
+ });
49
+ app.get("/api/v1/mcp-tokens", async (c) => {
50
+ const owner = signedIn(c);
51
+ if (owner instanceof Response)
52
+ return owner;
53
+ const rows = await load(owner.orgId);
54
+ return c.json({ data: rows.map(shape), scopes: MCP_SCOPES, defaults: DEFAULT_SCOPES });
55
+ });
56
+ app.post("/api/v1/mcp-tokens", async (c) => {
57
+ const owner = mustBeOwner(c);
58
+ if (owner instanceof Response)
59
+ return owner;
60
+ const body = (await c.req.json().catch(() => null));
61
+ const name = typeof body?.["name"] === "string" ? body["name"].trim() : "";
62
+ if (!name || name.length > 80)
63
+ return fail(c, 422, "validation_failed", "Name the token for the agent that will hold it — “Claude Code”, “CI bot”.", { field: "name" });
64
+ const wantScopes = body?.["scopes"];
65
+ let scopes = [...DEFAULT_SCOPES];
66
+ if (wantScopes !== undefined) {
67
+ if (!Array.isArray(wantScopes) || wantScopes.some((s) => typeof s !== "string")) {
68
+ return fail(c, 422, "validation_failed", "Scopes are a list of names.", { field: "scopes" });
69
+ }
70
+ const unknown = wantScopes.filter((s) => !MCP_SCOPES.includes(s));
71
+ if (unknown.length)
72
+ return fail(c, 422, "validation_failed", `No scope called ${JSON.stringify(unknown[0])}. Known: ${MCP_SCOPES.join(", ")}.`, { field: "scopes" });
73
+ scopes = [...new Set(wantScopes)];
74
+ if (scopes.length === 0)
75
+ return fail(c, 422, "validation_failed", "A token with no scope can do nothing. Give it at least threads:read.", { field: "scopes" });
76
+ }
77
+ let projectId = null;
78
+ const site = body?.["site"];
79
+ if (typeof site === "string" && site) {
80
+ const p = await projects.get(site);
81
+ if (!p || p.org_id !== owner.orgId)
82
+ return fail(c, 422, "validation_failed", "No site with that uid.", { field: "site" });
83
+ projectId = p.id;
84
+ }
85
+ let expiresAt = null;
86
+ const days = body?.["expiresInDays"];
87
+ if (days !== undefined && days !== null) {
88
+ if (typeof days !== "number" || !Number.isInteger(days) || days < 1 || days > 3650) {
89
+ return fail(c, 422, "validation_failed", "Expiry is a number of days, 1 to 3650, or nothing.", { field: "expiresInDays" });
90
+ }
91
+ expiresAt = new Date(Date.now() + days * 86_400_000);
92
+ }
93
+ const id = randomUUID();
94
+ const minted = await sql.begin(async (tx) => {
95
+ await tx `SELECT set_config('app.org_id', ${owner.orgId}, true)`;
96
+ return mintMcpToken(tx, id, { orgId: owner.orgId, projectId, name, scopes, createdBy: owner.userId, expiresAt });
97
+ });
98
+ const [row] = await load(owner.orgId, id);
99
+ return c.json({ token: shape(row), secret: minted.token }, 201);
100
+ });
101
+ app.delete("/api/v1/mcp-tokens/:id", async (c) => {
102
+ const owner = mustBeOwner(c);
103
+ if (owner instanceof Response)
104
+ return owner;
105
+ const id = c.req.param("id") ?? "";
106
+ if (!UUID.test(id))
107
+ return fail(c, 404, "not_found", "No token with that id.");
108
+ const done = await sql.begin(async (tx) => {
109
+ await tx `SELECT set_config('app.org_id', ${owner.orgId}, true)`;
110
+ return tx `UPDATE mcp_tokens SET revoked_at = now() WHERE id = ${id}::uuid AND org_id = ${owner.orgId}::uuid AND revoked_at IS NULL`;
111
+ });
112
+ if (done.count === 0)
113
+ return fail(c, 404, "not_found", "No live token with that id — it may already be revoked.");
114
+ const [row] = await load(owner.orgId, id);
115
+ return c.json({ token: row ? shape(row) : null });
116
+ });
117
+ return app;
118
+ }
119
+ //# sourceMappingURL=mcpTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpTokens.js","sourceRoot":"","sources":["../../src/routes/mcpTokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ import { Hono } from "hono";
2
+ import { randomUUID } from "node:crypto";
3
+ import { ensureStudioReviewers } from "../studioReviewers.js";
4
+ import { hashPassword } from "./owner.js";
5
+ function fail(c, status, code, message) {
6
+ return c.json({ error: { code, message, requestId: c.get("requestId") } }, status);
7
+ }
8
+ /** Owner-only, said in one place. Admins can see the list; they cannot change it. */
9
+ function mustBeOwner(c) {
10
+ const owner = c.get("owner");
11
+ if (!owner)
12
+ return fail(c, 401, "unauthorized", "Sign in to the dashboard first.");
13
+ if (owner.role !== "owner") {
14
+ return fail(c, 403, "forbidden", "Only an owner can change who is in the studio.");
15
+ }
16
+ return owner;
17
+ }
18
+ const WIRED = ["owner", "admin"];
19
+ function parseRole(v) {
20
+ if (v !== "owner" && v !== "admin") {
21
+ return v === "member" || v === "viewer"
22
+ ? `"${v}" is not available yet — a read-only seat needs visibility rules that are not built. Use owner or admin.`
23
+ : "role must be owner or admin.";
24
+ }
25
+ return v;
26
+ }
27
+ export function memberRoutes(deps) {
28
+ const { sql } = deps;
29
+ const app = new Hono();
30
+ /** Org-scoped transaction, the same five lines threads.ts keeps for itself. */
31
+ const inOrg = (orgId, fn) => sql.begin(async (tx) => {
32
+ await tx `SELECT set_config('app.org_id', ${orgId}, true)`;
33
+ return fn(tx);
34
+ });
35
+ const list = async (orgId, me) => {
36
+ const rows = await inOrg(orgId, (tx) => tx `
37
+ SELECT u.email, u.name, m.role, m.created_at, u.id AS user_id
38
+ FROM memberships m
39
+ JOIN users u ON u.id = m.user_id AND u.deleted_at IS NULL
40
+ WHERE m.org_id = ${orgId}
41
+ ORDER BY m.created_at, u.email
42
+ `);
43
+ return rows.map((r) => ({
44
+ email: r.email, name: r.name, role: r.role, createdAt: r.created_at.toISOString(), you: r.user_id === me,
45
+ }));
46
+ };
47
+ app.get("/api/v1/members", async (c) => {
48
+ const owner = c.get("owner");
49
+ if (!owner)
50
+ return fail(c, 401, "unauthorized", "Sign in to the dashboard first.");
51
+ return c.json({ data: await list(owner.orgId, owner.userId) });
52
+ });
53
+ app.post("/api/v1/members", async (c) => {
54
+ const owner = mustBeOwner(c);
55
+ if (owner instanceof Response)
56
+ return owner;
57
+ const body = (await c.req.json().catch(() => null));
58
+ const email = typeof body?.email === "string" ? body.email.trim().toLowerCase() : "";
59
+ const name = typeof body?.name === "string" ? body.name.trim().slice(0, 120) : "";
60
+ const password = typeof body?.password === "string" ? body.password : "";
61
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email))
62
+ return fail(c, 400, "validation_failed", "That does not look like an email address.");
63
+ const role = parseRole(body?.role);
64
+ if (!WIRED.includes(role))
65
+ return fail(c, 400, "validation_failed", role);
66
+ // 05 §4.7: minimum 12, no composition rules — the same rule setup and
67
+ // `passwd` apply, stated here before the server has to refuse it.
68
+ if (password.length < 12)
69
+ return fail(c, 400, "validation_failed", "The initial password needs at least 12 characters. A short phrase of real words is fine.");
70
+ const userId = randomUUID();
71
+ try {
72
+ await sql.begin(async (tx) => {
73
+ // The maintenance claim (0002, D56) for the users INSERT: a user with
74
+ // no membership row yet is invisible to users_org, so under a role
75
+ // that honours RLS the insert would fail its own WITH CHECK. Setup
76
+ // and boot take the same claim for the same row. The membership then
77
+ // goes in under the org scope like any other write.
78
+ await tx `SET LOCAL app.maintenance = 'on'`;
79
+ await tx `SELECT set_config('app.org_id', ${owner.orgId}, true)`;
80
+ await tx `
81
+ INSERT INTO users (id, org_id, email, name, password_hash, email_verified)
82
+ VALUES (${userId}, ${owner.orgId}, ${email}, ${name}, ${hashPassword(password)}, true)
83
+ `;
84
+ await tx `INSERT INTO memberships (org_id, user_id, role) VALUES (${owner.orgId}, ${userId}, ${role}::snag_member_role)`;
85
+ // 05 §6.4b: a member is assignable in every site from the moment
86
+ // they join — the other half of what createProject does.
87
+ await ensureStudioReviewers(tx, { orgId: owner.orgId, userId });
88
+ });
89
+ }
90
+ catch (e) {
91
+ // users_email_uniq — the one collision this route can have, said as a
92
+ // sentence rather than a 500.
93
+ if (e?.code === "23505") {
94
+ return fail(c, 409, "already_a_member", "Somebody with that email is already in the studio.");
95
+ }
96
+ throw e;
97
+ }
98
+ return c.json({ data: await list(owner.orgId, owner.userId) }, 201);
99
+ });
100
+ app.patch("/api/v1/members/:email", async (c) => {
101
+ const owner = mustBeOwner(c);
102
+ if (owner instanceof Response)
103
+ return owner;
104
+ const email = decodeURIComponent(c.req.param("email")).trim().toLowerCase();
105
+ const body = (await c.req.json().catch(() => null));
106
+ const role = parseRole(body?.role);
107
+ if (!WIRED.includes(role))
108
+ return fail(c, 400, "validation_failed", role);
109
+ const result = await inOrg(owner.orgId, async (tx) => {
110
+ const [target] = await tx `
111
+ SELECT m.user_id, m.role FROM memberships m JOIN users u ON u.id = m.user_id AND u.deleted_at IS NULL
112
+ WHERE m.org_id = ${owner.orgId} AND u.email = ${email}
113
+ `;
114
+ if (!target)
115
+ return "missing";
116
+ if (target.role === "owner" && role !== "owner") {
117
+ // The last owner cannot be demoted: an org with no owner has nobody
118
+ // who can manage members, including making a new owner.
119
+ const [owners] = await tx `SELECT count(*)::int AS n FROM memberships WHERE org_id = ${owner.orgId} AND role = 'owner'`;
120
+ if ((owners?.n ?? 0) <= 1)
121
+ return "last_owner";
122
+ }
123
+ await tx `UPDATE memberships SET role = ${role}::snag_member_role WHERE org_id = ${owner.orgId} AND user_id = ${target.user_id}`;
124
+ return "ok";
125
+ });
126
+ if (result === "missing")
127
+ return fail(c, 404, "not_found", "Nobody with that email is in the studio.");
128
+ if (result === "last_owner")
129
+ return fail(c, 409, "last_owner", "That is the only owner. Make somebody else an owner first.");
130
+ return c.json({ data: await list(owner.orgId, owner.userId) });
131
+ });
132
+ app.delete("/api/v1/members/:email", async (c) => {
133
+ const owner = mustBeOwner(c);
134
+ if (owner instanceof Response)
135
+ return owner;
136
+ const email = decodeURIComponent(c.req.param("email")).trim().toLowerCase();
137
+ if (email === owner.email.toLowerCase()) {
138
+ // Removing yourself is refused rather than honoured-then-logged-out:
139
+ // the person to remove you is another owner, and the last-owner rule
140
+ // below already covers the case where there is not one.
141
+ return fail(c, 409, "self", "You cannot remove yourself. Ask another owner.");
142
+ }
143
+ const result = await inOrg(owner.orgId, async (tx) => {
144
+ const [target] = await tx `
145
+ SELECT m.user_id, m.role FROM memberships m JOIN users u ON u.id = m.user_id AND u.deleted_at IS NULL
146
+ WHERE m.org_id = ${owner.orgId} AND u.email = ${email}
147
+ `;
148
+ if (!target)
149
+ return "missing";
150
+ if (target.role === "owner") {
151
+ const [owners] = await tx `SELECT count(*)::int AS n FROM memberships WHERE org_id = ${owner.orgId} AND role = 'owner'`;
152
+ if ((owners?.n ?? 0) <= 1)
153
+ return "last_owner";
154
+ }
155
+ // Soft on the user, hard on the membership: users_email_uniq is partial
156
+ // on deleted_at IS NULL, so the same email can be added again later;
157
+ // every session goes with it, because the session middleware requires
158
+ // a membership row and this is the row.
159
+ // 05 §6.4b: they leave the assignee pool and keep what was already
160
+ // assigned to them — blocked, which is the one mechanism the spec has
161
+ // for that, and never un-assigned, which would rewrite history on
162
+ // threads somebody is mid-conversation on.
163
+ await tx `UPDATE reviewers SET blocked_at = now() WHERE org_id = ${owner.orgId} AND user_id = ${target.user_id} AND blocked_at IS NULL`;
164
+ await tx `UPDATE user_sessions SET revoked_at = now() WHERE user_id = ${target.user_id} AND revoked_at IS NULL`;
165
+ await tx `DELETE FROM memberships WHERE org_id = ${owner.orgId} AND user_id = ${target.user_id}`;
166
+ await tx `UPDATE users SET deleted_at = now(), updated_at = now() WHERE id = ${target.user_id}`;
167
+ return "ok";
168
+ });
169
+ if (result === "missing")
170
+ return fail(c, 404, "not_found", "Nobody with that email is in the studio.");
171
+ if (result === "last_owner")
172
+ return fail(c, 409, "last_owner", "That is the only owner. Make somebody else an owner first.");
173
+ return c.json({ data: await list(owner.orgId, owner.userId) });
174
+ });
175
+ return app;
176
+ }
177
+ //# sourceMappingURL=members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/routes/members.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Hono } from "hono";
2
2
  import { randomUUID, randomBytes, createHash, timingSafeEqual, scryptSync } from "node:crypto";
3
- import { DASHBOARD_SESSION_COOKIE, DASHBOARD_CSRF_COOKIE, HTTP_HEADER } from "../vendor/types/names.js";
3
+ import { DASHBOARD_SESSION_COOKIE, DASHBOARD_CSRF_COOKIE, HTTP_HEADER, ID_PREFIX } from "../vendor/types/names.js";
4
4
  /** 05 §4.7: 30-day absolute, 7-day idle, rolling refresh on use. */
5
5
  const ABSOLUTE_MS = 30 * 24 * 60 * 60 * 1000;
6
6
  const IDLE_MS = 7 * 24 * 60 * 60 * 1000;
@@ -90,22 +90,35 @@ export function ownerAuth(deps) {
90
90
  return next();
91
91
  const at = now();
92
92
  const [row] = await sql `
93
- SELECT s.id, s.org_id, s.user_id, u.email, u.name, s.last_seen_at
93
+ SELECT s.id, s.org_id, s.user_id, u.email, u.name, s.last_seen_at, m.role
94
94
  FROM user_sessions s
95
95
  JOIN users u ON u.id = s.user_id AND u.deleted_at IS NULL
96
+ -- No membership, no session: a user removed from the org keeps no
97
+ -- access through a cookie minted while they were in it.
98
+ JOIN memberships m ON m.org_id = s.org_id AND m.user_id = s.user_id
96
99
  WHERE s.token_hash = ${sha256(token)}
97
100
  AND s.revoked_at IS NULL
98
101
  AND s.expires_at > ${at}
99
102
  AND s.last_seen_at > ${new Date(at.getTime() - IDLE_MS)}
100
103
  `;
101
- if (!row)
104
+ if (!row) {
105
+ // The cookie names no live session — expired, revoked, or minted under
106
+ // a key this instance no longer has. Left alone it is presented on every
107
+ // API call for as long as the browser keeps it, and each presentation
108
+ // is this query: an Atlantic round trip per request to be told no. So
109
+ // it is cleared on the first miss, with logout's own attributes so the
110
+ // browser actually drops it. The request itself proceeds unsigned, as
111
+ // it always did; the only change is that the NEXT one costs nothing.
112
+ clearSessionCookies(c, deps.secure);
102
113
  return next();
114
+ }
103
115
  c.set("owner", {
104
116
  userId: row.user_id,
105
117
  orgId: row.org_id,
106
118
  email: row.email,
107
119
  name: row.name,
108
120
  sessionId: row.id,
121
+ role: row.role,
109
122
  });
110
123
  // Rolling refresh (§4.7), but not on every request: `last_seen_at` only
111
124
  // needs to be accurate to within the idle window, and a write per request
@@ -254,14 +267,50 @@ export function ownerRoutes(deps) {
254
267
  const [org] = await sql `
255
268
  SELECT name, slug FROM orgs WHERE id = ${owner.orgId}
256
269
  `;
270
+ /*
271
+ * `shot` and `last_activity` are here rather than in a per-card request,
272
+ * for the same reason the counts are: the Sites screen draws every project
273
+ * at once, so N+1 round trips would be N+1 trips to Neon to render one
274
+ * page. The LATERAL runs per project and stops at one row.
275
+ *
276
+ * WHY A THUMBNAIL AT ALL — you recognise a client's site by how it looks,
277
+ * not by reading three names down a list. It is the one thing Pastel's
278
+ * home does that a text list cannot, and it costs nothing to source: the
279
+ * pixel tier already captures a screenshot with every snag, so the newest
280
+ * one is the site's face for free.
281
+ *
282
+ * Deliberately the newest SCREENSHOT and not the newest image: a reviewer
283
+ * can attach a photo to a comment, and a client's holiday snap is not what
284
+ * their site looks like.
285
+ */
257
286
  const projects = await sql `
258
- SELECT p.uid, p.name, p.key_prefix, p.write_mode,
287
+ SELECT p.uid, p.name, p.key_prefix, p.write_mode, p.status,
288
+ p.settings->>'domain' AS domain,
259
289
  count(t.id)::int AS threads,
260
- count(t.id) FILTER (WHERE t.status <> 'resolved')::int AS unresolved
290
+ count(t.id) FILTER (WHERE t.status <> 'resolved')::int AS unresolved,
291
+ max(t.updated_at) AS last_activity,
292
+ s.id AS shot
261
293
  FROM projects p
262
294
  LEFT JOIN threads t ON t.project_id = p.id AND t.deleted_at IS NULL AND t.private = false
295
+ LEFT JOIN LATERAL (
296
+ SELECT a.id
297
+ FROM attachments a
298
+ -- Joined back to the thread, even though attachments.project_id
299
+ -- would answer on its own: a screenshot belonging to a PRIVATE or
300
+ -- deleted thread must not become the site's public face, and only the
301
+ -- thread knows that.
302
+ JOIN threads th ON th.id = a.thread_id
303
+ WHERE a.project_id = p.id
304
+ AND a.kind = 'screenshot'
305
+ AND a.state = 'bound'
306
+ AND a.deleted_at IS NULL
307
+ AND th.deleted_at IS NULL
308
+ AND th.private = false
309
+ ORDER BY a.created_at DESC
310
+ LIMIT 1
311
+ ) s ON true
263
312
  WHERE p.org_id = ${owner.orgId} AND p.deleted_at IS NULL
264
- GROUP BY p.id, p.uid, p.name, p.key_prefix, p.write_mode
313
+ GROUP BY p.id, p.uid, p.name, p.key_prefix, p.write_mode, p.status, p.settings, s.id
265
314
  ORDER BY p.created_at
266
315
  `;
267
316
  return c.json({
@@ -270,15 +319,23 @@ export function ownerRoutes(deps) {
270
319
  // project uuids specifically, but the habit is the point — an internal
271
320
  // id put on the wire because it was to hand is how the first one always
272
321
  // gets out.
273
- user: { email: owner.email, name: owner.name },
322
+ user: { email: owner.email, name: owner.name, role: owner.role },
274
323
  org: { name: org?.name ?? "", slug: org?.slug ?? "" },
275
324
  projects: projects.map((p) => ({
276
325
  uid: p.uid,
277
326
  name: p.name,
278
327
  keyPrefix: p.key_prefix,
279
328
  writeMode: p.write_mode,
329
+ // D91 (the switch) and D92 (the domain), for the card and Settings.
330
+ status: p.status,
331
+ domain: p.domain,
280
332
  threads: p.threads,
281
333
  unresolved: p.unresolved,
334
+ // A URL, not an id, so the client never has to know how a blob is
335
+ // addressed. Null means no snag has been filed yet — which the card
336
+ // renders as its own state rather than a broken image.
337
+ previewUrl: p.shot ? `/api/v1/attachments/${ID_PREFIX.attachment}${p.shot}/blob` : null,
338
+ lastActivityAt: p.last_activity ? p.last_activity.toISOString() : null,
282
339
  })),
283
340
  });
284
341
  });
@@ -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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"}