diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 889c3df..c725c6e 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -15,6 +15,7 @@ import v5ReportRoutes from 'routes/v5/report'; import v6DataRoutes from 'routes/v6/data'; import v6IssuesRoutes from 'routes/v6/issues'; import v6ReportRoutes from 'routes/v6/report'; +import v6VersionRoutes from 'routes/v6/version'; import environment from 'services/environment'; const server = fastify({ logger: true }); @@ -45,6 +46,7 @@ server.register(v5ReportRoutes, { prefix: '/rest/v5' }); server.register(v6DataRoutes, { prefix: '/rest/v6' }); server.register(v6IssuesRoutes, { prefix: '/rest/v6' }); server.register(v6ReportRoutes, { prefix: '/rest/v6' }); +server.register(v6VersionRoutes, { prefix: '/rest/v6' }); server.listen({ host: '0.0.0.0', port: environment.port }, (error, address) => { if (error) { diff --git a/packages/api/src/routes/v6/version.ts b/packages/api/src/routes/v6/version.ts new file mode 100644 index 0000000..63b22ad --- /dev/null +++ b/packages/api/src/routes/v6/version.ts @@ -0,0 +1,35 @@ +import { FastifyInstance, RouteShorthandOptions } from 'fastify'; +import fetch from 'node-fetch'; +import environment from 'services/environment'; +import { RATE_LIMIT_10_PER_MIN } from 'services/rateLimit'; + +export default (server: FastifyInstance, _options: RouteShorthandOptions, done: () => void) => { + server.get( + '/version/', + { + config: { + rateLimit: RATE_LIMIT_10_PER_MIN, + }, + }, + async (_request, reply) => { + try { + const manifest = `${environment.gitea.raw}/packages/browser-extension/src/manifest.json`; + const options = { headers: { 'Cache-Control': 'no-cache' } }; + const response = await fetch(manifest, options); + const { version } = await response.json(); + + reply.send({ + data: version, + success: true, + }); + } catch (error) { + reply.send({ + errors: [error.message], + success: false, + }); + } + } + ); + + done(); +};