diff --git a/src/controllers/plugins.controller.ts b/src/controllers/plugins.controller.ts index 03682831ee3d5086a00357726f43f8de260c1db5..4edda2590f4f502f436bd6f4ebf29868f20ae862 100644 --- a/src/controllers/plugins.controller.ts +++ b/src/controllers/plugins.controller.ts @@ -303,8 +303,12 @@ export class PluginsController { .status(isUploadable ? StatusCodes.OK : StatusCodes.FORBIDDEN) .send() ) - .catch(() => res.status(StatusCodes.INTERNAL_SERVER_ERROR).send()); + .catch(e => { + console.log(e); + res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(); + }); } catch (e) { + console.log(e); res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(); } }); @@ -407,16 +411,19 @@ export class PluginsController { // eslint-disable-next-line @typescript-eslint/no-misused-promises this.router.get('/versions/:id', async (req: Request, res: Response) => { try { - if (req.query.arch === undefined) { + if (req.query.arch === undefined || req.params.id === undefined) { res.status(StatusCodes.BAD_REQUEST).send(); return; } - const versions = await this.pluginsManager.getVersions(); + const version = await this.pluginsManager.getVersion( + req.params.id, + req.query.arch as string + ); res .status( - versions.length === 0 ? StatusCodes.NOT_FOUND : StatusCodes.OK + version === undefined ? StatusCodes.NOT_FOUND : StatusCodes.OK ) - .send(versions === undefined ? undefined : versions); + .send(version === undefined ? undefined : [{version}]); return; } catch (e) { res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(); diff --git a/src/services/plugins.manager.service.ts b/src/services/plugins.manager.service.ts index bf96f846eff28c3ba3283e807f90321367489383..00b5cd2f6c6023c2548a8ff806f7cab09be31441 100644 --- a/src/services/plugins.manager.service.ts +++ b/src/services/plugins.manager.service.ts @@ -275,21 +275,28 @@ export class PluginsManager { ); } - async getVersions(): Promise<Array<{id: string; version: string}>> { + async getVersion(id: string, arch: string): Promise<string | undefined> { + const plugin = await this.findPlugin(id, arch); + return plugin === undefined ? undefined : plugin.version; + } + + async getVersions( + arch: string + ): Promise<Array<{id: string; version: string}>> { if (this.plugins.length === 0) { await this.setPlugins(); } - const versions: Array<{id: string; version: string}> = []; - for (const plugin of this.plugins) { - const version = plugin.version; - if (version !== undefined) { - versions.push({ + return this.plugins + .filter( + (plugins: Plugins) => + plugins.arches.includes(arch) && plugins.version !== undefined + ) + .map((plugin: Plugins) => { + return { id: plugin.id, - version, - }); - } - } - return versions; + version: plugin.version, + }; + }); } private async setPlugins(): Promise<void> { diff --git a/tests/plugins.manager.test.ts b/tests/plugins.manager.test.ts index 4f46547195126188cc91daad47b74de1d48d86f9..d334168bfbd15177080e23e99ed72e8e54e210e6 100644 --- a/tests/plugins.manager.test.ts +++ b/tests/plugins.manager.test.ts @@ -318,7 +318,7 @@ describe('Plugins manager service tests', function () { { id: 'plugin3', version: '3.0.0' }, ]; - const actualVersions = await pluginsManagerService.getVersions(); + const actualVersions = await pluginsManagerService.getVersions('x64'); expect(actualVersions).toEqual(expectedVersions); });