n8n-nodes-hudu 1.4.3 → 1.4.5

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 (306) hide show
  1. package/README.md +18 -53
  2. package/dist/credentials/HuduApi.credentials.js +45 -45
  3. package/dist/index.js +13 -13
  4. package/dist/nodes/Hudu/Hudu.node.js +338 -325
  5. package/dist/nodes/Hudu/Hudu.node.js.map +1 -1
  6. package/dist/nodes/Hudu/Hudu.node.json +1 -1
  7. package/dist/nodes/Hudu/Hudu.node.ts +448 -442
  8. package/dist/nodes/Hudu/descriptions/activity_logs.description.js +170 -170
  9. package/dist/nodes/Hudu/descriptions/api_info.description.js +26 -26
  10. package/dist/nodes/Hudu/descriptions/articles.description.js +701 -675
  11. package/dist/nodes/Hudu/descriptions/articles.description.js.map +1 -1
  12. package/dist/nodes/Hudu/descriptions/articles.description.ts +45 -15
  13. package/dist/nodes/Hudu/descriptions/asset_layout_fields.description.js +442 -442
  14. package/dist/nodes/Hudu/descriptions/asset_layout_fields.description.js.map +1 -1
  15. package/dist/nodes/Hudu/descriptions/asset_layout_fields.description.ts +2 -2
  16. package/dist/nodes/Hudu/descriptions/asset_layouts.description.js +589 -596
  17. package/dist/nodes/Hudu/descriptions/asset_layouts.description.js.map +1 -1
  18. package/dist/nodes/Hudu/descriptions/asset_layouts.description.ts +1 -7
  19. package/dist/nodes/Hudu/descriptions/asset_passwords.description.js +589 -589
  20. package/dist/nodes/Hudu/descriptions/asset_passwords.description.js.map +1 -1
  21. package/dist/nodes/Hudu/descriptions/asset_passwords.description.ts +2 -2
  22. package/dist/nodes/Hudu/descriptions/assets.description.js +565 -565
  23. package/dist/nodes/Hudu/descriptions/cards.description.js +181 -181
  24. package/dist/nodes/Hudu/descriptions/companies.description.js +667 -667
  25. package/dist/nodes/Hudu/descriptions/companies.description.js.map +1 -1
  26. package/dist/nodes/Hudu/descriptions/companies.description.ts +2 -2
  27. package/dist/nodes/Hudu/descriptions/expirations.description.js +137 -137
  28. package/dist/nodes/Hudu/descriptions/folders.description.js +305 -305
  29. package/dist/nodes/Hudu/descriptions/folders.description.js.map +1 -1
  30. package/dist/nodes/Hudu/descriptions/folders.description.ts +2 -2
  31. package/dist/nodes/Hudu/descriptions/groups.description.js +114 -0
  32. package/dist/nodes/Hudu/descriptions/groups.description.js.map +1 -0
  33. package/dist/nodes/Hudu/descriptions/groups.description.ts +115 -0
  34. package/dist/nodes/Hudu/descriptions/index.js +46 -45
  35. package/dist/nodes/Hudu/descriptions/index.js.map +1 -1
  36. package/dist/nodes/Hudu/descriptions/index.ts +1 -0
  37. package/dist/nodes/Hudu/descriptions/ip_addresses.description.js +743 -743
  38. package/dist/nodes/Hudu/descriptions/ip_addresses.description.js.map +1 -1
  39. package/dist/nodes/Hudu/descriptions/ip_addresses.description.ts +20 -19
  40. package/dist/nodes/Hudu/descriptions/list_options.description.js +90 -90
  41. package/dist/nodes/Hudu/descriptions/lists.description.js +156 -156
  42. package/dist/nodes/Hudu/descriptions/magic_dash.description.js +252 -252
  43. package/dist/nodes/Hudu/descriptions/magic_dash.description.js.map +1 -1
  44. package/dist/nodes/Hudu/descriptions/magic_dash.description.ts +270 -270
  45. package/dist/nodes/Hudu/descriptions/matchers.description.js +202 -202
  46. package/dist/nodes/Hudu/descriptions/matchers.description.js.map +1 -1
  47. package/dist/nodes/Hudu/descriptions/matchers.description.ts +2 -2
  48. package/dist/nodes/Hudu/descriptions/networks.description.js +759 -759
  49. package/dist/nodes/Hudu/descriptions/networks.description.js.map +1 -1
  50. package/dist/nodes/Hudu/descriptions/networks.description.ts +17 -17
  51. package/dist/nodes/Hudu/descriptions/passwordFolders.descriptions.js +297 -119
  52. package/dist/nodes/Hudu/descriptions/passwordFolders.descriptions.js.map +1 -1
  53. package/dist/nodes/Hudu/descriptions/passwordFolders.descriptions.ts +183 -2
  54. package/dist/nodes/Hudu/descriptions/procedure_tasks.description.js +378 -378
  55. package/dist/nodes/Hudu/descriptions/procedure_tasks.description.js.map +1 -1
  56. package/dist/nodes/Hudu/descriptions/procedure_tasks.description.ts +2 -2
  57. package/dist/nodes/Hudu/descriptions/procedures.description.js +471 -471
  58. package/dist/nodes/Hudu/descriptions/procedures.description.js.map +1 -1
  59. package/dist/nodes/Hudu/descriptions/procedures.description.ts +2 -2
  60. package/dist/nodes/Hudu/descriptions/public_photos.description.js +214 -214
  61. package/dist/nodes/Hudu/descriptions/rack_storage_items.description.js +334 -334
  62. package/dist/nodes/Hudu/descriptions/rack_storage_items.description.js.map +1 -1
  63. package/dist/nodes/Hudu/descriptions/rack_storage_items.description.ts +2 -2
  64. package/dist/nodes/Hudu/descriptions/rack_storages.description.js +609 -609
  65. package/dist/nodes/Hudu/descriptions/rack_storages.description.js.map +1 -1
  66. package/dist/nodes/Hudu/descriptions/rack_storages.description.ts +2 -2
  67. package/dist/nodes/Hudu/descriptions/relations.description.js +226 -226
  68. package/dist/nodes/Hudu/descriptions/resources.js +133 -129
  69. package/dist/nodes/Hudu/descriptions/resources.js.map +1 -1
  70. package/dist/nodes/Hudu/descriptions/resources.ts +8 -4
  71. package/dist/nodes/Hudu/descriptions/uploads.description.js +84 -84
  72. package/dist/nodes/Hudu/descriptions/users.description.js +179 -179
  73. package/dist/nodes/Hudu/descriptions/vlan_zones.description.js +278 -278
  74. package/dist/nodes/Hudu/descriptions/vlan_zones.description.js.map +1 -1
  75. package/dist/nodes/Hudu/descriptions/vlan_zones.description.ts +2 -2
  76. package/dist/nodes/Hudu/descriptions/vlans.description.js +348 -324
  77. package/dist/nodes/Hudu/descriptions/vlans.description.js.map +1 -1
  78. package/dist/nodes/Hudu/descriptions/vlans.description.ts +50 -26
  79. package/dist/nodes/Hudu/descriptions/websites.description.js +865 -865
  80. package/dist/nodes/Hudu/descriptions/websites.description.js.map +1 -1
  81. package/dist/nodes/Hudu/descriptions/websites.description.ts +10 -10
  82. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayoutFieldValues.js +65 -66
  83. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayoutFieldValues.js.map +1 -1
  84. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayoutFieldValues.ts +1 -1
  85. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayoutFields.js +229 -227
  86. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayoutFields.js.map +1 -1
  87. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayoutFields.ts +3 -0
  88. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayouts.js +40 -41
  89. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getAssetLayouts.js.map +1 -1
  90. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getCustomFieldsLayoutFields.js +54 -55
  91. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getCustomFieldsLayoutFields.js.map +1 -1
  92. package/dist/nodes/Hudu/optionLoaders/asset_layouts/getCustomFieldsLayoutFields.ts +1 -1
  93. package/dist/nodes/Hudu/optionLoaders/asset_layouts/index.js +20 -20
  94. package/dist/nodes/Hudu/optionLoaders/assets/index.js +1 -18
  95. package/dist/nodes/Hudu/optionLoaders/assets/index.js.map +1 -1
  96. package/dist/nodes/Hudu/optionLoaders/assets/index.ts +1 -2
  97. package/dist/nodes/Hudu/optionLoaders/companies/getCompanies.js +32 -33
  98. package/dist/nodes/Hudu/optionLoaders/companies/getCompanies.js.map +1 -1
  99. package/dist/nodes/Hudu/optionLoaders/companies/index.js +17 -17
  100. package/dist/nodes/Hudu/optionLoaders/groups/index.js +18 -0
  101. package/dist/nodes/Hudu/optionLoaders/groups/index.js.map +1 -0
  102. package/dist/nodes/Hudu/optionLoaders/groups/index.ts +3 -0
  103. package/dist/nodes/Hudu/optionLoaders/groups/loadGroups.js +24 -0
  104. package/dist/nodes/Hudu/optionLoaders/groups/loadGroups.js.map +1 -0
  105. package/dist/nodes/Hudu/optionLoaders/groups/loadGroups.ts +43 -0
  106. package/dist/nodes/Hudu/optionLoaders/index.js +22 -20
  107. package/dist/nodes/Hudu/optionLoaders/index.js.map +1 -1
  108. package/dist/nodes/Hudu/optionLoaders/index.ts +3 -0
  109. package/dist/nodes/Hudu/optionLoaders/lists/getLists.js +29 -30
  110. package/dist/nodes/Hudu/optionLoaders/lists/getLists.js.map +1 -1
  111. package/dist/nodes/Hudu/optionLoaders/lists/index.js +17 -17
  112. package/dist/nodes/Hudu/optionLoaders/users/getUsers.js +38 -39
  113. package/dist/nodes/Hudu/optionLoaders/users/getUsers.js.map +1 -1
  114. package/dist/nodes/Hudu/optionLoaders/users/index.js +17 -17
  115. package/dist/nodes/Hudu/optionLoaders/vlan_zones/index.js +18 -0
  116. package/dist/nodes/Hudu/optionLoaders/vlan_zones/index.js.map +1 -0
  117. package/dist/nodes/Hudu/optionLoaders/vlan_zones/index.ts +3 -0
  118. package/dist/nodes/Hudu/optionLoaders/vlan_zones/loadVlanZones.js +18 -0
  119. package/dist/nodes/Hudu/optionLoaders/vlan_zones/loadVlanZones.js.map +1 -0
  120. package/dist/nodes/Hudu/optionLoaders/vlan_zones/loadVlanZones.ts +30 -0
  121. package/dist/nodes/Hudu/resources/activity_logs/activity_logs.handler.js +17 -18
  122. package/dist/nodes/Hudu/resources/activity_logs/activity_logs.handler.js.map +1 -1
  123. package/dist/nodes/Hudu/resources/activity_logs/activity_logs.types.js +2 -2
  124. package/dist/nodes/Hudu/resources/api_info/api_info.handler.js +14 -15
  125. package/dist/nodes/Hudu/resources/api_info/api_info.handler.js.map +1 -1
  126. package/dist/nodes/Hudu/resources/api_info/api_info.types.js +2 -2
  127. package/dist/nodes/Hudu/resources/articles/articles.handler.js +214 -206
  128. package/dist/nodes/Hudu/resources/articles/articles.handler.js.map +1 -1
  129. package/dist/nodes/Hudu/resources/articles/articles.handler.ts +18 -1
  130. package/dist/nodes/Hudu/resources/articles/articles.types.js +8 -8
  131. package/dist/nodes/Hudu/resources/asset_layout_fields/asset_layout_fields.handler.js +100 -101
  132. package/dist/nodes/Hudu/resources/asset_layout_fields/asset_layout_fields.handler.js.map +1 -1
  133. package/dist/nodes/Hudu/resources/asset_layout_fields/asset_layout_fields.handler.ts +2 -2
  134. package/dist/nodes/Hudu/resources/asset_layout_fields/asset_layout_fields.types.js +2 -2
  135. package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.handler.js +92 -93
  136. package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.handler.js.map +1 -1
  137. package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.handler.ts +1 -1
  138. package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.types.js +2 -2
  139. package/dist/nodes/Hudu/resources/asset_passwords/asset_passwords.handler.js +106 -107
  140. package/dist/nodes/Hudu/resources/asset_passwords/asset_passwords.handler.js.map +1 -1
  141. package/dist/nodes/Hudu/resources/asset_passwords/asset_passwords.handler.ts +2 -2
  142. package/dist/nodes/Hudu/resources/asset_passwords/asset_passwords.types.js +2 -2
  143. package/dist/nodes/Hudu/resources/assets/assets.handler.js +227 -227
  144. package/dist/nodes/Hudu/resources/assets/assets.handler.js.map +1 -1
  145. package/dist/nodes/Hudu/resources/assets/assets.handler.ts +6 -5
  146. package/dist/nodes/Hudu/resources/assets/assets.types.js +2 -2
  147. package/dist/nodes/Hudu/resources/cards/cards.handler.js +21 -22
  148. package/dist/nodes/Hudu/resources/cards/cards.handler.js.map +1 -1
  149. package/dist/nodes/Hudu/resources/cards/cards.types.js +2 -2
  150. package/dist/nodes/Hudu/resources/companies/companies.handler.js +94 -95
  151. package/dist/nodes/Hudu/resources/companies/companies.handler.js.map +1 -1
  152. package/dist/nodes/Hudu/resources/companies/companies.handler.ts +2 -2
  153. package/dist/nodes/Hudu/resources/companies/companies.types.js +2 -2
  154. package/dist/nodes/Hudu/resources/expirations/expirations.handler.js +19 -20
  155. package/dist/nodes/Hudu/resources/expirations/expirations.handler.js.map +1 -1
  156. package/dist/nodes/Hudu/resources/expirations/expirations.types.js +2 -2
  157. package/dist/nodes/Hudu/resources/folders/folders.handler.js +91 -92
  158. package/dist/nodes/Hudu/resources/folders/folders.handler.js.map +1 -1
  159. package/dist/nodes/Hudu/resources/folders/folders.handler.ts +3 -3
  160. package/dist/nodes/Hudu/resources/folders/folders.types.js +13 -13
  161. package/dist/nodes/Hudu/resources/groups/groups.handler.js +26 -0
  162. package/dist/nodes/Hudu/resources/groups/groups.handler.js.map +1 -0
  163. package/dist/nodes/Hudu/resources/groups/groups.handler.ts +44 -0
  164. package/dist/nodes/Hudu/resources/groups/groups.types.js +3 -0
  165. package/dist/nodes/Hudu/resources/groups/groups.types.js.map +1 -0
  166. package/dist/nodes/Hudu/resources/groups/groups.types.ts +18 -0
  167. package/dist/nodes/Hudu/resources/index.js +76 -74
  168. package/dist/nodes/Hudu/resources/index.js.map +1 -1
  169. package/dist/nodes/Hudu/resources/index.ts +2 -0
  170. package/dist/nodes/Hudu/resources/ip_addresses/ip_addresses.handler.js +131 -100
  171. package/dist/nodes/Hudu/resources/ip_addresses/ip_addresses.handler.js.map +1 -1
  172. package/dist/nodes/Hudu/resources/ip_addresses/ip_addresses.handler.ts +41 -4
  173. package/dist/nodes/Hudu/resources/ip_addresses/ip_addresses.types.js +2 -2
  174. package/dist/nodes/Hudu/resources/list_options/list_options.handler.js +218 -219
  175. package/dist/nodes/Hudu/resources/list_options/list_options.handler.js.map +1 -1
  176. package/dist/nodes/Hudu/resources/list_options/list_options.handler.ts +1 -0
  177. package/dist/nodes/Hudu/resources/list_options/list_options.types.js +2 -2
  178. package/dist/nodes/Hudu/resources/lists/lists.handler.js +65 -66
  179. package/dist/nodes/Hudu/resources/lists/lists.handler.js.map +1 -1
  180. package/dist/nodes/Hudu/resources/lists/lists.handler.ts +1 -0
  181. package/dist/nodes/Hudu/resources/lists/lists.types.js +2 -2
  182. package/dist/nodes/Hudu/resources/magic_dash/magic_dash.handler.js +56 -57
  183. package/dist/nodes/Hudu/resources/magic_dash/magic_dash.handler.js.map +1 -1
  184. package/dist/nodes/Hudu/resources/magic_dash/magic_dash.handler.ts +85 -85
  185. package/dist/nodes/Hudu/resources/magic_dash/magic_dash.types.js +2 -2
  186. package/dist/nodes/Hudu/resources/matchers/matchers.handler.js +45 -46
  187. package/dist/nodes/Hudu/resources/matchers/matchers.handler.js.map +1 -1
  188. package/dist/nodes/Hudu/resources/matchers/matchers.handler.ts +1 -1
  189. package/dist/nodes/Hudu/resources/matchers/matchers.types.js +2 -2
  190. package/dist/nodes/Hudu/resources/networks/networks.handler.js +117 -106
  191. package/dist/nodes/Hudu/resources/networks/networks.handler.js.map +1 -1
  192. package/dist/nodes/Hudu/resources/networks/networks.handler.ts +12 -4
  193. package/dist/nodes/Hudu/resources/networks/networks.types.js +2 -2
  194. package/dist/nodes/Hudu/resources/password_folders/password_folders.handler.js +100 -28
  195. package/dist/nodes/Hudu/resources/password_folders/password_folders.handler.js.map +1 -1
  196. package/dist/nodes/Hudu/resources/password_folders/password_folders.handler.ts +90 -2
  197. package/dist/nodes/Hudu/resources/password_folders/password_folders.types.js +2 -2
  198. package/dist/nodes/Hudu/resources/password_folders/password_folders.types.ts +3 -1
  199. package/dist/nodes/Hudu/resources/procedure_tasks/procedure_tasks.handler.js +52 -53
  200. package/dist/nodes/Hudu/resources/procedure_tasks/procedure_tasks.handler.js.map +1 -1
  201. package/dist/nodes/Hudu/resources/procedure_tasks/procedure_tasks.handler.ts +2 -2
  202. package/dist/nodes/Hudu/resources/procedure_tasks/procedure_tasks.types.js +2 -2
  203. package/dist/nodes/Hudu/resources/procedures/procedures.handler.js +116 -117
  204. package/dist/nodes/Hudu/resources/procedures/procedures.handler.js.map +1 -1
  205. package/dist/nodes/Hudu/resources/procedures/procedures.handler.ts +2 -2
  206. package/dist/nodes/Hudu/resources/procedures/procedures.types.js +2 -2
  207. package/dist/nodes/Hudu/resources/public_photos/public_photos.handler.js +93 -94
  208. package/dist/nodes/Hudu/resources/public_photos/public_photos.handler.js.map +1 -1
  209. package/dist/nodes/Hudu/resources/public_photos/public_photos.types.js +2 -2
  210. package/dist/nodes/Hudu/resources/rack_storage_items/rack_storage_items.handler.js +48 -49
  211. package/dist/nodes/Hudu/resources/rack_storage_items/rack_storage_items.handler.js.map +1 -1
  212. package/dist/nodes/Hudu/resources/rack_storage_items/rack_storage_items.handler.ts +2 -2
  213. package/dist/nodes/Hudu/resources/rack_storage_items/rack_storage_items.types.js +2 -2
  214. package/dist/nodes/Hudu/resources/rack_storages/rack_storages.handler.js +91 -92
  215. package/dist/nodes/Hudu/resources/rack_storages/rack_storages.handler.js.map +1 -1
  216. package/dist/nodes/Hudu/resources/rack_storages/rack_storages.handler.ts +2 -2
  217. package/dist/nodes/Hudu/resources/rack_storages/rack_storages.types.js +2 -2
  218. package/dist/nodes/Hudu/resources/relations/relations.handler.js +35 -36
  219. package/dist/nodes/Hudu/resources/relations/relations.handler.js.map +1 -1
  220. package/dist/nodes/Hudu/resources/relations/relations.types.js +24 -24
  221. package/dist/nodes/Hudu/resources/uploads/uploads.handler.js +31 -32
  222. package/dist/nodes/Hudu/resources/uploads/uploads.handler.js.map +1 -1
  223. package/dist/nodes/Hudu/resources/uploads/uploads.types.js +2 -2
  224. package/dist/nodes/Hudu/resources/users/users.handler.js +21 -22
  225. package/dist/nodes/Hudu/resources/users/users.handler.js.map +1 -1
  226. package/dist/nodes/Hudu/resources/users/users.handler.ts +1 -1
  227. package/dist/nodes/Hudu/resources/users/users.types.js +2 -2
  228. package/dist/nodes/Hudu/resources/vlan_zones/vlan_zones.handler.js +152 -153
  229. package/dist/nodes/Hudu/resources/vlan_zones/vlan_zones.handler.js.map +1 -1
  230. package/dist/nodes/Hudu/resources/vlan_zones/vlan_zones.handler.ts +2 -2
  231. package/dist/nodes/Hudu/resources/vlan_zones/vlan_zones.types.js +2 -2
  232. package/dist/nodes/Hudu/resources/vlans/vlans.handler.js +152 -153
  233. package/dist/nodes/Hudu/resources/vlans/vlans.handler.js.map +1 -1
  234. package/dist/nodes/Hudu/resources/vlans/vlans.handler.ts +2 -2
  235. package/dist/nodes/Hudu/resources/vlans/vlans.types.js +2 -2
  236. package/dist/nodes/Hudu/resources/websites/websites.handler.js +119 -120
  237. package/dist/nodes/Hudu/resources/websites/websites.handler.js.map +1 -1
  238. package/dist/nodes/Hudu/resources/websites/websites.handler.ts +2 -2
  239. package/dist/nodes/Hudu/resources/websites/websites.types.js +2 -2
  240. package/dist/nodes/Hudu/utils/assetFieldUtils.js +328 -272
  241. package/dist/nodes/Hudu/utils/assetFieldUtils.js.map +1 -1
  242. package/dist/nodes/Hudu/utils/assetFieldUtils.ts +94 -30
  243. package/dist/nodes/Hudu/utils/constants.js +186 -185
  244. package/dist/nodes/Hudu/utils/constants.js.map +1 -1
  245. package/dist/nodes/Hudu/utils/constants.ts +1 -0
  246. package/dist/nodes/Hudu/utils/dateUtils.js +137 -138
  247. package/dist/nodes/Hudu/utils/dateUtils.js.map +1 -1
  248. package/dist/nodes/Hudu/utils/debugConfig.js +170 -170
  249. package/dist/nodes/Hudu/utils/debugConfig.js.map +1 -1
  250. package/dist/nodes/Hudu/utils/debugConfig.ts +3 -3
  251. package/dist/nodes/Hudu/utils/errorParser.js +55 -56
  252. package/dist/nodes/Hudu/utils/errorParser.js.map +1 -1
  253. package/dist/nodes/Hudu/utils/fieldErrorUtils.js +15 -16
  254. package/dist/nodes/Hudu/utils/fieldErrorUtils.js.map +1 -1
  255. package/dist/nodes/Hudu/utils/fieldTypeUtils.js +143 -144
  256. package/dist/nodes/Hudu/utils/fieldTypeUtils.js.map +1 -1
  257. package/dist/nodes/Hudu/utils/filterUtils.js +52 -53
  258. package/dist/nodes/Hudu/utils/filterUtils.js.map +1 -1
  259. package/dist/nodes/Hudu/utils/formatters.js +37 -38
  260. package/dist/nodes/Hudu/utils/formatters.js.map +1 -1
  261. package/dist/nodes/Hudu/utils/index.js +24 -24
  262. package/dist/nodes/Hudu/utils/markdownUtils.js +81 -0
  263. package/dist/nodes/Hudu/utils/markdownUtils.js.map +1 -0
  264. package/dist/nodes/Hudu/utils/markdownUtils.ts +119 -0
  265. package/dist/nodes/Hudu/utils/operations/archive.js +23 -24
  266. package/dist/nodes/Hudu/utils/operations/archive.js.map +1 -1
  267. package/dist/nodes/Hudu/utils/operations/cards.js +21 -22
  268. package/dist/nodes/Hudu/utils/operations/cards.js.map +1 -1
  269. package/dist/nodes/Hudu/utils/operations/companies.js +16 -17
  270. package/dist/nodes/Hudu/utils/operations/companies.js.map +1 -1
  271. package/dist/nodes/Hudu/utils/operations/create.js +18 -19
  272. package/dist/nodes/Hudu/utils/operations/create.js.map +1 -1
  273. package/dist/nodes/Hudu/utils/operations/delete.js +22 -23
  274. package/dist/nodes/Hudu/utils/operations/delete.js.map +1 -1
  275. package/dist/nodes/Hudu/utils/operations/get.js +21 -19
  276. package/dist/nodes/Hudu/utils/operations/get.js.map +1 -1
  277. package/dist/nodes/Hudu/utils/operations/get.ts +9 -0
  278. package/dist/nodes/Hudu/utils/operations/getAll.js +26 -27
  279. package/dist/nodes/Hudu/utils/operations/getAll.js.map +1 -1
  280. package/dist/nodes/Hudu/utils/operations/getCompanyIdForAsset.js +21 -22
  281. package/dist/nodes/Hudu/utils/operations/getCompanyIdForAsset.js.map +1 -1
  282. package/dist/nodes/Hudu/utils/operations/index.js +23 -23
  283. package/dist/nodes/Hudu/utils/operations/magic_dash.js +45 -46
  284. package/dist/nodes/Hudu/utils/operations/magic_dash.js.map +1 -1
  285. package/dist/nodes/Hudu/utils/operations/magic_dash.ts +68 -68
  286. package/dist/nodes/Hudu/utils/operations/matchers.js +22 -23
  287. package/dist/nodes/Hudu/utils/operations/matchers.js.map +1 -1
  288. package/dist/nodes/Hudu/utils/operations/procedures.js +26 -27
  289. package/dist/nodes/Hudu/utils/operations/procedures.js.map +1 -1
  290. package/dist/nodes/Hudu/utils/operations/systemInfo.js +7 -8
  291. package/dist/nodes/Hudu/utils/operations/systemInfo.js.map +1 -1
  292. package/dist/nodes/Hudu/utils/operations/update.js +19 -20
  293. package/dist/nodes/Hudu/utils/operations/update.js.map +1 -1
  294. package/dist/nodes/Hudu/utils/requestUtils.js +328 -308
  295. package/dist/nodes/Hudu/utils/requestUtils.js.map +1 -1
  296. package/dist/nodes/Hudu/utils/requestUtils.ts +518 -491
  297. package/dist/nodes/Hudu/utils/types.js +2 -2
  298. package/dist/nodes/Hudu/utils/validation.js +22 -23
  299. package/dist/nodes/Hudu/utils/validation.js.map +1 -1
  300. package/package.json +4 -4
  301. package/dist/nodes/Hudu/optionLoaders/assets/getAssets.js +0 -84
  302. package/dist/nodes/Hudu/optionLoaders/assets/getAssets.js.map +0 -1
  303. package/dist/nodes/Hudu/optionLoaders/assets/getAssets.ts +0 -136
  304. package/dist/nodes/Hudu/optionLoaders/assets/getAssetsForCompany.js +0 -45
  305. package/dist/nodes/Hudu/optionLoaders/assets/getAssetsForCompany.js.map +0 -1
  306. package/dist/nodes/Hudu/optionLoaders/assets/getAssetsForCompany.ts +0 -59
@@ -1,273 +1,329 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateAssetWithMappedFields = exports.transformFieldValueForUpdate = exports.validateFieldForMappingLegacy = exports.validateFieldForMapping = exports.getAssetWithMetadata = void 0;
4
- const luxon_1 = require("luxon");
5
- const getCompanyIdForAsset_1 = require("./operations/getCompanyIdForAsset");
6
- const n8n_workflow_1 = require("n8n-workflow");
7
- const debugConfig_1 = require("./debugConfig");
8
- const requestUtils_1 = require("./requestUtils");
9
- const fieldTypeUtils_1 = require("./fieldTypeUtils");
10
- const constants_1 = require("./constants");
11
- async function getAssetWithMetadata(context, assetId, itemIndex) {
12
- (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Fetching asset metadata', { assetId });
13
- const { companyId, assetObject } = await (0, getCompanyIdForAsset_1.getCompanyIdForAsset)(context, assetId, itemIndex);
14
- if (!assetObject) {
15
- (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Asset object not found', { assetId });
16
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Asset with ID '${assetId}' not found.`, { itemIndex });
17
- }
18
- const assetLayoutIdRaw = assetObject.asset_layout_id;
19
- let assetLayoutId;
20
- if (typeof assetLayoutIdRaw === 'number') {
21
- assetLayoutId = assetLayoutIdRaw;
22
- }
23
- else if (typeof assetLayoutIdRaw === 'string' && !isNaN(Number(assetLayoutIdRaw))) {
24
- assetLayoutId = Number(assetLayoutIdRaw);
25
- }
26
- else {
27
- (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Invalid asset layout ID type', { assetId, assetLayoutIdRaw });
28
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Asset with ID '${assetId}' has an invalid asset_layout_id.`, { itemIndex });
29
- }
30
- const name = assetObject.name;
31
- const fields = Array.isArray(assetObject.fields) ? assetObject.fields : [];
32
- if (!assetLayoutId) {
33
- (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Asset layout ID not found', { assetId });
34
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Asset with ID '${assetId}' does not have an asset_layout_id.`, { itemIndex });
35
- }
36
- (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Asset metadata retrieved', { assetId, companyId, assetLayoutId, name, fieldsCount: fields.length });
37
- return {
38
- assetId: Number(assetId),
39
- companyId: typeof companyId === 'string' ? Number(companyId) : companyId,
40
- assetLayoutId,
41
- name: name,
42
- fields,
43
- assetObject,
44
- };
45
- }
46
- exports.getAssetWithMetadata = getAssetWithMetadata;
47
- function validateFieldForMapping(context, layoutFields, fieldIdentifier, expectedJsType, itemIndex) {
48
- (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Validating field for mapping', { fieldIdentifier, expectedJsType, fieldsCount: layoutFields.length });
49
- if (!Array.isArray(layoutFields) || layoutFields.length === 0) {
50
- (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] No layout fields provided', { fieldIdentifier });
51
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `No layout fields available for validation of field '${fieldIdentifier}'.`, { itemIndex });
52
- }
53
- const field = layoutFields.find((f) => f.label === fieldIdentifier || String(f.id) === String(fieldIdentifier));
54
- if (!field) {
55
- (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Field not found in layout', { fieldIdentifier, availableFields: layoutFields.map(f => f.label) });
56
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Field '${fieldIdentifier}' not found in asset layout. Available fields: ${layoutFields.map(f => f.label).join(', ')}.`, { itemIndex });
57
- }
58
- const normalisedFieldType = (0, fieldTypeUtils_1.normaliseFieldType)(field.field_type);
59
- const expectedFieldJsType = (0, fieldTypeUtils_1.getExpectedJavaScriptType)(normalisedFieldType);
60
- if (normalisedFieldType === constants_1.ASSET_LAYOUT_FIELD_TYPES.ASSET_TAG || normalisedFieldType === constants_1.ASSET_LAYOUT_FIELD_TYPES.RELATION) {
61
- if (expectedJsType !== 'string' && expectedJsType !== 'number') {
62
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Field '${fieldIdentifier}' of type ${normalisedFieldType} expects a string or a number, but got ${expectedJsType}.`, { itemIndex });
63
- }
64
- }
65
- else if (expectedFieldJsType !== expectedJsType) {
66
- (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Field type mismatch', {
67
- fieldIdentifier,
68
- expected: expectedJsType,
69
- actual: expectedFieldJsType,
70
- huduFieldType: normalisedFieldType
71
- });
72
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Field '${fieldIdentifier}' type mismatch: expected JavaScript type '${expectedJsType}', but field type '${normalisedFieldType}' expects '${expectedFieldJsType}'.`, { itemIndex });
73
- }
74
- if (!(0, fieldTypeUtils_1.isFieldTypeUpdatable)(normalisedFieldType)) {
75
- (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Field type not updatable', { fieldIdentifier, fieldType: normalisedFieldType });
76
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Field '${fieldIdentifier}' of type '${normalisedFieldType}' cannot be updated via the API. Please use a different field type or update manually in Hudu.`, { itemIndex });
77
- }
78
- (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Field validated successfully', {
79
- fieldIdentifier,
80
- fieldType: normalisedFieldType,
81
- detectedType: (0, fieldTypeUtils_1.detectFieldType)(field),
82
- jsType: expectedFieldJsType
83
- });
84
- return {
85
- id: String(field.id),
86
- label: field.label,
87
- fieldType: normalisedFieldType,
88
- required: !!field.required,
89
- linkableId: field.linkable_id,
90
- };
91
- }
92
- exports.validateFieldForMapping = validateFieldForMapping;
93
- async function validateFieldForMappingLegacy(context, assetLayoutId, fieldIdentifier, fieldType, itemIndex) {
94
- (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Using legacy field validation (consider upgrading)', { assetLayoutId, fieldIdentifier, fieldType });
95
- const layoutResponseRaw = await requestUtils_1.huduApiRequest.call(context, 'GET', '/asset_layouts', {}, { id: assetLayoutId });
96
- const layoutResponse = Array.isArray(layoutResponseRaw) ? layoutResponseRaw[0] : layoutResponseRaw;
97
- const layout = (layoutResponse && typeof layoutResponse === 'object' && 'asset_layout' in layoutResponse)
98
- ? layoutResponse.asset_layout
99
- : undefined;
100
- if (!layout || !Array.isArray(layout.fields)) {
101
- (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Asset layout not found or has no fields', { assetLayoutId });
102
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Asset layout with ID '${assetLayoutId}' not found or has no fields.`, { itemIndex });
103
- }
104
- const expectedJsType = (0, fieldTypeUtils_1.getExpectedJavaScriptType)((0, fieldTypeUtils_1.normaliseFieldType)(fieldType));
105
- return validateFieldForMapping(context, layout.fields, fieldIdentifier, expectedJsType, itemIndex);
106
- }
107
- exports.validateFieldForMappingLegacy = validateFieldForMappingLegacy;
108
- function transformFieldValueForUpdate(value, fieldType) {
109
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Transforming field value', { value, fieldType, valueType: typeof value });
110
- const normalisedFieldType = (0, fieldTypeUtils_1.normaliseFieldType)(fieldType);
111
- if (value === null || value === undefined) {
112
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Null/undefined value, returning empty string', { fieldType: normalisedFieldType });
113
- return '';
114
- }
115
- switch (normalisedFieldType) {
116
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.NUMBER:
117
- if (typeof value === 'number')
118
- return value;
119
- if (typeof value === 'string' && value.trim() !== '' && !isNaN(Number(value))) {
120
- const numValue = Number(value);
121
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted string to number', { original: value, converted: numValue });
122
- return numValue;
123
- }
124
- throw new Error(`Invalid value for Number field: ${value}. Expected a numeric value.`);
125
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.CHECKBOX:
126
- if (typeof value === 'boolean')
127
- return value;
128
- if (typeof value === 'string') {
129
- const lower = value.trim().toLowerCase();
130
- if (lower === 'true' || lower === 'yes' || lower === '1') {
131
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted string to true', { original: value });
132
- return true;
133
- }
134
- if (lower === 'false' || lower === 'no' || lower === '0' || lower === '') {
135
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted string to false', { original: value });
136
- return false;
137
- }
138
- }
139
- throw new Error(`Invalid value for CheckBox field: ${value}. Expected true/false, yes/no, or 1/0.`);
140
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.DATE:
141
- try {
142
- const dt = luxon_1.DateTime.fromISO(value);
143
- if (dt.isValid) {
144
- const dateString = dt.toFormat('yyyy-MM-dd');
145
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted ISO string to yyyy-MM-dd', { original: value, converted: dateString });
146
- return dateString;
147
- }
148
- }
149
- catch (e) {
150
- }
151
- try {
152
- const dt = luxon_1.DateTime.fromFormat(value, 'yyyy-MM-dd');
153
- if (dt.isValid) {
154
- return value;
155
- }
156
- }
157
- catch (e) {
158
- }
159
- try {
160
- const dt = luxon_1.DateTime.fromJSDate(new Date(value));
161
- if (dt.isValid) {
162
- const dateString = dt.toFormat('yyyy-MM-dd');
163
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted JS Date to yyyy-MM-dd (fallback)', { original: value, converted: dateString });
164
- return dateString;
165
- }
166
- }
167
- catch (e) {
168
- }
169
- throw new Error(`Invalid value for Date field: '${value}'. Expected a valid date string (e.g., YYYY-MM-DD or a full ISO timestamp).`);
170
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.LIST_SELECT:
171
- if (typeof value === 'object' && value !== null) {
172
- const jsonString = JSON.stringify(value);
173
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Stringified object for List field', { original: value, converted: jsonString });
174
- return jsonString;
175
- }
176
- if (Array.isArray(value)) {
177
- const jsonString = JSON.stringify(value);
178
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Stringified array for List field', { original: value, converted: jsonString });
179
- return jsonString;
180
- }
181
- const stringValue = String(value);
182
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted to string for List field', { original: value, converted: stringValue });
183
- return stringValue;
184
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.RELATION:
185
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.ASSET_TAG:
186
- if (Array.isArray(value)) {
187
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Value is already an array for AssetTag/Relation', { value });
188
- return value.map(Number);
189
- }
190
- if (typeof value === 'number') {
191
- const result = [value];
192
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted single number to array for AssetTag/Relation', { result });
193
- return result;
194
- }
195
- if (typeof value === 'string' && value.trim() !== '') {
196
- const ids = value.split(',').map(id => {
197
- const num = Number(id.trim());
198
- if (isNaN(num)) {
199
- throw new Error(`Invalid non-numeric ID '${id.trim()}' found in list for AssetTag/Relation field.`);
200
- }
201
- return num;
202
- });
203
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Parsed comma-separated string to ID array for AssetTag/Relation', { original: value, converted: ids });
204
- return ids;
205
- }
206
- return [];
207
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.ADDRESS_DATA:
208
- if (typeof value === 'object' && value !== null) {
209
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Using object for Address field', { value });
210
- return value;
211
- }
212
- if (typeof value === 'string') {
213
- try {
214
- const parsed = JSON.parse(value);
215
- if (typeof parsed === 'object' && parsed !== null) {
216
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Parsed JSON string for Address field', { original: value, parsed });
217
- return parsed;
218
- }
219
- }
220
- catch (error) {
221
- throw new Error(`Invalid JSON for Address field: ${value}. Please provide a valid JSON object string. Error: ${error.message}`);
222
- }
223
- }
224
- throw new Error(`Invalid value for Address field: ${value}. Expected an address object or JSON string.`);
225
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.EMAIL:
226
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.PHONE:
227
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.WEBSITE:
228
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.PASSWORD:
229
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.TEXT:
230
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.RICH_TEXT:
231
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.EMBED:
232
- const stringResult = String(value);
233
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted to string for text-based field', {
234
- fieldType: normalisedFieldType,
235
- original: value,
236
- converted: stringResult
237
- });
238
- return stringResult;
239
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.HEADING:
240
- throw new Error(`Heading fields cannot be updated. Field type '${normalisedFieldType}' is for display purposes only.`);
241
- case constants_1.ASSET_LAYOUT_FIELD_TYPES.DROPDOWN:
242
- throw new Error(`Dropdown fields cannot be updated via the API. Please convert the field to a List type in Hudu to enable API updates.`);
243
- default:
244
- (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Unknown field type, defaulting to string conversion', {
245
- fieldType: normalisedFieldType,
246
- originalFieldType: fieldType,
247
- value
248
- });
249
- return String(value);
250
- }
251
- }
252
- exports.transformFieldValueForUpdate = transformFieldValueForUpdate;
253
- async function updateAssetWithMappedFields(context, assetId, companyId, mappedFields, itemIndex) {
254
- (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Preparing to update asset with mapped fields', { assetId, companyId, mappedFields });
255
- const payload = {};
256
- for (const [key, value] of Object.entries(mappedFields)) {
257
- payload[key] = value;
258
- }
259
- (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Final update payload', payload);
260
- const endpoint = `/companies/${companyId}/assets/${assetId}`;
261
- try {
262
- (0, debugConfig_1.debugLog)('[API_REQUEST] Sending asset update request', { endpoint, payload });
263
- const response = await requestUtils_1.huduApiRequest.call(context, 'PUT', endpoint, payload);
264
- (0, debugConfig_1.debugLog)('[API_RESPONSE] Asset update response received', response);
265
- return response;
266
- }
267
- catch (error) {
268
- (0, debugConfig_1.debugLog)('[API_RESPONSE] Asset update failed', { error });
269
- throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Failed to update asset with ID '${assetId}': ${error.message}`, { itemIndex });
270
- }
271
- }
272
- exports.updateAssetWithMappedFields = updateAssetWithMappedFields;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAssetWithMetadata = getAssetWithMetadata;
4
+ exports.validateFieldForMapping = validateFieldForMapping;
5
+ exports.validateFieldForMappingLegacy = validateFieldForMappingLegacy;
6
+ exports.transformFieldValueForUpdate = transformFieldValueForUpdate;
7
+ exports.updateAssetWithMappedFields = updateAssetWithMappedFields;
8
+ const luxon_1 = require("luxon");
9
+ const getCompanyIdForAsset_1 = require("./operations/getCompanyIdForAsset");
10
+ const n8n_workflow_1 = require("n8n-workflow");
11
+ const debugConfig_1 = require("./debugConfig");
12
+ const requestUtils_1 = require("./requestUtils");
13
+ const fieldTypeUtils_1 = require("./fieldTypeUtils");
14
+ const constants_1 = require("./constants");
15
+ async function getAssetWithMetadata(context, assetId, itemIndex) {
16
+ (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Fetching asset metadata', { assetId });
17
+ const { companyId, assetObject } = await (0, getCompanyIdForAsset_1.getCompanyIdForAsset)(context, assetId, itemIndex);
18
+ if (!assetObject) {
19
+ (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Asset object not found', { assetId });
20
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Asset with ID '${assetId}' not found.`, { itemIndex });
21
+ }
22
+ const assetLayoutIdRaw = assetObject.asset_layout_id;
23
+ let assetLayoutId;
24
+ if (typeof assetLayoutIdRaw === 'number') {
25
+ assetLayoutId = assetLayoutIdRaw;
26
+ }
27
+ else if (typeof assetLayoutIdRaw === 'string' && !isNaN(Number(assetLayoutIdRaw))) {
28
+ assetLayoutId = Number(assetLayoutIdRaw);
29
+ }
30
+ else {
31
+ (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Invalid asset layout ID type', { assetId, assetLayoutIdRaw });
32
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Asset with ID '${assetId}' has an invalid asset_layout_id.`, { itemIndex });
33
+ }
34
+ const name = assetObject.name;
35
+ const fields = Array.isArray(assetObject.fields) ? assetObject.fields : [];
36
+ if (!assetLayoutId) {
37
+ (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Asset layout ID not found', { assetId });
38
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Asset with ID '${assetId}' does not have an asset_layout_id.`, { itemIndex });
39
+ }
40
+ (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Asset metadata retrieved', { assetId, companyId, assetLayoutId, name, fieldsCount: fields.length });
41
+ return {
42
+ assetId: Number(assetId),
43
+ companyId: typeof companyId === 'string' ? Number(companyId) : companyId,
44
+ assetLayoutId,
45
+ name: name,
46
+ fields,
47
+ assetObject,
48
+ };
49
+ }
50
+ function validateFieldForMapping(context, layoutFields, fieldIdentifier, expectedJsType, itemIndex) {
51
+ (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Validating field for mapping', { fieldIdentifier, expectedJsType, fieldsCount: layoutFields.length });
52
+ if (!Array.isArray(layoutFields) || layoutFields.length === 0) {
53
+ (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] No layout fields provided', { fieldIdentifier });
54
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `No layout fields available for validation of field '${fieldIdentifier}'.`, { itemIndex });
55
+ }
56
+ const field = layoutFields.find((f) => f.label === fieldIdentifier || String(f.id) === String(fieldIdentifier));
57
+ if (!field) {
58
+ (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Field not found in layout', { fieldIdentifier, availableFields: layoutFields.map(f => f.label) });
59
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Field '${fieldIdentifier}' not found in asset layout. Available fields: ${layoutFields.map(f => f.label).join(', ')}.`, { itemIndex });
60
+ }
61
+ const normalisedFieldType = (0, fieldTypeUtils_1.normaliseFieldType)(field.field_type);
62
+ const expectedFieldJsType = (0, fieldTypeUtils_1.getExpectedJavaScriptType)(normalisedFieldType);
63
+ const inputIsCompatible = () => {
64
+ switch (normalisedFieldType) {
65
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.CHECKBOX:
66
+ return expectedJsType === 'boolean' || expectedJsType === 'string';
67
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.NUMBER:
68
+ return expectedJsType === 'number' || expectedJsType === 'string';
69
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.DATE:
70
+ return expectedJsType === 'string';
71
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.ADDRESS_DATA:
72
+ return expectedJsType === 'object' || expectedJsType === 'string';
73
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.LIST_SELECT:
74
+ return expectedJsType === 'object' || expectedJsType === 'string';
75
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.RELATION:
76
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.ASSET_TAG:
77
+ return expectedJsType === 'number' || expectedJsType === 'string' || expectedJsType === 'object';
78
+ default:
79
+ return expectedFieldJsType === expectedJsType;
80
+ }
81
+ };
82
+ if (!inputIsCompatible()) {
83
+ (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Field type mismatch', {
84
+ fieldIdentifier,
85
+ expected: expectedJsType,
86
+ actual: expectedFieldJsType,
87
+ huduFieldType: normalisedFieldType
88
+ });
89
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Field '${fieldIdentifier}' type mismatch: received '${expectedJsType}', but field type '${normalisedFieldType}' expects '${expectedFieldJsType}'.`, { itemIndex });
90
+ }
91
+ if (!(0, fieldTypeUtils_1.isFieldTypeUpdatable)(normalisedFieldType)) {
92
+ (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Field type not updatable', { fieldIdentifier, fieldType: normalisedFieldType });
93
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Field '${fieldIdentifier}' of type '${normalisedFieldType}' cannot be updated via the API. Please use a different field type or update manually in Hudu.`, { itemIndex });
94
+ }
95
+ (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Field validated successfully', {
96
+ fieldIdentifier,
97
+ fieldType: normalisedFieldType,
98
+ detectedType: (0, fieldTypeUtils_1.detectFieldType)(field),
99
+ jsType: expectedFieldJsType
100
+ });
101
+ return {
102
+ id: String(field.id),
103
+ label: field.label,
104
+ fieldType: normalisedFieldType,
105
+ required: !!field.required,
106
+ linkableId: field.linkable_id,
107
+ };
108
+ }
109
+ async function validateFieldForMappingLegacy(context, assetLayoutId, fieldIdentifier, fieldType, itemIndex) {
110
+ (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Using legacy field validation (consider upgrading)', { assetLayoutId, fieldIdentifier, fieldType });
111
+ const layoutResponseRaw = await requestUtils_1.huduApiRequest.call(context, 'GET', '/asset_layouts', {}, { id: assetLayoutId });
112
+ const layoutResponse = Array.isArray(layoutResponseRaw) ? layoutResponseRaw[0] : layoutResponseRaw;
113
+ const layout = (layoutResponse && typeof layoutResponse === 'object' && 'asset_layout' in layoutResponse)
114
+ ? layoutResponse.asset_layout
115
+ : undefined;
116
+ if (!layout || !Array.isArray(layout.fields)) {
117
+ (0, debugConfig_1.debugLog)('[RESOURCE_VALIDATION] Asset layout not found or has no fields', { assetLayoutId });
118
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Asset layout with ID '${assetLayoutId}' not found or has no fields.`, { itemIndex });
119
+ }
120
+ const expectedJsType = (0, fieldTypeUtils_1.getExpectedJavaScriptType)((0, fieldTypeUtils_1.normaliseFieldType)(fieldType));
121
+ return validateFieldForMapping(context, layout.fields, fieldIdentifier, expectedJsType, itemIndex);
122
+ }
123
+ function transformFieldValueForUpdate(value, fieldType) {
124
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Transforming field value', { value, fieldType, valueType: typeof value });
125
+ const normalisedFieldType = (0, fieldTypeUtils_1.normaliseFieldType)(fieldType);
126
+ if (value === null || value === undefined) {
127
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Null/undefined value, returning empty string', { fieldType: normalisedFieldType });
128
+ return '';
129
+ }
130
+ switch (normalisedFieldType) {
131
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.NUMBER:
132
+ if (typeof value === 'number')
133
+ return value;
134
+ if (typeof value === 'string' && value.trim() !== '' && !isNaN(Number(value))) {
135
+ const numValue = Number(value);
136
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted string to number', { original: value, converted: numValue });
137
+ return numValue;
138
+ }
139
+ throw new Error(`Invalid value for Number field: ${value}. Expected a numeric value.`);
140
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.CHECKBOX:
141
+ if (typeof value === 'boolean')
142
+ return value;
143
+ if (typeof value === 'string') {
144
+ const lower = value.trim().toLowerCase();
145
+ if (lower === 'true' || lower === 'yes' || lower === '1') {
146
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted string to true', { original: value });
147
+ return true;
148
+ }
149
+ if (lower === 'false' || lower === 'no' || lower === '0' || lower === '') {
150
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted string to false', { original: value });
151
+ return false;
152
+ }
153
+ }
154
+ throw new Error(`Invalid value for CheckBox field: ${value}. Expected true/false, yes/no, or 1/0.`);
155
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.DATE:
156
+ try {
157
+ const dt = luxon_1.DateTime.fromISO(value);
158
+ if (dt.isValid) {
159
+ const dateString = dt.toFormat('yyyy-MM-dd');
160
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted ISO string to yyyy-MM-dd', { original: value, converted: dateString });
161
+ return dateString;
162
+ }
163
+ }
164
+ catch (e) {
165
+ }
166
+ try {
167
+ const dt = luxon_1.DateTime.fromFormat(value, 'yyyy-MM-dd');
168
+ if (dt.isValid) {
169
+ return value;
170
+ }
171
+ }
172
+ catch (e) {
173
+ }
174
+ try {
175
+ const dt = luxon_1.DateTime.fromJSDate(new Date(value));
176
+ if (dt.isValid) {
177
+ const dateString = dt.toFormat('yyyy-MM-dd');
178
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted JS Date to yyyy-MM-dd (fallback)', { original: value, converted: dateString });
179
+ return dateString;
180
+ }
181
+ }
182
+ catch (e) {
183
+ }
184
+ throw new Error(`Invalid value for Date field: '${value}'. Expected a valid date string (e.g., YYYY-MM-DD or a full ISO timestamp).`);
185
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.LIST_SELECT:
186
+ if (Array.isArray(value)) {
187
+ const arr = value.map(v => String(v));
188
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Using array for List field', { original: value, converted: arr });
189
+ return arr;
190
+ }
191
+ if (typeof value === 'string') {
192
+ const trimmed = value.trim();
193
+ if (trimmed === '')
194
+ return [];
195
+ const arr = trimmed.includes(',') ? trimmed.split(',').map(v => v.trim()).filter(v => v !== '') : [trimmed];
196
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Normalised string to array for List field', { original: value, converted: arr });
197
+ return arr;
198
+ }
199
+ const single = String(value);
200
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Coerced value to single-item array for List field', { original: value, converted: [single] });
201
+ return [single];
202
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.RELATION:
203
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.ASSET_TAG:
204
+ if (Array.isArray(value)) {
205
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Value is already an array for AssetTag/Relation', { value });
206
+ return value.map(Number);
207
+ }
208
+ if (typeof value === 'number') {
209
+ const result = [value];
210
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted single number to array for AssetTag/Relation', { result });
211
+ return result;
212
+ }
213
+ if (typeof value === 'string' && value.trim() !== '') {
214
+ const ids = value.split(',').map(id => {
215
+ const num = Number(id.trim());
216
+ if (isNaN(num)) {
217
+ throw new Error(`Invalid non-numeric ID '${id.trim()}' found in list for AssetTag/Relation field.`);
218
+ }
219
+ return num;
220
+ });
221
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Parsed comma-separated string to ID array for AssetTag/Relation', { original: value, converted: ids });
222
+ return ids;
223
+ }
224
+ return [];
225
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.ADDRESS_DATA:
226
+ if (typeof value === 'object' && value !== null) {
227
+ const input = value;
228
+ const out = {};
229
+ const getStr = (v) => (v === undefined || v === null ? '' : String(v));
230
+ const candidateMap = {
231
+ address_line_1: 'address_line_1',
232
+ addressLine1: 'address_line_1',
233
+ line1: 'address_line_1',
234
+ address_line_2: 'address_line_2',
235
+ addressLine2: 'address_line_2',
236
+ line2: 'address_line_2',
237
+ city: 'city',
238
+ town: 'city',
239
+ state: 'state',
240
+ province: 'state',
241
+ region: 'state',
242
+ zip: 'zip',
243
+ zip_code: 'zip',
244
+ postcode: 'zip',
245
+ postal_code: 'zip',
246
+ country_name: 'country_name',
247
+ country: 'country_name',
248
+ };
249
+ for (const [key, val] of Object.entries(input)) {
250
+ const normalisedKey = candidateMap[key] || key;
251
+ let strVal = getStr(val).trim();
252
+ if (strVal === '')
253
+ continue;
254
+ if (normalisedKey === 'country_name') {
255
+ if (/^[a-z]{2,3}$/i.test(strVal)) {
256
+ strVal = strVal.toUpperCase();
257
+ }
258
+ }
259
+ else if (normalisedKey === 'state') {
260
+ if (/^[a-z\-]{2,10}$/i.test(strVal)) {
261
+ strVal = strVal.toUpperCase();
262
+ }
263
+ }
264
+ out[normalisedKey] = strVal;
265
+ }
266
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Normalised object for Address field', { original: value, normalised: out });
267
+ return out;
268
+ }
269
+ if (typeof value === 'string') {
270
+ try {
271
+ const parsed = JSON.parse(value);
272
+ if (typeof parsed === 'object' && parsed !== null) {
273
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Parsed JSON string for Address field', { original: value, parsed });
274
+ return transformFieldValueForUpdate(parsed, constants_1.ASSET_LAYOUT_FIELD_TYPES.ADDRESS_DATA);
275
+ }
276
+ }
277
+ catch (error) {
278
+ throw new Error(`Invalid JSON for Address field: ${value}. Please provide a valid JSON object string. Error: ${error.message}`);
279
+ }
280
+ }
281
+ throw new Error(`Invalid value for Address field: ${value}. Expected an address object or JSON string.`);
282
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.EMAIL:
283
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.PHONE:
284
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.WEBSITE:
285
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.PASSWORD:
286
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.TEXT:
287
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.RICH_TEXT:
288
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.EMBED:
289
+ const stringResult = String(value);
290
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Converted to string for text-based field', {
291
+ fieldType: normalisedFieldType,
292
+ original: value,
293
+ converted: stringResult
294
+ });
295
+ return stringResult;
296
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.HEADING:
297
+ throw new Error(`Heading fields cannot be updated. Field type '${normalisedFieldType}' is for display purposes only.`);
298
+ case constants_1.ASSET_LAYOUT_FIELD_TYPES.DROPDOWN:
299
+ throw new Error(`Dropdown fields cannot be updated via the API. Please convert the field to a List type in Hudu to enable API updates.`);
300
+ default:
301
+ (0, debugConfig_1.debugLog)('[RESOURCE_TRANSFORM] Unknown field type, defaulting to string conversion', {
302
+ fieldType: normalisedFieldType,
303
+ originalFieldType: fieldType,
304
+ value
305
+ });
306
+ return String(value);
307
+ }
308
+ }
309
+ async function updateAssetWithMappedFields(context, assetId, companyId, mappedFields, itemIndex) {
310
+ (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Preparing to update asset with mapped fields', { assetId, companyId, mappedFields });
311
+ const assetPayload = {};
312
+ for (const [key, value] of Object.entries(mappedFields)) {
313
+ assetPayload[key] = value;
314
+ }
315
+ const payload = { asset: assetPayload };
316
+ (0, debugConfig_1.debugLog)('[RESOURCE_PROCESSING] Final update payload', payload);
317
+ const endpoint = `/companies/${companyId}/assets/${assetId}`;
318
+ try {
319
+ (0, debugConfig_1.debugLog)('[API_REQUEST] Sending asset update request', { endpoint, payload });
320
+ const response = await requestUtils_1.huduApiRequest.call(context, 'PUT', endpoint, payload);
321
+ (0, debugConfig_1.debugLog)('[API_RESPONSE] Asset update response received', response);
322
+ return response;
323
+ }
324
+ catch (error) {
325
+ (0, debugConfig_1.debugLog)('[API_RESPONSE] Asset update failed', { error });
326
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Failed to update asset with ID '${assetId}': ${error.message}`, { itemIndex });
327
+ }
328
+ }
273
329
  //# sourceMappingURL=assetFieldUtils.js.map