@n8n/ai-utilities 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/cjs/index.d.ts +1 -0
  2. package/dist/cjs/index.js +4 -2
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/node-catalog/discriminator-utils.d.ts +22 -0
  5. package/dist/cjs/node-catalog/discriminator-utils.js +95 -0
  6. package/dist/cjs/node-catalog/discriminator-utils.js.map +1 -0
  7. package/dist/cjs/node-catalog/get.d.ts +18 -0
  8. package/dist/cjs/node-catalog/get.js +368 -0
  9. package/dist/cjs/node-catalog/get.js.map +1 -0
  10. package/dist/cjs/node-catalog/index.d.ts +14 -0
  11. package/dist/cjs/node-catalog/index.js +40 -0
  12. package/dist/cjs/node-catalog/index.js.map +1 -0
  13. package/dist/cjs/node-catalog/lean-node-type.d.ts +27 -0
  14. package/dist/cjs/node-catalog/lean-node-type.js +60 -0
  15. package/dist/cjs/node-catalog/lean-node-type.js.map +1 -0
  16. package/dist/cjs/node-catalog/node-type-parser.d.ts +20 -0
  17. package/dist/cjs/node-catalog/node-type-parser.js +79 -0
  18. package/dist/cjs/node-catalog/node-type-parser.js.map +1 -0
  19. package/dist/cjs/node-catalog/resource-operation-extractor.d.ts +26 -0
  20. package/dist/cjs/node-catalog/resource-operation-extractor.js +166 -0
  21. package/dist/cjs/node-catalog/resource-operation-extractor.js.map +1 -0
  22. package/dist/cjs/node-catalog/search-engine.d.ts +20 -0
  23. package/dist/cjs/node-catalog/search-engine.js +257 -0
  24. package/dist/cjs/node-catalog/search-engine.js.map +1 -0
  25. package/dist/cjs/node-catalog/search.d.ts +10 -0
  26. package/dist/cjs/node-catalog/search.js +331 -0
  27. package/dist/cjs/node-catalog/search.js.map +1 -0
  28. package/dist/cjs/node-catalog/suggested-nodes-data.d.ts +11 -0
  29. package/dist/cjs/node-catalog/suggested-nodes-data.js +246 -0
  30. package/dist/cjs/node-catalog/suggested-nodes-data.js.map +1 -0
  31. package/dist/cjs/node-catalog/suggested.d.ts +3 -0
  32. package/dist/cjs/node-catalog/suggested.js +86 -0
  33. package/dist/cjs/node-catalog/suggested.js.map +1 -0
  34. package/dist/cjs/node-catalog/types.d.ts +17 -0
  35. package/dist/cjs/node-catalog/types.js +13 -0
  36. package/dist/cjs/node-catalog/types.js.map +1 -0
  37. package/dist/cjs/typecheck.tsbuildinfo +1 -1
  38. package/dist/cjs/utils/follow-redirects.d.ts +5 -0
  39. package/dist/cjs/utils/follow-redirects.js +51 -0
  40. package/dist/cjs/utils/follow-redirects.js.map +1 -0
  41. package/dist/cjs/utils/fromai-helpers.d.ts +4 -0
  42. package/dist/cjs/utils/fromai-helpers.js +33 -0
  43. package/dist/cjs/utils/fromai-helpers.js.map +1 -0
  44. package/dist/cjs/utils/fromai-tool-factory.d.ts +2 -4
  45. package/dist/cjs/utils/fromai-tool-factory.js +8 -23
  46. package/dist/cjs/utils/fromai-tool-factory.js.map +1 -1
  47. package/dist/cjs/utils/loaders/n8n-pdf-loader.d.ts +10 -0
  48. package/dist/cjs/utils/loaders/n8n-pdf-loader.js +100 -0
  49. package/dist/cjs/utils/loaders/n8n-pdf-loader.js.map +1 -0
  50. package/dist/cjs/utils/n8n-binary-loader.js +3 -3
  51. package/dist/cjs/utils/n8n-binary-loader.js.map +1 -1
  52. package/dist/esm/index.d.ts +1 -0
  53. package/dist/esm/index.js +4 -2
  54. package/dist/esm/index.js.map +1 -1
  55. package/dist/esm/node-catalog/discriminator-utils.d.ts +22 -0
  56. package/dist/esm/node-catalog/discriminator-utils.js +85 -0
  57. package/dist/esm/node-catalog/discriminator-utils.js.map +1 -0
  58. package/dist/esm/node-catalog/get.d.ts +18 -0
  59. package/dist/esm/node-catalog/get.js +358 -0
  60. package/dist/esm/node-catalog/get.js.map +1 -0
  61. package/dist/esm/node-catalog/index.d.ts +14 -0
  62. package/dist/esm/node-catalog/index.js +30 -0
  63. package/dist/esm/node-catalog/index.js.map +1 -0
  64. package/dist/esm/node-catalog/lean-node-type.d.ts +27 -0
  65. package/dist/esm/node-catalog/lean-node-type.js +50 -0
  66. package/dist/esm/node-catalog/lean-node-type.js.map +1 -0
  67. package/dist/esm/node-catalog/node-type-parser.d.ts +20 -0
  68. package/dist/esm/node-catalog/node-type-parser.js +69 -0
  69. package/dist/esm/node-catalog/node-type-parser.js.map +1 -0
  70. package/dist/esm/node-catalog/resource-operation-extractor.d.ts +26 -0
  71. package/dist/esm/node-catalog/resource-operation-extractor.js +156 -0
  72. package/dist/esm/node-catalog/resource-operation-extractor.js.map +1 -0
  73. package/dist/esm/node-catalog/search-engine.d.ts +20 -0
  74. package/dist/esm/node-catalog/search-engine.js +247 -0
  75. package/dist/esm/node-catalog/search-engine.js.map +1 -0
  76. package/dist/esm/node-catalog/search.d.ts +10 -0
  77. package/dist/esm/node-catalog/search.js +321 -0
  78. package/dist/esm/node-catalog/search.js.map +1 -0
  79. package/dist/esm/node-catalog/suggested-nodes-data.d.ts +11 -0
  80. package/dist/esm/node-catalog/suggested-nodes-data.js +236 -0
  81. package/dist/esm/node-catalog/suggested-nodes-data.js.map +1 -0
  82. package/dist/esm/node-catalog/suggested.d.ts +3 -0
  83. package/dist/esm/node-catalog/suggested.js +76 -0
  84. package/dist/esm/node-catalog/suggested.js.map +1 -0
  85. package/dist/esm/node-catalog/types.d.ts +17 -0
  86. package/dist/esm/node-catalog/types.js +3 -0
  87. package/dist/esm/node-catalog/types.js.map +1 -0
  88. package/dist/esm/typecheck.tsbuildinfo +1 -1
  89. package/dist/esm/utils/follow-redirects.d.ts +5 -0
  90. package/dist/esm/utils/follow-redirects.js +41 -0
  91. package/dist/esm/utils/follow-redirects.js.map +1 -0
  92. package/dist/esm/utils/fromai-helpers.d.ts +4 -0
  93. package/dist/esm/utils/fromai-helpers.js +23 -0
  94. package/dist/esm/utils/fromai-helpers.js.map +1 -0
  95. package/dist/esm/utils/fromai-tool-factory.d.ts +2 -4
  96. package/dist/esm/utils/fromai-tool-factory.js +7 -22
  97. package/dist/esm/utils/fromai-tool-factory.js.map +1 -1
  98. package/dist/esm/utils/loaders/n8n-pdf-loader.d.ts +10 -0
  99. package/dist/esm/utils/loaders/n8n-pdf-loader.js +89 -0
  100. package/dist/esm/utils/loaders/n8n-pdf-loader.js.map +1 -0
  101. package/dist/esm/utils/n8n-binary-loader.js +2 -2
  102. package/dist/esm/utils/n8n-binary-loader.js.map +1 -1
  103. package/package.json +31 -5
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidPathComponent = isValidPathComponent;
4
+ exports.validatePathWithinBase = validatePathWithinBase;
5
+ exports.toSnakeCase = toSnakeCase;
6
+ exports.parseNodeId = parseNodeId;
7
+ exports.getNodeTypes = getNodeTypes;
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
10
+ function isValidPathComponent(component) {
11
+ if (!component || component.trim() === '') {
12
+ return false;
13
+ }
14
+ if (component.includes('\0')) {
15
+ return false;
16
+ }
17
+ if (component.includes('/') || component.includes('\\')) {
18
+ return false;
19
+ }
20
+ if (component === '..' || component.startsWith('..')) {
21
+ return false;
22
+ }
23
+ return true;
24
+ }
25
+ function validatePathWithinBase(filePath, baseDir) {
26
+ const resolvedPath = (0, node_path_1.resolve)(filePath);
27
+ const resolvedBase = (0, node_path_1.resolve)(baseDir);
28
+ const separator = process.platform === 'win32' ? '\\' : '/';
29
+ return resolvedPath.startsWith(resolvedBase + separator) || resolvedPath === resolvedBase;
30
+ }
31
+ function getGeneratedNodesPaths(nodeDefinitionDirs) {
32
+ if (nodeDefinitionDirs && nodeDefinitionDirs.length > 0) {
33
+ return nodeDefinitionDirs.map((dir) => (0, node_path_1.join)(dir, 'nodes'));
34
+ }
35
+ return [];
36
+ }
37
+ function findNodeDir(parsed, nodesPaths) {
38
+ const candidates = [parsed.nodeName];
39
+ const baseName = parsed.nodeName.replace(/(?:HitlTool|Tool)$/, '');
40
+ if (baseName !== parsed.nodeName)
41
+ candidates.push(baseName);
42
+ for (const candidate of candidates) {
43
+ for (const nodesPath of nodesPaths) {
44
+ const nodeDir = (0, node_path_1.join)(nodesPath, parsed.packageName, candidate);
45
+ if ((0, node_fs_1.existsSync)(nodeDir)) {
46
+ return { nodesPath, nodeDir };
47
+ }
48
+ }
49
+ }
50
+ return null;
51
+ }
52
+ function toSnakeCase(str) {
53
+ return str
54
+ .replace(/([A-Z])/g, '_$1')
55
+ .toLowerCase()
56
+ .replace(/^_/, '')
57
+ .replace(/[-\s]+/g, '_');
58
+ }
59
+ function isSplitVersionStructure(nodeDir, versionStr) {
60
+ const versionDir = (0, node_path_1.join)(nodeDir, versionStr);
61
+ return (0, node_fs_1.existsSync)(versionDir) && (0, node_fs_1.statSync)(versionDir).isDirectory();
62
+ }
63
+ function getAvailableDiscriminators(nodeDir, versionStr) {
64
+ const versionDir = (0, node_path_1.join)(nodeDir, versionStr);
65
+ if (!(0, node_fs_1.existsSync)(versionDir)) {
66
+ return {};
67
+ }
68
+ try {
69
+ const entries = (0, node_fs_1.readdirSync)(versionDir, { withFileTypes: true });
70
+ const resources = [];
71
+ const modes = [];
72
+ for (const entry of entries) {
73
+ if (entry.isDirectory() && entry.name.startsWith('resource_')) {
74
+ resources.push(entry.name.replace('resource_', ''));
75
+ }
76
+ else if (entry.isFile() && entry.name.startsWith('mode_') && entry.name.endsWith('.ts')) {
77
+ modes.push(entry.name.replace('mode_', '').replace('.ts', ''));
78
+ }
79
+ }
80
+ return {
81
+ resources: resources.length > 0 ? resources : undefined,
82
+ modes: modes.length > 0 ? modes : undefined,
83
+ };
84
+ }
85
+ catch {
86
+ return {};
87
+ }
88
+ }
89
+ function parseNodeId(nodeId) {
90
+ if (nodeId.startsWith('@n8n/')) {
91
+ const withoutPrefix = nodeId.slice(5);
92
+ const dotIndex = withoutPrefix.indexOf('.');
93
+ if (dotIndex === -1) {
94
+ return null;
95
+ }
96
+ return {
97
+ packageName: withoutPrefix.slice(0, dotIndex),
98
+ nodeName: withoutPrefix.slice(dotIndex + 1),
99
+ };
100
+ }
101
+ const dotIndex = nodeId.indexOf('.');
102
+ if (dotIndex === -1) {
103
+ return null;
104
+ }
105
+ return {
106
+ packageName: nodeId.slice(0, dotIndex),
107
+ nodeName: nodeId.slice(dotIndex + 1),
108
+ };
109
+ }
110
+ function getNodeVersions(nodeId, nodeDefinitionDirs) {
111
+ const parsed = parseNodeId(nodeId);
112
+ if (!parsed) {
113
+ return [];
114
+ }
115
+ const nodesPaths = getGeneratedNodesPaths(nodeDefinitionDirs);
116
+ const found = findNodeDir(parsed, nodesPaths);
117
+ if (!found) {
118
+ return [];
119
+ }
120
+ const { nodeDir } = found;
121
+ try {
122
+ const entries = (0, node_fs_1.readdirSync)(nodeDir, { withFileTypes: true });
123
+ const versions = [];
124
+ for (const entry of entries) {
125
+ if (entry.isFile() &&
126
+ entry.name.startsWith('v') &&
127
+ entry.name.endsWith('.ts') &&
128
+ entry.name !== 'index.ts' &&
129
+ !entry.name.endsWith('.schema.js')) {
130
+ versions.push(entry.name.replace('.ts', ''));
131
+ }
132
+ else if (entry.isDirectory() && /^v\d+$/.test(entry.name)) {
133
+ versions.push(entry.name);
134
+ }
135
+ }
136
+ versions.sort((a, b) => {
137
+ const aNum = parseInt(a.slice(1), 10);
138
+ const bNum = parseInt(b.slice(1), 10);
139
+ return bNum - aNum;
140
+ });
141
+ return versions;
142
+ }
143
+ catch {
144
+ return [];
145
+ }
146
+ }
147
+ function resolveResourceOperationPath(nodeDir, targetVersion, nodeId, available, discriminators) {
148
+ if (!discriminators?.resource || !discriminators?.operation) {
149
+ return {
150
+ error: `Error: Node '${nodeId}' requires resource and operation discriminators. Available resources: ${available.resources?.join(', ')}. Use search_nodes to see all options.`,
151
+ requiresDiscriminators: true,
152
+ availableDiscriminators: available,
153
+ };
154
+ }
155
+ if (!isValidPathComponent(discriminators.resource)) {
156
+ return {
157
+ error: `Error: Invalid resource value '${discriminators.resource}' - contains invalid characters`,
158
+ };
159
+ }
160
+ if (!isValidPathComponent(discriminators.operation)) {
161
+ return {
162
+ error: `Error: Invalid operation value '${discriminators.operation}' - contains invalid characters`,
163
+ };
164
+ }
165
+ const resourcePath = `resource_${toSnakeCase(discriminators.resource)}`;
166
+ const resourceDir = (0, node_path_1.join)(nodeDir, targetVersion, resourcePath);
167
+ if (!(0, node_fs_1.existsSync)(resourceDir)) {
168
+ return {
169
+ error: `Error: Invalid resource '${discriminators.resource}' for node '${nodeId}'. Available: ${available.resources?.join(', ')}`,
170
+ };
171
+ }
172
+ const operationFile = `operation_${toSnakeCase(discriminators.operation)}.ts`;
173
+ const filePath = (0, node_path_1.join)(resourceDir, operationFile);
174
+ if (!validatePathWithinBase(filePath, nodeDir)) {
175
+ return {
176
+ error: 'Error: Invalid path - path traversal detected',
177
+ };
178
+ }
179
+ if (!(0, node_fs_1.existsSync)(filePath)) {
180
+ try {
181
+ const ops = (0, node_fs_1.readdirSync)(resourceDir)
182
+ .filter((f) => f.startsWith('operation_') && f.endsWith('.ts'))
183
+ .map((f) => f.replace('operation_', '').replace('.ts', ''));
184
+ return {
185
+ error: `Error: Invalid operation '${discriminators.operation}' for resource '${discriminators.resource}'. Available: ${ops.join(', ')}`,
186
+ };
187
+ }
188
+ catch {
189
+ return {
190
+ error: `Error: Could not read operations for resource '${discriminators.resource}'`,
191
+ };
192
+ }
193
+ }
194
+ return { filePath };
195
+ }
196
+ function resolveModePath(nodeDir, targetVersion, nodeId, available, mode) {
197
+ if (!mode) {
198
+ return {
199
+ error: `Error: Node '${nodeId}' requires mode discriminator. Available modes: ${available.modes?.join(', ')}. Use search_nodes to see all options.`,
200
+ requiresDiscriminators: true,
201
+ availableDiscriminators: available,
202
+ };
203
+ }
204
+ if (!isValidPathComponent(mode)) {
205
+ return {
206
+ error: `Error: Invalid mode value '${mode}' - contains invalid characters`,
207
+ };
208
+ }
209
+ const modeFile = `mode_${toSnakeCase(mode)}.ts`;
210
+ const filePath = (0, node_path_1.join)(nodeDir, targetVersion, modeFile);
211
+ if (!validatePathWithinBase(filePath, nodeDir)) {
212
+ return {
213
+ error: 'Error: Invalid path - path traversal detected',
214
+ };
215
+ }
216
+ if (!(0, node_fs_1.existsSync)(filePath)) {
217
+ return {
218
+ error: `Error: Invalid mode '${mode}' for node '${nodeId}'. Available: ${available.modes?.join(', ')}`,
219
+ };
220
+ }
221
+ return { filePath };
222
+ }
223
+ function getNodeFilePath(nodeId, version, nodeDefinitionDirs, discriminators) {
224
+ const parsed = parseNodeId(nodeId);
225
+ if (!parsed) {
226
+ return { error: `Invalid node ID format: '${nodeId}'` };
227
+ }
228
+ if (!isValidPathComponent(parsed.packageName)) {
229
+ return {
230
+ error: `Error: Invalid package name in node ID '${nodeId}' - contains invalid characters`,
231
+ };
232
+ }
233
+ if (!isValidPathComponent(parsed.nodeName)) {
234
+ return {
235
+ error: `Error: Invalid node name in node ID '${nodeId}' - contains invalid characters`,
236
+ };
237
+ }
238
+ const nodesPaths = getGeneratedNodesPaths(nodeDefinitionDirs);
239
+ const found = findNodeDir(parsed, nodesPaths);
240
+ if (!found) {
241
+ return {
242
+ error: `Node type '${nodeId}' not found. Use search_node to find the correct node ID.`,
243
+ };
244
+ }
245
+ const { nodesPath, nodeDir } = found;
246
+ if (!validatePathWithinBase(nodeDir, nodesPath)) {
247
+ return { error: 'Error: Invalid path - path traversal detected' };
248
+ }
249
+ let targetVersion = version;
250
+ if (!targetVersion) {
251
+ const versions = getNodeVersions(nodeId, nodeDefinitionDirs);
252
+ if (versions.length === 0) {
253
+ return { error: `No versions found for node '${nodeId}'` };
254
+ }
255
+ targetVersion = versions[0];
256
+ }
257
+ if (!targetVersion.startsWith('v')) {
258
+ targetVersion = `v${targetVersion.replace('.', '')}`;
259
+ }
260
+ else {
261
+ targetVersion = `v${targetVersion.slice(1).replace('.', '')}`;
262
+ }
263
+ if (isSplitVersionStructure(nodeDir, targetVersion)) {
264
+ const available = getAvailableDiscriminators(nodeDir, targetVersion);
265
+ if (available.resources && available.resources.length > 0) {
266
+ return resolveResourceOperationPath(nodeDir, targetVersion, nodeId, available, discriminators);
267
+ }
268
+ if (available.modes && available.modes.length > 0) {
269
+ return resolveModePath(nodeDir, targetVersion, nodeId, available, discriminators?.mode);
270
+ }
271
+ return {
272
+ error: `Error: Node '${nodeId}' has split structure but no recognized discriminators found`,
273
+ };
274
+ }
275
+ const filePath = (0, node_path_1.join)(nodeDir, `${targetVersion}.ts`);
276
+ if (!(0, node_fs_1.existsSync)(filePath)) {
277
+ return { error: `Version '${version}' not found for node '${nodeId}'` };
278
+ }
279
+ return { filePath };
280
+ }
281
+ function getNodeTypeDefinition(nodeId, version, nodeDefinitionDirs, discriminators) {
282
+ const nodesPaths = getGeneratedNodesPaths(nodeDefinitionDirs);
283
+ const anyDirExists = nodesPaths.some((p) => (0, node_fs_1.existsSync)(p));
284
+ if (!anyDirExists) {
285
+ const errorMsg = nodeDefinitionDirs
286
+ ? 'Node types directory not found in any of the configured dirs. Types may not have been generated yet.'
287
+ : 'Node types not found. The generated types directory does not exist. Ensure the application has started properly and types have been generated.';
288
+ return {
289
+ nodeId,
290
+ content: '',
291
+ error: errorMsg,
292
+ };
293
+ }
294
+ const pathResult = getNodeFilePath(nodeId, version, nodeDefinitionDirs, discriminators);
295
+ if (pathResult.error) {
296
+ const availableVersions = getNodeVersions(nodeId, nodeDefinitionDirs);
297
+ return {
298
+ nodeId,
299
+ version,
300
+ content: '',
301
+ availableVersions: availableVersions.length > 0 ? availableVersions : undefined,
302
+ error: pathResult.error,
303
+ };
304
+ }
305
+ if (!pathResult.filePath) {
306
+ return {
307
+ nodeId,
308
+ content: '',
309
+ error: `Node type '${nodeId}' not found. Use search_node to find the correct node ID.`,
310
+ };
311
+ }
312
+ try {
313
+ const content = (0, node_fs_1.readFileSync)(pathResult.filePath, 'utf-8');
314
+ const actualVersion = pathResult.filePath.match(/\/(v\d+)(?:\/|\.ts)/)?.[1];
315
+ return { nodeId, version: actualVersion, content };
316
+ }
317
+ catch (error) {
318
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
319
+ return {
320
+ nodeId,
321
+ content: '',
322
+ error: `Error reading node definition for '${nodeId}': ${errorMessage}`,
323
+ };
324
+ }
325
+ }
326
+ function getNodeTypes(nodeIds, options = {}) {
327
+ const { nodeDefinitionDirs } = options;
328
+ const results = [];
329
+ const errors = [];
330
+ for (const nodeRequest of nodeIds) {
331
+ const nodeId = typeof nodeRequest === 'string' ? nodeRequest : nodeRequest.nodeId;
332
+ const version = typeof nodeRequest === 'string' ? undefined : nodeRequest.version;
333
+ const discriminators = typeof nodeRequest === 'string'
334
+ ? undefined
335
+ : {
336
+ resource: nodeRequest.resource,
337
+ operation: nodeRequest.operation,
338
+ mode: nodeRequest.mode,
339
+ };
340
+ const result = getNodeTypeDefinition(nodeId, version, nodeDefinitionDirs, discriminators);
341
+ if (result.error) {
342
+ errors.push(result.error);
343
+ }
344
+ else {
345
+ const versionLabel = result.version ? ` (${result.version})` : '';
346
+ results.push(`## ${nodeId}${versionLabel}\n\n\`\`\`typescript\n${result.content}\n\`\`\``);
347
+ }
348
+ }
349
+ let response = '';
350
+ if (results.length > 0) {
351
+ response += `# TypeScript Type Definitions\n\n${results.join('\n\n---\n\n')}`;
352
+ }
353
+ if (errors.length > 0) {
354
+ response += `\n\n# Errors\n\n${errors.join('\n')}`;
355
+ }
356
+ return response;
357
+ }
358
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/node-catalog/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export { NodeTypeParser } from './node-type-parser';
2
+ export type { ParsedNodeType } from './node-type-parser';
3
+ export { CodeBuilderNodeSearchEngine, SCORE_WEIGHTS } from './search-engine';
4
+ export { searchCodeBuilderNodes, formatNodeResult } from './search';
5
+ export type { CodeBuilderSearchResult, CodeBuilderSearchToolOptions, } from './search';
6
+ export { getNodeTypes, isValidPathComponent, validatePathWithinBase, parseNodeId, toSnakeCase, } from './get';
7
+ export type { NodeRequest, CodeBuilderGetToolOptions } from './get';
8
+ export { getSuggestedNodes, categoryList } from './suggested';
9
+ export { suggestedNodesData, type CategoryData, type CategorySuggestedNode, } from './suggested-nodes-data';
10
+ export { extractModeDiscriminator, extractOperationOnlyDiscriminator, } from './discriminator-utils';
11
+ export type { ModeInfo, ModeDiscriminatorInfo, OperationOnlyInfo, OperationOnlyDiscriminatorInfo, } from './discriminator-utils';
12
+ export { extractResourceOperations, createResourceCacheKey, formatResourceOperationsForPrompt, } from './resource-operation-extractor';
13
+ export type { OperationInfo, ResourceInfo, ResourceOperationInfo, ExtractOptions, } from './resource-operation-extractor';
14
+ export type { SubnodeRequirement, CodeBuilderNodeSearchResult } from './types';
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatResourceOperationsForPrompt = exports.createResourceCacheKey = exports.extractResourceOperations = exports.extractOperationOnlyDiscriminator = exports.extractModeDiscriminator = exports.suggestedNodesData = exports.categoryList = exports.getSuggestedNodes = exports.toSnakeCase = exports.parseNodeId = exports.validatePathWithinBase = exports.isValidPathComponent = exports.getNodeTypes = exports.formatNodeResult = exports.searchCodeBuilderNodes = exports.SCORE_WEIGHTS = exports.CodeBuilderNodeSearchEngine = exports.NodeTypeParser = void 0;
4
+ var node_type_parser_1 = require("./node-type-parser");
5
+ Object.defineProperty(exports, "NodeTypeParser", { enumerable: true, get: function () { return node_type_parser_1.NodeTypeParser; } });
6
+ var search_engine_1 = require("./search-engine");
7
+ Object.defineProperty(exports, "CodeBuilderNodeSearchEngine", { enumerable: true, get: function () { return search_engine_1.CodeBuilderNodeSearchEngine; } });
8
+ Object.defineProperty(exports, "SCORE_WEIGHTS", { enumerable: true, get: function () { return search_engine_1.SCORE_WEIGHTS; } });
9
+ var search_1 = require("./search");
10
+ Object.defineProperty(exports, "searchCodeBuilderNodes", { enumerable: true, get: function () { return search_1.searchCodeBuilderNodes; } });
11
+ Object.defineProperty(exports, "formatNodeResult", { enumerable: true, get: function () { return search_1.formatNodeResult; } });
12
+ var get_1 = require("./get");
13
+ Object.defineProperty(exports, "getNodeTypes", { enumerable: true, get: function () { return get_1.getNodeTypes; } });
14
+ Object.defineProperty(exports, "isValidPathComponent", { enumerable: true, get: function () { return get_1.isValidPathComponent; } });
15
+ Object.defineProperty(exports, "validatePathWithinBase", { enumerable: true, get: function () { return get_1.validatePathWithinBase; } });
16
+ Object.defineProperty(exports, "parseNodeId", { enumerable: true, get: function () { return get_1.parseNodeId; } });
17
+ Object.defineProperty(exports, "toSnakeCase", { enumerable: true, get: function () { return get_1.toSnakeCase; } });
18
+ var suggested_1 = require("./suggested");
19
+ Object.defineProperty(exports, "getSuggestedNodes", { enumerable: true, get: function () { return suggested_1.getSuggestedNodes; } });
20
+ Object.defineProperty(exports, "categoryList", { enumerable: true, get: function () { return suggested_1.categoryList; } });
21
+ var suggested_nodes_data_1 = require("./suggested-nodes-data");
22
+ Object.defineProperty(exports, "suggestedNodesData", { enumerable: true, get: function () { return suggested_nodes_data_1.suggestedNodesData; } });
23
+ var discriminator_utils_1 = require("./discriminator-utils");
24
+ Object.defineProperty(exports, "extractModeDiscriminator", { enumerable: true, get: function () { return discriminator_utils_1.extractModeDiscriminator; } });
25
+ Object.defineProperty(exports, "extractOperationOnlyDiscriminator", { enumerable: true, get: function () { return discriminator_utils_1.extractOperationOnlyDiscriminator; } });
26
+ var resource_operation_extractor_1 = require("./resource-operation-extractor");
27
+ Object.defineProperty(exports, "extractResourceOperations", { enumerable: true, get: function () { return resource_operation_extractor_1.extractResourceOperations; } });
28
+ Object.defineProperty(exports, "createResourceCacheKey", { enumerable: true, get: function () { return resource_operation_extractor_1.createResourceCacheKey; } });
29
+ Object.defineProperty(exports, "formatResourceOperationsForPrompt", { enumerable: true, get: function () { return resource_operation_extractor_1.formatResourceOperationsForPrompt; } });
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node-catalog/index.ts"],"names":[],"mappings":";;;AAUA,uDAAoD;AAA3C,kHAAA,cAAc,OAAA;AAGvB,iDAA6E;AAApE,4HAAA,2BAA2B,OAAA;AAAE,8GAAA,aAAa,OAAA;AAEnD,mCAAoE;AAA3D,gHAAA,sBAAsB,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAMjD,6BAMe;AALd,mGAAA,YAAY,OAAA;AACZ,2GAAA,oBAAoB,OAAA;AACpB,6GAAA,sBAAsB,OAAA;AACtB,kGAAA,WAAW,OAAA;AACX,kGAAA,WAAW,OAAA;AAIZ,yCAA8D;AAArD,8GAAA,iBAAiB,OAAA;AAAE,yGAAA,YAAY,OAAA;AAExC,+DAIgC;AAH/B,0HAAA,kBAAkB,OAAA;AAKnB,6DAG+B;AAF9B,+HAAA,wBAAwB,OAAA;AACxB,wIAAA,iCAAiC,OAAA;AASlC,+EAIwC;AAHvC,yIAAA,yBAAyB,OAAA;AACzB,sIAAA,sBAAsB,OAAA;AACtB,iJAAA,iCAAiC,OAAA"}
@@ -0,0 +1,27 @@
1
+ import type { INodeTypeDescription, IRelatedNode } from 'n8n-workflow';
2
+ import { type ModeDiscriminatorInfo, type OperationOnlyDiscriminatorInfo } from './discriminator-utils';
3
+ import { type ResourceOperationInfo } from './resource-operation-extractor';
4
+ export interface VersionDiscriminators {
5
+ resourceOperations: ResourceOperationInfo | null;
6
+ modeDiscriminator: ModeDiscriminatorInfo | null;
7
+ operationDiscriminator: OperationOnlyDiscriminatorInfo | null;
8
+ }
9
+ export interface LeanNodeTypeDescription {
10
+ name: string;
11
+ displayName: string;
12
+ description: string;
13
+ version: number | number[];
14
+ group: INodeTypeDescription['group'];
15
+ inputs: INodeTypeDescription['inputs'];
16
+ outputs: INodeTypeDescription['outputs'];
17
+ codex?: {
18
+ alias?: string[];
19
+ };
20
+ builderHint?: {
21
+ searchHint?: string;
22
+ relatedNodes?: IRelatedNode[];
23
+ inputs?: NonNullable<INodeTypeDescription['builderHint']>['inputs'];
24
+ };
25
+ discriminatorsByVersion: Map<number, VersionDiscriminators>;
26
+ }
27
+ export declare function toLeanNodeType(node: INodeTypeDescription): LeanNodeTypeDescription;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toLeanNodeType = toLeanNodeType;
4
+ const discriminator_utils_1 = require("./discriminator-utils");
5
+ const resource_operation_extractor_1 = require("./resource-operation-extractor");
6
+ function getVersions(node) {
7
+ return Array.isArray(node.version) ? node.version : [node.version];
8
+ }
9
+ function buildVersionDiscriminators(node) {
10
+ const out = new Map();
11
+ for (const version of getVersions(node)) {
12
+ out.set(version, {
13
+ resourceOperations: (0, resource_operation_extractor_1.extractResourceOperations)(node, version, undefined, {
14
+ fields: { description: true, builderHint: true },
15
+ }),
16
+ modeDiscriminator: (0, discriminator_utils_1.extractModeDiscriminator)(node, version),
17
+ operationDiscriminator: (0, discriminator_utils_1.extractOperationOnlyDiscriminator)(node, version),
18
+ });
19
+ }
20
+ return out;
21
+ }
22
+ function toLeanNodeType(node) {
23
+ const lean = {
24
+ name: node.name,
25
+ displayName: node.displayName,
26
+ description: node.description,
27
+ version: node.version,
28
+ group: node.group,
29
+ inputs: node.inputs,
30
+ outputs: node.outputs,
31
+ discriminatorsByVersion: buildVersionDiscriminators(node),
32
+ };
33
+ if (node.codex?.alias) {
34
+ lean.codex = { alias: node.codex.alias };
35
+ }
36
+ if (node.builderHint) {
37
+ const { searchHint, relatedNodes, inputs } = node.builderHint;
38
+ const hint = {};
39
+ if (searchHint !== undefined)
40
+ hint.searchHint = searchHint;
41
+ if (relatedNodes !== undefined)
42
+ hint.relatedNodes = relatedNodes;
43
+ if (inputs !== undefined)
44
+ hint.inputs = inputs;
45
+ if (Object.keys(hint).length > 0)
46
+ lean.builderHint = hint;
47
+ }
48
+ return lean;
49
+ }
50
+ //# sourceMappingURL=lean-node-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lean-node-type.js","sourceRoot":"","sources":["../../../src/node-catalog/lean-node-type.ts"],"names":[],"mappings":";;AAuFA,wCA0BC;AAhGD,+DAK+B;AAC/B,iFAGwC;AAmCxC,SAAS,WAAW,CAAC,IAA0B;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,0BAA0B,CAClC,IAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiC,CAAC;IACrD,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;YAChB,kBAAkB,EAAE,IAAA,wDAAyB,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE;gBACvE,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;aAChD,CAAC;YACF,iBAAiB,EAAE,IAAA,8CAAwB,EAAC,IAAI,EAAE,OAAO,CAAC;YAC1D,sBAAsB,EAAE,IAAA,uDAAiC,EAAC,IAAI,EAAE,OAAO,CAAC;SACxE,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAQD,SAAgB,cAAc,CAAC,IAA0B;IACxD,MAAM,IAAI,GAA4B;QACrC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,uBAAuB,EAAE,0BAA0B,CAAC,IAAI,CAAC;KACzD,CAAC;IAEF,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9D,MAAM,IAAI,GAA2C,EAAE,CAAC;QACxD,IAAI,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC3D,IAAI,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjE,IAAI,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC3D,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { INodeTypeDescription } from 'n8n-workflow';
2
+ import { type LeanNodeTypeDescription, type VersionDiscriminators } from './lean-node-type';
3
+ export interface ParsedNodeType {
4
+ id: string;
5
+ displayName: string;
6
+ description: string;
7
+ version: number;
8
+ isTrigger: boolean;
9
+ }
10
+ export declare class NodeTypeParser {
11
+ private nodeTypes;
12
+ private nodeTypeIndex;
13
+ private searchEngine;
14
+ constructor(nodeTypes: INodeTypeDescription[]);
15
+ private buildIndex;
16
+ private isTriggerNode;
17
+ searchNodeTypes(query: string, limit?: number, nodeFilter?: (nodeId: string) => boolean): ParsedNodeType[];
18
+ getLeanNodeType(nodeId: string, version?: number): LeanNodeTypeDescription | null;
19
+ getVersionDiscriminators(nodeId: string, version: number): VersionDiscriminators | null;
20
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeTypeParser = void 0;
4
+ const lean_node_type_1 = require("./lean-node-type");
5
+ const search_engine_1 = require("./search-engine");
6
+ class NodeTypeParser {
7
+ constructor(nodeTypes) {
8
+ this.nodeTypes = nodeTypes.map(lean_node_type_1.toLeanNodeType);
9
+ this.searchEngine = new search_engine_1.CodeBuilderNodeSearchEngine(this.nodeTypes);
10
+ this.nodeTypeIndex = this.buildIndex();
11
+ }
12
+ buildIndex() {
13
+ const index = new Map();
14
+ for (const nodeType of this.nodeTypes) {
15
+ const existing = index.get(nodeType.name) ?? [];
16
+ existing.push(nodeType);
17
+ index.set(nodeType.name, existing);
18
+ }
19
+ return index;
20
+ }
21
+ isTriggerNode(nodeType) {
22
+ if (nodeType.group.includes('trigger')) {
23
+ return true;
24
+ }
25
+ return (nodeType.name.toLowerCase().includes('trigger') ||
26
+ nodeType.name.toLowerCase().includes('webhook'));
27
+ }
28
+ searchNodeTypes(query, limit = 5, nodeFilter) {
29
+ const results = this.searchEngine.searchByName(query, limit, nodeFilter);
30
+ return results.map((result) => {
31
+ const nodeType = this.getLeanNodeType(result.name, result.version);
32
+ return {
33
+ id: result.name,
34
+ displayName: result.displayName,
35
+ description: result.description,
36
+ version: result.version,
37
+ isTrigger: nodeType ? this.isTriggerNode(nodeType) : false,
38
+ };
39
+ });
40
+ }
41
+ getLeanNodeType(nodeId, version) {
42
+ const versions = this.nodeTypeIndex.get(nodeId);
43
+ if (!versions || versions.length === 0) {
44
+ return null;
45
+ }
46
+ if (version !== undefined) {
47
+ const match = versions.find((v) => {
48
+ const nodeVersions = Array.isArray(v.version) ? v.version : [v.version];
49
+ return nodeVersions.includes(version);
50
+ });
51
+ return match ?? null;
52
+ }
53
+ return versions.reduce((latest, current) => {
54
+ const latestMax = Array.isArray(latest.version)
55
+ ? Math.max(...latest.version)
56
+ : latest.version;
57
+ const currentMax = Array.isArray(current.version)
58
+ ? Math.max(...current.version)
59
+ : current.version;
60
+ return currentMax > latestMax ? current : latest;
61
+ });
62
+ }
63
+ getVersionDiscriminators(nodeId, version) {
64
+ const node = this.getLeanNodeType(nodeId, version);
65
+ return node?.discriminatorsByVersion.get(version) ?? null;
66
+ }
67
+ }
68
+ exports.NodeTypeParser = NodeTypeParser;
69
+ //# sourceMappingURL=node-type-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-type-parser.js","sourceRoot":"","sources":["../../../src/node-catalog/node-type-parser.ts"],"names":[],"mappings":";;;AAcA,qDAI0B;AAC1B,mDAA8D;AAc9D,MAAa,cAAc;IAK1B,YAAY,SAAiC;QAC5C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,+BAAc,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,2CAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAKO,UAAU;QACjB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqC,CAAC;QAE3D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAMO,aAAa,CAAC,QAAiC;QAEtD,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,CACN,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC/C,CAAC;IACH,CAAC;IAMD,eAAe,CACd,KAAa,EACb,QAAgB,CAAC,EACjB,UAAwC;QAExC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAEzE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACnE,OAAO;gBACN,EAAE,EAAE,MAAM,CAAC,IAAI;gBACf,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;aAC1D,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAWD,eAAe,CAAC,MAAc,EAAE,OAAgB;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACb,CAAC;QAGD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACxE,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,IAAI,IAAI,CAAC;QACtB,CAAC;QAGD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC9C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAClB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBAChD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC9B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACnB,OAAO,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAClD,CAAC,CAAC,CAAC;IACJ,CAAC;IAUD,wBAAwB,CAAC,MAAc,EAAE,OAAe;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,EAAE,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAC3D,CAAC;CACD;AAnHD,wCAmHC"}
@@ -0,0 +1,26 @@
1
+ import { type INodeTypeDescription, type IParameterBuilderHint, type Logger } from 'n8n-workflow';
2
+ export interface OperationInfo {
3
+ value: string;
4
+ displayName: string;
5
+ description?: string;
6
+ builderHint?: IParameterBuilderHint;
7
+ }
8
+ export interface ResourceInfo {
9
+ value: string;
10
+ displayName: string;
11
+ description?: string;
12
+ builderHint?: IParameterBuilderHint;
13
+ operations: OperationInfo[];
14
+ }
15
+ export interface ResourceOperationInfo {
16
+ resources: ResourceInfo[];
17
+ }
18
+ export interface ExtractOptions {
19
+ fields?: {
20
+ description?: boolean;
21
+ builderHint?: boolean;
22
+ };
23
+ }
24
+ export declare function extractResourceOperations(nodeType: INodeTypeDescription, nodeVersion: number, logger?: Logger, options?: ExtractOptions): ResourceOperationInfo | null;
25
+ export declare function createResourceCacheKey(nodeName: string, version: number): string;
26
+ export declare function formatResourceOperationsForPrompt(info: ResourceOperationInfo): string;