@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
103 lines (102 loc) • 4.13 kB
JavaScript
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "appBootstrap", {
enumerable: true,
get: function() {
return appBootstrap;
}
});
const _cookie = /*#__PURE__*/ _interop_require_default(require("@fastify/cookie"));
const _helmet = /*#__PURE__*/ _interop_require_default(require("@fastify/helmet"));
const _multipart = /*#__PURE__*/ _interop_require_default(require("@fastify/multipart"));
const _common = require("@nestjs/common");
const _core = require("@nestjs/core");
const _platformfastify = require("@nestjs/platform-fastify");
const _nestjspino = require("nestjs-pino");
const _appconstants = require("./app.constants");
const _appmodule = require("./app.module");
const _applicationsconstants = require("./applications/applications.constants");
const _configconstants = require("./configuration/config.constants");
const _configenvironment = require("./configuration/config.environment");
const _websocketadapter = require("./infrastructure/websocket/adapters/web-socket.adapter");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
async function appBootstrap() {
/* APP */ const fastifyAdapter = new _platformfastify.FastifyAdapter({
logger: false,
trustProxy: _configenvironment.configuration.server.trustProxy,
ignoreTrailingSlash: true,
maxParamLength: 256,
bodyLimit: 26214400 /* 25 MB */
});
const app = await _core.NestFactory.create(_appmodule.AppModule, fastifyAdapter, {
bufferLogs: true
});
/* Fastify instance */ const fastifyInstance = fastifyAdapter.getInstance();
/* LOGGER */ app.useLogger(_configconstants.IS_TEST_ENV ? [
'fatal'
] : app.get(_nestjspino.Logger));
/* PARSER */ // xml body parser is used for webdav methods
app.useBodyParser([
'application/xml',
'text/xml'
]);
// add webdav methods
for (const method of Object.values(_applicationsconstants.HTTP_WEBDAV_METHOD)){
fastifyInstance.addHttpMethod(method, {
hasBody: true
});
}
// '*' body parser allow binary data as stream (unlimited body size)
fastifyInstance.addContentTypeParser('*', {
bodyLimit: 0
}, (_req, _payload, done)=>done(null));
/* INTERCEPTORS */ app.useGlobalInterceptors(new _nestjspino.LoggerErrorInterceptor(), new _common.ClassSerializerInterceptor(app.get(_core.Reflector), {
excludePrefixes: [
'_'
]
}));
/* VALIDATION */ app.useGlobalPipes(new _common.ValidationPipe({
transform: true,
whitelist: true
}));
/* STATIC */ app.useStaticAssets({
root: _configconstants.STATIC_PATH,
prefixAvoidTrailingSlash: true
});
/* SECURITY */ await app.register(_helmet.default, {
contentSecurityPolicy: (0, _appconstants.CONTENT_SECURITY_POLICY)(_configenvironment.configuration.applications.files.onlyoffice.externalServer)
});
/* COOKIES */ // we use csrf secret to unsign csrf cookie
await app.register(_cookie.default, {
secret: _configenvironment.configuration.auth.token.csrf.secret,
parseOptions: {
secure: 'auto',
sameSite: _configenvironment.configuration.auth.sameSite,
httpOnly: true
}
});
/* UPLOAD */ await app.register(_multipart.default, {
preservePath: true,
limits: {
parts: Infinity,
fileSize: _configenvironment.configuration.applications.files.maxUploadSize
}
});
/* WEBSOCKET */ if (!_configconstants.IS_TEST_ENV) {
const webSocketAdapter = new _websocketadapter.WebSocketAdapter(app);
await webSocketAdapter.initAdapter();
app.useWebSocketAdapter(webSocketAdapter);
}
return app;
}
//# sourceMappingURL=app.bootstrap.js.map