@opengeni/core 2.7.5-canary.3 → 2.7.5-canary.4

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.
@@ -91,6 +91,13 @@ export declare function requireCanonicalLocalAccountAdministrator(c: Context, de
91
91
  authorization: AccessGrantAuthorization;
92
92
  }>;
93
93
  export declare function requireAccessGrantAuthorization(c: Context, deps: AccessDeps, workspaceId: string, permission?: Permission): Promise<AccessGrantAuthorization>;
94
+ /**
95
+ * Settings administration is narrower than workspace administration. The
96
+ * canonical managed-cookie owner may configure their Personal workspace, but
97
+ * never acquires the admin wildcard (and its membership/delegation powers).
98
+ * Only use this boundary for workspace configuration, not access management.
99
+ */
100
+ export declare function requireWorkspaceSettingsGrant(c: Context, deps: AccessDeps, workspaceId: string): Promise<AccessGrant>;
94
101
  export declare function requirePermission(grant: AccessGrant, permission: Permission): void;
95
102
  /**
96
103
  * Require a permission to be present literally on the grant. This deliberately
package/dist/index.js CHANGED
@@ -1988,7 +1988,8 @@ import {
1988
1988
  ensureManagedAccessForUser,
1989
1989
  findActiveApiKeyByHash,
1990
1990
  getWorkspaceGrant,
1991
- requireWorkspace
1991
+ requireWorkspace,
1992
+ resolveNamedManagedPersonalWorkspaceGrant
1992
1993
  } from "@opengeni/db";
1993
1994
  import { HTTPException } from "hono/http-exception";
1994
1995
  var bearerPrefix = "Bearer ";
@@ -2110,6 +2111,21 @@ async function requireAccessGrantAuthorization(c, deps, workspaceId, permission)
2110
2111
  const context = await requireAccessContext(c, deps);
2111
2112
  return await accessGrantAuthorization(context, deps, workspaceId, permission);
2112
2113
  }
2114
+ async function requireWorkspaceSettingsGrant(c, deps, workspaceId) {
2115
+ const authorization = await requireAccessGrantAuthorization(c, deps, workspaceId);
2116
+ const grant = requireResolvedAccessGrantAuthorization(authorization, workspaceId);
2117
+ if (hasPermission(grant.permissions, "workspace:admin")) return grant;
2118
+ if (authorization.canonicalManagedHumanSession && await resolveNamedManagedPersonalWorkspaceGrant(deps.db, {
2119
+ accountId: grant.accountId,
2120
+ workspaceId,
2121
+ subjectId: authorization.authenticatedSubjectId
2122
+ })) {
2123
+ return grant;
2124
+ }
2125
+ throw new HTTPException(403, {
2126
+ message: "workspace settings require a workspace administrator or Personal workspace owner"
2127
+ });
2128
+ }
2113
2129
  async function accessGrantAuthorization(context, deps, workspaceId, permission) {
2114
2130
  const principalKind = hostedHumanSessionPrincipalKind(context);
2115
2131
  let grant = context.workspaceGrants.find((candidate) => candidate.workspaceId === workspaceId) ?? await getWorkspaceGrant(
@@ -16688,6 +16704,7 @@ export {
16688
16704
  requireSessionAuthorizationListScope,
16689
16705
  requireVariableSetEncryption,
16690
16706
  requireVariableSetForApi,
16707
+ requireWorkspaceSettingsGrant,
16691
16708
  resolveCapabilityPack,
16692
16709
  resolveCatalogSettings,
16693
16710
  resolveChildGoalFromAcceptedSnapshot,