recoder-code
Version:
🚀 AI-powered development platform - Chat with 32+ models, build projects, automate workflows. Free models included!
108 lines (107 loc) • 2.96 kB
TypeScript
/**
* User Entity
* Represents users who can publish and manage packages
*/
import { Package } from './Package';
import { Download } from './Download';
import { ApiKey } from './ApiKey';
export declare enum UserRole {
USER = "user",
MAINTAINER = "maintainer",
ADMIN = "admin",
MODERATOR = "moderator"
}
export declare enum UserStatus {
ACTIVE = "active",
SUSPENDED = "suspended",
PENDING = "pending",
BANNED = "banned"
}
export declare class User {
id: string;
username: string;
email: string;
full_name?: string;
bio?: string;
avatar_url?: string;
website?: string;
location?: string;
timezone?: string;
password_hash: string;
npm_username?: string;
npm_email?: string;
role: UserRole;
status: UserStatus;
email_verified: boolean;
is_active: boolean;
github_username?: string;
twitter_username?: string;
preferences?: {
email_notifications: boolean;
weekly_digest: boolean;
security_alerts: boolean;
marketing_emails: boolean;
theme: 'light' | 'dark' | 'auto';
language: string;
};
permissions?: {
can_publish: boolean;
can_unpublish: boolean;
can_deprecate: boolean;
can_manage_teams: boolean;
can_moderate: boolean;
max_package_size: number;
max_packages: number;
};
stats?: {
packages_published: number;
total_downloads: number;
followers: number;
following: number;
packages_maintained: number;
};
organizations?: string[];
verification_token?: string;
verification_expires?: Date;
reset_token?: string;
reset_expires?: Date;
last_login?: Date;
last_login_ip?: string;
login_count: number;
suspended_until?: Date;
suspension_reason?: string;
created_at: Date;
updated_at: Date;
packages: Package[];
downloads: Download[];
api_keys: ApiKey[];
get is_admin(): boolean;
get is_moderator(): boolean;
get is_maintainer(): boolean;
get can_publish(): boolean;
get can_manage(): boolean;
get display_name(): string;
get npm_display_name(): string;
recordLogin(ip?: string): void;
suspend(reason: string, until?: Date): void;
unsuspend(): void;
ban(reason: string): void;
activate(): void;
verifyEmail(): void;
generateVerificationToken(): string;
generateResetToken(): string;
clearResetToken(): void;
updateStats(statsUpdate: Partial<User['stats']>): void;
addOrganization(org: string): void;
removeOrganization(org: string): void;
hasPermission(permission: keyof User['permissions']): boolean;
canAccessPackage(pkg: Package): boolean;
canModifyPackage(pkg: Package): boolean;
getRateLimits(): {
requests: number;
window: number;
};
toNpmFormat(): any;
toPublicFormat(): any;
toPrivateFormat(): any;
}