1
import 'reflect-metadata'
3
import * as fs from 'fs'
4
import { DataSource } from 'typeorm'
5
import { getUserHome } from './utils'
6
import { entities } from './database/entities'
7
import { sqliteMigrations } from './database/migrations/sqlite'
8
import { mysqlMigrations } from './database/migrations/mysql'
9
import { postgresMigrations } from './database/migrations/postgres'
11
let appDataSource: DataSource
13
export const init = async (): Promise<void> => {
15
let flowisePath = path.join(getUserHome(), '.flowise')
16
if (!fs.existsSync(flowisePath)) {
17
fs.mkdirSync(flowisePath)
19
switch (process.env.DATABASE_TYPE) {
21
homePath = process.env.DATABASE_PATH ?? flowisePath
22
appDataSource = new DataSource({
24
database: path.resolve(homePath, 'database.sqlite'),
27
entities: Object.values(entities),
28
migrations: sqliteMigrations
32
appDataSource = new DataSource({
34
host: process.env.DATABASE_HOST,
35
port: parseInt(process.env.DATABASE_PORT || '3306'),
36
username: process.env.DATABASE_USER,
37
password: process.env.DATABASE_PASSWORD,
38
database: process.env.DATABASE_NAME,
42
entities: Object.values(entities),
43
migrations: mysqlMigrations,
44
ssl: getDatabaseSSLFromEnv()
48
appDataSource = new DataSource({
50
host: process.env.DATABASE_HOST,
51
port: parseInt(process.env.DATABASE_PORT || '5432'),
52
username: process.env.DATABASE_USER,
53
password: process.env.DATABASE_PASSWORD,
54
database: process.env.DATABASE_NAME,
55
ssl: getDatabaseSSLFromEnv(),
58
entities: Object.values(entities),
59
migrations: postgresMigrations
63
homePath = process.env.DATABASE_PATH ?? flowisePath
64
appDataSource = new DataSource({
66
database: path.resolve(homePath, 'database.sqlite'),
69
entities: Object.values(entities),
70
migrations: sqliteMigrations
76
export function getDataSource(): DataSource {
77
if (appDataSource === undefined) {
83
const getDatabaseSSLFromEnv = () => {
84
if (process.env.DATABASE_SSL_KEY_BASE64) {
86
rejectUnauthorized: false,
87
ca: Buffer.from(process.env.DATABASE_SSL_KEY_BASE64, 'base64')
89
} else if (process.env.DATABASE_SSL === 'true') {