import fs from 'node:fs' import path from 'node:path' interface FileInfo { name: string fileSize: number dateModify: number } export default class IosLicenseController { /* ================= HELPER ================= */ private getBinFiles(dir: string): FileInfo[] { if (!fs.existsSync(dir)) return [] return fs .readdirSync(dir) .filter((file) => file.toLowerCase().endsWith('.bin')) .map((file) => { const fullPath = path.join(dir, file) const stat = fs.statSync(fullPath) return { name: file, fileSize: stat.size, dateModify: stat.mtime.getTime(), } }) .sort((a, b) => b.dateModify - a.dateModify) } private getLicFiles(dir: string): FileInfo[] { if (!fs.existsSync(dir)) return [] return fs .readdirSync(dir) .filter((file) => file.toLowerCase().endsWith('.lic')) .map((file) => { const fullPath = path.join(dir, file) const stat = fs.statSync(fullPath) return { name: file, fileSize: stat.size, dateModify: stat.mtime.getTime(), } }) .sort((a, b) => b.dateModify - a.dateModify) } /* ================= IOS ================= */ async getIos() { const smbPath = '/ipsteamSMB/IOS/i' const localPath = 'storage/i' const targetPath = fs.existsSync(smbPath) ? smbPath : localPath return this.getBinFiles(targetPath) } /* ================= LICENSE ================= */ async getLicense() { const smbPath = '/ipsteamSMB/IOS/License' const localPath = 'storage/License' const targetPath = fs.existsSync(smbPath) ? smbPath : localPath return this.getLicFiles(targetPath) } }