@kernhq/module-quire 0.10.8 → 0.11.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.
- package/dist/contract/models.d.ts +87 -0
- package/dist/contract/models.d.ts.map +1 -1
- package/dist/contract/models.js +73 -0
- package/dist/contract/models.js.map +1 -1
- package/dist/contract/permissions.d.ts.map +1 -1
- package/dist/contract/permissions.js +32 -0
- package/dist/contract/permissions.js.map +1 -1
- package/dist/contract/router.d.ts +645 -0
- package/dist/contract/router.d.ts.map +1 -1
- package/dist/contract/router.js +137 -2
- package/dist/contract/router.js.map +1 -1
- package/dist/server/_impl.d.ts +877 -0
- package/dist/server/_impl.d.ts.map +1 -1
- package/dist/server/_impl.js +127 -1
- package/dist/server/_impl.js.map +1 -1
- package/dist/server/schema.d.ts +482 -1
- package/dist/server/schema.d.ts.map +1 -1
- package/dist/server/schema.js +115 -1
- package/dist/server/schema.js.map +1 -1
- package/dist/server/services/index.d.ts +3 -0
- package/dist/server/services/index.d.ts.map +1 -1
- package/dist/server/services/index.js +3 -0
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/organisation.d.ts +117 -0
- package/dist/server/services/organisation.d.ts.map +1 -0
- package/dist/server/services/organisation.js +319 -0
- package/dist/server/services/organisation.js.map +1 -0
- package/dist/server/services/pages.d.ts +16 -1
- package/dist/server/services/pages.d.ts.map +1 -1
- package/dist/server/services/pages.js +62 -3
- package/dist/server/services/pages.js.map +1 -1
- package/migrations/0007_organisation.sql +114 -0
- package/migrations/meta/0007_snapshot.json +1588 -0
- package/migrations/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/src/client/components/ConfirmDialog.svelte +123 -0
- package/src/client/components/FavoriteStar.svelte +81 -0
- package/src/client/components/LabelChip.svelte +46 -0
- package/src/client/components/LabelManager.svelte +336 -0
- package/src/client/components/PageLabels.svelte +158 -0
- package/src/client/components/SidebarFavorites.svelte +262 -0
- package/src/client/components/SidebarRecents.svelte +98 -0
- package/src/client/components/SidebarSpaces.svelte +266 -1
- package/src/client/i18n.ts +387 -0
- package/src/client/index.ts +8 -0
- package/src/client/mock.ts +306 -0
- package/src/client/module.ts +18 -0
- package/src/client/pages/PageView.svelte +235 -5
- package/src/client/pages/TrashPage.svelte +378 -0
- package/src/client/query.ts +24 -0
- package/src/contract/models.ts +83 -0
- package/src/contract/permissions.ts +36 -0
- package/src/contract/router.ts +153 -1
|
@@ -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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"}
|
|
@@ -2,6 +2,7 @@ import type { Kernel } from '@kernhq/kernel';
|
|
|
2
2
|
import { quireAccess } from './access.js';
|
|
3
3
|
import { quireComments } from './comments.js';
|
|
4
4
|
import { quireDatabases } from './databases.js';
|
|
5
|
+
import { quireOrganisation } from './organisation.js';
|
|
5
6
|
import { quirePages } from './pages.js';
|
|
6
7
|
import { quireSpaces } from './spaces.js';
|
|
7
8
|
import { quireVersions } from './versions.js';
|
|
@@ -12,12 +13,14 @@ export interface QuireServices {
|
|
|
12
13
|
versions: ReturnType<typeof quireVersions>;
|
|
13
14
|
comments: ReturnType<typeof quireComments>;
|
|
14
15
|
databases: ReturnType<typeof quireDatabases>;
|
|
16
|
+
organisation: ReturnType<typeof quireOrganisation>;
|
|
15
17
|
}
|
|
16
18
|
/** One set of services per kernel: they are stateless, and rebuilding them per request is waste. */
|
|
17
19
|
export declare function quireServices(kernel: Kernel): QuireServices;
|
|
18
20
|
export * from './access.js';
|
|
19
21
|
export * from './comments.js';
|
|
20
22
|
export * from './databases.js';
|
|
23
|
+
export * from './organisation.js';
|
|
21
24
|
export * from './pages.js';
|
|
22
25
|
export * from './spaces.js';
|
|
23
26
|
export * from './versions.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;IACtC,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;IACtC,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;IACpC,QAAQ,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;IAC1C,QAAQ,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;IAC1C,SAAS,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;IACtC,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;IACtC,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;IACpC,QAAQ,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;IAC1C,QAAQ,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;IAC1C,SAAS,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;IAC5C,YAAY,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAA;CACnD;AAID,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAe3D;AAED,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { quireAccess } from './access.js';
|
|
2
2
|
import { quireComments } from './comments.js';
|
|
3
3
|
import { quireDatabases } from './databases.js';
|
|
4
|
+
import { quireOrganisation } from './organisation.js';
|
|
4
5
|
import { quirePages } from './pages.js';
|
|
5
6
|
import { quireSpaces } from './spaces.js';
|
|
6
7
|
import { quireVersions } from './versions.js';
|
|
@@ -18,6 +19,7 @@ export function quireServices(kernel) {
|
|
|
18
19
|
versions: quireVersions(kernel, access),
|
|
19
20
|
comments: quireComments(access),
|
|
20
21
|
databases: quireDatabases(kernel, access),
|
|
22
|
+
organisation: quireOrganisation(access),
|
|
21
23
|
};
|
|
22
24
|
cache.set(kernel, services);
|
|
23
25
|
return services;
|
|
@@ -25,6 +27,7 @@ export function quireServices(kernel) {
|
|
|
25
27
|
export * from './access.js';
|
|
26
28
|
export * from './comments.js';
|
|
27
29
|
export * from './databases.js';
|
|
30
|
+
export * from './organisation.js';
|
|
28
31
|
export * from './pages.js';
|
|
29
32
|
export * from './spaces.js';
|
|
30
33
|
export * from './versions.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/services/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/services/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAY7C,MAAM,KAAK,GAAG,IAAI,OAAO,EAAyB,CAAA;AAElD,oGAAoG;AACpG,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAkB;QAC9B,MAAM;QACN,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;QAC3B,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;QACzB,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;QACvC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC;QAC/B,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;QACzC,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC;KACxC,CAAA;IACD,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC3B,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ways a page is reached that are not the tree: labels, favourites, watchers, recent views.
|
|
3
|
+
*
|
|
4
|
+
* One service rather than four, because they share the thing that makes them easy to get wrong.
|
|
5
|
+
* Three of these four tables are keyed by a **person**, and row-level security is not: the policy on
|
|
6
|
+
* every table in this module fences `workspace_id`, which is the tenant boundary and says nothing
|
|
7
|
+
* about who inside a tenant may read a row. A colleague's favourites are as visible to the policy as
|
|
8
|
+
* your own. So the `user_id` predicate written into each query below is the *entire* privacy
|
|
9
|
+
* mechanism for a sidebar, and a query here that forgets it does not fail, does not warn, and shows
|
|
10
|
+
* one person another person's bookmarks.
|
|
11
|
+
*
|
|
12
|
+
* The second shared concern is that none of these tables has a foreign key to `pages` — a purge
|
|
13
|
+
* leaves rows behind. Every read therefore joins to `pages` and drops what has been deleted or
|
|
14
|
+
* trashed, so an orphan is invisible rather than a broken row; and every list re-asks the permission
|
|
15
|
+
* question per page, because a page a space closed to you after you bookmarked it must leave your
|
|
16
|
+
* sidebar rather than sit there refusing to open.
|
|
17
|
+
*/
|
|
18
|
+
import type { Principal } from '@kernhq/contracts';
|
|
19
|
+
import { type Tx } from '@kernhq/kernel';
|
|
20
|
+
import type { FavoriteEntry, Label, RecentEntry, WatchState } from '../../contract/index.js';
|
|
21
|
+
import { labels } from '../schema.js';
|
|
22
|
+
import type { QuireAccess } from './access.js';
|
|
23
|
+
type LabelRow = typeof labels.$inferSelect;
|
|
24
|
+
/**
|
|
25
|
+
* `colour` is `text` in the database and a closed enum in the contract, so a value the enum does not
|
|
26
|
+
* know would fail *output* validation — a 500 on a read, for a row that is merely odd. Grey is the
|
|
27
|
+
* same fallback `toneFor` renders, which is the one the client would draw anyway.
|
|
28
|
+
*/
|
|
29
|
+
export declare function toLabel(row: LabelRow): Label;
|
|
30
|
+
export declare function quireOrganisation(access: QuireAccess): {
|
|
31
|
+
/** Every label in the space, by name — what a picker draws. */
|
|
32
|
+
listLabels(tx: Tx, workspaceId: string, spaceId: string): Promise<Label[]>;
|
|
33
|
+
/** The label row, or `notFound` — a label id carries no scope, so this is what resolves one. */
|
|
34
|
+
labelRow(tx: Tx, workspaceId: string, labelId: string): Promise<{
|
|
35
|
+
id: string;
|
|
36
|
+
workspaceId: string;
|
|
37
|
+
spaceId: string;
|
|
38
|
+
name: string;
|
|
39
|
+
colour: string;
|
|
40
|
+
createdAt: Date;
|
|
41
|
+
}>;
|
|
42
|
+
createLabel(tx: Tx, workspaceId: string, spaceId: string, input: {
|
|
43
|
+
name: string;
|
|
44
|
+
colour: Label["colour"];
|
|
45
|
+
}): Promise<Label>;
|
|
46
|
+
updateLabel(tx: Tx, workspaceId: string, labelId: string, patch: {
|
|
47
|
+
name?: string;
|
|
48
|
+
colour?: Label["colour"];
|
|
49
|
+
}): Promise<Label>;
|
|
50
|
+
/**
|
|
51
|
+
* Gone, and off every page that wore it.
|
|
52
|
+
*
|
|
53
|
+
* There is no foreign key to cascade through, so leaving the join rows would leave every page
|
|
54
|
+
* that wore this label carrying a tag nothing can name — invisible in a picker, undeletable, and
|
|
55
|
+
* ready to reappear the day a new label is minted with the same id, which uuidv7 will not do but
|
|
56
|
+
* is the wrong thing to be relying on.
|
|
57
|
+
*/
|
|
58
|
+
removeLabel(tx: Tx, workspaceId: string, labelId: string): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* The unique index is on `lower(name)`, so this asks the same question the index would answer.
|
|
61
|
+
*
|
|
62
|
+
* Checked here as well as enforced there because the index's answer is a raw `23505` — a 500 to
|
|
63
|
+
* whoever typed the name, rather than "there is already one of those".
|
|
64
|
+
*/
|
|
65
|
+
refuseDuplicate(tx: Tx, workspaceId: string, spaceId: string, name: string, exceptId: string | null): Promise<void>;
|
|
66
|
+
labelsForPage(tx: Tx, workspaceId: string, pageId: string): Promise<Label[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Replace what the page wears with exactly this set.
|
|
69
|
+
*
|
|
70
|
+
* Delete-then-insert inside the caller's transaction, rather than working out a difference: the
|
|
71
|
+
* set is at most fifty ids and the difference is the part that gets a duplicate wrong. Every id
|
|
72
|
+
* has to name a label of *this page's own space* — a label belongs to a space, so accepting one
|
|
73
|
+
* from elsewhere would put another team's vocabulary on this page and leave a picker showing a
|
|
74
|
+
* tag it has no entry for.
|
|
75
|
+
*/
|
|
76
|
+
setLabels(tx: Tx, workspaceId: string, pageId: string, spaceId: string, labelIds: string[]): Promise<Label[]>;
|
|
77
|
+
/**
|
|
78
|
+
* This person's favourites, in the order they arranged them.
|
|
79
|
+
*
|
|
80
|
+
* `eq(favorites.userId, userId)` is the privacy boundary — see the note at the top of the file.
|
|
81
|
+
*/
|
|
82
|
+
listFavorites(tx: Tx, principal: Principal, workspaceId: string, userId: string): Promise<FavoriteEntry[]>;
|
|
83
|
+
/**
|
|
84
|
+
* Star a page. Lands at the end of the list, and starring one twice is the same star.
|
|
85
|
+
*
|
|
86
|
+
* Idempotent on purpose: `disabled={mutation.isPending}` reaches the button a render late, so
|
|
87
|
+
* two quick clicks are two requests, and the second one must not be an error the person sees.
|
|
88
|
+
*/
|
|
89
|
+
addFavorite(tx: Tx, workspaceId: string, userId: string, pageId: string): Promise<void>;
|
|
90
|
+
/** Only ever your own: without `userId` this deletes whoever else starred the same page. */
|
|
91
|
+
removeFavorite(tx: Tx, workspaceId: string, userId: string, pageId: string): Promise<void>;
|
|
92
|
+
/** `afterId` is the favourite to land behind; null means first. Only this person's list moves. */
|
|
93
|
+
reorderFavorite(tx: Tx, workspaceId: string, userId: string, pageId: string, afterId: string | null): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Who is watching this page, and whether you are among them.
|
|
96
|
+
*
|
|
97
|
+
* The list is not filtered to the caller: unlike a favourite, a watch is a fact about the page
|
|
98
|
+
* that everyone who can read the page can see — it is what a "3 people are watching" line beside
|
|
99
|
+
* the button is drawn from.
|
|
100
|
+
*/
|
|
101
|
+
watchState(tx: Tx, workspaceId: string, pageId: string, userId: string): Promise<WatchState>;
|
|
102
|
+
setWatching(tx: Tx, workspaceId: string, pageId: string, userId: string, watching: boolean): Promise<WatchState>;
|
|
103
|
+
/**
|
|
104
|
+
* Where this person has just been, newest first.
|
|
105
|
+
*
|
|
106
|
+
* Over-fetched before the permission filter and sliced after it: filtering a page of exactly
|
|
107
|
+
* `limit` rows would hand back four entries when six of the ten most recent are pages somebody
|
|
108
|
+
* has since been shut out of, and the older ones they can still read would never appear. The
|
|
109
|
+
* over-fetch is bounded so a denied stretch costs one wider query rather than a scan.
|
|
110
|
+
*/
|
|
111
|
+
listRecents(tx: Tx, principal: Principal, workspaceId: string, userId: string, limit: number): Promise<RecentEntry[]>;
|
|
112
|
+
/** One row per person per page, bumped rather than appended — re-opening moves it up the list. */
|
|
113
|
+
recordRecent(tx: Tx, workspaceId: string, userId: string, pageId: string): Promise<void>;
|
|
114
|
+
};
|
|
115
|
+
export type QuireOrganisation = ReturnType<typeof quireOrganisation>;
|
|
116
|
+
export {};
|
|
117
|
+
//# sourceMappingURL=organisation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organisation.d.ts","sourceRoot":"","sources":["../../../src/server/services/organisation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAa,KAAK,EAAE,EAAU,MAAM,gBAAgB,CAAA;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE5F,OAAO,EAAa,MAAM,EAA4C,MAAM,cAAc,CAAA;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,KAAK,QAAQ,GAAG,OAAO,MAAM,CAAC,YAAY,CAAA;AAE1C;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,KAAK,CAS5C;AAUD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW;IAqCjD,+DAA+D;mBAC1C,EAAE,eAAe,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAShF,gGAAgG;iBAC7E,EAAE,eAAe,MAAM,WAAW,MAAM;;;;;;;;oBAWrD,EAAE,eACO,MAAM,WACV,MAAM,SACR;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;KAAE,GAC/C,OAAO,CAAC,KAAK,CAAC;oBAYX,EAAE,eACO,MAAM,WACV,MAAM,SACR;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;KAAE,GACjD,OAAO,CAAC,KAAK,CAAC;IAcjB;;;;;;;OAOG;oBACmB,EAAE,eAAe,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9E;;;;;OAKG;wBAEG,EAAE,eACO,MAAM,WACV,MAAM,QACT,MAAM,YACF,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,IAAI,CAAC;sBAgBQ,EAAE,eAAe,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAoBlF;;;;;;;;OAQG;kBAEG,EAAE,eACO,MAAM,UACX,MAAM,WACL,MAAM,YACL,MAAM,EAAE,GACjB,OAAO,CAAC,KAAK,EAAE,CAAC;IAuBnB;;;;OAIG;sBAEG,EAAE,aACK,SAAS,eACP,MAAM,UACX,MAAM,GACb,OAAO,CAAC,aAAa,EAAE,CAAC;IA6B3B;;;;;OAKG;oBACmB,EAAE,eAAe,MAAM,UAAU,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7F,4FAA4F;uBACnE,EAAE,eAAe,MAAM,UAAU,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhG,kGAAkG;wBAE5F,EAAE,eACO,MAAM,UACX,MAAM,UACN,MAAM,WACL,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,IAAI,CAAC;IAuBhB;;;;;;OAMG;mBACkB,EAAE,eAAe,MAAM,UAAU,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;oBAa5F,EAAE,eACO,MAAM,UACX,MAAM,UACN,MAAM,YACJ,OAAO,GAChB,OAAO,CAAC,UAAU,CAAC;IAetB;;;;;;;OAOG;oBAEG,EAAE,aACK,SAAS,eACP,MAAM,UACX,MAAM,SACP,MAAM,GACZ,OAAO,CAAC,WAAW,EAAE,CAAC;IAmCzB,kGAAkG;qBAC3E,EAAE,eAAe,MAAM,UAAU,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAQjG;AACD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { KernError, uuidv7 } from '@kernhq/kernel';
|
|
2
|
+
import { and, asc, desc, eq, inArray, isNull, ne, sql } from 'drizzle-orm';
|
|
3
|
+
import { rankBetween } from '../../client/rank.js';
|
|
4
|
+
import { LabelColour } from '../../contract/index.js';
|
|
5
|
+
import { favorites, labels, pageLabels, pages, recentViews, watchers } from '../schema.js';
|
|
6
|
+
/**
|
|
7
|
+
* `colour` is `text` in the database and a closed enum in the contract, so a value the enum does not
|
|
8
|
+
* know would fail *output* validation — a 500 on a read, for a row that is merely odd. Grey is the
|
|
9
|
+
* same fallback `toneFor` renders, which is the one the client would draw anyway.
|
|
10
|
+
*/
|
|
11
|
+
export function toLabel(row) {
|
|
12
|
+
return {
|
|
13
|
+
id: row.id,
|
|
14
|
+
workspaceId: row.workspaceId,
|
|
15
|
+
spaceId: row.spaceId,
|
|
16
|
+
name: row.name,
|
|
17
|
+
colour: LabelColour.safeParse(row.colour).success ? row.colour : 'grey',
|
|
18
|
+
createdAt: row.createdAt.toISOString(),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** The columns a shortcut row draws, joined from the page it points at. */
|
|
22
|
+
const pageBits = {
|
|
23
|
+
spaceId: pages.spaceId,
|
|
24
|
+
title: pages.title,
|
|
25
|
+
icon: pages.icon,
|
|
26
|
+
kind: pages.kind,
|
|
27
|
+
};
|
|
28
|
+
export function quireOrganisation(access) {
|
|
29
|
+
/**
|
|
30
|
+
* Keep only the rows whose page this person may still read.
|
|
31
|
+
*
|
|
32
|
+
* Per page rather than per space, because a page-scoped DENY is the narrow case the whole
|
|
33
|
+
* permission model exists for — a space check would let exactly the page somebody was shut out of
|
|
34
|
+
* stay in their sidebar. `scopeOf` throws for a page that no longer exists; the join already
|
|
35
|
+
* excludes those, and the `catch` is what stops a race between the two turning a sidebar into an
|
|
36
|
+
* error.
|
|
37
|
+
*/
|
|
38
|
+
async function readable(tx, principal, workspaceId, rows) {
|
|
39
|
+
const kept = await Promise.all(rows.map(async (row) => {
|
|
40
|
+
const scope = await access.scopeOf(tx, workspaceId, row.pageId).catch(() => null);
|
|
41
|
+
if (!scope)
|
|
42
|
+
return null;
|
|
43
|
+
return (await access.canPage(principal, 'quire.page.view', workspaceId, scope)) ? row : null;
|
|
44
|
+
}));
|
|
45
|
+
return kept.filter((row) => row !== null);
|
|
46
|
+
}
|
|
47
|
+
/** The ranks of this person's favourites, in order, optionally without the one being moved. */
|
|
48
|
+
async function ordered(tx, workspaceId, userId, movingId) {
|
|
49
|
+
const rows = await tx
|
|
50
|
+
.select({ pageId: favorites.pageId, position: favorites.position })
|
|
51
|
+
.from(favorites)
|
|
52
|
+
.where(and(eq(favorites.workspaceId, workspaceId), eq(favorites.userId, userId)))
|
|
53
|
+
.orderBy(asc(favorites.position));
|
|
54
|
+
return rows.filter((row) => row.pageId !== movingId);
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
/** Every label in the space, by name — what a picker draws. */
|
|
58
|
+
async listLabels(tx, workspaceId, spaceId) {
|
|
59
|
+
const rows = await tx
|
|
60
|
+
.select()
|
|
61
|
+
.from(labels)
|
|
62
|
+
.where(and(eq(labels.workspaceId, workspaceId), eq(labels.spaceId, spaceId)))
|
|
63
|
+
.orderBy(asc(labels.name));
|
|
64
|
+
return rows.map(toLabel);
|
|
65
|
+
},
|
|
66
|
+
/** The label row, or `notFound` — a label id carries no scope, so this is what resolves one. */
|
|
67
|
+
async labelRow(tx, workspaceId, labelId) {
|
|
68
|
+
const [row] = await tx
|
|
69
|
+
.select()
|
|
70
|
+
.from(labels)
|
|
71
|
+
.where(and(eq(labels.workspaceId, workspaceId), eq(labels.id, labelId)))
|
|
72
|
+
.limit(1);
|
|
73
|
+
if (!row)
|
|
74
|
+
throw KernError.notFound('Label');
|
|
75
|
+
return row;
|
|
76
|
+
},
|
|
77
|
+
async createLabel(tx, workspaceId, spaceId, input) {
|
|
78
|
+
const name = input.name.trim();
|
|
79
|
+
if (!name)
|
|
80
|
+
throw KernError.badRequest('A label needs a name');
|
|
81
|
+
await this.refuseDuplicate(tx, workspaceId, spaceId, name, null);
|
|
82
|
+
const [row] = await tx
|
|
83
|
+
.insert(labels)
|
|
84
|
+
.values({ id: uuidv7(), workspaceId, spaceId, name, colour: input.colour })
|
|
85
|
+
.returning();
|
|
86
|
+
return toLabel(row);
|
|
87
|
+
},
|
|
88
|
+
async updateLabel(tx, workspaceId, labelId, patch) {
|
|
89
|
+
const existing = await this.labelRow(tx, workspaceId, labelId);
|
|
90
|
+
const name = patch.name?.trim();
|
|
91
|
+
if (patch.name !== undefined && !name)
|
|
92
|
+
throw KernError.badRequest('A label needs a name');
|
|
93
|
+
if (name)
|
|
94
|
+
await this.refuseDuplicate(tx, workspaceId, existing.spaceId, name, labelId);
|
|
95
|
+
const [row] = await tx
|
|
96
|
+
.update(labels)
|
|
97
|
+
.set({ ...(name ? { name } : {}), ...(patch.colour ? { colour: patch.colour } : {}) })
|
|
98
|
+
.where(and(eq(labels.workspaceId, workspaceId), eq(labels.id, labelId)))
|
|
99
|
+
.returning();
|
|
100
|
+
if (!row)
|
|
101
|
+
throw KernError.notFound('Label');
|
|
102
|
+
return toLabel(row);
|
|
103
|
+
},
|
|
104
|
+
/**
|
|
105
|
+
* Gone, and off every page that wore it.
|
|
106
|
+
*
|
|
107
|
+
* There is no foreign key to cascade through, so leaving the join rows would leave every page
|
|
108
|
+
* that wore this label carrying a tag nothing can name — invisible in a picker, undeletable, and
|
|
109
|
+
* ready to reappear the day a new label is minted with the same id, which uuidv7 will not do but
|
|
110
|
+
* is the wrong thing to be relying on.
|
|
111
|
+
*/
|
|
112
|
+
async removeLabel(tx, workspaceId, labelId) {
|
|
113
|
+
await this.labelRow(tx, workspaceId, labelId);
|
|
114
|
+
await tx
|
|
115
|
+
.delete(pageLabels)
|
|
116
|
+
.where(and(eq(pageLabels.workspaceId, workspaceId), eq(pageLabels.labelId, labelId)));
|
|
117
|
+
await tx.delete(labels).where(and(eq(labels.workspaceId, workspaceId), eq(labels.id, labelId)));
|
|
118
|
+
},
|
|
119
|
+
/**
|
|
120
|
+
* The unique index is on `lower(name)`, so this asks the same question the index would answer.
|
|
121
|
+
*
|
|
122
|
+
* Checked here as well as enforced there because the index's answer is a raw `23505` — a 500 to
|
|
123
|
+
* whoever typed the name, rather than "there is already one of those".
|
|
124
|
+
*/
|
|
125
|
+
async refuseDuplicate(tx, workspaceId, spaceId, name, exceptId) {
|
|
126
|
+
const [clash] = await tx
|
|
127
|
+
.select({ id: labels.id })
|
|
128
|
+
.from(labels)
|
|
129
|
+
.where(and(eq(labels.workspaceId, workspaceId), eq(labels.spaceId, spaceId), sql `lower(${labels.name}) = lower(${name})`, exceptId ? ne(labels.id, exceptId) : undefined))
|
|
130
|
+
.limit(1);
|
|
131
|
+
if (clash)
|
|
132
|
+
throw KernError.conflict(`This space already has a label called "${name}"`);
|
|
133
|
+
},
|
|
134
|
+
async labelsForPage(tx, workspaceId, pageId) {
|
|
135
|
+
const rows = await tx
|
|
136
|
+
.select({
|
|
137
|
+
id: labels.id,
|
|
138
|
+
workspaceId: labels.workspaceId,
|
|
139
|
+
spaceId: labels.spaceId,
|
|
140
|
+
name: labels.name,
|
|
141
|
+
colour: labels.colour,
|
|
142
|
+
createdAt: labels.createdAt,
|
|
143
|
+
})
|
|
144
|
+
.from(pageLabels)
|
|
145
|
+
.innerJoin(labels, and(eq(labels.workspaceId, pageLabels.workspaceId), eq(labels.id, pageLabels.labelId)))
|
|
146
|
+
.where(and(eq(pageLabels.workspaceId, workspaceId), eq(pageLabels.pageId, pageId)))
|
|
147
|
+
.orderBy(asc(labels.name));
|
|
148
|
+
return rows.map(toLabel);
|
|
149
|
+
},
|
|
150
|
+
/**
|
|
151
|
+
* Replace what the page wears with exactly this set.
|
|
152
|
+
*
|
|
153
|
+
* Delete-then-insert inside the caller's transaction, rather than working out a difference: the
|
|
154
|
+
* set is at most fifty ids and the difference is the part that gets a duplicate wrong. Every id
|
|
155
|
+
* has to name a label of *this page's own space* — a label belongs to a space, so accepting one
|
|
156
|
+
* from elsewhere would put another team's vocabulary on this page and leave a picker showing a
|
|
157
|
+
* tag it has no entry for.
|
|
158
|
+
*/
|
|
159
|
+
async setLabels(tx, workspaceId, pageId, spaceId, labelIds) {
|
|
160
|
+
const wanted = [...new Set(labelIds)];
|
|
161
|
+
if (wanted.length > 0) {
|
|
162
|
+
const found = await tx
|
|
163
|
+
.select({ id: labels.id })
|
|
164
|
+
.from(labels)
|
|
165
|
+
.where(and(eq(labels.workspaceId, workspaceId), eq(labels.spaceId, spaceId), inArray(labels.id, wanted)));
|
|
166
|
+
if (found.length !== wanted.length)
|
|
167
|
+
throw KernError.badRequest('Every label has to be one this space declares');
|
|
168
|
+
}
|
|
169
|
+
await tx
|
|
170
|
+
.delete(pageLabels)
|
|
171
|
+
.where(and(eq(pageLabels.workspaceId, workspaceId), eq(pageLabels.pageId, pageId)));
|
|
172
|
+
if (wanted.length > 0)
|
|
173
|
+
await tx
|
|
174
|
+
.insert(pageLabels)
|
|
175
|
+
.values(wanted.map((labelId) => ({ workspaceId, pageId, labelId })))
|
|
176
|
+
.onConflictDoNothing();
|
|
177
|
+
return this.labelsForPage(tx, workspaceId, pageId);
|
|
178
|
+
},
|
|
179
|
+
/**
|
|
180
|
+
* This person's favourites, in the order they arranged them.
|
|
181
|
+
*
|
|
182
|
+
* `eq(favorites.userId, userId)` is the privacy boundary — see the note at the top of the file.
|
|
183
|
+
*/
|
|
184
|
+
async listFavorites(tx, principal, workspaceId, userId) {
|
|
185
|
+
const rows = await tx
|
|
186
|
+
.select({
|
|
187
|
+
workspaceId: favorites.workspaceId,
|
|
188
|
+
userId: favorites.userId,
|
|
189
|
+
pageId: favorites.pageId,
|
|
190
|
+
position: favorites.position,
|
|
191
|
+
createdAt: favorites.createdAt,
|
|
192
|
+
...pageBits,
|
|
193
|
+
})
|
|
194
|
+
.from(favorites)
|
|
195
|
+
.innerJoin(pages, and(eq(pages.workspaceId, favorites.workspaceId), eq(pages.id, favorites.pageId)))
|
|
196
|
+
.where(and(eq(favorites.workspaceId, workspaceId), eq(favorites.userId, userId), isNull(pages.deletedAt)))
|
|
197
|
+
.orderBy(asc(favorites.position));
|
|
198
|
+
return (await readable(tx, principal, workspaceId, rows)).map((row) => ({
|
|
199
|
+
workspaceId: row.workspaceId,
|
|
200
|
+
userId: row.userId,
|
|
201
|
+
pageId: row.pageId,
|
|
202
|
+
position: row.position,
|
|
203
|
+
createdAt: row.createdAt.toISOString(),
|
|
204
|
+
spaceId: row.spaceId,
|
|
205
|
+
title: row.title,
|
|
206
|
+
icon: row.icon,
|
|
207
|
+
kind: row.kind,
|
|
208
|
+
}));
|
|
209
|
+
},
|
|
210
|
+
/**
|
|
211
|
+
* Star a page. Lands at the end of the list, and starring one twice is the same star.
|
|
212
|
+
*
|
|
213
|
+
* Idempotent on purpose: `disabled={mutation.isPending}` reaches the button a render late, so
|
|
214
|
+
* two quick clicks are two requests, and the second one must not be an error the person sees.
|
|
215
|
+
*/
|
|
216
|
+
async addFavorite(tx, workspaceId, userId, pageId) {
|
|
217
|
+
const existing = await ordered(tx, workspaceId, userId);
|
|
218
|
+
if (existing.some((row) => row.pageId === pageId))
|
|
219
|
+
return;
|
|
220
|
+
const position = rankBetween(existing.at(-1)?.position ?? null, null);
|
|
221
|
+
await tx.insert(favorites).values({ workspaceId, userId, pageId, position }).onConflictDoNothing();
|
|
222
|
+
},
|
|
223
|
+
/** Only ever your own: without `userId` this deletes whoever else starred the same page. */
|
|
224
|
+
async removeFavorite(tx, workspaceId, userId, pageId) {
|
|
225
|
+
await tx
|
|
226
|
+
.delete(favorites)
|
|
227
|
+
.where(and(eq(favorites.workspaceId, workspaceId), eq(favorites.userId, userId), eq(favorites.pageId, pageId)));
|
|
228
|
+
},
|
|
229
|
+
/** `afterId` is the favourite to land behind; null means first. Only this person's list moves. */
|
|
230
|
+
async reorderFavorite(tx, workspaceId, userId, pageId, afterId) {
|
|
231
|
+
const all = await ordered(tx, workspaceId, userId);
|
|
232
|
+
if (!all.some((row) => row.pageId === pageId))
|
|
233
|
+
throw KernError.notFound('Favourite');
|
|
234
|
+
const rest = all.filter((row) => row.pageId !== pageId);
|
|
235
|
+
let position;
|
|
236
|
+
if (afterId === null)
|
|
237
|
+
position = rankBetween(null, rest[0]?.position ?? null);
|
|
238
|
+
else {
|
|
239
|
+
const at = rest.findIndex((row) => row.pageId === afterId);
|
|
240
|
+
if (at < 0)
|
|
241
|
+
throw KernError.badRequest('afterId is not one of your favourites');
|
|
242
|
+
position = rankBetween(rest[at].position, rest[at + 1]?.position ?? null);
|
|
243
|
+
}
|
|
244
|
+
await tx
|
|
245
|
+
.update(favorites)
|
|
246
|
+
.set({ position })
|
|
247
|
+
.where(and(eq(favorites.workspaceId, workspaceId), eq(favorites.userId, userId), eq(favorites.pageId, pageId)));
|
|
248
|
+
},
|
|
249
|
+
/**
|
|
250
|
+
* Who is watching this page, and whether you are among them.
|
|
251
|
+
*
|
|
252
|
+
* The list is not filtered to the caller: unlike a favourite, a watch is a fact about the page
|
|
253
|
+
* that everyone who can read the page can see — it is what a "3 people are watching" line beside
|
|
254
|
+
* the button is drawn from.
|
|
255
|
+
*/
|
|
256
|
+
async watchState(tx, workspaceId, pageId, userId) {
|
|
257
|
+
const rows = await tx
|
|
258
|
+
.select({ userId: watchers.userId })
|
|
259
|
+
.from(watchers)
|
|
260
|
+
.where(and(eq(watchers.workspaceId, workspaceId), eq(watchers.pageId, pageId)))
|
|
261
|
+
.orderBy(asc(watchers.userId));
|
|
262
|
+
return {
|
|
263
|
+
watching: rows.some((row) => row.userId === userId),
|
|
264
|
+
watchers: rows.map((row) => row.userId),
|
|
265
|
+
};
|
|
266
|
+
},
|
|
267
|
+
async setWatching(tx, workspaceId, pageId, userId, watching) {
|
|
268
|
+
if (watching)
|
|
269
|
+
await tx.insert(watchers).values({ workspaceId, userId, pageId }).onConflictDoNothing();
|
|
270
|
+
else
|
|
271
|
+
await tx
|
|
272
|
+
.delete(watchers)
|
|
273
|
+
.where(and(eq(watchers.workspaceId, workspaceId), eq(watchers.userId, userId), eq(watchers.pageId, pageId)));
|
|
274
|
+
return this.watchState(tx, workspaceId, pageId, userId);
|
|
275
|
+
},
|
|
276
|
+
/**
|
|
277
|
+
* Where this person has just been, newest first.
|
|
278
|
+
*
|
|
279
|
+
* Over-fetched before the permission filter and sliced after it: filtering a page of exactly
|
|
280
|
+
* `limit` rows would hand back four entries when six of the ten most recent are pages somebody
|
|
281
|
+
* has since been shut out of, and the older ones they can still read would never appear. The
|
|
282
|
+
* over-fetch is bounded so a denied stretch costs one wider query rather than a scan.
|
|
283
|
+
*/
|
|
284
|
+
async listRecents(tx, principal, workspaceId, userId, limit) {
|
|
285
|
+
const rows = await tx
|
|
286
|
+
.select({
|
|
287
|
+
workspaceId: recentViews.workspaceId,
|
|
288
|
+
userId: recentViews.userId,
|
|
289
|
+
pageId: recentViews.pageId,
|
|
290
|
+
viewedAt: recentViews.viewedAt,
|
|
291
|
+
...pageBits,
|
|
292
|
+
})
|
|
293
|
+
.from(recentViews)
|
|
294
|
+
.innerJoin(pages, and(eq(pages.workspaceId, recentViews.workspaceId), eq(pages.id, recentViews.pageId)))
|
|
295
|
+
.where(and(eq(recentViews.workspaceId, workspaceId), eq(recentViews.userId, userId), isNull(pages.deletedAt)))
|
|
296
|
+
.orderBy(desc(recentViews.viewedAt))
|
|
297
|
+
.limit(Math.min(limit * 3, 150));
|
|
298
|
+
return (await readable(tx, principal, workspaceId, rows)).slice(0, limit).map((row) => ({
|
|
299
|
+
workspaceId: row.workspaceId,
|
|
300
|
+
userId: row.userId,
|
|
301
|
+
pageId: row.pageId,
|
|
302
|
+
viewedAt: row.viewedAt.toISOString(),
|
|
303
|
+
spaceId: row.spaceId,
|
|
304
|
+
title: row.title,
|
|
305
|
+
icon: row.icon,
|
|
306
|
+
kind: row.kind,
|
|
307
|
+
}));
|
|
308
|
+
},
|
|
309
|
+
/** One row per person per page, bumped rather than appended — re-opening moves it up the list. */
|
|
310
|
+
async recordRecent(tx, workspaceId, userId, pageId) {
|
|
311
|
+
const viewedAt = new Date();
|
|
312
|
+
await tx
|
|
313
|
+
.insert(recentViews)
|
|
314
|
+
.values({ workspaceId, userId, pageId, viewedAt })
|
|
315
|
+
.onConflictDoUpdate({ target: [recentViews.userId, recentViews.pageId], set: { viewedAt } });
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=organisation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organisation.js","sourceRoot":"","sources":["../../../src/server/services/organisation.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,22 @@ export declare function quirePages(access: QuireAccess): {
|
|
|
37
37
|
archivedAt: string | null;
|
|
38
38
|
deletedAt: string | null;
|
|
39
39
|
}>;
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* What is in the space's trash, filtered to what this person may actually read.
|
|
42
|
+
*
|
|
43
|
+
* The procedure is space-scoped — you reach the screen by being allowed to edit *somewhere* in
|
|
44
|
+
* the space — so without a second, narrower question every row here is a title handed to
|
|
45
|
+
* whoever can open the screen, including the pages a page-scoped DENY closed to them. That is
|
|
46
|
+
* a real leak rather than a tidiness point: `pages.get`, `pages.restore` and `pages.purge` are
|
|
47
|
+
* all page-scoped, so an unfiltered row names a page its reader can neither open, put back nor
|
|
48
|
+
* delete. It exists only to say what it was called.
|
|
49
|
+
*
|
|
50
|
+
* The check is `quire.page.view`, the permission that governs seeing a title, and it is asked
|
|
51
|
+
* per page rather than per space — the same rule `favorites.list` and `recents.list` follow.
|
|
52
|
+
* The cursor is taken from the window *before* filtering, so removing a row cannot make the
|
|
53
|
+
* next page skip one.
|
|
54
|
+
*/
|
|
55
|
+
trash(tx: Tx, principal: Principal, workspaceId: string, spaceId: string, limit: number, cursor: string | null): Promise<{
|
|
41
56
|
items: {
|
|
42
57
|
id: string;
|
|
43
58
|
workspaceId: string & import("zod").$brand<"WorkspaceId">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../src/server/services/pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,EAAa,KAAK,EAAE,EAAU,MAAM,gBAAgB,CAAA;AAG3D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC,YAAY,CAAA;AAExC,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,GAAG,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAO/E;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAoBzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../src/server/services/pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,EAAa,KAAK,EAAE,EAAU,MAAM,gBAAgB,CAAA;AAG3D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC,YAAY,CAAA;AAExC,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,GAAG,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAO/E;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAoBzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW;IAmF1C;;;;;OAKG;aACY,EAAE,eAAe,MAAM,WAAW,MAAM,mBAAmB,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YA6CzF,EAAE,eAAe,MAAM,UAAU,MAAM;;;;;;;;;;;;;;;;;;;IAIrD;;;;;;;;;;;;;;OAcG;cAEG,EAAE,aACK,SAAS,eACP,MAAM,WACV,MAAM,SACR,MAAM,UACL,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;eAsBjB,EAAE,aACK,SAAS,eACP,MAAM,SACZ;QACL,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KACvB;;;;;;;;;;;;;;;;;;;eA2BG,EAAE,aACK,SAAS,eACP,MAAM,UACX,MAAM,SACP,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;;;;;;;;;;;;;;;;;;;IAWvE;;;;;;OAMG;aAEG,EAAE,aACK,SAAS,eACP,MAAM,UACX,MAAM,YACJ,MAAM,GAAG,IAAI,WACd,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;gBAqBN,EAAE,aAAa,SAAS,eAAe,MAAM,UAAU,MAAM,YAAY,OAAO;;;;;;;;;;;;;;;;;;;IAclG,iFAAiF;mBAC5D,EAAE,eAAe,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAehF,0FAA0F;kBACtE,EAAE,eAAe,MAAM,UAAU,MAAM;;;IAU3D;;;OAGG;gBACe,EAAE,eAAe,MAAM,UAAU,MAAM;;;;;;;;;;;;;;;;;;;IA0BzD,kFAAkF;cAClE,EAAE,eAAe,MAAM,UAAU,MAAM;;;IAOvD,gFAAgF;;EAGnF;AACD,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA"}
|