module.exports = {
	title: 'traxxx',
	origin: 'http://localhost:5100', // only used for absolute links
	database: {
		owner: {
			host: '127.0.0.1',
			user: 'traxxx',
			password: 'password',
			database: 'traxxx',
		},
		query: {
			host: '127.0.0.1',
			user: 'visitor',
			password: 'password',
			database: 'traxxx',
		},
		manticore: {
			host: '127.0.0.1',
			sqlPort: 9306,
			httpPort: 9308,
			forceSql: true,
			maxMatches: 2000, // high match count needed primarily for actor aggregations
			maxAggregateSize: 2000, // must be lower or equal to maxMatches
			maxQueryTime: 10000,
		},
		timeout: 5000,
		pool: {
			min: 0,
			max: 20,
			acquireTimeoutMillis: 300000,
			createTimeoutMillis: 300000,
			destroyTimeoutMillis: 300000,
		},
	},
	web: {
		address: 'https://traxxx.me',
		host: '0.0.0.0',
		port: 5000,
		sfwHost: '0.0.0.0',
		sfwPort: 5001,
		session: {
			secret: '12345678abcdefghij',
			resave: false,
			saveUninitialized: false,
			cookie: {
				secure: true,
				maxAge: 2629800000, // 1 month
			},
		},
	},
	redis: {
		host: 'localhost',
		port: 6379,
		username: null,
		password: null,
	},
	analytics: {
		enabled: false,
		address: 'http://localhost:3000/script.js',
		siteId: '1b28ac3b-d229-43bf-aec9-75cf0a72a466',
	},
	restrictions: {
		enabled: false,
		modes: [
			null, // easier for 0 to mean disabled
			'block', // 1
			'censor', // 2
		],
		regions: {
			// Europe
			DE: 1, // Germany
			FR: 1, // France
			GB: 1, // Great Britain / United Kingdom
			IT: 1, // Italy
			// Asia & Oceania
			AU: 1, // Australia
			CN: 1, // China
			// Americas
			US: {
				AL: 1, // Alabama
				AR: 1, // Arkansas
				AZ: 1, // Arizona
				FL: 1, // Florida
				GA: 1, // Georgia
				ID: 1, // Idaho
				IN: 1, // Indiana
				KS: 1, // Kansas
				KY: 1, // Kentucky
				LA: 1, // Louisiana
				MO: 1, // Missouri
				MS: 1, // Mississippi
				MT: 1, // Montana
				NC: 1, // North Carolina
				ND: 1, // North Dakota
				NE: 1, // Nebraska
				OH: 1, // Ohio
				OK: 1, // Oklahoma
				SC: 1, // South Carolina
				SD: 1, // South Dakota
				TN: 1, // Tennessee
				TX: 1, // Texas
				UT: 1, // Utah
				VA: 1, // Virginia
				WY: 1, // Wyoming
			}, // only Florida
		},
		noVpn: [
			'AE', // United Arab Emirates
			'BY', // Belarus
			'CN', // China
			'IQ', // Iraq
			'IR', // Iran
			'KP', // North Korea
			'OM', // Oman
			'RU', // Russia
			'TM', // Turkmenistan
			'TR', // Turkey
		],
		censors: [ // additional to default filter
			'ball',
			'bisexual',
			'blow',
			'blowbang',
			'condom',
			'cowgirl',
			'creampie',
			'doggy',
			'facial',
			'finger',
			'gay',
			'hole',
			'horny',
			'lesbian',
			'masturbation',
			'milf',
			'missionary',
			'prolapse',
			'nymph',
			'sex',
			'swallowing',
			'squirt',
			'sucking',
			'threesome',
			'trans',
		],
	},
	auth: {
		login: true,
		signup: true,
		usernameLength: [2, 24],
		usernamePattern: /^[\w-]+$/,
		captcha: {
			enabled: false,
			siteKey: '10000000-ffff-ffff-ffff-000000000001',
			secretKey: '0x0000000000000000000000000000000000000000',
		},
		loginCredentialAttempts: 5,
		loginCredentialCooldown: 10, // minutes,
		loginIpAttempts: 20, // shared IPs might result in more non-malicious failed attempt
		loginIpCooldown: 10, // minutes
		tokenCooldown: 10, // minutes, how often a token can be requested
		emailTokenExpiry: 120, // minutes
		passwordTokenExpiry: 120, // minutes
		signupTokenExpiry: 120, // minutes
	},
	bans: {
		defaultExpiry: 60 * 24 * 3, // in minutes, 3 days
	},
	apiAccess: {
		graphqlEnabled: true,
		keySize: 24, // bytes
		keyLimit: 5, // max keys per user
		keyCooldown: 1, // minutes between key generation
	},
	revisions: {
		unapprovedLimit: 3,
	},
	psa: {
		text: 'Welcome to traxxx!', // html enabled
		type: 'notice', // notice, alert
		enabled: false,
	},
	links: {
		content: 'mailto:content@traxxx.me',
		discord: 'https://discord.gg/gY6fnq6jJV',
		matrix: 'https://matrix.to/#/#traxxx:matrix.unknown.name',
	},
	stashes: {
		nameLength: [2, 24],
		namePattern: /^[\w!?$&\s-]+$/,
		viewRefreshCrontab: '* * * * *', // every minute
		viewRefreshCooldowns: {
			actors: 60, // minutes
			stashes: 1,
		},
	},
	media: {
		path: './media',
		assetPath: '',
		mediaPath: '/media',
		s3Path: 'https://s3.wasabisys.com',
		videoRestrictions: [], // entity slugs, _ prefix for networks, hides trailer and teaser videos
	},
	sync: {
		enabled: true,
		crontab: '*/10 * * * *', // every 10 minutes
	},
	alerts: {
		crontab: '*/10 * * * *', // every 10 minutes
		seenExpiry: 30, // days
		finalExpiry: 365, // days
	},
	email: {
		// Resend
		enabled: false,
		apiKey: null,
		from: 'traxxx <noreply@alerts.traxxx.me>',
	},
};
