@verdaccio/server-fastify
Version:
fastify server api implementation
38 lines (31 loc) • 1.02 kB
text/typescript
/* eslint-disable no-console */
/* eslint-disable no-invalid-this */
import { FastifyInstance } from 'fastify';
import { searchUtils } from '@verdaccio/core';
import { logger } from '@verdaccio/logger';
interface QueryInterface {
url: string;
query: searchUtils.SearchQuery;
}
async function searchRoute(fastify: FastifyInstance) {
fastify.get<{ Querystring: QueryInterface }>('/-/v1/search', async (request, reply) => {
// TODO: apply security layer here like in
// packages/api/src/v1/search.ts
// TODO: add validations for query, some parameters are mandatory
// TODO: review which query fields are mandatory
const abort = new AbortController();
request.socket.on('aborted', () => {
abort.abort();
});
const { url, query } = request.query;
const storage = fastify.storage;
const data = await storage.search({
query,
url,
abort,
});
logger.http('search endpoint');
reply.code(200).send(data);
});
}
export default searchRoute;