mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 17:46:45 +00:00
* clean up dropdown * clean up focusoncreate * ⚡ Ignore mistaken ID in POST /workflows * ⚡ Fix undefined tag ID in PATCH /workflows * ⚡ Shorten response for POST /tags * remove scss mixins * clean up imports * ⚡ Implement validation with class-validator * address ivan's comments * implement modals * Fix lint issues * fix disabling shortcuts * fix focus issues * fix focus issues * fix focus issues with modal * fix linting issues * use dispatch * use constants for modal keys * fix focus * fix lint issues * remove unused prop * add modal root * fix lint issues * remove unused methods * fix shortcut * remove max width * ⚡ Fix duplicate entry error for pg and MySQL * update rename messaging * update order of buttons * fix firefox overflow on windows * fix dropdown height * 🔨 refactor tag crud controllers * 🧹 remove unused imports * use variable for number of items * fix dropdown spacing * ⚡ Restore type to fix build * ⚡ Fix post-refactor PATCH /workflows/:id * ⚡ Fix PATCH /workflows/:id for zero tags * ⚡ Fix usage count becoming stringified * address max's comments * fix filter spacing * fix blur bug * address most of ivan's comments * address tags type concern * remove defaults * ⚡ return tag id as string * 🔨 add hooks to tag CUD operations * 🏎 simplify timestamp pruning * remove blur event * fix onblur bug * ⚡ Fix fs import to fix build * address max's comments * implement responsive tag container * fix lint issues * Set default dates in entities * 👕 Fix lint in migrations * update tag limits * address ivan's comments * remove rename, refactor header, implement new designs for save, remove responsive tag container * update styling * update styling * implement responsive tag container * implement header tags edit * implement header tags edit * fix lint issues * implement expandable input * minor fixes * minor fixes * use variable * rename save as * duplicate fixes * ⚡ Implement unique workflow names * ⚡ Create /workflows/new endpoint * minor edit fixes * lint fixes * style fixes * hook up saving name * hook up tags * clean up impl * fix dirty state bug * update limit * update notification messages * on click outside * fix minor bug with count * lint fixes * ⚡ Add query string params to /workflows/new * handle minor edge cases * handle minor edge cases * handle minor bugs; fix firefox dropdown issue * Fix min width * apply tags only after api success * remove count fix * 🚧 Adjust to new qs requirements * clean up workflow tags impl, fix tags delete bug * fix minor issue * fix minor spacing issue * disable wrap for ops * fix viewport root; save on click in dropdown * save button loading when saving name/tags * implement max width on tags container * implement cleaner create experience * disable edit while updating * codacy hex color * refactor tags container * fix clickability * fix workflow open and count * clean up structure * fix up lint issues * ⚡ Create migrations for unique workflow names * fix button size * increase workflow name limit for larger screen * tslint fixes * disable responsiveness for workflow modal * rename event * change min width for tags * clean up pr * ⚡ Adjust quotes in MySQL migration * ⚡ Adjust quotes in Postgres migration * address max's comments on styles * remove success toasts * add hover mode to name * minor fixes * refactor name preview * fix name input not to jiggle * finish up name input * Fix up add tags * clean up param * clean up scss * fix resizing name * fix resizing name * fix resize bug * clean up edit spacing * ignore on esc * fix input bug * focus input on clear * build * fix up add tags clickablity * remove scrollbars * move into folders * clean up multiple patch req * remove padding top from edit * update tags on enter * build * rollout blur on enter behavior * rollout esc behavior * fix tags bug when duplicating tags * move key to reload tags * update header spacing * build * update hex case * refactor workflow title * remove unusued prop * keep focus on error, fix bug on error * Fix bug with name / tags toggle on error * impl creating new workflow name * ⚡ Refactor endpoint per new guidelines * support naming endpoint * ⚡ Refactor to support numeric suffixes * 👕 Lint migrations for unique workflow names * ⚡ Add migrations set default dates to indexes * fix connection push bug * ⚡ Lowercase default workflow name * ⚡ Add prefixes to set default dates migration * ⚡ Fix indentation on default dates migrations * ⚡ Add temp ts-ignore for unrelated change * ⚡ Adjust default dates migration for MySQL Remove change to data column in credentials_entity, already covered by Omar's migration. Also, fix quotes from table prefix addition. * ⚡ Adjust quotes in dates migration for PG * fix safari color bug * fix count bug * fix scroll bugs in dropdown * expand filter size * apply box-sizing to main header * update workflow names in executions to be wrapped by quotes * fix bug where key is same in dropdown * fix firefox bug * move up push connection session * 🔨 Remove mistakenly added nullable property * 🔥 Remove unneeded index drop-create (PG) * 🔥 Remove unneeded table copying * ⚡ Merge dates migration with tags migration * 🔨 Refactor endpoint and make wf name env * dropdown colors in firefox * update colors to use variables * update thumb color * change error message * remove 100 char maximum * fix bug with saving tags dropdowns multiple times * update error message when no name * ⚡ Update name missing toast message * ⚡ Update workflow already exists message * disable saving for executions * fix bug causing modal to close * make tags in workflow open clickable * increase workflow limit to 3 * remove success notifications * update header spacing * escape tag names * update tag and table colors * remove tags from export * build * clean up push connection dependencies * address ben's comments * revert tags optional interface * address comments * update duplicate message * build * fix eol * add one more eol * ⚡ Update comment * add hover style for workflow open, fix up font weight Co-authored-by: Mutasem <mutdmour@gmail.com> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com>
149 lines
4.8 KiB
TypeScript
149 lines
4.8 KiB
TypeScript
import {
|
|
DatabaseType,
|
|
GenericHelpers,
|
|
IDatabaseCollections,
|
|
} from './';
|
|
|
|
import {
|
|
UserSettings,
|
|
} from 'n8n-core';
|
|
|
|
import {
|
|
ConnectionOptions,
|
|
createConnection,
|
|
getRepository,
|
|
} from 'typeorm';
|
|
|
|
import { TlsOptions } from 'tls';
|
|
|
|
import * as config from '../config';
|
|
|
|
import { entities } from './databases/entities';
|
|
|
|
export let collections: IDatabaseCollections = {
|
|
Credentials: null,
|
|
Execution: null,
|
|
Workflow: null,
|
|
Webhook: null,
|
|
Tag: null,
|
|
};
|
|
|
|
import { postgresMigrations } from './databases/postgresdb/migrations';
|
|
import { mysqlMigrations } from './databases/mysqldb/migrations';
|
|
import { sqliteMigrations } from './databases/sqlite/migrations';
|
|
|
|
import * as path from 'path';
|
|
|
|
export async function init(): Promise<IDatabaseCollections> {
|
|
const dbType = await GenericHelpers.getConfigValue('database.type') as DatabaseType;
|
|
const n8nFolder = UserSettings.getUserN8nFolderPath();
|
|
|
|
let connectionOptions: ConnectionOptions;
|
|
|
|
const entityPrefix = config.get('database.tablePrefix');
|
|
|
|
switch (dbType) {
|
|
case 'postgresdb':
|
|
const sslCa = await GenericHelpers.getConfigValue('database.postgresdb.ssl.ca') as string;
|
|
const sslCert = await GenericHelpers.getConfigValue('database.postgresdb.ssl.cert') as string;
|
|
const sslKey = await GenericHelpers.getConfigValue('database.postgresdb.ssl.key') as string;
|
|
const sslRejectUnauthorized = await GenericHelpers.getConfigValue('database.postgresdb.ssl.rejectUnauthorized') as boolean;
|
|
|
|
let ssl: TlsOptions | undefined = undefined;
|
|
if (sslCa !== '' || sslCert !== '' || sslKey !== '' || sslRejectUnauthorized !== true) {
|
|
ssl = {
|
|
ca: sslCa || undefined,
|
|
cert: sslCert || undefined,
|
|
key: sslKey || undefined,
|
|
rejectUnauthorized: sslRejectUnauthorized,
|
|
};
|
|
}
|
|
|
|
connectionOptions = {
|
|
type: 'postgres',
|
|
entityPrefix,
|
|
database: await GenericHelpers.getConfigValue('database.postgresdb.database') as string,
|
|
host: await GenericHelpers.getConfigValue('database.postgresdb.host') as string,
|
|
password: await GenericHelpers.getConfigValue('database.postgresdb.password') as string,
|
|
port: await GenericHelpers.getConfigValue('database.postgresdb.port') as number,
|
|
username: await GenericHelpers.getConfigValue('database.postgresdb.user') as string,
|
|
schema: config.get('database.postgresdb.schema'),
|
|
migrations: postgresMigrations,
|
|
migrationsRun: true,
|
|
migrationsTableName: `${entityPrefix}migrations`,
|
|
ssl,
|
|
};
|
|
|
|
break;
|
|
|
|
case 'mariadb':
|
|
case 'mysqldb':
|
|
connectionOptions = {
|
|
type: dbType === 'mysqldb' ? 'mysql' : 'mariadb',
|
|
database: await GenericHelpers.getConfigValue('database.mysqldb.database') as string,
|
|
entityPrefix,
|
|
host: await GenericHelpers.getConfigValue('database.mysqldb.host') as string,
|
|
password: await GenericHelpers.getConfigValue('database.mysqldb.password') as string,
|
|
port: await GenericHelpers.getConfigValue('database.mysqldb.port') as number,
|
|
username: await GenericHelpers.getConfigValue('database.mysqldb.user') as string,
|
|
migrations: mysqlMigrations,
|
|
migrationsRun: true,
|
|
migrationsTableName: `${entityPrefix}migrations`,
|
|
};
|
|
break;
|
|
|
|
case 'sqlite':
|
|
connectionOptions = {
|
|
type: 'sqlite',
|
|
database: path.join(n8nFolder, 'database.sqlite'),
|
|
entityPrefix,
|
|
migrations: sqliteMigrations,
|
|
migrationsRun: false, // migrations for sqlite will be ran manually for now; see below
|
|
migrationsTableName: `${entityPrefix}migrations`,
|
|
};
|
|
break;
|
|
|
|
default:
|
|
throw new Error(`The database "${dbType}" is currently not supported!`);
|
|
}
|
|
|
|
Object.assign(connectionOptions, {
|
|
entities: Object.values(entities),
|
|
synchronize: false,
|
|
logging: false,
|
|
});
|
|
|
|
let connection = await createConnection(connectionOptions);
|
|
|
|
if (dbType === 'sqlite') {
|
|
// This specific migration changes database metadata.
|
|
// A field is now nullable. We need to reconnect so that
|
|
// n8n knows it has changed. Happens only on sqlite.
|
|
let migrations = [];
|
|
try {
|
|
migrations = await connection.query(`SELECT id FROM ${entityPrefix}migrations where name = "MakeStoppedAtNullable1607431743769"`);
|
|
} catch(error) {
|
|
// Migration table does not exist yet - it will be created after migrations run for the first time.
|
|
}
|
|
|
|
// If you remove this call, remember to turn back on the
|
|
// setting to run migrations automatically above.
|
|
await connection.runMigrations({
|
|
transaction: 'none',
|
|
});
|
|
|
|
if (migrations.length === 0) {
|
|
await connection.close();
|
|
connection = await createConnection(connectionOptions);
|
|
}
|
|
}
|
|
|
|
collections.Credentials = getRepository(entities.CredentialsEntity);
|
|
collections.Execution = getRepository(entities.ExecutionEntity);
|
|
collections.Workflow = getRepository(entities.WorkflowEntity);
|
|
collections.Webhook = getRepository(entities.WebhookEntity);
|
|
collections.Tag = getRepository(entities.TagEntity);
|
|
|
|
return collections;
|
|
}
|