()
| 176 | * @returns IQuickStartTemplate |
| 177 | */ |
| 178 | export async function getAppMarketList() { |
| 179 | const presetUrl = systemConfig?.presetPackAddr; |
| 180 | if (!presetUrl) throw new Error("Preset Addr is empty!"); |
| 181 | |
| 182 | if (presetUrl?.startsWith(SAVE_DIR_PATH)) { |
| 183 | // Custom App Market List from local file |
| 184 | const filesDir = path.join(process.cwd(), SAVE_DIR_PATH); |
| 185 | const fileName = presetUrl?.split(SAVE_DIR_PATH)[1]; |
| 186 | const filePath = path.join(filesDir, fileName ?? ""); |
| 187 | if (fs.existsSync(filePath)) { |
| 188 | return JSON.parse(await fs.readFile(filePath, "utf-8")) as IQuickStartTemplate; |
| 189 | } else { |
| 190 | throw new Error(`Request failed, status: 404`); |
| 191 | } |
| 192 | } else { |
| 193 | // App Market List from remote server |
| 194 | const CACHE_DURATION = 6 * 60 * 60 * 1000; // 6 hours |
| 195 | try { |
| 196 | const stats = await fs.stat(MARKET_CACHE_FILE_PATH); |
| 197 | const now = Date.now(); |
| 198 | const fileAge = now - stats.mtime.getTime(); |
| 199 | |
| 200 | // Use cache |
| 201 | if (fileAge < CACHE_DURATION) { |
| 202 | const cachedData = await fs.readFile(MARKET_CACHE_FILE_PATH, "utf-8"); |
| 203 | return JSON.parse(cachedData) as IQuickStartTemplate; |
| 204 | } |
| 205 | } catch (error) { |
| 206 | // Cache file doesn't exist, continue to fetch new data |
| 207 | } |
| 208 | // Fetch new data from remote server |
| 209 | const { data: presetConfig } = await axios<IQuickStartTemplate>({ |
| 210 | url: presetUrl, |
| 211 | method: "GET" |
| 212 | }); |
| 213 | return presetConfig; |
| 214 | } |
| 215 | } |
no test coverage detected