@kernhq/module-quire 0.10.9 → 0.11.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 (53) hide show
  1. package/dist/contract/models.d.ts +87 -0
  2. package/dist/contract/models.d.ts.map +1 -1
  3. package/dist/contract/models.js +73 -0
  4. package/dist/contract/models.js.map +1 -1
  5. package/dist/contract/permissions.d.ts.map +1 -1
  6. package/dist/contract/permissions.js +32 -0
  7. package/dist/contract/permissions.js.map +1 -1
  8. package/dist/contract/router.d.ts +645 -0
  9. package/dist/contract/router.d.ts.map +1 -1
  10. package/dist/contract/router.js +137 -2
  11. package/dist/contract/router.js.map +1 -1
  12. package/dist/server/_impl.d.ts +877 -0
  13. package/dist/server/_impl.d.ts.map +1 -1
  14. package/dist/server/_impl.js +127 -1
  15. package/dist/server/_impl.js.map +1 -1
  16. package/dist/server/schema.d.ts +482 -1
  17. package/dist/server/schema.d.ts.map +1 -1
  18. package/dist/server/schema.js +115 -1
  19. package/dist/server/schema.js.map +1 -1
  20. package/dist/server/services/index.d.ts +3 -0
  21. package/dist/server/services/index.d.ts.map +1 -1
  22. package/dist/server/services/index.js +3 -0
  23. package/dist/server/services/index.js.map +1 -1
  24. package/dist/server/services/organisation.d.ts +117 -0
  25. package/dist/server/services/organisation.d.ts.map +1 -0
  26. package/dist/server/services/organisation.js +319 -0
  27. package/dist/server/services/organisation.js.map +1 -0
  28. package/dist/server/services/pages.d.ts +16 -1
  29. package/dist/server/services/pages.d.ts.map +1 -1
  30. package/dist/server/services/pages.js +62 -3
  31. package/dist/server/services/pages.js.map +1 -1
  32. package/migrations/0007_organisation.sql +114 -0
  33. package/migrations/meta/0007_snapshot.json +1588 -0
  34. package/migrations/meta/_journal.json +7 -0
  35. package/package.json +1 -1
  36. package/src/client/components/ConfirmDialog.svelte +123 -0
  37. package/src/client/components/FavoriteStar.svelte +81 -0
  38. package/src/client/components/LabelChip.svelte +46 -0
  39. package/src/client/components/LabelManager.svelte +336 -0
  40. package/src/client/components/PageLabels.svelte +158 -0
  41. package/src/client/components/SidebarFavorites.svelte +262 -0
  42. package/src/client/components/SidebarRecents.svelte +98 -0
  43. package/src/client/components/SidebarSpaces.svelte +266 -1
  44. package/src/client/i18n.ts +387 -0
  45. package/src/client/index.ts +8 -0
  46. package/src/client/mock.ts +306 -0
  47. package/src/client/module.ts +18 -0
  48. package/src/client/pages/PageView.svelte +284 -9
  49. package/src/client/pages/TrashPage.svelte +378 -0
  50. package/src/client/query.ts +24 -0
  51. package/src/contract/models.ts +83 -0
  52. package/src/contract/permissions.ts +36 -0
  53. package/src/contract/router.ts +153 -1
@@ -50,6 +50,48 @@ export function quirePages(access) {
50
50
  throw KernError.badRequest('afterId is not a sibling at this position');
51
51
  return rankBetween(ordered[at].position, ordered[at + 1]?.position ?? null);
52
52
  }
53
+ /**
54
+ * Keep only the rows of one space whose page this person may still read.
55
+ *
56
+ * The ancestor chains are built from one flat read of the space rather than from `scopeOf` per
57
+ * row: `scopeOf` is a recursive query each time, and a listing is exactly where that turns one
58
+ * screen into a round trip per page. Every ancestor of a page is in the same space by
59
+ * construction — `create` and `move` both refuse a parent from another one — so the flat read
60
+ * has the whole chain.
61
+ *
62
+ * The permission check is still one call per row, because the engine answers about one scope at
63
+ * a time. That is the same cost `favorites.list` pays, and the listing is bounded by its page
64
+ * size.
65
+ */
66
+ async function readableInSpace(tx, principal, workspaceId, spaceId, rows) {
67
+ if (rows.length === 0)
68
+ return rows;
69
+ const all = await tx
70
+ .select({ id: pages.id, parentId: pages.parentId })
71
+ .from(pages)
72
+ .where(and(eq(pages.workspaceId, workspaceId), eq(pages.spaceId, spaceId)));
73
+ const parentOf = new Map(all.map((row) => [row.id, row.parentId]));
74
+ /** Nearest ancestor first, and `seen` is what stops a cycle from hanging the request. */
75
+ const ancestorsOf = (id) => {
76
+ const chain = [];
77
+ const seen = new Set([id]);
78
+ let at = parentOf.get(id) ?? null;
79
+ while (at !== null && !seen.has(at)) {
80
+ chain.push(at);
81
+ seen.add(at);
82
+ at = parentOf.get(at) ?? null;
83
+ }
84
+ return chain;
85
+ };
86
+ const kept = await Promise.all(rows.map(async (row) => (await access.canPage(principal, 'quire.page.view', workspaceId, {
87
+ pageId: row.id,
88
+ spaceId,
89
+ ancestorIds: ancestorsOf(row.id),
90
+ }))
91
+ ? row
92
+ : null));
93
+ return kept.filter((row) => row !== null);
94
+ }
53
95
  return {
54
96
  /**
55
97
  * Every page in the space, flat, ordered so the caller can build the tree without sorting.
@@ -96,15 +138,32 @@ export function quirePages(access) {
96
138
  async get(tx, workspaceId, pageId) {
97
139
  return toPage(await access.pageRow(tx, workspaceId, pageId));
98
140
  },
99
- async trash(tx, workspaceId, spaceId, limit, cursor) {
141
+ /**
142
+ * What is in the space's trash, filtered to what this person may actually read.
143
+ *
144
+ * The procedure is space-scoped — you reach the screen by being allowed to edit *somewhere* in
145
+ * the space — so without a second, narrower question every row here is a title handed to
146
+ * whoever can open the screen, including the pages a page-scoped DENY closed to them. That is
147
+ * a real leak rather than a tidiness point: `pages.get`, `pages.restore` and `pages.purge` are
148
+ * all page-scoped, so an unfiltered row names a page its reader can neither open, put back nor
149
+ * delete. It exists only to say what it was called.
150
+ *
151
+ * The check is `quire.page.view`, the permission that governs seeing a title, and it is asked
152
+ * per page rather than per space — the same rule `favorites.list` and `recents.list` follow.
153
+ * The cursor is taken from the window *before* filtering, so removing a row cannot make the
154
+ * next page skip one.
155
+ */
156
+ async trash(tx, principal, workspaceId, spaceId, limit, cursor) {
100
157
  const rows = await tx
101
158
  .select()
102
159
  .from(pages)
103
160
  .where(and(eq(pages.workspaceId, workspaceId), eq(pages.spaceId, spaceId), isNotNull(pages.deletedAt), cursor ? lt(pages.id, cursor) : undefined))
104
161
  .orderBy(desc(pages.id))
105
162
  .limit(limit + 1);
106
- const items = rows.slice(0, limit).map(toPage);
107
- return { items, nextCursor: rows.length > limit ? (items.at(-1)?.id ?? null) : null };
163
+ const window = rows.slice(0, limit);
164
+ const nextCursor = rows.length > limit ? (window.at(-1)?.id ?? null) : null;
165
+ const readable = await readableInSpace(tx, principal, workspaceId, spaceId, window);
166
+ return { items: readable.map(toPage), nextCursor };
108
167
  },
109
168
  async create(tx, principal, workspaceId, input) {
110
169
  if (input.parentId) {
@@ -1 +1 @@
1
- {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../src/server/services/pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAkB,MAAM,mBAAmB,CAAA;AACxE,OAAO,EAAE,SAAS,EAAW,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACrF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAKpC,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,GAAwC;IACrE,OAAO,oBAAoB,CAAC;QAC1B,WAAW,EAAE,GAAG,CAAC,WAAoB;QACrC,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,GAAG,CAAC,EAAE;KACjB,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,WAAkC;QACnD,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,GAAG,CAAC,IAAoB;QAC9B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;QAC1C,qBAAqB,EAAE,GAAG,CAAC,qBAAqB;QAChD,SAAS,EAAE,GAAG,CAAC,SAA8B;QAC7C,SAAS,EAAE,GAAG,CAAC,SAA8B;QAC7C,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI;QACjD,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI;KAChD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,iGAAiG;IACjG,KAAK,UAAU,aAAa,CAC1B,EAAM,EACN,WAAmB,EACnB,OAAe,EACf,QAAuB,EACvB,OAAsB,EACtB,QAAiB;QAEjB,MAAM,QAAQ,GAAG,MAAM,EAAE;aACtB,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;aAClD,IAAI,CAAC,KAAK,CAAC;aACX,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAClC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAC1B,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACzE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CACxB,CACF;aACA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;QACzD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAA;QAC5E,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;QACrD,IAAI,EAAE,GAAG,CAAC;YAAE,MAAM,SAAS,CAAC,UAAU,CAAC,2CAA2C,CAAC,CAAA;QACnF,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,CAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAA;IAC9E,CAAC;IAED,OAAO;QACL;;;;;WAKG;QACH,KAAK,CAAC,IAAI,CAAC,EAAM,EAAE,WAAmB,EAAE,OAAe,EAAE,eAAwB;YAC/E,MAAM,IAAI,GAAG,MAAM,EAAE;iBAClB,MAAM,CAAC;gBACN,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC;iBACD,IAAI,CAAC,KAAK,CAAC;iBACX,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAClC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAC1B,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;YACvB;;;;;;;;eAQG;YACH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EACxB,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CACvD,CACF;iBACA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;YAE/B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAA;YACnG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,IAAI,EAAE,CAAC,CAAC,IAAwB;gBAChC,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI;aAChD,CAAC,CAAC,CAAA;QACL,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,EAAM,EAAE,WAAmB,EAAE,MAAc;YACnD,OAAO,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;QAC9D,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,EAAM,EAAE,WAAmB,EAAE,OAAe,EAAE,KAAa,EAAE,MAAqB;YAC5F,MAAM,IAAI,GAAG,MAAM,EAAE;iBAClB,MAAM,EAAE;iBACR,IAAI,CAAC,KAAK,CAAC;iBACX,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAClC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAC1B,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAC1C,CACF;iBACA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBACvB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC9C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvF,CAAC;QAED,KAAK,CAAC,MAAM,CACV,EAAM,EACN,SAAoB,EACpB,WAAmB,EACnB,KAOC;YAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACpE,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;oBAClC,MAAM,SAAS,CAAC,UAAU,CAAC,yCAAyC,CAAC,CAAA;YACzE,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;YACnG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;iBACnB,MAAM,CAAC,KAAK,CAAC;iBACb,MAAM,CAAC;gBACN,EAAE,EAAE,MAAM,EAAE;gBACZ,WAAW;gBACX,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ;gBACR,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,SAAS,CAAC,MAAM;gBAC3B,SAAS,EAAE,SAAS,CAAC,MAAM;aAC5B,CAAC;iBACD,SAAS,EAAE,CAAA;YACd,OAAO,MAAM,CAAC,GAAI,CAAC,CAAA;QACrB,CAAC;QAED,KAAK,CAAC,MAAM,CACV,EAAM,EACN,SAAoB,EACpB,WAAmB,EACnB,MAAc,EACd,KAAqE;YAErE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;iBACnB,MAAM,CAAC,KAAK,CAAC;iBACb,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;iBACrE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;iBAC7F,SAAS,EAAE,CAAA;YACd,IAAI,CAAC,GAAG;gBAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC;QAED;;;;;;WAMG;QACH,KAAK,CAAC,IAAI,CACR,EAAM,EACN,SAAoB,EACpB,WAAmB,EACnB,MAAc,EACd,QAAuB,EACvB,OAAsB;YAEtB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;YACzD,IAAI,QAAQ,KAAK,MAAM;gBAAE,MAAM,SAAS,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAA;YACtF,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;gBAC9D,IAAI,MAAM,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;oBAChC,MAAM,SAAS,CAAC,UAAU,CAAC,2CAA2C,CAAC,CAAA;gBACzE,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;gBACnE,IAAI,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC1C,MAAM,SAAS,CAAC,UAAU,CAAC,sDAAsD,CAAC,CAAA;YACtF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;YAC7F,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;iBACrB,MAAM,CAAC,KAAK,CAAC;iBACb,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;iBAC/E,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;iBACpE,SAAS,EAAE,CAAA;YACd,OAAO,MAAM,CAAC,KAAM,CAAC,CAAA;QACvB,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,EAAM,EAAE,SAAoB,EAAE,WAAmB,EAAE,MAAc,EAAE,QAAiB;YAChG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;iBACnB,MAAM,CAAC,KAAK,CAAC;iBACb,GAAG,CAAC;gBACH,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;gBACxC,SAAS,EAAE,SAAS,CAAC,MAAM;gBAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;iBACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;iBAC7F,SAAS,EAAE,CAAA;YACd,IAAI,CAAC,GAAG;gBAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC;QAED,iFAAiF;QACjF,KAAK,CAAC,UAAU,CAAC,EAAM,EAAE,WAAmB,EAAE,MAAc;YAC1D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAiB,GAAG,CAAA;;;kCAGpB,WAAW,mBAAmB,MAAM;;;;oCAIlC,WAAW;;;OAGxC,CAAC,CAAA;YACF,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAClC,CAAC;QAED,0FAA0F;QAC1F,KAAK,CAAC,SAAS,CAAC,EAAM,EAAE,WAAmB,EAAE,MAAc;YACzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;YAC1D,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YACtD,MAAM,EAAE;iBACL,MAAM,CAAC,KAAK,CAAC;iBACb,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;iBACrD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YACzE,OAAO,EAAE,GAAG,EAAE,CAAA;QAChB,CAAC;QAED;;;WAGG;QACH,KAAK,CAAC,OAAO,CAAC,EAAM,EAAE,WAAmB,EAAE,MAAc;YACvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;YACnF,IAAI,CAAC,GAAG,CAAC,SAAS;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;YACtC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjB,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;qBACtB,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;qBACtC,IAAI,CAAC,KAAK,CAAC;qBACX,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;qBAC1E,KAAK,CAAC,CAAC,CAAC,CAAA;gBACX,kEAAkE;gBAClE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBAChC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;oBACtF,MAAM,EAAE;yBACL,MAAM,CAAC,KAAK,CAAC;yBACb,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;yBACjC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;gBACzE,CAAC;YACH,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;YAC1D,MAAM,EAAE;iBACL,MAAM,CAAC,KAAK,CAAC;iBACb,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;iBAC/C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YACzE,OAAO,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;QAC9D,CAAC;QAED,kFAAkF;QAClF,KAAK,CAAC,KAAK,CAAC,EAAM,EAAE,WAAmB,EAAE,MAAc;YACrD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;YAC1D,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YACtD,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YAC7F,OAAO,EAAE,GAAG,EAAE,CAAA;QAChB,CAAC;QAED,gFAAgF;QAChF,aAAa,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;KACnC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../src/server/services/pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ -- Labels, favourites, recent views and watchers: the ways a page is reached that are not the tree.
2
+ --
3
+ -- Generated from `src/server/schema.ts`, then edited in two ways drizzle-kit cannot do for itself.
4
+ --
5
+ -- Every statement is guarded. `create table`, `create index` and `create policy` throw on a replay,
6
+ -- and a module migration that throws takes down the whole host service rather than its own module —
7
+ -- core hosts five. Drizzle keys applied migrations by content hash, so regenerating the journal
8
+ -- replays every file against a schema that already has its objects. The composite primary keys are
9
+ -- inline in `create table` rather than a following `alter table … add primary key`, so they inherit
10
+ -- that guard instead of needing one of their own.
11
+ --
12
+ -- `favorites.position` is `COLLATE "C"`. It is a fractional index over a base-62 alphabet ordered by
13
+ -- code point, so `ORDER BY position` is only the order the algorithm intended under byte comparison.
14
+ -- This database is `en_US.UTF-8`, where `'U' < 'c'` is false — somebody's sidebar would come back
15
+ -- shuffled, and nothing would fail. drizzle-kit does not carry collation in its snapshot, which is
16
+ -- how `properties.position` and `views.position` lost theirs; if this file is ever regenerated, put
17
+ -- it back.
18
+ CREATE TABLE IF NOT EXISTS "mod_quire"."favorites" (
19
+ "workspace_id" uuid NOT NULL,
20
+ "user_id" uuid NOT NULL,
21
+ "page_id" uuid NOT NULL,
22
+ "position" text COLLATE "C" NOT NULL,
23
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
24
+ CONSTRAINT "favorites_user_id_page_id_pk" PRIMARY KEY("user_id","page_id")
25
+ );
26
+ --> statement-breakpoint
27
+ CREATE TABLE IF NOT EXISTS "mod_quire"."labels" (
28
+ "id" uuid PRIMARY KEY DEFAULT uuidv7() NOT NULL,
29
+ "workspace_id" uuid NOT NULL,
30
+ "space_id" uuid NOT NULL,
31
+ "name" text NOT NULL,
32
+ "colour" text DEFAULT 'grey' NOT NULL,
33
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
34
+ );
35
+ --> statement-breakpoint
36
+ CREATE TABLE IF NOT EXISTS "mod_quire"."page_labels" (
37
+ "page_id" uuid NOT NULL,
38
+ "label_id" uuid NOT NULL,
39
+ "workspace_id" uuid NOT NULL,
40
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
41
+ CONSTRAINT "page_labels_page_id_label_id_pk" PRIMARY KEY("page_id","label_id")
42
+ );
43
+ --> statement-breakpoint
44
+ CREATE TABLE IF NOT EXISTS "mod_quire"."recent_views" (
45
+ "workspace_id" uuid NOT NULL,
46
+ "user_id" uuid NOT NULL,
47
+ "page_id" uuid NOT NULL,
48
+ "viewed_at" timestamp with time zone DEFAULT now() NOT NULL,
49
+ CONSTRAINT "recent_views_user_id_page_id_pk" PRIMARY KEY("user_id","page_id")
50
+ );
51
+ --> statement-breakpoint
52
+ CREATE TABLE IF NOT EXISTS "mod_quire"."watchers" (
53
+ "workspace_id" uuid NOT NULL,
54
+ "user_id" uuid NOT NULL,
55
+ "page_id" uuid NOT NULL,
56
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
57
+ CONSTRAINT "watchers_user_id_page_id_pk" PRIMARY KEY("user_id","page_id")
58
+ );
59
+ --> statement-breakpoint
60
+ CREATE INDEX IF NOT EXISTS "favorites_ws_user_idx" ON "mod_quire"."favorites" USING btree ("workspace_id","user_id","position");--> statement-breakpoint
61
+
62
+ -- On `lower(name)`, not on `name`. Case is not a distinction anybody means here: "Draft" and "draft"
63
+ -- side by side in a picker read as broken data, and which one a person clicks is a coin toss.
64
+ CREATE UNIQUE INDEX IF NOT EXISTS "labels_ws_space_name_uq" ON "mod_quire"."labels" USING btree ("workspace_id","space_id",lower("name"));--> statement-breakpoint
65
+ CREATE INDEX IF NOT EXISTS "labels_ws_space_idx" ON "mod_quire"."labels" USING btree ("workspace_id","space_id","name");--> statement-breakpoint
66
+ CREATE INDEX IF NOT EXISTS "page_labels_ws_label_idx" ON "mod_quire"."page_labels" USING btree ("workspace_id","label_id","page_id");--> statement-breakpoint
67
+ CREATE INDEX IF NOT EXISTS "recent_views_ws_user_idx" ON "mod_quire"."recent_views" USING btree ("workspace_id","user_id","viewed_at" DESC NULLS LAST);--> statement-breakpoint
68
+ CREATE INDEX IF NOT EXISTS "watchers_ws_page_idx" ON "mod_quire"."watchers" USING btree ("workspace_id","page_id","user_id");--> statement-breakpoint
69
+
70
+ -- Row-level security, the same triple every tenant table gets.
71
+ --
72
+ -- `force` matters: without it the table owner bypasses the policy, and the owner is the role the
73
+ -- service connects as. A *superuser* bypasses RLS whatever this says, and the development and CI
74
+ -- roles are superusers — so a test that does not connect as an unprivileged role proves nothing
75
+ -- about isolation.
76
+ --
77
+ -- Note what is fenced and what is not. These five tables are keyed by a person, not only by a
78
+ -- workspace, and the policy is still on `workspace_id` alone: it is the tenant boundary, not a
79
+ -- privacy boundary. Keeping one person's favourites out of another's reading is the procedure's
80
+ -- job, and there is nothing here that does it yet.
81
+ ALTER TABLE "mod_quire"."labels" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
82
+ ALTER TABLE "mod_quire"."labels" FORCE ROW LEVEL SECURITY;--> statement-breakpoint
83
+ DROP POLICY IF EXISTS "labels_ws_isolation" ON "mod_quire"."labels";--> statement-breakpoint
84
+ CREATE POLICY "labels_ws_isolation" ON "mod_quire"."labels"
85
+ USING (workspace_id::text = current_setting('app.workspace_id', true))
86
+ WITH CHECK (workspace_id::text = current_setting('app.workspace_id', true));--> statement-breakpoint
87
+
88
+ ALTER TABLE "mod_quire"."page_labels" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
89
+ ALTER TABLE "mod_quire"."page_labels" FORCE ROW LEVEL SECURITY;--> statement-breakpoint
90
+ DROP POLICY IF EXISTS "page_labels_ws_isolation" ON "mod_quire"."page_labels";--> statement-breakpoint
91
+ CREATE POLICY "page_labels_ws_isolation" ON "mod_quire"."page_labels"
92
+ USING (workspace_id::text = current_setting('app.workspace_id', true))
93
+ WITH CHECK (workspace_id::text = current_setting('app.workspace_id', true));--> statement-breakpoint
94
+
95
+ ALTER TABLE "mod_quire"."favorites" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
96
+ ALTER TABLE "mod_quire"."favorites" FORCE ROW LEVEL SECURITY;--> statement-breakpoint
97
+ DROP POLICY IF EXISTS "favorites_ws_isolation" ON "mod_quire"."favorites";--> statement-breakpoint
98
+ CREATE POLICY "favorites_ws_isolation" ON "mod_quire"."favorites"
99
+ USING (workspace_id::text = current_setting('app.workspace_id', true))
100
+ WITH CHECK (workspace_id::text = current_setting('app.workspace_id', true));--> statement-breakpoint
101
+
102
+ ALTER TABLE "mod_quire"."recent_views" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
103
+ ALTER TABLE "mod_quire"."recent_views" FORCE ROW LEVEL SECURITY;--> statement-breakpoint
104
+ DROP POLICY IF EXISTS "recent_views_ws_isolation" ON "mod_quire"."recent_views";--> statement-breakpoint
105
+ CREATE POLICY "recent_views_ws_isolation" ON "mod_quire"."recent_views"
106
+ USING (workspace_id::text = current_setting('app.workspace_id', true))
107
+ WITH CHECK (workspace_id::text = current_setting('app.workspace_id', true));--> statement-breakpoint
108
+
109
+ ALTER TABLE "mod_quire"."watchers" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
110
+ ALTER TABLE "mod_quire"."watchers" FORCE ROW LEVEL SECURITY;--> statement-breakpoint
111
+ DROP POLICY IF EXISTS "watchers_ws_isolation" ON "mod_quire"."watchers";--> statement-breakpoint
112
+ CREATE POLICY "watchers_ws_isolation" ON "mod_quire"."watchers"
113
+ USING (workspace_id::text = current_setting('app.workspace_id', true))
114
+ WITH CHECK (workspace_id::text = current_setting('app.workspace_id', true));