@trebired/frontend 6.14.1 → 6.15.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/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  All notable package changes are documented here.
4
4
 
5
+ ## 6.15.0
6
+
7
+ - Added a configurable server React permission-state builder so apps can keep permission scope policy in config while the package owns render-shell serialization.
8
+
5
9
  ## 6.14.1
6
10
 
7
11
  - Closed stale package modals and popovers before removing portaled overlay nodes during live DOM updates so overlay runtime state stays consistent.
@@ -14,6 +14,7 @@ export * from "./live-socket.js";
14
14
  export * from "./navigation.js";
15
15
  export * from "./page-task.js";
16
16
  export * from "./react/render.d.ts";
17
+ export * from "./react/permissions.js";
17
18
  export * from "./render/mode.js";
18
19
  export * from "./render/mode-toolkit.js";
19
20
  export * from "./security.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -14,6 +14,7 @@ export * from "./live-socket.js";
14
14
  export * from "./navigation.js";
15
15
  export * from "./page-task.js";
16
16
  export * from "./react/render.js";
17
+ export * from "./react/permissions.js";
17
18
  export * from "./render/mode.js";
18
19
  export * from "./render/mode-toolkit.js";
19
20
  export * from "./security.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,32 @@
1
+ type PermissionStateContext = {
2
+ res?: {
3
+ locals?: Record<string, unknown>;
4
+ };
5
+ shellInput?: {
6
+ permissionState?: Record<string, unknown>;
7
+ };
8
+ };
9
+ type PermissionStateScope = {
10
+ allOutputKey?: string;
11
+ allToken?: string;
12
+ key: string;
13
+ outputKey?: string;
14
+ viewerPath?: readonly string[];
15
+ };
16
+ type PermissionStateFlag = {
17
+ allScope?: string;
18
+ key: string;
19
+ permission?: string;
20
+ requireScope?: string;
21
+ };
22
+ type PermissionStateBuilderOptions = {
23
+ flags?: readonly PermissionStateFlag[];
24
+ requirePermissionLocalKey?: string;
25
+ scopes?: readonly PermissionStateScope[];
26
+ viewerLocalKey?: string;
27
+ };
28
+ declare function buildPermissionState(context: PermissionStateContext, options: PermissionStateBuilderOptions): Record<string, unknown>;
29
+ declare function createPermissionStateBuilder(options?: PermissionStateBuilderOptions): (context: PermissionStateContext) => Record<string, unknown>;
30
+ export { buildPermissionState, createPermissionStateBuilder };
31
+ export type { PermissionStateBuilderOptions, PermissionStateContext, PermissionStateFlag, PermissionStateScope, };
32
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../../src/server/react/permissions.ts"],"names":[],"mappings":"AAEA,KAAK,sBAAsB,GAAG;IAC5B,GAAG,CAAC,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;IACF,UAAU,CAAC,EAAE;QACX,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3C,CAAC;CACH,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,6BAA6B,GAAG;IACnC,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,MAAM,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAqFF,iBAAS,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,6BAA6B,2BAYpG;AAED,iBAAS,4BAA4B,CAAC,OAAO,GAAE,6BAAkC,IAMvE,SAAS,sBAAsB,6BACxC;AAED,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,CAAC;AAC9D,YAAY,EACV,6BAA6B,EAC7B,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { serverObject } from "../http.js";
2
+ function stringList(input) {
3
+ return Array.isArray(input)
4
+ ? input.map((item) => String(item == null ? "" : item).trim()).filter(Boolean)
5
+ : [];
6
+ }
7
+ function pathValue(input, path = []) {
8
+ let current = input;
9
+ for (const segment of path) {
10
+ current = serverObject(current)[segment];
11
+ }
12
+ return current;
13
+ }
14
+ function readLocal(context, key) {
15
+ return serverObject(context.res?.locals)[key];
16
+ }
17
+ function explicitPermissionState(context) {
18
+ const provided = context.shellInput?.permissionState;
19
+ return provided && typeof provided === "object"
20
+ ? provided
21
+ : null;
22
+ }
23
+ function readRequirePermission(context, options) {
24
+ return serverObject(readLocal(context, options.requirePermissionLocalKey || "requirePermission"));
25
+ }
26
+ function requirePermissionPasses(permissions, scope, permission) {
27
+ const fn = permissions[String(scope || "")];
28
+ return typeof fn === "function" && fn(String(permission || "")) === true;
29
+ }
30
+ function hasPermissionFunctions(permissions) {
31
+ return Object.keys(permissions).some((key) => typeof permissions[key] === "function");
32
+ }
33
+ function buildScopeState(viewer, scopes, state) {
34
+ const values = new Map();
35
+ for (const scope of scopes) {
36
+ const list = stringList(pathValue(viewer, scope.viewerPath));
37
+ const outputKey = scope.outputKey || `${scope.key}Permissions`;
38
+ state[outputKey] = list;
39
+ values.set(scope.key, list);
40
+ if (scope.allOutputKey) {
41
+ state[scope.allOutputKey] = list.includes(scope.allToken || "all");
42
+ }
43
+ }
44
+ return values;
45
+ }
46
+ function applyPermissionFlags(state, values, flags, permissions) {
47
+ for (const flag of flags) {
48
+ const allList = flag.allScope ? values.get(flag.allScope) || [] : [];
49
+ const hasAll = allList.includes("all");
50
+ state[flag.key] = Boolean(hasAll ||
51
+ (flag.permission &&
52
+ requirePermissionPasses(permissions, flag.requireScope || flag.allScope, flag.permission)));
53
+ }
54
+ }
55
+ function buildPermissionState(context, options) {
56
+ const explicit = explicitPermissionState(context);
57
+ if (explicit)
58
+ return explicit;
59
+ const viewer = readLocal(context, options.viewerLocalKey || "viewer");
60
+ const permissions = readRequirePermission(context, options);
61
+ const state = {};
62
+ const values = buildScopeState(viewer, options.scopes || [], state);
63
+ applyPermissionFlags(state, values, options.flags || [], permissions);
64
+ state.hasRequirePermissionFunctions = hasPermissionFunctions(permissions);
65
+ return state;
66
+ }
67
+ function createPermissionStateBuilder(options = {}) {
68
+ const config = {
69
+ ...options,
70
+ flags: options.flags ? [...options.flags] : [],
71
+ scopes: options.scopes ? [...options.scopes] : [],
72
+ };
73
+ return (context) => buildPermissionState(context, config);
74
+ }
75
+ export { buildPermissionState, createPermissionStateBuilder };
76
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../../src/server/react/permissions.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export * from "./live-socket.js";
14
14
  export * from "./navigation.js";
15
15
  export * from "./page-task.js";
16
16
  export * from "../../server/react/render.d.ts";
17
+ export * from "./react/permissions.js";
17
18
  export * from "./render/mode.js";
18
19
  export * from "./render/mode-toolkit.js";
19
20
  export * from "./security.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -14,6 +14,7 @@ export * from "./live-socket.js";
14
14
  export * from "./navigation.js";
15
15
  export * from "./page-task.js";
16
16
  export * from "../../server/react/render.js";
17
+ export * from "./react/permissions.js";
17
18
  export * from "./render/mode.js";
18
19
  export * from "./render/mode-toolkit.js";
19
20
  export * from "./security.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,32 @@
1
+ type PermissionStateContext = {
2
+ res?: {
3
+ locals?: Record<string, unknown>;
4
+ };
5
+ shellInput?: {
6
+ permissionState?: Record<string, unknown>;
7
+ };
8
+ };
9
+ type PermissionStateScope = {
10
+ allOutputKey?: string;
11
+ allToken?: string;
12
+ key: string;
13
+ outputKey?: string;
14
+ viewerPath?: readonly string[];
15
+ };
16
+ type PermissionStateFlag = {
17
+ allScope?: string;
18
+ key: string;
19
+ permission?: string;
20
+ requireScope?: string;
21
+ };
22
+ type PermissionStateBuilderOptions = {
23
+ flags?: readonly PermissionStateFlag[];
24
+ requirePermissionLocalKey?: string;
25
+ scopes?: readonly PermissionStateScope[];
26
+ viewerLocalKey?: string;
27
+ };
28
+ declare function buildPermissionState(context: PermissionStateContext, options: PermissionStateBuilderOptions): Record<string, unknown>;
29
+ declare function createPermissionStateBuilder(options?: PermissionStateBuilderOptions): (context: PermissionStateContext) => Record<string, unknown>;
30
+ export { buildPermissionState, createPermissionStateBuilder };
31
+ export type { PermissionStateBuilderOptions, PermissionStateContext, PermissionStateFlag, PermissionStateScope, };
32
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../../src/server/react/permissions.ts"],"names":[],"mappings":"AAEA,KAAK,sBAAsB,GAAG;IAC5B,GAAG,CAAC,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;IACF,UAAU,CAAC,EAAE;QACX,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3C,CAAC;CACH,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,6BAA6B,GAAG;IACnC,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,MAAM,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAqFF,iBAAS,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,6BAA6B,2BAYpG;AAED,iBAAS,4BAA4B,CAAC,OAAO,GAAE,6BAAkC,IAMvE,SAAS,sBAAsB,6BACxC;AAED,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,CAAC;AAC9D,YAAY,EACV,6BAA6B,EAC7B,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { serverObject } from "../../../server/http.js";
2
+ function stringList(input) {
3
+ return Array.isArray(input)
4
+ ? input.map((item) => String(item == null ? "" : item).trim()).filter(Boolean)
5
+ : [];
6
+ }
7
+ function pathValue(input, path = []) {
8
+ let current = input;
9
+ for (const segment of path) {
10
+ current = serverObject(current)[segment];
11
+ }
12
+ return current;
13
+ }
14
+ function readLocal(context, key) {
15
+ return serverObject(context.res?.locals)[key];
16
+ }
17
+ function explicitPermissionState(context) {
18
+ const provided = context.shellInput?.permissionState;
19
+ return provided && typeof provided === "object"
20
+ ? provided
21
+ : null;
22
+ }
23
+ function readRequirePermission(context, options) {
24
+ return serverObject(readLocal(context, options.requirePermissionLocalKey || "requirePermission"));
25
+ }
26
+ function requirePermissionPasses(permissions, scope, permission) {
27
+ const fn = permissions[String(scope || "")];
28
+ return typeof fn === "function" && fn(String(permission || "")) === true;
29
+ }
30
+ function hasPermissionFunctions(permissions) {
31
+ return Object.keys(permissions).some((key) => typeof permissions[key] === "function");
32
+ }
33
+ function buildScopeState(viewer, scopes, state) {
34
+ const values = new Map();
35
+ for (const scope of scopes) {
36
+ const list = stringList(pathValue(viewer, scope.viewerPath));
37
+ const outputKey = scope.outputKey || `${scope.key}Permissions`;
38
+ state[outputKey] = list;
39
+ values.set(scope.key, list);
40
+ if (scope.allOutputKey) {
41
+ state[scope.allOutputKey] = list.includes(scope.allToken || "all");
42
+ }
43
+ }
44
+ return values;
45
+ }
46
+ function applyPermissionFlags(state, values, flags, permissions) {
47
+ for (const flag of flags) {
48
+ const allList = flag.allScope ? values.get(flag.allScope) || [] : [];
49
+ const hasAll = allList.includes("all");
50
+ state[flag.key] = Boolean(hasAll ||
51
+ (flag.permission &&
52
+ requirePermissionPasses(permissions, flag.requireScope || flag.allScope, flag.permission)));
53
+ }
54
+ }
55
+ function buildPermissionState(context, options) {
56
+ const explicit = explicitPermissionState(context);
57
+ if (explicit)
58
+ return explicit;
59
+ const viewer = readLocal(context, options.viewerLocalKey || "viewer");
60
+ const permissions = readRequirePermission(context, options);
61
+ const state = {};
62
+ const values = buildScopeState(viewer, options.scopes || [], state);
63
+ applyPermissionFlags(state, values, options.flags || [], permissions);
64
+ state.hasRequirePermissionFunctions = hasPermissionFunctions(permissions);
65
+ return state;
66
+ }
67
+ function createPermissionStateBuilder(options = {}) {
68
+ const config = {
69
+ ...options,
70
+ flags: options.flags ? [...options.flags] : [],
71
+ scopes: options.scopes ? [...options.scopes] : [],
72
+ };
73
+ return (context) => buildPermissionState(context, config);
74
+ }
75
+ export { buildPermissionState, createPermissionStateBuilder };
76
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../../src/server/react/permissions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trebired/frontend",
3
- "version": "6.14.1",
3
+ "version": "6.15.0",
4
4
  "description": "Generic browser runtime systems for Trebired frontend packages and applications.",
5
5
  "type": "module",
6
6
  "private": false,