import { PermissionScopeError } from '@fleek-platform/errors'; const permissionScopes = [ // Project permissions 'PROJECT_EDIT_NAME', 'PROJECT_EDIT_AVATAR', 'PROJECT_EDIT_ACCESS_FROM_OFAC_COUNTRIES', 'PROJECT_DELETE', // Storage permissions 'STORAGE_EDIT_SETTINGS', 'STORAGE_UPLOAD', 'STORAGE_EDIT_NAME', 'STORAGE_DELETE', 'STORAGE_VIEW_INFORMATION', 'STORAGE_VIEW_LIST', // Private gateway permissions 'PRIVATE_GATEWAY_CREATE', 'PRIVATE_GATEWAY_UPDATE_NAME', 'PRIVATE_GATEWAY_DELETE', 'PRIVATE_GATEWAY_ADD_AND_VERIFY_DOMAIN', 'PRIVATE_GATEWAY_CHANGE_PRIMARY_DOMAIN', 'PRIVATE_GATEWAY_DELETE_DOMAIN', 'PRIVATE_GATEWAY_VIEW', // Site permissions 'SITE_CREATE', 'SITE_DEPLOY', 'SITE_VIEW_OVERVIEW', 'SITE_VIEW_BUILD_SETTINGS', 'SITE_EDIT_BUILD_SETTINGS', 'SITE_VIEW_ENV_VARIABLES', 'SITE_EDIT_ENV_VARIABLES', 'SITE_VIEW_DEPLOYMENTS', 'SITE_VIEW_ANALYTICS', 'SITE_EDIT_NAME', 'SITE_EDIT_SLUG', 'SITE_EDIT_AVATAR', 'SITE_PURGE_CACHE', 'SITE_DELETE', 'SITE_ADD_AND_VERIFY_DOMAIN', 'SITE_CHANGE_PRIMARY_DOMAIN', 'SITE_DELETE_DOMAIN', 'SITE_ADD_AND_VERIFY_ENS', 'SITE_DELETE_ENS', 'SITE_ADD_GIT_INTEGRATION', 'SITE_REMOVE_GIT_INTEGRATION', // Function permissions 'FUNCTION_CREATE', 'FUNCTION_DEPLOY', 'FUNCTION_EDIT_SETTINGS', 'FUNCTION_DELETE', 'FUNCTION_VIEW', 'FUNCTION_VIEW_DEPLOYMENT', // IPNS permissions 'IPNS_CREATE_RECORD', 'IPNS_PUBLISH_RECORD', 'IPNS_DELETE_RECORD', 'IPNS_VIEW', // Billing permissions 'BILLING_VIEW', 'BILLING_MANAGE', // Application permissions 'APPLICATION_VIEW', 'APPLICATION_CREATE', 'APPLICATION_EDIT', // Member permissions 'MEMBER_TEAM_VIEW', 'MEMBER_INVITE', 'MEMBER_CHANGE_PERMISSIONS', 'MEMBER_ASSIGN_OWNER', 'MEMBER_DELETE_OTHERS', // Template permissions 'TEMPLATE_CREATE', // AI Agent permissions 'AGENT_VIEW_LIST', 'AGENT_CREATE', 'AGENT_VIEW', 'AGENT_UPDATE', 'AGENT_DELETE', ] as const; export type PermissionScope = (typeof permissionScopes)[number]; /** * Use this class to serialize, parse, add, delete permissions * and to check whether some permission scope is included in loaded permissions. */ export class Permissions { private scopes: Set; static parse(permissions: string) { const scopes = permissions ? permissions.split(',') : []; for (const scope of scopes) { if (!permissionScopes.includes(scope as PermissionScope)) { throw new PermissionScopeError({ scope }); } } return new Permissions(scopes as PermissionScope[]); } constructor(scopes: PermissionScope[]) { this.scopes = new Set(scopes); } public add(scope: PermissionScope) { this.scopes.add(scope); } public has(scope: PermissionScope) { return this.scopes.has(scope); } public delete(scope: PermissionScope) { this.scopes.delete(scope); } public toString() { return [...this.scopes].join(','); } public toArray() { return [...this.scopes]; } }