n8n-nodes-hudu 1.3.5 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +28 -12
  2. package/dist/nodes/Hudu/Hudu.node.js +2 -18
  3. package/dist/nodes/Hudu/Hudu.node.js.map +1 -1
  4. package/dist/nodes/Hudu/Hudu.node.ts +2 -30
  5. package/dist/nodes/Hudu/descriptions/asset_layout_fields.description.js +38 -32
  6. package/dist/nodes/Hudu/descriptions/asset_layout_fields.description.js.map +1 -1
  7. package/dist/nodes/Hudu/descriptions/asset_layout_fields.description.ts +450 -446
  8. package/dist/nodes/Hudu/descriptions/asset_layouts.description.js +112 -18
  9. package/dist/nodes/Hudu/descriptions/asset_layouts.description.js.map +1 -1
  10. package/dist/nodes/Hudu/descriptions/asset_layouts.description.ts +112 -18
  11. package/dist/nodes/Hudu/descriptions/assets.description.js +100 -123
  12. package/dist/nodes/Hudu/descriptions/assets.description.js.map +1 -1
  13. package/dist/nodes/Hudu/descriptions/assets.description.ts +587 -609
  14. package/dist/nodes/Hudu/descriptions/index.js +0 -3
  15. package/dist/nodes/Hudu/descriptions/index.js.map +1 -1
  16. package/dist/nodes/Hudu/descriptions/index.ts +0 -3
  17. package/dist/nodes/Hudu/descriptions/resources.js +0 -12
  18. package/dist/nodes/Hudu/descriptions/resources.js.map +1 -1
  19. package/dist/nodes/Hudu/descriptions/resources.ts +0 -12
  20. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayoutFields.js +122 -70
  21. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayoutFields.js.map +1 -1
  22. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayoutFields.ts +143 -107
  23. package/dist/nodes/Hudu/optionLoaders/asset_layouts/index.js +0 -1
  24. package/dist/nodes/Hudu/optionLoaders/asset_layouts/index.js.map +1 -1
  25. package/dist/nodes/Hudu/optionLoaders/asset_layouts/index.ts +0 -1
  26. package/dist/nodes/Hudu/optionLoaders/assets/index.js +1 -2
  27. package/dist/nodes/Hudu/optionLoaders/assets/index.js.map +1 -1
  28. package/dist/nodes/Hudu/optionLoaders/assets/index.ts +1 -2
  29. package/dist/nodes/Hudu/resources/asset_layout_fields/asset_layout_fields.handler.js +32 -75
  30. package/dist/nodes/Hudu/resources/asset_layout_fields/asset_layout_fields.handler.js.map +1 -1
  31. package/dist/nodes/Hudu/resources/asset_layout_fields/asset_layout_fields.handler.ts +43 -139
  32. package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.handler.js +9 -11
  33. package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.handler.js.map +1 -1
  34. package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.handler.ts +12 -12
  35. package/dist/nodes/Hudu/resources/assets/assets.handler.js +116 -56
  36. package/dist/nodes/Hudu/resources/assets/assets.handler.js.map +1 -1
  37. package/dist/nodes/Hudu/resources/assets/assets.handler.ts +171 -60
  38. package/dist/nodes/Hudu/resources/assets/assets.types.ts +43 -43
  39. package/dist/nodes/Hudu/resources/index.js +0 -6
  40. package/dist/nodes/Hudu/resources/index.js.map +1 -1
  41. package/dist/nodes/Hudu/resources/index.ts +0 -12
  42. package/dist/nodes/Hudu/resources/procedures/procedures.handler.js +1 -3
  43. package/dist/nodes/Hudu/resources/procedures/procedures.handler.js.map +1 -1
  44. package/dist/nodes/Hudu/resources/procedures/procedures.handler.ts +1 -3
  45. package/dist/nodes/Hudu/utils/assetFieldUtils.js +273 -0
  46. package/dist/nodes/Hudu/utils/assetFieldUtils.js.map +1 -0
  47. package/dist/nodes/Hudu/utils/assetFieldUtils.ts +437 -0
  48. package/dist/nodes/Hudu/utils/constants.js +1 -0
  49. package/dist/nodes/Hudu/utils/constants.js.map +1 -1
  50. package/dist/nodes/Hudu/utils/constants.ts +1 -0
  51. package/dist/nodes/Hudu/utils/debugConfig.js +4 -1
  52. package/dist/nodes/Hudu/utils/debugConfig.js.map +1 -1
  53. package/dist/nodes/Hudu/utils/debugConfig.ts +6 -1
  54. package/dist/nodes/Hudu/utils/errorParser.js +57 -0
  55. package/dist/nodes/Hudu/utils/errorParser.js.map +1 -0
  56. package/dist/nodes/Hudu/utils/errorParser.ts +90 -0
  57. package/dist/nodes/Hudu/utils/fieldErrorUtils.js +17 -0
  58. package/dist/nodes/Hudu/utils/fieldErrorUtils.js.map +1 -0
  59. package/dist/nodes/Hudu/utils/fieldErrorUtils.ts +57 -0
  60. package/dist/nodes/Hudu/utils/fieldTypeUtils.js +145 -0
  61. package/dist/nodes/Hudu/utils/fieldTypeUtils.js.map +1 -0
  62. package/dist/nodes/Hudu/utils/fieldTypeUtils.ts +220 -0
  63. package/dist/nodes/Hudu/utils/index.js +3 -0
  64. package/dist/nodes/Hudu/utils/index.js.map +1 -1
  65. package/dist/nodes/Hudu/utils/index.ts +25 -19
  66. package/dist/nodes/Hudu/utils/requestUtils.js +71 -24
  67. package/dist/nodes/Hudu/utils/requestUtils.js.map +1 -1
  68. package/dist/nodes/Hudu/utils/requestUtils.ts +88 -26
  69. package/package.json +1 -1
  70. package/dist/nodes/Hudu/descriptions/HuduAssetCustomFieldDescription.js +0 -75
  71. package/dist/nodes/Hudu/descriptions/HuduAssetCustomFieldDescription.js.map +0 -1
  72. package/dist/nodes/Hudu/descriptions/HuduAssetCustomFieldDescription.ts +0 -73
  73. package/dist/nodes/Hudu/descriptions/HuduAssetLinkFieldDescription.js +0 -77
  74. package/dist/nodes/Hudu/descriptions/HuduAssetLinkFieldDescription.js.map +0 -1
  75. package/dist/nodes/Hudu/descriptions/HuduAssetLinkFieldDescription.ts +0 -75
  76. package/dist/nodes/Hudu/descriptions/HuduAssetStandardFieldDescription.js +0 -74
  77. package/dist/nodes/Hudu/descriptions/HuduAssetStandardFieldDescription.js.map +0 -1
  78. package/dist/nodes/Hudu/descriptions/HuduAssetStandardFieldDescription.ts +0 -72
  79. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLinkFields.js +0 -51
  80. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLinkFields.js.map +0 -1
  81. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLinkFields.ts +0 -70
  82. package/dist/nodes/Hudu/optionLoaders/assets/getAssetCustomFields.js +0 -71
  83. package/dist/nodes/Hudu/optionLoaders/assets/getAssetCustomFields.js.map +0 -1
  84. package/dist/nodes/Hudu/optionLoaders/assets/getAssetCustomFields.ts +0 -80
  85. package/dist/nodes/Hudu/optionLoaders/assets/getLinkableAssets.js +0 -117
  86. package/dist/nodes/Hudu/optionLoaders/assets/getLinkableAssets.js.map +0 -1
  87. package/dist/nodes/Hudu/optionLoaders/assets/getLinkableAssets.ts +0 -147
  88. package/dist/nodes/Hudu/resources/assetCustomField/assetCustomField.handler.js +0 -222
  89. package/dist/nodes/Hudu/resources/assetCustomField/assetCustomField.handler.js.map +0 -1
  90. package/dist/nodes/Hudu/resources/assetCustomField/assetCustomField.handler.ts +0 -293
  91. package/dist/nodes/Hudu/resources/assetCustomField/assetCustomField.types.js +0 -3
  92. package/dist/nodes/Hudu/resources/assetCustomField/assetCustomField.types.js.map +0 -1
  93. package/dist/nodes/Hudu/resources/assetCustomField/assetCustomField.types.ts +0 -1
  94. package/dist/nodes/Hudu/resources/assetLinkField/assetLinkField.handler.js +0 -262
  95. package/dist/nodes/Hudu/resources/assetLinkField/assetLinkField.handler.js.map +0 -1
  96. package/dist/nodes/Hudu/resources/assetLinkField/assetLinkField.handler.ts +0 -363
  97. package/dist/nodes/Hudu/resources/assetLinkField/assetLinkField.types.js +0 -3
  98. package/dist/nodes/Hudu/resources/assetLinkField/assetLinkField.types.js.map +0 -1
  99. package/dist/nodes/Hudu/resources/assetLinkField/assetLinkField.types.ts +0 -1
  100. package/dist/nodes/Hudu/resources/assetStandardField/assetStandardField.handler.js +0 -93
  101. package/dist/nodes/Hudu/resources/assetStandardField/assetStandardField.handler.js.map +0 -1
  102. package/dist/nodes/Hudu/resources/assetStandardField/assetStandardField.handler.ts +0 -141
  103. package/dist/nodes/Hudu/resources/assetStandardField/assetStandardField.types.js +0 -3
  104. package/dist/nodes/Hudu/resources/assetStandardField/assetStandardField.types.js.map +0 -1
  105. package/dist/nodes/Hudu/resources/assetStandardField/assetStandardField.types.ts +0 -1
@@ -1,609 +1,587 @@
1
- import type { INodeProperties } from 'n8n-workflow';
2
- import { HUDU_API_CONSTANTS } from '../utils/constants';
3
-
4
- export const assetsOperations: INodeProperties[] = [
5
- {
6
- displayName: 'Operation',
7
- name: 'operation',
8
- type: 'options',
9
- noDataExpression: true,
10
- displayOptions: {
11
- show: {
12
- resource: ['assets'],
13
- },
14
- },
15
- options: [
16
- {
17
- name: 'Archive',
18
- value: 'archive',
19
- description: 'Archive an asset',
20
- action: 'Archive an asset',
21
- },
22
- {
23
- name: 'Create',
24
- value: 'create',
25
- description: 'Create an asset. To manage specific standard, custom, or asset link fields after creation, use the dedicated Hudu Asset Standard Field, Hudu Asset Link Field, or Hudu Asset Field Custom nodes respectively.',
26
- action: 'Create an asset',
27
- },
28
- {
29
- name: 'Delete',
30
- value: 'delete',
31
- description: 'Delete an asset',
32
- action: 'Delete an asset',
33
- },
34
- {
35
- name: 'Get',
36
- value: 'get',
37
- description: 'Get an asset by ID',
38
- action: 'Get an asset',
39
- },
40
- {
41
- name: 'Get Many',
42
- value: 'getAll',
43
- description: 'Retrieve a list of assets',
44
- action: 'Retrieve a list of assets',
45
- },
46
- {
47
- name: 'Move Layout',
48
- value: 'moveLayout',
49
- description: 'Move an asset to a different layout',
50
- action: 'Move an asset to a different layout',
51
- },
52
- {
53
- name: 'Unarchive',
54
- value: 'unarchive',
55
- description: 'Unarchive an asset',
56
- action: 'Unarchive an asset',
57
- },
58
- {
59
- name: 'Update',
60
- value: 'update',
61
- description: 'Update core properties of an asset. To manage specific standard, custom, or asset link fields, use the dedicated Hudu Asset Standard Field, Hudu Asset Link Field, or Hudu Asset Field Custom nodes respectively.',
62
- action: 'Update an asset',
63
- },
64
- ],
65
- default: 'getAll',
66
- },
67
- ];
68
-
69
- export const assetsFields: INodeProperties[] = [
70
- // ----------------------------------
71
- // assets:single operations (get/archive/unarchive/delete/update/moveLayout)
72
- // ----------------------------------
73
- {
74
- displayName: 'Asset ID',
75
- name: 'assetId',
76
- type: 'number',
77
- required: true,
78
- displayOptions: {
79
- show: {
80
- resource: ['assets'],
81
- operation: ['get', 'archive', 'unarchive', 'delete', 'update', 'moveLayout'],
82
- },
83
- },
84
- default: '',
85
- description: 'The ID of the asset to operate on',
86
- },
87
- {
88
- displayName: 'Company Name or ID',
89
- name: 'company_id',
90
- type: 'options',
91
- typeOptions: {
92
- loadOptionsMethod: 'getCompanies',
93
- loadOptionsParameters: {
94
- includeBlank: true,
95
- },
96
- },
97
- required: true,
98
- displayOptions: {
99
- show: {
100
- resource: ['assets'],
101
- operation: ['create', 'getAll'],
102
- },
103
- hide: {
104
- assetId: ['', 0],
105
- },
106
- },
107
- default: '',
108
- description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
109
- },
110
-
111
- // ----------------------------------
112
- // assets:create
113
- // ----------------------------------
114
- {
115
- displayName: 'Asset Name',
116
- name: 'name',
117
- type: 'string',
118
- required: true,
119
- default: '',
120
- displayOptions: {
121
- show: {
122
- resource: ['assets'],
123
- operation: ['create'],
124
- },
125
- hide: {
126
- company_id: [''],
127
- }
128
- },
129
- description: 'The name of the asset',
130
- },
131
- {
132
- displayName: 'Asset Layout Name or ID',
133
- name: 'asset_layout_id',
134
- type: 'options',
135
- typeOptions: {
136
- loadOptionsMethod: 'getAssetLayouts',
137
- loadOptionsParameters: {
138
- includeBlank: true,
139
- },
140
- },
141
- required: true,
142
- default: '',
143
- displayOptions: {
144
- show: {
145
- resource: ['assets'],
146
- operation: ['create'],
147
- },
148
- hide: {
149
- company_id: [''],
150
- name: [''],
151
- }
152
- },
153
- description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
154
- },
155
- {
156
- displayName: 'Primary Serial',
157
- name: 'primary_serial',
158
- type: 'string',
159
- default: '',
160
- displayOptions: {
161
- show: {
162
- resource: ['assets'],
163
- operation: ['create'],
164
- },
165
- hide: {
166
- operation: ['create'],
167
- company_id: [''],
168
- name: [''],
169
- asset_layout_id: [''],
170
- }
171
- },
172
- description: 'Primary serial number for the asset',
173
- placeholder: 'e.g. ABC123XYZ',
174
- },
175
- {
176
- displayName: 'Primary Model',
177
- name: 'primary_model',
178
- type: 'string',
179
- default: '',
180
- displayOptions: {
181
- show: {
182
- resource: ['assets'],
183
- operation: ['create'],
184
- },
185
- hide: {
186
- operation: ['create'],
187
- company_id: [''],
188
- name: [''],
189
- asset_layout_id: [''],
190
- }
191
- },
192
- description: 'Primary model for the asset',
193
- placeholder: 'e.g. MacBook Pro 16-inch',
194
- },
195
- {
196
- displayName: 'Primary Manufacturer',
197
- name: 'primary_manufacturer',
198
- type: 'string',
199
- default: '',
200
- displayOptions: {
201
- show: {
202
- resource: ['assets'],
203
- operation: ['create'],
204
- },
205
- hide: {
206
- operation: ['create'],
207
- company_id: [''],
208
- name: [''],
209
- asset_layout_id: [''],
210
- }
211
- },
212
- description: 'Primary manufacturer for the asset',
213
- placeholder: 'e.g. Apple',
214
- },
215
- {
216
- displayName: 'Hostname',
217
- name: 'hostname',
218
- type: 'string',
219
- default: '',
220
- displayOptions: {
221
- show: {
222
- resource: ['assets'],
223
- operation: ['create'],
224
- },
225
- hide: {
226
- operation: ['create'],
227
- company_id: [''],
228
- name: [''],
229
- asset_layout_id: [''],
230
- }
231
- },
232
- description: 'Hostname of the asset',
233
- placeholder: 'e.g. server01.example.com',
234
- },
235
- {
236
- displayName: 'Notes',
237
- name: 'notes',
238
- type: 'string',
239
- typeOptions: {
240
- rows: 4,
241
- },
242
- default: '',
243
- displayOptions: {
244
- show: {
245
- resource: ['assets'],
246
- operation: ['create'],
247
- },
248
- hide: {
249
- operation: ['create'],
250
- company_id: [''],
251
- name: [''],
252
- asset_layout_id: [''],
253
- }
254
- },
255
- description: 'Notes for the asset',
256
- },
257
-
258
- // ----------------------------------
259
- // assets:update
260
- // ----------------------------------
261
- // Note: All field-level updates (standard, link, custom) must be performed via the dedicated Asset Standard Field, Asset Link Field, or Asset Custom Field resources.
262
- {
263
- displayName: 'Asset Name',
264
- name: 'name',
265
- type: 'string',
266
- required: true,
267
- default: '',
268
- displayOptions: {
269
- show: {
270
- resource: ['assets'],
271
- operation: ['update'],
272
- },
273
- hide: {
274
- assetId: ['', 0],
275
- },
276
- },
277
- description: 'The name of the asset',
278
- },
279
-
280
- // ----------------------------------
281
- // assets:getAll
282
- // ----------------------------------
283
- {
284
- displayName: 'Return All',
285
- name: 'returnAll',
286
- type: 'boolean',
287
- displayOptions: {
288
- show: {
289
- resource: ['assets'],
290
- operation: ['getAll'],
291
- },
292
- },
293
- default: false,
294
- description: 'Whether to return all results or only up to a given limit',
295
- },
296
- {
297
- displayName: 'Limit',
298
- name: 'limit',
299
- type: 'number',
300
- displayOptions: {
301
- show: {
302
- resource: ['assets'],
303
- operation: ['getAll'],
304
- returnAll: [false],
305
- },
306
- },
307
- typeOptions: {
308
- minValue: 1,
309
- },
310
- default: HUDU_API_CONSTANTS.PAGE_SIZE,
311
- description: 'Max number of results to return',
312
- },
313
- {
314
- displayName: 'Filters',
315
- name: 'filters',
316
- type: 'collection',
317
- placeholder: 'Add Filter',
318
- default: {},
319
- displayOptions: {
320
- show: {
321
- resource: ['assets'],
322
- operation: ['getAll'],
323
- },
324
- },
325
- options: [
326
- {
327
- displayName: 'Archived',
328
- name: 'archived',
329
- type: 'boolean',
330
- default: false,
331
- description: 'Whether to display only archived assets',
332
- },
333
- {
334
- displayName: 'Asset Layout Name or ID',
335
- name: 'filter_layout_id',
336
- type: 'options',
337
- typeOptions: {
338
- loadOptionsMethod: 'getAssetLayouts',
339
- loadOptionsParameters: {
340
- includeBlank: true,
341
- },
342
- },
343
- default: '',
344
- description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
345
- },
346
- {
347
- displayName: 'Company Name or ID',
348
- name: 'company_id',
349
- type: 'options',
350
- typeOptions: {
351
- loadOptionsMethod: 'getCompanies',
352
- loadOptionsParameters: {
353
- includeBlank: true,
354
- },
355
- },
356
- default: '',
357
- description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
358
- },
359
- {
360
- displayName: 'Name',
361
- name: 'name',
362
- type: 'string',
363
- default: '',
364
- description: 'Filter assets by name',
365
- },
366
- {
367
- displayName: 'Primary Serial',
368
- name: 'primary_serial',
369
- type: 'string',
370
- default: '',
371
- description: 'Filter assets by their primary serial number',
372
- },
373
- {
374
- displayName: 'Search',
375
- name: 'search',
376
- type: 'string',
377
- default: '',
378
- description: 'Filter assets using a search query',
379
- },
380
- {
381
- displayName: 'Slug',
382
- name: 'slug',
383
- type: 'string',
384
- default: '',
385
- description: 'Filter assets by their URL slug',
386
- },
387
- {
388
- displayName: 'Updated At',
389
- name: 'updated_at',
390
- type: 'fixedCollection',
391
- placeholder: 'Add Date Range',
392
- default: {},
393
- typeOptions: {
394
- multipleValues: false,
395
- },
396
- options: [
397
- {
398
- name: 'range',
399
- displayName: 'Date Range',
400
- values: [
401
- {
402
- displayName: 'Date',
403
- name: 'exact',
404
- type: 'dateTime',
405
- displayOptions: {
406
- show: {
407
- mode: ['exact'],
408
- },
409
- },
410
- default: '',
411
- description: 'The specific date to filter by',
412
- },
413
- {
414
- displayName: 'End Date',
415
- name: 'end',
416
- type: 'dateTime',
417
- displayOptions: {
418
- show: {
419
- mode: ['range'],
420
- },
421
- },
422
- default: '',
423
- description: 'End date of the range',
424
- },
425
- {
426
- displayName: 'Filter Type',
427
- name: 'mode',
428
- type: 'options',
429
- options: [
430
- {
431
- name: 'Exact Date',
432
- value: 'exact',
433
- description: 'Match an exact date',
434
- },
435
- {
436
- name: 'Date Range',
437
- value: 'range',
438
- description: 'Match a date range',
439
- },
440
- {
441
- name: 'Preset Range',
442
- value: 'preset',
443
- description: 'Match a preset date range',
444
- },
445
- ],
446
- default: 'preset',
447
- description: 'The mode to use for date filtering',
448
- },
449
- {
450
- displayName: 'Range',
451
- name: 'preset',
452
- type: 'options',
453
- displayOptions: {
454
- show: {
455
- mode: ['preset'],
456
- },
457
- },
458
- options: [
459
- {
460
- name: 'Last 14 Days',
461
- value: 'last14d',
462
- description: 'Updates in the last 14 days',
463
- },
464
- {
465
- name: 'Last 24 Hours',
466
- value: 'last24h',
467
- description: 'Updates in the last 24 hours',
468
- },
469
- {
470
- name: 'Last 30 Days',
471
- value: 'last30d',
472
- description: 'Updates in the last 30 days',
473
- },
474
- {
475
- name: 'Last 48 Hours',
476
- value: 'last48h',
477
- description: 'Updates in the last 48 hours',
478
- },
479
- {
480
- name: 'Last 60 Days',
481
- value: 'last60d',
482
- description: 'Updates in the last 60 days',
483
- },
484
- {
485
- name: 'Last 7 Days',
486
- value: 'last7d',
487
- description: 'Updates in the last 7 days',
488
- },
489
- {
490
- name: 'Last 90 Days',
491
- value: 'last90d',
492
- description: 'Updates in the last 90 days',
493
- },
494
- {
495
- name: 'Last Month',
496
- value: 'lastMonth',
497
- description: 'Updates during last month',
498
- },
499
- {
500
- name: 'Last Week',
501
- value: 'lastWeek',
502
- description: 'Updates during last week',
503
- },
504
- {
505
- name: 'Last Year',
506
- value: 'lastYear',
507
- description: 'Updates during last year',
508
- },
509
- {
510
- name: 'This Month',
511
- value: 'thisMonth',
512
- description: 'Updates since the start of this month',
513
- },
514
- {
515
- name: 'This Week',
516
- value: 'thisWeek',
517
- description: 'Updates since the start of this week',
518
- },
519
- {
520
- name: 'This Year',
521
- value: 'thisYear',
522
- description: 'Updates since the start of this year',
523
- },
524
- {
525
- name: 'Today',
526
- value: 'today',
527
- description: 'Updates from today',
528
- },
529
- {
530
- name: 'Yesterday',
531
- value: 'yesterday',
532
- description: 'Updates from yesterday',
533
- },
534
- ],
535
- default: 'last7d',
536
- description: 'Choose from common date ranges',
537
- },
538
- {
539
- displayName: 'Start Date',
540
- name: 'start',
541
- type: 'dateTime',
542
- displayOptions: {
543
- show: {
544
- mode: ['range'],
545
- },
546
- },
547
- default: '',
548
- description: 'Start date of the range',
549
- },
550
- ],
551
- },
552
- ],
553
- description: 'Filter assets updated within a range or at an exact time',
554
- },
555
- ],
556
- },
557
-
558
- // ----------------------------------
559
- // assets:moveLayout
560
- // ----------------------------------
561
- {
562
- displayName: 'Company Name or ID',
563
- name: 'company_id',
564
- type: 'options',
565
- typeOptions: {
566
- loadOptionsMethod: 'getCompanies',
567
- loadOptionsParameters: {
568
- includeBlank: true,
569
- },
570
- },
571
- required: true,
572
- displayOptions: {
573
- show: {
574
- resource: ['assets'],
575
- operation: ['moveLayout'],
576
- },
577
- hide: {
578
- assetId: ['', 0],
579
- },
580
- },
581
- default: '',
582
- description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
583
- },
584
- {
585
- displayName: 'Target Asset Layout Name or ID',
586
- name: 'target_asset_layout_id',
587
- type: 'options',
588
- typeOptions: {
589
- loadOptionsMethod: 'getAssetLayouts',
590
- loadOptionsParameters: {
591
- includeBlank: true,
592
- },
593
- },
594
- required: true,
595
- displayOptions: {
596
- show: {
597
- resource: ['assets'],
598
- operation: ['moveLayout'],
599
- },
600
- hide: {
601
- assetId: ['', 0],
602
- company_id: [''],
603
- },
604
- },
605
- default: '',
606
- description: 'The layout to move the asset to. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
607
- },
608
- ];
609
-
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ import { HUDU_API_CONSTANTS } from '../utils/constants';
3
+
4
+ export const assetsOperations: INodeProperties[] = [
5
+ {
6
+ displayName: 'Operation',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: {
11
+ show: {
12
+ resource: ['assets'],
13
+ },
14
+ },
15
+ options: [
16
+ {
17
+ name: 'Archive',
18
+ value: 'archive',
19
+ description: 'Archive an asset',
20
+ action: 'Archive an asset',
21
+ },
22
+ {
23
+ name: 'Create',
24
+ value: 'create',
25
+ description: 'Create a new asset',
26
+ action: 'Create an asset',
27
+ },
28
+ {
29
+ name: 'Delete',
30
+ value: 'delete',
31
+ description: 'Delete an asset',
32
+ action: 'Delete an asset',
33
+ },
34
+ {
35
+ name: 'Get',
36
+ value: 'get',
37
+ description: 'Retrieve an asset',
38
+ action: 'Get an asset',
39
+ },
40
+ {
41
+ name: 'Get Many',
42
+ value: 'getAll',
43
+ description: 'Retrieve many assets',
44
+ action: 'Retrieve a list of assets',
45
+ },
46
+ {
47
+ name: 'Move Layout',
48
+ value: 'moveLayout',
49
+ description: 'Move asset to different layout',
50
+ action: 'Move an asset to a different layout',
51
+ },
52
+ {
53
+ name: 'Unarchive',
54
+ value: 'unarchive',
55
+ description: 'Unarchive an asset',
56
+ action: 'Unarchive an asset',
57
+ },
58
+ {
59
+ name: 'Update',
60
+ value: 'update',
61
+ description: 'Update an asset',
62
+ action: 'Update an asset',
63
+ },
64
+ ],
65
+ default: 'getAll',
66
+ },
67
+ ];
68
+
69
+ // Shared properties for the Asset Fields resource mapper
70
+ const assetResourceMapper = {
71
+ displayName: 'Asset Fields',
72
+ name: 'mappedFields',
73
+ type: 'resourceMapper' as const,
74
+ default: {
75
+ mappingMode: 'defineBelow',
76
+ value: null,
77
+ },
78
+ typeOptions: {
79
+ resourceMapper: {
80
+ resourceMapperMethod: 'mapAssetLayoutFieldsForResource',
81
+ mode: 'add' as const,
82
+ fieldWords: {
83
+ singular: 'field',
84
+ plural: 'fields',
85
+ },
86
+ addAllFields: false,
87
+ multiKeyMatch: false,
88
+ supportAutoMap: false,
89
+ },
90
+ },
91
+ };
92
+
93
+ export const assetsFields: INodeProperties[] = [
94
+ // ----------------------------------
95
+ // assets:single operations (get/archive/unarchive/delete/update/moveLayout)
96
+ // ----------------------------------
97
+ {
98
+ displayName: 'Asset ID',
99
+ name: 'assetId',
100
+ type: 'number',
101
+ required: true,
102
+ displayOptions: {
103
+ show: {
104
+ resource: ['assets'],
105
+ operation: ['get', 'archive', 'unarchive', 'delete', 'update', 'moveLayout'],
106
+ },
107
+ },
108
+ default: 0,
109
+ description: 'The ID of the asset to operate on',
110
+ },
111
+ {
112
+ displayName: 'Company Name or ID',
113
+ name: 'company_id',
114
+ type: 'options',
115
+ typeOptions: {
116
+ loadOptionsMethod: 'getCompanies',
117
+ loadOptionsParameters: {
118
+ includeBlank: true,
119
+ },
120
+ },
121
+ required: true,
122
+ displayOptions: {
123
+ show: {
124
+ resource: ['assets'],
125
+ operation: ['create'],
126
+ },
127
+ },
128
+ default: '',
129
+ description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
130
+ },
131
+ {
132
+ displayName: 'Company Name or ID',
133
+ name: 'company_id',
134
+ type: 'options',
135
+ typeOptions: {
136
+ loadOptionsMethod: 'getCompanies',
137
+ loadOptionsParameters: {
138
+ includeBlank: true,
139
+ },
140
+ },
141
+ displayOptions: {
142
+ show: {
143
+ resource: ['assets'],
144
+ operation: ['getAll'],
145
+ },
146
+ },
147
+ default: '',
148
+ description: 'Optionally filter assets by a parent company. If not provided, assets will be fetched from all companies, and more filtering options will be available. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
149
+ },
150
+
151
+ // ----------------------------------
152
+ // assets:create
153
+ // ----------------------------------
154
+ {
155
+ displayName: 'Asset Layout Name or ID',
156
+ name: 'asset_layout_id',
157
+ type: 'options',
158
+ typeOptions: {
159
+ loadOptionsMethod: 'getAssetLayouts',
160
+ loadOptionsParameters: {
161
+ includeBlank: true,
162
+ },
163
+ },
164
+ required: true,
165
+ default: '',
166
+ displayOptions: {
167
+ show: {
168
+ resource: ['assets'],
169
+ operation: ['create'],
170
+ },
171
+ hide: {
172
+ company_id: [''],
173
+ }
174
+ },
175
+ description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
176
+ },
177
+ {
178
+ ...assetResourceMapper,
179
+ typeOptions: {
180
+ ...assetResourceMapper.typeOptions,
181
+ loadOptionsDependsOn: ['asset_layout_id'],
182
+ },
183
+ displayOptions: {
184
+ show: {
185
+ resource: ['assets'],
186
+ operation: ['create'],
187
+ },
188
+ hide: {
189
+ asset_layout_id: [''],
190
+ },
191
+ },
192
+ description: 'Map all asset fields, including name, standard properties, custom fields, and asset link fields for the new asset. This allows you to set any combination of layout-specific fields during creation.',
193
+ },
194
+
195
+ // ----------------------------------
196
+ // assets:update
197
+ // ----------------------------------
198
+ {
199
+ ...assetResourceMapper,
200
+ required: true,
201
+ typeOptions: {
202
+ ...assetResourceMapper.typeOptions,
203
+ loadOptionsDependsOn: ['assetId'],
204
+ },
205
+ displayOptions: {
206
+ show: {
207
+ resource: ['assets'],
208
+ operation: ['update'],
209
+ },
210
+ },
211
+ description: 'Map one or more asset fields to update, including name and other standard properties. You may update a single field or multiple fields in one operation.',
212
+ },
213
+
214
+ // ----------------------------------
215
+ // assets:getAll
216
+ // ----------------------------------
217
+ {
218
+ displayName: 'Return All',
219
+ name: 'returnAll',
220
+ type: 'boolean',
221
+ displayOptions: {
222
+ show: {
223
+ resource: ['assets'],
224
+ operation: ['getAll'],
225
+ },
226
+ },
227
+ default: false,
228
+ description: 'Whether to return all results or only up to a given limit',
229
+ },
230
+ {
231
+ displayName: 'Limit',
232
+ name: 'limit',
233
+ type: 'number',
234
+ displayOptions: {
235
+ show: {
236
+ resource: ['assets'],
237
+ operation: ['getAll'],
238
+ returnAll: [false],
239
+ },
240
+ },
241
+ typeOptions: {
242
+ minValue: 1,
243
+ },
244
+ default: HUDU_API_CONSTANTS.PAGE_SIZE,
245
+ description: 'Max number of results to return',
246
+ },
247
+ {
248
+ displayName: 'Filters',
249
+ name: 'filters',
250
+ type: 'collection',
251
+ placeholder: 'Add Filter',
252
+ default: {},
253
+ displayOptions: {
254
+ show: {
255
+ resource: ['assets'],
256
+ operation: ['getAll'],
257
+ },
258
+ },
259
+ options: [
260
+ {
261
+ displayName: 'Archived',
262
+ name: 'archived',
263
+ type: 'boolean',
264
+ default: false,
265
+ description: 'Whether to display only archived assets',
266
+ },
267
+ {
268
+ displayName: 'Asset Layout Name or ID',
269
+ name: 'asset_layout_id',
270
+ type: 'options',
271
+ typeOptions: {
272
+ loadOptionsMethod: 'getAssetLayouts',
273
+ loadOptionsParameters: {
274
+ includeBlank: true,
275
+ },
276
+ },
277
+ default: '',
278
+ description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
279
+ displayOptions: {
280
+ show: {
281
+ '/company_id': [''],
282
+ },
283
+ },
284
+ },
285
+ {
286
+ displayName: 'Company Name or ID',
287
+ name: 'company_id',
288
+ type: 'options',
289
+ typeOptions: {
290
+ loadOptionsMethod: 'getCompanies',
291
+ },
292
+ default: '',
293
+ description: 'Filter assets by the parent company\'s ID. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
294
+ displayOptions: {
295
+ show: {
296
+ '/company_id': [''],
297
+ },
298
+ },
299
+ },
300
+ {
301
+ displayName: 'ID',
302
+ name: 'id',
303
+ type: 'number',
304
+ default: 0,
305
+ description: 'Filter assets by their ID',
306
+ displayOptions: {
307
+ show: {
308
+ '/company_id': [''],
309
+ },
310
+ },
311
+ },
312
+ {
313
+ displayName: 'Name',
314
+ name: 'name',
315
+ type: 'string',
316
+ default: '',
317
+ description: 'Filter assets by name',
318
+ displayOptions: {
319
+ show: {
320
+ '/company_id': [''],
321
+ },
322
+ },
323
+ },
324
+ {
325
+ displayName: 'Primary Serial',
326
+ name: 'primary_serial',
327
+ type: 'string',
328
+ default: '',
329
+ description: 'Filter assets by their primary serial number',
330
+ displayOptions: {
331
+ show: {
332
+ '/company_id': [''],
333
+ },
334
+ },
335
+ },
336
+ {
337
+ displayName: 'Search',
338
+ name: 'search',
339
+ type: 'string',
340
+ default: '',
341
+ description: 'Filter assets using a search query',
342
+ displayOptions: {
343
+ show: {
344
+ '/company_id': [''],
345
+ },
346
+ },
347
+ },
348
+ {
349
+ displayName: 'Slug',
350
+ name: 'slug',
351
+ type: 'string',
352
+ default: '',
353
+ description: 'Filter assets by their URL slug',
354
+ displayOptions: {
355
+ show: {
356
+ '/company_id': [''],
357
+ },
358
+ },
359
+ },
360
+ {
361
+ displayName: 'Updated At',
362
+ name: 'updated_at',
363
+ type: 'fixedCollection',
364
+ placeholder: 'Add Date Range',
365
+ default: {},
366
+ typeOptions: {
367
+ multipleValues: false,
368
+ },
369
+ displayOptions: {
370
+ show: {
371
+ '/company_id': [''],
372
+ },
373
+ },
374
+ options: [
375
+ {
376
+ name: 'range',
377
+ displayName: 'Date Range',
378
+ values: [
379
+ {
380
+ displayName: 'Date',
381
+ name: 'exact',
382
+ type: 'dateTime',
383
+ displayOptions: {
384
+ show: {
385
+ mode: ['exact'],
386
+ },
387
+ },
388
+ default: '',
389
+ description: 'The specific date to filter by',
390
+ },
391
+ {
392
+ displayName: 'End Date',
393
+ name: 'end',
394
+ type: 'dateTime',
395
+ displayOptions: {
396
+ show: {
397
+ mode: ['range'],
398
+ },
399
+ },
400
+ default: '',
401
+ description: 'End date of the range',
402
+ },
403
+ {
404
+ displayName: 'Filter Type',
405
+ name: 'mode',
406
+ type: 'options',
407
+ options: [
408
+ {
409
+ name: 'Exact Date',
410
+ value: 'exact',
411
+ description: 'Match an exact date',
412
+ },
413
+ {
414
+ name: 'Date Range',
415
+ value: 'range',
416
+ description: 'Match a date range',
417
+ },
418
+ {
419
+ name: 'Preset Range',
420
+ value: 'preset',
421
+ description: 'Match a preset date range',
422
+ },
423
+ ],
424
+ default: 'preset',
425
+ description: 'The mode to use for date filtering',
426
+ },
427
+ {
428
+ displayName: 'Range',
429
+ name: 'preset',
430
+ type: 'options',
431
+ displayOptions: {
432
+ show: {
433
+ mode: ['preset'],
434
+ },
435
+ },
436
+ options: [
437
+ {
438
+ name: 'Last 14 Days',
439
+ value: 'last14d',
440
+ description: 'Updates in the last 14 days',
441
+ },
442
+ {
443
+ name: 'Last 24 Hours',
444
+ value: 'last24h',
445
+ description: 'Updates in the last 24 hours',
446
+ },
447
+ {
448
+ name: 'Last 30 Days',
449
+ value: 'last30d',
450
+ description: 'Updates in the last 30 days',
451
+ },
452
+ {
453
+ name: 'Last 48 Hours',
454
+ value: 'last48h',
455
+ description: 'Updates in the last 48 hours',
456
+ },
457
+ {
458
+ name: 'Last 60 Days',
459
+ value: 'last60d',
460
+ description: 'Updates in the last 60 days',
461
+ },
462
+ {
463
+ name: 'Last 7 Days',
464
+ value: 'last7d',
465
+ description: 'Updates in the last 7 days',
466
+ },
467
+ {
468
+ name: 'Last 90 Days',
469
+ value: 'last90d',
470
+ description: 'Updates in the last 90 days',
471
+ },
472
+ {
473
+ name: 'Last Month',
474
+ value: 'lastMonth',
475
+ description: 'Updates during last month',
476
+ },
477
+ {
478
+ name: 'Last Week',
479
+ value: 'lastWeek',
480
+ description: 'Updates during last week',
481
+ },
482
+ {
483
+ name: 'Last Year',
484
+ value: 'lastYear',
485
+ description: 'Updates during last year',
486
+ },
487
+ {
488
+ name: 'This Month',
489
+ value: 'thisMonth',
490
+ description: 'Updates since the start of this month',
491
+ },
492
+ {
493
+ name: 'This Week',
494
+ value: 'thisWeek',
495
+ description: 'Updates since the start of this week',
496
+ },
497
+ {
498
+ name: 'This Year',
499
+ value: 'thisYear',
500
+ description: 'Updates since the start of this year',
501
+ },
502
+ {
503
+ name: 'Today',
504
+ value: 'today',
505
+ description: 'Updates from today',
506
+ },
507
+ {
508
+ name: 'Yesterday',
509
+ value: 'yesterday',
510
+ description: 'Updates from yesterday',
511
+ },
512
+ ],
513
+ default: 'last7d',
514
+ description: 'Choose from common date ranges',
515
+ },
516
+ {
517
+ displayName: 'Start Date',
518
+ name: 'start',
519
+ type: 'dateTime',
520
+ displayOptions: {
521
+ show: {
522
+ mode: ['range'],
523
+ },
524
+ },
525
+ default: '',
526
+ description: 'Start date of the range',
527
+ },
528
+ ],
529
+ },
530
+ ],
531
+ description: 'Filter assets updated within a range or at an exact time',
532
+ },
533
+ ],
534
+ },
535
+
536
+ // ----------------------------------
537
+ // assets:moveLayout
538
+ // ----------------------------------
539
+ {
540
+ displayName: 'Company Name or ID',
541
+ name: 'company_id',
542
+ type: 'options',
543
+ typeOptions: {
544
+ loadOptionsMethod: 'getCompanies',
545
+ loadOptionsParameters: {
546
+ includeBlank: true,
547
+ },
548
+ },
549
+ required: true,
550
+ displayOptions: {
551
+ show: {
552
+ resource: ['assets'],
553
+ operation: ['moveLayout'],
554
+ },
555
+ hide: {
556
+ assetId: ['', 0],
557
+ },
558
+ },
559
+ default: '',
560
+ description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
561
+ },
562
+ {
563
+ displayName: 'Target Asset Layout Name or ID',
564
+ name: 'target_asset_layout_id',
565
+ type: 'options',
566
+ typeOptions: {
567
+ loadOptionsMethod: 'getAssetLayouts',
568
+ loadOptionsParameters: {
569
+ includeBlank: true,
570
+ },
571
+ },
572
+ required: true,
573
+ displayOptions: {
574
+ show: {
575
+ resource: ['assets'],
576
+ operation: ['moveLayout'],
577
+ },
578
+ hide: {
579
+ assetId: ['', 0],
580
+ company_id: [''],
581
+ },
582
+ },
583
+ default: '',
584
+ description: 'The layout to move the asset to. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
585
+ },
586
+ ];
587
+