@kernhq/module-quire 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/contract/events.d.ts +5 -0
  2. package/dist/contract/events.d.ts.map +1 -1
  3. package/dist/contract/events.js +1 -0
  4. package/dist/contract/events.js.map +1 -1
  5. package/dist/contract/index.d.ts +1 -0
  6. package/dist/contract/index.d.ts.map +1 -1
  7. package/dist/contract/index.js +1 -0
  8. package/dist/contract/index.js.map +1 -1
  9. package/dist/contract/models.d.ts +82 -0
  10. package/dist/contract/models.d.ts.map +1 -1
  11. package/dist/contract/models.js +41 -0
  12. package/dist/contract/models.js.map +1 -1
  13. package/dist/contract/notifications.d.ts +9 -0
  14. package/dist/contract/notifications.d.ts.map +1 -0
  15. package/dist/contract/notifications.js +16 -0
  16. package/dist/contract/notifications.js.map +1 -0
  17. package/dist/contract/permissions.d.ts +7 -0
  18. package/dist/contract/permissions.d.ts.map +1 -1
  19. package/dist/contract/permissions.js +8 -0
  20. package/dist/contract/permissions.js.map +1 -1
  21. package/dist/contract/router.d.ts +270 -0
  22. package/dist/contract/router.d.ts.map +1 -1
  23. package/dist/contract/router.js +33 -1
  24. package/dist/contract/router.js.map +1 -1
  25. package/dist/server/_impl.d.ts +303 -0
  26. package/dist/server/_impl.d.ts.map +1 -1
  27. package/dist/server/_impl.js +55 -0
  28. package/dist/server/_impl.js.map +1 -1
  29. package/dist/server/index.d.ts.map +1 -1
  30. package/dist/server/index.js +132 -3
  31. package/dist/server/index.js.map +1 -1
  32. package/dist/server/schema.d.ts +335 -1
  33. package/dist/server/schema.d.ts.map +1 -1
  34. package/dist/server/schema.js +44 -2
  35. package/dist/server/schema.js.map +1 -1
  36. package/dist/server/services/comments.d.ts +172 -0
  37. package/dist/server/services/comments.d.ts.map +1 -0
  38. package/dist/server/services/comments.js +182 -0
  39. package/dist/server/services/comments.js.map +1 -0
  40. package/dist/server/services/index.d.ts +3 -0
  41. package/dist/server/services/index.d.ts.map +1 -1
  42. package/dist/server/services/index.js +3 -0
  43. package/dist/server/services/index.js.map +1 -1
  44. package/dist/server/services/notify.d.ts +24 -0
  45. package/dist/server/services/notify.d.ts.map +1 -0
  46. package/dist/server/services/notify.js +54 -0
  47. package/dist/server/services/notify.js.map +1 -0
  48. package/migrations/0003_comments.sql +30 -0
  49. package/migrations/meta/0003_snapshot.json +668 -0
  50. package/migrations/meta/_journal.json +7 -0
  51. package/package.json +1 -1
  52. package/src/client/index.ts +2 -0
  53. package/src/contract/events.ts +4 -0
  54. package/src/contract/index.ts +1 -0
  55. package/src/contract/models.ts +48 -0
  56. package/src/contract/notifications.ts +17 -0
  57. package/src/contract/permissions.ts +8 -0
  58. package/src/contract/router.ts +47 -1
@@ -2,11 +2,12 @@ import { dirname, join } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  import { CollabAccess, CollabAccessInput } from '@kernhq/contracts';
4
4
  import { KernError } from '@kernhq/kernel';
5
- import { and, eq } from 'drizzle-orm';
6
- import { MODULE_ID, quireCapabilities, quireContract, quireEvents, quirePermissions, } from '../contract/index.js';
5
+ import { and, asc, eq, gt, inArray, isNull } from 'drizzle-orm';
6
+ import { MODULE_ID, quireCapabilities, quireContract, quireEvents, quireNotificationTypes, quirePermissions, } from '../contract/index.js';
7
7
  import { defineModule, defineServerModule, implement_, packageVersion } from './_impl.js';
8
- import { pages, schema } from './schema.js';
8
+ import { pages, schema, spaces } from './schema.js';
9
9
  import { quireServices } from './services/index.js';
10
+ import { createNotify } from './services/notify.js';
10
11
  /**
11
12
  * How long a page may go without an automatic version while somebody is writing in it.
12
13
  *
@@ -15,6 +16,29 @@ import { quireServices } from './services/index.js';
15
16
  * traffic the module sees.
16
17
  */
17
18
  const AUTO_VERSION_INTERVAL_MS = 5 * 60_000;
19
+ /**
20
+ * A page as the search index sees it, or null when it should not be indexed at all.
21
+ *
22
+ * An archived or trashed page is dropped rather than indexed: a search result that opens the trash
23
+ * is worse than no result. So is a page in a space that is not `open` — see the note on `search`.
24
+ */
25
+ function searchDocument(workspaceId, page, spaceKey, visibility) {
26
+ if (page.deletedAt || page.archivedAt)
27
+ return null;
28
+ if (visibility !== 'open')
29
+ return null;
30
+ return {
31
+ workspaceId: workspaceId,
32
+ object: { module: MODULE_ID, type: 'page', id: page.id },
33
+ title: page.title || 'Untitled',
34
+ body: page.text,
35
+ url: `/quire/${spaceKey}/${page.id}`,
36
+ icon: 'file-text',
37
+ acl: null,
38
+ updatedAt: page.updatedAt.toISOString(),
39
+ attributes: { spaceId: page.spaceId, kind: page.kind },
40
+ };
41
+ }
18
42
  /** These procedures are reachable only from another Kern service, never from a browser. */
19
43
  function requireService(principal) {
20
44
  if (principal.kind !== 'service' && !principal.instanceAdmin)
@@ -29,6 +53,7 @@ export const quireModule = defineServerModule({
29
53
  icon: 'scroll-text',
30
54
  permissions: quirePermissions,
31
55
  capabilities: quireCapabilities,
56
+ notificationTypes: quireNotificationTypes,
32
57
  events: quireEvents,
33
58
  /**
34
59
  * A page is a first-class object elsewhere in Kern: it can be mentioned, linked, searched and —
@@ -44,6 +69,97 @@ export const quireModule = defineServerModule({
44
69
  schema,
45
70
  migrationsFolder: join(dirname(fileURLToPath(import.meta.url)), '../../migrations'),
46
71
  router: implement_,
72
+ /**
73
+ * `quire:page:<id>` documents for the workspace-wide search index.
74
+ *
75
+ * **Only pages in an `open` space are indexed, and that is a deliberate gap rather than an
76
+ * oversight.** `SearchDocument.acl` is matched against `[userId, …groupIds, 'role:<role>']`, so
77
+ * indexing a restricted or private space correctly means knowing *which subjects may read this
78
+ * page* — and core can answer "may this person read this object" but has no way to enumerate who
79
+ * can. Guessing produces one of two bad outcomes: a private page in a stranger's search results,
80
+ * or a page its own author cannot find. Neither is worth having, so the restricted case waits for
81
+ * a core procedure that can answer it.
82
+ */
83
+ search: [
84
+ {
85
+ types: ['page'],
86
+ load: async (workspaceId, id, kernel) => kernel.database.withWorkspace(workspaceId, async (tx) => {
87
+ const [row] = await tx
88
+ .select({ page: pages, spaceKey: spaces.key, visibility: spaces.visibility })
89
+ .from(pages)
90
+ .innerJoin(spaces, eq(spaces.id, pages.spaceId))
91
+ .where(and(eq(pages.workspaceId, workspaceId), eq(pages.id, id)))
92
+ .limit(1);
93
+ if (!row)
94
+ return null;
95
+ return searchDocument(workspaceId, row.page, row.spaceKey, row.visibility);
96
+ }),
97
+ scan: async function* (workspaceId, kernel) {
98
+ let after = null;
99
+ for (;;) {
100
+ const batch = await kernel.database.withWorkspace(workspaceId, (tx) => tx
101
+ .select({ page: pages, spaceKey: spaces.key, visibility: spaces.visibility })
102
+ .from(pages)
103
+ .innerJoin(spaces, eq(spaces.id, pages.spaceId))
104
+ .where(and(eq(pages.workspaceId, workspaceId), isNull(pages.deletedAt), after ? gt(pages.id, after) : undefined))
105
+ .orderBy(asc(pages.id))
106
+ .limit(500));
107
+ if (batch.length === 0)
108
+ return;
109
+ for (const r of batch) {
110
+ const doc = searchDocument(workspaceId, r.page, r.spaceKey, r.visibility);
111
+ if (doc)
112
+ yield doc;
113
+ }
114
+ after = batch.at(-1)?.page.id ?? null;
115
+ if (batch.length < 500)
116
+ return;
117
+ }
118
+ },
119
+ },
120
+ ],
121
+ /** How a page and a space render wherever another module links to one. */
122
+ resolvers: [
123
+ {
124
+ type: 'page',
125
+ resolve: async (workspaceId, ids, _principal, kernel) => kernel.database.withWorkspace(workspaceId, async (tx) => {
126
+ const rows = await tx
127
+ .select({ id: pages.id, title: pages.title, spaceKey: spaces.key })
128
+ .from(pages)
129
+ .innerJoin(spaces, eq(spaces.id, pages.spaceId))
130
+ .where(and(eq(pages.workspaceId, workspaceId), inArray(pages.id, ids)));
131
+ const byId = new Map(rows.map((r) => [r.id, r]));
132
+ return ids.map((id) => {
133
+ const row = byId.get(id);
134
+ return row
135
+ ? {
136
+ id: row.id,
137
+ title: row.title || 'Untitled',
138
+ url: `/quire/${row.spaceKey}/${row.id}`,
139
+ icon: 'file-text',
140
+ subtitle: null,
141
+ }
142
+ : null;
143
+ });
144
+ }),
145
+ },
146
+ {
147
+ type: 'space',
148
+ resolve: async (workspaceId, ids, _principal, kernel) => kernel.database.withWorkspace(workspaceId, async (tx) => {
149
+ const rows = await tx
150
+ .select({ id: spaces.id, name: spaces.name, key: spaces.key })
151
+ .from(spaces)
152
+ .where(and(eq(spaces.workspaceId, workspaceId), inArray(spaces.id, ids)));
153
+ const byId = new Map(rows.map((r) => [r.id, r]));
154
+ return ids.map((id) => {
155
+ const row = byId.get(id);
156
+ return row
157
+ ? { id: row.id, title: row.name, url: `/quire/${row.key}`, icon: 'scroll-text', subtitle: null }
158
+ : null;
159
+ });
160
+ }),
161
+ },
162
+ ],
47
163
  subscriptions: {
48
164
  /**
49
165
  * A document was edited. Three things follow from that, and none of them can be done from the
@@ -87,6 +203,19 @@ export const quireModule = defineServerModule({
87
203
  });
88
204
  }
89
205
  });
206
+ // The prose changed, so the index is stale. Best effort: a page must not fail to save
207
+ // because search is briefly unavailable.
208
+ const doc = await kernel.database.withWorkspace(payload.workspaceId, async (tx) => {
209
+ const [row] = await tx
210
+ .select({ page: pages, spaceKey: spaces.key, visibility: spaces.visibility })
211
+ .from(pages)
212
+ .innerJoin(spaces, eq(spaces.id, pages.spaceId))
213
+ .where(and(eq(pages.workspaceId, payload.workspaceId), eq(pages.id, payload.objectId)))
214
+ .limit(1);
215
+ return row ? searchDocument(payload.workspaceId, row.page, row.spaceKey, row.visibility) : null;
216
+ });
217
+ if (doc)
218
+ await createNotify(kernel).index([doc]);
90
219
  await kernel.realtime.change(payload.workspaceId, {
91
220
  module: MODULE_ID,
92
221
  entity: 'page',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -740,6 +740,340 @@ export declare const pageVersions: import("drizzle-orm/pg-core").PgTableWithColu
740
740
  };
741
741
  dialect: "pg";
742
742
  }>;
743
+ /**
744
+ * A remark on a page, and the piece of text it is about.
745
+ *
746
+ * The anchor is a **Yjs relative position**, not a character offset. An offset names a place in a
747
+ * document that only exists while nobody else is typing: two words inserted above and the comment
748
+ * is attached to something it was never about. A relative position survives concurrent edits
749
+ * because it points at the same piece of content rather than the same index.
750
+ *
751
+ * `quotedText` is what the anchor pointed at when the comment was written. It is not a fallback for
752
+ * a lost anchor — it is what lets the interface say "this was about …" when the text it referred to
753
+ * has since been deleted, instead of showing a thread attached to nothing.
754
+ */
755
+ export declare const comments: import("drizzle-orm/pg-core").PgTableWithColumns<{
756
+ name: "comments";
757
+ schema: "mod_quire";
758
+ columns: {
759
+ id: import("drizzle-orm/pg-core").PgColumn<{
760
+ name: "id";
761
+ tableName: "comments";
762
+ dataType: "string";
763
+ columnType: "PgUUID";
764
+ data: string;
765
+ driverParam: string;
766
+ notNull: true;
767
+ hasDefault: true;
768
+ isPrimaryKey: true;
769
+ isAutoincrement: false;
770
+ hasRuntimeDefault: false;
771
+ enumValues: undefined;
772
+ baseColumn: never;
773
+ identity: undefined;
774
+ generated: undefined;
775
+ }, {}, {}>;
776
+ workspaceId: import("drizzle-orm/pg-core").PgColumn<{
777
+ name: "workspace_id";
778
+ tableName: "comments";
779
+ dataType: "string";
780
+ columnType: "PgUUID";
781
+ data: string;
782
+ driverParam: string;
783
+ notNull: true;
784
+ hasDefault: false;
785
+ isPrimaryKey: false;
786
+ isAutoincrement: false;
787
+ hasRuntimeDefault: false;
788
+ enumValues: undefined;
789
+ baseColumn: never;
790
+ identity: undefined;
791
+ generated: undefined;
792
+ }, {}, {}>;
793
+ pageId: import("drizzle-orm/pg-core").PgColumn<{
794
+ name: "page_id";
795
+ tableName: "comments";
796
+ dataType: "string";
797
+ columnType: "PgUUID";
798
+ data: string;
799
+ driverParam: string;
800
+ notNull: true;
801
+ hasDefault: false;
802
+ isPrimaryKey: false;
803
+ isAutoincrement: false;
804
+ hasRuntimeDefault: false;
805
+ enumValues: undefined;
806
+ baseColumn: never;
807
+ identity: undefined;
808
+ generated: undefined;
809
+ }, {}, {}>;
810
+ parentId: import("drizzle-orm/pg-core").PgColumn<{
811
+ name: "parent_id";
812
+ tableName: "comments";
813
+ dataType: "string";
814
+ columnType: "PgUUID";
815
+ data: string;
816
+ driverParam: string;
817
+ notNull: false;
818
+ hasDefault: false;
819
+ isPrimaryKey: false;
820
+ isAutoincrement: false;
821
+ hasRuntimeDefault: false;
822
+ enumValues: undefined;
823
+ baseColumn: never;
824
+ identity: undefined;
825
+ generated: undefined;
826
+ }, {}, {}>;
827
+ threadId: import("drizzle-orm/pg-core").PgColumn<{
828
+ name: "thread_id";
829
+ tableName: "comments";
830
+ dataType: "string";
831
+ columnType: "PgUUID";
832
+ data: string;
833
+ driverParam: string;
834
+ notNull: true;
835
+ hasDefault: false;
836
+ isPrimaryKey: false;
837
+ isAutoincrement: false;
838
+ hasRuntimeDefault: false;
839
+ enumValues: undefined;
840
+ baseColumn: never;
841
+ identity: undefined;
842
+ generated: undefined;
843
+ }, {}, {}>;
844
+ authorId: import("drizzle-orm/pg-core").PgColumn<{
845
+ name: "author_id";
846
+ tableName: "comments";
847
+ dataType: "string";
848
+ columnType: "PgUUID";
849
+ data: string;
850
+ driverParam: string;
851
+ notNull: false;
852
+ hasDefault: false;
853
+ isPrimaryKey: false;
854
+ isAutoincrement: false;
855
+ hasRuntimeDefault: false;
856
+ enumValues: undefined;
857
+ baseColumn: never;
858
+ identity: undefined;
859
+ generated: undefined;
860
+ }, {}, {}>;
861
+ body: import("drizzle-orm/pg-core").PgColumn<{
862
+ name: string;
863
+ tableName: "comments";
864
+ dataType: "json";
865
+ columnType: "PgJsonb";
866
+ data: unknown;
867
+ driverParam: unknown;
868
+ notNull: true;
869
+ hasDefault: true;
870
+ isPrimaryKey: false;
871
+ isAutoincrement: false;
872
+ hasRuntimeDefault: false;
873
+ enumValues: undefined;
874
+ baseColumn: never;
875
+ identity: undefined;
876
+ generated: undefined;
877
+ }, {}, {}>;
878
+ bodyText: import("drizzle-orm/pg-core").PgColumn<{
879
+ name: "body_text";
880
+ tableName: "comments";
881
+ dataType: "string";
882
+ columnType: "PgText";
883
+ data: string;
884
+ driverParam: string;
885
+ notNull: true;
886
+ hasDefault: true;
887
+ isPrimaryKey: false;
888
+ isAutoincrement: false;
889
+ hasRuntimeDefault: false;
890
+ enumValues: [string, ...string[]];
891
+ baseColumn: never;
892
+ identity: undefined;
893
+ generated: undefined;
894
+ }, {}, {}>;
895
+ mentionIds: import("drizzle-orm/pg-core").PgColumn<{
896
+ name: string;
897
+ tableName: "comments";
898
+ dataType: "array";
899
+ columnType: "PgArray";
900
+ data: string[];
901
+ driverParam: string | string[];
902
+ notNull: true;
903
+ hasDefault: true;
904
+ isPrimaryKey: false;
905
+ isAutoincrement: false;
906
+ hasRuntimeDefault: false;
907
+ enumValues: undefined;
908
+ baseColumn: import("drizzle-orm").Column<{
909
+ name: string;
910
+ tableName: "comments";
911
+ dataType: "string";
912
+ columnType: "PgUUID";
913
+ data: string;
914
+ driverParam: string;
915
+ notNull: false;
916
+ hasDefault: false;
917
+ isPrimaryKey: false;
918
+ isAutoincrement: false;
919
+ hasRuntimeDefault: false;
920
+ enumValues: undefined;
921
+ baseColumn: never;
922
+ identity: undefined;
923
+ generated: undefined;
924
+ }, {}, {}>;
925
+ identity: undefined;
926
+ generated: undefined;
927
+ }, {}, {
928
+ size: undefined;
929
+ baseBuilder: import("drizzle-orm/pg-core").PgColumnBuilder<{
930
+ name: string;
931
+ dataType: "string";
932
+ columnType: "PgUUID";
933
+ data: string;
934
+ driverParam: string;
935
+ enumValues: undefined;
936
+ }, {}, {}, import("drizzle-orm").ColumnBuilderExtraConfig>;
937
+ }>;
938
+ anchor: import("drizzle-orm/pg-core").PgColumn<{
939
+ name: "anchor";
940
+ tableName: "comments";
941
+ dataType: "json";
942
+ columnType: "PgJsonb";
943
+ data: unknown;
944
+ driverParam: unknown;
945
+ notNull: false;
946
+ hasDefault: false;
947
+ isPrimaryKey: false;
948
+ isAutoincrement: false;
949
+ hasRuntimeDefault: false;
950
+ enumValues: undefined;
951
+ baseColumn: never;
952
+ identity: undefined;
953
+ generated: undefined;
954
+ }, {}, {}>;
955
+ quotedText: import("drizzle-orm/pg-core").PgColumn<{
956
+ name: "quoted_text";
957
+ tableName: "comments";
958
+ dataType: "string";
959
+ columnType: "PgText";
960
+ data: string;
961
+ driverParam: string;
962
+ notNull: true;
963
+ hasDefault: true;
964
+ isPrimaryKey: false;
965
+ isAutoincrement: false;
966
+ hasRuntimeDefault: false;
967
+ enumValues: [string, ...string[]];
968
+ baseColumn: never;
969
+ identity: undefined;
970
+ generated: undefined;
971
+ }, {}, {}>;
972
+ resolvedAt: import("drizzle-orm/pg-core").PgColumn<{
973
+ name: string;
974
+ tableName: "comments";
975
+ dataType: "date";
976
+ columnType: "PgTimestamp";
977
+ data: Date;
978
+ driverParam: string;
979
+ notNull: false;
980
+ hasDefault: false;
981
+ isPrimaryKey: false;
982
+ isAutoincrement: false;
983
+ hasRuntimeDefault: false;
984
+ enumValues: undefined;
985
+ baseColumn: never;
986
+ identity: undefined;
987
+ generated: undefined;
988
+ }, {}, {}>;
989
+ resolvedBy: import("drizzle-orm/pg-core").PgColumn<{
990
+ name: "resolved_by";
991
+ tableName: "comments";
992
+ dataType: "string";
993
+ columnType: "PgUUID";
994
+ data: string;
995
+ driverParam: string;
996
+ notNull: false;
997
+ hasDefault: false;
998
+ isPrimaryKey: false;
999
+ isAutoincrement: false;
1000
+ hasRuntimeDefault: false;
1001
+ enumValues: undefined;
1002
+ baseColumn: never;
1003
+ identity: undefined;
1004
+ generated: undefined;
1005
+ }, {}, {}>;
1006
+ editedAt: import("drizzle-orm/pg-core").PgColumn<{
1007
+ name: string;
1008
+ tableName: "comments";
1009
+ dataType: "date";
1010
+ columnType: "PgTimestamp";
1011
+ data: Date;
1012
+ driverParam: string;
1013
+ notNull: false;
1014
+ hasDefault: false;
1015
+ isPrimaryKey: false;
1016
+ isAutoincrement: false;
1017
+ hasRuntimeDefault: false;
1018
+ enumValues: undefined;
1019
+ baseColumn: never;
1020
+ identity: undefined;
1021
+ generated: undefined;
1022
+ }, {}, {}>;
1023
+ deletedAt: import("drizzle-orm/pg-core").PgColumn<{
1024
+ name: string;
1025
+ tableName: "comments";
1026
+ dataType: "date";
1027
+ columnType: "PgTimestamp";
1028
+ data: Date;
1029
+ driverParam: string;
1030
+ notNull: false;
1031
+ hasDefault: false;
1032
+ isPrimaryKey: false;
1033
+ isAutoincrement: false;
1034
+ hasRuntimeDefault: false;
1035
+ enumValues: undefined;
1036
+ baseColumn: never;
1037
+ identity: undefined;
1038
+ generated: undefined;
1039
+ }, {}, {}>;
1040
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
1041
+ name: string;
1042
+ tableName: "comments";
1043
+ dataType: "date";
1044
+ columnType: "PgTimestamp";
1045
+ data: Date;
1046
+ driverParam: string;
1047
+ notNull: true;
1048
+ hasDefault: true;
1049
+ isPrimaryKey: false;
1050
+ isAutoincrement: false;
1051
+ hasRuntimeDefault: false;
1052
+ enumValues: undefined;
1053
+ baseColumn: never;
1054
+ identity: undefined;
1055
+ generated: undefined;
1056
+ }, {}, {}>;
1057
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
1058
+ name: string;
1059
+ tableName: "comments";
1060
+ dataType: "date";
1061
+ columnType: "PgTimestamp";
1062
+ data: Date;
1063
+ driverParam: string;
1064
+ notNull: true;
1065
+ hasDefault: true;
1066
+ isPrimaryKey: false;
1067
+ isAutoincrement: false;
1068
+ hasRuntimeDefault: false;
1069
+ enumValues: undefined;
1070
+ baseColumn: never;
1071
+ identity: undefined;
1072
+ generated: undefined;
1073
+ }, {}, {}>;
1074
+ };
1075
+ dialect: "pg";
1076
+ }>;
743
1077
  /** Every tenant table, so the RLS migration can be checked against one list rather than memory. */
744
- export declare const TENANT_TABLES: readonly ["spaces", "pages", "page_versions"];
1078
+ export declare const TENANT_TABLES: readonly ["spaces", "pages", "page_versions", "comments"];
745
1079
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/server/schema.ts"],"names":[],"mappings":"AAaA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,qDAAwB,CAAA;AAS3C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBlB,CAAA;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CjB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BxB,CAAA;AAED,mGAAmG;AACnG,eAAO,MAAM,aAAa,+CAAgD,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/server/schema.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,qDAAwB,CAAA;AAY3C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBlB,CAAA;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CjB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BxB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BpB,CAAA;AAED,mGAAmG;AACnG,eAAO,MAAM,aAAa,2DAA4D,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { sql } from 'drizzle-orm';
2
- import { boolean, customType, index, integer, pgSchema, text, timestamp, uniqueIndex, uuid, } from 'drizzle-orm/pg-core';
2
+ import { boolean, customType, index, integer, jsonb, pgSchema, text, timestamp, uniqueIndex, uuid, } from 'drizzle-orm/pg-core';
3
3
  /**
4
4
  * This module's tables, in its own Postgres schema.
5
5
  *
@@ -15,6 +15,8 @@ import { boolean, customType, index, integer, pgSchema, text, timestamp, uniqueI
15
15
  export const schema = pgSchema('mod_quire');
16
16
  /** Yjs state is binary; drizzle has no `bytea`, so it is declared once here. */
17
17
  const bytea = customType({ dataType: () => 'bytea' });
18
+ const jsonObject = (name) => jsonb(name).notNull().default(sql `'{}'::jsonb`);
19
+ const uuidArray = (name) => uuid(name).array().notNull().default(sql `'{}'::uuid[]`);
18
20
  const id = () => uuid('id').primaryKey().default(sql `uuidv7()`);
19
21
  const ws = () => uuid('workspace_id').notNull();
20
22
  const ts = (name) => timestamp(name, { withTimezone: true });
@@ -117,6 +119,46 @@ export const pageVersions = schema.table('page_versions', {
117
119
  index('page_versions_ws_page_idx').on(t.workspaceId, t.pageId, t.createdAt),
118
120
  index('page_versions_ws_created_idx').on(t.workspaceId, t.createdAt),
119
121
  ]);
122
+ /**
123
+ * A remark on a page, and the piece of text it is about.
124
+ *
125
+ * The anchor is a **Yjs relative position**, not a character offset. An offset names a place in a
126
+ * document that only exists while nobody else is typing: two words inserted above and the comment
127
+ * is attached to something it was never about. A relative position survives concurrent edits
128
+ * because it points at the same piece of content rather than the same index.
129
+ *
130
+ * `quotedText` is what the anchor pointed at when the comment was written. It is not a fallback for
131
+ * a lost anchor — it is what lets the interface say "this was about …" when the text it referred to
132
+ * has since been deleted, instead of showing a thread attached to nothing.
133
+ */
134
+ export const comments = schema.table('comments', {
135
+ id: id(),
136
+ workspaceId: ws(),
137
+ pageId: uuid('page_id').notNull(),
138
+ /** null for a top-level comment; otherwise the comment this one replies to */
139
+ parentId: uuid('parent_id'),
140
+ /**
141
+ * The comment that starts the thread — itself for a root. Denormalised so a page's threads can
142
+ * be read in one query rather than one per level.
143
+ */
144
+ threadId: uuid('thread_id').notNull(),
145
+ authorId: uuid('author_id'),
146
+ body: jsonObject('body'),
147
+ bodyText: text('body_text').notNull().default(''),
148
+ mentionIds: uuidArray('mention_ids'),
149
+ /** `{ from, to }` as encoded Yjs relative positions; null for a comment on the page as a whole */
150
+ anchor: jsonb('anchor'),
151
+ quotedText: text('quoted_text').notNull().default(''),
152
+ resolvedAt: ts('resolved_at'),
153
+ resolvedBy: uuid('resolved_by'),
154
+ editedAt: ts('edited_at'),
155
+ deletedAt: ts('deleted_at'),
156
+ createdAt: ts('created_at').notNull().defaultNow(),
157
+ updatedAt: ts('updated_at').notNull().defaultNow(),
158
+ }, (t) => [
159
+ index('comments_ws_page_idx').on(t.workspaceId, t.pageId, t.createdAt),
160
+ index('comments_ws_thread_idx').on(t.workspaceId, t.threadId, t.createdAt),
161
+ ]);
120
162
  /** Every tenant table, so the RLS migration can be checked against one list rather than memory. */
121
- export const TENANT_TABLES = ['spaces', 'pages', 'page_versions'];
163
+ export const TENANT_TABLES = ['spaces', 'pages', 'page_versions', 'comments'];
122
164
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/server/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/server/schema.ts"],"names":[],"mappings":"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"}