mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			tree-activ
			...
			fix/try-to
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 055556891d | ||
|  | a58cfbec05 | 
| @@ -3,31 +3,70 @@ import swaggerUi from "swagger-ui-express"; | ||||
| import { join } from "path"; | ||||
| import yaml from "js-yaml"; | ||||
| import type { JsonObject } from "swagger-ui-express"; | ||||
| import { readFileSync } from "fs"; | ||||
| import fs from "fs"; | ||||
| import { RESOURCE_DIR } from "../services/resource_dir"; | ||||
| import log from "../services/log"; | ||||
|  | ||||
| // Cache the documents to avoid repeated file reads, especially important for ASAR archives | ||||
| let etapiDocument: JsonObject | null = null; | ||||
| let apiDocument: JsonObject | null = null; | ||||
|  | ||||
| function loadDocuments(): { etapi: JsonObject | null; api: JsonObject | null } { | ||||
|     if (etapiDocument && apiDocument) { | ||||
|         return { etapi: etapiDocument, api: apiDocument }; | ||||
|     } | ||||
|  | ||||
|     try { | ||||
|         const etapiPath = join(RESOURCE_DIR, "etapi.openapi.yaml"); | ||||
|         const apiPath = join(RESOURCE_DIR, "api-openapi.yaml"); | ||||
|          | ||||
|         // Load and cache the documents | ||||
|         const etapiYaml = fs.readFileSync(etapiPath, "utf8"); | ||||
|         etapiDocument = yaml.load(etapiYaml) as JsonObject; | ||||
|          | ||||
|         const apiYaml = fs.readFileSync(apiPath, "utf8"); | ||||
|         apiDocument = yaml.load(apiYaml) as JsonObject; | ||||
|          | ||||
|         log.info("OpenAPI documents loaded successfully"); | ||||
|         return { etapi: etapiDocument, api: apiDocument }; | ||||
|     } catch (error) { | ||||
|         log.error(`Failed to load OpenAPI documents from ${RESOURCE_DIR}: ${error}`); | ||||
|         return { etapi: null, api: null }; | ||||
|     } | ||||
| } | ||||
|  | ||||
| export default function register(app: Application) { | ||||
|     const etapiDocument = yaml.load(readFileSync(join(RESOURCE_DIR, "etapi.openapi.yaml"), "utf8")) as JsonObject; | ||||
|      | ||||
|     // Load the comprehensive API documentation from YAML | ||||
|     const apiDocument = yaml.load(readFileSync(join(RESOURCE_DIR, "api-openapi.yaml"), "utf8")) as JsonObject; | ||||
|     try { | ||||
|         const docs = loadDocuments(); | ||||
|          | ||||
|         if (!docs.etapi || !docs.api) { | ||||
|             log.error("OpenAPI documents could not be loaded, skipping API documentation setup"); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|     app.use( | ||||
|         "/etapi/docs/", | ||||
|         swaggerUi.serveFiles(etapiDocument), | ||||
|         swaggerUi.setup(etapiDocument, { | ||||
|             explorer: true, | ||||
|             customSiteTitle: "TriliumNext ETAPI Documentation" | ||||
|         }) | ||||
|     ); | ||||
|         // Use serveFiles for multiple Swagger instances | ||||
|         // Note: serveFiles returns an array of middleware, so we need to spread it | ||||
|         app.use( | ||||
|             "/etapi/docs",  | ||||
|             ...swaggerUi.serveFiles(docs.etapi),  | ||||
|             swaggerUi.setup(docs.etapi, { | ||||
|                 explorer: true, | ||||
|                 customSiteTitle: "TriliumNext ETAPI Documentation" | ||||
|             }) | ||||
|         ); | ||||
|  | ||||
|     app.use( | ||||
|         "/api/docs/", | ||||
|         swaggerUi.serveFiles(apiDocument), | ||||
|         swaggerUi.setup(apiDocument, { | ||||
|             explorer: true, | ||||
|             customSiteTitle: "TriliumNext Internal API Documentation", | ||||
|             customCss: '.swagger-ui .topbar { display: none }' | ||||
|         }) | ||||
|     ); | ||||
|         app.use( | ||||
|             "/api/docs",  | ||||
|             ...swaggerUi.serveFiles(docs.api),  | ||||
|             swaggerUi.setup(docs.api, { | ||||
|                 explorer: true, | ||||
|                 customSiteTitle: "TriliumNext Internal API Documentation", | ||||
|                 customCss: '.swagger-ui .topbar { display: none }' | ||||
|             }) | ||||
|         ); | ||||
|          | ||||
|         log.info("Swagger UI endpoints registered at /etapi/docs and /api/docs"); | ||||
|     } catch (error) { | ||||
|         log.error(`Failed to setup API documentation: ${error}`); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user