@machinemetrics/mm-erp-sdk 0.1.1-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 (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +147 -0
  3. package/dist/config-2l5vnNkA.js +418 -0
  4. package/dist/config-2l5vnNkA.js.map +1 -0
  5. package/dist/connector-factory-CQ8e7Tae.js +21 -0
  6. package/dist/connector-factory-CQ8e7Tae.js.map +1 -0
  7. package/dist/hashed-cache-manager-Ci9X3GAB.js +292 -0
  8. package/dist/hashed-cache-manager-Ci9X3GAB.js.map +1 -0
  9. package/dist/index-Cn9ccxOO.js +179 -0
  10. package/dist/index-Cn9ccxOO.js.map +1 -0
  11. package/dist/index.d.ts +35 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/knexfile-1qKKIORB.js +20 -0
  14. package/dist/knexfile-1qKKIORB.js.map +1 -0
  15. package/dist/knexfile.d.ts +6 -0
  16. package/dist/knexfile.d.ts.map +1 -0
  17. package/dist/logger-QG73MndU.js +17523 -0
  18. package/dist/logger-QG73MndU.js.map +1 -0
  19. package/dist/migrations/20241015162631_create_cache_table.js +17 -0
  20. package/dist/migrations/20241015162631_create_cache_table.js.map +1 -0
  21. package/dist/migrations/20241015162632_create_sdk_cache_table.js +17 -0
  22. package/dist/migrations/20241015162632_create_sdk_cache_table.js.map +1 -0
  23. package/dist/migrations/20250103162631_create_record_tracking_table.js +17 -0
  24. package/dist/migrations/20250103162631_create_record_tracking_table.js.map +1 -0
  25. package/dist/mm-erp-sdk.js +3503 -0
  26. package/dist/mm-erp-sdk.js.map +1 -0
  27. package/dist/services/caching-service/batch-cache-manager.d.ts +52 -0
  28. package/dist/services/caching-service/batch-cache-manager.d.ts.map +1 -0
  29. package/dist/services/caching-service/hashed-cache-manager.d.ts +83 -0
  30. package/dist/services/caching-service/hashed-cache-manager.d.ts.map +1 -0
  31. package/dist/services/caching-service/index.d.ts +92 -0
  32. package/dist/services/caching-service/index.d.ts.map +1 -0
  33. package/dist/services/caching-service/record-tracking-manager.d.ts +15 -0
  34. package/dist/services/caching-service/record-tracking-manager.d.ts.map +1 -0
  35. package/dist/services/data-sync-service/configuration-manager.d.ts +50 -0
  36. package/dist/services/data-sync-service/configuration-manager.d.ts.map +1 -0
  37. package/dist/services/data-sync-service/data-sync-service.d.ts +2 -0
  38. package/dist/services/data-sync-service/data-sync-service.d.ts.map +1 -0
  39. package/dist/services/data-sync-service/index.d.ts +10 -0
  40. package/dist/services/data-sync-service/index.d.ts.map +1 -0
  41. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.d.ts +2 -0
  42. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.d.ts.map +1 -0
  43. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +41 -0
  44. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -0
  45. package/dist/services/data-sync-service/jobs/from-erp.d.ts +4 -0
  46. package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -0
  47. package/dist/services/data-sync-service/jobs/from-erp.js +42 -0
  48. package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -0
  49. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.d.ts +2 -0
  50. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.d.ts.map +1 -0
  51. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +41 -0
  52. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -0
  53. package/dist/services/data-sync-service/jobs/run-migrations.d.ts +2 -0
  54. package/dist/services/data-sync-service/jobs/run-migrations.d.ts.map +1 -0
  55. package/dist/services/data-sync-service/jobs/run-migrations.js +21 -0
  56. package/dist/services/data-sync-service/jobs/run-migrations.js.map +1 -0
  57. package/dist/services/data-sync-service/jobs/to-erp.d.ts +4 -0
  58. package/dist/services/data-sync-service/jobs/to-erp.d.ts.map +1 -0
  59. package/dist/services/data-sync-service/jobs/to-erp.js +39 -0
  60. package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -0
  61. package/dist/services/erp-api-services/errors.d.ts +22 -0
  62. package/dist/services/erp-api-services/errors.d.ts.map +1 -0
  63. package/dist/services/erp-api-services/graphql/graphql-service.d.ts +40 -0
  64. package/dist/services/erp-api-services/graphql/graphql-service.d.ts.map +1 -0
  65. package/dist/services/erp-api-services/graphql/types.d.ts +32 -0
  66. package/dist/services/erp-api-services/graphql/types.d.ts.map +1 -0
  67. package/dist/services/erp-api-services/index.d.ts +9 -0
  68. package/dist/services/erp-api-services/index.d.ts.map +1 -0
  69. package/dist/services/erp-api-services/oauth-client.d.ts +45 -0
  70. package/dist/services/erp-api-services/oauth-client.d.ts.map +1 -0
  71. package/dist/services/erp-api-services/rest/get-query-params.d.ts +50 -0
  72. package/dist/services/erp-api-services/rest/get-query-params.d.ts.map +1 -0
  73. package/dist/services/erp-api-services/rest/rest-api-service.d.ts +35 -0
  74. package/dist/services/erp-api-services/rest/rest-api-service.d.ts.map +1 -0
  75. package/dist/services/erp-api-services/types.d.ts +27 -0
  76. package/dist/services/erp-api-services/types.d.ts.map +1 -0
  77. package/dist/services/mm-api-service/index.d.ts +31 -0
  78. package/dist/services/mm-api-service/index.d.ts.map +1 -0
  79. package/dist/services/mm-api-service/mm-api-service.d.ts +214 -0
  80. package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -0
  81. package/dist/services/mm-api-service/token-mgr.d.ts +33 -0
  82. package/dist/services/mm-api-service/token-mgr.d.ts.map +1 -0
  83. package/dist/services/mm-api-service/types/checkpoint.d.ts +13 -0
  84. package/dist/services/mm-api-service/types/checkpoint.d.ts.map +1 -0
  85. package/dist/services/mm-api-service/types/entity-transformer.d.ts +58 -0
  86. package/dist/services/mm-api-service/types/entity-transformer.d.ts.map +1 -0
  87. package/dist/services/mm-api-service/types/mm-response-interfaces.d.ts +263 -0
  88. package/dist/services/mm-api-service/types/mm-response-interfaces.d.ts.map +1 -0
  89. package/dist/services/mm-api-service/types/receive-types.d.ts +57 -0
  90. package/dist/services/mm-api-service/types/receive-types.d.ts.map +1 -0
  91. package/dist/services/mm-api-service/types/send-types.d.ts +147 -0
  92. package/dist/services/mm-api-service/types/send-types.d.ts.map +1 -0
  93. package/dist/services/reporting-service/index.d.ts +5 -0
  94. package/dist/services/reporting-service/index.d.ts.map +1 -0
  95. package/dist/services/reporting-service/logger.d.ts +4 -0
  96. package/dist/services/reporting-service/logger.d.ts.map +1 -0
  97. package/dist/services/sql-server-erp-service/configuration.d.ts +15 -0
  98. package/dist/services/sql-server-erp-service/configuration.d.ts.map +1 -0
  99. package/dist/services/sql-server-erp-service/index.d.ts +16 -0
  100. package/dist/services/sql-server-erp-service/index.d.ts.map +1 -0
  101. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts +31 -0
  102. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts.map +1 -0
  103. package/dist/services/sql-server-erp-service/internal/sql-server-config.d.ts +65 -0
  104. package/dist/services/sql-server-erp-service/internal/sql-server-config.d.ts.map +1 -0
  105. package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.d.ts +20 -0
  106. package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.d.ts.map +1 -0
  107. package/dist/services/sql-server-erp-service/internal/types/sql-server-types.d.ts +3 -0
  108. package/dist/services/sql-server-erp-service/internal/types/sql-server-types.d.ts.map +1 -0
  109. package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts +35 -0
  110. package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts.map +1 -0
  111. package/dist/services/sql-server-erp-service/sql-server-service.d.ts +37 -0
  112. package/dist/services/sql-server-erp-service/sql-server-service.d.ts.map +1 -0
  113. package/dist/services/sql-server-erp-service/types/sql-input-param.d.ts +10 -0
  114. package/dist/services/sql-server-erp-service/types/sql-input-param.d.ts.map +1 -0
  115. package/dist/services/sqlite-service/index.d.ts +2 -0
  116. package/dist/services/sqlite-service/index.d.ts.map +1 -0
  117. package/dist/services/sqlite-service/sqlite-coordinator.d.ts +28 -0
  118. package/dist/services/sqlite-service/sqlite-coordinator.d.ts.map +1 -0
  119. package/dist/types/erp-connector.d.ts +40 -0
  120. package/dist/types/erp-connector.d.ts.map +1 -0
  121. package/dist/types/erp-types.d.ts +32 -0
  122. package/dist/types/erp-types.d.ts.map +1 -0
  123. package/dist/types/index.d.ts +7 -0
  124. package/dist/types/index.d.ts.map +1 -0
  125. package/dist/utils/application-initializer.d.ts +15 -0
  126. package/dist/utils/application-initializer.d.ts.map +1 -0
  127. package/dist/utils/cleanup-numbers.d.ts +2 -0
  128. package/dist/utils/cleanup-numbers.d.ts.map +1 -0
  129. package/dist/utils/connector-factory.d.ts +8 -0
  130. package/dist/utils/connector-factory.d.ts.map +1 -0
  131. package/dist/utils/data-transformation.d.ts +20 -0
  132. package/dist/utils/data-transformation.d.ts.map +1 -0
  133. package/dist/utils/erp-type-from-entity.d.ts +5 -0
  134. package/dist/utils/erp-type-from-entity.d.ts.map +1 -0
  135. package/dist/utils/http-client.d.ts +35 -0
  136. package/dist/utils/http-client.d.ts.map +1 -0
  137. package/dist/utils/index.d.ts +57 -0
  138. package/dist/utils/index.d.ts.map +1 -0
  139. package/dist/utils/local-data-store/database-lock.d.ts +29 -0
  140. package/dist/utils/local-data-store/database-lock.d.ts.map +1 -0
  141. package/dist/utils/local-data-store/jobs-shared-data.d.ts +34 -0
  142. package/dist/utils/local-data-store/jobs-shared-data.d.ts.map +1 -0
  143. package/dist/utils/mm-labor-ticket-helpers.d.ts +9 -0
  144. package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -0
  145. package/dist/utils/removeExtraneousFields.d.ts +6 -0
  146. package/dist/utils/removeExtraneousFields.d.ts.map +1 -0
  147. package/dist/utils/removeIdFieldFromPayload.d.ts +6 -0
  148. package/dist/utils/removeIdFieldFromPayload.d.ts.map +1 -0
  149. package/dist/utils/resource-group.d.ts +11 -0
  150. package/dist/utils/resource-group.d.ts.map +1 -0
  151. package/dist/utils/standard-process-drivers/error-processor.d.ts +68 -0
  152. package/dist/utils/standard-process-drivers/error-processor.d.ts.map +1 -0
  153. package/dist/utils/standard-process-drivers/index.d.ts +3 -0
  154. package/dist/utils/standard-process-drivers/index.d.ts.map +1 -0
  155. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +18 -0
  156. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts.map +1 -0
  157. package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +40 -0
  158. package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -0
  159. package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +178 -0
  160. package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -0
  161. package/dist/utils/time-utils.d.ts +31 -0
  162. package/dist/utils/time-utils.d.ts.map +1 -0
  163. package/dist/utils/timezone.d.ts +21 -0
  164. package/dist/utils/timezone.d.ts.map +1 -0
  165. package/dist/utils/trimObjectValues.d.ts +5 -0
  166. package/dist/utils/trimObjectValues.d.ts.map +1 -0
  167. package/dist/utils/uniqueRows.d.ts +9 -0
  168. package/dist/utils/uniqueRows.d.ts.map +1 -0
  169. package/package.json +50 -0
  170. package/src/index.ts +98 -0
  171. package/src/knexfile.ts +21 -0
  172. package/src/migrations/20241015162631_create_cache_table.ts +15 -0
  173. package/src/migrations/20241015162632_create_sdk_cache_table.ts +15 -0
  174. package/src/migrations/20250103162631_create_record_tracking_table.ts +18 -0
  175. package/src/services/caching-service/batch-cache-manager.ts +111 -0
  176. package/src/services/caching-service/hashed-cache-manager.ts +253 -0
  177. package/src/services/caching-service/index.ts +114 -0
  178. package/src/services/caching-service/record-tracking-manager.ts +41 -0
  179. package/src/services/data-sync-service/configuration-manager.ts +153 -0
  180. package/src/services/data-sync-service/data-sync-service.ts +100 -0
  181. package/src/services/data-sync-service/index.ts +14 -0
  182. package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +38 -0
  183. package/src/services/data-sync-service/jobs/from-erp.ts +55 -0
  184. package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +44 -0
  185. package/src/services/data-sync-service/jobs/run-migrations.ts +21 -0
  186. package/src/services/data-sync-service/jobs/to-erp.ts +53 -0
  187. package/src/services/erp-api-services/errors.ts +115 -0
  188. package/src/services/erp-api-services/graphql/graphql-service.ts +116 -0
  189. package/src/services/erp-api-services/graphql/types.ts +30 -0
  190. package/src/services/erp-api-services/index.ts +14 -0
  191. package/src/services/erp-api-services/oauth-client.ts +72 -0
  192. package/src/services/erp-api-services/rest/get-query-params.ts +63 -0
  193. package/src/services/erp-api-services/rest/rest-api-service.ts +212 -0
  194. package/src/services/erp-api-services/types.ts +28 -0
  195. package/src/services/mm-api-service/index.ts +83 -0
  196. package/src/services/mm-api-service/mm-api-service.ts +685 -0
  197. package/src/services/mm-api-service/token-mgr.ts +123 -0
  198. package/src/services/mm-api-service/types/checkpoint.ts +13 -0
  199. package/src/services/mm-api-service/types/entity-transformer.ts +298 -0
  200. package/src/services/mm-api-service/types/mm-response-interfaces.ts +293 -0
  201. package/src/services/mm-api-service/types/receive-types.ts +89 -0
  202. package/src/services/mm-api-service/types/send-types.ts +383 -0
  203. package/src/services/reporting-service/index.ts +4 -0
  204. package/src/services/reporting-service/logger.ts +117 -0
  205. package/src/services/sql-server-erp-service/configuration.ts +14 -0
  206. package/src/services/sql-server-erp-service/index.ts +18 -0
  207. package/src/services/sql-server-erp-service/internal/sql-labor-ticket-operations.ts +66 -0
  208. package/src/services/sql-server-erp-service/internal/sql-server-config.ts +38 -0
  209. package/src/services/sql-server-erp-service/internal/sql-transaction-manager.ts +45 -0
  210. package/src/services/sql-server-erp-service/internal/types/sql-server-types.ts +23 -0
  211. package/src/services/sql-server-erp-service/sql-server-helpers.ts +99 -0
  212. package/src/services/sql-server-erp-service/sql-server-service.ts +191 -0
  213. package/src/services/sql-server-erp-service/types/sql-input-param.ts +14 -0
  214. package/src/services/sqlite-service/index.ts +1 -0
  215. package/src/services/sqlite-service/sqlite-coordinator.ts +80 -0
  216. package/src/types/erp-connector.ts +46 -0
  217. package/src/types/erp-types.ts +37 -0
  218. package/src/types/index.ts +13 -0
  219. package/src/utils/application-initializer.ts +62 -0
  220. package/src/utils/cleanup-numbers.ts +5 -0
  221. package/src/utils/connector-factory.ts +34 -0
  222. package/src/utils/data-transformation.ts +58 -0
  223. package/src/utils/erp-type-from-entity.ts +12 -0
  224. package/src/utils/http-client.ts +137 -0
  225. package/src/utils/index.ts +71 -0
  226. package/src/utils/local-data-store/database-lock.ts +86 -0
  227. package/src/utils/local-data-store/jobs-shared-data.ts +111 -0
  228. package/src/utils/mm-labor-ticket-helpers.ts +28 -0
  229. package/src/utils/removeExtraneousFields.ts +22 -0
  230. package/src/utils/removeIdFieldFromPayload.ts +22 -0
  231. package/src/utils/resource-group.ts +92 -0
  232. package/src/utils/standard-process-drivers/error-processor.ts +417 -0
  233. package/src/utils/standard-process-drivers/index.ts +6 -0
  234. package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +261 -0
  235. package/src/utils/standard-process-drivers/mm-entity-processor.ts +265 -0
  236. package/src/utils/standard-process-drivers/standard-process-drivers.ts +459 -0
  237. package/src/utils/time-utils.ts +131 -0
  238. package/src/utils/timezone.ts +96 -0
  239. package/src/utils/trimObjectValues.ts +12 -0
  240. package/src/utils/uniqueRows.ts +40 -0
@@ -0,0 +1,68 @@
1
+ import { ERPObjType } from "../../types/erp-types";
2
+ import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager";
3
+ import { IToRESTApiObject, MM207NonLaborTicketResponse, MM207LaborTicketResponse } from "../../services/mm-api-service";
4
+ /**
5
+ * Handles error processing and record management utilities for MM API operations
6
+ */
7
+ export declare 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: ERPObjType, batchErrors: Array<{
15
+ message: string;
16
+ errorEntities: IToRESTApiObject[];
17
+ }>): Set<string>;
18
+ /**
19
+ * Filters out failed records, returning only successful ones
20
+ * @param entityType The type of entity being processed
21
+ * @param allRecords All records (typed objects) that were sent to the API
22
+ * @param failedKeySet Set of primary keys for records that failed
23
+ * @returns Array of records that succeeded
24
+ */
25
+ static filterSuccessfulRecords(entityType: ERPObjType, allRecords: IToRESTApiObject[], failedKeySet: Set<string>): IToRESTApiObject[];
26
+ /**
27
+ * Orchestrates the caching of successful records on partial failure
28
+ * @param entityType The type of entity being processed
29
+ * @param toProcess All records that were sent to the API (all are now guaranteed to be typed objects)
30
+ * @param batchErrors Array of batch errors containing failed entities
31
+ * @param batchCacheManager The cache manager instance
32
+ */
33
+ static cacheSuccessfulRecordsOnPartialFailure(entityType: ERPObjType, toProcess: IToRESTApiObject[], batchErrors: Array<{
34
+ message: string;
35
+ errorEntities: IToRESTApiObject[];
36
+ }>, batchCacheManager: BatchCacheManager): Promise<void>;
37
+ /**
38
+ * Extracts error count and batch errors from MM API response for partial failures (HTTP 207)
39
+ * This supports all entities, including the slightly different format for labor tickets.
40
+ * In case of labor tickets, the updateErrors and insertErrors arrays are combined into errorEntities.
41
+ * @param mmApiResponse The full MM API response object
42
+ * @param entityType The type of entity being processed (determines response structure)
43
+ * @returns Object containing errorCount and batchErrors
44
+ * See MM207NonLaborTicketResponse and MM207LaborTicketResponse for response structure details
45
+ */
46
+ static extractErrorDetails(mmApiResponse: MM207NonLaborTicketResponse | MM207LaborTicketResponse, entityType: ERPObjType): {
47
+ errorCount: number;
48
+ batchErrors: Array<{
49
+ message: string;
50
+ errorEntities: IToRESTApiObject[];
51
+ }>;
52
+ };
53
+ /**
54
+ * Extracts error details from a 500 HTTP exception when it contains structured error data
55
+ * @param exception The caught exception from MM API call
56
+ * @param entityType The type of entity being processed
57
+ * @returns Object containing errorCount and batchErrors, or null if not a structured 500 error
58
+ * See MM500NonLaborTicketException and MM500LaborTicketException for exception structure details
59
+ */
60
+ static extractErrorDetailsFrom500Exception(exception: unknown, entityType: ERPObjType): {
61
+ errorCount: number;
62
+ batchErrors: Array<{
63
+ message: string;
64
+ errorEntities: IToRESTApiObject[];
65
+ }>;
66
+ } | null;
67
+ }
68
+ //# sourceMappingURL=error-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-processor.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/error-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AAIvC;;GAEG;AACH,qBAAa,cAAc;IACzB;;;;;OAKG;IACH,MAAM,CAAC,wBAAwB,CAC7B,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,KAAK,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;KACnC,CAAC,GACD,GAAG,CAAC,MAAM,CAAC;IAuBd;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAC5B,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,gBAAgB,EAAE;IAuBrB;;;;;;OAMG;WACU,sCAAsC,CACjD,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,gBAAgB,EAAE,EAC7B,WAAW,EAAE,KAAK,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;KACnC,CAAC,EACF,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,IAAI,CAAC;IAqBhB;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CACxB,aAAa,EAAE,2BAA2B,GAAG,wBAAwB,EACrE,UAAU,EAAE,UAAU,GACrB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,KAAK,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;SACnC,CAAC,CAAC;KACJ;IAqGD;;;;;;OAMG;IACH,MAAM,CAAC,mCAAmC,CACxC,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,UAAU,GACrB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,KAAK,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;SACnC,CAAC,CAAC;KACJ,GAAG,IAAI;CAkKT"}
@@ -0,0 +1,3 @@
1
+ export { StandardProcessDrivers } from "./standard-process-drivers";
2
+ export type { WriteEntitiesToMMResult, MMBatchValidationError, } from "./standard-process-drivers";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { ERPType } from "../../types/erp-types";
2
+ import { IERPLaborTicketHandler } from "../../types/erp-connector";
3
+ /**
4
+ * Handles synchronization of labor tickets between MachineMetrics and ERP systems
5
+ */
6
+ export declare class LaborTicketERPSynchronizer {
7
+ /**
8
+ * Synchronizes updated labor tickets from MachineMetrics to an ERP system
9
+ */
10
+ static syncToERP(connectorType: ERPType, connector: IERPLaborTicketHandler): Promise<void>;
11
+ /**
12
+ * Retries labor tickets that have failed to be created or updated in the ERP during the sync
13
+ */
14
+ static retryFailed(connectorType: ERPType, connector: IERPLaborTicketHandler): Promise<void>;
15
+ private static writeLaborTicketIdToMM;
16
+ private static processLaborTicket;
17
+ }
18
+ //# sourceMappingURL=labor-ticket-erp-synchronizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labor-ticket-erp-synchronizer.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAOnE;;GAEG;AACH,qBAAa,0BAA0B;IACrC;;OAEG;WACU,SAAS,CACpB,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;IA4GhB;;OAEG;WACU,WAAW,CACtB,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;mBA+DK,sBAAsB;mBAetB,kBAAkB;CAkDxC"}
@@ -0,0 +1,40 @@
1
+ import { ERPObjType } from "../../types/erp-types";
2
+ import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager";
3
+ import { IToRESTApiObject } from "../../services/mm-api-service";
4
+ import { WriteEntitiesToMMResult } from "./standard-process-drivers";
5
+ /**
6
+ * Handles processing of entities to the MachineMetrics API
7
+ */
8
+ export declare class MMEntityProcessor {
9
+ /**
10
+ * Writes entities to MM API with deduplication and caching
11
+ */
12
+ static writeEntities(entityType: ERPObjType, mmRecords: IToRESTApiObject[], batchCacheManager: BatchCacheManager | null): Promise<WriteEntitiesToMMResult>;
13
+ /**
14
+ * Deduplicates records against cache
15
+ * Returns the records to process and the result object
16
+ * If the batchCacheManager is provided, the records are deduplicated against the cache
17
+ * If the batchCacheManager is not provided, the records are not deduplicated
18
+ */
19
+ private static _prepareAndDedupe;
20
+ /**
21
+ * Sends records to MM API
22
+ */
23
+ private static _sendToAPI;
24
+ /**
25
+ * Handles exceptions from API calls, converting structured 500 errors to MMBatchValidationError
26
+ * @throws MMBatchValidationError for structured 500 errors
27
+ * @throws The original exception for all other errors
28
+ */
29
+ private static _handleException;
30
+ /**
31
+ * Handles the MM API response based on HTTP status code, caching successful records
32
+ * and throwing exceptions for partial failures
33
+ *
34
+ * @returns The final result for success cases
35
+ * @throws MMBatchValidationError for partial success cases
36
+ * @throws Error for unknown status codes
37
+ */
38
+ private static _handleResponse;
39
+ }
40
+ //# sourceMappingURL=mm-entity-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mm-entity-processor.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/mm-entity-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EACL,gBAAgB,EAcjB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,uBAAuB,EAExB,MAAM,4BAA4B,CAAC;AAGpC;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,aAAa,CACxB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,gBAAgB,EAAE,EAC7B,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAC1C,OAAO,CAAC,uBAAuB,CAAC;IAiCnC;;;;;OAKG;mBACkB,iBAAiB;IA+BtC;;OAEG;mBACkB,UAAU;IAsC/B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgC/B;;;;;;;OAOG;mBACkB,eAAe;CAuErC"}
@@ -0,0 +1,178 @@
1
+ import { ERPType, ERPObjType } from "../../types/erp-types";
2
+ import { IERPLaborTicketHandler } from "../../types/erp-connector";
3
+ import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager";
4
+ import { IToRESTApiObject, MMSendWorkOrderBatch } from "../../services/mm-api-service";
5
+ /**
6
+ * The result of writing entities to the MachineMetrics API on complete success.
7
+ */
8
+ export interface WriteEntitiesToMMResult {
9
+ message: string;
10
+ upsertedEntities: number;
11
+ localDedupeCount: number;
12
+ apiDedupeCount: number;
13
+ }
14
+ export declare class MMBatchValidationError extends Error {
15
+ readonly upsertedEntities: number;
16
+ readonly localDedupeCount: number;
17
+ readonly apiDedupeCount: number;
18
+ readonly errorCount: number;
19
+ readonly httpStatus: number;
20
+ readonly batchErrors: Array<{
21
+ message: string;
22
+ errorEntities: IToRESTApiObject[];
23
+ }>;
24
+ constructor(options: {
25
+ message: string;
26
+ upsertedEntities: number;
27
+ localDedupeCount: number;
28
+ apiDedupeCount: number;
29
+ errorCount: number;
30
+ httpStatus: number;
31
+ batchErrors: Array<{
32
+ message: string;
33
+ errorEntities: IToRESTApiObject[];
34
+ }>;
35
+ });
36
+ }
37
+ /**
38
+ * A collection of standardized process drivers that orchestrate various synchronization
39
+ * and integration processes between systems. Use of these drivers is optional,
40
+ * and useful as a reference implementation for how to implement the various processes.
41
+ */
42
+ export declare class StandardProcessDrivers {
43
+ /**
44
+ * Synchronizes updated labor tickets from MachineMetrics to an ERP system:
45
+ *
46
+ * Initializes a checkpoint that tracks the last time labor tickets were synced,
47
+ * fetches labor tickets from MM and converts them to the company timezone,
48
+ * creates or updates the labor ticket in the ERP via connector-specific implementations,
49
+ * updates the labor ticket id in MM on newly created labor tickets,
50
+ * and saves the checkpoint
51
+ */
52
+ static syncLaborTicketsToERP(connectorType: ERPType, connector: IERPLaborTicketHandler): Promise<void>;
53
+ /**
54
+ * Retries labor tickets that have failed to be created or updated in the ERP during the sync:
55
+ *
56
+ * Fetches failed labor tickets from MM, processes them, and updates the labor ticket id in MM.
57
+ * If the labor ticket is successfully created or updated, it is added to the list of successful labor ticket ids,
58
+ * which are then deleted from the list of failed labor ticket ids.
59
+ */
60
+ static retryFailedLaborTickets(connectorType: ERPType, connector: IERPLaborTicketHandler): Promise<void>;
61
+ /**
62
+ * Writes a batch of records to MM for a specific entity type by:
63
+ * 1. Deduplicating against cached records (localDedupeCount)
64
+ * 2. Sending non-duplicate records to the MM API (apiDedupeCount)
65
+ * 3. Storing successful records in cache
66
+ *
67
+ * An example usage pattern including comprehensive error handling:
68
+ * ```
69
+ * try {
70
+ * const result = await StandardProcessDrivers.writeEntitiesToMM(
71
+ * 'WorkOrders',
72
+ * workOrderRecords,
73
+ * batchCacheManager
74
+ * );
75
+ *
76
+ * // HTTP 200 - Complete success
77
+ * console.log(`✅ Success: ${result.message}`);
78
+ * console.log(`📊 Metrics: ${result.upsertedEntities} upserted, ${result.localDedupeCount} locally deduplicated, ${result.apiDedupeCount} API deduplicated`);
79
+ *
80
+ * } catch (error) {
81
+ * if (error instanceof MMBatchValidationError) {
82
+ * // HTTP 207 - Partial success with some validation errors
83
+ * // HTTP 500 - A specific type of which represent complete failure due to validation issues;
84
+ * // other 500 types represent failure due to other issues and are not converted to MMBatchValidationError
85
+ *
86
+ * console.log(`⚠️ Batch processing completed with errors (HTTP ${error.httpStatus})`);
87
+ * console.log(`📊 Metrics: ${error.upsertedEntities} upserted, ${error.localDedupeCount} locally deduplicated, ${error.apiDedupeCount} API deduplicated`);
88
+ * console.log(`❌ Error count: ${error.errorCount}`);
89
+ *
90
+ * // Process specific batch errors for retry or logging
91
+ * error.batchErrors.forEach((batchError, index) => {
92
+ * console.log(`Batch ${index + 1} error: ${batchError.message}`);
93
+ * console.log(`Affected entities:`, batchError.errorEntities);
94
+ *
95
+ * // Example: Queue failed entities for retry
96
+ * await queueForRetry(batchError.errorEntities);
97
+ * });
98
+ *
99
+ * // Decide whether to continue or halt based on httpStatus
100
+ * if (error.httpStatus === 207) {
101
+ * // Partial success - some records processed successfully
102
+ * console.log('⚠️ Continuing with partial success');
103
+ * } else if (error.httpStatus === 500) {
104
+ * // Complete failure - no records processed
105
+ * console.log('🛑 Complete failure - no records processed');
106
+ * throw error; // Re-throw if complete failure should halt the process
107
+ * }
108
+ *
109
+ * } else {
110
+ * // Other underlying errors (network issues, authentication, etc.)
111
+ * console.error('🚨 Unexpected error during MM API call:', error);
112
+ *
113
+ * // Example: Check for specific error types
114
+ * if (error.message?.includes('authentication')) {
115
+ * console.error('🔐 Authentication issue - check MM API credentials');
116
+ * } else if (error.message?.includes('network') || error.code === 'ECONNREFUSED') {
117
+ * console.error('🌐 Network connectivity issue - check MM API endpoint');
118
+ * }
119
+ *
120
+ * throw error; // Re-throw for upstream handling
121
+ * }
122
+ * }
123
+ * ```
124
+ *
125
+ * @param entityType The type of entity being processed
126
+ * @param mmRecords The records to process
127
+ * @param batchCacheManager The batch cache manager instance; pass in null if caching is not desired
128
+ *
129
+ * @returns WriteEntitiesToMMResult on complete success (HTTP 200)
130
+ * @throws MMBatchValidationError on partial success (HTTP 207) or complete failure (HTTP 500) with structured error details
131
+ * @throws Error on other underlying issues (network, authentication, etc.)
132
+ */
133
+ static writeEntitiesToMM(entityType: ERPObjType, mmRecords: IToRESTApiObject[], batchCacheManager: BatchCacheManager | null): Promise<WriteEntitiesToMMResult>;
134
+ /**
135
+ * Writes a batch of Work Order related entities to MM maintaining referential integrity by:
136
+ * 1. Processing parts first (base entities)
137
+ * 2. Processing part operations (depends on parts)
138
+ * 3. Processing work orders (depends on parts)
139
+ * 4. Processing work order operations (depends on work orders and part operations)
140
+ *
141
+ * This ensures all foreign key constraints are satisfied and prevents referential integrity errors.
142
+ *
143
+ * @param workOrderBatch The batch containing all related entities
144
+ * @param batchCacheManager The batch cache manager instance; pass in null if caching is not desired
145
+ *
146
+ * @returns Combined results from all entity processing
147
+ * @throws MMBatchValidationError on partial success or complete failure with structured error details
148
+ * @throws Error on other underlying issues (network, authentication, etc.)
149
+ */
150
+ static writeWorkOrderBatchToMM(workOrderBatch: MMSendWorkOrderBatch, batchCacheManager: BatchCacheManager | null): Promise<{
151
+ parts: WriteEntitiesToMMResult;
152
+ partOperations: WriteEntitiesToMMResult;
153
+ workOrders: WriteEntitiesToMMResult;
154
+ workOrderOperations: WriteEntitiesToMMResult;
155
+ }>;
156
+ /**
157
+ * Processes flattened work order data and syncs it to MM maintaining referential integrity.
158
+ *
159
+ * This method expects flattened data where each row contains both work order and operation information
160
+ * with camelCase field names matching the GraphQL schema. It will automatically extract and deduplicate
161
+ * parts, part operations, work orders, and work order operations, then process them in the correct order
162
+ * to maintain referential integrity.
163
+ *
164
+ * @param flattenedData Array of flattened rows containing both work order and operation data (camelCase fields)
165
+ * @param batchCacheManager The batch cache manager instance; pass in null if caching is not desired
166
+ *
167
+ * @returns Combined results from all entity processing with detailed logging information
168
+ * @throws MMBatchValidationError on partial success or complete failure with structured error details
169
+ * @throws Error on other underlying issues (network, authentication, etc.)
170
+ */
171
+ static syncWorkOrderBatchFromFlattened(flattenedData: any[], batchCacheManager: BatchCacheManager | null): Promise<{
172
+ parts: WriteEntitiesToMMResult;
173
+ partOperations: WriteEntitiesToMMResult;
174
+ workOrders: WriteEntitiesToMMResult;
175
+ workOrderOperations: WriteEntitiesToMMResult;
176
+ }>;
177
+ }
178
+ //# sourceMappingURL=standard-process-drivers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-process-drivers.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/standard-process-drivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EAKrB,MAAM,+BAA+B,CAAC;AAIvC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,SAAgB,gBAAgB,EAAE,MAAM,CAAC;IACzC,SAAgB,gBAAgB,EAAE,MAAM,CAAC;IACzC,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,WAAW,EAAE,KAAK,CAAC;QACjC,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;KACnC,CAAC,CAAC;gBAES,OAAO,EAAE;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,KAAK,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;SACnC,CAAC,CAAC;KACJ;CAUF;AAED;;;;GAIG;AACH,qBAAa,sBAAsB;IACjC;;;;;;;;OAQG;WACU,qBAAqB,CAChC,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;OAMG;WACU,uBAAuB,CAClC,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuEG;WACU,iBAAiB,CAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,gBAAgB,EAAE,EAC7B,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAC1C,OAAO,CAAC,uBAAuB,CAAC;IAQnC;;;;;;;;;;;;;;;OAeG;WACU,uBAAuB,CAClC,cAAc,EAAE,oBAAoB,EACpC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAC1C,OAAO,CAAC;QACT,KAAK,EAAE,uBAAuB,CAAC;QAC/B,cAAc,EAAE,uBAAuB,CAAC;QACxC,UAAU,EAAE,uBAAuB,CAAC;QACpC,mBAAmB,EAAE,uBAAuB,CAAC;KAC9C,CAAC;IAuCF;;;;;;;;;;;;;;OAcG;WACU,+BAA+B,CAC1C,aAAa,EAAE,GAAG,EAAE,EACpB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAC1C,OAAO,CAAC;QACT,KAAK,EAAE,uBAAuB,CAAC;QAC/B,cAAc,EAAE,uBAAuB,CAAC;QACxC,UAAU,EAAE,uBAAuB,CAAC;QACpC,mBAAmB,EAAE,uBAAuB,CAAC;KAC9C,CAAC;CAkMH"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Calculates the difference in hours between two timestamps
3
+ * @param startTime ISO timestamp string
4
+ * @param endTime ISO timestamp string
5
+ * @param timezoneOffset timezone offset in hours
6
+ * @returns number representing hours difference, rounded to 3 decimal places
7
+ */
8
+ export declare function calculateTimeDifferenceInHours(startTime: string | null | undefined, endTime: string | null | undefined, timezoneOffset: number): number;
9
+ export declare const getSecondsOfDay: (timestamp: string | null) => string | null;
10
+ /**
11
+ * Apply timezone offsets to specified datetime fields in an object
12
+ * @param item The object to transform
13
+ * @param fields The fields to apply timezone offset to
14
+ * @param timezoneOffset The timezone offset to apply
15
+ * @returns The transformed object
16
+ */
17
+ export declare const applyTimezoneOffsetsToFields: (item: Record<string, string>, fields: string[], timezoneOffset: number) => Record<string, string>;
18
+ interface TimezoneOffsetParams {
19
+ maxRetries: number;
20
+ retryIntervalMs: number;
21
+ }
22
+ /**
23
+ * Gets the timezone offset for the company and sets it in the cache
24
+ * The cached offset can be acquired from getCachedTimezoneOffset() in "./local-data-store/jobs-shared-data"
25
+ *
26
+ * @param params.maxRetries Maximum number of retry attempts
27
+ * @param params.retryIntervalMs Time to wait between retries in milliseconds
28
+ */
29
+ export declare const getTimezoneOffsetAndPersist: (params?: TimezoneOffsetParams) => Promise<void>;
30
+ export {};
31
+ //# sourceMappingURL=time-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-utils.d.ts","sourceRoot":"","sources":["../../src/utils/time-utils.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,cAAc,EAAE,MAAM,GACrB,MAAM,CA2BR;AAED,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,GAAG,IAAI,kBASvD,CAAC;AAEF;;;;;;GAMG;AAEH,eAAO,MAAM,4BAA4B,GACvC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,QAAQ,MAAM,EAAE,EAChB,gBAAgB,MAAM,KACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAcvB,CAAC;AAEF,UAAU,oBAAoB;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GACtC,SAAQ,oBAGP,KACA,OAAO,CAAC,IAAI,CA0Bd,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Gets the timezone offset in hours for the company's timezone
3
+ * @returns Promise<number> The timezone offset in hours
4
+ * @throws Error if unable to fetch timezone information
5
+ */
6
+ export declare const getTimezoneOffset: () => Promise<number>;
7
+ /**
8
+ * Converts a UTC/Zulu time to local time based on the provided timezone offset
9
+ * @param zuluTime The UTC/Zulu time to convert
10
+ * @param timezoneOffset The timezone offset in hours
11
+ * @returns The converted local time, or undefined if input is null/undefined
12
+ */
13
+ export declare const convertToLocalTime: (zuluTime: string | Date | null | undefined, timezoneOffset: number) => Date | undefined;
14
+ /**
15
+ * Formats a date with the timezone offset in ISO format with offset
16
+ * @param date The date string in format YYYY-MM-DD HH:mm:ss or YYYY-MM-DDTHH:mm:ss
17
+ * @param timezoneOffset The timezone offset in hours
18
+ * @returns The formatted date string in format: YYYY-MM-DDTHH:mm:ss+/-HH:MM
19
+ */
20
+ export declare const formatDateWithTZOffset: (date: string | null | undefined, timezoneOffset: number) => string | undefined;
21
+ //# sourceMappingURL=timezone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../src/utils/timezone.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,MAAM,CA6CxD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,EAC1C,gBAAgB,MAAM,KACrB,IAAI,GAAG,SAIT,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,gBAAgB,MAAM,KACrB,MAAM,GAAG,SAgBX,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Trims all string values in an object while preserving the object's structure
3
+ */
4
+ export declare const trimObjectValues: <T extends object>(obj: T) => T;
5
+ //# sourceMappingURL=trimObjectValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trimObjectValues.d.ts","sourceRoot":"","sources":["../../src/utils/trimObjectValues.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,KAAG,CAQ3D,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Extracts unique rows from data based on specified fields and sorts by up to two fields
3
+ * @param data Array of data objects
4
+ * @param fields Array of field names to use as a unique keys
5
+ * @param sortFields Optional array of field names to sort by (up to two fields)
6
+ * @returns Array of unique objects based on the specified fields, or an empty array if data is empty
7
+ */
8
+ export declare function getUniqueRows<T extends Record<string, unknown>>(data: T[], fields: (keyof T)[], sortFields?: (keyof T)[]): T[];
9
+ //# sourceMappingURL=uniqueRows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniqueRows.d.ts","sourceRoot":"","sources":["../../src/utils/uniqueRows.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,IAAI,EAAE,CAAC,EAAE,EACT,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EACnB,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GACvB,CAAC,EAAE,CA4BL"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@machinemetrics/mm-erp-sdk",
3
+ "description": "A library for syncing data between MachineMetrics and ERP systems",
4
+ "version": "0.1.1-beta.1",
5
+ "license": "MIT",
6
+ "author": "machinemetrics",
7
+ "main": "dist/mm-erp-sdk.js",
8
+ "types": "dist/index.d.ts",
9
+ "source": "src/index.ts",
10
+ "type": "module",
11
+ "engines": {
12
+ "node": ">=20"
13
+ },
14
+ "scripts": {
15
+ "build": "vite build && tsc --project tsconfig.declarations.json",
16
+ "start": "vite build --watch",
17
+ "type-check": "tsc --noEmit"
18
+ },
19
+ "dependencies": {
20
+ "@azure/msal-node": "^2.12.0",
21
+ "@ladjs/graceful": "^4.2.0",
22
+ "axios": "^1.7.3",
23
+ "axios-retry": "^4.5.0",
24
+ "better-sqlite3": "^11.3.0",
25
+ "bree": "^9.2.4",
26
+ "dotenv": "^16.4.5",
27
+ "json-stable-stringify": "^1.3.0",
28
+ "knex": "^3.1.0",
29
+ "lodash": "^4.17.21",
30
+ "mssql": "^11.0.1",
31
+ "winston": "^3.14.0",
32
+ "winston-daily-rotate-file": "^5.0.0",
33
+ "xxhashjs": "^0.2.2",
34
+ "zod": "^3.24.1"
35
+ },
36
+ "devDependencies": {
37
+ "@types/json-stable-stringify": "^1.1.0",
38
+ "@types/lodash": "^4.17.10",
39
+ "@types/mssql": "^9.1.6",
40
+ "@types/node": "^20.0.0",
41
+ "@types/xxhashjs": "^0.2.4",
42
+ "prettier": "^3.3.3",
43
+ "typescript": "^5.8.3",
44
+ "vite": "^5.3.4"
45
+ },
46
+ "files": [
47
+ "dist",
48
+ "src"
49
+ ]
50
+ }
package/src/index.ts ADDED
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Main entry point for the MM ERP Connector SDK.
3
+ * This file exports the public API that client code should use.
4
+ */
5
+
6
+ // Core interfaces and types
7
+ export type { IERPConnector } from "./types/erp-connector";
8
+ export { ERPType, ERPObjType } from "./types/erp-types";
9
+ export type { ERPPagination, ERPResponse, ERPObject } from "./types/erp-types";
10
+
11
+ // Configuration interfaces
12
+ export type { ErpApiConnectionParams } from "./services/data-sync-service/configuration-manager";
13
+ export { getErpApiConnectionParams } from "./services/data-sync-service/configuration-manager";
14
+ export { buildLogicalCondition } from "./services/erp-api-services/rest/get-query-params";
15
+ export type { ERPApiConfig } from "./services/erp-api-services/types";
16
+
17
+ // MM API client and types
18
+ export { MMApiClient } from "./services/mm-api-service";
19
+ export type {
20
+ MMReceiveLaborTicket,
21
+ MMReceiveLaborTicketReason,
22
+ MMReceiveLaborTicketWorkOrderOperation,
23
+ IToRESTApiObject,
24
+ } from "./services/mm-api-service";
25
+
26
+ export {
27
+ MMSendPerson,
28
+ MMSendResource,
29
+ MMSendPart,
30
+ MMSendPartOperation,
31
+ MMSendWorkOrder,
32
+ MMSendWorkOrderOperation,
33
+ MMSendReason,
34
+ MMSendLaborTicket,
35
+ } from "./services/mm-api-service";
36
+
37
+ export type { MMSendWorkOrderBatch } from "./services/mm-api-service";
38
+
39
+ // Utility functions that are safe for client use
40
+ export {
41
+ getUniqueRows,
42
+ removeExtraneousFields,
43
+ getPayloadWithoutIDField,
44
+ trimObjectValues,
45
+ cleanupNumbers,
46
+ addNewFieldFromExternalSource,
47
+ addNewFieldFromLookupField,
48
+ formatDateWithTZOffset,
49
+ applyTimezoneOffsetsToFields,
50
+ convertToLocalTime,
51
+ } from "./utils";
52
+
53
+ // HTTP client factory and types for custom API integrations
54
+ export { HTTPClientFactory } from "./utils/http-client";
55
+ export type { HTTPResponse } from "./utils/http-client";
56
+
57
+ // Application initialization utilities
58
+ export { ApplicationInitializer } from "./utils/application-initializer";
59
+
60
+ // Data sync service
61
+ export { runDataSyncService } from "./services/data-sync-service";
62
+
63
+ // Logging service
64
+ export { logger } from "./services/reporting-service";
65
+
66
+ // Labor ticket handler interface
67
+ export type { IERPLaborTicketHandler } from "./types/erp-connector";
68
+
69
+ // Process drivers and utilities
70
+ export { StandardProcessDrivers, getCachedTimezoneOffset } from "./utils";
71
+
72
+ // API services
73
+ export { RestAPIService } from "./services/erp-api-services/rest/rest-api-service";
74
+ export { ErrorHandler } from "./services/erp-api-services/errors";
75
+ export type {
76
+ QueryParams,
77
+ PaginatedAPIResponse,
78
+ } from "./services/erp-api-services/rest/get-query-params";
79
+ export { OAuthClient } from "./services/erp-api-services/oauth-client";
80
+ export type { OAuthConfig } from "./services/erp-api-services/oauth-client";
81
+ export { GraphQLService } from "./services/erp-api-services/graphql/graphql-service";
82
+ export type { GraphQLServerError } from "./services/erp-api-services/graphql/types";
83
+
84
+ // Caching services
85
+ export { BatchCacheManager } from "./services/caching-service/batch-cache-manager";
86
+
87
+ // Configuration services
88
+ export {
89
+ CoreConfiguration,
90
+ getSQLServerConfiguration,
91
+ } from "./services/data-sync-service/configuration-manager";
92
+
93
+ // SQL Server services
94
+ export {
95
+ SqlServerService,
96
+ SqlServerHelper,
97
+ } from "./services/sql-server-erp-service";
98
+ export type { SQLInput } from "./services/sql-server-erp-service";
@@ -0,0 +1,21 @@
1
+ import type { Knex } from "knex";
2
+ import path from "path";
3
+ import { fileURLToPath } from "url";
4
+
5
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
+
7
+ const config: { [key: string]: Knex.Config } = {
8
+ local: {
9
+ client: "better-sqlite3",
10
+ connection: {
11
+ filename: "./local.sqlite3",
12
+ },
13
+ useNullAsDefault: true,
14
+ migrations: {
15
+ directory: path.join(__dirname, "migrations"),
16
+ extension: "js",
17
+ },
18
+ },
19
+ };
20
+
21
+ export default config;
@@ -0,0 +1,15 @@
1
+ import { Knex } from "knex";
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.createTable("cache", (table) => {
5
+ table.increments("id");
6
+ table.jsonb("value").notNullable();
7
+ table.jsonb("type").notNullable().index();
8
+ table.string("key").unique().notNullable();
9
+ table.timestamps(true, true);
10
+ });
11
+ }
12
+
13
+ export async function down(knex: Knex): Promise<void> {
14
+ await knex.schema.dropTable("cache");
15
+ }
@@ -0,0 +1,15 @@
1
+ import { Knex } from "knex";
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.createTable("sdk_cache", (table) => {
5
+ table.increments("id");
6
+ table.string("type").notNullable().index();
7
+ table.string("key").notNullable();
8
+ table.timestamp("created_at").defaultTo(knex.fn.now());
9
+ table.unique(["type", "key"]); // Composite unique constraint
10
+ });
11
+ }
12
+
13
+ export async function down(knex: Knex): Promise<void> {
14
+ await knex.schema.dropTable("sdk_cache");
15
+ }
@@ -0,0 +1,18 @@
1
+ import { Knex } from "knex";
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.createTable("record_tracking", (table) => {
5
+ table.increments("id");
6
+ table.integer("entityType").notNullable().index();
7
+ table
8
+ .datetime("lastValue", { useTz: true, precision: 3 })
9
+ .notNullable()
10
+ .index();
11
+ table.string("recordId").notNullable().index();
12
+ table.timestamps(true, true);
13
+ });
14
+ }
15
+
16
+ export async function down(knex: Knex): Promise<void> {
17
+ await knex.schema.dropTable("record_tracking");
18
+ }