import { MaybeUserContext, ProjectContext, UserContext } from '../domain/context.js';
import { Loaders } from '../domain/loaders.js';
import { AuthPolicyCheckFragment, AuthPolicyEnsureFragment } from '../domain/policies.js';
import { ProjectNoAccessError, ProjectNotEnoughPermissionsError, ProjectNotFoundError, ServerNoAccessError, ServerNoSessionError, ServerNotEnoughPermissionsError, WorkspaceNoAccessError, WorkspaceNotEnoughPermissionsError, WorkspacePlanNoFeatureAccessError, WorkspaceReadOnlyError, WorkspacesNotEnabledError, WorkspaceSsoSessionNoAccessError } from '../domain/authErrors.js';
import { StreamRoles } from '../../core/constants.js';
import { WorkspacePlanFeatures } from '../../workspaces/index.js';
/**
 * Ensure user has a minimum explicit or implicit project role
 */
export declare const ensureMinimumProjectRoleFragment: AuthPolicyEnsureFragment<typeof Loaders.getProject | typeof Loaders.getServerRole | typeof Loaders.getEnv | typeof Loaders.getWorkspaceRole | typeof Loaders.getWorkspace | typeof Loaders.getWorkspaceSsoProvider | typeof Loaders.getWorkspaceSsoSession | typeof Loaders.getProjectRole, ProjectContext & UserContext & {
    /**
     * Optionally specify role the user should have
     */
    role?: StreamRoles;
    /**
     * Optionally only allow explicit project roles
     */
    explicit?: boolean;
}, InstanceType<typeof ProjectNoAccessError | typeof ProjectNotFoundError | typeof ProjectNotEnoughPermissionsError>>;
/**
 * Ensure user has access to the project's workspace (has role & SSO session, if any), if it has one
 */
export declare const ensureProjectWorkspaceAccessFragment: AuthPolicyEnsureFragment<typeof Loaders.getProject | typeof Loaders.getEnv | typeof Loaders.getWorkspaceSsoProvider | typeof Loaders.getWorkspaceSsoSession | typeof Loaders.getWorkspace | typeof Loaders.getWorkspaceRole, {
    userId: string;
    projectId: string;
}, InstanceType<typeof WorkspaceSsoSessionNoAccessError | typeof WorkspaceNoAccessError | typeof WorkspaceNotEnoughPermissionsError | typeof ProjectNotFoundError>>;
/**
 * Check if project is publicly readable or not
 */
export declare const checkIfPubliclyReadableProjectFragment: AuthPolicyCheckFragment<typeof Loaders.getProject | typeof Loaders.getEnv, ProjectContext, InstanceType<typeof ProjectNotFoundError>>;
/**
 * Ensure user has implicit/explicit project membership and read access
 */
export declare const ensureImplicitProjectMemberWithReadAccessFragment: AuthPolicyEnsureFragment<typeof Loaders.getProject | typeof Loaders.getEnv | typeof Loaders.getServerRole | typeof Loaders.getWorkspaceRole | typeof Loaders.getWorkspace | typeof Loaders.getWorkspaceSsoProvider | typeof Loaders.getWorkspaceSsoSession | typeof Loaders.getProjectRole | typeof Loaders.getAdminOverrideEnabled, MaybeUserContext & ProjectContext & {
    /**
     * Optionally specify role the user should have
     */
    role?: StreamRoles;
}, InstanceType<typeof ProjectNotFoundError | typeof ServerNoAccessError | typeof ServerNoSessionError | typeof ServerNotEnoughPermissionsError | typeof ProjectNoAccessError | typeof WorkspaceNoAccessError | typeof WorkspaceSsoSessionNoAccessError | typeof ProjectNotEnoughPermissionsError | typeof WorkspaceNotEnoughPermissionsError>>;
/**
 * Ensure user has implicit/explicit project membership and write access
 */
export declare const ensureImplicitProjectMemberWithWriteAccessFragment: AuthPolicyEnsureFragment<typeof Loaders.getProject | typeof Loaders.getEnv | typeof Loaders.getServerRole | typeof Loaders.getWorkspaceRole | typeof Loaders.getWorkspace | typeof Loaders.getWorkspaceSsoProvider | typeof Loaders.getWorkspaceSsoSession | typeof Loaders.getProjectRole, MaybeUserContext & ProjectContext & {
    /**
     * By default assumes Contributor+ for any writes, but some operations
     * may allow for lower roles (e.g. comments)
     */
    role?: StreamRoles;
}, InstanceType<typeof ProjectNotFoundError | typeof ServerNoAccessError | typeof ServerNoSessionError | typeof ProjectNoAccessError | typeof WorkspaceNoAccessError | typeof WorkspaceSsoSessionNoAccessError | typeof ServerNotEnoughPermissionsError | typeof ProjectNotEnoughPermissionsError | typeof WorkspaceNotEnoughPermissionsError>>;
/**
 * Ensure project is workspaced and has access to a specific plan feature
 */
export declare const ensureCanUseProjectWorkspacePlanFeatureFragment: AuthPolicyEnsureFragment<typeof Loaders.getEnv | typeof Loaders.getProject | typeof Loaders.getWorkspacePlan, ProjectContext & {
    feature: WorkspacePlanFeatures;
    /**
     * Whether to also allow if project is not workspaced at all
     * Default: false
     */
    allowUnworkspaced?: boolean;
}, InstanceType<typeof WorkspacesNotEnabledError | typeof ProjectNotFoundError | typeof WorkspaceNoAccessError | typeof WorkspaceReadOnlyError | typeof WorkspacePlanNoFeatureAccessError>>;
//# sourceMappingURL=projects.d.ts.map