n8n
Version:
n8n Workflow Automation Tool
104 lines • 4.56 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.InstanceAiExamplesController = void 0;
const api_types_1 = require("@n8n/api-types");
const decorators_1 = require("@n8n/decorators");
const node_fs_1 = require("node:fs");
const node_path_1 = require("node:path");
const n8n_workflow_1 = require("n8n-workflow");
const constants_1 = require("../constants");
const NATIVE_NODE_PREFIXES = ['@n8n/n8n-nodes-langchain.'];
const NATIVE_NODES = new Set([
'n8n-nodes-base.code',
'n8n-nodes-base.httpRequest',
'n8n-nodes-base.html',
'n8n-nodes-base.crypto',
'n8n-nodes-base.editImage',
'n8n-nodes-base.ftp',
'n8n-nodes-base.evaluation',
'n8n-nodes-base.emailSend',
'n8n-nodes-base.sms77',
'n8n-nodes-base.apiTemplateIo',
]);
function hasVisibleNodes(nodes) {
return nodes.some((n) => !NATIVE_NODES.has(n.name) && !NATIVE_NODE_PREFIXES.some((p) => n.name.startsWith(p)));
}
let InstanceAiExamplesController = class InstanceAiExamplesController {
constructor() {
this.cachedData = null;
}
getExamples(_req, _res, query) {
const data = this.loadData();
const { category, subcategory, page, limit } = query;
let workflows = data.workflows;
if (category) {
workflows = workflows.filter((w) => w.category === category);
}
if (subcategory) {
workflows = workflows.filter((w) => w.subcategory === subcategory);
}
const totalWorkflows = workflows.length;
const offset = (page - 1) * limit;
const paginatedWorkflows = workflows.slice(offset, offset + limit);
return {
categories: data.categories,
subcategories: data.subcategories,
totalWorkflows,
workflows: paginatedWorkflows,
};
}
loadData() {
if (this.cachedData) {
return this.cachedData;
}
const filePath = (0, node_path_1.resolve)(constants_1.CLI_DIR, 'dist', 'instance-ai-examples.data.json');
const raw = (0, node_fs_1.readFileSync)(filePath, 'utf-8');
const rawData = (0, n8n_workflow_1.jsonParse)(raw);
const workflows = rawData.workflows.map((w) => ({
...w,
nodes: w.nodes.map((n) => ({
...n,
iconData: rawData.nodeIcons[n.name],
})),
}));
workflows.sort((a, b) => {
const scoreDiff = (b.relevanceScore ?? 0) - (a.relevanceScore ?? 0);
if (scoreDiff !== 0)
return scoreDiff;
const aVisible = hasVisibleNodes(a.nodes) ? 1 : 0;
const bVisible = hasVisibleNodes(b.nodes) ? 1 : 0;
return bVisible - aVisible;
});
this.cachedData = {
categories: rawData.categories,
subcategories: rawData.subcategories,
totalWorkflows: rawData.totalWorkflows,
workflows,
};
return this.cachedData;
}
};
exports.InstanceAiExamplesController = InstanceAiExamplesController;
__decorate([
(0, decorators_1.Get)('/', { skipAuth: true }),
__param(2, decorators_1.Query),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object, api_types_1.InstanceAiExamplesQueryDto]),
__metadata("design:returntype", void 0)
], InstanceAiExamplesController.prototype, "getExamples", null);
exports.InstanceAiExamplesController = InstanceAiExamplesController = __decorate([
(0, decorators_1.RestController)('/instance-ai-examples')
], InstanceAiExamplesController);
//# sourceMappingURL=instance-ai-examples.controller.js.map