@machinemetrics/mm-erp-sdk 0.1.9 → 0.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/README.md +0 -5
  2. package/dist/config-CvA-mFWF.js +418 -0
  3. package/dist/config-CvA-mFWF.js.map +1 -0
  4. package/dist/connector-factory-BPm2GVVF.js +30 -0
  5. package/dist/connector-factory-BPm2GVVF.js.map +1 -0
  6. package/dist/hashed-cache-manager-B15NN8hK.js +322 -0
  7. package/dist/hashed-cache-manager-B15NN8hK.js.map +1 -0
  8. package/dist/index-D8qO1NyK.js +192 -0
  9. package/dist/index-D8qO1NyK.js.map +1 -0
  10. package/dist/index.d.ts +43 -42
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/knexfile-Bng2Ru9c.js +20 -0
  13. package/dist/knexfile-Bng2Ru9c.js.map +1 -0
  14. package/dist/knexfile.d.ts.map +1 -1
  15. package/dist/logger-BWw0_z9q.js +17557 -0
  16. package/dist/logger-BWw0_z9q.js.map +1 -0
  17. package/dist/migrations/20241015162631_create_cache_table.js +15 -11
  18. package/dist/migrations/20241015162631_create_cache_table.js.map +1 -1
  19. package/dist/migrations/20241015162632_create_sdk_cache_table.js +15 -11
  20. package/dist/migrations/20241015162632_create_sdk_cache_table.js.map +1 -1
  21. package/dist/migrations/20250103162631_create_record_tracking_table.js +15 -14
  22. package/dist/migrations/20250103162631_create_record_tracking_table.js.map +1 -1
  23. package/dist/mm-erp-sdk.js +4978 -0
  24. package/dist/mm-erp-sdk.js.map +1 -0
  25. package/dist/services/caching-service/batch-cache-manager.d.ts +1 -1
  26. package/dist/services/caching-service/batch-cache-manager.d.ts.map +1 -1
  27. package/dist/services/caching-service/hashed-cache-manager.d.ts +2 -2
  28. package/dist/services/caching-service/hashed-cache-manager.d.ts.map +1 -1
  29. package/dist/services/caching-service/index.d.ts +1 -1
  30. package/dist/services/caching-service/index.d.ts.map +1 -1
  31. package/dist/services/caching-service/record-tracking-manager.d.ts +1 -1
  32. package/dist/services/caching-service/record-tracking-manager.d.ts.map +1 -1
  33. package/dist/services/data-sync-service/configuration-manager.d.ts +1 -1
  34. package/dist/services/data-sync-service/configuration-manager.d.ts.map +1 -1
  35. package/dist/services/data-sync-service/data-sync-service.d.ts.map +1 -1
  36. package/dist/services/data-sync-service/index.d.ts +3 -3
  37. package/dist/services/data-sync-service/index.d.ts.map +1 -1
  38. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +39 -40
  39. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -1
  40. package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -1
  41. package/dist/services/data-sync-service/jobs/from-erp.js +36 -48
  42. package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -1
  43. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +35 -36
  44. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -1
  45. package/dist/services/data-sync-service/jobs/run-migrations.js +21 -22
  46. package/dist/services/data-sync-service/jobs/run-migrations.js.map +1 -1
  47. package/dist/services/data-sync-service/jobs/to-erp.d.ts.map +1 -1
  48. package/dist/services/data-sync-service/jobs/to-erp.js +45 -48
  49. package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -1
  50. package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts +30 -0
  51. package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts.map +1 -0
  52. package/dist/services/erp-api-services/errors.d.ts +1 -1
  53. package/dist/services/erp-api-services/errors.d.ts.map +1 -1
  54. package/dist/services/erp-api-services/graphql/graphql-service.d.ts +2 -2
  55. package/dist/services/erp-api-services/graphql/graphql-service.d.ts.map +1 -1
  56. package/dist/services/erp-api-services/index.d.ts +8 -8
  57. package/dist/services/erp-api-services/index.d.ts.map +1 -1
  58. package/dist/services/erp-api-services/rest/rest-api-service.d.ts +2 -2
  59. package/dist/services/erp-api-services/rest/rest-api-service.d.ts.map +1 -1
  60. package/dist/services/erp-api-services/types.d.ts +2 -2
  61. package/dist/services/erp-api-services/types.d.ts.map +1 -1
  62. package/dist/services/mm-api-service/company-info.d.ts +13 -0
  63. package/dist/services/mm-api-service/company-info.d.ts.map +1 -0
  64. package/dist/services/mm-api-service/index.d.ts +13 -6
  65. package/dist/services/mm-api-service/index.d.ts.map +1 -1
  66. package/dist/services/mm-api-service/mm-api-service.d.ts +13 -7
  67. package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -1
  68. package/dist/services/mm-api-service/types/entity-transformer.d.ts +2 -2
  69. package/dist/services/mm-api-service/types/entity-transformer.d.ts.map +1 -1
  70. package/dist/services/mm-api-service/types/receive-types.d.ts +3 -0
  71. package/dist/services/mm-api-service/types/receive-types.d.ts.map +1 -1
  72. package/dist/services/nats-service/nats-service.d.ts +114 -0
  73. package/dist/services/nats-service/nats-service.d.ts.map +1 -0
  74. package/dist/services/nats-service/test-nats-subscriber.d.ts +6 -0
  75. package/dist/services/nats-service/test-nats-subscriber.d.ts.map +1 -0
  76. package/dist/services/psql-erp-service/index.d.ts +3 -3
  77. package/dist/services/psql-erp-service/index.d.ts.map +1 -1
  78. package/dist/services/psql-erp-service/psql-service.d.ts +2 -2
  79. package/dist/services/psql-erp-service/psql-service.d.ts.map +1 -1
  80. package/dist/services/reporting-service/index.d.ts +1 -1
  81. package/dist/services/reporting-service/index.d.ts.map +1 -1
  82. package/dist/services/reporting-service/logger.d.ts.map +1 -1
  83. package/dist/services/sql-server-erp-service/index.d.ts +3 -3
  84. package/dist/services/sql-server-erp-service/index.d.ts.map +1 -1
  85. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts +2 -2
  86. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts.map +1 -1
  87. package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts +3 -3
  88. package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts.map +1 -1
  89. package/dist/services/sql-server-erp-service/sql-server-service.d.ts +2 -2
  90. package/dist/services/sql-server-erp-service/sql-server-service.d.ts.map +1 -1
  91. package/dist/services/sqlite-service/index.d.ts +1 -1
  92. package/dist/services/sqlite-service/index.d.ts.map +1 -1
  93. package/dist/types/erp-connector.d.ts +1 -1
  94. package/dist/types/erp-connector.d.ts.map +1 -1
  95. package/dist/types/index.d.ts +2 -2
  96. package/dist/types/index.d.ts.map +1 -1
  97. package/dist/utils/connector-factory.d.ts +1 -1
  98. package/dist/utils/connector-factory.d.ts.map +1 -1
  99. package/dist/utils/connector-log/log-deduper.d.ts +1 -1
  100. package/dist/utils/connector-log/log-deduper.d.ts.map +1 -1
  101. package/dist/utils/connector-log/mm-connector-logger-example.d.ts +0 -1
  102. package/dist/utils/connector-log/mm-connector-logger.d.ts +1 -1
  103. package/dist/utils/connector-log/mm-connector-logger.d.ts.map +1 -1
  104. package/dist/utils/erp-type-from-entity.d.ts +1 -1
  105. package/dist/utils/erp-type-from-entity.d.ts.map +1 -1
  106. package/dist/utils/error-formatter.d.ts +19 -0
  107. package/dist/utils/error-formatter.d.ts.map +1 -0
  108. package/dist/utils/index.d.ts +38 -33
  109. package/dist/utils/index.d.ts.map +1 -1
  110. package/dist/utils/mm-labor-ticket-helpers.d.ts +1 -1
  111. package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -1
  112. package/dist/utils/removeExtraneousFields.d.ts +1 -1
  113. package/dist/utils/removeExtraneousFields.d.ts.map +1 -1
  114. package/dist/utils/removeIdFieldFromPayload.d.ts +1 -1
  115. package/dist/utils/removeIdFieldFromPayload.d.ts.map +1 -1
  116. package/dist/utils/resource-group.d.ts +1 -1
  117. package/dist/utils/resource-group.d.ts.map +1 -1
  118. package/dist/utils/standard-process-drivers/error-processor.d.ts +3 -3
  119. package/dist/utils/standard-process-drivers/error-processor.d.ts.map +1 -1
  120. package/dist/utils/standard-process-drivers/index.d.ts +3 -3
  121. package/dist/utils/standard-process-drivers/index.d.ts.map +1 -1
  122. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +1 -1
  123. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts.map +1 -1
  124. package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +4 -4
  125. package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
  126. package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +4 -4
  127. package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
  128. package/package.json +10 -6
  129. package/src/index.ts +45 -42
  130. package/src/knexfile.ts +0 -1
  131. package/src/services/caching-service/batch-cache-manager.ts +2 -2
  132. package/src/services/caching-service/hashed-cache-manager.ts +5 -5
  133. package/src/services/caching-service/index.ts +1 -1
  134. package/src/services/caching-service/record-tracking-manager.ts +2 -2
  135. package/src/services/data-sync-service/configuration-manager.ts +2 -2
  136. package/src/services/data-sync-service/data-sync-service.ts +19 -10
  137. package/src/services/data-sync-service/index.ts +3 -3
  138. package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +3 -3
  139. package/src/services/data-sync-service/jobs/from-erp.ts +5 -10
  140. package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +2 -2
  141. package/src/services/data-sync-service/jobs/run-migrations.ts +2 -2
  142. package/src/services/data-sync-service/jobs/to-erp.ts +7 -3
  143. package/src/services/data-sync-service/nats-labor-ticket-listener.ts +341 -0
  144. package/src/services/erp-api-services/errors.ts +3 -3
  145. package/src/services/erp-api-services/graphql/graphql-service.ts +5 -5
  146. package/src/services/erp-api-services/index.ts +8 -8
  147. package/src/services/erp-api-services/rest/rest-api-service.ts +4 -4
  148. package/src/services/erp-api-services/types.ts +2 -2
  149. package/src/services/mm-api-service/company-info.ts +87 -0
  150. package/src/services/mm-api-service/index.ts +14 -6
  151. package/src/services/mm-api-service/mm-api-service.ts +29 -12
  152. package/src/services/mm-api-service/token-mgr.ts +4 -4
  153. package/src/services/mm-api-service/types/entity-transformer.ts +3 -3
  154. package/src/services/mm-api-service/types/receive-types.ts +1 -0
  155. package/src/services/nats-service/nats-service.ts +351 -0
  156. package/src/services/nats-service/test-nats-subscriber.ts +96 -0
  157. package/src/services/psql-erp-service/index.ts +3 -3
  158. package/src/services/psql-erp-service/psql-service.ts +4 -4
  159. package/src/services/reporting-service/index.ts +1 -1
  160. package/src/services/reporting-service/logger.ts +81 -111
  161. package/src/services/sql-server-erp-service/index.ts +3 -3
  162. package/src/services/sql-server-erp-service/internal/sql-labor-ticket-operations.ts +2 -2
  163. package/src/services/sql-server-erp-service/internal/sql-transaction-manager.ts +1 -1
  164. package/src/services/sql-server-erp-service/sql-server-helpers.ts +6 -6
  165. package/src/services/sql-server-erp-service/sql-server-service.ts +4 -4
  166. package/src/services/sqlite-service/index.ts +1 -1
  167. package/src/services/sqlite-service/sqlite-coordinator.ts +2 -2
  168. package/src/types/erp-connector.ts +1 -1
  169. package/src/types/index.ts +2 -2
  170. package/src/utils/application-initializer.ts +5 -5
  171. package/src/utils/connector-factory.ts +2 -2
  172. package/src/utils/connector-log/log-deduper.ts +2 -2
  173. package/src/utils/connector-log/mm-connector-logger.ts +3 -3
  174. package/src/utils/erp-type-from-entity.ts +1 -1
  175. package/src/utils/error-formatter.ts +205 -0
  176. package/src/utils/http-client.ts +3 -2
  177. package/src/utils/index.ts +39 -33
  178. package/src/utils/local-data-store/database-lock.ts +1 -1
  179. package/src/utils/mm-labor-ticket-helpers.ts +2 -2
  180. package/src/utils/removeExtraneousFields.ts +1 -1
  181. package/src/utils/removeIdFieldFromPayload.ts +1 -1
  182. package/src/utils/resource-group.ts +2 -2
  183. package/src/utils/standard-process-drivers/error-processor.ts +5 -5
  184. package/src/utils/standard-process-drivers/index.ts +3 -3
  185. package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +6 -6
  186. package/src/utils/standard-process-drivers/mm-entity-processor.ts +7 -7
  187. package/src/utils/standard-process-drivers/standard-process-drivers.ts +6 -6
  188. package/src/utils/time-utils.ts +3 -3
  189. package/src/utils/timezone.ts +2 -2
  190. package/dist/index.js +0 -48
  191. package/dist/index.js.map +0 -1
  192. package/dist/knexfile.js +0 -19
  193. package/dist/knexfile.js.map +0 -1
  194. package/dist/migrations/20241015162631_create_cache_table.d.ts +0 -4
  195. package/dist/migrations/20241015162631_create_cache_table.d.ts.map +0 -1
  196. package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts +0 -4
  197. package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts.map +0 -1
  198. package/dist/migrations/20250103162631_create_record_tracking_table.d.ts +0 -4
  199. package/dist/migrations/20250103162631_create_record_tracking_table.d.ts.map +0 -1
  200. package/dist/services/caching-service/batch-cache-manager.js +0 -84
  201. package/dist/services/caching-service/batch-cache-manager.js.map +0 -1
  202. package/dist/services/caching-service/hashed-cache-manager.js +0 -223
  203. package/dist/services/caching-service/hashed-cache-manager.js.map +0 -1
  204. package/dist/services/caching-service/index.js +0 -2
  205. package/dist/services/caching-service/index.js.map +0 -1
  206. package/dist/services/caching-service/record-tracking-manager.js +0 -28
  207. package/dist/services/caching-service/record-tracking-manager.js.map +0 -1
  208. package/dist/services/data-sync-service/configuration-manager.js +0 -163
  209. package/dist/services/data-sync-service/configuration-manager.js.map +0 -1
  210. package/dist/services/data-sync-service/data-sync-service.js +0 -95
  211. package/dist/services/data-sync-service/data-sync-service.js.map +0 -1
  212. package/dist/services/data-sync-service/index.js +0 -10
  213. package/dist/services/data-sync-service/index.js.map +0 -1
  214. package/dist/services/erp-api-services/errors.js +0 -83
  215. package/dist/services/erp-api-services/errors.js.map +0 -1
  216. package/dist/services/erp-api-services/graphql/graphql-service.js +0 -102
  217. package/dist/services/erp-api-services/graphql/graphql-service.js.map +0 -1
  218. package/dist/services/erp-api-services/graphql/types.js +0 -6
  219. package/dist/services/erp-api-services/graphql/types.js.map +0 -1
  220. package/dist/services/erp-api-services/index.js +0 -13
  221. package/dist/services/erp-api-services/index.js.map +0 -1
  222. package/dist/services/erp-api-services/oauth-client.js +0 -41
  223. package/dist/services/erp-api-services/oauth-client.js.map +0 -1
  224. package/dist/services/erp-api-services/rest/get-query-params.js +0 -23
  225. package/dist/services/erp-api-services/rest/get-query-params.js.map +0 -1
  226. package/dist/services/erp-api-services/rest/rest-api-service.js +0 -163
  227. package/dist/services/erp-api-services/rest/rest-api-service.js.map +0 -1
  228. package/dist/services/erp-api-services/types.js +0 -2
  229. package/dist/services/erp-api-services/types.js.map +0 -1
  230. package/dist/services/mm-api-service/index.js +0 -15
  231. package/dist/services/mm-api-service/index.js.map +0 -1
  232. package/dist/services/mm-api-service/mm-api-service.js +0 -519
  233. package/dist/services/mm-api-service/mm-api-service.js.map +0 -1
  234. package/dist/services/mm-api-service/token-mgr.js +0 -113
  235. package/dist/services/mm-api-service/token-mgr.js.map +0 -1
  236. package/dist/services/mm-api-service/types/checkpoint.js +0 -2
  237. package/dist/services/mm-api-service/types/checkpoint.js.map +0 -1
  238. package/dist/services/mm-api-service/types/entity-transformer.js +0 -186
  239. package/dist/services/mm-api-service/types/entity-transformer.js.map +0 -1
  240. package/dist/services/mm-api-service/types/mm-response-interfaces.js +0 -34
  241. package/dist/services/mm-api-service/types/mm-response-interfaces.js.map +0 -1
  242. package/dist/services/mm-api-service/types/receive-types.js +0 -55
  243. package/dist/services/mm-api-service/types/receive-types.js.map +0 -1
  244. package/dist/services/mm-api-service/types/send-types.js +0 -337
  245. package/dist/services/mm-api-service/types/send-types.js.map +0 -1
  246. package/dist/services/psql-erp-service/configuration.js +0 -2
  247. package/dist/services/psql-erp-service/configuration.js.map +0 -1
  248. package/dist/services/psql-erp-service/index.js +0 -10
  249. package/dist/services/psql-erp-service/index.js.map +0 -1
  250. package/dist/services/psql-erp-service/internal/types/psql-types.js +0 -5
  251. package/dist/services/psql-erp-service/internal/types/psql-types.js.map +0 -1
  252. package/dist/services/psql-erp-service/psql-helpers.js +0 -99
  253. package/dist/services/psql-erp-service/psql-helpers.js.map +0 -1
  254. package/dist/services/psql-erp-service/psql-service.js +0 -187
  255. package/dist/services/psql-erp-service/psql-service.js.map +0 -1
  256. package/dist/services/reporting-service/index.js +0 -5
  257. package/dist/services/reporting-service/index.js.map +0 -1
  258. package/dist/services/reporting-service/logger.js +0 -217
  259. package/dist/services/reporting-service/logger.js.map +0 -1
  260. package/dist/services/sql-server-erp-service/configuration.js +0 -2
  261. package/dist/services/sql-server-erp-service/configuration.js.map +0 -1
  262. package/dist/services/sql-server-erp-service/index.js +0 -11
  263. package/dist/services/sql-server-erp-service/index.js.map +0 -1
  264. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js +0 -50
  265. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js.map +0 -1
  266. package/dist/services/sql-server-erp-service/internal/sql-server-config.js +0 -40
  267. package/dist/services/sql-server-erp-service/internal/sql-server-config.js.map +0 -1
  268. package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js +0 -36
  269. package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js.map +0 -1
  270. package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js +0 -2
  271. package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js.map +0 -1
  272. package/dist/services/sql-server-erp-service/sql-server-helpers.js +0 -66
  273. package/dist/services/sql-server-erp-service/sql-server-helpers.js.map +0 -1
  274. package/dist/services/sql-server-erp-service/sql-server-service.js +0 -154
  275. package/dist/services/sql-server-erp-service/sql-server-service.js.map +0 -1
  276. package/dist/services/sql-server-erp-service/types/sql-input-param.js +0 -2
  277. package/dist/services/sql-server-erp-service/types/sql-input-param.js.map +0 -1
  278. package/dist/services/sqlite-service/index.js +0 -2
  279. package/dist/services/sqlite-service/index.js.map +0 -1
  280. package/dist/services/sqlite-service/sqlite-coordinator.js +0 -60
  281. package/dist/services/sqlite-service/sqlite-coordinator.js.map +0 -1
  282. package/dist/types/erp-connector.js +0 -2
  283. package/dist/types/erp-connector.js.map +0 -1
  284. package/dist/types/erp-types.js +0 -13
  285. package/dist/types/erp-types.js.map +0 -1
  286. package/dist/types/index.js +0 -6
  287. package/dist/types/index.js.map +0 -1
  288. package/dist/utils/application-initializer.js +0 -55
  289. package/dist/utils/application-initializer.js.map +0 -1
  290. package/dist/utils/cleanup-numbers.js +0 -6
  291. package/dist/utils/cleanup-numbers.js.map +0 -1
  292. package/dist/utils/connector-factory.js +0 -34
  293. package/dist/utils/connector-factory.js.map +0 -1
  294. package/dist/utils/connector-log/log-deduper.js +0 -240
  295. package/dist/utils/connector-log/log-deduper.js.map +0 -1
  296. package/dist/utils/connector-log/mm-connector-logger-example.js +0 -88
  297. package/dist/utils/connector-log/mm-connector-logger-example.js.map +0 -1
  298. package/dist/utils/connector-log/mm-connector-logger.js +0 -151
  299. package/dist/utils/connector-log/mm-connector-logger.js.map +0 -1
  300. package/dist/utils/data-transformation.js +0 -38
  301. package/dist/utils/data-transformation.js.map +0 -1
  302. package/dist/utils/erp-type-from-entity.js +0 -6
  303. package/dist/utils/erp-type-from-entity.js.map +0 -1
  304. package/dist/utils/error-utils.js +0 -21
  305. package/dist/utils/error-utils.js.map +0 -1
  306. package/dist/utils/http-client.js +0 -186
  307. package/dist/utils/http-client.js.map +0 -1
  308. package/dist/utils/index.js +0 -65
  309. package/dist/utils/index.js.map +0 -1
  310. package/dist/utils/local-data-store/database-lock.js +0 -68
  311. package/dist/utils/local-data-store/database-lock.js.map +0 -1
  312. package/dist/utils/local-data-store/jobs-shared-data.js +0 -116
  313. package/dist/utils/local-data-store/jobs-shared-data.js.map +0 -1
  314. package/dist/utils/mm-labor-ticket-helpers.js +0 -23
  315. package/dist/utils/mm-labor-ticket-helpers.js.map +0 -1
  316. package/dist/utils/removeExtraneousFields.js +0 -16
  317. package/dist/utils/removeExtraneousFields.js.map +0 -1
  318. package/dist/utils/removeIdFieldFromPayload.js +0 -16
  319. package/dist/utils/removeIdFieldFromPayload.js.map +0 -1
  320. package/dist/utils/resource-group.js +0 -59
  321. package/dist/utils/resource-group.js.map +0 -1
  322. package/dist/utils/standard-process-drivers/error-processor.js +0 -262
  323. package/dist/utils/standard-process-drivers/error-processor.js.map +0 -1
  324. package/dist/utils/standard-process-drivers/index.js +0 -4
  325. package/dist/utils/standard-process-drivers/index.js.map +0 -1
  326. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js +0 -164
  327. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +0 -1
  328. package/dist/utils/standard-process-drivers/mm-entity-processor.js +0 -168
  329. package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +0 -1
  330. package/dist/utils/standard-process-drivers/standard-process-drivers.js +0 -324
  331. package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +0 -1
  332. package/dist/utils/time-utils.js +0 -96
  333. package/dist/utils/time-utils.js.map +0 -1
  334. package/dist/utils/timezone.js +0 -105
  335. package/dist/utils/timezone.js.map +0 -1
  336. package/dist/utils/trimObjectValues.js +0 -11
  337. package/dist/utils/trimObjectValues.js.map +0 -1
  338. package/dist/utils/uniqueRows.js +0 -35
  339. package/dist/utils/uniqueRows.js.map +0 -1
@@ -1,262 +0,0 @@
1
- import { ERPObjType } from "../../types/erp-types.js";
2
- import { EntityTransformer } from "../../services/mm-api-service/types/entity-transformer.js";
3
- import logger from "../../services/reporting-service/logger.js";
4
- /**
5
- * Handles error processing and record management utilities for MM API operations
6
- */
7
- export class ErrorProcessor {
8
- /**
9
- * Creates a set of primary keys for all failed records from batch errors
10
- * @param entityType The type of entity being processed
11
- * @param batchErrors Array of batch errors containing failed entities
12
- * @returns Set of primary keys for failed records
13
- */
14
- static createFailedRecordKeySet(entityType, batchErrors) {
15
- const failedKeySet = new Set();
16
- batchErrors.forEach((batchError) => {
17
- batchError.affectedEntities.forEach((affectedEntity) => {
18
- try {
19
- const primaryKey = EntityTransformer.extractPrimaryKey(entityType, affectedEntity);
20
- failedKeySet.add(primaryKey);
21
- }
22
- catch (error) {
23
- logger.warn(`Failed to extract primary key from error entity: ${error}`);
24
- // Continue processing other records even if one fails
25
- }
26
- });
27
- });
28
- return failedKeySet;
29
- }
30
- /**
31
- * Filters out failed records, returning only successful ones
32
- * @param entityType The type of entity being processed
33
- * @param allRecords All records (typed objects) that were sent to the API
34
- * @param failedKeySet Set of primary keys for records that failed
35
- * @returns Array of records that succeeded
36
- */
37
- static filterSuccessfulRecords(entityType, allRecords, failedKeySet) {
38
- const successfulRecords = [];
39
- allRecords.forEach((record) => {
40
- try {
41
- const primaryKey = EntityTransformer.extractPrimaryKey(entityType, record);
42
- if (!failedKeySet.has(primaryKey)) {
43
- successfulRecords.push(record);
44
- }
45
- }
46
- catch (error) {
47
- logger.warn(`Failed to extract primary key from record during filtering: ${error}`);
48
- // If we can't extract the key, we can't determine if it failed, so skip it
49
- }
50
- });
51
- return successfulRecords;
52
- }
53
- /**
54
- * Orchestrates the caching of successful records on partial failure
55
- * @param entityType The type of entity being processed
56
- * @param toProcess All records that were sent to the API (all are now guaranteed to be typed objects)
57
- * @param batchErrors Array of batch errors containing failed entities
58
- * @param batchCacheManager The cache manager instance
59
- */
60
- static async cacheSuccessfulRecordsOnPartialFailure(entityType, toProcess, batchErrors, batchCacheManager) {
61
- // Create a set of failed record keys for efficient lookup
62
- const failedKeySet = this.createFailedRecordKeySet(entityType, batchErrors);
63
- // Filter to get only successful records
64
- const successfulRecords = this.filterSuccessfulRecords(entityType, toProcess, failedKeySet);
65
- logger.info(`Caching ${successfulRecords.length} successful records out of ${toProcess.length} total records`);
66
- // All records are now guaranteed to be typed objects, so we can cache them directly
67
- if (successfulRecords.length > 0) {
68
- await batchCacheManager.storeBatch(entityType, successfulRecords);
69
- }
70
- }
71
- /**
72
- * Extracts error count and batch errors from MM API response for partial failures (HTTP 207)
73
- * This supports all entities, including the slightly different format for labor tickets.
74
- * In case of labor tickets, the updateErrors and insertErrors arrays are combined into affectedEntities.
75
- * @param mmApiResponse The full MM API response object
76
- * @param entityType The type of entity being processed (determines response structure)
77
- * @returns Object containing errorCount and batchErrors
78
- * See MM207NonLaborTicketResponse and MM207LaborTicketResponse for response structure details
79
- */
80
- static extractErrorDetails(mmApiResponse, entityType) {
81
- // Type the data property with the expected structure for HTTP 207 responses
82
- const data = mmApiResponse.data;
83
- let allErrors = [];
84
- if (entityType === ERPObjType.LABOR_TICKETS) {
85
- // Labor tickets: combine updateErrors and insertErrors
86
- const updateErrors = data?.updateErrors || [];
87
- const insertErrors = data?.insertErrors || [];
88
- // Defensive validation with actionable warnings
89
- if (!data?.updateErrors && !data?.insertErrors) {
90
- logger.warn("Labor tickets partial success response missing both updateErrors and insertErrors arrays");
91
- }
92
- allErrors = [...updateErrors, ...insertErrors];
93
- }
94
- else {
95
- // Regular entities: use errors array
96
- const errors = data?.errors || [];
97
- // Defensive validation
98
- if (!data?.errors) {
99
- logger.warn(`${entityType} partial success response missing errors array`);
100
- }
101
- allErrors = errors;
102
- }
103
- const batchErrors = allErrors
104
- .filter((error) => {
105
- return error.batchData && error.batchData.length > 0;
106
- })
107
- .map((error) => {
108
- // Reconstruct typed objects from plain data
109
- const typedErrorEntities = (error.batchData || []).map((entity) => {
110
- if (typeof entity === "object" &&
111
- entity !== null &&
112
- "toRESTApiObject" in entity &&
113
- typeof entity.toRESTApiObject === "function") {
114
- // It's already a typed object, return as-is
115
- return entity;
116
- }
117
- else {
118
- // It's plain data, reconstruct as typed object
119
- return EntityTransformer.reconstructFromPlainData(entityType, entity);
120
- }
121
- });
122
- return {
123
- message: error.message,
124
- affectedEntities: typedErrorEntities,
125
- };
126
- });
127
- const errorCount = batchErrors.reduce((total, batchError) => {
128
- return total + batchError.affectedEntities.length;
129
- }, 0);
130
- return {
131
- errorCount,
132
- batchErrors,
133
- };
134
- }
135
- /**
136
- * Extracts error details from a 500 HTTP exception when it contains structured error data
137
- * @param exception The caught exception from MM API call
138
- * @param entityType The type of entity being processed
139
- * @returns Object containing errorCount and batchErrors, or null if not a structured 500 error
140
- * See MM500NonLaborTicketException and MM500LaborTicketException for exception structure details
141
- */
142
- static extractErrorDetailsFrom500Exception(exception, entityType) {
143
- try {
144
- // Cast exception to expected structure for easier access
145
- const ex = exception;
146
- const data = ex?.data;
147
- // Add diagnostic logging to understand the 500 error structure
148
- logger.info("writeEntitiesToMM: Analyzing 500 exception structure for diagnostic purposes", {
149
- status: ex?.status,
150
- code: ex?.code,
151
- hasResponseData: !!data,
152
- responseDataKeys: data ? Object.keys(data) : [],
153
- errorMessage: data?.error,
154
- hasMessageObject: !!data?.message,
155
- messageObjectKeys: data?.message
156
- ? Object.keys(data.message)
157
- : [],
158
- entityType,
159
- exceptionType: typeof exception,
160
- exceptionKeys: ex ? Object.keys(ex) : [],
161
- });
162
- // Check if this is a structured 500 error
163
- if (ex?.status !== 500 ||
164
- typeof data?.error !== "string" ||
165
- !data.error.startsWith("Failed to import")) {
166
- logger.info("writeEntitiesToMM: Not a structured 500 error - will re-throw exception as-is", {
167
- status: ex?.status,
168
- errorMessage: data?.error,
169
- expectedStatus: 500,
170
- expectedMessagePrefix: "Failed to import",
171
- });
172
- return null;
173
- }
174
- logger.info("writeEntitiesToMM: Detected structured 500 error - extracting error details");
175
- const messageObject = data?.message;
176
- if (!messageObject) {
177
- logger.warn("writeEntitiesToMM: Structured 500 error missing message object");
178
- return null;
179
- }
180
- let allErrors = [];
181
- if (entityType === ERPObjType.LABOR_TICKETS) {
182
- // Labor tickets: combine updateErrors and insertErrors
183
- const updateErrors = Array.isArray(messageObject?.updateErrors)
184
- ? messageObject.updateErrors
185
- : [];
186
- const insertErrors = Array.isArray(messageObject?.insertErrors)
187
- ? messageObject.insertErrors
188
- : [];
189
- logger.info("writeEntitiesToMM: Processing labor tickets 500 error", {
190
- updateErrorsCount: updateErrors.length,
191
- insertErrorsCount: insertErrors.length,
192
- });
193
- if (updateErrors.length === 0 && insertErrors.length === 0) {
194
- logger.warn("writeEntitiesToMM: Labor tickets 500 error missing both updateErrors and insertErrors arrays");
195
- }
196
- allErrors = [...updateErrors, ...insertErrors];
197
- }
198
- else {
199
- // Regular entities: use errors array
200
- const errors = Array.isArray(messageObject?.errors)
201
- ? messageObject.errors
202
- : [];
203
- logger.info("writeEntitiesToMM: Processing regular entity 500 error", {
204
- errorsCount: errors.length,
205
- });
206
- if (errors.length === 0) {
207
- logger.warn(`writeEntitiesToMM: ${entityType} 500 error missing errors array`);
208
- }
209
- allErrors = errors;
210
- }
211
- const batchErrors = allErrors
212
- .filter((error) => {
213
- const err = error;
214
- return Array.isArray(err?.batchData) && err.batchData.length > 0;
215
- })
216
- .map((error) => {
217
- const err = error;
218
- const batchData = err?.batchData;
219
- // Reconstruct typed objects from plain data
220
- const typedErrorEntities = (batchData || []).map((entity) => {
221
- if (typeof entity === "object" &&
222
- entity !== null &&
223
- "toRESTApiObject" in entity &&
224
- typeof entity.toRESTApiObject === "function") {
225
- // It's already a typed object, return as-is
226
- return entity;
227
- }
228
- else {
229
- // It's plain data, reconstruct as typed object
230
- return EntityTransformer.reconstructFromPlainData(entityType, entity);
231
- }
232
- });
233
- return {
234
- message: typeof err?.message === "string" ? err.message : "Unknown error",
235
- affectedEntities: typedErrorEntities,
236
- };
237
- });
238
- const errorCount = batchErrors.reduce((total, batchError) => {
239
- return total + batchError.affectedEntities.length;
240
- }, 0);
241
- logger.info("writeEntitiesToMM: Extracted 500 error details", {
242
- batchErrorsCount: batchErrors.length,
243
- totalErrorCount: errorCount,
244
- entityType,
245
- });
246
- return {
247
- errorCount,
248
- batchErrors,
249
- };
250
- }
251
- catch (error) {
252
- // If we can't even parse the structure safely, log what we can and return null
253
- logger.error("writeEntitiesToMM: Failed to parse 500 exception structure safely", {
254
- error: error instanceof Error ? error.message : String(error),
255
- exceptionType: typeof exception,
256
- entityType,
257
- });
258
- return null;
259
- }
260
- }
261
- }
262
- //# sourceMappingURL=error-processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-processor.js","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/error-processor.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- // Public exports for standard-process-drivers
2
- export { StandardProcessDrivers } from "./standard-process-drivers.js";
3
- export { MMBatchValidationError } from "./standard-process-drivers.js";
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1,164 +0,0 @@
1
- import { MMApiClient } from "../../services/mm-api-service/mm-api-service.js";
2
- import { convertLaborTicketToLocalTimezone } from "../mm-labor-ticket-helpers.js";
3
- import { getCachedTimezoneOffset } from "../local-data-store/jobs-shared-data.js";
4
- import logger from "../../services/reporting-service/logger.js";
5
- /**
6
- * Handles synchronization of labor tickets between MachineMetrics and ERP systems
7
- */
8
- export class LaborTicketERPSynchronizer {
9
- /**
10
- * Synchronizes updated labor tickets from MachineMetrics to an ERP system
11
- */
12
- static async syncToERP(connectorType, connector) {
13
- try {
14
- const mmApiClient = new MMApiClient();
15
- const failedLaborTicketRefs = [];
16
- await mmApiClient.initializeCheckpoint({
17
- system: connectorType,
18
- table: "labor_tickets",
19
- checkpointType: "export",
20
- checkpointValue: {
21
- timestamp: new Date().toISOString(),
22
- },
23
- });
24
- const fallbackTimestamp = new Date().toISOString();
25
- const laborTicketsUpdates = await mmApiClient.fetchLaborTicketUpdates({
26
- system: connectorType,
27
- checkpointType: "export",
28
- });
29
- if (laborTicketsUpdates.length === 0) {
30
- logger.info("syncLaborTicketsToERP:No updated labor tickets found");
31
- return;
32
- }
33
- logger.info(`ToERP: Found ${laborTicketsUpdates.length} Labor Ticket Ids and Refs to process`, {
34
- laborTickets: laborTicketsUpdates.map((ticket) => ({
35
- ref: ticket.laborTicketRef,
36
- id: ticket.laborTicketId,
37
- })),
38
- });
39
- // Find the most recent updatedAt timestamp from labor tickets. This will be used to update
40
- // the checkpoint to ensure there is no gap of time for the next sync.
41
- const mostRecentUpdate = laborTicketsUpdates.reduce((latest, ticket) => {
42
- if (!latest || !ticket.updatedAt)
43
- return latest;
44
- return new Date(ticket.updatedAt) > new Date(latest)
45
- ? ticket.updatedAt
46
- : latest;
47
- }, null);
48
- await Promise.all(laborTicketsUpdates.map(async (laborTicket) => {
49
- if (!laborTicket.laborTicketRef) {
50
- logger.error("syncLaborTicketsToERP: laborTicketRef is not set for laborTicket pulled from MM:", { laborTicket });
51
- return undefined;
52
- }
53
- try {
54
- return await this.processLaborTicket(connector, mmApiClient, laborTicket);
55
- }
56
- catch (error) {
57
- failedLaborTicketRefs.push(laborTicket.laborTicketRef);
58
- logger.error(`syncLaborTicketsToERP: Error processing laborTicketRef ${laborTicket.laborTicketRef}:`, { error });
59
- return undefined;
60
- }
61
- }));
62
- logger.info(`syncLaborTicketsToERP: ${failedLaborTicketRefs.length} failed labor ticket ids`);
63
- if (failedLaborTicketRefs.length > 0) {
64
- logger.info(`syncLaborTicketsToERP: Reporting ${failedLaborTicketRefs.length} labor ticket failures:`, {
65
- failedLaborTicketRefs,
66
- });
67
- const addFailedResult = await mmApiClient.addFailedLaborTicketRefs(connectorType, failedLaborTicketRefs);
68
- logger.info("syncLaborTicketsToERP: addFailedResult:", {
69
- addFailedResult,
70
- });
71
- }
72
- mmApiClient.saveCheckpoint({
73
- system: connectorType,
74
- table: "labor_tickets",
75
- checkpointType: "export",
76
- checkpointValue: {
77
- timestamp: mostRecentUpdate || fallbackTimestamp,
78
- },
79
- });
80
- }
81
- catch (error) {
82
- logger.error("syncLaborTicketsToERP: Error:", error);
83
- }
84
- }
85
- /**
86
- * Retries labor tickets that have failed to be created or updated in the ERP during the sync
87
- */
88
- static async retryFailed(connectorType, connector) {
89
- try {
90
- const mmApiClient = new MMApiClient();
91
- const successLaborTicketIds = [];
92
- const laborTickets = await mmApiClient.fetchFailedLaborTickets(connectorType);
93
- if (laborTickets.length === 0) {
94
- logger.info("retryFailedLaborTickets: No failed labor tickets found");
95
- return;
96
- }
97
- logger.info("retryFailedLaborTickets: Failed Labor Tickets count:" +
98
- laborTickets.length);
99
- await Promise.all(laborTickets.map(async (laborTicket) => {
100
- if (!laborTicket.laborTicketRef) {
101
- logger.error("retryFailedLaborTickets: laborTicketRef is not set for laborTicket pulled from MM:", { laborTicket });
102
- return undefined;
103
- }
104
- try {
105
- const laborTicketResult = await this.processLaborTicket(connector, mmApiClient, laborTicket);
106
- successLaborTicketIds.push(laborTicket.laborTicketRef);
107
- return laborTicketResult;
108
- }
109
- catch (error) {
110
- logger.error("retryFailedLaborTickets: Error processing laborTicketRef:", { laborTicketRef: laborTicket.laborTicketRef, error });
111
- return undefined;
112
- }
113
- }));
114
- if (successLaborTicketIds.length > 0) {
115
- logger.info("Deleting failed labor ticket ids:", {
116
- successLaborTicketIds,
117
- });
118
- const deleteFailedResult = await mmApiClient.deleteFailedLaborTicketIds(connectorType, successLaborTicketIds);
119
- logger.info("deleteFailedResult:", { deleteFailedResult });
120
- }
121
- }
122
- catch (error) {
123
- logger.error("retryFailedLaborTickets: Error:", error);
124
- }
125
- }
126
- // ============================================================================
127
- // PRIVATE HELPER METHODS
128
- // ============================================================================
129
- static async writeLaborTicketIdToMM(mmApiClient, laborTicket, laborTicketResult) {
130
- const updateRefAPIResponse = await mmApiClient.updateLaborTicketIdByRef(laborTicket.laborTicketRef, laborTicketResult.laborTicketId);
131
- logger.info(`Updated laborTicketId ${laborTicketResult.laborTicketId} for laborTicketRef ${laborTicket.laborTicketRef} in MM:`, { updateRefAPIResponse });
132
- }
133
- static async processLaborTicket(connector, mmApiClient, laborTicket) {
134
- let laborTicketResult;
135
- laborTicketResult = convertLaborTicketToLocalTimezone(laborTicket, getCachedTimezoneOffset());
136
- logger.info(`processing laborTicket, id=${laborTicket.laborTicketId}, ref=${laborTicket.laborTicketRef}`);
137
- logger.debug({ laborTicket });
138
- // MLW TODO: Should we always swap out the resource ID for the machine group ID if it is found?
139
- // Or use a flag? What about the default resource ID as used by syteline? A Rutherford consultation is in order.
140
- /**
141
- * Swapping out the resource ID for the group id corresponding to the
142
- * resource ID in the ERP would be done like so:
143
- * const machineGroupId = await mmApiClient.getResourceERPGroupId(laborTicket.resourceId);
144
- * if(machineGroupId) {
145
- * laborTicket.resourceId = machineGroupId;
146
- * }
147
- */
148
- if (!laborTicket.laborTicketId) {
149
- const { laborTicket: laborTicketResult, erpUid } = await connector.createLaborTicketInERP(laborTicket);
150
- laborTicketResult.laborTicketId = erpUid;
151
- await this.writeLaborTicketIdToMM(mmApiClient, laborTicket, laborTicketResult);
152
- }
153
- else {
154
- laborTicketResult = await connector.updateLaborTicketInERP(laborTicket);
155
- }
156
- logger.info("ToERP: laborTicket update result:", {
157
- laborTicketResult: laborTicketResult || "Failed to create/update labor ticket",
158
- laborTicketRef: laborTicket.laborTicketRef,
159
- operation: laborTicket.laborTicketId ? "update" : "create",
160
- });
161
- return laborTicketResult;
162
- }
163
- }
164
- //# sourceMappingURL=labor-ticket-erp-synchronizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"labor-ticket-erp-synchronizer.js","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts"],"names":[],"mappings":"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"}
@@ -1,168 +0,0 @@
1
- import { ERPObjType } from "../../types/erp-types.js";
2
- import { MMApiClient } from "../../services/mm-api-service/mm-api-service.js";
3
- import { MMBatchValidationError, } from "./standard-process-drivers.js";
4
- import { ErrorProcessor } from "./error-processor.js";
5
- /**
6
- * Handles processing of entities to the MachineMetrics API
7
- */
8
- export class MMEntityProcessor {
9
- /**
10
- * Writes entities to MM API with deduplication and caching
11
- */
12
- static async writeEntities(entityType, mmRecords, batchCacheManager) {
13
- const { toProcess, result } = await this._prepareAndDedupe(entityType, mmRecords, batchCacheManager);
14
- if (toProcess.length === 0) {
15
- result.message =
16
- "All records were deduplicated locally - no records sent to MM API";
17
- return result;
18
- }
19
- let mmApiResponse;
20
- try {
21
- mmApiResponse = await this._sendToAPI(entityType, toProcess);
22
- }
23
- catch (exception) {
24
- this._handleException(exception, entityType, result);
25
- }
26
- return await this._handleResponse(mmApiResponse, entityType, toProcess, result, batchCacheManager);
27
- }
28
- // ============================================================================
29
- // PRIVATE HELPER METHODS
30
- // ============================================================================
31
- /**
32
- * Deduplicates records against cache
33
- * Returns the records to process and the result object
34
- * If the batchCacheManager is provided, the records are deduplicated against the cache
35
- * If the batchCacheManager is not provided, the records are not deduplicated
36
- */
37
- static async _prepareAndDedupe(entityType, mmRecords, batchCacheManager) {
38
- let toProcess = [];
39
- const result = {
40
- message: "",
41
- upsertedEntities: 0,
42
- localDedupeCount: 0,
43
- apiDedupeCount: 0,
44
- };
45
- if (batchCacheManager) {
46
- const { nonDuplicates, duplicates } = (await batchCacheManager.dedupeBatch(entityType, mmRecords));
47
- toProcess = nonDuplicates;
48
- result.localDedupeCount = duplicates.length;
49
- }
50
- else {
51
- toProcess = mmRecords;
52
- }
53
- return { toProcess, result };
54
- }
55
- /**
56
- * Sends records to MM API
57
- */
58
- static async _sendToAPI(entityType, toProcess) {
59
- const mmApiClient = new MMApiClient();
60
- switch (entityType) {
61
- case ERPObjType.PERSONS:
62
- return await mmApiClient.sendPersonsToMM(toProcess);
63
- case ERPObjType.RESOURCES:
64
- return await mmApiClient.sendResourcesToMM(toProcess);
65
- case ERPObjType.PARTS:
66
- return await mmApiClient.sendPartsToMM(toProcess);
67
- case ERPObjType.PART_OPERATION:
68
- return await mmApiClient.sendPartOperationsToMM(toProcess);
69
- case ERPObjType.WORK_ORDERS:
70
- return await mmApiClient.sendWorkOrdersToMM(toProcess);
71
- case ERPObjType.WORK_ORDER_OPERATIONS:
72
- return await mmApiClient.sendWorkOrderOperationsToMM(toProcess);
73
- case ERPObjType.LABOR_TICKETS:
74
- return await mmApiClient.sendLaborTicketsToMM(toProcess);
75
- case ERPObjType.REASONS:
76
- return await mmApiClient.sendReasonsToMM(toProcess);
77
- default:
78
- throw new Error(`Unknown entity type: ${entityType}`);
79
- }
80
- }
81
- /**
82
- * Handles exceptions from API calls, converting structured 500 errors to MMBatchValidationError
83
- * @throws MMBatchValidationError for structured 500 errors
84
- * @throws The original exception for all other errors
85
- */
86
- static _handleException(exception, entityType, result) {
87
- // Handle structured 500 errors that may be appropriate for partial failure
88
- const structuredCompleteErrorSet = ErrorProcessor.extractErrorDetailsFrom500Exception(exception, entityType);
89
- if (structuredCompleteErrorSet) {
90
- const ex = exception;
91
- const data = ex?.data;
92
- const errorMessage = typeof data?.error === "string"
93
- ? data.error
94
- : "All entities failed to import";
95
- throw new MMBatchValidationError({
96
- message: errorMessage,
97
- upsertedEntities: 0,
98
- localDedupeCount: result.localDedupeCount,
99
- apiDedupeCount: 0,
100
- errorCount: structuredCompleteErrorSet.errorCount,
101
- httpStatus: exception.status,
102
- batchErrors: structuredCompleteErrorSet.batchErrors,
103
- });
104
- }
105
- // For all other exceptions, re-throw as-is
106
- throw exception;
107
- }
108
- /**
109
- * Handles the MM API response based on HTTP status code, caching successful records
110
- * and throwing exceptions for partial failures
111
- *
112
- * @returns The final result for success cases
113
- * @throws MMBatchValidationError for partial success cases
114
- * @throws Error for unknown status codes
115
- */
116
- static async _handleResponse(mmApiResponse, entityType, toProcess, result, batchCacheManager) {
117
- if (mmApiResponse.httpStatus === 200) {
118
- // Complete success - cache all records
119
- if (batchCacheManager) {
120
- await batchCacheManager.storeBatch(entityType, toProcess);
121
- }
122
- if (entityType === ERPObjType.LABOR_TICKETS) {
123
- const success = mmApiResponse;
124
- result.message = success.message || "Entities processed successfully";
125
- result.upsertedEntities =
126
- (success.updated || 0) + (success.inserted || 0);
127
- }
128
- else {
129
- const success = mmApiResponse;
130
- result.message = success.message || "Entities processed successfully";
131
- result.upsertedEntities = success.affectedRows || 0;
132
- }
133
- result.apiDedupeCount = toProcess.length - result.upsertedEntities;
134
- return result;
135
- }
136
- else if (mmApiResponse.httpStatus === 207) {
137
- // Partial success - cache only successful records before throwing exception
138
- const partialResponse = mmApiResponse;
139
- const { errorCount, batchErrors } = ErrorProcessor.extractErrorDetails(partialResponse, entityType);
140
- if (batchCacheManager) {
141
- await ErrorProcessor.cacheSuccessfulRecordsOnPartialFailure(entityType, toProcess, batchErrors, batchCacheManager);
142
- }
143
- let upsertedEntities = 0;
144
- if (entityType === ERPObjType.LABOR_TICKETS) {
145
- const partial = partialResponse;
146
- upsertedEntities =
147
- (partial.data.updated || 0) + (partial.data.inserted || 0);
148
- }
149
- else {
150
- const partial = partialResponse;
151
- upsertedEntities = partial.data.affectedRows || 0;
152
- }
153
- throw new MMBatchValidationError({
154
- message: partialResponse.message || "Entities processed with partial failures",
155
- upsertedEntities: upsertedEntities,
156
- localDedupeCount: result.localDedupeCount,
157
- apiDedupeCount: toProcess.length - upsertedEntities - errorCount,
158
- errorCount: errorCount,
159
- httpStatus: mmApiResponse.httpStatus,
160
- batchErrors: batchErrors,
161
- });
162
- }
163
- else {
164
- throw new Error(`writeEntitiesToMM: Unknown HTTP status code: ${mmApiResponse.httpStatus}. An exception was expected.`);
165
- }
166
- }
167
- }
168
- //# sourceMappingURL=mm-entity-processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mm-entity-processor.js","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/mm-entity-processor.ts"],"names":[],"mappings":"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"}