/**
 * User provider interface for authentication.
 * Enables user awareness in Studio.
 */
/**
 * Base user type for authentication.
 */
export interface User {
    /** Unique user identifier */
    id: string;
    /** User email address */
    email?: string;
    /** Display name */
    name?: string;
    /** Avatar URL */
    avatarUrl?: string;
}
/**
 * Provider interface for user awareness in Studio.
 *
 * Implement this interface to enable:
 * - Current user display in header
 * - User menu with profile info
 * - User context in API calls
 *
 * @example
 * ```typescript
 * class MyUserProvider implements IUserProvider {
 *   async getCurrentUser(request: Request) {
 *     const session = await this.getSession(request);
 *     if (!session) return null;
 *     return this.db.getUser(session.userId);
 *   }
 *
 *   async getUser(userId: string) {
 *     return this.db.getUser(userId);
 *   }
 * }
 * ```
 */
export interface IUserProvider<TUser extends User = User> {
    /**
     * Get current user from request (session cookie, token, etc.)
     *
     * @param request - Incoming HTTP request
     * @returns User object or null if not authenticated
     */
    getCurrentUser(request: Request): Promise<TUser | null>;
    /**
     * Get user by ID.
     *
     * @param userId - User identifier
     * @returns User object or null if not found
     */
    getUser(userId: string): Promise<TUser | null>;
    /**
     * Optional: Get multiple users by ID in a single call.
     *
     * Returns results positionally aligned to `userIds`, with `null` for any
     * user that could not be resolved. Providers that can perform a single
     * batched lookup (e.g. a DB-backed provider) should implement this to
     * avoid N round trips when callers (such as author enrichment on list
     * endpoints) need many users at once. If not implemented, callers should
     * fall back to `Promise.all(userIds.map(id => getUser(id)))`.
     *
     * @param userIds - List of user identifiers
     * @returns Array of user objects (or `null` per missing entry) in input order
     */
    getUsers?(userIds: string[]): Promise<Array<TUser | null>>;
    /**
     * Optional: Get URL to user's profile page.
     *
     * @param user - User object
     * @returns URL string to profile
     */
    getUserProfileUrl?(user: TUser): string;
}
//# sourceMappingURL=user.d.ts.map