| | import { GlobalConfig } from '@n8n/config'; |
| | import { Get, RestController } from '@n8n/decorators'; |
| | import type { Request } from 'express'; |
| | import { access } from 'fs/promises'; |
| | import { join } from 'path'; |
| |
|
| | import { NODES_BASE_DIR } from '@/constants'; |
| | import { CredentialTypes } from '@/credential-types'; |
| | import { BadRequestError } from '@/errors/response-errors/bad-request.error'; |
| | import { InternalServerError } from '@/errors/response-errors/internal-server.error'; |
| |
|
| | export const CREDENTIAL_TRANSLATIONS_DIR = 'n8n-nodes-base/dist/credentials/translations'; |
| | export const NODE_HEADERS_PATH = join(NODES_BASE_DIR, 'dist/nodes/headers'); |
| |
|
| | export declare namespace TranslationRequest { |
| | export type Credential = Request<{}, {}, {}, { credentialType: string }>; |
| | } |
| |
|
| | @RestController('/') |
| | export class TranslationController { |
| | constructor( |
| | private readonly credentialTypes: CredentialTypes, |
| | private readonly globalConfig: GlobalConfig, |
| | ) {} |
| |
|
| | @Get('/credential-translation') |
| | async getCredentialTranslation(req: TranslationRequest.Credential) { |
| | const { credentialType } = req.query; |
| |
|
| | if (!this.credentialTypes.recognizes(credentialType)) |
| | throw new BadRequestError(`Invalid Credential type: "${credentialType}"`); |
| |
|
| | const { defaultLocale } = this.globalConfig; |
| | const translationPath = join( |
| | CREDENTIAL_TRANSLATIONS_DIR, |
| | defaultLocale, |
| | `${credentialType}.json`, |
| | ); |
| |
|
| | try { |
| | |
| | return require(translationPath); |
| | } catch (error) { |
| | return null; |
| | } |
| | } |
| |
|
| | @Get('/node-translation-headers') |
| | async getNodeTranslationHeaders() { |
| | try { |
| | await access(`${NODE_HEADERS_PATH}.js`); |
| | } catch { |
| | return; |
| | } |
| |
|
| | try { |
| | |
| | return require(NODE_HEADERS_PATH); |
| | } catch (error) { |
| | throw new InternalServerError('Failed to load headers file', error); |
| | } |
| | } |
| | } |
| |
|