canopycms 0.0.52 → 0.0.54

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 (49) hide show
  1. package/dist/ai/generate.d.ts.map +1 -1
  2. package/dist/ai/generate.js +68 -2
  3. package/dist/ai/generate.js.map +1 -1
  4. package/dist/ai/index.d.ts +1 -1
  5. package/dist/ai/index.d.ts.map +1 -1
  6. package/dist/ai/json-to-markdown.d.ts.map +1 -1
  7. package/dist/ai/json-to-markdown.js +87 -0
  8. package/dist/ai/json-to-markdown.js.map +1 -1
  9. package/dist/ai/types.d.ts +54 -0
  10. package/dist/ai/types.d.ts.map +1 -1
  11. package/dist/ai/types.js.map +1 -1
  12. package/dist/api/entries.d.ts.map +1 -1
  13. package/dist/api/entries.js +36 -31
  14. package/dist/api/entries.js.map +1 -1
  15. package/dist/api/reference-options.d.ts.map +1 -1
  16. package/dist/api/reference-options.js +5 -2
  17. package/dist/api/reference-options.js.map +1 -1
  18. package/dist/api/resolve-references.d.ts.map +1 -1
  19. package/dist/api/resolve-references.js +6 -1
  20. package/dist/api/resolve-references.js.map +1 -1
  21. package/dist/authorization/content.d.ts +22 -0
  22. package/dist/authorization/content.d.ts.map +1 -1
  23. package/dist/authorization/content.js +36 -14
  24. package/dist/authorization/content.js.map +1 -1
  25. package/dist/authorization/index.d.ts +1 -1
  26. package/dist/authorization/index.d.ts.map +1 -1
  27. package/dist/authorization/index.js +1 -1
  28. package/dist/authorization/index.js.map +1 -1
  29. package/dist/authorization/test-utils.d.ts +13 -1
  30. package/dist/authorization/test-utils.d.ts.map +1 -1
  31. package/dist/authorization/test-utils.js +10 -0
  32. package/dist/authorization/test-utils.js.map +1 -1
  33. package/dist/cli/generate-ai-content.js +140 -40
  34. package/dist/editor/Editor.d.ts.map +1 -1
  35. package/dist/editor/Editor.js +8 -4
  36. package/dist/editor/Editor.js.map +1 -1
  37. package/dist/editor/EntryNavigator.d.ts +2 -0
  38. package/dist/editor/EntryNavigator.d.ts.map +1 -1
  39. package/dist/editor/EntryNavigator.js +3 -3
  40. package/dist/editor/EntryNavigator.js.map +1 -1
  41. package/dist/editor/hooks/useEntryManager.d.ts +2 -0
  42. package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
  43. package/dist/editor/hooks/useEntryManager.js +23 -2
  44. package/dist/editor/hooks/useEntryManager.js.map +1 -1
  45. package/dist/services.d.ts +7 -1
  46. package/dist/services.d.ts.map +1 -1
  47. package/dist/services.js +6 -3
  48. package/dist/services.js.map +1 -1
  49. package/package.json +1 -1
@@ -69,13 +69,16 @@ const getReferenceOptionsHandler = async (gc, ctx, req, _params) => {
69
69
  // Load reference options
70
70
  const resolver = new ReferenceResolver(store, idIndex);
71
71
  const allOptions = await resolver.loadReferenceOptions(collections, displayField, search, entryTypes);
72
- // Filter by path-level read permissions
72
+ // Filter by path-level read permissions. Build the access checker once so
73
+ // permissions are loaded a single time and reused for every option, instead of
74
+ // re-loading per option inside the loop.
75
+ const checkAccess = await ctx.services.createContentAccessChecker(branchContext, branchContext.branchRoot, req.user);
73
76
  const options = [];
74
77
  for (const option of allOptions) {
75
78
  const location = idIndex.findById(option.id);
76
79
  if (!location)
77
80
  continue;
78
- const access = await ctx.services.checkContentAccess(branchContext, branchContext.branchRoot, location.relativePath, req.user, 'read');
81
+ const access = checkAccess(location.relativePath, 'read');
79
82
  if (!access.allowed)
80
83
  continue;
81
84
  options.push(option);
@@ -1 +1 @@
1
- {"version":3,"file":"reference-options.js","sourceRoot":"","sources":["../../src/api/reference-options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reference-options.js","sourceRoot":"","sources":["../../src/api/reference-options.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-references.d.ts","sourceRoot":"","sources":["../../src/api/resolve-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAA0B,WAAW,EAAE,MAAM,SAAS,CAAA;AAOlE,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,EAAE,CAAA;CACd;AAED,4CAA4C;AAC5C,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC,CAAC,CAAA;AAgGF;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;CAE5B,CAAA"}
1
+ {"version":3,"file":"resolve-references.d.ts","sourceRoot":"","sources":["../../src/api/resolve-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAA0B,WAAW,EAAE,MAAM,SAAS,CAAA;AAOlE,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,EAAE,CAAA;CACd;AAED,4CAA4C;AAC5C,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC,CAAC,CAAA;AAoGF;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;CAE5B,CAAA"}
@@ -21,6 +21,11 @@ const resolveReferencesHandler = async (gc, ctx, req, params, body) => {
21
21
  const idIndex = await store.idIndex();
22
22
  // Resolve each ID to full document
23
23
  const resolver = new ReferenceResolver(store, idIndex);
24
+ // Build the access checker once: permissions are loaded a single time and reused
25
+ // for every id, instead of re-loading per id inside the loop. A failure here
26
+ // (e.g. settings workspace unavailable) surfaces as a handler error rather than
27
+ // being silently swallowed per id.
28
+ const checkAccess = await ctx.services.createContentAccessChecker(branchContext, branchContext.branchRoot, req.user);
24
29
  const resolved = {};
25
30
  for (const id of ids) {
26
31
  try {
@@ -28,7 +33,7 @@ const resolveReferencesHandler = async (gc, ctx, req, params, body) => {
28
33
  if (result && result.exists && result.collection && result.slug) {
29
34
  // Check path-level read permission before returning content
30
35
  const resolvedPath = await store.resolveDocumentPath(result.collection, result.slug);
31
- const access = await ctx.services.checkContentAccess(branchContext, branchContext.branchRoot, resolvedPath.relativePath, req.user, 'read');
36
+ const access = checkAccess(resolvedPath.relativePath, 'read');
32
37
  if (!access.allowed)
33
38
  continue;
34
39
  const doc = await store.read(result.collection, result.slug);
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-references.js","sourceRoot":"","sources":["../../src/api/resolve-references.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-references.js","sourceRoot":"","sources":["../../src/api/resolve-references.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,28 @@ import type { PermissionLevel } from '../config';
19
19
  import type { CanopyUser } from '../user';
20
20
  import type { ContentAccessResult, ContentAccessDeps } from './types';
21
21
  import type { PhysicalPath } from '../paths/types';
22
+ /**
23
+ * A bound content-access checker: evaluates a single path/level synchronously
24
+ * against permissions that were already loaded when the checker was created.
25
+ */
26
+ export type ContentAccessChecker = (relativePath: PhysicalPath, level: PermissionLevel) => ContentAccessResult;
27
+ /**
28
+ * Create a content-access checker that resolves the request-constant work once
29
+ * (branch access, the settings/permissions root, and the path-permission rules)
30
+ * and returns a synchronous per-path checker.
31
+ *
32
+ * Branch access, the resolved permissions root, and the loaded rules are identical
33
+ * for a fixed `(context, branchRoot, user)`, so hoisting them out of the per-path
34
+ * check avoids re-reading the permissions file (and, in modes with a separate
35
+ * settings branch, re-ensuring the settings workspace) for every entry. This is
36
+ * the batch primitive used by listing endpoints that check many paths per request.
37
+ *
38
+ * @param deps - Dependencies including branch access checker and path permissions loader
39
+ * @param context - Branch context containing branch metadata
40
+ * @param branchRoot - Root directory of the branch
41
+ * @param user - User to check access for
42
+ */
43
+ export declare function createContentAccessChecker(deps: ContentAccessDeps, context: BranchContext, branchRoot: string, user: CanopyUser): Promise<ContentAccessChecker>;
22
44
  /**
23
45
  * Check content access by evaluating both branch and path permissions.
24
46
  * Path permissions are loaded dynamically from the branch root.
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/authorization/content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,mBAAmB,CAAC,CAmC9B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,iBAAiB,IAE5D,SAAS,aAAa,EACtB,YAAY,MAAM,EAClB,cAAc,YAAY,EAC1B,MAAM,UAAU,EAChB,OAAO,eAAe,KACrB,OAAO,CAAC,mBAAmB,CAAC,CAEhC"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/authorization/content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,eAAe,KACnB,mBAAmB,CAAA;AAExB;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,oBAAoB,CAAC,CAqC/B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,mBAAmB,CAAC,CAG9B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,iBAAiB,IAE5D,SAAS,aAAa,EACtB,YAAY,MAAM,EAClB,cAAc,YAAY,EAC1B,MAAM,UAAU,EAChB,OAAO,eAAe,KACrB,OAAO,CAAC,mBAAmB,CAAC,CAEhC"}
@@ -17,17 +17,22 @@
17
17
  import { operatingStrategy } from '../operating-mode/index.js';
18
18
  import { createCheckPathAccess } from './path.js';
19
19
  /**
20
- * Check content access by evaluating both branch and path permissions.
21
- * Path permissions are loaded dynamically from the branch root.
20
+ * Create a content-access checker that resolves the request-constant work once
21
+ * (branch access, the settings/permissions root, and the path-permission rules)
22
+ * and returns a synchronous per-path checker.
23
+ *
24
+ * Branch access, the resolved permissions root, and the loaded rules are identical
25
+ * for a fixed `(context, branchRoot, user)`, so hoisting them out of the per-path
26
+ * check avoids re-reading the permissions file (and, in modes with a separate
27
+ * settings branch, re-ensuring the settings workspace) for every entry. This is
28
+ * the batch primitive used by listing endpoints that check many paths per request.
22
29
  *
23
30
  * @param deps - Dependencies including branch access checker and path permissions loader
24
31
  * @param context - Branch context containing branch metadata
25
32
  * @param branchRoot - Root directory of the branch
26
- * @param relativePath - Physical path relative to branch root (with embedded IDs)
27
33
  * @param user - User to check access for
28
- * @param level - Permission level to check ('read', 'edit', or 'review')
29
34
  */
30
- export async function checkContentAccess(deps, context, branchRoot, relativePath, user, level) {
35
+ export async function createContentAccessChecker(deps, context, branchRoot, user) {
31
36
  const branch = deps.checkBranchAccess(context, user);
32
37
  // Load permissions from appropriate location based on operating mode
33
38
  // Modes with separate settings branch: load from settings branch
@@ -45,17 +50,34 @@ export async function checkContentAccess(deps, context, branchRoot, relativePath
45
50
  }
46
51
  const rules = await deps.loadPathPermissions(permissionsRoot, deps.mode);
47
52
  const pathChecker = createCheckPathAccess(rules, deps.defaultPathAccess);
48
- const path = pathChecker({
49
- relativePath,
50
- user,
51
- level,
52
- });
53
- return {
54
- allowed: branch.allowed && path.allowed,
55
- branch,
56
- path,
53
+ return (relativePath, level) => {
54
+ const path = pathChecker({
55
+ relativePath,
56
+ user,
57
+ level,
58
+ });
59
+ return {
60
+ allowed: branch.allowed && path.allowed,
61
+ branch,
62
+ path,
63
+ };
57
64
  };
58
65
  }
66
+ /**
67
+ * Check content access by evaluating both branch and path permissions.
68
+ * Path permissions are loaded dynamically from the branch root.
69
+ *
70
+ * @param deps - Dependencies including branch access checker and path permissions loader
71
+ * @param context - Branch context containing branch metadata
72
+ * @param branchRoot - Root directory of the branch
73
+ * @param relativePath - Physical path relative to branch root (with embedded IDs)
74
+ * @param user - User to check access for
75
+ * @param level - Permission level to check ('read', 'edit', or 'review')
76
+ */
77
+ export async function checkContentAccess(deps, context, branchRoot, relativePath, user, level) {
78
+ const check = await createContentAccessChecker(deps, context, branchRoot, user);
79
+ return check(relativePath, level);
80
+ }
59
81
  /**
60
82
  * Create a content access checker with bound dependencies.
61
83
  */
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/authorization/content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAI9C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAuB,EACvB,OAAsB,EACtB,UAAkB,EAClB,YAA0B,EAC1B,IAAgB,EAChB,KAAsB;IAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAEpD,qEAAqE;IACrE,iEAAiE;IACjE,4CAA4C;IAC5C,IAAI,eAAe,GAAG,UAAU,CAAA;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IACtB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAExC,IAAI,QAAQ,CAAC,0BAA0B,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAA;QACH,CAAC;QACD,yEAAyE;QACzE,iFAAiF;QACjF,eAAe,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;IACtD,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IACxE,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAExE,MAAM,IAAI,GAAG,WAAW,CAAC;QACvB,YAAY;QACZ,IAAI;QACJ,KAAK;KACN,CAAC,CAAA;IAEF,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;QACvC,MAAM;QACN,IAAI;KACL,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAuB;IAC9D,OAAO,CACL,OAAsB,EACtB,UAAkB,EAClB,YAA0B,EAC1B,IAAgB,EAChB,KAAsB,EACQ,EAAE,CAChC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAC5E,CAAC"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/authorization/content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAa9C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAuB,EACvB,OAAsB,EACtB,UAAkB,EAClB,IAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAEpD,qEAAqE;IACrE,iEAAiE;IACjE,4CAA4C;IAC5C,IAAI,eAAe,GAAG,UAAU,CAAA;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IACtB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAExC,IAAI,QAAQ,CAAC,0BAA0B,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAA;QACH,CAAC;QACD,yEAAyE;QACzE,iFAAiF;QACjF,eAAe,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;IACtD,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IACxE,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAExE,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,WAAW,CAAC;YACvB,YAAY;YACZ,IAAI;YACJ,KAAK;SACN,CAAC,CAAA;QAEF,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YACvC,MAAM;YACN,IAAI;SACL,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAuB,EACvB,OAAsB,EACtB,UAAkB,EAClB,YAA0B,EAC1B,IAAgB,EAChB,KAAsB;IAEtB,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAC/E,OAAO,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAuB;IAC9D,OAAO,CACL,OAAsB,EACtB,UAAkB,EAClB,YAA0B,EAC1B,IAAgB,EAChB,KAAsB,EACQ,EAAE,CAChC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAC5E,CAAC"}
@@ -27,7 +27,7 @@
27
27
  */
28
28
  export type { BranchAccessResult, PathPermissionResult, ContentAccessResult, ContentAccessDeps, PermissionPath, } from './types';
29
29
  export { parsePermissionPath } from './validation';
30
- export { checkContentAccess, createCheckContentAccess } from './content';
30
+ export { checkContentAccess, createCheckContentAccess, createContentAccessChecker, type ContentAccessChecker, } from './content';
31
31
  export { checkBranchAccessWithDefault, createCheckBranchAccess, canPerformWorkflowAction, } from './branch';
32
32
  export { checkPathAccess, createCheckPathAccess } from './path';
33
33
  export { RESERVED_GROUPS, type ReservedGroupId, isReservedGroup, isAdmin, isReviewer, isPrivileged, } from './helpers';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GACf,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAGlD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAGxE,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAG/D,OAAO,EACL,eAAe,EACf,KAAK,eAAe,EACpB,eAAe,EACf,OAAO,EACP,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAGlB,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,KAAK,eAAe,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAGtB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GACf,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAGlD,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,0BAA0B,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,WAAW,CAAA;AAGlB,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAG/D,OAAO,EACL,eAAe,EACf,KAAK,eAAe,EACpB,eAAe,EACf,OAAO,EACP,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAGlB,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,KAAK,eAAe,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAGtB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,UAAU,CAAA"}
@@ -28,7 +28,7 @@
28
28
  // Validation
29
29
  export { parsePermissionPath } from './validation.js';
30
30
  // Main content access (recommended for most cases)
31
- export { checkContentAccess, createCheckContentAccess } from './content.js';
31
+ export { checkContentAccess, createCheckContentAccess, createContentAccessChecker, } from './content.js';
32
32
  // Branch-level access
33
33
  export { checkBranchAccessWithDefault, createCheckBranchAccess, canPerformWorkflowAction, } from './branch.js';
34
34
  // Path-level access
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAWH,aAAa;AACb,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,mDAAmD;AACnD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAExE,sBAAsB;AACtB,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,UAAU,CAAA;AAEjB,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAE/D,mBAAmB;AACnB,OAAO,EACL,eAAe,EAEf,eAAe,EACf,OAAO,EACP,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,4BAA4B;AAC5B,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAE5B,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAEtB,uBAAuB;AACvB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EAGvB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAWH,aAAa;AACb,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,mDAAmD;AACnD,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,0BAA0B,GAE3B,MAAM,WAAW,CAAA;AAElB,sBAAsB;AACtB,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,UAAU,CAAA;AAEjB,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAE/D,mBAAmB;AACnB,OAAO,EACL,eAAe,EAEf,eAAe,EACf,OAAO,EACP,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,4BAA4B;AAC5B,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAE5B,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAA;AAEtB,uBAAuB;AACvB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EAGvB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,UAAU,CAAA"}
@@ -8,7 +8,19 @@
8
8
  * // In test files only:
9
9
  * import { unsafeAsPermissionPath } from '../authorization/test-utils'
10
10
  */
11
- import type { PermissionPath } from './types';
11
+ import type { PermissionPath, ContentAccessDeps } from './types';
12
+ import type { BranchContext } from '../types';
13
+ import type { CanopyUser } from '../user';
14
+ import { createCheckContentAccess, type ContentAccessChecker } from './content';
12
15
  /** Test-only: cast a string to PermissionPath without validation. */
13
16
  export declare const unsafeAsPermissionPath: (path: string) => PermissionPath;
17
+ /**
18
+ * Test-only: build the single-call `checkContentAccess` and the batch
19
+ * `createContentAccessChecker` from one shared deps object, so tests can wire both
20
+ * into mock services without duplicating deps. Mirrors how `services.ts` binds them.
21
+ */
22
+ export declare const createTestContentAccess: (deps: ContentAccessDeps) => {
23
+ checkContentAccess: ReturnType<typeof createCheckContentAccess>;
24
+ createContentAccessChecker: (context: BranchContext, branchRoot: string, user: CanopyUser) => Promise<ContentAccessChecker>;
25
+ };
14
26
  //# sourceMappingURL=test-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/authorization/test-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,cAAwC,CAAA"}
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/authorization/test-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EACL,wBAAwB,EAExB,KAAK,oBAAoB,EAC1B,MAAM,WAAW,CAAA;AAElB,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,cAAwC,CAAA;AAE9F;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,MAAM,iBAAiB,KACtB;IACD,kBAAkB,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;IAC/D,0BAA0B,EAAE,CAC1B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,KACb,OAAO,CAAC,oBAAoB,CAAC,CAAA;CAKlC,CAAA"}
@@ -8,6 +8,16 @@
8
8
  * // In test files only:
9
9
  * import { unsafeAsPermissionPath } from '../authorization/test-utils.js'
10
10
  */
11
+ import { createCheckContentAccess, createContentAccessChecker, } from './content.js';
11
12
  /** Test-only: cast a string to PermissionPath without validation. */
12
13
  export const unsafeAsPermissionPath = (path) => path;
14
+ /**
15
+ * Test-only: build the single-call `checkContentAccess` and the batch
16
+ * `createContentAccessChecker` from one shared deps object, so tests can wire both
17
+ * into mock services without duplicating deps. Mirrors how `services.ts` binds them.
18
+ */
19
+ export const createTestContentAccess = (deps) => ({
20
+ checkContentAccess: createCheckContentAccess(deps),
21
+ createContentAccessChecker: (context, branchRoot, user) => createContentAccessChecker(deps, context, branchRoot, user),
22
+ });
13
23
  //# sourceMappingURL=test-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/authorization/test-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,qEAAqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAkB,EAAE,CAAC,IAAsB,CAAA"}
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/authorization/test-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAE3B,MAAM,WAAW,CAAA;AAElB,qEAAqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAkB,EAAE,CAAC,IAAsB,CAAA;AAE9F;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,IAAuB,EAQvB,EAAE,CAAC,CAAC;IACJ,kBAAkB,EAAE,wBAAwB,CAAC,IAAI,CAAC;IAClD,0BAA0B,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CACxD,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC;CAC9D,CAAC,CAAA"}