UNPKG

fastify-openapi-connector

Version:

Fastify plugin that will set-up routes with security & json validation based on OpenAPI specification

40 lines (39 loc) 1.87 kB
import { fastifyPlugin } from 'fastify-plugin'; import { registerComponents } from './components.js'; import { determinePrefix } from './determinePrefix.js'; import { setupRoutes } from './setupRoutes.js'; // define plugin using promises const myPluginAsync = async (fastify, { openApiSpecification, securityHandlers, operationHandlers, settings }) => { const { components, security: globalSecurity, paths, webhooks, servers } = openApiSpecification; const prefix = determinePrefix(fastify, settings, servers); const setupRoutesAndValidation = async (fastify) => { registerComponents(fastify, components); if (settings?.initializePaths !== false && paths) { setupRoutes(fastify, { operationHandlers, paths, globalSecurity, securityHandlers }, { isWebhook: false, useXSecurity: settings?.useXSecurity, validateResponse: settings?.validateResponses, contentTypes: settings?.contentTypes ?? ['application/json'], }); } if (settings?.initializeWebhooks === true && webhooks) { setupRoutes(fastify, { operationHandlers, paths: webhooks, globalSecurity, securityHandlers }, { isWebhook: true, useXSecurity: settings?.useXSecurity, validateResponse: settings?.validateResponses, contentTypes: settings?.contentTypes ?? ['application/json'], }); } if (!paths && !webhooks) { fastify.log.error('No paths or webhooks found in OpenAPI specification!'); } }; fastify.register(setupRoutesAndValidation, { prefix }); }; /** * Plugin to connect Fastify with OpenAPI specification */ export const openApiConnectorPlugin = fastifyPlugin(myPluginAsync, { fastify: '>=4.0.0', name: 'fastify-openapi-connector', });