Configuration

App configuration in Entropy is stored in two main files: src/main.ts and .env.

Environment Configuration

A default Entropy project contains a file called .env. This file is the place where things like database credentials and environment-specific settings should be stored. Entropy automatically reads all environment variables. The default .env file contains following variables:

      

.env

CACHE_MAX_AGE=0 # days COOKIE_MAX_AGE=30 # days DATABASE_URL=mysql://root:@localhost/entropy ENCRYPTION_KEY= HOST=localhost PORT=5050 SESSION_LIFETIME=30 # days

Reading Environment Data

You can read environment variables using env generic function:

      

src/main.ts

import { env } from '@entropy/configurator'; const port = env<number>('PORT'); // 5050 const host = env<string | null>('HOST'); // 'localhost' or null

Example .env File

Developers often use version control systems like Git to work in teams. You should remember not to store .env files in repositories for security reasons (they contain database passwords etc.). That's why we should exclude these files from version control and only publish an example .env.example file synced with the original one.

App Configuration

Any other, app-specific configuration is passed into the createServer function in src/main.ts file. The configuration looks like this:

      

src/main.ts

import { createServer } from '@entropy/server'; import { RootModule } from './root.module.ts'; if (import.meta.main) { const server = await createServer({ config: { contentSecurityPolicy: { allowedOrigins: [ 'https://fonts.googleapis.com', ], }, envFile: '.env', locales: { default: 'en', }, }, modules: [RootModule], }); await server.start(); }

To customize app settings, pass configuration options through the config field. Available options are listed below.

Cache

To enable caching and to set cache lifetime, use the cache.enabled and cache.maxAge options.

      

src/main.ts

const server = await createServer({ config: { cache: { enabled: true, maxAge: 20, // default is set in CACHE_MAX_AGE option in .env file }, }, // ... });

Content Security Policy

To control Content Security Policy configuration, use following options:

  

src/main.ts

const server = await createServer({ config: { contentSecurityPolicy: { allowInlineScripts: false, allowInlineStyles: true, allowedOrigins: [ 'https://fonts.googleapis.com', ], }, }, // ... });

Cookies

Managing cookies is simple. You can leverage the cookies.maxAge option to set cookie expiry time.

      

src/main.ts

const server = await createServer({ config: { cookies: { maxAge: 30, // default is set in COOKIE_MAX_AGE option in .env file }, }, // ... });

CORS

Setting CORS is done using cors.allowed{Headers,Methods,Origins} options. You can set expiry time with cors.maxAge option.

      

src/main.ts

import { HttpMethod } from '@entropy/http'; const server = await createServer({ config: { cors: { allowedMethods: [ HttpMethod.Get, ], allowedOrigins: [ 'https://some-website.com', ], maxAge: 15, }, }, // ... });

CSRF Protection

You can disable the built-in CSRF protection for form requests using csrfProtection option.

Disabling the CSRF protection is not recommended as it may expose your application to malicious attacks. Note that Entropy automatically disables this feature in testing environments so you don't have to do it manually.
      

src/main.ts

const server = await createServer({ config: { cookies: { maxAge: 30, // default is set in COOKIE_MAX_AGE option in .env file }, }, // ... });

Locales

You may set the application supported locales along with the default one for localization.

      

src/main.ts

const server = await createServer({ config: { locales: { default: 'en', supported: ['de', 'en', 'fr', 'pl'], }, }, // ... });

Logger

You can entirely disable logger logs setting logger.enabled to false.

    

src/main.ts

const server = await createServer({ config: { logger: { enabled: false, staticFileRequests: true, // Log server file requests }, }, // ... });

Automatic Sitemap and robots.txt File Generation

Entropy has built-in feature of auto-generating sitemap.xml and robots.txt SEO files.

      

src/main.ts

const server = await createServer({ config: { seo: { robots: true, sitemap: true, }, }, // ... });
Overview Modules