MCPcopy Create free account
hub / github.com/MCSManager/MCSManager / getAppMarketList

Function getAppMarketList

panel/src/app/service/instance_service.ts:178–215  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

176 * @returns IQuickStartTemplate
177 */
178export 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}

Callers 1

Calls 1

readFileMethod · 0.45

Tested by

no test coverage detected