@kernhq/module-quire 0.2.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 (72) hide show
  1. package/LICENSE +662 -0
  2. package/README.md +71 -0
  3. package/dist/client/rank.d.ts +42 -0
  4. package/dist/client/rank.d.ts.map +1 -0
  5. package/dist/client/rank.js +97 -0
  6. package/dist/client/rank.js.map +1 -0
  7. package/dist/contract/capabilities.d.ts +35 -0
  8. package/dist/contract/capabilities.d.ts.map +1 -0
  9. package/dist/contract/capabilities.js +35 -0
  10. package/dist/contract/capabilities.js.map +1 -0
  11. package/dist/contract/events.d.ts +58 -0
  12. package/dist/contract/events.d.ts.map +1 -0
  13. package/dist/contract/events.js +18 -0
  14. package/dist/contract/events.js.map +1 -0
  15. package/dist/contract/index.d.ts +6 -0
  16. package/dist/contract/index.d.ts.map +1 -0
  17. package/dist/contract/index.js +6 -0
  18. package/dist/contract/index.js.map +1 -0
  19. package/dist/contract/models.d.ts +95 -0
  20. package/dist/contract/models.d.ts.map +1 -0
  21. package/dist/contract/models.js +82 -0
  22. package/dist/contract/models.js.map +1 -0
  23. package/dist/contract/permissions.d.ts +51 -0
  24. package/dist/contract/permissions.d.ts.map +1 -0
  25. package/dist/contract/permissions.js +59 -0
  26. package/dist/contract/permissions.js.map +1 -0
  27. package/dist/contract/router.d.ts +713 -0
  28. package/dist/contract/router.d.ts.map +1 -0
  29. package/dist/contract/router.js +109 -0
  30. package/dist/contract/router.js.map +1 -0
  31. package/dist/server/_impl.d.ts +815 -0
  32. package/dist/server/_impl.d.ts.map +1 -0
  33. package/dist/server/_impl.js +189 -0
  34. package/dist/server/_impl.js.map +1 -0
  35. package/dist/server/index.d.ts +3 -0
  36. package/dist/server/index.d.ts.map +1 -0
  37. package/dist/server/index.js +87 -0
  38. package/dist/server/index.js.map +1 -0
  39. package/dist/server/schema.d.ts +540 -0
  40. package/dist/server/schema.d.ts.map +1 -0
  41. package/dist/server/schema.js +86 -0
  42. package/dist/server/schema.js.map +1 -0
  43. package/dist/server/services/access.d.ts +78 -0
  44. package/dist/server/services/access.d.ts.map +1 -0
  45. package/dist/server/services/access.js +96 -0
  46. package/dist/server/services/access.js.map +1 -0
  47. package/dist/server/services/index.d.ts +15 -0
  48. package/dist/server/services/index.d.ts.map +1 -0
  49. package/dist/server/services/index.js +22 -0
  50. package/dist/server/services/index.js.map +1 -0
  51. package/dist/server/services/pages.d.ts +190 -0
  52. package/dist/server/services/pages.d.ts.map +1 -0
  53. package/dist/server/services/pages.js +242 -0
  54. package/dist/server/services/pages.js.map +1 -0
  55. package/dist/server/services/spaces.d.ts +95 -0
  56. package/dist/server/services/spaces.d.ts.map +1 -0
  57. package/dist/server/services/spaces.js +100 -0
  58. package/dist/server/services/spaces.js.map +1 -0
  59. package/migrations/0000_init.sql +43 -0
  60. package/migrations/0001_rls.sql +17 -0
  61. package/migrations/meta/0000_snapshot.json +358 -0
  62. package/migrations/meta/_journal.json +20 -0
  63. package/package.json +78 -0
  64. package/src/client/index.ts +67 -0
  65. package/src/client/rank.test.ts +92 -0
  66. package/src/client/rank.ts +100 -0
  67. package/src/contract/capabilities.ts +36 -0
  68. package/src/contract/events.ts +22 -0
  69. package/src/contract/index.ts +5 -0
  70. package/src/contract/models.ts +93 -0
  71. package/src/contract/permissions.ts +59 -0
  72. package/src/contract/router.ts +121 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * `<module>.<resource>.<action>`, each at the narrowest scope that works.
3
+ *
4
+ * Almost everything here is bound at **space** scope rather than workspace scope. That scope kind has
5
+ * existed in the permission model since before there was anything to use it, and this is what it was
6
+ * for: "everyone may read the Handbook, the design team may write it, and the contractor may read one
7
+ * page of it". Bindings resolve nearest-first, so a binding on a page beats one on its space, which
8
+ * beats one on the workspace — and a deny beats an allow at the same level.
9
+ */
10
+ export declare const quirePermissions: readonly [{
11
+ readonly key: "quire.space.view";
12
+ readonly label: "See a space";
13
+ readonly description: "Find the space and read its name, whatever its pages allow";
14
+ readonly scope: "space";
15
+ readonly defaultRoles: ["owner", "admin", "member", "guest"];
16
+ readonly dangerous: false;
17
+ }, {
18
+ readonly key: "quire.space.manage";
19
+ readonly label: "Create and configure spaces";
20
+ readonly description: "Rename, set the home page, change who may read it, archive it";
21
+ readonly scope: "space";
22
+ readonly defaultRoles: ["owner", "admin"];
23
+ readonly dangerous: false;
24
+ }, {
25
+ readonly key: "quire.page.view";
26
+ readonly label: "Read pages";
27
+ readonly scope: "space";
28
+ readonly defaultRoles: ["owner", "admin", "member", "guest"];
29
+ readonly dangerous: false;
30
+ }, {
31
+ readonly key: "quire.page.create";
32
+ readonly label: "Create pages";
33
+ readonly scope: "space";
34
+ readonly defaultRoles: ["owner", "admin", "member"];
35
+ readonly dangerous: false;
36
+ }, {
37
+ readonly key: "quire.page.edit";
38
+ readonly label: "Edit pages";
39
+ readonly description: "Write in a page, rename it, and move it in the tree";
40
+ readonly scope: "space";
41
+ readonly defaultRoles: ["owner", "admin", "member"];
42
+ readonly dangerous: false;
43
+ }, {
44
+ readonly key: "quire.page.delete";
45
+ readonly label: "Delete pages permanently";
46
+ readonly description: "Empty the trash. A purged page and its history cannot be recovered.";
47
+ readonly scope: "space";
48
+ readonly defaultRoles: ["owner", "admin"];
49
+ readonly dangerous: true;
50
+ }];
51
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/contract/permissions.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+C3B,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { definePermissions } from '@kernhq/contracts';
2
+ /**
3
+ * `<module>.<resource>.<action>`, each at the narrowest scope that works.
4
+ *
5
+ * Almost everything here is bound at **space** scope rather than workspace scope. That scope kind has
6
+ * existed in the permission model since before there was anything to use it, and this is what it was
7
+ * for: "everyone may read the Handbook, the design team may write it, and the contractor may read one
8
+ * page of it". Bindings resolve nearest-first, so a binding on a page beats one on its space, which
9
+ * beats one on the workspace — and a deny beats an allow at the same level.
10
+ */
11
+ export const quirePermissions = definePermissions([
12
+ {
13
+ key: 'quire.space.view',
14
+ label: 'See a space',
15
+ description: 'Find the space and read its name, whatever its pages allow',
16
+ scope: 'space',
17
+ defaultRoles: ['owner', 'admin', 'member', 'guest'],
18
+ dangerous: false,
19
+ },
20
+ {
21
+ key: 'quire.space.manage',
22
+ label: 'Create and configure spaces',
23
+ description: 'Rename, set the home page, change who may read it, archive it',
24
+ scope: 'space',
25
+ defaultRoles: ['owner', 'admin'],
26
+ dangerous: false,
27
+ },
28
+ {
29
+ key: 'quire.page.view',
30
+ label: 'Read pages',
31
+ scope: 'space',
32
+ defaultRoles: ['owner', 'admin', 'member', 'guest'],
33
+ dangerous: false,
34
+ },
35
+ {
36
+ key: 'quire.page.create',
37
+ label: 'Create pages',
38
+ scope: 'space',
39
+ defaultRoles: ['owner', 'admin', 'member'],
40
+ dangerous: false,
41
+ },
42
+ {
43
+ key: 'quire.page.edit',
44
+ label: 'Edit pages',
45
+ description: 'Write in a page, rename it, and move it in the tree',
46
+ scope: 'space',
47
+ defaultRoles: ['owner', 'admin', 'member'],
48
+ dangerous: false,
49
+ },
50
+ {
51
+ key: 'quire.page.delete',
52
+ label: 'Delete pages permanently',
53
+ description: 'Empty the trash. A purged page and its history cannot be recovered.',
54
+ scope: 'space',
55
+ defaultRoles: ['owner', 'admin'],
56
+ dangerous: true,
57
+ },
58
+ ]);
59
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/contract/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;IAChD;QACE,GAAG,EAAE,kBAAkB;QACvB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,4DAA4D;QACzE,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;QACnD,SAAS,EAAE,KAAK;KACjB;IACD;QACE,GAAG,EAAE,oBAAoB;QACzB,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,+DAA+D;QAC5E,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;QAChC,SAAS,EAAE,KAAK;KACjB;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;QACnD,SAAS,EAAE,KAAK;KACjB;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,KAAK,EAAE,cAAc;QACrB,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC1C,SAAS,EAAE,KAAK;KACjB;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,qDAAqD;QAClE,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC1C,SAAS,EAAE,KAAK;KACjB;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,qEAAqE;QAClF,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;QAChC,SAAS,EAAE,IAAI;KAChB;CACF,CAAC,CAAA"}