@aiteza/n8n-nodes-aiteza 0.3.0 → 0.4.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.
@@ -29,9 +29,6 @@ class Aiteza {
29
29
  },
30
30
  ],
31
31
  properties: [
32
- // ------------------------------------------------------------------
33
- // Authentication mode
34
- // ------------------------------------------------------------------
35
32
  {
36
33
  displayName: 'Authentication',
37
34
  name: 'authSource',
@@ -41,12 +38,12 @@ class Aiteza {
41
38
  {
42
39
  name: 'OAuth2 Credentials',
43
40
  value: 'credentials',
44
- description: 'Use configured AITEZA OAuth2 credentials',
41
+ description: 'Use your configured Aiteza OAuth2 credentials',
45
42
  },
46
43
  {
47
44
  name: 'From AITEZA Trigger',
48
45
  value: 'trigger',
49
- description: 'Use the auth token (and optionally base URL) passed by an upstream AITEZA Trigger node (acts on behalf of the calling user). The node never falls back to configured credentials – those would belong to a different identity.',
46
+ description: 'Use the token forwarded by an upstream Aiteza Trigger node to act on behalf of the triggering user',
50
47
  },
51
48
  ],
52
49
  default: 'credentials',
@@ -56,13 +53,10 @@ class Aiteza {
56
53
  name: 'baseUrl',
57
54
  type: 'string',
58
55
  default: '',
59
- placeholder: 'https://aiteza.example.com',
56
+ placeholder: 'e.g. https://aiteza.example.com',
60
57
  displayOptions: { show: { authSource: ['trigger'] } },
61
- description: 'Base URL of the AITEZA backend (without trailing slash). Leave empty to use the URL forwarded by the upstream AITEZA Trigger node (_baseUrl in its output). Required if the trigger does not provide one.',
58
+ description: 'Base URL of the Aiteza backend (without trailing slash). Leave empty to use the URL forwarded by the upstream Aiteza Trigger node. Required if the trigger does not provide one.',
62
59
  },
63
- // ------------------------------------------------------------------
64
- // Resource
65
- // ------------------------------------------------------------------
66
60
  {
67
61
  displayName: 'Resource',
68
62
  name: 'resource',
@@ -82,9 +76,6 @@ class Aiteza {
82
76
  ],
83
77
  default: 'dataroom',
84
78
  },
85
- // ==================================================================
86
- // DATAROOM
87
- // ==================================================================
88
79
  {
89
80
  displayName: 'Operation',
90
81
  name: 'operation',
@@ -92,24 +83,23 @@ class Aiteza {
92
83
  noDataExpression: true,
93
84
  displayOptions: { show: { resource: ['dataroom'] } },
94
85
  options: [
95
- { name: 'Create', value: 'create', action: 'Create a dataroom' },
96
- { name: 'Delete', value: 'delete', action: 'Delete datarooms' },
97
- { name: 'Get', value: 'get', action: 'Get a dataroom' },
98
- { name: 'Get Chats', value: 'getChats', action: 'Get chats connected to a dataroom' },
99
- { name: 'Get Children', value: 'getChildren', action: 'Get children of a dataroom' },
100
- { name: 'Get Connected', value: 'getConnected', action: 'Get connected datarooms' },
101
- { name: 'Get Models', value: 'getModels', action: 'Get models available in a dataroom' },
102
- { name: 'Get Recent', value: 'getRecent', action: 'Get recently used datarooms' },
103
- { name: 'Get Starred', value: 'getStarred', action: 'Get starred datarooms' },
104
- { name: 'Search', value: 'search', action: 'Search datarooms by name' },
105
- { name: 'Set Connected', value: 'setConnected', action: 'Set connected datarooms' },
106
- { name: 'Star', value: 'star', action: 'Star a dataroom' },
107
- { name: 'Unstar', value: 'unstar', action: 'Unstar a dataroom' },
108
- { name: 'Update', value: 'update', action: 'Update a dataroom' },
86
+ { name: 'Create', value: 'create', action: 'Create a dataroom', description: 'Create a new dataroom' },
87
+ { name: 'Delete', value: 'delete', action: 'Delete a dataroom', description: 'Delete one or more datarooms permanently' },
88
+ { name: 'Get', value: 'get', action: 'Get a dataroom', description: 'Retrieve a dataroom by ID' },
89
+ { name: 'Get Chats', value: 'getChats', action: 'Get chats in a dataroom', description: 'Retrieve a list of chats connected to a dataroom' },
90
+ { name: 'Get Children', value: 'getChildren', action: 'Get children of a dataroom', description: 'Retrieve child datarooms within a dataroom' },
91
+ { name: 'Get Connected', value: 'getConnected', action: 'Get connected datarooms', description: 'Retrieve the default connected datarooms for a dataroom' },
92
+ { name: 'Get Models', value: 'getModels', action: 'Get models in a dataroom', description: 'Retrieve AI models available in a dataroom' },
93
+ { name: 'Get Recent', value: 'getRecent', action: 'Get recent datarooms', description: 'Retrieve recently accessed datarooms' },
94
+ { name: 'Get Starred', value: 'getStarred', action: 'Get starred datarooms', description: 'Retrieve your starred datarooms' },
95
+ { name: 'Search', value: 'search', action: 'Search datarooms', description: 'Search for datarooms by name' },
96
+ { name: 'Set Connected', value: 'setConnected', action: 'Set connected datarooms', description: 'Set the default connected datarooms for a dataroom' },
97
+ { name: 'Star', value: 'star', action: 'Star a dataroom', description: 'Add a dataroom to your starred list' },
98
+ { name: 'Unstar', value: 'unstar', action: 'Unstar a dataroom', description: 'Remove a dataroom from your starred list' },
99
+ { name: 'Update', value: 'update', action: 'Update a dataroom', description: 'Update a dataroom\'s name and settings' },
109
100
  ],
110
101
  default: 'get',
111
102
  },
112
- // Dataroom → Get / Update / Star / Unstar / Get Connected / Set Connected / Get Chats / Get Models
113
103
  {
114
104
  displayName: 'Dataroom Name or ID',
115
105
  name: 'dataroomId',
@@ -120,7 +110,14 @@ class Aiteza {
120
110
  displayOptions: { show: { resource: ['dataroom'], operation: ['get', 'update', 'star', 'unstar', 'getConnected', 'setConnected', 'getChats', 'getModels'] } },
121
111
  description: 'The dataroom to operate on. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
122
112
  },
123
- // Dataroom → Get Children
113
+ {
114
+ displayName: 'Simplify',
115
+ name: 'simplify',
116
+ type: 'boolean',
117
+ default: true,
118
+ displayOptions: { show: { resource: ['dataroom'], operation: ['get', 'search', 'getRecent', 'getStarred', 'getChildren'] } },
119
+ description: 'Whether to return a simplified version of the response instead of the raw data',
120
+ },
124
121
  {
125
122
  displayName: 'Parent Dataroom Name or ID',
126
123
  name: 'dataroomId',
@@ -136,6 +133,7 @@ class Aiteza {
136
133
  name: 'nameFilter',
137
134
  type: 'string',
138
135
  default: '',
136
+ placeholder: 'e.g. Reports',
139
137
  displayOptions: { show: { resource: ['dataroom'], operation: ['getChildren'] } },
140
138
  description: 'Filter children by name (case-insensitive)',
141
139
  },
@@ -152,6 +150,7 @@ class Aiteza {
152
150
  name: 'sortBy',
153
151
  type: 'string',
154
152
  default: 'name',
153
+ placeholder: 'e.g. name',
155
154
  description: 'Field name to sort by',
156
155
  },
157
156
  {
@@ -167,23 +166,23 @@ class Aiteza {
167
166
  },
168
167
  ],
169
168
  },
170
- // Dataroom → Search
171
169
  {
172
- displayName: 'Search Name',
170
+ displayName: 'Search Term',
173
171
  name: 'name',
174
172
  type: 'string',
175
173
  required: true,
176
174
  default: '',
175
+ placeholder: 'e.g. Annual Reports',
177
176
  displayOptions: { show: { resource: ['dataroom'], operation: ['search'] } },
178
177
  description: 'Name to search for (case-insensitive)',
179
178
  },
180
- // Dataroom → Create
181
179
  {
182
180
  displayName: 'Name',
183
181
  name: 'name',
184
182
  type: 'string',
185
183
  required: true,
186
184
  default: '',
185
+ placeholder: 'e.g. Annual Reports',
187
186
  displayOptions: { show: { resource: ['dataroom'], operation: ['create'] } },
188
187
  description: 'Name of the new dataroom',
189
188
  },
@@ -195,9 +194,9 @@ class Aiteza {
195
194
  default: 'private',
196
195
  displayOptions: { show: { resource: ['dataroom'], operation: ['create'] } },
197
196
  options: [
198
- { name: 'Private', value: 'private' },
199
- { name: 'Inherit', value: 'inherit' },
200
- { name: 'Custom', value: 'custom' },
197
+ { name: 'Private', value: 'private', description: 'Access is restricted to members only' },
198
+ { name: 'Inherit', value: 'inherit', description: 'Inherit access settings from the parent dataroom' },
199
+ { name: 'Custom', value: 'custom', description: 'Use a custom access configuration' },
201
200
  ],
202
201
  description: 'Access control type for the dataroom',
203
202
  },
@@ -210,7 +209,6 @@ class Aiteza {
210
209
  displayOptions: { show: { resource: ['dataroom'], operation: ['create'] } },
211
210
  description: 'Optional parent dataroom. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
212
211
  },
213
- // Dataroom → Update
214
212
  {
215
213
  displayName: 'Update Fields',
216
214
  name: 'updateFields',
@@ -250,7 +248,6 @@ class Aiteza {
250
248
  },
251
249
  ],
252
250
  },
253
- // Dataroom → Delete
254
251
  {
255
252
  displayName: 'Dataroom Names or IDs',
256
253
  name: 'dataroomIds',
@@ -261,7 +258,6 @@ class Aiteza {
261
258
  displayOptions: { show: { resource: ['dataroom'], operation: ['delete'] } },
262
259
  description: 'Datarooms to delete. Choose from the list (prepopulated with recently used), or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
263
260
  },
264
- // Dataroom → Set Connected
265
261
  {
266
262
  displayName: 'Connected Dataroom Names or IDs',
267
263
  name: 'connectedDataroomIds',
@@ -272,7 +268,6 @@ class Aiteza {
272
268
  displayOptions: { show: { resource: ['dataroom'], operation: ['setConnected'] } },
273
269
  description: 'Datarooms to set as default connected datarooms. Choose from the list (prepopulated with recently used), or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
274
270
  },
275
- // Dataroom → Get Chats pagination
276
271
  {
277
272
  displayName: 'Additional Fields',
278
273
  name: 'additionalFields',
@@ -293,18 +288,18 @@ class Aiteza {
293
288
  name: 'size',
294
289
  type: 'number',
295
290
  default: 20,
296
- description: 'Number of items per page',
291
+ description: 'Number of results per page',
297
292
  },
298
293
  {
299
- displayName: 'Query',
294
+ displayName: 'Search Term',
300
295
  name: 'q',
301
296
  type: 'string',
302
297
  default: '',
298
+ placeholder: 'e.g. Annual Report',
303
299
  description: 'Filter chats by name (case-insensitive)',
304
300
  },
305
301
  ],
306
302
  },
307
- // Dataroom → Get Starred
308
303
  {
309
304
  displayName: 'Additional Fields',
310
305
  name: 'additionalFields',
@@ -318,6 +313,7 @@ class Aiteza {
318
313
  name: 'q',
319
314
  type: 'string',
320
315
  default: '',
316
+ placeholder: 'e.g. Reports',
321
317
  description: 'Filter by name (case-insensitive)',
322
318
  },
323
319
  {
@@ -325,6 +321,7 @@ class Aiteza {
325
321
  name: 'sortBy',
326
322
  type: 'string',
327
323
  default: '',
324
+ placeholder: 'e.g. name',
328
325
  description: 'Field name to sort by',
329
326
  },
330
327
  {
@@ -336,12 +333,10 @@ class Aiteza {
336
333
  { name: 'Descending', value: 'DESC' },
337
334
  ],
338
335
  default: 'ASC',
336
+ description: 'Sort direction',
339
337
  },
340
338
  ],
341
339
  },
342
- // ==================================================================
343
- // DATAROOM MEMBER
344
- // ==================================================================
345
340
  {
346
341
  displayName: 'Operation',
347
342
  name: 'operation',
@@ -349,10 +344,10 @@ class Aiteza {
349
344
  noDataExpression: true,
350
345
  displayOptions: { show: { resource: ['dataroomMember'] } },
351
346
  options: [
352
- { name: 'Add', value: 'add', action: 'Add a member to a dataroom' },
353
- { name: 'Get Many', value: 'getMany', action: 'Get all members of a dataroom' },
354
- { name: 'Remove', value: 'remove', action: 'Remove a member from a dataroom' },
355
- { name: 'Update Role', value: 'updateRole', action: 'Update a member role in a dataroom' },
347
+ { name: 'Add', value: 'add', action: 'Add member to a dataroom', description: 'Add one or more users as members of a dataroom' },
348
+ { name: 'Get Many', value: 'getMany', action: 'Get members of a dataroom', description: 'Retrieve a list of members in a dataroom' },
349
+ { name: 'Remove', value: 'remove', action: 'Remove member from a dataroom', description: 'Remove one or more members from a dataroom' },
350
+ { name: 'Update Role', value: 'updateRole', action: 'Update member role in a dataroom', description: 'Update the role of one or more members in a dataroom' },
356
351
  ],
357
352
  default: 'getMany',
358
353
  },
@@ -371,8 +366,9 @@ class Aiteza {
371
366
  name: 'searchTerm',
372
367
  type: 'string',
373
368
  default: '',
369
+ placeholder: 'e.g. john.doe',
374
370
  displayOptions: { show: { resource: ['dataroomMember'], operation: ['getMany'] } },
375
- description: 'Optional search term to filter members',
371
+ description: 'Filter members by name or username',
376
372
  },
377
373
  {
378
374
  displayName: 'Usernames',
@@ -380,6 +376,7 @@ class Aiteza {
380
376
  type: 'string',
381
377
  required: true,
382
378
  default: '',
379
+ placeholder: 'e.g. john.doe, jane.smith',
383
380
  displayOptions: { show: { resource: ['dataroomMember'], operation: ['add', 'remove', 'updateRole'] } },
384
381
  description: 'Comma-separated list of usernames',
385
382
  },
@@ -391,11 +388,11 @@ class Aiteza {
391
388
  default: 'viewer',
392
389
  displayOptions: { show: { resource: ['dataroomMember'], operation: ['add', 'updateRole'] } },
393
390
  options: [
394
- { name: 'Owner', value: 'owner' },
395
- { name: 'Editor', value: 'editor' },
396
- { name: 'Viewer', value: 'viewer' },
391
+ { name: 'Owner', value: 'owner', description: 'Full access including managing members' },
392
+ { name: 'Editor', value: 'editor', description: 'Can add and edit content' },
393
+ { name: 'Viewer', value: 'viewer', description: 'Read-only access' },
397
394
  ],
398
- description: 'Role to assign',
395
+ description: 'Role to assign to the members',
399
396
  },
400
397
  {
401
398
  displayName: 'Inherit to Children',
@@ -403,11 +400,8 @@ class Aiteza {
403
400
  type: 'boolean',
404
401
  default: false,
405
402
  displayOptions: { show: { resource: ['dataroomMember'], operation: ['add', 'remove', 'updateRole'] } },
406
- description: 'Whether to inherit this role assignment to all child datarooms',
403
+ description: 'Whether to apply this role assignment to all child datarooms as well',
407
404
  },
408
- // ==================================================================
409
- // DATAROOM GROUP
410
- // ==================================================================
411
405
  {
412
406
  displayName: 'Operation',
413
407
  name: 'operation',
@@ -415,10 +409,10 @@ class Aiteza {
415
409
  noDataExpression: true,
416
410
  displayOptions: { show: { resource: ['dataroomGroup'] } },
417
411
  options: [
418
- { name: 'Add', value: 'add', action: 'Assign a group to a dataroom' },
419
- { name: 'Get Many', value: 'getMany', action: 'Get groups assigned to a dataroom' },
420
- { name: 'Remove', value: 'remove', action: 'Remove a group from a dataroom' },
421
- { name: 'Update Role', value: 'updateRole', action: 'Update group role in a dataroom' },
412
+ { name: 'Add', value: 'add', action: 'Add group to a dataroom', description: 'Assign a group to a dataroom with a role' },
413
+ { name: 'Get Many', value: 'getMany', action: 'Get groups of a dataroom', description: 'Retrieve a list of groups assigned to a dataroom' },
414
+ { name: 'Remove', value: 'remove', action: 'Remove group from a dataroom', description: 'Remove a group from a dataroom' },
415
+ { name: 'Update Role', value: 'updateRole', action: 'Update group role in a dataroom', description: 'Update the role of a group in a dataroom' },
422
416
  ],
423
417
  default: 'getMany',
424
418
  },
@@ -437,8 +431,9 @@ class Aiteza {
437
431
  name: 'searchTerm',
438
432
  type: 'string',
439
433
  default: '',
434
+ placeholder: 'e.g. engineering',
440
435
  displayOptions: { show: { resource: ['dataroomGroup'], operation: ['getMany'] } },
441
- description: 'Optional search term to filter groups',
436
+ description: 'Filter groups by name',
442
437
  },
443
438
  {
444
439
  displayName: 'Group Path',
@@ -446,8 +441,9 @@ class Aiteza {
446
441
  type: 'string',
447
442
  required: true,
448
443
  default: '',
444
+ placeholder: 'e.g. /departments/engineering',
449
445
  displayOptions: { show: { resource: ['dataroomGroup'], operation: ['add', 'remove', 'updateRole'] } },
450
- description: 'The group path/name to assign or remove',
446
+ description: 'The path of the group to assign or remove',
451
447
  },
452
448
  {
453
449
  displayName: 'Role',
@@ -457,9 +453,9 @@ class Aiteza {
457
453
  default: 'viewer',
458
454
  displayOptions: { show: { resource: ['dataroomGroup'], operation: ['add', 'updateRole'] } },
459
455
  options: [
460
- { name: 'Owner', value: 'owner' },
461
- { name: 'Editor', value: 'editor' },
462
- { name: 'Viewer', value: 'viewer' },
456
+ { name: 'Owner', value: 'owner', description: 'Full access including managing members' },
457
+ { name: 'Editor', value: 'editor', description: 'Can add and edit content' },
458
+ { name: 'Viewer', value: 'viewer', description: 'Read-only access' },
463
459
  ],
464
460
  description: 'Role to assign to the group',
465
461
  },
@@ -469,11 +465,8 @@ class Aiteza {
469
465
  type: 'boolean',
470
466
  default: false,
471
467
  displayOptions: { show: { resource: ['dataroomGroup'], operation: ['add', 'remove', 'updateRole'] } },
472
- description: 'Whether to apply changes to child datarooms',
468
+ description: 'Whether to apply changes to child datarooms as well',
473
469
  },
474
- // ==================================================================
475
- // FILE
476
- // ==================================================================
477
470
  {
478
471
  displayName: 'Operation',
479
472
  name: 'operation',
@@ -481,31 +474,30 @@ class Aiteza {
481
474
  noDataExpression: true,
482
475
  displayOptions: { show: { resource: ['file'] } },
483
476
  options: [
484
- { name: 'Assign to Dataroom', value: 'assign', action: 'Assign a standalone file to a dataroom' },
485
- { name: 'Bulk Delete', value: 'bulkDelete', action: 'Delete multiple files from a dataroom' },
486
- { name: 'Bulk Move', value: 'bulkMove', action: 'Move multiple files to another dataroom' },
487
- { name: 'Bulk Patch', value: 'bulkPatch', action: 'Bulk patch or reprocess files in a dataroom' },
488
- { name: 'Delete', value: 'delete', action: 'Delete a file from a dataroom' },
489
- { name: 'Delete All (Dataroom)', value: 'deleteAllDataroom', action: 'Delete all files from a dataroom' },
490
- { name: 'Delete Standalone', value: 'deleteStandalone', action: 'Delete a standalone file' },
491
- { name: 'Get', value: 'get', action: 'Get a file from a dataroom' },
492
- { name: 'Get Chunks', value: 'getChunks', action: 'Get chunks of a standalone file' },
493
- { name: 'Get Chunks (Dataroom)', value: 'getChunksDataroom', action: 'Get chunks of a dataroom file' },
494
- { name: 'Get Content', value: 'getContent', action: 'Get processed text content of a standalone file' },
495
- { name: 'Get Many', value: 'getMany', action: 'Get files in a dataroom' },
496
- { name: 'Get Many Standalone', value: 'getManyStandalone', action: 'Get standalone files' },
497
- { name: 'Get Metadata', value: 'getMetadata', action: 'Get metadata of a standalone file' },
498
- { name: 'Get Original URL', value: 'getOriginalUrl', action: 'Get original file download URL' },
499
- { name: 'Get Original URL (Dataroom)', value: 'getOriginalUrlDataroom', action: 'Get original file download URL from dataroom' },
500
- { name: 'Get Status', value: 'getStatus', action: 'Get file processing status' },
501
- { name: 'Move', value: 'move', action: 'Move a file to another dataroom' },
502
- { name: 'Reprocess', value: 'reprocess', action: 'Reprocess a file in a dataroom' },
503
- { name: 'Upload', value: 'upload', action: 'Upload a file to a dataroom' },
504
- { name: 'Upload Standalone', value: 'uploadStandalone', action: 'Upload a standalone file' },
477
+ { name: 'Assign to Dataroom', value: 'assign', action: 'Assign file to a dataroom', description: 'Assign a standalone file to a dataroom' },
478
+ { name: 'Bulk Delete', value: 'bulkDelete', action: 'Delete files from a dataroom', description: 'Delete multiple files from a dataroom at once' },
479
+ { name: 'Bulk Move', value: 'bulkMove', action: 'Move files to a dataroom', description: 'Move multiple files to another dataroom at once' },
480
+ { name: 'Bulk Patch', value: 'bulkPatch', action: 'Patch files in a dataroom', description: 'Update or reprocess multiple files in a dataroom' },
481
+ { name: 'Delete', value: 'delete', action: 'Delete file from a dataroom', description: 'Delete a file from a dataroom permanently' },
482
+ { name: 'Delete All', value: 'deleteAllDataroom', action: 'Delete all files from a dataroom', description: 'Delete all files from a dataroom permanently' },
483
+ { name: 'Delete Standalone', value: 'deleteStandalone', action: 'Delete a standalone file', description: 'Delete a standalone file permanently' },
484
+ { name: 'Get', value: 'get', action: 'Get file from a dataroom', description: 'Retrieve a file from a dataroom' },
485
+ { name: 'Get Chunks', value: 'getChunks', action: 'Get chunks of a standalone file', description: 'Retrieve the text chunks of a standalone file' },
486
+ { name: 'Get Chunks (Dataroom)', value: 'getChunksDataroom', action: 'Get chunks of a dataroom file', description: 'Retrieve the text chunks of a file in a dataroom' },
487
+ { name: 'Get Content', value: 'getContent', action: 'Get content of a standalone file', description: 'Retrieve the processed text content of a standalone file' },
488
+ { name: 'Get Many', value: 'getMany', action: 'Get files in a dataroom', description: 'Retrieve a list of files in a dataroom' },
489
+ { name: 'Get Many Standalone', value: 'getManyStandalone', action: 'Get standalone files', description: 'Retrieve a list of standalone files' },
490
+ { name: 'Get Metadata', value: 'getMetadata', action: 'Get metadata of a standalone file', description: 'Retrieve the metadata of a standalone file' },
491
+ { name: 'Get Original URL', value: 'getOriginalUrl', action: 'Get download URL of a standalone file', description: 'Retrieve the original download URL of a standalone file' },
492
+ { name: 'Get Original URL (Dataroom)', value: 'getOriginalUrlDataroom', action: 'Get download URL of a dataroom file', description: 'Retrieve the original download URL of a file in a dataroom' },
493
+ { name: 'Get Processing Status', value: 'getStatus', action: 'Get processing status of a file', description: 'Retrieve the current processing status of a standalone file' },
494
+ { name: 'Move', value: 'move', action: 'Move file to a dataroom', description: 'Move a file to another dataroom' },
495
+ { name: 'Reprocess', value: 'reprocess', action: 'Reprocess a dataroom file', description: 'Reprocess a file in a dataroom using a different pipeline' },
496
+ { name: 'Upload', value: 'upload', action: 'Upload file to a dataroom', description: 'Upload a file to a dataroom' },
497
+ { name: 'Upload Standalone', value: 'uploadStandalone', action: 'Upload a standalone file', description: 'Upload a file without assigning it to a dataroom' },
505
498
  ],
506
499
  default: 'getMany',
507
500
  },
508
- // File → Dataroom ID (for dataroom-scoped operations)
509
501
  {
510
502
  displayName: 'Dataroom Name or ID',
511
503
  name: 'dataroomId',
@@ -518,7 +510,14 @@ class Aiteza {
518
510
  },
519
511
  description: 'The dataroom. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
520
512
  },
521
- // File → File ID (dataroom-scoped)
513
+ {
514
+ displayName: 'Simplify',
515
+ name: 'simplify',
516
+ type: 'boolean',
517
+ default: true,
518
+ displayOptions: { show: { resource: ['file'], operation: ['get', 'getMany', 'getManyStandalone', 'getMetadata'] } },
519
+ description: 'Whether to return a simplified version of the response instead of the raw data',
520
+ },
522
521
  {
523
522
  displayName: 'File Name or ID',
524
523
  name: 'fileId',
@@ -529,7 +528,6 @@ class Aiteza {
529
528
  displayOptions: { show: { resource: ['file'], operation: ['get', 'delete', 'reprocess', 'move', 'getOriginalUrlDataroom', 'getChunksDataroom'] } },
530
529
  description: 'The file. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
531
530
  },
532
- // File → File ID (standalone operations)
533
531
  {
534
532
  displayName: 'File Name or ID',
535
533
  name: 'fileId',
@@ -542,7 +540,6 @@ class Aiteza {
542
540
  },
543
541
  description: 'The standalone file. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
544
542
  },
545
- // File → Bulk: file IDs (dataroom-scoped)
546
543
  {
547
544
  displayName: 'File Names or IDs',
548
545
  name: 'fileIds',
@@ -553,7 +550,6 @@ class Aiteza {
553
550
  displayOptions: { show: { resource: ['file'], operation: ['bulkDelete', 'bulkMove', 'bulkPatch'] } },
554
551
  description: 'Files to operate on. Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
555
552
  },
556
- // File → Bulk Patch options
557
553
  {
558
554
  displayName: 'Reprocess',
559
555
  name: 'reprocess',
@@ -569,22 +565,22 @@ class Aiteza {
569
565
  default: 'DOCLING',
570
566
  displayOptions: { show: { resource: ['file'], operation: ['bulkPatch'], reprocess: [true] } },
571
567
  options: [
572
- { name: 'TIKA', value: 'TIKA' },
573
- { name: 'DOCLING', value: 'DOCLING' },
574
- { name: 'DOCLING Force OCR', value: 'DOCLING_FORCE_OCR' },
575
- { name: 'VLM', value: 'VLM' },
568
+ { name: 'TIKA', value: 'TIKA', description: 'Apache Tika extraction' },
569
+ { name: 'DOCLING', value: 'DOCLING', description: 'Docling document processing' },
570
+ { name: 'DOCLING Force OCR', value: 'DOCLING_FORCE_OCR', description: 'Docling with forced OCR for scanned documents' },
571
+ { name: 'VLM', value: 'VLM', description: 'Vision language model processing' },
576
572
  ],
577
- description: 'Processing pipeline to use (required when Reprocess is enabled)',
573
+ description: 'Processing pipeline to use when reprocessing is enabled',
578
574
  },
579
575
  {
580
576
  displayName: 'VLM Model',
581
577
  name: 'vlmModel',
582
578
  type: 'string',
583
579
  default: '',
580
+ placeholder: 'e.g. llava',
584
581
  displayOptions: { show: { resource: ['file'], operation: ['bulkPatch'], reprocess: [true], processingPipeline: ['VLM'] } },
585
- description: 'VLM model name to use (required when pipeline is VLM)',
582
+ description: 'VLM model name to use (required when the pipeline is set to VLM)',
586
583
  },
587
- // File → Assign: target dataroom
588
584
  {
589
585
  displayName: 'Target Dataroom Name or ID',
590
586
  name: 'targetDataroomId',
@@ -595,7 +591,6 @@ class Aiteza {
595
591
  displayOptions: { show: { resource: ['file'], operation: ['assign', 'move', 'bulkMove'] } },
596
592
  description: 'The dataroom to assign/move the file(s) to. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
597
593
  },
598
- // File → Get Many (pagination)
599
594
  {
600
595
  displayName: 'Additional Fields',
601
596
  name: 'additionalFields',
@@ -616,20 +611,22 @@ class Aiteza {
616
611
  name: 'size',
617
612
  type: 'number',
618
613
  default: 20,
619
- description: 'Number of items per page',
614
+ description: 'Number of results per page',
620
615
  },
621
616
  {
622
617
  displayName: 'Search Term',
623
618
  name: 'search_term',
624
619
  type: 'string',
625
620
  default: '',
626
- description: 'Filter by name',
621
+ placeholder: 'e.g. annual-report',
622
+ description: 'Filter by file name',
627
623
  },
628
624
  {
629
625
  displayName: 'Sort By',
630
626
  name: 'sortBy',
631
627
  type: 'string',
632
628
  default: '',
629
+ placeholder: 'e.g. name',
633
630
  description: 'Field name to sort by',
634
631
  },
635
632
  {
@@ -641,10 +638,10 @@ class Aiteza {
641
638
  { name: 'Descending', value: 'DESC' },
642
639
  ],
643
640
  default: 'ASC',
641
+ description: 'Sort direction',
644
642
  },
645
643
  ],
646
644
  },
647
- // File → Get Chunks pagination
648
645
  {
649
646
  displayName: 'Additional Fields',
650
647
  name: 'additionalFields',
@@ -669,15 +666,15 @@ class Aiteza {
669
666
  },
670
667
  ],
671
668
  },
672
- // File → Upload / Upload Standalone
673
669
  {
674
- displayName: 'Binary Property',
670
+ displayName: 'Input Binary Field',
675
671
  name: 'binaryPropertyName',
676
672
  type: 'string',
677
673
  required: true,
678
674
  default: 'data',
675
+ placeholder: 'e.g. data',
679
676
  displayOptions: { show: { resource: ['file'], operation: ['upload', 'uploadStandalone'] } },
680
- description: 'Name of the binary property containing the file to upload',
677
+ description: 'Name of the binary field in the input data that contains the file to upload',
681
678
  },
682
679
  {
683
680
  displayName: 'Processing Pipeline',
@@ -687,24 +684,22 @@ class Aiteza {
687
684
  default: 'DOCLING',
688
685
  displayOptions: { show: { resource: ['file'], operation: ['upload', 'uploadStandalone', 'reprocess'] } },
689
686
  options: [
690
- { name: 'TIKA', value: 'TIKA' },
691
- { name: 'DOCLING', value: 'DOCLING' },
692
- { name: 'DOCLING Force OCR', value: 'DOCLING_FORCE_OCR' },
693
- { name: 'VLM', value: 'VLM' },
687
+ { name: 'TIKA', value: 'TIKA', description: 'Apache Tika extraction' },
688
+ { name: 'DOCLING', value: 'DOCLING', description: 'Docling document processing' },
689
+ { name: 'DOCLING Force OCR', value: 'DOCLING_FORCE_OCR', description: 'Docling with forced OCR for scanned documents' },
690
+ { name: 'VLM', value: 'VLM', description: 'Vision language model processing' },
694
691
  ],
695
- description: 'The processing pipeline to use for document processing',
692
+ description: 'Processing pipeline to use for document analysis',
696
693
  },
697
694
  {
698
695
  displayName: 'VLM Model',
699
696
  name: 'vlmModel',
700
697
  type: 'string',
701
698
  default: '',
699
+ placeholder: 'e.g. llava',
702
700
  displayOptions: { show: { resource: ['file'], operation: ['upload', 'uploadStandalone', 'reprocess'], processingPipeline: ['VLM'] } },
703
- description: 'VLM model name to use (required when pipeline is VLM)',
701
+ description: 'VLM model name to use (required when the pipeline is set to VLM)',
704
702
  },
705
- // ==================================================================
706
- // IMAGE
707
- // ==================================================================
708
703
  {
709
704
  displayName: 'Operation',
710
705
  name: 'operation',
@@ -712,27 +707,26 @@ class Aiteza {
712
707
  noDataExpression: true,
713
708
  displayOptions: { show: { resource: ['image'] } },
714
709
  options: [
715
- { name: 'Assign to Dataroom', value: 'assign', action: 'Assign a standalone image to a dataroom' },
716
- { name: 'Bulk Delete (Dataroom)', value: 'bulkDelete', action: 'Delete multiple images from a dataroom' },
717
- { name: 'Bulk Move', value: 'bulkMove', action: 'Move multiple images to another dataroom' },
718
- { name: 'Bulk Patch', value: 'bulkPatch', action: 'Bulk patch or reprocess images in a dataroom' },
719
- { name: 'Delete (Dataroom)', value: 'deleteDataroom', action: 'Delete an image from a dataroom' },
720
- { name: 'Delete All (Dataroom)', value: 'deleteAllDataroom', action: 'Delete all images from a dataroom' },
721
- { name: 'Delete Standalone', value: 'deleteStandalone', action: 'Delete a standalone image' },
722
- { name: 'Get (Dataroom)', value: 'getDataroom', action: 'Get an image from a dataroom' },
723
- { name: 'Get Many (Dataroom)', value: 'getManyDataroom', action: 'Get images in a dataroom' },
724
- { name: 'Get Many Standalone', value: 'getManyStandalone', action: 'Get standalone images' },
725
- { name: 'Get Metadata', value: 'getMetadata', action: 'Get metadata of a standalone image' },
726
- { name: 'Get Original URL', value: 'getOriginalUrl', action: 'Get original image download URL' },
727
- { name: 'Get Original URL (Dataroom)', value: 'getOriginalUrlDataroom', action: 'Get original image download URL from dataroom' },
728
- { name: 'Get Status', value: 'getStatus', action: 'Get image processing status' },
729
- { name: 'Move', value: 'move', action: 'Move an image to another dataroom' },
730
- { name: 'Upload (Dataroom)', value: 'uploadDataroom', action: 'Upload an image to a dataroom' },
731
- { name: 'Upload Standalone', value: 'uploadStandalone', action: 'Upload a standalone image' },
710
+ { name: 'Assign to Dataroom', value: 'assign', action: 'Assign image to a dataroom', description: 'Assign a standalone image to a dataroom' },
711
+ { name: 'Bulk Delete (Dataroom)', value: 'bulkDelete', action: 'Delete images from a dataroom', description: 'Delete multiple images from a dataroom at once' },
712
+ { name: 'Bulk Move', value: 'bulkMove', action: 'Move images to a dataroom', description: 'Move multiple images to another dataroom at once' },
713
+ { name: 'Bulk Patch', value: 'bulkPatch', action: 'Patch images in a dataroom', description: 'Update or reprocess multiple images in a dataroom' },
714
+ { name: 'Delete (Dataroom)', value: 'deleteDataroom', action: 'Delete image from a dataroom', description: 'Delete an image from a dataroom permanently' },
715
+ { name: 'Delete All (Dataroom)', value: 'deleteAllDataroom', action: 'Delete all images from a dataroom', description: 'Delete all images from a dataroom permanently' },
716
+ { name: 'Delete Standalone', value: 'deleteStandalone', action: 'Delete a standalone image', description: 'Delete a standalone image permanently' },
717
+ { name: 'Get (Dataroom)', value: 'getDataroom', action: 'Get image from a dataroom', description: 'Retrieve an image from a dataroom' },
718
+ { name: 'Get Many (Dataroom)', value: 'getManyDataroom', action: 'Get images in a dataroom', description: 'Retrieve a list of images in a dataroom' },
719
+ { name: 'Get Many Standalone', value: 'getManyStandalone', action: 'Get standalone images', description: 'Retrieve a list of standalone images' },
720
+ { name: 'Get Metadata', value: 'getMetadata', action: 'Get metadata of a standalone image', description: 'Retrieve the metadata of a standalone image' },
721
+ { name: 'Get Original URL', value: 'getOriginalUrl', action: 'Get download URL of a standalone image', description: 'Retrieve the original download URL of a standalone image' },
722
+ { name: 'Get Original URL (Dataroom)', value: 'getOriginalUrlDataroom', action: 'Get download URL of a dataroom image', description: 'Retrieve the original download URL of an image in a dataroom' },
723
+ { name: 'Get Processing Status', value: 'getStatus', action: 'Get processing status of an image', description: 'Retrieve the current processing status of a standalone image' },
724
+ { name: 'Move', value: 'move', action: 'Move image to a dataroom', description: 'Move an image to another dataroom' },
725
+ { name: 'Upload (Dataroom)', value: 'uploadDataroom', action: 'Upload image to a dataroom', description: 'Upload an image to a dataroom' },
726
+ { name: 'Upload Standalone', value: 'uploadStandalone', action: 'Upload a standalone image', description: 'Upload an image without assigning it to a dataroom' },
732
727
  ],
733
728
  default: 'getManyDataroom',
734
729
  },
735
- // Image → Dataroom ID
736
730
  {
737
731
  displayName: 'Dataroom Name or ID',
738
732
  name: 'dataroomId',
@@ -745,7 +739,14 @@ class Aiteza {
745
739
  },
746
740
  description: 'The dataroom. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
747
741
  },
748
- // Image → Image ID (dataroom)
742
+ {
743
+ displayName: 'Simplify',
744
+ name: 'simplify',
745
+ type: 'boolean',
746
+ default: true,
747
+ displayOptions: { show: { resource: ['image'], operation: ['getDataroom', 'getManyDataroom', 'getManyStandalone', 'getMetadata'] } },
748
+ description: 'Whether to return a simplified version of the response instead of the raw data',
749
+ },
749
750
  {
750
751
  displayName: 'Image Name or ID',
751
752
  name: 'imageId',
@@ -756,7 +757,6 @@ class Aiteza {
756
757
  displayOptions: { show: { resource: ['image'], operation: ['getDataroom', 'deleteDataroom', 'move', 'getOriginalUrlDataroom'] } },
757
758
  description: 'The image. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
758
759
  },
759
- // Image → Image ID (standalone)
760
760
  {
761
761
  displayName: 'Image Name or ID',
762
762
  name: 'imageId',
@@ -769,7 +769,6 @@ class Aiteza {
769
769
  },
770
770
  description: 'The standalone image. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
771
771
  },
772
- // Image → Assign/Move target
773
772
  {
774
773
  displayName: 'Target Dataroom Name or ID',
775
774
  name: 'targetDataroomId',
@@ -780,7 +779,6 @@ class Aiteza {
780
779
  displayOptions: { show: { resource: ['image'], operation: ['assign', 'move', 'bulkMove'] } },
781
780
  description: 'The dataroom to assign/move the image(s) to. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
782
781
  },
783
- // Image → Bulk: image IDs (dataroom-scoped)
784
782
  {
785
783
  displayName: 'Image Names or IDs',
786
784
  name: 'imageIds',
@@ -791,7 +789,6 @@ class Aiteza {
791
789
  displayOptions: { show: { resource: ['image'], operation: ['bulkDelete', 'bulkMove', 'bulkPatch'] } },
792
790
  description: 'Images to operate on. Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
793
791
  },
794
- // Image → Bulk Patch options
795
792
  {
796
793
  displayName: 'Reprocess',
797
794
  name: 'reprocess',
@@ -808,10 +805,9 @@ class Aiteza {
808
805
  default: {},
809
806
  displayOptions: { show: { resource: ['image'], operation: ['bulkPatch'] } },
810
807
  options: [
811
- { displayName: 'Name', name: 'name', type: 'string', default: '', description: 'Override display name for all items' },
808
+ { displayName: 'Name', name: 'name', type: 'string', default: '', placeholder: 'e.g. Company Logo', description: 'Override the display name for all selected images' },
812
809
  ],
813
810
  },
814
- // Image → Get Many pagination
815
811
  {
816
812
  displayName: 'Additional Fields',
817
813
  name: 'additionalFields',
@@ -832,13 +828,14 @@ class Aiteza {
832
828
  name: 'size',
833
829
  type: 'number',
834
830
  default: 20,
835
- description: 'Number of items per page',
831
+ description: 'Number of results per page',
836
832
  },
837
833
  {
838
834
  displayName: 'Search Term',
839
835
  name: 'search_term',
840
836
  type: 'string',
841
837
  default: '',
838
+ placeholder: 'e.g. logo',
842
839
  description: 'Filter by image name',
843
840
  },
844
841
  {
@@ -846,6 +843,8 @@ class Aiteza {
846
843
  name: 'sortBy',
847
844
  type: 'string',
848
845
  default: '',
846
+ placeholder: 'e.g. name',
847
+ description: 'Field name to sort by',
849
848
  },
850
849
  {
851
850
  displayName: 'Sort Order',
@@ -856,22 +855,20 @@ class Aiteza {
856
855
  { name: 'Descending', value: 'DESC' },
857
856
  ],
858
857
  default: 'ASC',
858
+ description: 'Sort direction',
859
859
  },
860
860
  ],
861
861
  },
862
- // Image → Upload binary
863
862
  {
864
- displayName: 'Binary Property',
863
+ displayName: 'Input Binary Field',
865
864
  name: 'binaryPropertyName',
866
865
  type: 'string',
867
866
  required: true,
868
867
  default: 'data',
868
+ placeholder: 'e.g. data',
869
869
  displayOptions: { show: { resource: ['image'], operation: ['uploadDataroom', 'uploadStandalone'] } },
870
- description: 'Name of the binary property containing the image to upload',
870
+ description: 'Name of the binary field in the input data that contains the image to upload',
871
871
  },
872
- // ==================================================================
873
- // WEB SOURCE
874
- // ==================================================================
875
872
  {
876
873
  displayName: 'Operation',
877
874
  name: 'operation',
@@ -879,17 +876,17 @@ class Aiteza {
879
876
  noDataExpression: true,
880
877
  displayOptions: { show: { resource: ['webSource'] } },
881
878
  options: [
882
- { name: 'Add', value: 'add', action: 'Add a web source to a dataroom' },
883
- { name: 'Bulk Delete', value: 'bulkDelete', action: 'Delete multiple web sources from a dataroom' },
884
- { name: 'Bulk Move', value: 'bulkMove', action: 'Move multiple web sources to another dataroom' },
885
- { name: 'Bulk Patch', value: 'bulkPatch', action: 'Bulk patch or rescan web sources in a dataroom' },
886
- { name: 'Delete', value: 'delete', action: 'Delete a web source' },
887
- { name: 'Delete All', value: 'deleteAll', action: 'Delete all web sources from a dataroom' },
888
- { name: 'Get', value: 'get', action: 'Get a web source' },
889
- { name: 'Get Many', value: 'getMany', action: 'Get web sources in a dataroom' },
890
- { name: 'Get URLs', value: 'getUrls', action: 'Get crawled URLs of a web source' },
891
- { name: 'Move', value: 'move', action: 'Move a web source to another dataroom' },
892
- { name: 'Rescan', value: 'rescan', action: 'Rescan a web source' },
879
+ { name: 'Add', value: 'add', action: 'Add web source to a dataroom', description: 'Add a web source (URL) to a dataroom for crawling' },
880
+ { name: 'Bulk Delete', value: 'bulkDelete', action: 'Delete web sources from a dataroom', description: 'Delete multiple web sources from a dataroom at once' },
881
+ { name: 'Bulk Move', value: 'bulkMove', action: 'Move web sources to a dataroom', description: 'Move multiple web sources to another dataroom at once' },
882
+ { name: 'Bulk Patch', value: 'bulkPatch', action: 'Patch web sources in a dataroom', description: 'Update or rescan multiple web sources in a dataroom' },
883
+ { name: 'Delete', value: 'delete', action: 'Delete a web source', description: 'Delete a web source from a dataroom permanently' },
884
+ { name: 'Delete All', value: 'deleteAll', action: 'Delete all web sources from a dataroom', description: 'Delete all web sources from a dataroom permanently' },
885
+ { name: 'Get', value: 'get', action: 'Get a web source', description: 'Retrieve a web source from a dataroom' },
886
+ { name: 'Get Many', value: 'getMany', action: 'Get web sources in a dataroom', description: 'Retrieve a list of web sources in a dataroom' },
887
+ { name: 'Get URLs', value: 'getUrls', action: 'Get crawled URLs of a web source', description: 'Retrieve all crawled URLs belonging to a web source' },
888
+ { name: 'Move', value: 'move', action: 'Move web source to a dataroom', description: 'Move a web source to another dataroom' },
889
+ { name: 'Rescan', value: 'rescan', action: 'Rescan a web source', description: 'Trigger a rescan of a web source to fetch updated content' },
893
890
  ],
894
891
  default: 'getMany',
895
892
  },
@@ -903,7 +900,6 @@ class Aiteza {
903
900
  displayOptions: { show: { resource: ['webSource'] } },
904
901
  description: 'The dataroom. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
905
902
  },
906
- // Web Source → Get / Delete / Rescan / Move
907
903
  {
908
904
  displayName: 'Web Source Name or ID',
909
905
  name: 'webSourceId',
@@ -914,7 +910,6 @@ class Aiteza {
914
910
  displayOptions: { show: { resource: ['webSource'], operation: ['get', 'delete', 'rescan', 'move', 'getUrls'] } },
915
911
  description: 'The web source. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
916
912
  },
917
- // Web Source → Move target
918
913
  {
919
914
  displayName: 'Target Dataroom Name or ID',
920
915
  name: 'targetDataroomId',
@@ -925,7 +920,6 @@ class Aiteza {
925
920
  displayOptions: { show: { resource: ['webSource'], operation: ['move', 'bulkMove'] } },
926
921
  description: 'The target dataroom. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
927
922
  },
928
- // Web Source → Bulk: IDs
929
923
  {
930
924
  displayName: 'Web Source Names or IDs',
931
925
  name: 'webSourceIds',
@@ -936,7 +930,6 @@ class Aiteza {
936
930
  displayOptions: { show: { resource: ['webSource'], operation: ['bulkDelete', 'bulkMove', 'bulkPatch'] } },
937
931
  description: 'Web sources to operate on. Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
938
932
  },
939
- // Web Source → Bulk Patch options
940
933
  {
941
934
  displayName: 'Reprocess',
942
935
  name: 'reprocess',
@@ -953,21 +946,21 @@ class Aiteza {
953
946
  default: {},
954
947
  displayOptions: { show: { resource: ['webSource'], operation: ['bulkPatch'] } },
955
948
  options: [
956
- { displayName: 'Name', name: 'name', type: 'string', default: '', description: 'Override display name for all items' },
957
- { displayName: 'Include Subpages', name: 'includeSubpages', type: 'boolean', default: false },
958
- { displayName: 'Max Subpages', name: 'maxSubpages', type: 'number', default: 10 },
959
- { displayName: 'Max Depth', name: 'maxDepth', type: 'number', default: 1 },
949
+ { displayName: 'Name', name: 'name', type: 'string', default: '', description: 'Override the display name for all selected web sources' },
950
+ { displayName: 'Include Subpages', name: 'includeSubpages', type: 'boolean', default: false, description: 'Whether to crawl subpages of the URL' },
951
+ { displayName: 'Max Subpages', name: 'maxSubpages', type: 'number', default: 10, description: 'Maximum number of subpages to crawl' },
952
+ { displayName: 'Max Depth', name: 'maxDepth', type: 'number', default: 1, description: 'Maximum link depth to follow when crawling' },
960
953
  ],
961
954
  },
962
- // Web Source → Add
963
955
  {
964
956
  displayName: 'URL',
965
957
  name: 'url',
966
958
  type: 'string',
967
959
  required: true,
968
960
  default: '',
961
+ placeholder: 'e.g. https://example.com/docs',
969
962
  displayOptions: { show: { resource: ['webSource'], operation: ['add'] } },
970
- description: 'The URL to crawl',
963
+ description: 'The URL to crawl and index',
971
964
  },
972
965
  {
973
966
  displayName: 'Additional Fields',
@@ -989,7 +982,7 @@ class Aiteza {
989
982
  name: 'includeSubpages',
990
983
  type: 'boolean',
991
984
  default: false,
992
- description: 'Whether to crawl subpages',
985
+ description: 'Whether to crawl subpages of the URL',
993
986
  },
994
987
  {
995
988
  displayName: 'Max Subpages',
@@ -1003,11 +996,10 @@ class Aiteza {
1003
996
  name: 'maxDepth',
1004
997
  type: 'number',
1005
998
  default: 1,
1006
- description: 'Maximum crawl depth',
999
+ description: 'Maximum link depth to follow when crawling',
1007
1000
  },
1008
1001
  ],
1009
1002
  },
1010
- // Web Source → Rescan
1011
1003
  {
1012
1004
  displayName: 'Rescan Options',
1013
1005
  name: 'rescanOptions',
@@ -1021,22 +1013,24 @@ class Aiteza {
1021
1013
  name: 'includeSubpages',
1022
1014
  type: 'boolean',
1023
1015
  default: false,
1016
+ description: 'Whether to crawl subpages of the URL',
1024
1017
  },
1025
1018
  {
1026
1019
  displayName: 'Max Subpages',
1027
1020
  name: 'maxSubpages',
1028
1021
  type: 'number',
1029
1022
  default: 10,
1023
+ description: 'Maximum number of subpages to crawl',
1030
1024
  },
1031
1025
  {
1032
1026
  displayName: 'Max Depth',
1033
1027
  name: 'maxDepth',
1034
1028
  type: 'number',
1035
1029
  default: 1,
1030
+ description: 'Maximum link depth to follow when crawling',
1036
1031
  },
1037
1032
  ],
1038
1033
  },
1039
- // Web Source → Get Many pagination
1040
1034
  {
1041
1035
  displayName: 'Additional Fields',
1042
1036
  name: 'additionalFields',
@@ -1050,22 +1044,25 @@ class Aiteza {
1050
1044
  name: 'page',
1051
1045
  type: 'number',
1052
1046
  default: 0,
1047
+ description: 'Page number (0-based)',
1053
1048
  },
1054
1049
  {
1055
1050
  displayName: 'Size',
1056
1051
  name: 'size',
1057
1052
  type: 'number',
1058
1053
  default: 20,
1054
+ description: 'Number of results per page',
1059
1055
  },
1060
1056
  {
1061
1057
  displayName: 'Search Term',
1062
1058
  name: 'q',
1063
1059
  type: 'string',
1064
1060
  default: '',
1061
+ placeholder: 'e.g. documentation',
1062
+ description: 'Filter web sources by name (case-insensitive)',
1065
1063
  },
1066
1064
  ],
1067
1065
  },
1068
- // Web Source → Get URLs pagination
1069
1066
  {
1070
1067
  displayName: 'Additional Fields',
1071
1068
  name: 'additionalFields',
@@ -1090,9 +1087,6 @@ class Aiteza {
1090
1087
  },
1091
1088
  ],
1092
1089
  },
1093
- // ==================================================================
1094
- // CHAT
1095
- // ==================================================================
1096
1090
  {
1097
1091
  displayName: 'Operation',
1098
1092
  name: 'operation',
@@ -1100,31 +1094,30 @@ class Aiteza {
1100
1094
  noDataExpression: true,
1101
1095
  displayOptions: { show: { resource: ['chat'] } },
1102
1096
  options: [
1103
- { name: 'Create', value: 'create', action: 'Create a chat' },
1104
- { name: 'Delete', value: 'delete', action: 'Delete a chat' },
1105
- { name: 'Delete Messages', value: 'deleteMessages', action: 'Delete all messages in a chat' },
1106
- { name: 'Estimate Cost', value: 'estimate', action: 'Estimate chat cost' },
1107
- { name: 'Generate', value: 'generate', action: 'Generate a response in a chat' },
1108
- { name: 'Get', value: 'get', action: 'Get a chat' },
1109
- { name: 'Get Latest Message', value: 'getLatestMessage', action: 'Get latest message in a chat' },
1110
- { name: 'Get Many', value: 'getMany', action: 'Get all chats (paginated)' },
1111
- { name: 'Get Message', value: 'getMessage', action: 'Get a specific message' },
1112
- { name: 'Get Messages', value: 'getMessages', action: 'Get chat messages' },
1113
- { name: 'Rename', value: 'rename', action: 'Rename a chat' },
1114
- { name: 'Temp Chat', value: 'tempChat', action: 'Ephemeral agentic RAG evaluation' },
1097
+ { name: 'Create', value: 'create', action: 'Create a chat', description: 'Create a new chat' },
1098
+ { name: 'Delete', value: 'delete', action: 'Delete a chat', description: 'Delete a chat permanently' },
1099
+ { name: 'Delete Messages', value: 'deleteMessages', action: 'Delete messages in a chat', description: 'Delete all messages in a chat' },
1100
+ { name: 'Estimate Cost', value: 'estimate', action: 'Estimate cost of a chat request', description: 'Estimate the token cost before sending a prompt' },
1101
+ { name: 'Generate', value: 'generate', action: 'Generate a response in a chat', description: 'Send a prompt and generate an AI response in a chat' },
1102
+ { name: 'Get', value: 'get', action: 'Get a chat', description: 'Retrieve a chat by ID' },
1103
+ { name: 'Get Latest Message', value: 'getLatestMessage', action: 'Get latest message in a chat', description: 'Retrieve the most recent message in a chat' },
1104
+ { name: 'Get Many', value: 'getMany', action: 'Get many chats', description: 'Retrieve a list of chats' },
1105
+ { name: 'Get Message', value: 'getMessage', action: 'Get a message in a chat', description: 'Retrieve a specific message from a chat' },
1106
+ { name: 'Get Messages', value: 'getMessages', action: 'Get messages in a chat', description: 'Retrieve all messages in a chat' },
1107
+ { name: 'Rename', value: 'rename', action: 'Rename a chat', description: 'Update the name of a chat' },
1108
+ { name: 'Temp Chat', value: 'tempChat', action: 'Run a temporary chat', description: 'Run an ephemeral AI query without saving the conversation' },
1115
1109
  ],
1116
1110
  default: 'generate',
1117
1111
  },
1118
- // Chat → Create
1119
1112
  {
1120
1113
  displayName: 'Chat Name',
1121
1114
  name: 'chatName',
1122
1115
  type: 'string',
1123
1116
  default: '',
1117
+ placeholder: 'e.g. Q4 Analysis',
1124
1118
  displayOptions: { show: { resource: ['chat'], operation: ['create'] } },
1125
- description: 'Optional name for the chat',
1119
+ description: 'Name for the new chat (optional)',
1126
1120
  },
1127
- // Chat → Get / Get Messages / Delete / Generate / Stream / Estimate / Rename / Delete Messages / Get Latest Message / Get Message
1128
1121
  {
1129
1122
  displayName: 'Chat Name or ID',
1130
1123
  name: 'chatId',
@@ -1135,29 +1128,36 @@ class Aiteza {
1135
1128
  displayOptions: {
1136
1129
  show: { resource: ['chat'], operation: ['get', 'getMessages', 'delete', 'generate', 'rename', 'deleteMessages', 'getLatestMessage', 'getMessage'] },
1137
1130
  },
1138
- description: 'The chat. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>. Use "new" to auto-create a chat for generate.',
1131
+ description: 'The chat to operate on. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1132
+ },
1133
+ {
1134
+ displayName: 'Simplify',
1135
+ name: 'simplify',
1136
+ type: 'boolean',
1137
+ default: true,
1138
+ displayOptions: { show: { resource: ['chat'], operation: ['get', 'getMany', 'generate', 'tempChat'] } },
1139
+ description: 'Whether to return a simplified version of the response instead of the raw data',
1139
1140
  },
1140
- // Chat → Get Message
1141
1141
  {
1142
1142
  displayName: 'Message ID',
1143
1143
  name: 'messageId',
1144
1144
  type: 'string',
1145
1145
  required: true,
1146
1146
  default: '',
1147
+ placeholder: 'e.g. msg-abc123',
1147
1148
  displayOptions: { show: { resource: ['chat'], operation: ['getMessage'] } },
1148
- description: 'The unique identifier of the message',
1149
+ description: 'The unique ID of the message to retrieve',
1149
1150
  },
1150
- // Chat → Rename
1151
1151
  {
1152
1152
  displayName: 'New Name',
1153
1153
  name: 'newName',
1154
1154
  type: 'string',
1155
1155
  required: true,
1156
1156
  default: '',
1157
+ placeholder: 'e.g. Q4 Analysis Chat',
1157
1158
  displayOptions: { show: { resource: ['chat'], operation: ['rename'] } },
1158
1159
  description: 'The new name for the chat',
1159
1160
  },
1160
- // Chat → Get Many pagination
1161
1161
  {
1162
1162
  displayName: 'Additional Fields',
1163
1163
  name: 'additionalFields',
@@ -1171,23 +1171,25 @@ class Aiteza {
1171
1171
  name: 'page',
1172
1172
  type: 'number',
1173
1173
  default: 0,
1174
+ description: 'Page number (0-based)',
1174
1175
  },
1175
1176
  {
1176
1177
  displayName: 'Size',
1177
1178
  name: 'size',
1178
1179
  type: 'number',
1179
1180
  default: 20,
1181
+ description: 'Number of results per page',
1180
1182
  },
1181
1183
  {
1182
- displayName: 'Query',
1184
+ displayName: 'Search Term',
1183
1185
  name: 'q',
1184
1186
  type: 'string',
1185
1187
  default: '',
1188
+ placeholder: 'e.g. Annual Report',
1186
1189
  description: 'Filter chats by name (case-insensitive)',
1187
1190
  },
1188
1191
  ],
1189
1192
  },
1190
- // Chat → Generate / Stream / Estimate
1191
1193
  {
1192
1194
  displayName: 'Prompt',
1193
1195
  name: 'prompt',
@@ -1195,8 +1197,9 @@ class Aiteza {
1195
1197
  required: true,
1196
1198
  typeOptions: { rows: 4 },
1197
1199
  default: '',
1200
+ placeholder: 'e.g. Summarize the key findings',
1198
1201
  displayOptions: { show: { resource: ['chat'], operation: ['generate', 'estimate'] } },
1199
- description: 'The prompt / question to send to the model',
1202
+ description: 'The prompt or question to send to the AI model',
1200
1203
  },
1201
1204
  {
1202
1205
  displayName: 'Model Name or ID',
@@ -1206,7 +1209,7 @@ class Aiteza {
1206
1209
  required: true,
1207
1210
  default: '',
1208
1211
  displayOptions: { show: { resource: ['chat'], operation: ['generate', 'estimate'] } },
1209
- description: 'AI model to use. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1212
+ description: 'AI model to use for generating the response. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1210
1213
  },
1211
1214
  {
1212
1215
  displayName: 'Additional Fields',
@@ -1222,50 +1225,63 @@ class Aiteza {
1222
1225
  type: 'multiOptions',
1223
1226
  typeOptions: { loadOptionsMethod: 'getDatarooms' },
1224
1227
  default: [],
1225
- description: 'Datarooms for context. Choose from the list (prepopulated with recently used), or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1228
+ description: 'Datarooms to use as context. Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1226
1229
  },
1227
1230
  {
1228
1231
  displayName: 'File IDs',
1229
1232
  name: 'fileIds',
1230
1233
  type: 'string',
1231
1234
  default: '',
1232
- description: 'Comma-separated previously uploaded file IDs',
1235
+ placeholder: 'e.g. file-abc123, file-def456',
1236
+ description: 'Comma-separated IDs of previously uploaded files to include as context',
1233
1237
  },
1234
1238
  {
1235
1239
  displayName: 'Image IDs',
1236
1240
  name: 'imageIds',
1237
1241
  type: 'string',
1238
1242
  default: '',
1239
- description: 'Comma-separated previously uploaded image IDs',
1243
+ placeholder: 'e.g. img-abc123, img-def456',
1244
+ description: 'Comma-separated IDs of previously uploaded images to include as context',
1240
1245
  },
1241
1246
  {
1242
1247
  displayName: 'Include Parent Datarooms',
1243
1248
  name: 'parentDatarooms',
1244
1249
  type: 'boolean',
1245
1250
  default: false,
1251
+ description: 'Whether to include the parent datarooms as additional context',
1246
1252
  },
1247
1253
  {
1248
1254
  displayName: 'Include Sub-Datarooms',
1249
1255
  name: 'subDatarooms',
1250
1256
  type: 'boolean',
1251
1257
  default: false,
1258
+ description: 'Whether to include sub-datarooms as additional context',
1252
1259
  },
1253
1260
  {
1254
1261
  displayName: 'Web Search Enabled',
1255
1262
  name: 'webSearchEnabled',
1256
1263
  type: 'boolean',
1257
1264
  default: false,
1265
+ description: 'Whether to allow the AI to search the web for additional context',
1266
+ },
1267
+ {
1268
+ displayName: 'Web Source IDs',
1269
+ name: 'webSourceIds',
1270
+ type: 'string',
1271
+ default: '',
1272
+ placeholder: 'e.g. ws-abc123, ws-def456',
1273
+ description: 'Comma-separated IDs of previously added web sources to include as context',
1258
1274
  },
1259
1275
  {
1260
1276
  displayName: 'Workflow ID',
1261
1277
  name: 'workflowId',
1262
1278
  type: 'string',
1263
1279
  default: '',
1264
- description: 'Workflow ID to use for this chat request',
1280
+ placeholder: 'e.g. wf-abc123',
1281
+ description: 'Workflow ID to associate with this chat request',
1265
1282
  },
1266
1283
  ],
1267
1284
  },
1268
- // Chat → Temp Chat
1269
1285
  {
1270
1286
  displayName: 'Prompt',
1271
1287
  name: 'prompt',
@@ -1273,8 +1289,9 @@ class Aiteza {
1273
1289
  required: true,
1274
1290
  typeOptions: { rows: 4 },
1275
1291
  default: '',
1292
+ placeholder: 'e.g. What are the key risks mentioned?',
1276
1293
  displayOptions: { show: { resource: ['chat'], operation: ['tempChat'] } },
1277
- description: 'The prompt/question to evaluate',
1294
+ description: 'The prompt or question to evaluate (result is not saved)',
1278
1295
  },
1279
1296
  {
1280
1297
  displayName: 'Model Name or ID',
@@ -1284,7 +1301,7 @@ class Aiteza {
1284
1301
  required: true,
1285
1302
  default: '',
1286
1303
  displayOptions: { show: { resource: ['chat'], operation: ['tempChat'] } },
1287
- description: 'AI model to use (must support agentic RAG). Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1304
+ description: 'AI model to use. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1288
1305
  },
1289
1306
  {
1290
1307
  displayName: 'Additional Fields',
@@ -1300,52 +1317,63 @@ class Aiteza {
1300
1317
  type: 'multiOptions',
1301
1318
  typeOptions: { loadOptionsMethod: 'getDatarooms' },
1302
1319
  default: [],
1303
- description: 'Datarooms to search. Choose from the list (prepopulated with recently used), or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1320
+ description: 'Datarooms to search for context. Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1304
1321
  },
1305
1322
  {
1306
1323
  displayName: 'File IDs',
1307
1324
  name: 'fileIds',
1308
1325
  type: 'string',
1309
1326
  default: '',
1310
- description: 'Comma-separated file IDs to use as context',
1327
+ placeholder: 'e.g. file-abc123, file-def456',
1328
+ description: 'Comma-separated IDs of files to use as context',
1311
1329
  },
1312
1330
  {
1313
1331
  displayName: 'Image IDs',
1314
1332
  name: 'imageIds',
1315
1333
  type: 'string',
1316
1334
  default: '',
1317
- description: 'Comma-separated image IDs to use as context',
1335
+ placeholder: 'e.g. img-abc123, img-def456',
1336
+ description: 'Comma-separated IDs of images to use as context',
1318
1337
  },
1319
1338
  {
1320
- displayName: 'Web Search Enabled',
1321
- name: 'webSearchEnabled',
1339
+ displayName: 'Include Parent Datarooms',
1340
+ name: 'parentDatarooms',
1322
1341
  type: 'boolean',
1323
1342
  default: false,
1343
+ description: 'Whether to include parent datarooms as additional context',
1324
1344
  },
1325
1345
  {
1326
1346
  displayName: 'Include Sub-Datarooms',
1327
1347
  name: 'subDatarooms',
1328
1348
  type: 'boolean',
1329
1349
  default: false,
1350
+ description: 'Whether to include sub-datarooms as additional context',
1330
1351
  },
1331
1352
  {
1332
- displayName: 'Include Parent Datarooms',
1333
- name: 'parentDatarooms',
1353
+ displayName: 'Web Search Enabled',
1354
+ name: 'webSearchEnabled',
1334
1355
  type: 'boolean',
1335
1356
  default: false,
1357
+ description: 'Whether to allow the AI to search the web for additional context',
1358
+ },
1359
+ {
1360
+ displayName: 'Web Source IDs',
1361
+ name: 'webSourceIds',
1362
+ type: 'string',
1363
+ default: '',
1364
+ placeholder: 'e.g. ws-abc123, ws-def456',
1365
+ description: 'Comma-separated IDs of web sources to use as context',
1336
1366
  },
1337
1367
  {
1338
1368
  displayName: 'Workflow ID',
1339
1369
  name: 'workflowId',
1340
1370
  type: 'string',
1341
1371
  default: '',
1342
- description: 'Workflow ID to use for this request',
1372
+ placeholder: 'e.g. wf-abc123',
1373
+ description: 'Workflow ID to associate with this request',
1343
1374
  },
1344
1375
  ],
1345
1376
  },
1346
- // ==================================================================
1347
- // MODEL
1348
- // ==================================================================
1349
1377
  {
1350
1378
  displayName: 'Operation',
1351
1379
  name: 'operation',
@@ -1353,10 +1381,10 @@ class Aiteza {
1353
1381
  noDataExpression: true,
1354
1382
  displayOptions: { show: { resource: ['model'] } },
1355
1383
  options: [
1356
- { name: 'Get', value: 'get', action: 'Get a model by ID' },
1357
- { name: 'Get Many', value: 'getMany', action: 'Get all models' },
1358
- { name: 'Get Processing Models', value: 'getProcessing', action: 'Get available processing pipelines' },
1359
- { name: 'Get VLM Models', value: 'getVlm', action: 'Get available VLM models' },
1384
+ { name: 'Get', value: 'get', action: 'Get a model', description: 'Retrieve an AI model by ID' },
1385
+ { name: 'Get Many', value: 'getMany', action: 'Get many models', description: 'Retrieve a list of available AI models' },
1386
+ { name: 'Get Processing Pipelines', value: 'getProcessing', action: 'Get processing pipelines', description: 'Retrieve a list of available document processing pipelines' },
1387
+ { name: 'Get VLM Models', value: 'getVlm', action: 'Get VLM models', description: 'Retrieve a list of available vision language models' },
1360
1388
  ],
1361
1389
  default: 'getMany',
1362
1390
  },
@@ -1370,9 +1398,6 @@ class Aiteza {
1370
1398
  displayOptions: { show: { resource: ['model'], operation: ['get'] } },
1371
1399
  description: 'The model. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1372
1400
  },
1373
- // ==================================================================
1374
- // SEARCH
1375
- // ==================================================================
1376
1401
  {
1377
1402
  displayName: 'Operation',
1378
1403
  name: 'operation',
@@ -1380,7 +1405,7 @@ class Aiteza {
1380
1405
  noDataExpression: true,
1381
1406
  displayOptions: { show: { resource: ['search'] } },
1382
1407
  options: [
1383
- { name: 'Hybrid Search', value: 'hybridSearch', action: 'Perform hybrid search across datarooms' },
1408
+ { name: 'Hybrid Search', value: 'hybridSearch', action: 'Run a hybrid search', description: 'Perform a hybrid (vector + full-text) search across datarooms' },
1384
1409
  ],
1385
1410
  default: 'hybridSearch',
1386
1411
  },
@@ -1390,6 +1415,7 @@ class Aiteza {
1390
1415
  type: 'string',
1391
1416
  required: true,
1392
1417
  default: '',
1418
+ placeholder: 'e.g. quarterly revenue growth',
1393
1419
  displayOptions: { show: { resource: ['search'], operation: ['hybridSearch'] } },
1394
1420
  description: 'The search query text',
1395
1421
  },
@@ -1400,7 +1426,15 @@ class Aiteza {
1400
1426
  typeOptions: { loadOptionsMethod: 'getDatarooms' },
1401
1427
  default: [],
1402
1428
  displayOptions: { show: { resource: ['search'], operation: ['hybridSearch'] } },
1403
- description: 'Datarooms to search across. Choose from the list (prepopulated with recently used), or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
1429
+ description: 'Datarooms to search across. Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>. Leave empty to search across standalone files and images only.',
1430
+ },
1431
+ {
1432
+ displayName: 'Simplify',
1433
+ name: 'simplify',
1434
+ type: 'boolean',
1435
+ default: true,
1436
+ displayOptions: { show: { resource: ['search'], operation: ['hybridSearch'] } },
1437
+ description: 'Whether to return a simplified version of the response instead of the raw data',
1404
1438
  },
1405
1439
  {
1406
1440
  displayName: 'Additional Fields',
@@ -1411,43 +1445,58 @@ class Aiteza {
1411
1445
  displayOptions: { show: { resource: ['search'], operation: ['hybridSearch'] } },
1412
1446
  options: [
1413
1447
  {
1414
- displayName: 'Top K',
1415
- name: 'topK',
1416
- type: 'number',
1417
- default: 10,
1418
- description: 'Maximum number of results to return',
1419
- },
1420
- {
1421
- displayName: 'Vector Threshold',
1422
- name: 'vectorThreshold',
1423
- type: 'number',
1424
- default: 0.3,
1425
- description: 'Vector similarity threshold (0-1)',
1448
+ displayName: 'Enable Full Text Search',
1449
+ name: 'enableFullTextSearch',
1450
+ type: 'boolean',
1451
+ default: true,
1452
+ description: 'Whether to include full-text search in addition to vector search',
1426
1453
  },
1427
1454
  {
1428
1455
  displayName: 'Enable Reranking',
1429
1456
  name: 'enableReranking',
1430
1457
  type: 'boolean',
1431
1458
  default: false,
1459
+ description: 'Whether to rerank results for improved relevance',
1432
1460
  },
1433
1461
  {
1434
- displayName: 'Enable Full Text Search',
1435
- name: 'enableFullTextSearch',
1436
- type: 'boolean',
1437
- default: true,
1462
+ displayName: 'File IDs',
1463
+ name: 'fileIds',
1464
+ type: 'string',
1465
+ default: '',
1466
+ placeholder: 'e.g. file-abc123, file-def456',
1467
+ description: 'Comma-separated IDs of standalone files to include in the search scope',
1468
+ },
1469
+ {
1470
+ displayName: 'Image IDs',
1471
+ name: 'imageIds',
1472
+ type: 'string',
1473
+ default: '',
1474
+ placeholder: 'e.g. img-abc123, img-def456',
1475
+ description: 'Comma-separated IDs of standalone images to include in the search scope',
1438
1476
  },
1439
1477
  {
1440
1478
  displayName: 'Max Tokens',
1441
1479
  name: 'maxTokens',
1442
1480
  type: 'number',
1443
1481
  default: 0,
1444
- description: 'Maximum number of tokens in result set (0 = no limit)',
1482
+ description: 'Maximum number of tokens in the result set (0 = no limit)',
1483
+ },
1484
+ {
1485
+ displayName: 'Results Limit',
1486
+ name: 'topK',
1487
+ type: 'number',
1488
+ default: 10,
1489
+ description: 'Maximum number of results to return',
1490
+ },
1491
+ {
1492
+ displayName: 'Vector Similarity Threshold',
1493
+ name: 'vectorThreshold',
1494
+ type: 'number',
1495
+ default: 0.3,
1496
+ description: 'Minimum vector similarity score for a result to be included (0–1)',
1445
1497
  },
1446
1498
  ],
1447
1499
  },
1448
- // ==================================================================
1449
- // IDENTITY
1450
- // ==================================================================
1451
1500
  {
1452
1501
  displayName: 'Operation',
1453
1502
  name: 'operation',
@@ -1455,15 +1504,16 @@ class Aiteza {
1455
1504
  noDataExpression: true,
1456
1505
  displayOptions: { show: { resource: ['identity'] } },
1457
1506
  options: [
1458
- { name: 'Search', value: 'search', action: 'Search users and groups' },
1507
+ { name: 'Search', value: 'search', action: 'Search users and groups', description: 'Search for users and groups by name or username' },
1459
1508
  ],
1460
1509
  default: 'search',
1461
1510
  },
1462
1511
  {
1463
- displayName: 'Search String',
1512
+ displayName: 'Search Term',
1464
1513
  name: 'searchString',
1465
1514
  type: 'string',
1466
1515
  default: '',
1516
+ placeholder: 'e.g. john.doe',
1467
1517
  displayOptions: { show: { resource: ['identity'], operation: ['search'] } },
1468
1518
  description: 'Search term to find users and groups',
1469
1519
  },
@@ -1476,18 +1526,18 @@ class Aiteza {
1476
1526
  displayOptions: { show: { resource: ['identity'], operation: ['search'] } },
1477
1527
  options: [
1478
1528
  {
1479
- displayName: 'First',
1480
- name: 'first',
1529
+ displayName: 'Max Results',
1530
+ name: 'max',
1481
1531
  type: 'number',
1482
- default: 0,
1483
- description: 'Offset for pagination',
1532
+ default: 20,
1533
+ description: 'Maximum number of results to return',
1484
1534
  },
1485
1535
  {
1486
- displayName: 'Max',
1487
- name: 'max',
1536
+ displayName: 'Offset',
1537
+ name: 'first',
1488
1538
  type: 'number',
1489
- default: 20,
1490
- description: 'Maximum results to return',
1539
+ default: 0,
1540
+ description: 'Number of results to skip (for pagination)',
1491
1541
  },
1492
1542
  ],
1493
1543
  },
@@ -1509,6 +1559,7 @@ class Aiteza {
1509
1559
  async execute() {
1510
1560
  const items = this.getInputData();
1511
1561
  const returnData = [];
1562
+ const CHAT_REQUEST_TIMEOUT_MS = 20 * 60 * 1000;
1512
1563
  const resource = this.getNodeParameter('resource', 0);
1513
1564
  const operation = this.getNodeParameter('operation', 0);
1514
1565
  const authMode = this.getNodeParameter('authSource', 0, 'credentials');
@@ -1516,18 +1567,17 @@ class Aiteza {
1516
1567
  if (authMode === 'trigger') {
1517
1568
  const triggerToken = (0, GenericFunctions_1.getUpstreamAuthToken)(this);
1518
1569
  if (!triggerToken) {
1519
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Authentication is set to "From AITEZA Trigger" but no auth token was found in the input data. ' +
1520
- 'Make sure this node is connected (directly or indirectly) to an AITEZA Trigger node so its _authToken is forwarded.');
1570
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No auth token was found in the input data. ' +
1571
+ 'Make sure this node is connected to an Aiteza Trigger node so its \'_authToken\' is forwarded.', { description: 'Connect this node downstream of an Aiteza Trigger node, or switch the \'Authentication\' field to \'OAuth2 Credentials\'.' });
1521
1572
  }
1522
1573
  if ((0, GenericFunctions_1.isJwtExpired)(triggerToken)) {
1523
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The auth token forwarded by the AITEZA Trigger has expired. ' +
1524
- 'User tokens are short-lived (typically ~5 minutes) and cannot be refreshed from inside the workflow. ' +
1525
- 'Re-trigger the workflow, shorten its runtime, or have AITEZA mint a longer-lived token for delegated workflow execution.');
1574
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The auth token forwarded by the Aiteza Trigger has expired. ' +
1575
+ 'User tokens are short-lived (typically ~5 minutes).', { description: 'Re-trigger the workflow, shorten its runtime, or have Aiteza mint a longer-lived token for delegated workflow execution.' });
1526
1576
  }
1527
1577
  const paramBaseUrl = this.getNodeParameter('baseUrl', 0, '').replace(/\/+$/, '');
1528
1578
  const baseUrl = paramBaseUrl || (0, GenericFunctions_1.getUpstreamBaseUrl)(this) || '';
1529
1579
  if (!baseUrl) {
1530
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'AITEZA Base URL is required when using trigger authentication. Either set it on this node, or configure it on the upstream AITEZA Trigger node so it gets forwarded as _baseUrl.');
1580
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The \'AITEZA Base URL\' is required when using trigger authentication.', { description: 'Set the \'AITEZA Base URL\' field on this node, or configure it on the upstream Aiteza Trigger node so it gets forwarded as \'_baseUrl\'.' });
1531
1581
  }
1532
1582
  authCtx = { baseUrl, triggerToken };
1533
1583
  }
@@ -1542,7 +1592,6 @@ class Aiteza {
1542
1592
  if (authCtx?.triggerToken) {
1543
1593
  reqOpts.headers = { ...(reqOpts.headers ?? {}), Authorization: `Bearer ${authCtx.triggerToken}` };
1544
1594
  }
1545
- // If body is FormData, merge its headers (boundary etc.)
1546
1595
  if (reqOpts.body instanceof form_data_1.default) {
1547
1596
  reqOpts.headers = { ...(reqOpts.headers ?? {}), ...reqOpts.body.getHeaders() };
1548
1597
  }
@@ -1585,8 +1634,6 @@ class Aiteza {
1585
1634
  return url;
1586
1635
  };
1587
1636
  const splitCsv = (val) => val.split(',').map((s) => s.trim()).filter(Boolean);
1588
- // Accepts a value from a multiOptions field (array), a comma-separated string,
1589
- // or an expression-supplied array/string. Returns a clean list of IDs.
1590
1637
  const toIdArray = (val) => {
1591
1638
  if (Array.isArray(val))
1592
1639
  return val.map((v) => String(v).trim()).filter(Boolean);
@@ -1594,10 +1641,25 @@ class Aiteza {
1594
1641
  return splitCsv(val);
1595
1642
  return [];
1596
1643
  };
1644
+ const simplifyItem = (item, keepFields) => {
1645
+ if (keepFields) {
1646
+ const result = {};
1647
+ for (const f of keepFields)
1648
+ if (item[f] !== undefined)
1649
+ result[f] = item[f];
1650
+ return result;
1651
+ }
1652
+ const result = {};
1653
+ for (const [key, val] of Object.entries(item)) {
1654
+ if (val !== null && typeof val === 'object' && !Array.isArray(val))
1655
+ continue;
1656
+ result[key] = val;
1657
+ }
1658
+ return result;
1659
+ };
1597
1660
  for (let i = 0; i < items.length; i++) {
1598
1661
  try {
1599
1662
  let responseData;
1600
- // ── DATAROOM ──────────────────────────────────────────────
1601
1663
  if (resource === 'dataroom') {
1602
1664
  if (operation === 'get') {
1603
1665
  const id = this.getNodeParameter('dataroomId', i);
@@ -1634,7 +1696,8 @@ class Aiteza {
1634
1696
  const idsRaw = this.getNodeParameter('dataroomIds', i);
1635
1697
  const dataroomIds = toIdArray(idsRaw);
1636
1698
  (0, GenericFunctions_1.validateRequiredField)(this, dataroomIds.length > 0 ? 'ok' : '', 'Dataroom IDs');
1637
- responseData = await apiReq('DELETE', '/api/dataroom/delete', { dataroomIds });
1699
+ await apiReq('DELETE', '/api/dataroom/delete', { dataroomIds });
1700
+ responseData = { deleted: true };
1638
1701
  }
1639
1702
  else if (operation === 'star') {
1640
1703
  const id = this.getNodeParameter('dataroomId', i);
@@ -1669,7 +1732,6 @@ class Aiteza {
1669
1732
  responseData = await apiReq('GET', `/api/dataroom/${id}/models`);
1670
1733
  }
1671
1734
  }
1672
- // ── DATAROOM MEMBER ──────────────────────────────────────
1673
1735
  else if (resource === 'dataroomMember') {
1674
1736
  const dataroomId = this.getNodeParameter('dataroomId', i);
1675
1737
  if (operation === 'getMany') {
@@ -1688,7 +1750,8 @@ class Aiteza {
1688
1750
  else if (operation === 'remove') {
1689
1751
  const usernames = splitCsv(this.getNodeParameter('usernames', i));
1690
1752
  const inherit = this.getNodeParameter('inherit', i, false);
1691
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/members`, { user: usernames, inherit });
1753
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/members`, { user: usernames, inherit });
1754
+ responseData = { deleted: true };
1692
1755
  }
1693
1756
  else if (operation === 'updateRole') {
1694
1757
  const usernames = splitCsv(this.getNodeParameter('usernames', i));
@@ -1697,7 +1760,6 @@ class Aiteza {
1697
1760
  responseData = await apiReq('PATCH', `/api/dataroom/${dataroomId}/members`, { user: usernames, role, inherit });
1698
1761
  }
1699
1762
  }
1700
- // ── DATAROOM GROUP ───────────────────────────────────────
1701
1763
  else if (resource === 'dataroomGroup') {
1702
1764
  const dataroomId = this.getNodeParameter('dataroomId', i);
1703
1765
  if (operation === 'getMany') {
@@ -1716,7 +1778,8 @@ class Aiteza {
1716
1778
  else if (operation === 'remove') {
1717
1779
  const groupPath = this.getNodeParameter('groupPath', i);
1718
1780
  const inherit = this.getNodeParameter('inherit', i, false);
1719
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/groups`, { group: groupPath, inherit });
1781
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/groups`, { group: groupPath, inherit });
1782
+ responseData = { deleted: true };
1720
1783
  }
1721
1784
  else if (operation === 'updateRole') {
1722
1785
  const groupPath = this.getNodeParameter('groupPath', i);
@@ -1725,12 +1788,10 @@ class Aiteza {
1725
1788
  responseData = await apiReq('PATCH', `/api/dataroom/${dataroomId}/groups`, { group: groupPath, role, inherit });
1726
1789
  }
1727
1790
  }
1728
- // ── FILE ─────────────────────────────────────────────────
1729
1791
  else if (resource === 'file') {
1730
1792
  if (operation === 'getMany') {
1731
1793
  const dataroomId = this.getNodeParameter('dataroomId', i);
1732
1794
  const qs = buildPaginationQs(i);
1733
- // API uses 'q' for dataroom-scoped files; map search_term → q
1734
1795
  if (qs.search_term) {
1735
1796
  qs.q = qs.search_term;
1736
1797
  delete qs.search_term;
@@ -1787,15 +1848,18 @@ class Aiteza {
1787
1848
  else if (operation === 'delete') {
1788
1849
  const dataroomId = this.getNodeParameter('dataroomId', i);
1789
1850
  const fileId = this.getNodeParameter('fileId', i);
1790
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/files/${fileId}`);
1851
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/files/${fileId}`);
1852
+ responseData = { deleted: true };
1791
1853
  }
1792
1854
  else if (operation === 'deleteStandalone') {
1793
1855
  const fileId = this.getNodeParameter('fileId', i);
1794
- responseData = await apiReq('DELETE', `/api/files/${fileId}`);
1856
+ await apiReq('DELETE', `/api/files/${fileId}`);
1857
+ responseData = { deleted: true };
1795
1858
  }
1796
1859
  else if (operation === 'deleteAllDataroom') {
1797
1860
  const dataroomId = this.getNodeParameter('dataroomId', i);
1798
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/files`);
1861
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/files`);
1862
+ responseData = { deleted: true };
1799
1863
  }
1800
1864
  else if (operation === 'assign') {
1801
1865
  const fileId = this.getNodeParameter('fileId', i);
@@ -1831,7 +1895,8 @@ class Aiteza {
1831
1895
  const dataroomId = this.getNodeParameter('dataroomId', i);
1832
1896
  const ids = toIdArray(this.getNodeParameter('fileIds', i, []));
1833
1897
  (0, GenericFunctions_1.validateRequiredField)(this, ids.length > 0 ? 'ok' : '', 'File IDs');
1834
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/files/bulk`, { ids });
1898
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/files/bulk`, { ids });
1899
+ responseData = { deleted: true };
1835
1900
  }
1836
1901
  else if (operation === 'bulkMove') {
1837
1902
  const dataroomId = this.getNodeParameter('dataroomId', i);
@@ -1855,12 +1920,10 @@ class Aiteza {
1855
1920
  responseData = await apiReq('PATCH', `/api/dataroom/${dataroomId}/files/bulk`, body);
1856
1921
  }
1857
1922
  }
1858
- // ── IMAGE ────────────────────────────────────────────────
1859
1923
  else if (resource === 'image') {
1860
1924
  if (operation === 'getManyDataroom') {
1861
1925
  const dataroomId = this.getNodeParameter('dataroomId', i);
1862
1926
  const qs = buildPaginationQs(i);
1863
- // API uses 'q' for dataroom-scoped images; map search_term → q
1864
1927
  if (qs.search_term) {
1865
1928
  qs.q = qs.search_term;
1866
1929
  delete qs.search_term;
@@ -1901,15 +1964,18 @@ class Aiteza {
1901
1964
  else if (operation === 'deleteDataroom') {
1902
1965
  const dataroomId = this.getNodeParameter('dataroomId', i);
1903
1966
  const imageId = this.getNodeParameter('imageId', i);
1904
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/images/${imageId}`);
1967
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/images/${imageId}`);
1968
+ responseData = { deleted: true };
1905
1969
  }
1906
1970
  else if (operation === 'deleteStandalone') {
1907
1971
  const imageId = this.getNodeParameter('imageId', i);
1908
- responseData = await apiReq('DELETE', `/api/images/${imageId}`);
1972
+ await apiReq('DELETE', `/api/images/${imageId}`);
1973
+ responseData = { deleted: true };
1909
1974
  }
1910
1975
  else if (operation === 'deleteAllDataroom') {
1911
1976
  const dataroomId = this.getNodeParameter('dataroomId', i);
1912
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/images`);
1977
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/images`);
1978
+ responseData = { deleted: true };
1913
1979
  }
1914
1980
  else if (operation === 'assign') {
1915
1981
  const imageId = this.getNodeParameter('imageId', i);
@@ -1935,7 +2001,8 @@ class Aiteza {
1935
2001
  const dataroomId = this.getNodeParameter('dataroomId', i);
1936
2002
  const ids = toIdArray(this.getNodeParameter('imageIds', i, []));
1937
2003
  (0, GenericFunctions_1.validateRequiredField)(this, ids.length > 0 ? 'ok' : '', 'Image IDs');
1938
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/images/bulk`, { ids });
2004
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/images/bulk`, { ids });
2005
+ responseData = { deleted: true };
1939
2006
  }
1940
2007
  else if (operation === 'bulkMove') {
1941
2008
  const dataroomId = this.getNodeParameter('dataroomId', i);
@@ -1953,7 +2020,6 @@ class Aiteza {
1953
2020
  responseData = await apiReq('PATCH', `/api/dataroom/${dataroomId}/images/bulk`, { ids, reprocess, ...patchOptions });
1954
2021
  }
1955
2022
  }
1956
- // ── WEB SOURCE ───────────────────────────────────────────
1957
2023
  else if (resource === 'webSource') {
1958
2024
  const dataroomId = this.getNodeParameter('dataroomId', i);
1959
2025
  if (operation === 'getMany') {
@@ -1975,10 +2041,12 @@ class Aiteza {
1975
2041
  }
1976
2042
  else if (operation === 'delete') {
1977
2043
  const webSourceId = this.getNodeParameter('webSourceId', i);
1978
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/websites/${webSourceId}`);
2044
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/websites/${webSourceId}`);
2045
+ responseData = { deleted: true };
1979
2046
  }
1980
2047
  else if (operation === 'deleteAll') {
1981
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/websites`);
2048
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/websites`);
2049
+ responseData = { deleted: true };
1982
2050
  }
1983
2051
  else if (operation === 'rescan') {
1984
2052
  const webSourceId = this.getNodeParameter('webSourceId', i);
@@ -1993,7 +2061,8 @@ class Aiteza {
1993
2061
  else if (operation === 'bulkDelete') {
1994
2062
  const ids = toIdArray(this.getNodeParameter('webSourceIds', i, []));
1995
2063
  (0, GenericFunctions_1.validateRequiredField)(this, ids.length > 0 ? 'ok' : '', 'Web Source IDs');
1996
- responseData = await apiReq('DELETE', `/api/dataroom/${dataroomId}/websites/bulk`, { ids });
2064
+ await apiReq('DELETE', `/api/dataroom/${dataroomId}/websites/bulk`, { ids });
2065
+ responseData = { deleted: true };
1997
2066
  }
1998
2067
  else if (operation === 'bulkMove') {
1999
2068
  const ids = toIdArray(this.getNodeParameter('webSourceIds', i, []));
@@ -2009,44 +2078,45 @@ class Aiteza {
2009
2078
  responseData = await apiReq('PATCH', `/api/dataroom/${dataroomId}/websites/bulk`, { ids, reprocess, ...patchOptions });
2010
2079
  }
2011
2080
  }
2012
- // ── CHAT ─────────────────────────────────────────────────
2013
2081
  else if (resource === 'chat') {
2014
2082
  if (operation === 'create') {
2015
2083
  const chatName = this.getNodeParameter('chatName', i, '');
2016
- responseData = await apiReq('POST', '/api/chat', chatName ? { name: chatName } : {});
2084
+ responseData = await apiReq('POST', '/api/chat', chatName ? { name: chatName } : {}, {}, { timeout: CHAT_REQUEST_TIMEOUT_MS });
2017
2085
  }
2018
2086
  else if (operation === 'get') {
2019
2087
  const chatId = this.getNodeParameter('chatId', i);
2020
- responseData = await apiReq('GET', `/api/chat/${chatId}`);
2088
+ responseData = await apiReq('GET', `/api/chat/${chatId}`, {}, {}, { timeout: CHAT_REQUEST_TIMEOUT_MS });
2021
2089
  }
2022
2090
  else if (operation === 'getMany') {
2023
- responseData = await apiReq('GET', '/api/chat', {}, buildPaginationQs(i));
2091
+ responseData = await apiReq('GET', '/api/chat', {}, buildPaginationQs(i), { timeout: CHAT_REQUEST_TIMEOUT_MS });
2024
2092
  }
2025
2093
  else if (operation === 'getMessages') {
2026
2094
  const chatId = this.getNodeParameter('chatId', i);
2027
- responseData = await apiReq('GET', `/api/chat/${chatId}/messages`);
2095
+ responseData = await apiReq('GET', `/api/chat/${chatId}/messages`, {}, {}, { timeout: CHAT_REQUEST_TIMEOUT_MS });
2028
2096
  }
2029
2097
  else if (operation === 'getMessage') {
2030
2098
  const chatId = this.getNodeParameter('chatId', i);
2031
2099
  const messageId = this.getNodeParameter('messageId', i);
2032
- responseData = await apiReq('GET', `/api/chat/${chatId}/messages/${messageId}`);
2100
+ responseData = await apiReq('GET', `/api/chat/${chatId}/messages/${messageId}`, {}, {}, { timeout: CHAT_REQUEST_TIMEOUT_MS });
2033
2101
  }
2034
2102
  else if (operation === 'getLatestMessage') {
2035
2103
  const chatId = this.getNodeParameter('chatId', i);
2036
- responseData = await apiReq('GET', `/api/chat/${chatId}/messages/latest`);
2104
+ responseData = await apiReq('GET', `/api/chat/${chatId}/messages/latest`, {}, {}, { timeout: CHAT_REQUEST_TIMEOUT_MS });
2037
2105
  }
2038
2106
  else if (operation === 'delete') {
2039
2107
  const chatId = this.getNodeParameter('chatId', i);
2040
- responseData = await apiReq('DELETE', `/api/chat/${chatId}`);
2108
+ await apiReq('DELETE', `/api/chat/${chatId}`, {}, {}, { timeout: CHAT_REQUEST_TIMEOUT_MS });
2109
+ responseData = { deleted: true };
2041
2110
  }
2042
2111
  else if (operation === 'deleteMessages') {
2043
2112
  const chatId = this.getNodeParameter('chatId', i);
2044
- responseData = await apiReq('DELETE', `/api/chat/${chatId}/messages`);
2113
+ await apiReq('DELETE', `/api/chat/${chatId}/messages`, {}, {}, { timeout: CHAT_REQUEST_TIMEOUT_MS });
2114
+ responseData = { deleted: true };
2045
2115
  }
2046
2116
  else if (operation === 'rename') {
2047
2117
  const chatId = this.getNodeParameter('chatId', i);
2048
2118
  const newName = this.getNodeParameter('newName', i);
2049
- responseData = await apiReq('PATCH', `/api/chat/${chatId}`, { name: newName });
2119
+ responseData = await apiReq('PATCH', `/api/chat/${chatId}`, { name: newName }, {}, { timeout: CHAT_REQUEST_TIMEOUT_MS });
2050
2120
  }
2051
2121
  else if (operation === 'generate') {
2052
2122
  const chatId = this.getNodeParameter('chatId', i);
@@ -2056,7 +2126,7 @@ class Aiteza {
2056
2126
  const form = new form_data_1.default();
2057
2127
  form.append('prompt', prompt);
2058
2128
  form.append('model', model);
2059
- for (const key of ['connectedDatarooms', 'fileIds', 'imageIds']) {
2129
+ for (const key of ['connectedDatarooms', 'fileIds', 'imageIds', 'webSourceIds']) {
2060
2130
  if (additionalFields[key] !== undefined && additionalFields[key] !== '') {
2061
2131
  for (const val of toIdArray(additionalFields[key])) {
2062
2132
  form.append(key, val);
@@ -2072,6 +2142,7 @@ class Aiteza {
2072
2142
  method: 'POST',
2073
2143
  url: `${baseUrl}/api/chat/${chatId}/generate`,
2074
2144
  body: form,
2145
+ timeout: CHAT_REQUEST_TIMEOUT_MS,
2075
2146
  returnFullResponse: true,
2076
2147
  });
2077
2148
  responseData = typeof response === 'object' && response.body !== undefined ? response.body : response;
@@ -2087,7 +2158,7 @@ class Aiteza {
2087
2158
  const form = new form_data_1.default();
2088
2159
  form.append('prompt', prompt);
2089
2160
  form.append('model', model);
2090
- for (const key of ['connectedDatarooms', 'fileIds', 'imageIds']) {
2161
+ for (const key of ['connectedDatarooms', 'fileIds', 'imageIds', 'webSourceIds']) {
2091
2162
  if (additionalFields[key] !== undefined && additionalFields[key] !== '') {
2092
2163
  for (const val of toIdArray(additionalFields[key])) {
2093
2164
  form.append(key, val);
@@ -2103,6 +2174,7 @@ class Aiteza {
2103
2174
  method: 'POST',
2104
2175
  url: `${baseUrl}/api/chat/estimate`,
2105
2176
  body: form,
2177
+ timeout: CHAT_REQUEST_TIMEOUT_MS,
2106
2178
  });
2107
2179
  }
2108
2180
  else if (operation === 'tempChat') {
@@ -2112,7 +2184,7 @@ class Aiteza {
2112
2184
  const form = new form_data_1.default();
2113
2185
  form.append('prompt', prompt);
2114
2186
  form.append('model', model);
2115
- for (const key of ['connectedDatarooms', 'fileIds', 'imageIds']) {
2187
+ for (const key of ['connectedDatarooms', 'fileIds', 'imageIds', 'webSourceIds']) {
2116
2188
  if (additionalFields[key] !== undefined && additionalFields[key] !== '') {
2117
2189
  for (const val of toIdArray(additionalFields[key])) {
2118
2190
  form.append(key, val);
@@ -2128,13 +2200,13 @@ class Aiteza {
2128
2200
  method: 'POST',
2129
2201
  url: `${baseUrl}/api/chat/temp`,
2130
2202
  body: form,
2203
+ timeout: CHAT_REQUEST_TIMEOUT_MS,
2131
2204
  });
2132
2205
  if (typeof responseData === 'string') {
2133
2206
  responseData = { result: responseData };
2134
2207
  }
2135
2208
  }
2136
2209
  }
2137
- // ── MODEL ────────────────────────────────────────────────
2138
2210
  else if (resource === 'model') {
2139
2211
  if (operation === 'getMany') {
2140
2212
  responseData = await apiReq('GET', '/api/models');
@@ -2150,7 +2222,6 @@ class Aiteza {
2150
2222
  responseData = await apiReq('GET', '/api/models/vlm');
2151
2223
  }
2152
2224
  }
2153
- // ── SEARCH ───────────────────────────────────────────────
2154
2225
  else if (resource === 'search') {
2155
2226
  if (operation === 'hybridSearch') {
2156
2227
  const query = this.getNodeParameter('searchQuery', i);
@@ -2167,10 +2238,16 @@ class Aiteza {
2167
2238
  if (additionalFields.maxTokens && additionalFields.maxTokens > 0) {
2168
2239
  body.maxTokens = additionalFields.maxTokens;
2169
2240
  }
2241
+ for (const key of ['fileIds', 'imageIds']) {
2242
+ if (additionalFields[key] !== undefined && additionalFields[key] !== '') {
2243
+ const ids = toIdArray(additionalFields[key]);
2244
+ if (ids.length > 0)
2245
+ body[key] = ids;
2246
+ }
2247
+ }
2170
2248
  responseData = await apiReq('POST', '/api/dataroom/search', body);
2171
2249
  }
2172
2250
  }
2173
- // ── IDENTITY ─────────────────────────────────────────────
2174
2251
  else if (resource === 'identity') {
2175
2252
  if (operation === 'search') {
2176
2253
  const searchString = this.getNodeParameter('searchString', i, '');
@@ -2178,17 +2255,31 @@ class Aiteza {
2178
2255
  responseData = await apiReq('GET', '/api/identity/search', {}, qs);
2179
2256
  }
2180
2257
  }
2181
- // Normalize output
2182
2258
  if (responseData !== undefined) {
2259
+ const simplifyOperations = {
2260
+ dataroom: ['get', 'search', 'getRecent', 'getStarred', 'getChildren'],
2261
+ file: ['get', 'getMany', 'getManyStandalone', 'getMetadata'],
2262
+ image: ['getDataroom', 'getManyDataroom', 'getManyStandalone', 'getMetadata'],
2263
+ chat: ['get', 'getMany', 'generate', 'tempChat'],
2264
+ search: ['hybridSearch'],
2265
+ };
2266
+ const simplifyOps = simplifyOperations[resource] ?? [];
2267
+ let shouldSimplify = false;
2268
+ if (simplifyOps.includes(operation)) {
2269
+ try {
2270
+ shouldSimplify = this.getNodeParameter('simplify', i, true);
2271
+ }
2272
+ catch { /* parameter may not exist for all operations */ }
2273
+ }
2183
2274
  const outputItems = Array.isArray(responseData)
2184
- ? responseData.map((item) => ({ json: item }))
2185
- : [{ json: typeof responseData === 'object' ? responseData : { result: responseData } }];
2275
+ ? responseData.map((item) => ({ json: shouldSimplify ? simplifyItem(item) : item }))
2276
+ : [{ json: typeof responseData === 'object' ? (shouldSimplify ? simplifyItem(responseData) : responseData) : { result: responseData } }];
2186
2277
  returnData.push(...outputItems);
2187
2278
  }
2188
2279
  }
2189
2280
  catch (error) {
2190
2281
  if (this.continueOnFail()) {
2191
- returnData.push({ json: { error: error.message }, pairedItem: { item: i } });
2282
+ returnData.push({ json: { message: error.message }, pairedItem: { item: i } });
2192
2283
  continue;
2193
2284
  }
2194
2285
  throw error;