@limetech/n8n-nodes-lime 2.3.1-dev.1 → 2.5.0-dev.2

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 (287) hide show
  1. package/.github/workflows/lint.yml +1 -1
  2. package/.github/workflows/release.yml +16 -2
  3. package/.github/workflows/test-and-build.yml +0 -15
  4. package/.releaserc.json +1 -0
  5. package/CHANGELOG.md +42 -2
  6. package/dist/credentials/FortnoxApi.credentials.d.ts +9 -0
  7. package/dist/credentials/FortnoxApi.credentials.js +57 -0
  8. package/dist/credentials/FortnoxApi.credentials.js.map +1 -0
  9. package/dist/credentials/LimeCrmApi.credentials.d.ts +9 -0
  10. package/dist/credentials/LimeCrmApi.credentials.js +70 -0
  11. package/dist/credentials/LimeCrmApi.credentials.js.map +1 -0
  12. package/dist/credentials/index.d.ts +2 -0
  13. package/dist/credentials/index.js +19 -0
  14. package/dist/credentials/index.js.map +1 -0
  15. package/dist/nodes/errorHandling.d.ts +11 -0
  16. package/dist/nodes/errorHandling.js +20 -0
  17. package/dist/nodes/errorHandling.js.map +1 -0
  18. package/dist/nodes/fortnox/Fortnox.node.d.ts +5 -0
  19. package/dist/nodes/fortnox/Fortnox.node.js +95 -0
  20. package/dist/nodes/fortnox/Fortnox.node.js.map +1 -0
  21. package/dist/nodes/fortnox/Fortnox.node.json +18 -0
  22. package/dist/nodes/fortnox/FortnoxTrigger.node.d.ts +5 -0
  23. package/dist/nodes/fortnox/FortnoxTrigger.node.js +155 -0
  24. package/dist/nodes/fortnox/FortnoxTrigger.node.js.map +1 -0
  25. package/dist/nodes/fortnox/FortnoxTrigger.node.json +18 -0
  26. package/dist/nodes/fortnox/commons.d.ts +25 -0
  27. package/dist/nodes/fortnox/commons.js +44 -0
  28. package/dist/nodes/fortnox/commons.js.map +1 -0
  29. package/dist/nodes/fortnox/fortnoxLogo.svg +15 -0
  30. package/dist/nodes/fortnox/index.d.ts +6 -0
  31. package/dist/nodes/fortnox/index.js +23 -0
  32. package/dist/nodes/fortnox/index.js.map +1 -0
  33. package/dist/nodes/fortnox/model.d.ts +20 -0
  34. package/dist/nodes/fortnox/model.js +3 -0
  35. package/dist/nodes/fortnox/model.js.map +1 -0
  36. package/dist/nodes/fortnox/resources/customers/filterParameters.d.ts +2 -0
  37. package/dist/nodes/fortnox/resources/customers/filterParameters.js +31 -0
  38. package/dist/nodes/fortnox/resources/customers/filterParameters.js.map +1 -0
  39. package/dist/nodes/fortnox/resources/customers/index.d.ts +7 -0
  40. package/dist/nodes/fortnox/resources/customers/index.js +85 -0
  41. package/dist/nodes/fortnox/resources/customers/index.js.map +1 -0
  42. package/dist/nodes/fortnox/resources/customers/model.d.ts +99 -0
  43. package/dist/nodes/fortnox/resources/customers/model.js +3 -0
  44. package/dist/nodes/fortnox/resources/customers/model.js.map +1 -0
  45. package/dist/nodes/fortnox/resources/customers/operations/create.operation.d.ts +10 -0
  46. package/dist/nodes/fortnox/resources/customers/operations/create.operation.js +281 -0
  47. package/dist/nodes/fortnox/resources/customers/operations/create.operation.js.map +1 -0
  48. package/dist/nodes/fortnox/resources/customers/operations/delete.operation.d.ts +9 -0
  49. package/dist/nodes/fortnox/resources/customers/operations/delete.operation.js +38 -0
  50. package/dist/nodes/fortnox/resources/customers/operations/delete.operation.js.map +1 -0
  51. package/dist/nodes/fortnox/resources/customers/operations/get.operation.d.ts +10 -0
  52. package/dist/nodes/fortnox/resources/customers/operations/get.operation.js +38 -0
  53. package/dist/nodes/fortnox/resources/customers/operations/get.operation.js.map +1 -0
  54. package/dist/nodes/fortnox/resources/customers/operations/getAll.operation.d.ts +10 -0
  55. package/dist/nodes/fortnox/resources/customers/operations/getAll.operation.js +68 -0
  56. package/dist/nodes/fortnox/resources/customers/operations/getAll.operation.js.map +1 -0
  57. package/dist/nodes/fortnox/resources/customers/operations/index.d.ts +5 -0
  58. package/dist/nodes/fortnox/resources/customers/operations/index.js +42 -0
  59. package/dist/nodes/fortnox/resources/customers/operations/index.js.map +1 -0
  60. package/dist/nodes/fortnox/resources/customers/operations/update.operation.d.ts +10 -0
  61. package/dist/nodes/fortnox/resources/customers/operations/update.operation.js +261 -0
  62. package/dist/nodes/fortnox/resources/customers/operations/update.operation.js.map +1 -0
  63. package/dist/nodes/fortnox/resources/customers/sortParameters.d.ts +2 -0
  64. package/dist/nodes/fortnox/resources/customers/sortParameters.js +30 -0
  65. package/dist/nodes/fortnox/resources/customers/sortParameters.js.map +1 -0
  66. package/dist/nodes/fortnox/resources/invoice/filterParameters.d.ts +2 -0
  67. package/dist/nodes/fortnox/resources/invoice/filterParameters.js +72 -0
  68. package/dist/nodes/fortnox/resources/invoice/filterParameters.js.map +1 -0
  69. package/dist/nodes/fortnox/resources/invoice/index.d.ts +7 -0
  70. package/dist/nodes/fortnox/resources/invoice/index.js +81 -0
  71. package/dist/nodes/fortnox/resources/invoice/index.js.map +1 -0
  72. package/dist/nodes/fortnox/resources/invoice/invoiceParameters.d.ts +2 -0
  73. package/dist/nodes/fortnox/resources/invoice/invoiceParameters.js +193 -0
  74. package/dist/nodes/fortnox/resources/invoice/invoiceParameters.js.map +1 -0
  75. package/dist/nodes/fortnox/resources/invoice/model.d.ts +147 -0
  76. package/dist/nodes/fortnox/resources/invoice/model.js +3 -0
  77. package/dist/nodes/fortnox/resources/invoice/model.js.map +1 -0
  78. package/dist/nodes/fortnox/resources/invoice/operations/create.operation.d.ts +10 -0
  79. package/dist/nodes/fortnox/resources/invoice/operations/create.operation.js +64 -0
  80. package/dist/nodes/fortnox/resources/invoice/operations/create.operation.js.map +1 -0
  81. package/dist/nodes/fortnox/resources/invoice/operations/get.operation.d.ts +10 -0
  82. package/dist/nodes/fortnox/resources/invoice/operations/get.operation.js +37 -0
  83. package/dist/nodes/fortnox/resources/invoice/operations/get.operation.js.map +1 -0
  84. package/dist/nodes/fortnox/resources/invoice/operations/getAll.operation.d.ts +10 -0
  85. package/dist/nodes/fortnox/resources/invoice/operations/getAll.operation.js +92 -0
  86. package/dist/nodes/fortnox/resources/invoice/operations/getAll.operation.js.map +1 -0
  87. package/dist/nodes/fortnox/resources/invoice/operations/index.d.ts +4 -0
  88. package/dist/nodes/fortnox/resources/invoice/operations/index.js +41 -0
  89. package/dist/nodes/fortnox/resources/invoice/operations/index.js.map +1 -0
  90. package/dist/nodes/fortnox/resources/invoice/operations/update.operation.d.ts +10 -0
  91. package/dist/nodes/fortnox/resources/invoice/operations/update.operation.js +64 -0
  92. package/dist/nodes/fortnox/resources/invoice/operations/update.operation.js.map +1 -0
  93. package/dist/nodes/fortnox/transport/errorCodes.d.ts +1 -0
  94. package/dist/nodes/fortnox/transport/errorCodes.js +50 -0
  95. package/dist/nodes/fortnox/transport/errorCodes.js.map +1 -0
  96. package/dist/nodes/fortnox/transport/index.d.ts +3 -0
  97. package/dist/nodes/fortnox/transport/index.js +76 -0
  98. package/dist/nodes/fortnox/transport/index.js.map +1 -0
  99. package/dist/nodes/index.d.ts +4 -0
  100. package/dist/nodes/index.js +21 -0
  101. package/dist/nodes/index.js.map +1 -0
  102. package/dist/nodes/lime-crm/LimeCrm.node.json +18 -0
  103. package/dist/nodes/lime-crm/LimeCrmNode.node.d.ts +19 -0
  104. package/dist/nodes/lime-crm/LimeCrmNode.node.js +122 -0
  105. package/dist/nodes/lime-crm/LimeCrmNode.node.js.map +1 -0
  106. package/dist/nodes/lime-crm/LimeCrmTrigger.node.d.ts +18 -0
  107. package/dist/nodes/lime-crm/LimeCrmTrigger.node.js +215 -0
  108. package/dist/nodes/lime-crm/LimeCrmTrigger.node.js.map +1 -0
  109. package/dist/nodes/lime-crm/assets/lime-crm.svg +1 -0
  110. package/dist/nodes/lime-crm/index.d.ts +9 -0
  111. package/dist/nodes/lime-crm/index.js +26 -0
  112. package/dist/nodes/lime-crm/index.js.map +1 -0
  113. package/dist/nodes/lime-crm/methods/getLimetypeProperties.d.ts +5 -0
  114. package/dist/nodes/lime-crm/methods/getLimetypeProperties.js +47 -0
  115. package/dist/nodes/lime-crm/methods/getLimetypeProperties.js.map +1 -0
  116. package/dist/nodes/lime-crm/methods/getLimetypes.d.ts +2 -0
  117. package/dist/nodes/lime-crm/methods/getLimetypes.js +20 -0
  118. package/dist/nodes/lime-crm/methods/getLimetypes.js.map +1 -0
  119. package/dist/nodes/lime-crm/methods/index.d.ts +3 -0
  120. package/dist/nodes/lime-crm/methods/index.js +15 -0
  121. package/dist/nodes/lime-crm/methods/index.js.map +1 -0
  122. package/dist/nodes/lime-crm/methods/resourceMapping.d.ts +4 -0
  123. package/dist/nodes/lime-crm/methods/resourceMapping.js +71 -0
  124. package/dist/nodes/lime-crm/methods/resourceMapping.js.map +1 -0
  125. package/dist/nodes/lime-crm/models/constants.d.ts +9 -0
  126. package/dist/nodes/lime-crm/models/constants.js +10 -0
  127. package/dist/nodes/lime-crm/models/constants.js.map +1 -0
  128. package/dist/nodes/lime-crm/models/index.d.ts +6 -0
  129. package/dist/nodes/lime-crm/models/index.js +13 -0
  130. package/dist/nodes/lime-crm/models/index.js.map +1 -0
  131. package/dist/nodes/lime-crm/models/limeobject.d.ts +4 -0
  132. package/dist/nodes/lime-crm/models/limeobject.js +3 -0
  133. package/dist/nodes/lime-crm/models/limeobject.js.map +1 -0
  134. package/dist/nodes/lime-crm/models/limetype.d.ts +24 -0
  135. package/dist/nodes/lime-crm/models/limetype.js +3 -0
  136. package/dist/nodes/lime-crm/models/limetype.js.map +1 -0
  137. package/dist/nodes/lime-crm/models/propertyTypes.d.ts +4 -0
  138. package/dist/nodes/lime-crm/models/propertyTypes.js +5 -0
  139. package/dist/nodes/lime-crm/models/propertyTypes.js.map +1 -0
  140. package/dist/nodes/lime-crm/models/users.d.ts +13 -0
  141. package/dist/nodes/lime-crm/models/users.js +3 -0
  142. package/dist/nodes/lime-crm/models/users.js.map +1 -0
  143. package/dist/nodes/lime-crm/models/webhook.d.ts +18 -0
  144. package/dist/nodes/lime-crm/models/webhook.js +3 -0
  145. package/dist/nodes/lime-crm/models/webhook.js.map +1 -0
  146. package/dist/nodes/lime-crm/resources/admin/index.d.ts +7 -0
  147. package/dist/nodes/lime-crm/resources/admin/index.js +89 -0
  148. package/dist/nodes/lime-crm/resources/admin/index.js.map +1 -0
  149. package/dist/nodes/lime-crm/resources/admin/operations/getManyUsers.operation.d.ts +11 -0
  150. package/dist/nodes/lime-crm/resources/admin/operations/getManyUsers.operation.js +123 -0
  151. package/dist/nodes/lime-crm/resources/admin/operations/getManyUsers.operation.js.map +1 -0
  152. package/dist/nodes/lime-crm/resources/admin/operations/getSingleUser.operation.d.ts +11 -0
  153. package/dist/nodes/lime-crm/resources/admin/operations/getSingleUser.operation.js +87 -0
  154. package/dist/nodes/lime-crm/resources/admin/operations/getSingleUser.operation.js.map +1 -0
  155. package/dist/nodes/lime-crm/resources/admin/operations/index.d.ts +2 -0
  156. package/dist/nodes/lime-crm/resources/admin/operations/index.js +39 -0
  157. package/dist/nodes/lime-crm/resources/admin/operations/index.js.map +1 -0
  158. package/dist/nodes/lime-crm/resources/data/index.d.ts +7 -0
  159. package/dist/nodes/lime-crm/resources/data/index.js +108 -0
  160. package/dist/nodes/lime-crm/resources/data/index.js.map +1 -0
  161. package/dist/nodes/lime-crm/resources/data/operations/createSingleObject.operation.d.ts +11 -0
  162. package/dist/nodes/lime-crm/resources/data/operations/createSingleObject.operation.js +124 -0
  163. package/dist/nodes/lime-crm/resources/data/operations/createSingleObject.operation.js.map +1 -0
  164. package/dist/nodes/lime-crm/resources/data/operations/deleteSingleObject.operation.d.ts +10 -0
  165. package/dist/nodes/lime-crm/resources/data/operations/deleteSingleObject.operation.js +52 -0
  166. package/dist/nodes/lime-crm/resources/data/operations/deleteSingleObject.operation.js.map +1 -0
  167. package/dist/nodes/lime-crm/resources/data/operations/getManyObjects.operation.d.ts +11 -0
  168. package/dist/nodes/lime-crm/resources/data/operations/getManyObjects.operation.js +299 -0
  169. package/dist/nodes/lime-crm/resources/data/operations/getManyObjects.operation.js.map +1 -0
  170. package/dist/nodes/lime-crm/resources/data/operations/getSingleFile.operation.d.ts +9 -0
  171. package/dist/nodes/lime-crm/resources/data/operations/getSingleFile.operation.js +125 -0
  172. package/dist/nodes/lime-crm/resources/data/operations/getSingleFile.operation.js.map +1 -0
  173. package/dist/nodes/lime-crm/resources/data/operations/getSingleObject.operation.d.ts +11 -0
  174. package/dist/nodes/lime-crm/resources/data/operations/getSingleObject.operation.js +79 -0
  175. package/dist/nodes/lime-crm/resources/data/operations/getSingleObject.operation.js.map +1 -0
  176. package/dist/nodes/lime-crm/resources/data/operations/index.d.ts +6 -0
  177. package/dist/nodes/lime-crm/resources/data/operations/index.js +43 -0
  178. package/dist/nodes/lime-crm/resources/data/operations/index.js.map +1 -0
  179. package/dist/nodes/lime-crm/resources/data/operations/updateSingleObject.operation.d.ts +11 -0
  180. package/dist/nodes/lime-crm/resources/data/operations/updateSingleObject.operation.js +146 -0
  181. package/dist/nodes/lime-crm/resources/data/operations/updateSingleObject.operation.js.map +1 -0
  182. package/dist/nodes/lime-crm/resources/metadata/index.d.ts +7 -0
  183. package/dist/nodes/lime-crm/resources/metadata/index.js +93 -0
  184. package/dist/nodes/lime-crm/resources/metadata/index.js.map +1 -0
  185. package/dist/nodes/lime-crm/resources/metadata/operations/getAllLimetypes.operation.d.ts +10 -0
  186. package/dist/nodes/lime-crm/resources/metadata/operations/getAllLimetypes.operation.js +16 -0
  187. package/dist/nodes/lime-crm/resources/metadata/operations/getAllLimetypes.operation.js.map +1 -0
  188. package/dist/nodes/lime-crm/resources/metadata/operations/getSingleFileMetadata.operation.d.ts +11 -0
  189. package/dist/nodes/lime-crm/resources/metadata/operations/getSingleFileMetadata.operation.js +113 -0
  190. package/dist/nodes/lime-crm/resources/metadata/operations/getSingleFileMetadata.operation.js.map +1 -0
  191. package/dist/nodes/lime-crm/resources/metadata/operations/getSingleLimetype.operation.d.ts +11 -0
  192. package/dist/nodes/lime-crm/resources/metadata/operations/getSingleLimetype.operation.js +37 -0
  193. package/dist/nodes/lime-crm/resources/metadata/operations/getSingleLimetype.operation.js.map +1 -0
  194. package/dist/nodes/lime-crm/resources/metadata/operations/index.d.ts +3 -0
  195. package/dist/nodes/lime-crm/resources/metadata/operations/index.js +40 -0
  196. package/dist/nodes/lime-crm/resources/metadata/operations/index.js.map +1 -0
  197. package/dist/nodes/lime-crm/transport/commons.d.ts +14 -0
  198. package/dist/nodes/lime-crm/transport/commons.js +52 -0
  199. package/dist/nodes/lime-crm/transport/commons.js.map +1 -0
  200. package/dist/nodes/lime-crm/transport/files.d.ts +26 -0
  201. package/dist/nodes/lime-crm/transport/files.js +96 -0
  202. package/dist/nodes/lime-crm/transport/files.js.map +1 -0
  203. package/dist/nodes/lime-crm/transport/index.d.ts +7 -0
  204. package/dist/nodes/lime-crm/transport/index.js +32 -0
  205. package/dist/nodes/lime-crm/transport/index.js.map +1 -0
  206. package/dist/nodes/lime-crm/transport/limeQuery.d.ts +10 -0
  207. package/dist/nodes/lime-crm/transport/limeQuery.js +18 -0
  208. package/dist/nodes/lime-crm/transport/limeQuery.js.map +1 -0
  209. package/dist/nodes/lime-crm/transport/limeobjects.d.ts +16 -0
  210. package/dist/nodes/lime-crm/transport/limeobjects.js +76 -0
  211. package/dist/nodes/lime-crm/transport/limeobjects.js.map +1 -0
  212. package/dist/nodes/lime-crm/transport/limetypes.d.ts +33 -0
  213. package/dist/nodes/lime-crm/transport/limetypes.js +85 -0
  214. package/dist/nodes/lime-crm/transport/limetypes.js.map +1 -0
  215. package/dist/nodes/lime-crm/transport/users.d.ts +6 -0
  216. package/dist/nodes/lime-crm/transport/users.js +159 -0
  217. package/dist/nodes/lime-crm/transport/users.js.map +1 -0
  218. package/dist/nodes/lime-crm/transport/webhooks.d.ts +14 -0
  219. package/dist/nodes/lime-crm/transport/webhooks.js +51 -0
  220. package/dist/nodes/lime-crm/transport/webhooks.js.map +1 -0
  221. package/dist/nodes/lime-crm/utils/files.d.ts +8 -0
  222. package/dist/nodes/lime-crm/utils/files.js +103 -0
  223. package/dist/nodes/lime-crm/utils/files.js.map +1 -0
  224. package/dist/nodes/lime-crm/utils/hmac.d.ts +1 -0
  225. package/dist/nodes/lime-crm/utils/hmac.js +11 -0
  226. package/dist/nodes/lime-crm/utils/hmac.js.map +1 -0
  227. package/dist/nodes/lime-crm/utils/index.d.ts +4 -0
  228. package/dist/nodes/lime-crm/utils/index.js +16 -0
  229. package/dist/nodes/lime-crm/utils/index.js.map +1 -0
  230. package/dist/nodes/lime-crm/utils/webhook.d.ts +2 -0
  231. package/dist/nodes/lime-crm/utils/webhook.js +34 -0
  232. package/dist/nodes/lime-crm/utils/webhook.js.map +1 -0
  233. package/dist/nodes/modules.d.ts +12 -0
  234. package/dist/nodes/modules.js +16 -0
  235. package/dist/nodes/modules.js.map +1 -0
  236. package/dist/nodes/response.d.ts +18 -0
  237. package/dist/nodes/response.js +3 -0
  238. package/dist/nodes/response.js.map +1 -0
  239. package/dist/package.json +69 -0
  240. package/dist/tsconfig.tsbuildinfo +1 -0
  241. package/nodes/errorHandling.ts +60 -0
  242. package/nodes/lime-crm/LimeCrmNode.node.ts +8 -0
  243. package/nodes/lime-crm/LimeCrmTrigger.node.ts +19 -5
  244. package/nodes/lime-crm/methods/getLimetypeProperties.ts +3 -1
  245. package/nodes/lime-crm/methods/getLimetypes.ts +2 -1
  246. package/nodes/lime-crm/methods/index.ts +5 -0
  247. package/nodes/lime-crm/methods/resourceMapping.ts +141 -0
  248. package/nodes/lime-crm/models/limetype.ts +18 -0
  249. package/nodes/lime-crm/resources/admin/index.ts +9 -4
  250. package/nodes/lime-crm/resources/admin/operations/getManyUsers.operation.ts +10 -2
  251. package/nodes/lime-crm/resources/admin/operations/getSingleUser.operation.ts +14 -15
  252. package/nodes/lime-crm/resources/data/index.ts +15 -6
  253. package/nodes/lime-crm/resources/data/operations/createSingleObject.operation.ts +25 -71
  254. package/nodes/lime-crm/resources/data/operations/deleteSingleObject.operation.ts +7 -2
  255. package/nodes/lime-crm/resources/data/operations/getManyObjects.operation.ts +6 -2
  256. package/nodes/lime-crm/resources/data/operations/getSingleFile.operation.ts +15 -3
  257. package/nodes/lime-crm/resources/data/operations/getSingleObject.operation.ts +15 -6
  258. package/nodes/lime-crm/resources/data/operations/updateSingleObject.operation.ts +41 -57
  259. package/nodes/lime-crm/resources/metadata/index.ts +7 -3
  260. package/nodes/lime-crm/resources/metadata/operations/getAllLimetypes.operation.ts +6 -2
  261. package/nodes/lime-crm/resources/metadata/operations/getSingleFileMetadata.operation.ts +18 -15
  262. package/nodes/lime-crm/resources/metadata/operations/getSingleLimetype.operation.ts +8 -3
  263. package/nodes/lime-crm/transport/commons.ts +34 -20
  264. package/nodes/lime-crm/transport/files.ts +72 -47
  265. package/nodes/lime-crm/transport/limeQuery.ts +2 -2
  266. package/nodes/lime-crm/transport/limeobjects.ts +22 -10
  267. package/nodes/lime-crm/transport/limetypes.ts +37 -16
  268. package/nodes/lime-crm/transport/users.ts +74 -38
  269. package/nodes/lime-crm/transport/webhooks.ts +5 -4
  270. package/nodes/lime-crm/utils/files.ts +27 -10
  271. package/nodes/lime-crm/utils/index.ts +1 -1
  272. package/nodes/response.ts +41 -3
  273. package/package.json +4 -2
  274. package/tests/nodes/lime-crm/methods.spec.ts +91 -0
  275. package/tests/nodes/lime-crm/utils.spec.ts +60 -25
  276. package/nodes/lime-crm/utils/propertyAdapters.ts +0 -75
  277. package/restore_script/README +0 -42
  278. package/restore_script/api_key_upload.txt +0 -0
  279. package/restore_script/cli.py +0 -73
  280. package/restore_script/download.py +0 -73
  281. package/restore_script/main.py +0 -19
  282. package/restore_script/poetry.lock +0 -162
  283. package/restore_script/pyproject.toml +0 -15
  284. package/restore_script/transfer.py +0 -41
  285. package/restore_script/upload.py +0 -66
  286. package/restore_script/utils.py +0 -42
  287. /package/{restore_script/api_key_download.txt → Dockerfile} +0 -0
@@ -2,6 +2,7 @@ import { callLimeApi } from '.';
2
2
  import { IAllExecuteFunctions } from 'n8n-workflow';
3
3
  import { removeKeys } from './commons';
4
4
  import { Limetype, LimetypeProperty } from '../models';
5
+ import { APIResponse } from '../../response';
5
6
 
6
7
  /**
7
8
  * Endpoint path for Lime CRM Limetype API.
@@ -113,7 +114,7 @@ function deserializeLimetype(limetype: LimetypeCrmApiResponse): Limetype {
113
114
  */
114
115
  export async function getLimetypesFromApi(
115
116
  nodeContext: IAllExecuteFunctions
116
- ): Promise<Limetype[]> {
117
+ ): Promise<APIResponse<Limetype[]>> {
117
118
  const response = await callLimeApi<LimetypesCrmApiResponse>(nodeContext, {
118
119
  method: 'GET',
119
120
  url: LIMETYPE_URL,
@@ -123,7 +124,16 @@ export async function getLimetypesFromApi(
123
124
  },
124
125
  },
125
126
  });
126
- return response._embedded?.limetypes.map(deserializeLimetype) || [];
127
+ if (response.success) {
128
+ return {
129
+ success: true,
130
+ data:
131
+ response.data._embedded?.limetypes.map(deserializeLimetype) ||
132
+ [],
133
+ };
134
+ } else {
135
+ return response;
136
+ }
127
137
  }
128
138
 
129
139
  /**
@@ -139,7 +149,7 @@ export async function getLimetypesFromApi(
139
149
  export async function getLimetype(
140
150
  nodeContext: IAllExecuteFunctions,
141
151
  limetype: string
142
- ): Promise<Limetype> {
152
+ ): Promise<APIResponse<Limetype>> {
143
153
  const url = `${LIMETYPE_URL}${limetype}/`;
144
154
  const response = await callLimeApi<LimetypeCrmApiResponse>(nodeContext, {
145
155
  method: 'GET',
@@ -150,8 +160,14 @@ export async function getLimetype(
150
160
  },
151
161
  },
152
162
  });
153
-
154
- return deserializeLimetype(response);
163
+ if (response.success) {
164
+ return {
165
+ success: true,
166
+ data: deserializeLimetype(response.data),
167
+ };
168
+ } else {
169
+ return response;
170
+ }
155
171
  }
156
172
 
157
173
  /**
@@ -167,7 +183,7 @@ export async function getLimetype(
167
183
  export async function getProperties(
168
184
  nodeContext: IAllExecuteFunctions,
169
185
  limetype: string
170
- ): Promise<LimetypeProperty[]> {
186
+ ): Promise<APIResponse<LimetypeProperty[]>> {
171
187
  const url = `${LIMETYPE_URL}${limetype}/`;
172
188
  const response = await callLimeApi<LimetypePropertiesApiResponse>(
173
189
  nodeContext,
@@ -184,14 +200,19 @@ export async function getProperties(
184
200
  },
185
201
  }
186
202
  );
187
-
188
- return (
189
- response._embedded.properties.map(
190
- (property) =>
191
- removeKeys(property, [
192
- '_links',
193
- '_embedded',
194
- ]) as LimetypeProperty
195
- ) || []
196
- );
203
+ if (response.success) {
204
+ return {
205
+ success: true,
206
+ data:
207
+ response.data._embedded.properties.map(
208
+ (property) =>
209
+ removeKeys(property, [
210
+ '_links',
211
+ '_embedded',
212
+ ]) as LimetypeProperty
213
+ ) || [],
214
+ };
215
+ } else {
216
+ return response;
217
+ }
197
218
  }
@@ -2,7 +2,7 @@ import { callLimeApi } from './commons';
2
2
  import {
3
3
  IAllExecuteFunctions,
4
4
  LoggerProxy as Logger,
5
- NodeOperationError,
5
+ NodeApiError,
6
6
  } from 'n8n-workflow';
7
7
  import {
8
8
  User,
@@ -14,7 +14,8 @@ import {
14
14
  import { getLimetypesFromApi } from './limetypes';
15
15
  import { queryLimeobjects, QueryResponse } from './limeQuery';
16
16
  import { getLimeobject } from './limeobjects';
17
-
17
+ import { APIResponse } from '../../response';
18
+ import { handleWorkflowError } from '../../errorHandling';
18
19
  const USERS_URL = 'api/v1/admin/users/';
19
20
 
20
21
  type UserQueryParameters = {
@@ -49,21 +50,30 @@ function findCoworkerLimetype(limetypes: Limetype[]): Limetype | undefined {
49
50
  *
50
51
  * @param nodeContext - The n8n execution context
51
52
  * @returns The coworker limetype object
52
- * @throws NodeOperationError if no coworker limetype is found
53
+ * @throws NodeApiError if no coworker limetype is found
53
54
  * @internal
54
55
  */
55
56
  async function findCoworker(
56
57
  nodeContext: IAllExecuteFunctions
57
- ): Promise<Limetype> {
58
+ ): Promise<APIResponse<Limetype>> {
58
59
  const response = await getLimetypesFromApi(nodeContext);
59
- const coworker = findCoworkerLimetype(response);
60
+ if (!response.success) {
61
+ return response;
62
+ }
63
+ const coworker = findCoworkerLimetype(response.data);
60
64
  if (!coworker) {
61
- throw new NodeOperationError(
62
- nodeContext.getNode(),
63
- `No limetype with 'user' property found to get coworker`
65
+ return handleWorkflowError(
66
+ nodeContext,
67
+ {
68
+ message: `No limetype with 'user' property found to get coworker`,
69
+ },
70
+ true
64
71
  );
65
72
  }
66
- return coworker;
73
+ return {
74
+ success: true,
75
+ data: coworker,
76
+ };
67
77
  }
68
78
 
69
79
  /**
@@ -73,14 +83,14 @@ async function findCoworker(
73
83
  * @param coworker - The limetype definition for the coworker
74
84
  * @param userId - The ID of the user whose coworker data is to be fetched
75
85
  * @returns The coworker data response from the Lime Query API
76
- * @throws NodeOperationError if no 'user' property is found in the coworker limetype
86
+ * @throws NodeApiError' property is found in the coworker limetype
77
87
  * @internal
78
88
  */
79
89
  async function getCoworker(
80
90
  nodeContext: IAllExecuteFunctions,
81
91
  coworker: Limetype,
82
92
  userId: string | number
83
- ): Promise<QueryResponse> {
93
+ ): Promise<APIResponse<QueryResponse>> {
84
94
  // 'hasmany' properties are not supported in the response format of Lime Query API
85
95
  const properties = Object.fromEntries(
86
96
  coworker.properties
@@ -92,10 +102,9 @@ async function getCoworker(
92
102
  (prop) => prop.type === 'user'
93
103
  );
94
104
  if (!userProperty) {
95
- throw new NodeOperationError(
96
- nodeContext.getNode(),
97
- `No property of type 'user' found in ${coworker.name} limetype`
98
- );
105
+ throw new NodeApiError(nodeContext.getNode(), {
106
+ message: `No property of type 'user' found in ${coworker.name} limetype`,
107
+ });
99
108
  }
100
109
 
101
110
  const responseFormat = {
@@ -135,7 +144,7 @@ export async function fetchManyUsers(
135
144
  userType: UserType | NullOptionType = '',
136
145
  limit: number = DEFAULT_API_OBJECT_LIMIT,
137
146
  withCoworker: boolean = false
138
- ): Promise<User[]> {
147
+ ): Promise<APIResponse<User[]>> {
139
148
  const queryParams: UserQueryParameters = {
140
149
  _limit: limit,
141
150
  };
@@ -154,23 +163,31 @@ export async function fetchManyUsers(
154
163
  },
155
164
  });
156
165
 
157
- if (!withCoworker) return response;
158
- const coworker = await findCoworker(nodeContext);
166
+ if (!response.success || !withCoworker) return response;
167
+
168
+ const coworkerLimetypeResponse = await findCoworker(nodeContext);
169
+ if (!coworkerLimetypeResponse.success) return coworkerLimetypeResponse;
170
+
171
+ const coworkerLimetype = coworkerLimetypeResponse.data;
159
172
 
160
173
  const usersWithCoworkers: User[] = [];
161
- for (const user of response) {
174
+ for (const user of response.data) {
162
175
  const coworkerResponse = await getCoworker(
163
176
  nodeContext,
164
- coworker,
177
+ coworkerLimetype,
165
178
  user.id
166
179
  );
180
+ if (!coworkerResponse.success) return coworkerResponse;
167
181
  usersWithCoworkers.push({
168
182
  ...user,
169
- [coworker.name]: coworkerResponse.objects[0] || null,
183
+ [coworkerLimetype.name]: coworkerResponse.data.objects[0] || null,
170
184
  });
171
185
  }
172
186
 
173
- return usersWithCoworkers;
187
+ return {
188
+ success: true,
189
+ data: usersWithCoworkers,
190
+ };
174
191
  }
175
192
 
176
193
  /**
@@ -189,7 +206,7 @@ export async function fetchSingleUserById(
189
206
  nodeContext: IAllExecuteFunctions,
190
207
  id: string,
191
208
  withCoworker: boolean = false
192
- ): Promise<User> {
209
+ ): Promise<APIResponse<User>> {
193
210
  const url = `${USERS_URL}${id}`;
194
211
  const userResponse = await callLimeApi<User>(nodeContext, {
195
212
  method: 'GET',
@@ -199,13 +216,21 @@ export async function fetchSingleUserById(
199
216
  },
200
217
  });
201
218
 
202
- if (!withCoworker) return userResponse;
203
- const coworker = await findCoworker(nodeContext);
204
- const coworkerResponse = await getCoworker(nodeContext, coworker, id);
219
+ if (!userResponse.success || !withCoworker) return userResponse;
220
+ const coworkerLimetypeResponse = await findCoworker(nodeContext);
221
+ if (!coworkerLimetypeResponse.success) return coworkerLimetypeResponse;
222
+
223
+ const coworkerResponse = await getCoworker(
224
+ nodeContext,
225
+ coworkerLimetypeResponse.data,
226
+ id
227
+ );
228
+ if (!coworkerResponse.success) return coworkerResponse;
205
229
 
206
230
  return {
207
231
  ...userResponse,
208
- [coworker.name]: coworkerResponse.objects[0] || null,
232
+ [coworkerLimetypeResponse.data.name]:
233
+ coworkerResponse.data.objects[0] || null,
209
234
  };
210
235
  }
211
236
 
@@ -228,25 +253,33 @@ export async function fetchSingleUserByLimeobjectId(
228
253
  nodeContext: IAllExecuteFunctions,
229
254
  id: string,
230
255
  withCoworker: boolean = false
231
- ): Promise<User> {
232
- const coworker = await findCoworker(nodeContext);
256
+ ): Promise<APIResponse<User>> {
257
+ const coworkerLimetypeResponse = await findCoworker(nodeContext);
258
+ if (!coworkerLimetypeResponse.success) return coworkerLimetypeResponse;
259
+
260
+ const coworkerLimetype = coworkerLimetypeResponse.data;
261
+
233
262
  const coworkerResponse = await getLimeobject(
234
263
  nodeContext,
235
- coworker.name,
264
+ coworkerLimetype.name,
236
265
  id
237
266
  );
267
+ if (!coworkerResponse.success) return coworkerResponse;
238
268
 
239
- const userProperty = coworker.properties.find(
269
+ const userProperty = coworkerLimetype.properties.find(
240
270
  (prop) => prop.type === 'user'
241
271
  );
242
272
  if (!userProperty) {
243
- throw new NodeOperationError(
244
- nodeContext.getNode(),
245
- `No property of type 'user' found in ${coworker.name} limetype`
273
+ return handleWorkflowError(
274
+ nodeContext,
275
+ {
276
+ message: `No property of type 'user' found in ${coworkerLimetype.name} limetype`,
277
+ },
278
+ true
246
279
  );
247
280
  }
248
281
 
249
- const url = `${USERS_URL}${coworkerResponse[userProperty.name]}`;
282
+ const url = `${USERS_URL}${coworkerResponse.data[userProperty.name]}`;
250
283
  const userResponse = await callLimeApi<User>(nodeContext, {
251
284
  method: 'GET',
252
285
  url: url,
@@ -255,10 +288,13 @@ export async function fetchSingleUserByLimeobjectId(
255
288
  },
256
289
  });
257
290
 
258
- if (!withCoworker) return userResponse;
291
+ if (!userResponse.success || !withCoworker) return userResponse;
259
292
 
260
293
  return {
261
- ...userResponse,
262
- [coworker.name]: coworkerResponse || null,
294
+ success: true,
295
+ data: {
296
+ ...userResponse.data,
297
+ [coworkerLimetype.name]: coworkerResponse.data || null,
298
+ },
263
299
  };
264
300
  }
@@ -1,6 +1,7 @@
1
1
  import { callLimeApi } from '.';
2
2
  import { IAllExecuteFunctions } from 'n8n-workflow';
3
3
  import { CreateWebhook, Webhook } from '../models';
4
+ import { APIResponse } from '../../response';
4
5
 
5
6
  /**
6
7
  * Endpoint path for Lime CRM Subscription API.
@@ -44,7 +45,7 @@ export interface ApiResponseWebhook {
44
45
  export async function getSubscription(
45
46
  nodeContext: IAllExecuteFunctions,
46
47
  webhook: Webhook
47
- ): Promise<ApiResponseWebhook> {
48
+ ): Promise<APIResponse<ApiResponseWebhook>> {
48
49
  return await callLimeApi(nodeContext, {
49
50
  method: 'GET',
50
51
  url: `${SUBSCRIPTION_URL}${webhook.data.webhookId}`,
@@ -65,7 +66,7 @@ export async function getSubscription(
65
66
  export async function listSubscriptionsWithExistingData(
66
67
  nodeContext: IAllExecuteFunctions,
67
68
  webhook: Webhook
68
- ): Promise<ApiResponseWebhook[]> {
69
+ ): Promise<APIResponse<ApiResponseWebhook[]>> {
69
70
  return await callLimeApi(nodeContext, {
70
71
  method: 'GET',
71
72
  url: SUBSCRIPTION_URL,
@@ -93,7 +94,7 @@ export async function listSubscriptionsWithExistingData(
93
94
  export async function createSubscription(
94
95
  nodeContext: IAllExecuteFunctions,
95
96
  webhook: CreateWebhook
96
- ): Promise<ApiResponseWebhook> {
97
+ ): Promise<APIResponse<ApiResponseWebhook>> {
97
98
  return await callLimeApi(nodeContext, {
98
99
  method: 'POST',
99
100
  url: SUBSCRIPTION_URL,
@@ -122,7 +123,7 @@ export async function createSubscription(
122
123
  export async function deleteSubscription(
123
124
  nodeContext: IAllExecuteFunctions,
124
125
  webhook: Webhook
125
- ): Promise<void> {
126
+ ): Promise<APIResponse<void>> {
126
127
  return await callLimeApi(nodeContext, {
127
128
  method: 'DELETE',
128
129
  url: `${SUBSCRIPTION_URL}${webhook.data.webhookId}/`,
@@ -5,7 +5,7 @@ import {
5
5
  LoggerProxy as Logger,
6
6
  } from 'n8n-workflow';
7
7
  import { createFile, getFileContent, getFileMetadata } from '../transport';
8
- import { FileResponse } from '../../response';
8
+ import { APIResponse, FileAPIResponse } from '../../response';
9
9
  import { LimetypeProperty } from '../models';
10
10
 
11
11
  /**
@@ -121,7 +121,7 @@ export async function setFileProperties(
121
121
  i: number,
122
122
  fileProperties: Set<string>,
123
123
  definedProperties: IDataObject
124
- ): Promise<IDataObject> {
124
+ ): Promise<APIResponse<IDataObject>> {
125
125
  for (const fileProperty of fileProperties) {
126
126
  if (!(fileProperty in definedProperties)) continue;
127
127
  let binaryData: IBinaryData;
@@ -146,9 +146,14 @@ export async function setFileProperties(
146
146
  definedProperties[fileProperty] as string
147
147
  );
148
148
 
149
- definedProperties[fileProperty] = response.id;
149
+ if (response.success) {
150
+ definedProperties[fileProperty] = response.data.id;
151
+ } else return response;
150
152
  }
151
- return definedProperties;
153
+ return {
154
+ success: true,
155
+ data: definedProperties,
156
+ };
152
157
  }
153
158
 
154
159
  /**
@@ -159,7 +164,7 @@ export async function setFileProperties(
159
164
  * @param data - The record data containing property values to process
160
165
  * @param includeFileContent - Whether to include the actual file content in the response. Defaults to `false`
161
166
  *
162
- * @returns A {@link FileResponse} object containing updated JSON data and, if requested, the associated binary files.
167
+ * @returns A {@link FileAPIResponse} object containing updated JSON data and, if requested, the associated binary files.
163
168
  *
164
169
  * @public
165
170
  * @group Utils
@@ -169,7 +174,7 @@ export async function processFileResponse<T extends Record<string, unknown>>(
169
174
  fileProperties: Set<string>,
170
175
  data: T,
171
176
  includeFileContent: boolean = false
172
- ): Promise<FileResponse<T>> {
177
+ ): Promise<FileAPIResponse<T>> {
173
178
  let updatedData = { ...data };
174
179
  const binaryData: Record<string, IBinaryData> = {};
175
180
  for (const fileProperty of fileProperties) {
@@ -178,21 +183,33 @@ export async function processFileResponse<T extends Record<string, unknown>>(
178
183
  nodeContext,
179
184
  data[fileProperty] as string
180
185
  );
186
+ if (!fileMetadataResponse.success)
187
+ return {
188
+ json: fileMetadataResponse,
189
+ };
181
190
 
182
191
  updatedData = {
183
192
  ...updatedData,
184
- [fileProperty]: fileMetadataResponse,
193
+ [fileProperty]: fileMetadataResponse.data,
185
194
  };
186
195
 
187
196
  if (includeFileContent) {
188
- binaryData[fileProperty] = await getFileContent(
197
+ const fileContentResponse = await getFileContent(
189
198
  nodeContext,
190
- fileMetadataResponse.id
199
+ fileMetadataResponse.data.id
191
200
  );
201
+ if (fileContentResponse.success) {
202
+ binaryData[fileProperty] = fileContentResponse.data;
203
+ } else {
204
+ return { json: fileContentResponse };
205
+ }
192
206
  }
193
207
  }
194
208
  return {
195
- json: updatedData,
209
+ json: {
210
+ success: true,
211
+ data: updatedData,
212
+ },
196
213
  binary: binaryData,
197
214
  };
198
215
  }
@@ -7,4 +7,4 @@ export {
7
7
  } from './files';
8
8
  export { verifyHmac } from './hmac';
9
9
  export { getWebhook } from './webhook';
10
- export { adaptProperty, getPropertyType } from './propertyAdapters';
10
+ export { handleWorkflowError, WorkflowErrorContext } from '../../errorHandling';
package/nodes/response.ts CHANGED
@@ -1,16 +1,54 @@
1
1
  import { IBinaryData } from 'n8n-workflow';
2
+ import { ErrorResponse, WorkflowErrorContext } from './errorHandling';
3
+
4
+ /**
5
+ * Wrapper for successful response
6
+ */
7
+ export type SuccessResponse<T> = {
8
+ success: true;
9
+ data: T;
10
+ };
11
+
12
+ /**
13
+ * Generic wrapper used for describing the data we are returning from workflow
14
+ * execution for the user
15
+ */
16
+ export type WorkflowResponse<T> = T | { error: WorkflowErrorContext };
17
+
18
+ /**
19
+ * Generic wrapper used for describing the data we are getting from the
20
+ * external API layer
21
+ */
22
+ export type APIResponse<T> = SuccessResponse<T> | ErrorResponse;
23
+
24
+ /**
25
+ * Response object that includes both JSON data and optional binary file content.
26
+ * Works in communication layer
27
+ *
28
+ * @typeParam T - The shape of the JSON data returned in the response
29
+ * @property json - The {@link APIResponse} object, containing structured JSON data.
30
+ * @property binary - An optional record of binary file data
31
+ *
32
+ * @public
33
+ * @group Response
34
+ */
35
+ export type FileAPIResponse<T> = {
36
+ json: APIResponse<T>;
37
+ binary?: Record<string, IBinaryData>;
38
+ };
2
39
 
3
40
  /**
4
41
  * Response object that includes both JSON data and optional binary file content.
42
+ * Works in user interface layer
5
43
  *
6
44
  * @typeParam T - The shape of the JSON data returned in the response
7
- * @property json - The n8n node response, containing structured JSON data.
45
+ * @property json - The {@link WorflowResponse} object, containing structured JSON data.
8
46
  * @property binary - An optional record of binary file data
9
47
  *
10
48
  * @public
11
49
  * @group Response
12
50
  */
13
- export type FileResponse<T> = {
14
- json: T;
51
+ export type WorkflowFileResponse<T> = {
52
+ json: WorkflowResponse<T>;
15
53
  binary?: Record<string, IBinaryData>;
16
54
  };
package/package.json CHANGED
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "name": "@limetech/n8n-nodes-lime",
3
- "version": "2.3.1-dev.1",
3
+ "version": "2.5.0-dev.2",
4
4
  "description": "n8n node to connect to Lime CRM",
5
- "license": "MIT",
6
5
  "main": "nodes/index.ts",
7
6
  "scripts": {
8
7
  "build": "tsc && copyfiles \"nodes/**/*.svg\" dist",
@@ -63,5 +62,8 @@
63
62
  },
64
63
  "peerDependencies": {
65
64
  "n8n-workflow": "^1.109.0"
65
+ },
66
+ "publishConfig": {
67
+ "access": "public"
66
68
  }
67
69
  }
@@ -0,0 +1,91 @@
1
+ import {
2
+ getCreateMappingColumns,
3
+ getUpdateMappingColumns,
4
+ LimetypeProperty,
5
+ SuccessResponse,
6
+ } from '../../../nodes';
7
+ import { ILoadOptionsFunctions } from 'n8n-workflow';
8
+ import * as transport from '../../../nodes/lime-crm/transport';
9
+
10
+ const mockILoadOptionFunctions = {
11
+ getNodeParameter: jest.fn().mockReturnValue('company'),
12
+ } as unknown as ILoadOptionsFunctions;
13
+
14
+ const propertiesResponseMock = {
15
+ success: true,
16
+ data: [
17
+ { name: 'p1', localname: 'Property 1', type: 'yesno', required: true },
18
+ {
19
+ name: 'p2',
20
+ localname: 'Property 2',
21
+ type: 'string',
22
+ required: false,
23
+ length: 2137,
24
+ },
25
+ {
26
+ name: 'p3',
27
+ localname: 'Property 3',
28
+ type: 'option',
29
+ required: true,
30
+ options: [
31
+ { key: 'op1', text: 'Option 1', inactive: false },
32
+ { key: 'op2', text: 'Option 2', inactive: false },
33
+ { key: 'op3', text: 'Option 3', inactive: true },
34
+ ],
35
+ },
36
+ ],
37
+ } as SuccessResponse<LimetypeProperty[]>;
38
+
39
+ describe('resourceMapping', () => {
40
+ beforeEach(() => {
41
+ jest.spyOn(transport, 'getProperties').mockResolvedValue(
42
+ propertiesResponseMock
43
+ );
44
+ });
45
+ it('gets valid resource mapping for create', async () => {
46
+ const columns = await getCreateMappingColumns.call(
47
+ mockILoadOptionFunctions
48
+ );
49
+ const property1 = columns.fields.find((p) => p.id == 'p1')!;
50
+
51
+ expect(property1.displayName).toBe('Property 1 [yesno]');
52
+ expect(property1.required).toBe(true);
53
+ expect(property1.defaultMatch).toBe(false);
54
+ expect(property1.display).toBe(true);
55
+ expect(property1.type).toBe('boolean');
56
+ expect(property1.options).toBe(undefined);
57
+
58
+ const property2 = columns.fields.find((p) => p.id == 'p2')!;
59
+ expect(property2.displayName).toBe('Property 2 [string(2137)]');
60
+ expect(property2.required).toBe(false);
61
+ expect(property2.defaultMatch).toBe(false);
62
+ expect(property2.display).toBe(true);
63
+ expect(property2.type).toBe('string');
64
+ expect(property2.options).toBe(undefined);
65
+
66
+ const property3 = columns.fields.find((p) => p.id == 'p3')!;
67
+ expect(property3.displayName).toBe('Property 3 [option]');
68
+ expect(property3.required).toBe(true);
69
+ expect(property3.defaultMatch).toBe(false);
70
+ expect(property3.display).toBe(true);
71
+ expect(property3.type).toBe('options');
72
+
73
+ const options = property3.options!;
74
+ expect(options).toContainEqual({
75
+ value: 'op1',
76
+ name: 'Option 1',
77
+ });
78
+ expect(options).toContainEqual({
79
+ value: 'op2',
80
+ name: 'Option 2',
81
+ });
82
+ expect(options.length).toBe(2);
83
+ });
84
+ it('gets proper required values for update', async () => {
85
+ const columns = await getUpdateMappingColumns.call(
86
+ mockILoadOptionFunctions
87
+ );
88
+ const requiredValues = columns.fields.map((p) => p.required);
89
+ expect(requiredValues).toEqual([false, false, false]);
90
+ });
91
+ });