jan/server/index.ts
Louis 74ed081e4f
refactor: add app and nitro log - resolve dependencies issue (#1447)
* refactor: add app and nitro log - resolve dependencies issue

* fix: update guidance message on inference error

* chore: add timestamp to log files

* chore: add clear logs action
2024-01-10 16:43:28 +07:00

81 lines
2.1 KiB
TypeScript

import fastify from "fastify";
import dotenv from "dotenv";
import { log, v1Router } from "@janhq/core/node";
import path from "path";
import os from "os";
dotenv.config();
const JAN_API_HOST = process.env.JAN_API_HOST || "127.0.0.1";
const JAN_API_PORT = Number.parseInt(process.env.JAN_API_PORT || "1337");
const serverLogPath = path.join(os.homedir(), "jan", "logs", "server.log");
let server: any | undefined = undefined;
export const startServer = async (schemaPath?: string, baseDir?: string) => {
try {
log(`[API]::Debug: Starting JAN API server...`, "server.log")
server = fastify({
logger: {
level: "info",
file: serverLogPath,
},
});
await server.register(require("@fastify/cors"), {});
await server.register(require("@fastify/swagger"), {
mode: "static",
specification: {
path: schemaPath ?? "./../docs/openapi/jan.yaml",
baseDir: baseDir ?? "./../docs/openapi",
},
});
await server.register(require("@fastify/swagger-ui"), {
routePrefix: "/",
baseDir: baseDir ?? path.join(__dirname, "../..", "./docs/openapi"),
uiConfig: {
docExpansion: "full",
deepLinking: false,
},
staticCSP: false,
transformSpecificationClone: true,
});
await server.register(
(childContext: any, _: any, done: any) => {
childContext.register(require("@fastify/static"), {
root:
process.env.EXTENSION_ROOT ||
path.join(require("os").homedir(), "jan", "extensions"),
wildcard: false,
});
done();
},
{ prefix: "extensions" }
);
await server.register(v1Router, { prefix: "/v1" });
await server
.listen({
port: JAN_API_PORT,
host: JAN_API_HOST,
})
.then(() => {
log(`[API]::Debug: JAN API listening at: http://${JAN_API_HOST}:${JAN_API_PORT}`);
});
} catch (e) {
log(`[API]::Error: ${e}`);
}
};
export const stopServer = async () => {
try {
log(`[API]::Debug: Server stopped`, "server.log")
await server.close();
} catch (e) {
log(`[API]::Error: ${e}`);
}
};