diff --git a/apps/backend/src/app/api/latest/project-permission-definitions/crud.tsx b/apps/backend/src/app/api/latest/project-permission-definitions/crud.tsx index 46f020236..dce118326 100644 --- a/apps/backend/src/app/api/latest/project-permission-definitions/crud.tsx +++ b/apps/backend/src/app/api/latest/project-permission-definitions/crud.tsx @@ -2,12 +2,12 @@ import { createPermissionDefinition, deletePermissionDefinition, listPermissionD import { retryTransaction } from "@/prisma-client"; import { createCrudHandlers } from "@/route-handlers/crud-handler"; import { projectPermissionDefinitionsCrud } from '@stackframe/stack-shared/dist/interface/crud/project-permissions'; -import { teamPermissionDefinitionIdSchema, yupObject } from "@stackframe/stack-shared/dist/schema-fields"; +import { permissionDefinitionIdSchema, yupObject } from "@stackframe/stack-shared/dist/schema-fields"; import { createLazyProxy } from "@stackframe/stack-shared/dist/utils/proxies"; export const projectPermissionDefinitionsCrudHandlers = createLazyProxy(() => createCrudHandlers(projectPermissionDefinitionsCrud, { paramsSchema: yupObject({ - permission_id: teamPermissionDefinitionIdSchema.defined(), + permission_id: permissionDefinitionIdSchema.defined(), }), async onCreate({ auth, data }) { return await retryTransaction(async (tx) => { diff --git a/apps/backend/src/app/api/latest/project-permissions/crud.tsx b/apps/backend/src/app/api/latest/project-permissions/crud.tsx index 41c039ae7..515006652 100644 --- a/apps/backend/src/app/api/latest/project-permissions/crud.tsx +++ b/apps/backend/src/app/api/latest/project-permissions/crud.tsx @@ -6,19 +6,19 @@ import { createCrudHandlers } from "@/route-handlers/crud-handler"; import { runAsynchronouslyAndWaitUntil } from "@/utils/vercel"; import { KnownErrors } from "@stackframe/stack-shared"; import { projectPermissionsCrud } from '@stackframe/stack-shared/dist/interface/crud/project-permissions'; -import { teamPermissionDefinitionIdSchema, userIdOrMeSchema, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; +import { permissionDefinitionIdSchema, userIdOrMeSchema, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { StatusError, throwErr } from "@stackframe/stack-shared/dist/utils/errors"; import { createLazyProxy } from "@stackframe/stack-shared/dist/utils/proxies"; export const projectPermissionsCrudHandlers = createLazyProxy(() => createCrudHandlers(projectPermissionsCrud, { querySchema: yupObject({ user_id: userIdOrMeSchema.optional().meta({ openapiField: { onlyShowInOperations: [ 'List' ], description: 'Filter with the user ID. If set, only the permissions this user has will be returned. Client request must set `user_id=me`', exampleValue: 'me' } }), - permission_id: teamPermissionDefinitionIdSchema.optional().meta({ openapiField: { onlyShowInOperations: [ 'List' ], description: 'Filter with the permission ID. If set, only the permissions with this specific ID will be returned', exampleValue: '16399452-c4f3-4554-8e44-c2d67bb60360' } }), + permission_id: permissionDefinitionIdSchema.optional().meta({ openapiField: { onlyShowInOperations: [ 'List' ], description: 'Filter with the permission ID. If set, only the permissions with this specific ID will be returned', exampleValue: '16399452-c4f3-4554-8e44-c2d67bb60360' } }), recursive: yupString().oneOf(['true', 'false']).optional().meta({ openapiField: { onlyShowInOperations: [ 'List' ], description: 'Whether to list permissions recursively. If set to `false`, only the permission the users directly have will be listed. If set to `true` all the direct and indirect permissions will be listed.', exampleValue: 'true' } }), }), paramsSchema: yupObject({ user_id: userIdOrMeSchema.defined(), - permission_id: teamPermissionDefinitionIdSchema.defined(), + permission_id: permissionDefinitionIdSchema.defined(), }), async onCreate({ auth, params }) { const result = await retryTransaction(async (tx) => { diff --git a/apps/backend/src/app/api/latest/team-permission-definitions/crud.tsx b/apps/backend/src/app/api/latest/team-permission-definitions/crud.tsx index 7bb43fe9b..c32f8f9db 100644 --- a/apps/backend/src/app/api/latest/team-permission-definitions/crud.tsx +++ b/apps/backend/src/app/api/latest/team-permission-definitions/crud.tsx @@ -2,12 +2,12 @@ import { createPermissionDefinition, deletePermissionDefinition, listPermissionD import { retryTransaction } from "@/prisma-client"; import { createCrudHandlers } from "@/route-handlers/crud-handler"; import { teamPermissionDefinitionsCrud } from '@stackframe/stack-shared/dist/interface/crud/team-permissions'; -import { teamPermissionDefinitionIdSchema, yupObject } from "@stackframe/stack-shared/dist/schema-fields"; +import { permissionDefinitionIdSchema, yupObject } from "@stackframe/stack-shared/dist/schema-fields"; import { createLazyProxy } from "@stackframe/stack-shared/dist/utils/proxies"; export const teamPermissionDefinitionsCrudHandlers = createLazyProxy(() => createCrudHandlers(teamPermissionDefinitionsCrud, { paramsSchema: yupObject({ - permission_id: teamPermissionDefinitionIdSchema.defined(), + permission_id: permissionDefinitionIdSchema.defined(), }), async onCreate({ auth, data }) { return await retryTransaction(async (tx) => { diff --git a/apps/backend/src/app/api/latest/team-permissions/crud.tsx b/apps/backend/src/app/api/latest/team-permissions/crud.tsx index 15fe8ee4c..c96e36773 100644 --- a/apps/backend/src/app/api/latest/team-permissions/crud.tsx +++ b/apps/backend/src/app/api/latest/team-permissions/crud.tsx @@ -6,7 +6,7 @@ import { createCrudHandlers } from "@/route-handlers/crud-handler"; import { runAsynchronouslyAndWaitUntil } from "@/utils/vercel"; import { KnownErrors } from "@stackframe/stack-shared"; import { teamPermissionsCrud } from '@stackframe/stack-shared/dist/interface/crud/team-permissions'; -import { teamPermissionDefinitionIdSchema, userIdOrMeSchema, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; +import { permissionDefinitionIdSchema, userIdOrMeSchema, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { StatusError, throwErr } from "@stackframe/stack-shared/dist/utils/errors"; import { createLazyProxy } from "@stackframe/stack-shared/dist/utils/proxies"; @@ -14,13 +14,13 @@ export const teamPermissionsCrudHandlers = createLazyProxy(() => createCrudHandl querySchema: yupObject({ team_id: yupString().uuid().optional().meta({ openapiField: { onlyShowInOperations: [ 'List' ], description: 'Filter with the team ID. If set, only the permissions of the members in a specific team will be returned.', exampleValue: 'cce084a3-28b7-418e-913e-c8ee6d802ea4' } }), user_id: userIdOrMeSchema.optional().meta({ openapiField: { onlyShowInOperations: [ 'List' ], description: 'Filter with the user ID. If set, only the permissions this user has will be returned. Client request must set `user_id=me`', exampleValue: 'me' } }), - permission_id: teamPermissionDefinitionIdSchema.optional().meta({ openapiField: { onlyShowInOperations: [ 'List' ], description: 'Filter with the permission ID. If set, only the permissions with this specific ID will be returned', exampleValue: '16399452-c4f3-4554-8e44-c2d67bb60360' } }), + permission_id: permissionDefinitionIdSchema.optional().meta({ openapiField: { onlyShowInOperations: [ 'List' ], description: 'Filter with the permission ID. If set, only the permissions with this specific ID will be returned', exampleValue: '16399452-c4f3-4554-8e44-c2d67bb60360' } }), recursive: yupString().oneOf(['true', 'false']).optional().meta({ openapiField: { onlyShowInOperations: [ 'List' ], description: 'Whether to list permissions recursively. If set to `false`, only the permission the users directly have will be listed. If set to `true` all the direct and indirect permissions will be listed.', exampleValue: 'true' } }), }), paramsSchema: yupObject({ team_id: yupString().uuid().defined(), user_id: userIdOrMeSchema.defined(), - permission_id: teamPermissionDefinitionIdSchema.defined(), + permission_id: permissionDefinitionIdSchema.defined(), }), async onCreate({ auth, params }) { const result = await retryTransaction(async (tx) => { diff --git a/packages/stack-shared/src/interface/crud/project-permissions.ts b/packages/stack-shared/src/interface/crud/project-permissions.ts index 68d5b1997..e25c7e34e 100644 --- a/packages/stack-shared/src/interface/crud/project-permissions.ts +++ b/packages/stack-shared/src/interface/crud/project-permissions.ts @@ -6,7 +6,7 @@ import { WebhookEvent } from "../webhooks"; // =============== Project permissions ================= export const projectPermissionsCrudClientReadSchema = yupObject({ - id: schemaFields.teamPermissionDefinitionIdSchema.defined(), + id: schemaFields.permissionDefinitionIdSchema.defined(), user_id: schemaFields.userIdSchema.defined(), }).defined(); @@ -67,19 +67,19 @@ export const projectPermissionDeletedWebhookEvent = { // =============== Project permission definitions ================= export const projectPermissionDefinitionsCrudAdminReadSchema = yupObject({ - id: schemaFields.teamPermissionDefinitionIdSchema.defined(), + id: schemaFields.permissionDefinitionIdSchema.defined(), description: schemaFields.teamPermissionDescriptionSchema.optional(), contained_permission_ids: schemaFields.containedPermissionIdsSchema.defined(), }).defined(); export const projectPermissionDefinitionsCrudAdminCreateSchema = yupObject({ - id: schemaFields.customTeamPermissionDefinitionIdSchema.defined(), + id: schemaFields.customPermissionDefinitionIdSchema.defined(), description: schemaFields.teamPermissionDescriptionSchema.optional(), contained_permission_ids: schemaFields.containedPermissionIdsSchema.optional(), }).defined(); export const projectPermissionDefinitionsCrudAdminUpdateSchema = yupObject({ - id: schemaFields.customTeamPermissionDefinitionIdSchema.optional(), + id: schemaFields.customPermissionDefinitionIdSchema.optional(), description: schemaFields.teamPermissionDescriptionSchema.optional(), contained_permission_ids: schemaFields.containedPermissionIdsSchema.optional(), }).defined(); diff --git a/packages/stack-shared/src/interface/crud/team-permissions.ts b/packages/stack-shared/src/interface/crud/team-permissions.ts index 804c31b66..4361930af 100644 --- a/packages/stack-shared/src/interface/crud/team-permissions.ts +++ b/packages/stack-shared/src/interface/crud/team-permissions.ts @@ -6,7 +6,7 @@ import { WebhookEvent } from "../webhooks"; // =============== Team permissions ================= export const teamPermissionsCrudClientReadSchema = yupObject({ - id: schemaFields.teamPermissionDefinitionIdSchema.defined(), + id: schemaFields.permissionDefinitionIdSchema.defined(), user_id: schemaFields.userIdSchema.defined(), team_id: schemaFields.teamIdSchema.defined(), }).defined(); @@ -68,19 +68,19 @@ export const teamPermissionDeletedWebhookEvent = { // =============== Team permission definitions ================= export const teamPermissionDefinitionsCrudAdminReadSchema = yupObject({ - id: schemaFields.teamPermissionDefinitionIdSchema.defined(), + id: schemaFields.permissionDefinitionIdSchema.defined(), description: schemaFields.teamPermissionDescriptionSchema.optional(), contained_permission_ids: schemaFields.containedPermissionIdsSchema.defined(), }).defined(); export const teamPermissionDefinitionsCrudAdminCreateSchema = yupObject({ - id: schemaFields.customTeamPermissionDefinitionIdSchema.defined(), + id: schemaFields.customPermissionDefinitionIdSchema.defined(), description: schemaFields.teamPermissionDescriptionSchema.optional(), contained_permission_ids: schemaFields.containedPermissionIdsSchema.optional(), }).defined(); export const teamPermissionDefinitionsCrudAdminUpdateSchema = yupObject({ - id: schemaFields.customTeamPermissionDefinitionIdSchema.optional(), + id: schemaFields.customPermissionDefinitionIdSchema.optional(), description: schemaFields.teamPermissionDescriptionSchema.optional(), contained_permission_ids: schemaFields.containedPermissionIdsSchema.optional(), }).defined(); diff --git a/packages/stack-shared/src/schema-fields.ts b/packages/stack-shared/src/schema-fields.ts index 8b1e68145..124ac2fc2 100644 --- a/packages/stack-shared/src/schema-fields.ts +++ b/packages/stack-shared/src/schema-fields.ts @@ -359,7 +359,7 @@ export const teamSystemPermissions = [ '$remove_members', '$invite_members', ] as const; -export const teamPermissionDefinitionIdSchema = yupString() +export const permissionDefinitionIdSchema = yupString() .matches(/^\$?[a-z0-9_:]+$/, 'Only lowercase letters, numbers, ":", "_" and optional "$" at the beginning are allowed') .test('is-system-permission', 'System permissions must start with a dollar sign', (value, ctx) => { if (!value) return true; @@ -369,11 +369,11 @@ export const teamPermissionDefinitionIdSchema = yupString() return true; }) .meta({ openapiField: { description: `The permission ID used to uniquely identify a permission. Can either be a custom permission with lowercase letters, numbers, \`:\`, and \`_\` characters, or one of the system permissions: ${teamSystemPermissions.map(x => `\`${x}\``).join(', ')}`, exampleValue: 'read_secret_info' } }); -export const customTeamPermissionDefinitionIdSchema = yupString() +export const customPermissionDefinitionIdSchema = yupString() .matches(/^[a-z0-9_:]+$/, 'Only lowercase letters, numbers, ":", "_" are allowed') .meta({ openapiField: { description: 'The permission ID used to uniquely identify a permission. Can only contain lowercase letters, numbers, ":", and "_" characters', exampleValue: 'read_secret_info' } }); export const teamPermissionDescriptionSchema = yupString().meta({ openapiField: { description: 'A human-readable description of the permission', exampleValue: 'Read secret information' } }); -export const containedPermissionIdsSchema = yupArray(teamPermissionDefinitionIdSchema.defined()).meta({ openapiField: { description: 'The IDs of the permissions that are contained in this permission', exampleValue: ['read_public_info'] } }); +export const containedPermissionIdsSchema = yupArray(permissionDefinitionIdSchema.defined()).meta({ openapiField: { description: 'The IDs of the permissions that are contained in this permission', exampleValue: ['read_public_info'] } }); // Teams export const teamIdSchema = yupString().uuid().meta({ openapiField: { description: _idDescription('team'), exampleValue: 'ad962777-8244-496a-b6a2-e0c6a449c79e' } });