Skip to content

Commit

Permalink
🔨 Infer typings for config schema (#2656)
Browse files Browse the repository at this point in the history
* 🚚 Move schema to standalone file

* ⚡ Add assertions to string literal arrays

* ✨ Infer typings for convict schema

* 🔥 Remove unneeded assertions

* 🔨 Fix errors surfaced by typings

* ⚡ Type nodes.include/exclude per docs

* ⚡ Account for types for exception paths

* ⚡ Set method alias to flag incorrect paths

* ⚡ Replace original with alias

* ⚡ Make allowance for nodes.include

* ⚡ Adjust leftover calls

* 🔀 Fix conflicts

* 🔥 Remove unneeded castings

* 📘 Simplify exception path type

* 📦 Update package-lock.json

* 🔥 Remove unneeded imports

* 🔥 Remove unrelated file

* ⚡ Update schema

* ⚡ Update interface

* 📦 Update package-lock.json

* 📦 Update package-lock.json

* 🔥 Remove leftover assertions

Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
  • Loading branch information
ivov and janober authored Apr 8, 2022
1 parent 23f0501 commit 37a6e32
Show file tree
Hide file tree
Showing 82 changed files with 1,393 additions and 1,256 deletions.
9 changes: 2 additions & 7 deletions packages/cli/commands/execute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,7 @@
/* eslint-disable no-console */
import { promises as fs } from 'fs';
import { Command, flags } from '@oclif/command';
import {
BinaryDataManager,
IBinaryDataConfig,
UserSettings,
PLACEHOLDER_EMPTY_WORKFLOW_ID,
} from 'n8n-core';
import { BinaryDataManager, UserSettings, PLACEHOLDER_EMPTY_WORKFLOW_ID } from 'n8n-core';
import { INode, LoggerProxy } from 'n8n-workflow';

import {
Expand Down Expand Up @@ -52,7 +47,7 @@ export class Execute extends Command {
async run() {
const logger = getLogger();
LoggerProxy.init(logger);
const binaryDataConfig = config.get('binaryDataManager') as IBinaryDataConfig;
const binaryDataConfig = config.getEnv('binaryDataManager');
await BinaryDataManager.init(binaryDataConfig, true);

// eslint-disable-next-line @typescript-eslint/no-shadow
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/commands/executeBatch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import * as fs from 'fs';
import { Command, flags } from '@oclif/command';

import { BinaryDataManager, IBinaryDataConfig, UserSettings } from 'n8n-core';
import { BinaryDataManager, UserSettings } from 'n8n-core';

// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { INode, ITaskData, LoggerProxy } from 'n8n-workflow';
Expand Down Expand Up @@ -196,7 +196,7 @@ export class ExecuteBatch extends Command {

const logger = getLogger();
LoggerProxy.init(logger);
const binaryDataConfig = config.get('binaryDataManager') as IBinaryDataConfig;
const binaryDataConfig = config.getEnv('binaryDataManager');
await BinaryDataManager.init(binaryDataConfig, true);

// eslint-disable-next-line @typescript-eslint/no-shadow
Expand Down
28 changes: 14 additions & 14 deletions packages/cli/commands/start.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
import * as localtunnel from 'localtunnel';
import { BinaryDataManager, IBinaryDataConfig, TUNNEL_SUBDOMAIN_ENV, UserSettings } from 'n8n-core';
import { BinaryDataManager, TUNNEL_SUBDOMAIN_ENV, UserSettings } from 'n8n-core';
import { Command, flags } from '@oclif/command';
// eslint-disable-next-line import/no-extraneous-dependencies
import * as Redis from 'ioredis';
Expand Down Expand Up @@ -100,9 +100,9 @@ export class Start extends Command {

await InternalHooksManager.getInstance().onN8nStop();

const skipWebhookDeregistration = config.get(
const skipWebhookDeregistration = config.getEnv(
'endpoints.skipWebhoooksDeregistrationOnShutdown',
) as boolean;
);

const removePromises = [];
if (activeWorkflowRunner !== undefined && !skipWebhookDeregistration) {
Expand Down Expand Up @@ -169,7 +169,7 @@ export class Start extends Command {
// Make sure the settings exist
const userSettings = await UserSettings.prepareUserSettings();

if (!config.get('userManagement.jwtSecret')) {
if (!config.getEnv('userManagement.jwtSecret')) {
// If we don't have a JWT secret set, generate
// one based and save to config.
const encryptionKey = await UserSettings.getEncryptionKey();
Expand Down Expand Up @@ -222,12 +222,12 @@ export class Start extends Command {
config.set(setting.key, JSON.parse(setting.value));
});

if (config.get('executions.mode') === 'queue') {
const redisHost = config.get('queue.bull.redis.host');
const redisPassword = config.get('queue.bull.redis.password');
const redisPort = config.get('queue.bull.redis.port');
const redisDB = config.get('queue.bull.redis.db');
const redisConnectionTimeoutLimit = config.get('queue.bull.redis.timeoutThreshold');
if (config.getEnv('executions.mode') === 'queue') {
const redisHost = config.getEnv('queue.bull.redis.host');
const redisPassword = config.getEnv('queue.bull.redis.password');
const redisPort = config.getEnv('queue.bull.redis.port');
const redisDB = config.getEnv('queue.bull.redis.db');
const redisConnectionTimeoutLimit = config.getEnv('queue.bull.redis.timeoutThreshold');
let lastTimer = 0;
let cumulativeTimeout = 0;

Expand Down Expand Up @@ -285,7 +285,7 @@ export class Start extends Command {
const dbType = (await GenericHelpers.getConfigValue('database.type')) as DatabaseType;

if (dbType === 'sqlite') {
const shouldRunVacuum = config.get('database.sqlite.executeVacuumOnStartup') as number;
const shouldRunVacuum = config.getEnv('database.sqlite.executeVacuumOnStartup');
if (shouldRunVacuum) {
// eslint-disable-next-line @typescript-eslint/no-floating-promises, @typescript-eslint/no-non-null-assertion
await Db.collections.Execution!.query('VACUUM;');
Expand Down Expand Up @@ -324,7 +324,7 @@ export class Start extends Command {
subdomain: tunnelSubdomain,
};

const port = config.get('port');
const port = config.getEnv('port');

// @ts-ignore
const webhookTunnel = await localtunnel(port, tunnelSettings);
Expand All @@ -340,7 +340,7 @@ export class Start extends Command {
const { cli } = await GenericHelpers.getVersions();
InternalHooksManager.init(instanceId, cli, nodeTypes);

const binaryDataConfig = config.get('binaryDataManager') as IBinaryDataConfig;
const binaryDataConfig = config.getEnv('binaryDataManager');
await BinaryDataManager.init(binaryDataConfig, true);

await Server.start();
Expand All @@ -354,7 +354,7 @@ export class Start extends Command {
const editorUrl = GenericHelpers.getBaseUrl();
this.log(`\nEditor is now accessible via:\n${editorUrl}`);

const saveManualExecutions = config.get('executions.saveDataManualExecutions') as boolean;
const saveManualExecutions = config.getEnv('executions.saveDataManualExecutions');

if (saveManualExecutions) {
this.log('\nManual executions will be visible only for the owner');
Expand Down
18 changes: 9 additions & 9 deletions packages/cli/commands/webhook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/unbound-method */
import { BinaryDataManager, IBinaryDataConfig, UserSettings } from 'n8n-core';
import { BinaryDataManager, UserSettings } from 'n8n-core';
import { Command, flags } from '@oclif/command';
// eslint-disable-next-line import/no-extraneous-dependencies
import * as Redis from 'ioredis';
Expand Down Expand Up @@ -95,7 +95,7 @@ export class Webhook extends Command {

// Wrap that the process does not close but we can still use async
await (async () => {
if (config.get('executions.mode') !== 'queue') {
if (config.getEnv('executions.mode') !== 'queue') {
/**
* It is technically possible to run without queues but
* there are 2 known bugs when running in this mode:
Expand Down Expand Up @@ -152,15 +152,15 @@ export class Webhook extends Command {
const { cli } = await GenericHelpers.getVersions();
InternalHooksManager.init(instanceId, cli, nodeTypes);

const binaryDataConfig = config.get('binaryDataManager') as IBinaryDataConfig;
const binaryDataConfig = config.getEnv('binaryDataManager');
await BinaryDataManager.init(binaryDataConfig);

if (config.get('executions.mode') === 'queue') {
const redisHost = config.get('queue.bull.redis.host');
const redisPassword = config.get('queue.bull.redis.password');
const redisPort = config.get('queue.bull.redis.port');
const redisDB = config.get('queue.bull.redis.db');
const redisConnectionTimeoutLimit = config.get('queue.bull.redis.timeoutThreshold');
if (config.getEnv('executions.mode') === 'queue') {
const redisHost = config.getEnv('queue.bull.redis.host');
const redisPassword = config.getEnv('queue.bull.redis.password');
const redisPort = config.getEnv('queue.bull.redis.port');
const redisDB = config.getEnv('queue.bull.redis.db');
const redisConnectionTimeoutLimit = config.getEnv('queue.bull.redis.timeoutThreshold');
let lastTimer = 0;
let cumulativeTimeout = 0;

Expand Down
12 changes: 6 additions & 6 deletions packages/cli/commands/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ export class Worker extends Command {
staticData = workflowData.staticData;
}

let workflowTimeout = config.get('executions.timeout') as number; // initialize with default
let workflowTimeout = config.getEnv('executions.timeout'); // initialize with default
if (
// eslint-disable-next-line @typescript-eslint/prefer-optional-chain
currentExecutionDb.workflowData.settings &&
Expand All @@ -169,7 +169,7 @@ export class Worker extends Command {

let executionTimeoutTimestamp: number | undefined;
if (workflowTimeout > 0) {
workflowTimeout = Math.min(workflowTimeout, config.get('executions.maxTimeout') as number);
workflowTimeout = Math.min(workflowTimeout, config.getEnv('executions.maxTimeout'));
executionTimeoutTimestamp = Date.now() + workflowTimeout * 1000;
}

Expand Down Expand Up @@ -288,7 +288,7 @@ export class Worker extends Command {
await startDbInitPromise;

// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const redisConnectionTimeoutLimit = config.get('queue.bull.redis.timeoutThreshold');
const redisConnectionTimeoutLimit = config.getEnv('queue.bull.redis.timeoutThreshold');

Worker.jobQueue = Queue.getInstance().getBullObjectInstance();
// eslint-disable-next-line @typescript-eslint/no-floating-promises
Expand All @@ -299,7 +299,7 @@ export class Worker extends Command {

InternalHooksManager.init(instanceId, versions.cli, nodeTypes);

const binaryDataConfig = config.get('binaryDataManager') as IBinaryDataConfig;
const binaryDataConfig = config.getEnv('binaryDataManager');
await BinaryDataManager.init(binaryDataConfig);

console.info('\nn8n worker is now ready');
Expand Down Expand Up @@ -352,8 +352,8 @@ export class Worker extends Command {
}
});

if (config.get('queue.health.active')) {
const port = config.get('queue.health.port') as number;
if (config.getEnv('queue.health.active')) {
const port = config.getEnv('queue.health.port');

const app = express();
const server = http.createServer(app);
Expand Down
Loading

0 comments on commit 37a6e32

Please sign in to comment.