recoder-code
Version:
Complete AI-powered development platform with ML model training, plugin registry, real-time collaboration, monitoring, infrastructure automation, and enterprise deployment capabilities
147 lines (146 loc) • 4.46 kB
TypeScript
/**
* Package Service - Handles plugin package operations
*/
/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
import { Package } from '../entities/Package';
import { PackageVersion } from '../entities/PackageVersion';
import { User } from '../entities/User';
export interface PackageStats {
packageName: string;
totalDownloads: number;
monthlyDownloads: number;
weeklyDownloads: number;
lastUpdateDate: Date;
}
export interface PublishPackageData {
name: string;
version: string;
description?: string;
keywords?: string[];
author?: {
name: string;
email?: string;
url?: string;
};
license?: string;
homepage?: string;
repository?: {
type: string;
url: string;
};
bugs?: {
url?: string;
email?: string;
};
main?: string;
engines?: {
node?: string;
'recoder-code'?: string;
};
dependencies?: Record<string, string>;
devDependencies?: Record<string, string>;
peerDependencies?: Record<string, string>;
contributes?: {
commands?: any[];
menus?: any[];
keybindings?: any[];
languages?: any[];
themes?: any[];
};
activationEvents?: string[];
categories?: string[];
tags?: string[];
dist?: {
tarball: string;
shasum: string;
integrity?: string;
};
readme?: string;
_attachments?: Record<string, any>;
}
export interface SearchOptions {
query?: string;
category?: string;
keywords?: string[];
author?: string;
license?: string;
minDownloads?: number;
sortBy?: 'relevance' | 'downloads' | 'updated' | 'created';
sortOrder?: 'asc' | 'desc';
limit?: number;
offset?: number;
}
export declare class PackageService {
private packageRepo;
private versionRepo;
private userRepo;
private securityService;
private storageService;
private validationService;
constructor();
publishPackage(packageData: PublishPackageData, user: User, tarballBuffer?: Buffer): Promise<{
success: boolean;
package?: Package;
version?: PackageVersion;
errors?: string[];
}>;
getPackage(name: string): Promise<Package | null>;
getPackageVersion(name: string, version: string): Promise<PackageVersion | null>;
searchPackages(options: SearchOptions): Promise<{
packages: Package[];
total: number;
page: number;
limit: number;
}>;
downloadPackage(name: string, version: string): Promise<{
success: boolean;
stream?: NodeJS.ReadableStream;
filename?: string;
contentType?: string;
size?: number;
error?: string;
}>;
unpublishPackage(name: string, version: string, user: User): Promise<{
success: boolean;
error?: string;
}>;
deletePackage(name: string, user: User): Promise<{
success: boolean;
error?: string;
}>;
getPackageStats(name: string): Promise<PackageStats | null>;
getPopularPackages(limit?: number): Promise<Package[]>;
getRecentlyUpdated(limit?: number): Promise<Package[]>;
addMaintainer(packageName: string, username: string, currentUser: User): Promise<{
success: boolean;
error?: string;
}>;
removeMaintainer(packageName: string, username: string, currentUser: User): Promise<{
success: boolean;
error?: string;
}>;
private updatePackageStats;
getLatestVersion(packageName: string): Promise<string | null>;
getVersions(packageName: string): Promise<string[]>;
getPackageVersions(packageName: string): Promise<PackageVersion[]>;
incrementDownloadCount(packageName: string, version: string): Promise<void>;
unpublishVersion(packageName: string, version: string, user: User): Promise<{
success: boolean;
error?: string;
}>;
deprecateVersion(packageName: string, version: string, user: User, message?: string): Promise<{
success: boolean;
error?: string;
}>;
addCollaborator(packageName: string, username: string, currentUser: User): Promise<{
success: boolean;
error?: string;
}>;
removeCollaborator(packageName: string, username: string, currentUser: User): Promise<{
success: boolean;
error?: string;
}>;
getPackageCount(): Promise<number>;
}