@verdaccio/server-fastify
Version:
fastify server api implementation
69 lines (61 loc) • 1.93 kB
text/typescript
import buildDebug from 'debug';
import { FastifyInstance } from 'fastify';
import { stringUtils } from '@verdaccio/core';
import { Storage } from '@verdaccio/store';
import { Package, Version } from '@verdaccio/types';
const debug = buildDebug('verdaccio:fastify:api:sidebar');
export type $SidebarPackage = Package & { latest: Version };
interface ParamsInterface {
name: string;
version: string;
}
async function manifestRoute(fastify: FastifyInstance) {
fastify.get<{ Params: ParamsInterface }>('/:name', async (request) => {
const { name } = request.params;
const storage = fastify.storage;
debug('pkg name %s ', name);
// @ts-ignore
const abbreviated =
stringUtils.getByQualityPriorityValue(request.headers['accept']) ===
Storage.ABBREVIATED_HEADER;
const data = await storage?.getPackageByOptions({
name,
// @ts-ignore
uplinksLook: true,
requestOptions: {
protocol: request.protocol,
headers: request.headers as any,
host: request.hostname,
},
abbreviated,
});
return data;
});
interface QueryInterface {
write: string;
}
fastify.get<{ Params: ParamsInterface; Querystring: QueryInterface }>(
'/:packageName/:version',
async (request) => {
const { name, version } = request.params;
const storage = fastify.storage;
const write = request.query.write === 'true';
debug('pkg name %s, with version / tag: %s ', name, version);
const requestOptions = {
protocol: request.protocol,
headers: request.headers as any,
host: request.hostname,
remoteAddress: request.socket.remoteAddress,
byPassCache: write,
};
const data = await storage?.getPackageByOptions({
name,
version,
uplinksLook: true,
requestOptions,
});
return data;
}
);
}
export default manifestRoute;