2022-04-08 10:37:27 -07:00
/* eslint-disable no-restricted-syntax */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
2022-04-08 14:32:08 -07:00
import path from 'path' ;
2022-12-06 10:15:15 -08:00
import convict from 'convict' ;
import { UserSettings } from 'n8n-core' ;
import { jsonParse } from 'n8n-workflow' ;
convict . addFormat ( {
name : 'nodes-list' ,
// @ts-ignore
validate ( values : string [ ] , { env } : { env : string } ) : void {
try {
if ( ! Array . isArray ( values ) ) {
throw new Error ( ) ;
}
for ( const value of values ) {
if ( typeof value !== 'string' ) {
throw new Error ( ) ;
}
}
} catch ( error ) {
throw new TypeError ( ` ${ env } is not a valid Array of strings. ` ) ;
}
} ,
coerce ( rawValue : string ) : string [ ] {
return jsonParse ( rawValue , { errorMessage : 'nodes-list needs to be valid JSON' } ) ;
} ,
} ) ;
2022-04-08 10:37:27 -07:00
export const schema = {
database : {
type : {
doc : 'Type of database to use' ,
format : [ 'sqlite' , 'mariadb' , 'mysqldb' , 'postgresdb' ] as const ,
default : 'sqlite' ,
env : 'DB_TYPE' ,
} ,
tablePrefix : {
doc : 'Prefix for table names' ,
format : '*' ,
default : '' ,
env : 'DB_TABLE_PREFIX' ,
} ,
logging : {
enabled : {
doc : 'Typeorm logging enabled flag.' ,
format : Boolean ,
default : false ,
env : 'DB_LOGGING_ENABLED' ,
} ,
options : {
doc : 'Logging level options, default is "error". Possible values: query,error,schema,warn,info,log. To enable all logging, specify "all"' ,
format : String ,
default : 'error' ,
env : 'DB_LOGGING_OPTIONS' ,
} ,
maxQueryExecutionTime : {
doc : 'Maximum number of milliseconds query should be executed before logger logs a warning. Set 0 to disable long running query warning' ,
format : Number ,
default : 1000 ,
env : 'DB_LOGGING_MAX_EXECUTION_TIME' ,
} ,
} ,
postgresdb : {
database : {
doc : 'PostgresDB Database' ,
format : String ,
default : 'n8n' ,
env : 'DB_POSTGRESDB_DATABASE' ,
} ,
host : {
doc : 'PostgresDB Host' ,
format : String ,
default : 'localhost' ,
env : 'DB_POSTGRESDB_HOST' ,
} ,
password : {
doc : 'PostgresDB Password' ,
format : String ,
default : '' ,
env : 'DB_POSTGRESDB_PASSWORD' ,
} ,
port : {
doc : 'PostgresDB Port' ,
format : Number ,
default : 5432 ,
env : 'DB_POSTGRESDB_PORT' ,
} ,
user : {
doc : 'PostgresDB User' ,
format : String ,
default : 'root' ,
env : 'DB_POSTGRESDB_USER' ,
} ,
schema : {
doc : 'PostgresDB Schema' ,
format : String ,
default : 'public' ,
env : 'DB_POSTGRESDB_SCHEMA' ,
} ,
ssl : {
ca : {
doc : 'SSL certificate authority' ,
format : String ,
default : '' ,
env : 'DB_POSTGRESDB_SSL_CA' ,
} ,
cert : {
doc : 'SSL certificate' ,
format : String ,
default : '' ,
env : 'DB_POSTGRESDB_SSL_CERT' ,
} ,
key : {
doc : 'SSL key' ,
format : String ,
default : '' ,
env : 'DB_POSTGRESDB_SSL_KEY' ,
} ,
rejectUnauthorized : {
doc : 'If unauthorized SSL connections should be rejected' ,
format : 'Boolean' ,
default : true ,
env : 'DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED' ,
} ,
} ,
} ,
mysqldb : {
database : {
doc : 'MySQL Database' ,
format : String ,
default : 'n8n' ,
env : 'DB_MYSQLDB_DATABASE' ,
} ,
host : {
doc : 'MySQL Host' ,
format : String ,
default : 'localhost' ,
env : 'DB_MYSQLDB_HOST' ,
} ,
password : {
doc : 'MySQL Password' ,
format : String ,
default : '' ,
env : 'DB_MYSQLDB_PASSWORD' ,
} ,
port : {
doc : 'MySQL Port' ,
format : Number ,
default : 3306 ,
env : 'DB_MYSQLDB_PORT' ,
} ,
user : {
doc : 'MySQL User' ,
format : String ,
default : 'root' ,
env : 'DB_MYSQLDB_USER' ,
} ,
} ,
sqlite : {
2022-11-04 06:23:58 -07:00
database : {
doc : 'SQLite Database file name' ,
format : String ,
default : 'database.sqlite' ,
env : 'DB_SQLITE_DATABASE' ,
} ,
2022-04-08 10:37:27 -07:00
executeVacuumOnStartup : {
doc : 'Runs VACUUM operation on startup to rebuild the database. Reduces filesize and optimizes indexes. WARNING: This is a long running blocking operation. Will increase start-up time.' ,
format : Boolean ,
default : false ,
env : 'DB_SQLITE_VACUUM_ON_STARTUP' ,
} ,
} ,
} ,
credentials : {
overwrite : {
data : {
// Allows to set default values for credentials which
// get automatically prefilled and the user does not get
// displayed and can not change.
2022-09-02 07:13:17 -07:00
// Format: { CREDENTIAL_NAME: { PARAMETER: VALUE }}
2022-04-08 10:37:27 -07:00
doc : 'Overwrites for credentials' ,
format : '*' ,
default : '{}' ,
env : 'CREDENTIALS_OVERWRITE_DATA' ,
} ,
endpoint : {
doc : 'Fetch credentials from API' ,
format : String ,
default : '' ,
env : 'CREDENTIALS_OVERWRITE_ENDPOINT' ,
} ,
} ,
defaultName : {
doc : 'Default name for credentials' ,
format : String ,
default : 'My credentials' ,
env : 'CREDENTIALS_DEFAULT_NAME' ,
} ,
} ,
workflows : {
defaultName : {
doc : 'Default name for workflow' ,
format : String ,
default : 'My workflow' ,
env : 'WORKFLOWS_DEFAULT_NAME' ,
} ,
2022-05-16 09:19:33 -07:00
onboardingFlowDisabled : {
doc : 'Show onboarding flow in new workflow' ,
format : 'Boolean' ,
default : false ,
env : 'N8N_ONBOARDING_FLOW_DISABLED' ,
} ,
2022-10-26 05:59:54 -07:00
callerPolicyDefaultOption : {
doc : 'Default option for which workflows may call the current workflow' ,
format : [ 'any' , 'none' , 'workflowsFromAList' ] as const ,
default : 'any' ,
env : 'N8N_WORKFLOW_CALLER_POLICY_DEFAULT_OPTION' ,
} ,
2022-04-08 10:37:27 -07:00
} ,
executions : {
// By default workflows get always executed in their own process.
// If this option gets set to "main" it will run them in the
// main-process instead.
process : {
doc : 'In what process workflows should be executed' ,
format : [ 'main' , 'own' ] as const ,
default : 'own' ,
env : 'EXECUTIONS_PROCESS' ,
} ,
mode : {
doc : 'If it should run executions directly or via queue' ,
format : [ 'regular' , 'queue' ] as const ,
default : 'regular' ,
env : 'EXECUTIONS_MODE' ,
} ,
// A Workflow times out and gets canceled after this time (seconds).
// If the workflow is executed in the main process a soft timeout
// is executed (takes effect after the current node finishes).
// If a workflow is running in its own process is a soft timeout
// tried first, before killing the process after waiting for an
// additional fifth of the given timeout duration.
//
// To deactivate timeout set it to -1
//
// Timeout is currently not activated by default which will change
// in a future version.
timeout : {
doc : 'Max run time (seconds) before stopping the workflow execution' ,
format : Number ,
default : - 1 ,
env : 'EXECUTIONS_TIMEOUT' ,
} ,
maxTimeout : {
doc : 'Max execution time (seconds) that can be set for a workflow individually' ,
format : Number ,
default : 3600 ,
env : 'EXECUTIONS_TIMEOUT_MAX' ,
} ,
// If a workflow executes all the data gets saved by default. This
// could be a problem when a workflow gets executed a lot and processes
// a lot of data. To not exceed the database's capacity it is possible to
// prune the database regularly or to not save the execution at all.
// Depending on if the execution did succeed or error a different
// save behaviour can be set.
saveDataOnError : {
doc : 'What workflow execution data to save on error' ,
format : [ 'all' , 'none' ] as const ,
default : 'all' ,
env : 'EXECUTIONS_DATA_SAVE_ON_ERROR' ,
} ,
saveDataOnSuccess : {
doc : 'What workflow execution data to save on success' ,
format : [ 'all' , 'none' ] as const ,
default : 'all' ,
env : 'EXECUTIONS_DATA_SAVE_ON_SUCCESS' ,
} ,
saveExecutionProgress : {
2022-09-02 07:13:17 -07:00
doc : 'Whether or not to save progress for each node executed' ,
2022-04-08 10:37:27 -07:00
format : 'Boolean' ,
default : false ,
env : 'EXECUTIONS_DATA_SAVE_ON_PROGRESS' ,
} ,
// If the executions of workflows which got started via the editor
// should be saved. By default they will not be saved as this runs
// are normally only for testing and debugging. This setting can
// also be overwritten on a per workflow basis in the workflow settings
// in the editor.
saveDataManualExecutions : {
doc : 'Save data of executions when started manually via editor' ,
format : 'Boolean' ,
default : false ,
env : 'EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS' ,
} ,
// To not exceed the database's capacity and keep its size moderate
// the execution data gets pruned regularly (default: 1 hour interval).
// All saved execution data older than the max age will be deleted.
// Pruning is currently not activated by default, which will change in
// a future version.
pruneData : {
doc : 'Delete data of past executions on a rolling basis' ,
format : 'Boolean' ,
default : false ,
env : 'EXECUTIONS_DATA_PRUNE' ,
} ,
pruneDataMaxAge : {
doc : 'How old (hours) the execution data has to be to get deleted' ,
format : Number ,
default : 336 ,
env : 'EXECUTIONS_DATA_MAX_AGE' ,
} ,
pruneDataTimeout : {
doc : 'Timeout (seconds) after execution data has been pruned' ,
format : Number ,
default : 3600 ,
env : 'EXECUTIONS_DATA_PRUNE_TIMEOUT' ,
} ,
} ,
queue : {
health : {
active : {
doc : 'If health checks should be enabled' ,
format : 'Boolean' ,
default : false ,
env : 'QUEUE_HEALTH_CHECK_ACTIVE' ,
} ,
port : {
doc : 'Port to serve health check on if activated' ,
format : Number ,
default : 5678 ,
env : 'QUEUE_HEALTH_CHECK_PORT' ,
} ,
} ,
bull : {
prefix : {
doc : 'Prefix for all queue keys' ,
format : String ,
default : '' ,
env : 'QUEUE_BULL_PREFIX' ,
} ,
redis : {
db : {
doc : 'Redis DB' ,
format : Number ,
default : 0 ,
env : 'QUEUE_BULL_REDIS_DB' ,
} ,
host : {
doc : 'Redis Host' ,
format : String ,
default : 'localhost' ,
env : 'QUEUE_BULL_REDIS_HOST' ,
} ,
password : {
doc : 'Redis Password' ,
format : String ,
default : '' ,
env : 'QUEUE_BULL_REDIS_PASSWORD' ,
} ,
port : {
doc : 'Redis Port' ,
format : Number ,
default : 6379 ,
env : 'QUEUE_BULL_REDIS_PORT' ,
} ,
timeoutThreshold : {
doc : 'Redis timeout threshold' ,
format : Number ,
default : 10000 ,
env : 'QUEUE_BULL_REDIS_TIMEOUT_THRESHOLD' ,
} ,
} ,
queueRecoveryInterval : {
doc : 'If > 0 enables an active polling to the queue that can recover for Redis crashes. Given in seconds; 0 is disabled. May increase Redis traffic significantly.' ,
format : Number ,
default : 60 ,
env : 'QUEUE_RECOVERY_INTERVAL' ,
} ,
2022-09-02 06:40:45 -07:00
gracefulShutdownTimeout : {
doc : 'How long should n8n wait for running executions before exiting worker process' ,
format : Number ,
default : 30 ,
env : 'QUEUE_WORKER_TIMEOUT' ,
} ,
2022-04-08 10:37:27 -07:00
} ,
} ,
generic : {
// The timezone to use. Is important for nodes like "Cron" which start the
// workflow automatically at a specified time. This setting can also be
2022-09-02 07:13:17 -07:00
// overwritten on a per workflow basis in the workflow settings in the
2022-04-08 10:37:27 -07:00
// editor.
timezone : {
doc : 'The timezone to use' ,
format : '*' ,
default : 'America/New_York' ,
env : 'GENERIC_TIMEZONE' ,
} ,
} ,
// How n8n can be reached (Editor & REST-API)
path : {
format : String ,
default : '/' ,
arg : 'path' ,
env : 'N8N_PATH' ,
doc : 'Path n8n is deployed to' ,
} ,
host : {
format : String ,
default : 'localhost' ,
arg : 'host' ,
env : 'N8N_HOST' ,
doc : 'Host name n8n can be reached' ,
} ,
port : {
format : Number ,
default : 5678 ,
arg : 'port' ,
env : 'N8N_PORT' ,
doc : 'HTTP port n8n can be reached' ,
} ,
listen_address : {
format : String ,
default : '0.0.0.0' ,
env : 'N8N_LISTEN_ADDRESS' ,
doc : 'IP address n8n should listen on' ,
} ,
protocol : {
format : [ 'http' , 'https' ] as const ,
default : 'http' ,
env : 'N8N_PROTOCOL' ,
doc : 'HTTP Protocol via which n8n can be reached' ,
} ,
ssl_key : {
format : String ,
default : '' ,
env : 'N8N_SSL_KEY' ,
doc : 'SSL Key for HTTPS Protocol' ,
} ,
ssl_cert : {
format : String ,
default : '' ,
env : 'N8N_SSL_CERT' ,
doc : 'SSL Cert for HTTPS Protocol' ,
} ,
editorBaseUrl : {
format : String ,
default : '' ,
env : 'N8N_EDITOR_BASE_URL' ,
doc : 'Public URL where the editor is accessible. Also used for emails sent from n8n.' ,
} ,
security : {
excludeEndpoints : {
doc : 'Additional endpoints to exclude auth checks. Multiple endpoints can be separated by colon (":")' ,
format : String ,
default : '' ,
env : 'N8N_AUTH_EXCLUDE_ENDPOINTS' ,
} ,
basicAuth : {
active : {
format : 'Boolean' ,
default : false ,
env : 'N8N_BASIC_AUTH_ACTIVE' ,
doc : 'If basic auth should be activated for editor and REST-API' ,
} ,
user : {
format : String ,
default : '' ,
env : 'N8N_BASIC_AUTH_USER' ,
doc : 'The name of the basic auth user' ,
} ,
password : {
format : String ,
default : '' ,
env : 'N8N_BASIC_AUTH_PASSWORD' ,
doc : 'The password of the basic auth user' ,
} ,
hash : {
format : 'Boolean' ,
default : false ,
env : 'N8N_BASIC_AUTH_HASH' ,
doc : 'If password for basic auth is hashed' ,
} ,
} ,
jwtAuth : {
active : {
format : 'Boolean' ,
default : false ,
env : 'N8N_JWT_AUTH_ACTIVE' ,
doc : 'If JWT auth should be activated for editor and REST-API' ,
} ,
jwtHeader : {
format : String ,
default : '' ,
env : 'N8N_JWT_AUTH_HEADER' ,
doc : 'The request header containing a signed JWT' ,
} ,
jwtHeaderValuePrefix : {
format : String ,
default : '' ,
env : 'N8N_JWT_AUTH_HEADER_VALUE_PREFIX' ,
doc : 'The request header value prefix to strip (optional)' ,
} ,
jwksUri : {
format : String ,
default : '' ,
env : 'N8N_JWKS_URI' ,
doc : 'The URI to fetch JWK Set for JWT authentication' ,
} ,
jwtIssuer : {
format : String ,
default : '' ,
env : 'N8N_JWT_ISSUER' ,
doc : 'JWT issuer to expect (optional)' ,
} ,
jwtNamespace : {
format : String ,
default : '' ,
env : 'N8N_JWT_NAMESPACE' ,
doc : 'JWT namespace to expect (optional)' ,
} ,
jwtAllowedTenantKey : {
format : String ,
default : '' ,
env : 'N8N_JWT_ALLOWED_TENANT_KEY' ,
doc : 'JWT tenant key name to inspect within JWT namespace (optional)' ,
} ,
jwtAllowedTenant : {
format : String ,
default : '' ,
env : 'N8N_JWT_ALLOWED_TENANT' ,
doc : 'JWT tenant to allow (optional)' ,
} ,
} ,
} ,
endpoints : {
payloadSizeMax : {
format : Number ,
default : 16 ,
env : 'N8N_PAYLOAD_SIZE_MAX' ,
doc : 'Maximum payload size in MB.' ,
} ,
metrics : {
enable : {
format : 'Boolean' ,
default : false ,
env : 'N8N_METRICS' ,
doc : 'Enable metrics endpoint' ,
} ,
prefix : {
format : String ,
default : 'n8n_' ,
env : 'N8N_METRICS_PREFIX' ,
doc : 'An optional prefix for metric names. Default: n8n_' ,
} ,
} ,
rest : {
format : String ,
default : 'rest' ,
env : 'N8N_ENDPOINT_REST' ,
doc : 'Path for rest endpoint' ,
} ,
webhook : {
format : String ,
default : 'webhook' ,
env : 'N8N_ENDPOINT_WEBHOOK' ,
doc : 'Path for webhook endpoint' ,
} ,
webhookWaiting : {
format : String ,
default : 'webhook-waiting' ,
env : 'N8N_ENDPOINT_WEBHOOK_WAIT' ,
doc : 'Path for waiting-webhook endpoint' ,
} ,
webhookTest : {
format : String ,
default : 'webhook-test' ,
env : 'N8N_ENDPOINT_WEBHOOK_TEST' ,
doc : 'Path for test-webhook endpoint' ,
} ,
disableUi : {
format : Boolean ,
default : false ,
env : 'N8N_DISABLE_UI' ,
doc : 'Disable N8N UI (Frontend).' ,
} ,
disableProductionWebhooksOnMainProcess : {
format : Boolean ,
default : false ,
env : 'N8N_DISABLE_PRODUCTION_MAIN_PROCESS' ,
doc : 'Disable production webhooks from main process. This helps ensures no http traffic load to main process when using webhook-specific processes.' ,
} ,
2022-11-23 07:20:28 -08:00
skipWebhooksDeregistrationOnShutdown : {
2022-04-08 10:37:27 -07:00
/ * *
2022-11-23 07:20:28 -08:00
* Longer explanation : n8n de - registers webhooks on shutdown / deactivation
2022-04-08 10:37:27 -07:00
* and registers on startup / activation . If we skip
* deactivation on shutdown , webhooks will remain active on 3 rd party services .
* We don ' t have to worry about startup as it always
* checks if webhooks already exist .
* If users want to upgrade n8n , it is possible to run
* two instances simultaneously without downtime , similar
* to blue / green deployment .
* WARNING : Trigger nodes ( like Cron ) will cause duplication
* of work , so be aware when using .
* /
doc : 'Deregister webhooks on external services only when workflows are deactivated.' ,
format : Boolean ,
default : false ,
env : 'N8N_SKIP_WEBHOOK_DEREGISTRATION_SHUTDOWN' ,
} ,
} ,
2022-06-08 11:53:12 -07:00
publicApi : {
disabled : {
format : Boolean ,
default : false ,
env : 'N8N_PUBLIC_API_DISABLED' ,
doc : 'Whether to disable the Public API' ,
} ,
path : {
format : String ,
default : 'api' ,
env : 'N8N_PUBLIC_API_ENDPOINT' ,
doc : 'Path for the public api endpoints' ,
} ,
} ,
2022-04-08 10:37:27 -07:00
workflowTagsDisabled : {
format : Boolean ,
default : false ,
env : 'N8N_WORKFLOW_TAGS_DISABLED' ,
2022-09-02 07:13:17 -07:00
doc : 'Disable workflow tags.' ,
2022-04-08 10:37:27 -07:00
} ,
userManagement : {
disabled : {
doc : 'Disable user management and hide it completely.' ,
format : Boolean ,
default : false ,
env : 'N8N_USER_MANAGEMENT_DISABLED' ,
} ,
jwtSecret : {
doc : 'Set a specific JWT secret (optional - n8n can generate one)' , // Generated @ start.ts
format : String ,
default : '' ,
env : 'N8N_USER_MANAGEMENT_JWT_SECRET' ,
} ,
emails : {
mode : {
doc : 'How to send emails' ,
format : [ '' , 'smtp' ] as const ,
default : 'smtp' ,
env : 'N8N_EMAIL_MODE' ,
} ,
smtp : {
host : {
doc : 'SMTP server host' ,
format : String , // e.g. 'smtp.gmail.com'
default : '' ,
env : 'N8N_SMTP_HOST' ,
} ,
port : {
doc : 'SMTP server port' ,
format : Number ,
default : 465 ,
env : 'N8N_SMTP_PORT' ,
} ,
secure : {
doc : 'Whether or not to use SSL for SMTP' ,
format : Boolean ,
default : true ,
env : 'N8N_SMTP_SSL' ,
} ,
auth : {
user : {
doc : 'SMTP login username' ,
format : String , // e.g.'you@gmail.com'
default : '' ,
env : 'N8N_SMTP_USER' ,
} ,
pass : {
doc : 'SMTP login password' ,
format : String ,
default : '' ,
env : 'N8N_SMTP_PASS' ,
} ,
} ,
sender : {
doc : 'How to display sender name' ,
format : String ,
default : '' ,
env : 'N8N_SMTP_SENDER' ,
} ,
} ,
templates : {
invite : {
doc : 'Overrides default HTML template for inviting new people (use full path)' ,
format : String ,
default : '' ,
env : 'N8N_UM_EMAIL_TEMPLATES_INVITE' ,
} ,
passwordReset : {
doc : 'Overrides default HTML template for resetting password (use full path)' ,
format : String ,
default : '' ,
env : 'N8N_UM_EMAIL_TEMPLATES_PWRESET' ,
} ,
} ,
} ,
} ,
2022-08-19 06:35:39 -07:00
externalFrontendHooksUrls : {
doc : 'URLs to external frontend hooks files, ; separated' ,
format : String ,
2022-08-22 01:20:00 -07:00
default : 'https://public.n8n.cloud/posthog-hooks.js' ,
2022-08-19 06:35:39 -07:00
env : 'EXTERNAL_FRONTEND_HOOKS_URLS' ,
} ,
2022-04-08 10:37:27 -07:00
externalHookFiles : {
doc : 'Files containing external hooks. Multiple files can be separated by colon (":")' ,
format : String ,
default : '' ,
env : 'EXTERNAL_HOOK_FILES' ,
} ,
nodes : {
include : {
doc : 'Nodes to load' ,
2022-12-06 10:15:15 -08:00
format : 'nodes-list' ,
2022-04-08 10:37:27 -07:00
default : undefined ,
env : 'NODES_INCLUDE' ,
} ,
exclude : {
doc : 'Nodes not to load' ,
2022-12-06 10:15:15 -08:00
format : 'nodes-list' ,
default : undefined ,
2022-04-08 10:37:27 -07:00
env : 'NODES_EXCLUDE' ,
} ,
errorTriggerType : {
doc : 'Node Type to use as Error Trigger' ,
format : String ,
default : 'n8n-nodes-base.errorTrigger' ,
env : 'NODES_ERROR_TRIGGER_TYPE' ,
} ,
2022-07-20 07:24:03 -07:00
communityPackages : {
enabled : {
doc : 'Allows you to disable the usage of community packages for nodes' ,
format : Boolean ,
default : true ,
env : 'N8N_COMMUNITY_PACKAGES_ENABLED' ,
} ,
} ,
2022-04-08 10:37:27 -07:00
} ,
logs : {
level : {
doc : 'Log output level' ,
format : [ 'error' , 'warn' , 'info' , 'verbose' , 'debug' , 'silent' ] as const ,
default : 'info' ,
env : 'N8N_LOG_LEVEL' ,
} ,
output : {
doc : 'Where to output logs. Options are: console, file. Multiple can be separated by comma (",")' ,
format : String ,
default : 'console' ,
env : 'N8N_LOG_OUTPUT' ,
} ,
file : {
fileCountMax : {
doc : 'Maximum number of files to keep.' ,
format : Number ,
default : 100 ,
env : 'N8N_LOG_FILE_COUNT_MAX' ,
} ,
fileSizeMax : {
doc : 'Maximum size for each log file in MB.' ,
format : Number ,
default : 16 ,
env : 'N8N_LOG_FILE_SIZE_MAX' ,
} ,
location : {
doc : 'Log file location; only used if log output is set to file.' ,
format : String ,
2022-12-06 10:15:15 -08:00
default : path . join ( UserSettings . getUserN8nFolderPath ( ) , 'logs/n8n.log' ) ,
2022-04-08 10:37:27 -07:00
env : 'N8N_LOG_FILE_LOCATION' ,
} ,
} ,
} ,
versionNotifications : {
enabled : {
doc : 'Whether feature is enabled to request notifications about new versions and security updates.' ,
format : Boolean ,
default : true ,
env : 'N8N_VERSION_NOTIFICATIONS_ENABLED' ,
} ,
endpoint : {
doc : 'Endpoint to retrieve version information from.' ,
format : String ,
2022-05-30 02:29:31 -07:00
default : 'https://api.n8n.io/api/versions/' ,
2022-04-08 10:37:27 -07:00
env : 'N8N_VERSION_NOTIFICATIONS_ENDPOINT' ,
} ,
infoUrl : {
doc : ` Url in New Versions Panel with more information on updating one's instance. ` ,
format : String ,
default : 'https://docs.n8n.io/getting-started/installation/updating.html' ,
env : 'N8N_VERSION_NOTIFICATIONS_INFO_URL' ,
} ,
} ,
templates : {
enabled : {
doc : 'Whether templates feature is enabled to load workflow templates.' ,
format : Boolean ,
default : true ,
env : 'N8N_TEMPLATES_ENABLED' ,
} ,
host : {
doc : 'Endpoint host to retrieve workflow templates from endpoints.' ,
format : String ,
2022-05-30 02:29:31 -07:00
default : 'https://api.n8n.io/api/' ,
2022-04-08 10:37:27 -07:00
env : 'N8N_TEMPLATES_HOST' ,
} ,
} ,
binaryDataManager : {
availableModes : {
format : String ,
default : 'filesystem' ,
env : 'N8N_AVAILABLE_BINARY_DATA_MODES' ,
doc : 'Available modes of binary data storage, as comma separated strings' ,
} ,
mode : {
format : [ 'default' , 'filesystem' ] as const ,
default : 'default' ,
env : 'N8N_DEFAULT_BINARY_DATA_MODE' ,
doc : 'Storage mode for binary data' ,
} ,
localStoragePath : {
format : String ,
2022-12-06 10:15:15 -08:00
default : path . join ( UserSettings . getUserN8nFolderPath ( ) , 'binaryData' ) ,
2022-04-08 10:37:27 -07:00
env : 'N8N_BINARY_DATA_STORAGE_PATH' ,
doc : 'Path for binary data storage in "filesystem" mode' ,
} ,
binaryDataTTL : {
format : Number ,
default : 60 ,
env : 'N8N_BINARY_DATA_TTL' ,
doc : 'TTL for binary data of unsaved executions in minutes' ,
} ,
persistedBinaryDataTTL : {
format : Number ,
default : 1440 ,
env : 'N8N_PERSISTED_BINARY_DATA_TTL' ,
doc : 'TTL for persisted binary data in minutes (binary data gets deleted if not persisted before TTL expires)' ,
} ,
} ,
deployment : {
type : {
format : String ,
default : 'default' ,
env : 'N8N_DEPLOYMENT_TYPE' ,
} ,
} ,
2022-09-21 01:20:29 -07:00
enterprise : {
features : {
sharing : {
format : Boolean ,
default : false ,
} ,
} ,
2022-10-11 05:55:05 -07:00
// This is a temporary flag (acting as feature toggle)
// Will be removed when feature goes live
workflowSharingEnabled : {
format : Boolean ,
default : false ,
} ,
2022-09-21 01:20:29 -07:00
} ,
2022-04-08 10:37:27 -07:00
hiringBanner : {
enabled : {
doc : 'Whether hiring banner in browser console is enabled.' ,
format : Boolean ,
default : true ,
env : 'N8N_HIRING_BANNER_ENABLED' ,
} ,
} ,
personalization : {
enabled : {
doc : 'Whether personalization is enabled.' ,
format : Boolean ,
default : true ,
env : 'N8N_PERSONALIZATION_ENABLED' ,
} ,
} ,
diagnostics : {
enabled : {
doc : 'Whether diagnostic mode is enabled.' ,
format : Boolean ,
default : true ,
env : 'N8N_DIAGNOSTICS_ENABLED' ,
} ,
config : {
2022-08-19 06:35:39 -07:00
posthog : {
apiKey : {
doc : 'API key for PostHog' ,
format : String ,
default : 'phc_4URIAm1uYfJO7j8kWSe0J8lc8IqnstRLS7Jx8NcakHo' ,
env : 'N8N_DIAGNOSTICS_POSTHOG_API_KEY' ,
} ,
apiHost : {
doc : 'API host for PostHog' ,
format : String ,
default : 'https://app.posthog.com' ,
env : 'N8N_DIAGNOSTICS_POSTHOG_API_HOST' ,
} ,
disableSessionRecording : {
doc : 'Disable posthog session recording' ,
format : Boolean ,
default : true ,
env : 'N8N_DIAGNOSTICS_POSTHOG_DISABLE_RECORDING' ,
} ,
} ,
2022-11-04 09:34:47 -07:00
sentry : {
dsn : {
doc : 'Data source name for error tracking on Sentry' ,
format : String ,
default :
'https://1f954e089a054b8e943ae4f4042b2bff@o1420875.ingest.sentry.io/4504016528408576' ,
env : 'N8N_SENTRY_DSN' ,
} ,
} ,
2022-04-08 10:37:27 -07:00
frontend : {
doc : 'Diagnostics config for frontend.' ,
format : String ,
default : '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://telemetry.n8n.io' ,
env : 'N8N_DIAGNOSTICS_CONFIG_FRONTEND' ,
} ,
backend : {
doc : 'Diagnostics config for backend.' ,
format : String ,
default : '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://telemetry.n8n.io/v1/batch' ,
env : 'N8N_DIAGNOSTICS_CONFIG_BACKEND' ,
} ,
} ,
} ,
defaultLocale : {
doc : 'Default locale for the UI' ,
format : String ,
default : 'en' ,
env : 'N8N_DEFAULT_LOCALE' ,
} ,
2022-07-27 07:28:13 -07:00
onboardingCallPrompt : {
enabled : {
2022-09-02 07:13:17 -07:00
doc : 'Whether onboarding call prompt feature is available' ,
2022-07-27 07:28:13 -07:00
format : Boolean ,
default : true ,
env : 'N8N_ONBOARDING_CALL_PROMPTS_ENABLED' ,
} ,
} ,
2022-11-21 06:41:24 -08:00
license : {
serverUrl : {
format : String ,
default : 'https://license.n8n.io/v1' ,
env : 'N8N_LICENSE_SERVER_URL' ,
doc : 'License server url to retrieve license.' ,
} ,
autoRenewEnabled : {
format : Boolean ,
default : true ,
env : 'N8N_LICENSE_AUTO_RENEW_ENABLED' ,
doc : 'Whether autorenew for licenses is enabled.' ,
} ,
autoRenewOffset : {
format : Number ,
default : 60 * 60 * 72 , // 72 hours
env : 'N8N_LICENSE_AUTO_RENEW_OFFSET' ,
doc : 'How many seconds before expiry a license should get automatically renewed. ' ,
} ,
activationKey : {
format : String ,
default : '' ,
env : 'N8N_LICENSE_ACTIVATION_KEY' ,
doc : 'Activation key to initialize license' ,
} ,
2022-11-28 08:39:34 -08:00
tenantId : {
format : Number ,
default : 1 ,
env : 'N8N_LICENSE_TENANT_ID' ,
doc : 'Tenant id used by the license manager' ,
} ,
2022-11-21 06:41:24 -08:00
} ,
2022-12-13 05:59:22 -08:00
hideUsagePage : {
format : Boolean ,
default : false ,
env : 'N8N_HIDE_USAGE_PAGE' ,
doc : 'Hide or show the usage page' ,
} ,
2022-04-08 10:37:27 -07:00
} ;