2024-10-02 07:14:57 -07:00
|
|
|
import { ApplicationError, ensureError } from 'n8n-workflow';
|
2024-10-02 01:31:56 -07:00
|
|
|
import * as a from 'node:assert/strict';
|
2024-10-02 06:38:42 -07:00
|
|
|
|
2024-10-02 01:31:56 -07:00
|
|
|
import { authenticate } from './authenticator';
|
2024-10-02 07:14:57 -07:00
|
|
|
import { JsTaskRunner } from './code';
|
2024-10-02 01:31:56 -07:00
|
|
|
|
|
|
|
type Config = {
|
|
|
|
n8nUri: string;
|
2024-10-02 05:16:02 -07:00
|
|
|
authToken?: string;
|
|
|
|
grantToken?: string;
|
2024-10-02 01:31:56 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
function readAndParseConfig(): Config {
|
|
|
|
const authToken = process.env.N8N_RUNNERS_AUTH_TOKEN;
|
2024-10-02 05:16:02 -07:00
|
|
|
const grantToken = process.env.N8N_RUNNERS_GRANT_TOKEN;
|
|
|
|
if (!authToken && !grantToken) {
|
2024-10-02 07:14:57 -07:00
|
|
|
throw new ApplicationError(
|
2024-10-02 05:16:02 -07:00
|
|
|
'Missing task runner authentication. Use either N8N_RUNNERS_AUTH_TOKEN or N8N_RUNNERS_GRANT_TOKEN to configure it',
|
|
|
|
);
|
|
|
|
}
|
2024-10-02 01:31:56 -07:00
|
|
|
|
|
|
|
return {
|
|
|
|
n8nUri: process.env.N8N_RUNNERS_N8N_URI ?? 'localhost:5678',
|
|
|
|
authToken,
|
2024-10-02 05:16:02 -07:00
|
|
|
grantToken,
|
2024-10-02 01:31:56 -07:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
void (async function start() {
|
|
|
|
const config = readAndParseConfig();
|
|
|
|
|
2024-10-02 05:16:02 -07:00
|
|
|
let grantToken = config.grantToken;
|
|
|
|
if (!grantToken) {
|
|
|
|
a.ok(config.authToken);
|
2024-10-02 01:31:56 -07:00
|
|
|
|
2024-10-02 05:16:02 -07:00
|
|
|
grantToken = await authenticate({
|
|
|
|
authToken: config.authToken,
|
|
|
|
n8nUri: config.n8nUri,
|
|
|
|
});
|
|
|
|
}
|
2024-10-02 01:31:56 -07:00
|
|
|
|
2024-10-02 06:38:42 -07:00
|
|
|
const wsUrl = `ws://${config.n8nUri}/runners/_ws`;
|
2024-10-02 07:14:57 -07:00
|
|
|
new JsTaskRunner('javascript', wsUrl, grantToken, 5);
|
2024-10-02 06:38:42 -07:00
|
|
|
})().catch((e) => {
|
|
|
|
const error = ensureError(e);
|
|
|
|
console.error('Task runner failed to start', { error });
|
|
|
|
process.exit(1);
|
|
|
|
});
|