UNPKG

@n8n/n8n-benchmark

Version:

Cli for running benchmark tests for n8n

108 lines 5.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ScenarioDataImporter = void 0; const credentials_api_client_1 = require("../n8n-api-client/credentials-api-client"); const data_table_api_client_1 = require("../n8n-api-client/data-table-api-client"); const project_api_client_1 = require("../n8n-api-client/project-api-client"); const workflows_api_client_1 = require("../n8n-api-client/workflows-api-client"); class ScenarioDataImporter { constructor(n8nApiClient) { this.workflowApiClient = new workflows_api_client_1.WorkflowApiClient(n8nApiClient); this.credentialApiClient = new credentials_api_client_1.CredentialApiClient(n8nApiClient); this.dataTableApiClient = new data_table_api_client_1.DataTableApiClient(n8nApiClient); this.projectApiClient = new project_api_client_1.ProjectApiClient(n8nApiClient); } replaceValuesInObject(obj, searchText, targetText) { if (Array.isArray(obj)) { obj.map((item) => this.replaceValuesInObject(item, searchText, targetText)); } else if (typeof obj === 'object' && obj !== null) { for (const [key, value] of Object.entries(obj)) { if (typeof value === 'string' && value === searchText) { obj[key] = targetText; } else { this.replaceValuesInObject(value, searchText, targetText); } } } } async importTestScenarioData(data) { const existingWorkflows = await this.workflowApiClient.getAllWorkflows(); const existingCredentials = await this.credentialApiClient.getAllCredentials(); const existingDataTables = await this.dataTableApiClient.getAllDataTables(); for (const credential of data.credentials) { const createdCredential = await this.importCredentials({ existingCredentials, credential }); for (const workflow of data.workflows) { this.replaceValuesInObject(workflow, credential.id, createdCredential.id); this.replaceValuesInObject(workflow, credential.name, createdCredential.name); } } for (const workflow of data.workflows) { await this.importWorkflow({ existingWorkflows, workflow }); } let dataTableId; if (data.dataTable) { dataTableId = await this.importDataTable({ existingDataTables, dataTable: data.dataTable }); } return { dataTableId }; } async importCredentials(opts) { const existingCredentials = this.findExistingCredentials(opts.existingCredentials, opts.credential); if (existingCredentials.length > 0) { for (const toDelete of existingCredentials) { await this.credentialApiClient.deleteCredential(toDelete.id); } } return await this.credentialApiClient.createCredential({ ...opts.credential, name: this.getBenchmarkCredentialName(opts.credential), }); } async importDataTable(opts) { const { existingDataTables, dataTable } = opts; const projectId = await this.projectApiClient.getPersonalProject(); const existingTable = existingDataTables.find((dt) => dt.name === this.getBenchmarkDataTableName(dataTable)); if (existingTable) { await this.dataTableApiClient.deleteDataTable(projectId, existingTable.id); } const { id } = await this.dataTableApiClient.createDataTable(projectId, { ...dataTable, name: this.getBenchmarkDataTableName(dataTable), }); return id; } async importWorkflow(opts) { const existingWorkflows = this.findExistingWorkflows(opts.existingWorkflows, opts.workflow); if (existingWorkflows.length > 0) { for (const toDelete of existingWorkflows) { await this.workflowApiClient.archiveWorkflow(toDelete.id); await this.workflowApiClient.deleteWorkflow(toDelete.id); } } const createdWorkflow = await this.workflowApiClient.createWorkflow({ ...opts.workflow, name: this.getBenchmarkWorkflowName(opts.workflow), }); return await this.workflowApiClient.activateWorkflow(createdWorkflow); } findExistingCredentials(existingCredentials, credentialToImport) { const benchmarkCredentialName = this.getBenchmarkCredentialName(credentialToImport); return existingCredentials.filter((existingCredential) => existingCredential.name === benchmarkCredentialName); } findExistingWorkflows(existingWorkflows, workflowToImport) { const benchmarkWorkflowName = this.getBenchmarkWorkflowName(workflowToImport); return existingWorkflows.filter((existingWorkflow) => existingWorkflow.name === benchmarkWorkflowName); } getBenchmarkCredentialName(credential) { return `[BENCHMARK] ${credential.name}`; } getBenchmarkWorkflowName(workflow) { return `[BENCHMARK] ${workflow.name}`; } getBenchmarkDataTableName(dataTable) { return `[BENCHMARK] ${dataTable.name}`; } } exports.ScenarioDataImporter = ScenarioDataImporter; //# sourceMappingURL=scenario-data-importer.js.map