@machinemetrics/mm-erp-sdk 0.2.0-beta.3 → 0.3.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 (334) hide show
  1. package/README.md +5 -0
  2. package/dist/index.d.ts +43 -43
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +48 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/knexfile.d.ts.map +1 -1
  7. package/dist/knexfile.js +19 -0
  8. package/dist/knexfile.js.map +1 -0
  9. package/dist/migrations/20241015162631_create_cache_table.d.ts +4 -0
  10. package/dist/migrations/20241015162631_create_cache_table.d.ts.map +1 -0
  11. package/dist/migrations/20241015162631_create_cache_table.js +11 -15
  12. package/dist/migrations/20241015162631_create_cache_table.js.map +1 -1
  13. package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts +4 -0
  14. package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts.map +1 -0
  15. package/dist/migrations/20241015162632_create_sdk_cache_table.js +11 -15
  16. package/dist/migrations/20241015162632_create_sdk_cache_table.js.map +1 -1
  17. package/dist/migrations/20250103162631_create_record_tracking_table.d.ts +4 -0
  18. package/dist/migrations/20250103162631_create_record_tracking_table.d.ts.map +1 -0
  19. package/dist/migrations/20250103162631_create_record_tracking_table.js +14 -15
  20. package/dist/migrations/20250103162631_create_record_tracking_table.js.map +1 -1
  21. package/dist/services/caching-service/batch-cache-manager.d.ts +1 -1
  22. package/dist/services/caching-service/batch-cache-manager.d.ts.map +1 -1
  23. package/dist/services/caching-service/batch-cache-manager.js +84 -0
  24. package/dist/services/caching-service/batch-cache-manager.js.map +1 -0
  25. package/dist/services/caching-service/hashed-cache-manager.d.ts +2 -2
  26. package/dist/services/caching-service/hashed-cache-manager.d.ts.map +1 -1
  27. package/dist/services/caching-service/hashed-cache-manager.js +223 -0
  28. package/dist/services/caching-service/hashed-cache-manager.js.map +1 -0
  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/index.js +2 -0
  32. package/dist/services/caching-service/index.js.map +1 -0
  33. package/dist/services/caching-service/record-tracking-manager.d.ts +1 -1
  34. package/dist/services/caching-service/record-tracking-manager.d.ts.map +1 -1
  35. package/dist/services/caching-service/record-tracking-manager.js +28 -0
  36. package/dist/services/caching-service/record-tracking-manager.js.map +1 -0
  37. package/dist/services/data-sync-service/configuration-manager.d.ts +1 -1
  38. package/dist/services/data-sync-service/configuration-manager.d.ts.map +1 -1
  39. package/dist/services/data-sync-service/configuration-manager.js +163 -0
  40. package/dist/services/data-sync-service/configuration-manager.js.map +1 -0
  41. package/dist/services/data-sync-service/data-sync-service.d.ts.map +1 -1
  42. package/dist/services/data-sync-service/data-sync-service.js +104 -0
  43. package/dist/services/data-sync-service/data-sync-service.js.map +1 -0
  44. package/dist/services/data-sync-service/index.d.ts +3 -3
  45. package/dist/services/data-sync-service/index.d.ts.map +1 -1
  46. package/dist/services/data-sync-service/index.js +10 -0
  47. package/dist/services/data-sync-service/index.js.map +1 -0
  48. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +40 -39
  49. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -1
  50. package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -1
  51. package/dist/services/data-sync-service/jobs/from-erp.js +43 -36
  52. package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -1
  53. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +36 -35
  54. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -1
  55. package/dist/services/data-sync-service/jobs/run-migrations.js +22 -21
  56. package/dist/services/data-sync-service/jobs/run-migrations.js.map +1 -1
  57. package/dist/services/data-sync-service/jobs/to-erp.js +57 -48
  58. package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -1
  59. package/dist/services/data-sync-service/nats-labor-ticket-listener.js +290 -0
  60. package/dist/services/data-sync-service/nats-labor-ticket-listener.js.map +1 -0
  61. package/dist/services/erp-api-services/errors.d.ts +1 -1
  62. package/dist/services/erp-api-services/errors.d.ts.map +1 -1
  63. package/dist/services/erp-api-services/errors.js +83 -0
  64. package/dist/services/erp-api-services/errors.js.map +1 -0
  65. package/dist/services/erp-api-services/graphql/graphql-service.d.ts +2 -2
  66. package/dist/services/erp-api-services/graphql/graphql-service.d.ts.map +1 -1
  67. package/dist/services/erp-api-services/graphql/graphql-service.js +102 -0
  68. package/dist/services/erp-api-services/graphql/graphql-service.js.map +1 -0
  69. package/dist/services/erp-api-services/graphql/types.js +6 -0
  70. package/dist/services/erp-api-services/graphql/types.js.map +1 -0
  71. package/dist/services/erp-api-services/index.d.ts +8 -8
  72. package/dist/services/erp-api-services/index.d.ts.map +1 -1
  73. package/dist/services/erp-api-services/index.js +13 -0
  74. package/dist/services/erp-api-services/index.js.map +1 -0
  75. package/dist/services/erp-api-services/oauth-client.js +41 -0
  76. package/dist/services/erp-api-services/oauth-client.js.map +1 -0
  77. package/dist/services/erp-api-services/rest/get-query-params.js +23 -0
  78. package/dist/services/erp-api-services/rest/get-query-params.js.map +1 -0
  79. package/dist/services/erp-api-services/rest/rest-api-service.d.ts +2 -2
  80. package/dist/services/erp-api-services/rest/rest-api-service.d.ts.map +1 -1
  81. package/dist/services/erp-api-services/rest/rest-api-service.js +163 -0
  82. package/dist/services/erp-api-services/rest/rest-api-service.js.map +1 -0
  83. package/dist/services/erp-api-services/types.d.ts +2 -2
  84. package/dist/services/erp-api-services/types.d.ts.map +1 -1
  85. package/dist/services/erp-api-services/types.js +2 -0
  86. package/dist/services/erp-api-services/types.js.map +1 -0
  87. package/dist/services/mm-api-service/company-info.js +60 -0
  88. package/dist/services/mm-api-service/company-info.js.map +1 -0
  89. package/dist/services/mm-api-service/index.d.ts +8 -8
  90. package/dist/services/mm-api-service/index.d.ts.map +1 -1
  91. package/dist/services/mm-api-service/index.js +20 -0
  92. package/dist/services/mm-api-service/index.js.map +1 -0
  93. package/dist/services/mm-api-service/mm-api-service.d.ts +7 -7
  94. package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -1
  95. package/dist/services/mm-api-service/mm-api-service.js +531 -0
  96. package/dist/services/mm-api-service/mm-api-service.js.map +1 -0
  97. package/dist/services/mm-api-service/token-mgr.js +113 -0
  98. package/dist/services/mm-api-service/token-mgr.js.map +1 -0
  99. package/dist/services/mm-api-service/types/checkpoint.js +2 -0
  100. package/dist/services/mm-api-service/types/checkpoint.js.map +1 -0
  101. package/dist/services/mm-api-service/types/entity-transformer.d.ts +2 -2
  102. package/dist/services/mm-api-service/types/entity-transformer.d.ts.map +1 -1
  103. package/dist/services/mm-api-service/types/entity-transformer.js +186 -0
  104. package/dist/services/mm-api-service/types/entity-transformer.js.map +1 -0
  105. package/dist/services/mm-api-service/types/mm-response-interfaces.js +34 -0
  106. package/dist/services/mm-api-service/types/mm-response-interfaces.js.map +1 -0
  107. package/dist/services/mm-api-service/types/receive-types.js +56 -0
  108. package/dist/services/mm-api-service/types/receive-types.js.map +1 -0
  109. package/dist/services/mm-api-service/types/send-types.js +337 -0
  110. package/dist/services/mm-api-service/types/send-types.js.map +1 -0
  111. package/dist/services/nats-service/nats-service.js +244 -0
  112. package/dist/services/nats-service/nats-service.js.map +1 -0
  113. package/dist/services/nats-service/test-nats-subscriber.js +79 -0
  114. package/dist/services/nats-service/test-nats-subscriber.js.map +1 -0
  115. package/dist/services/psql-erp-service/configuration.js +2 -0
  116. package/dist/services/psql-erp-service/configuration.js.map +1 -0
  117. package/dist/services/psql-erp-service/index.d.ts +3 -3
  118. package/dist/services/psql-erp-service/index.d.ts.map +1 -1
  119. package/dist/services/psql-erp-service/index.js +10 -0
  120. package/dist/services/psql-erp-service/index.js.map +1 -0
  121. package/dist/services/psql-erp-service/internal/types/psql-types.js +5 -0
  122. package/dist/services/psql-erp-service/internal/types/psql-types.js.map +1 -0
  123. package/dist/services/psql-erp-service/psql-helpers.js +99 -0
  124. package/dist/services/psql-erp-service/psql-helpers.js.map +1 -0
  125. package/dist/services/psql-erp-service/psql-service.d.ts +2 -2
  126. package/dist/services/psql-erp-service/psql-service.d.ts.map +1 -1
  127. package/dist/services/psql-erp-service/psql-service.js +187 -0
  128. package/dist/services/psql-erp-service/psql-service.js.map +1 -0
  129. package/dist/services/reporting-service/index.d.ts +1 -1
  130. package/dist/services/reporting-service/index.d.ts.map +1 -1
  131. package/dist/services/reporting-service/index.js +5 -0
  132. package/dist/services/reporting-service/index.js.map +1 -0
  133. package/dist/services/reporting-service/logger.d.ts.map +1 -1
  134. package/dist/services/reporting-service/logger.js +246 -0
  135. package/dist/services/reporting-service/logger.js.map +1 -0
  136. package/dist/services/sql-server-erp-service/configuration.js +2 -0
  137. package/dist/services/sql-server-erp-service/configuration.js.map +1 -0
  138. package/dist/services/sql-server-erp-service/index.d.ts +3 -3
  139. package/dist/services/sql-server-erp-service/index.d.ts.map +1 -1
  140. package/dist/services/sql-server-erp-service/index.js +11 -0
  141. package/dist/services/sql-server-erp-service/index.js.map +1 -0
  142. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts +2 -2
  143. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts.map +1 -1
  144. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js +50 -0
  145. package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js.map +1 -0
  146. package/dist/services/sql-server-erp-service/internal/sql-server-config.js +40 -0
  147. package/dist/services/sql-server-erp-service/internal/sql-server-config.js.map +1 -0
  148. package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js +36 -0
  149. package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js.map +1 -0
  150. package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js +2 -0
  151. package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js.map +1 -0
  152. package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts +3 -3
  153. package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts.map +1 -1
  154. package/dist/services/sql-server-erp-service/sql-server-helpers.js +66 -0
  155. package/dist/services/sql-server-erp-service/sql-server-helpers.js.map +1 -0
  156. package/dist/services/sql-server-erp-service/sql-server-service.d.ts +2 -2
  157. package/dist/services/sql-server-erp-service/sql-server-service.d.ts.map +1 -1
  158. package/dist/services/sql-server-erp-service/sql-server-service.js +154 -0
  159. package/dist/services/sql-server-erp-service/sql-server-service.js.map +1 -0
  160. package/dist/services/sql-server-erp-service/types/sql-input-param.js +2 -0
  161. package/dist/services/sql-server-erp-service/types/sql-input-param.js.map +1 -0
  162. package/dist/services/sqlite-service/index.d.ts +1 -1
  163. package/dist/services/sqlite-service/index.d.ts.map +1 -1
  164. package/dist/services/sqlite-service/index.js +2 -0
  165. package/dist/services/sqlite-service/index.js.map +1 -0
  166. package/dist/services/sqlite-service/sqlite-coordinator.js +60 -0
  167. package/dist/services/sqlite-service/sqlite-coordinator.js.map +1 -0
  168. package/dist/types/erp-connector.d.ts +1 -1
  169. package/dist/types/erp-connector.d.ts.map +1 -1
  170. package/dist/types/erp-connector.js +2 -0
  171. package/dist/types/erp-connector.js.map +1 -0
  172. package/dist/types/erp-types.js +13 -0
  173. package/dist/types/erp-types.js.map +1 -0
  174. package/dist/types/index.d.ts +2 -2
  175. package/dist/types/index.d.ts.map +1 -1
  176. package/dist/types/index.js +6 -0
  177. package/dist/types/index.js.map +1 -0
  178. package/dist/utils/application-initializer.js +55 -0
  179. package/dist/utils/application-initializer.js.map +1 -0
  180. package/dist/utils/cleanup-numbers.js +6 -0
  181. package/dist/utils/cleanup-numbers.js.map +1 -0
  182. package/dist/utils/connector-factory.d.ts +1 -1
  183. package/dist/utils/connector-factory.d.ts.map +1 -1
  184. package/dist/utils/connector-factory.js +34 -0
  185. package/dist/utils/connector-factory.js.map +1 -0
  186. package/dist/utils/connector-log/log-deduper.d.ts +1 -1
  187. package/dist/utils/connector-log/log-deduper.d.ts.map +1 -1
  188. package/dist/utils/connector-log/log-deduper.js +240 -0
  189. package/dist/utils/connector-log/log-deduper.js.map +1 -0
  190. package/dist/utils/connector-log/mm-connector-logger-example.d.ts +1 -0
  191. package/dist/utils/connector-log/mm-connector-logger-example.js +88 -0
  192. package/dist/utils/connector-log/mm-connector-logger-example.js.map +1 -0
  193. package/dist/utils/connector-log/mm-connector-logger.d.ts +1 -1
  194. package/dist/utils/connector-log/mm-connector-logger.d.ts.map +1 -1
  195. package/dist/utils/connector-log/mm-connector-logger.js +151 -0
  196. package/dist/utils/connector-log/mm-connector-logger.js.map +1 -0
  197. package/dist/utils/data-transformation.js +38 -0
  198. package/dist/utils/data-transformation.js.map +1 -0
  199. package/dist/utils/erp-type-from-entity.d.ts +1 -1
  200. package/dist/utils/erp-type-from-entity.d.ts.map +1 -1
  201. package/dist/utils/erp-type-from-entity.js +6 -0
  202. package/dist/utils/erp-type-from-entity.js.map +1 -0
  203. package/dist/utils/error-formatter.js +184 -0
  204. package/dist/utils/error-formatter.js.map +1 -0
  205. package/dist/utils/error-utils.js +21 -0
  206. package/dist/utils/error-utils.js.map +1 -0
  207. package/dist/utils/http-client.js +187 -0
  208. package/dist/utils/http-client.js.map +1 -0
  209. package/dist/utils/index.d.ts +35 -35
  210. package/dist/utils/index.d.ts.map +1 -1
  211. package/dist/utils/index.js +69 -0
  212. package/dist/utils/index.js.map +1 -0
  213. package/dist/utils/local-data-store/database-lock.js +68 -0
  214. package/dist/utils/local-data-store/database-lock.js.map +1 -0
  215. package/dist/utils/local-data-store/jobs-shared-data.js +116 -0
  216. package/dist/utils/local-data-store/jobs-shared-data.js.map +1 -0
  217. package/dist/utils/mm-labor-ticket-helpers.d.ts +1 -1
  218. package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -1
  219. package/dist/utils/mm-labor-ticket-helpers.js +23 -0
  220. package/dist/utils/mm-labor-ticket-helpers.js.map +1 -0
  221. package/dist/utils/removeExtraneousFields.d.ts +1 -1
  222. package/dist/utils/removeExtraneousFields.d.ts.map +1 -1
  223. package/dist/utils/removeExtraneousFields.js +16 -0
  224. package/dist/utils/removeExtraneousFields.js.map +1 -0
  225. package/dist/utils/removeIdFieldFromPayload.d.ts +1 -1
  226. package/dist/utils/removeIdFieldFromPayload.d.ts.map +1 -1
  227. package/dist/utils/removeIdFieldFromPayload.js +16 -0
  228. package/dist/utils/removeIdFieldFromPayload.js.map +1 -0
  229. package/dist/utils/resource-group.d.ts +1 -1
  230. package/dist/utils/resource-group.d.ts.map +1 -1
  231. package/dist/utils/resource-group.js +59 -0
  232. package/dist/utils/resource-group.js.map +1 -0
  233. package/dist/utils/standard-process-drivers/error-processor.d.ts +3 -3
  234. package/dist/utils/standard-process-drivers/error-processor.d.ts.map +1 -1
  235. package/dist/utils/standard-process-drivers/error-processor.js +262 -0
  236. package/dist/utils/standard-process-drivers/error-processor.js.map +1 -0
  237. package/dist/utils/standard-process-drivers/index.d.ts +3 -3
  238. package/dist/utils/standard-process-drivers/index.d.ts.map +1 -1
  239. package/dist/utils/standard-process-drivers/index.js +4 -0
  240. package/dist/utils/standard-process-drivers/index.js.map +1 -0
  241. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +1 -1
  242. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts.map +1 -1
  243. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js +165 -0
  244. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +1 -0
  245. package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +4 -4
  246. package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
  247. package/dist/utils/standard-process-drivers/mm-entity-processor.js +168 -0
  248. package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +1 -0
  249. package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +4 -4
  250. package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
  251. package/dist/utils/standard-process-drivers/standard-process-drivers.js +324 -0
  252. package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +1 -0
  253. package/dist/utils/time-utils.js +96 -0
  254. package/dist/utils/time-utils.js.map +1 -0
  255. package/dist/utils/timezone.js +105 -0
  256. package/dist/utils/timezone.js.map +1 -0
  257. package/dist/utils/trimObjectValues.js +11 -0
  258. package/dist/utils/trimObjectValues.js.map +1 -0
  259. package/dist/utils/uniqueRows.js +35 -0
  260. package/dist/utils/uniqueRows.js.map +1 -0
  261. package/package.json +5 -6
  262. package/src/index.ts +43 -43
  263. package/src/knexfile.ts +1 -0
  264. package/src/services/caching-service/batch-cache-manager.ts +2 -2
  265. package/src/services/caching-service/hashed-cache-manager.ts +5 -5
  266. package/src/services/caching-service/index.ts +1 -1
  267. package/src/services/caching-service/record-tracking-manager.ts +2 -2
  268. package/src/services/data-sync-service/configuration-manager.ts +2 -2
  269. package/src/services/data-sync-service/data-sync-service.ts +12 -11
  270. package/src/services/data-sync-service/index.ts +3 -3
  271. package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +3 -3
  272. package/src/services/data-sync-service/jobs/from-erp.ts +6 -6
  273. package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +2 -2
  274. package/src/services/data-sync-service/jobs/run-migrations.ts +2 -2
  275. package/src/services/data-sync-service/jobs/to-erp.ts +3 -3
  276. package/src/services/data-sync-service/nats-labor-ticket-listener.ts +8 -8
  277. package/src/services/erp-api-services/errors.ts +3 -3
  278. package/src/services/erp-api-services/graphql/graphql-service.ts +5 -5
  279. package/src/services/erp-api-services/index.ts +8 -8
  280. package/src/services/erp-api-services/rest/rest-api-service.ts +4 -4
  281. package/src/services/erp-api-services/types.ts +2 -2
  282. package/src/services/mm-api-service/company-info.ts +3 -3
  283. package/src/services/mm-api-service/index.ts +8 -8
  284. package/src/services/mm-api-service/mm-api-service.ts +10 -10
  285. package/src/services/mm-api-service/token-mgr.ts +4 -4
  286. package/src/services/mm-api-service/types/entity-transformer.ts +3 -3
  287. package/src/services/nats-service/nats-service.ts +1 -1
  288. package/src/services/nats-service/test-nats-subscriber.ts +1 -1
  289. package/src/services/psql-erp-service/index.ts +3 -3
  290. package/src/services/psql-erp-service/psql-service.ts +4 -4
  291. package/src/services/reporting-service/index.ts +1 -1
  292. package/src/services/reporting-service/logger.ts +109 -42
  293. package/src/services/sql-server-erp-service/index.ts +3 -3
  294. package/src/services/sql-server-erp-service/internal/sql-labor-ticket-operations.ts +2 -2
  295. package/src/services/sql-server-erp-service/internal/sql-transaction-manager.ts +1 -1
  296. package/src/services/sql-server-erp-service/sql-server-helpers.ts +6 -6
  297. package/src/services/sql-server-erp-service/sql-server-service.ts +4 -4
  298. package/src/services/sqlite-service/index.ts +1 -1
  299. package/src/services/sqlite-service/sqlite-coordinator.ts +2 -2
  300. package/src/types/erp-connector.ts +1 -1
  301. package/src/types/index.ts +2 -2
  302. package/src/utils/application-initializer.ts +5 -5
  303. package/src/utils/connector-factory.ts +2 -2
  304. package/src/utils/connector-log/log-deduper.ts +2 -2
  305. package/src/utils/connector-log/mm-connector-logger.ts +3 -3
  306. package/src/utils/erp-type-from-entity.ts +1 -1
  307. package/src/utils/http-client.ts +1 -1
  308. package/src/utils/index.ts +35 -35
  309. package/src/utils/local-data-store/database-lock.ts +1 -1
  310. package/src/utils/mm-labor-ticket-helpers.ts +2 -2
  311. package/src/utils/removeExtraneousFields.ts +1 -1
  312. package/src/utils/removeIdFieldFromPayload.ts +1 -1
  313. package/src/utils/resource-group.ts +2 -2
  314. package/src/utils/standard-process-drivers/error-processor.ts +5 -5
  315. package/src/utils/standard-process-drivers/index.ts +3 -3
  316. package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +6 -6
  317. package/src/utils/standard-process-drivers/mm-entity-processor.ts +7 -7
  318. package/src/utils/standard-process-drivers/standard-process-drivers.ts +6 -6
  319. package/src/utils/time-utils.ts +3 -3
  320. package/src/utils/timezone.ts +2 -2
  321. package/dist/config-CvA-mFWF.js +0 -418
  322. package/dist/config-CvA-mFWF.js.map +0 -1
  323. package/dist/connector-factory-BPm2GVVF.js +0 -30
  324. package/dist/connector-factory-BPm2GVVF.js.map +0 -1
  325. package/dist/hashed-cache-manager-B15NN8hK.js +0 -322
  326. package/dist/hashed-cache-manager-B15NN8hK.js.map +0 -1
  327. package/dist/index-D8qO1NyK.js +0 -192
  328. package/dist/index-D8qO1NyK.js.map +0 -1
  329. package/dist/knexfile-Bng2Ru9c.js +0 -20
  330. package/dist/knexfile-Bng2Ru9c.js.map +0 -1
  331. package/dist/logger-BWw0_z9q.js +0 -17557
  332. package/dist/logger-BWw0_z9q.js.map +0 -1
  333. package/dist/mm-erp-sdk.js +0 -4978
  334. package/dist/mm-erp-sdk.js.map +0 -1
@@ -0,0 +1,531 @@
1
+ import logger from "../reporting-service/logger.js";
2
+ import { ERPObjType } from "../../types/erp-types.js";
3
+ import { MMReceiveLaborTicket } from "./types/receive-types.js";
4
+ import { MMTokenManager } from "./token-mgr.js";
5
+ import { HTTPClientFactory, } from "../../utils/http-client.js";
6
+ import { CoreConfiguration } from "../data-sync-service/configuration-manager.js";
7
+ import { ErrorHandler } from "../erp-api-services/errors.js";
8
+ const MAPPING = "MAPPING";
9
+ const CHECKPOINTS = "CHECKPOINTS";
10
+ const MACHINE_GROUPS = "MACHINE_GROUPS";
11
+ const GRAPHQL = "GRAPHQL";
12
+ var UrlBase;
13
+ (function (UrlBase) {
14
+ UrlBase["ErpApiSvcBase"] = "ErpApiSvcBase";
15
+ UrlBase["ApiBase"] = "ApiBase";
16
+ })(UrlBase || (UrlBase = {}));
17
+ /**
18
+ * Class to manage interactions with the MM Mapping Service
19
+ * Integrates an MM Token Manager to handle the API token.
20
+ */
21
+ export class MMApiClient {
22
+ tokenMgr;
23
+ api;
24
+ baseUrls;
25
+ resourceURLs = {
26
+ [ERPObjType.RESOURCES]: "/erp/v1/resources",
27
+ [ERPObjType.PARTS]: "/erp/v1/parts",
28
+ [ERPObjType.PART_OPERATION]: "/erp/v1/part-operations",
29
+ [ERPObjType.WORK_ORDERS]: "/erp/v1/production-orders",
30
+ [ERPObjType.WORK_ORDER_OPERATIONS]: "/erp/v1/production-order-operations",
31
+ [ERPObjType.PERSONS]: "/erp/v1/persons",
32
+ [ERPObjType.REASONS]: "/erp/v1/reasons",
33
+ [ERPObjType.LABOR_TICKETS]: "/erp/v1/labor-tickets",
34
+ [MAPPING]: "/erp/v1/mapping",
35
+ [CHECKPOINTS]: "/erp/v1/checkpoints",
36
+ [MACHINE_GROUPS]: "/machine-groups",
37
+ [GRAPHQL]: "/proxy/graphql",
38
+ };
39
+ constructor() {
40
+ this.tokenMgr = new MMTokenManager();
41
+ this.baseUrls = {
42
+ [UrlBase.ErpApiSvcBase]: CoreConfiguration.inst().mmERPSvcApiBaseUrl,
43
+ [UrlBase.ApiBase]: CoreConfiguration.inst().mmApiBaseUrl,
44
+ };
45
+ this.api = HTTPClientFactory.getInstance({
46
+ baseUrl: '',
47
+ retryAttempts: CoreConfiguration.inst().mmApiRetryAttempts,
48
+ });
49
+ }
50
+ //#region Private Methods
51
+ async executeWithAuthRetry(operation, options = {}) {
52
+ let token = options.token || (await this.tokenMgr.getToken());
53
+ try {
54
+ return await operation(token);
55
+ }
56
+ catch (error) {
57
+ // Type guard to check if error has status property
58
+ const hasStatus = (err) => {
59
+ return typeof err === "object" && err !== null && "status" in err;
60
+ };
61
+ // Check if this looks like an auth error - retry on auth status codes or JWT expiration errors
62
+ const isAuthError = hasStatus(error) && (error.status === 401 || error.status === 403) ||
63
+ (hasStatus(error) && error.status === 500 &&
64
+ typeof error.data?.error === 'string' &&
65
+ error.data.error.includes('JWT'));
66
+ if (isAuthError && !options.token) {
67
+ // Only retry if we used cached token
68
+ logger.info("Retrying request with fresh token due to auth error");
69
+ this.tokenMgr.invalidateToken();
70
+ token = await this.tokenMgr.getToken();
71
+ return await operation(token); // Single retry
72
+ }
73
+ throw error; // Re-throw if not auth error or already retried
74
+ }
75
+ }
76
+ /**
77
+ * Fetch data from the MM API, with an auth retry mechanism
78
+ * Auth Retry Level (executeWithAuthRetry)
79
+ * - 401 (Unauthorized) and 403 (Forbidden) get special treatment
80
+ * - These trigger a token refresh and one retry attempt
81
+ * - If the retry still fails, the error is re-thrown
82
+ *
83
+ * HTTP Status Codes behavior:
84
+ * - 2xx - Success, returns normally
85
+ * - 4xx - Client errors, throws immediately
86
+ * - 5xx - Server errors, retries then throws
87
+ *
88
+ * Flags:
89
+ */
90
+ async getData(path, queryParams = {}, options = {}) {
91
+ try {
92
+ return await this.executeWithAuthRetry(async (token) => {
93
+ const baseUrl = options.baseUrl || UrlBase.ErpApiSvcBase;
94
+ const params = new URLSearchParams({
95
+ ...queryParams,
96
+ ...(baseUrl === UrlBase.ErpApiSvcBase ? { raw: "true" } : {}),
97
+ });
98
+ const url = params.size > 0 ? `${path}?${params.toString()}` : path;
99
+ const fullUrl = this.baseUrls[baseUrl] + url;
100
+ const result = await this.api.request({
101
+ url: fullUrl,
102
+ method: "GET",
103
+ headers: {
104
+ Authorization: `Bearer ${token}`,
105
+ ...options.headers,
106
+ },
107
+ });
108
+ // Always include HTTP status in the response
109
+ return {
110
+ ...result.data,
111
+ httpStatus: result.status,
112
+ };
113
+ }, options);
114
+ }
115
+ catch (error) {
116
+ ErrorHandler.handle(error);
117
+ }
118
+ }
119
+ /**
120
+ * Send data to the MM API, with an auth retry mechanism
121
+ * Auth Retry Level (executeWithAuthRetry)
122
+ * - 401 (Unauthorized) and 403 (Forbidden) get special treatment
123
+ * - These trigger a token refresh and one retry attempt
124
+ * - If the retry still fails, the error is re-thrown
125
+ *
126
+ * HTTP Status Codes behavior:
127
+ * - 2xx - Success, returns normally
128
+ * - 4xx - Client errors, throws immediately
129
+ * - 5xx - Server errors, retries then throws
130
+ *
131
+ * Flags:
132
+ * - 'raw' = true and 'dedupe' = true will be set for MM's ERP API url
133
+ */
134
+ async postData(path, data = {}, queryParams = {}, options = {}) {
135
+ try {
136
+ return await this.executeWithAuthRetry(async (token) => {
137
+ const baseUrl = options.baseUrl || UrlBase.ErpApiSvcBase;
138
+ const params = new URLSearchParams({
139
+ ...queryParams,
140
+ ...(baseUrl === UrlBase.ErpApiSvcBase
141
+ ? { dedupe: "true", raw: "true" }
142
+ : {}),
143
+ });
144
+ const url = params.size > 0 ? `${path}?${params.toString()}` : path;
145
+ const fullUrl = this.baseUrls[baseUrl] + url;
146
+ const request = {
147
+ url: fullUrl,
148
+ method: "POST",
149
+ data: JSON.stringify(data),
150
+ headers: {
151
+ Authorization: `Bearer ${token}`,
152
+ ...options.headers,
153
+ },
154
+ };
155
+ const result = await this.api.request(request);
156
+ // Always include HTTP status in the response
157
+ return {
158
+ ...result.data,
159
+ httpStatus: result.status,
160
+ };
161
+ }, options);
162
+ }
163
+ catch (error) {
164
+ ErrorHandler.handle(error);
165
+ }
166
+ }
167
+ /**
168
+ * Delete data from the MM API, with an auth retry mechanism
169
+ * Auth Retry Level (executeWithAuthRetry)
170
+ * - 401 (Unauthorized) and 403 (Forbidden) get special treatment
171
+ * - These trigger a token refresh and one retry attempt
172
+ * - If the retry still fails, the error is re-thrown
173
+ *
174
+ * HTTP Status Codes behavior:
175
+ * - 2xx - Success, returns normally
176
+ * - 4xx - Client errors, throws immediately
177
+ * - 5xx - Server errors, retries then throws
178
+ *
179
+ */
180
+ async deleteData(path, data = {}, options = {}) {
181
+ try {
182
+ return await this.executeWithAuthRetry(async (token) => {
183
+ const baseUrl = options.baseUrl || UrlBase.ErpApiSvcBase;
184
+ const params = new URLSearchParams({
185
+ ...(baseUrl === UrlBase.ErpApiSvcBase ? { raw: "true" } : {}),
186
+ });
187
+ const url = params.size > 0 ? `${path}?${params.toString()}` : path;
188
+ const fullUrl = this.baseUrls[baseUrl] + url;
189
+ const result = await this.api.request({
190
+ url: fullUrl,
191
+ method: "DELETE",
192
+ data,
193
+ headers: {
194
+ Authorization: `Bearer ${token}`,
195
+ ...options.headers,
196
+ },
197
+ });
198
+ // Always include HTTP status in the response
199
+ return {
200
+ ...result.data,
201
+ httpStatus: result.status,
202
+ };
203
+ }, options);
204
+ }
205
+ catch (error) {
206
+ ErrorHandler.handle(error);
207
+ }
208
+ }
209
+ /**
210
+ * Patch data to the MM API, with an auth retry mechanism
211
+ * Auth Retry Level (executeWithAuthRetry)
212
+ * - 401 (Unauthorized) and 403 (Forbidden) get special treatment
213
+ * - These trigger a token refresh and one retry attempt
214
+ * - If the retry still fails, the error is re-thrown
215
+ *
216
+ * HTTP Status Codes behavior:
217
+ * - 2xx - Success, returns normally
218
+ * - 4xx - Client errors, throws immediately
219
+ * - 5xx - Server errors, retries then throws
220
+ *
221
+ */
222
+ async patchData(path, data = {}, options = {}) {
223
+ try {
224
+ return await this.executeWithAuthRetry(async (token) => {
225
+ const baseUrl = options.baseUrl || UrlBase.ErpApiSvcBase;
226
+ const params = new URLSearchParams({
227
+ ...(baseUrl === UrlBase.ErpApiSvcBase ? { raw: "true" } : {}),
228
+ });
229
+ const url = params.size > 0 ? `${path}?${params.toString()}` : path;
230
+ const fullUrl = this.baseUrls[baseUrl] + url;
231
+ const request = {
232
+ url: fullUrl,
233
+ method: "PATCH",
234
+ data,
235
+ headers: {
236
+ Authorization: `Bearer ${token}`,
237
+ ...options.headers,
238
+ },
239
+ };
240
+ const result = await this.api.request(request);
241
+ // Always include HTTP status in the response
242
+ return {
243
+ ...result.data,
244
+ httpStatus: result.status,
245
+ };
246
+ }, options);
247
+ }
248
+ catch (error) {
249
+ ErrorHandler.handle(error);
250
+ }
251
+ }
252
+ async graphqlRequest(operationName, query) {
253
+ try {
254
+ return await this.postData(this.resourceURLs[GRAPHQL], { operationName, query }, {}, {
255
+ baseUrl: UrlBase.ApiBase,
256
+ token: CoreConfiguration.inst().mmApiAuthToken,
257
+ headers: { "Content-Type": "application/json" },
258
+ });
259
+ }
260
+ catch (error) {
261
+ ErrorHandler.handle(error);
262
+ }
263
+ }
264
+ /**
265
+ * Fetch a checkpoint for a specific system, table, and checkpoint type
266
+ * @param checkpoint The checkpoint to fetch
267
+ * @returns Promise with the checkpoint data
268
+ */
269
+ async fetchCheckpoint(checkpoint) {
270
+ const { system, table, checkpointType } = checkpoint;
271
+ return this.getData(this.resourceURLs[CHECKPOINTS], {
272
+ system,
273
+ table,
274
+ checkpointType,
275
+ });
276
+ }
277
+ //#endregion private methods
278
+ //#region Public Methods
279
+ /**
280
+ * Send resources to the MM API
281
+ * @param resources Array of resources to send
282
+ * @returns Promise with the API response
283
+ */
284
+ async sendResourcesToMM(resources) {
285
+ return await this.postData(this.resourceURLs[ERPObjType.RESOURCES], {
286
+ data: resources.map((resource) => resource.toRESTApiObject()),
287
+ });
288
+ }
289
+ /**
290
+ * Send parts to the MM API
291
+ * @param parts Array of parts to send
292
+ * @returns Promise with the API response
293
+ */
294
+ async sendPartsToMM(parts) {
295
+ return await this.postData(this.resourceURLs[ERPObjType.PARTS], {
296
+ data: parts.map((part) => part.toRESTApiObject()),
297
+ });
298
+ }
299
+ /**
300
+ * Send part operations to the MM API
301
+ * @param operations Array of part operations to send
302
+ * @returns Promise with the API response
303
+ */
304
+ async sendPartOperationsToMM(operations) {
305
+ return await this.postData(this.resourceURLs[ERPObjType.PART_OPERATION], {
306
+ data: operations.map((operation) => operation.toRESTApiObject()),
307
+ });
308
+ }
309
+ /**
310
+ * Send work orders to the MM API
311
+ * @param workOrders Array of work orders to send
312
+ * @returns Promise with the API response
313
+ */
314
+ async sendWorkOrdersToMM(workOrders) {
315
+ return await this.postData(this.resourceURLs[ERPObjType.WORK_ORDERS], {
316
+ data: workOrders.map((workOrder) => workOrder.toRESTApiObject()),
317
+ });
318
+ }
319
+ /**
320
+ * Send work order operations to the MM API
321
+ * @param workOrderOperations Array of work order operations to send
322
+ * @returns Promise with the API response
323
+ */
324
+ async sendWorkOrderOperationsToMM(workOrderOperations) {
325
+ return await this.postData(this.resourceURLs[ERPObjType.WORK_ORDER_OPERATIONS], {
326
+ data: workOrderOperations.map((operation) => operation.toRESTApiObject()),
327
+ });
328
+ }
329
+ /**
330
+ * Send persons to the MM API
331
+ * @param persons Array of persons to send
332
+ * @returns Promise with the API response
333
+ */
334
+ async sendPersonsToMM(persons) {
335
+ return await this.postData(this.resourceURLs[ERPObjType.PERSONS], {
336
+ data: persons.map((person) => person.toRESTApiObject()),
337
+ });
338
+ }
339
+ /**
340
+ * Send reasons to the MM API
341
+ * @param reasons Array of reasons to send
342
+ * @returns Promise with the API response
343
+ */
344
+ async sendReasonsToMM(reasons) {
345
+ return await this.postData(this.resourceURLs[ERPObjType.REASONS], {
346
+ data: reasons.map((reason) => reason.toRESTApiObject()),
347
+ });
348
+ }
349
+ /**
350
+ * Send labor tickets to the MM API
351
+ * @param laborTickets Array of labor tickets to send
352
+ * @returns Promise with the API response
353
+ */
354
+ async sendLaborTicketsToMM(laborTickets) {
355
+ return await this.postData(this.resourceURLs[ERPObjType.LABOR_TICKETS], {
356
+ data: laborTickets.map((ticket) => ticket.toRESTApiObject()),
357
+ });
358
+ }
359
+ /**
360
+ * Delete labor tickets from the MM API
361
+ * @param laborTickets Array of labor ticket records to delete
362
+ * @returns Promise with the API response
363
+ */
364
+ async deleteLaborTickets(laborTickets) {
365
+ logger.debug("deleteLaborTickets:", { laborTickets });
366
+ return await this.deleteData(this.resourceURLs[ERPObjType.LABOR_TICKETS], {
367
+ laborTickets,
368
+ });
369
+ }
370
+ /**
371
+ * Fetch transformed labor tickets from the MM API
372
+ * @returns Promise with the transformed labor tickets
373
+ */
374
+ async fetchTransformedLaborTickets() {
375
+ return await this.getData(`${this.resourceURLs[ERPObjType.LABOR_TICKETS]}/export`);
376
+ }
377
+ /**
378
+ * Fetch labor ticket updates from the MM API
379
+ * @param query Query parameters for filtering updates
380
+ * @returns Promise with an array of labor ticket updates
381
+ */
382
+ async fetchLaborTicketUpdates(query) {
383
+ const updates = (await this.getData(`${this.resourceURLs[ERPObjType.LABOR_TICKETS]}/export/updates`, query));
384
+ return updates.data.map((ticket) => new MMReceiveLaborTicket(ticket));
385
+ }
386
+ /**
387
+ * Fetch a single labor ticket by reference from the MM API
388
+ * @param laborTicketRef The labor ticket reference to fetch
389
+ * @returns Promise with the labor ticket data
390
+ */
391
+ async fetchLaborTicketByRef(laborTicketRef) {
392
+ const response = (await this.getData(`${this.resourceURLs[ERPObjType.LABOR_TICKETS]}/${laborTicketRef}`));
393
+ return new MMReceiveLaborTicket(response.data);
394
+ }
395
+ /**
396
+ * Fetch a checkpoint for a specific system, table, and checkpoint type
397
+ * @param checkpoint The checkpoint to fetch
398
+ * @returns Promise with the checkpoint data
399
+ */
400
+ async getCheckpoint(checkpoint) {
401
+ return await this.fetchCheckpoint(checkpoint);
402
+ }
403
+ /**
404
+ * Save a checkpoint to the MM API
405
+ * @param checkpoint The checkpoint to save
406
+ * @returns Promise with the API response
407
+ */
408
+ async saveCheckpoint(checkpoint) {
409
+ return await this.postData(this.resourceURLs[CHECKPOINTS], checkpoint);
410
+ }
411
+ /**
412
+ * Initialize a checkpoint for a specific system, table, and checkpoint type
413
+ * @param checkpoint The checkpoint to initialize
414
+ * @returns Promise with the checkpoint data
415
+ */
416
+ async initializeCheckpoint(checkpoint) {
417
+ const currentCheckpoint = await this.fetchCheckpoint(checkpoint);
418
+ logger.info("currentCheckpoint:", { currentCheckpoint });
419
+ logger.info("currentCheckpoint keys:", {
420
+ keys: Object.keys(currentCheckpoint || {}),
421
+ });
422
+ // Check if we have a meaningful checkpoint response
423
+ // The API returns either:
424
+ // - Empty: just { httpStatus: 200 }
425
+ // - With data: { timestamp: "2025-08-08T18:53:14.295Z", httpStatus: 200 }
426
+ const checkpointResponse = currentCheckpoint;
427
+ const hasCheckpointData = checkpointResponse && checkpointResponse.timestamp;
428
+ if (!hasCheckpointData) {
429
+ logger.info("No checkpoint data found, initializing checkpoint");
430
+ const saveCheckpoint = await this.saveCheckpoint(checkpoint);
431
+ logger.info("saveCheckpoint:", { saveCheckpoint });
432
+ }
433
+ else {
434
+ logger.info("Existing checkpoint found:", {
435
+ timestamp: checkpointResponse.timestamp,
436
+ });
437
+ }
438
+ }
439
+ /**
440
+ * Send data to MM API based on the object type
441
+ * @param type The type of ERP object to send
442
+ * @param objects Array of objects to send
443
+ * @returns Promise with the API response including affected rows count
444
+ */
445
+ async sendDataToMMByType(type, objects) {
446
+ switch (type) {
447
+ case ERPObjType.PERSONS:
448
+ return await this.sendPersonsToMM(objects);
449
+ case ERPObjType.RESOURCES:
450
+ return await this.sendResourcesToMM(objects);
451
+ case ERPObjType.PARTS:
452
+ return await this.sendPartsToMM(objects);
453
+ case ERPObjType.PART_OPERATION:
454
+ return await this.sendPartOperationsToMM(objects);
455
+ case ERPObjType.WORK_ORDERS:
456
+ return await this.sendWorkOrdersToMM(objects);
457
+ case ERPObjType.WORK_ORDER_OPERATIONS:
458
+ return await this.sendWorkOrderOperationsToMM(objects);
459
+ case ERPObjType.REASONS:
460
+ return await this.sendReasonsToMM(objects);
461
+ case ERPObjType.LABOR_TICKETS:
462
+ return await this.sendLaborTicketsToMM(objects);
463
+ default:
464
+ throw new Error(`Unsupported type: ${ERPObjType[type]}`);
465
+ }
466
+ }
467
+ /**
468
+ * Update the labor ticket ERP ID by laborTicketRef
469
+ * @param laborTicketRef The MM API labor ticket unique ID
470
+ * @param erpObjectId The ERP labor ticket ID to update
471
+ * @returns The updated labor ticket
472
+ */
473
+ async updateLaborTicketIdByRef(laborTicketRef, laborTicketId) {
474
+ return await this.patchData(`${this.resourceURLs[ERPObjType.LABOR_TICKETS]}/${laborTicketRef}`, { laborTicketId });
475
+ }
476
+ /**
477
+ * Add failed labor ticket refs to the MM API
478
+ * @param failedTicketRefs The failed labor ticket references
479
+ * @returns The response from the MM API
480
+ */
481
+ async addFailedLaborTicketRefs(system, failedTicketRefs) {
482
+ return await this.postData(`${this.resourceURLs[ERPObjType.LABOR_TICKETS]}/failed`, { failedTicketRefs }, { system });
483
+ }
484
+ async fetchFailedLaborTickets(system) {
485
+ const failedTickets = (await this.getData(`${this.resourceURLs[ERPObjType.LABOR_TICKETS]}/failed`, { system }));
486
+ return failedTickets.erpLaborTickets.map((ticket) => new MMReceiveLaborTicket(ticket));
487
+ }
488
+ /**
489
+ * Send connector logs to the MM API
490
+ * @param logEntry Single log entry to send
491
+ * @returns Promise with the API response
492
+ */
493
+ async sendConnectorLog(logEntry) {
494
+ return await this.postData('/connector/logs', logEntry, {}, { baseUrl: UrlBase.ApiBase });
495
+ }
496
+ /**
497
+ * Send bulk connector logs to the MM API
498
+ * @param logs Array of log entries to send
499
+ * @returns Promise with the API response
500
+ */
501
+ async sendBulkConnectorLogs(logs) {
502
+ return await this.postData('/connector/logs', { logs }, {}, { baseUrl: UrlBase.ApiBase });
503
+ }
504
+ async deleteFailedLaborTicketIds(system, laborTicketRefs) {
505
+ return await this.postData(`${this.resourceURLs[ERPObjType.LABOR_TICKETS]}/failed/remove`, { laborTicketRefs }, { system });
506
+ }
507
+ /**
508
+ * Fetch machine groups from the MM API
509
+ * @returns Promise with the machine groups data
510
+ */
511
+ async fetchMachineGroups() {
512
+ return (await this.getData(this.resourceURLs[MACHINE_GROUPS], {}, { baseUrl: UrlBase.ApiBase }));
513
+ }
514
+ /**
515
+ * Fetch resources using GraphQL
516
+ * @returns Promise with the resources data
517
+ */
518
+ async fetchResourcesFromGraphQL() {
519
+ return (await this.graphqlRequest("getErpResources", "query getErpResources { machineResource: erpResources { machineRef machineGroupId resourceId }}"));
520
+ }
521
+ /**
522
+ * Cleanup all HTTP connections and resources
523
+ * Call this when the service is no longer needed
524
+ */
525
+ async destroy() {
526
+ await this.api.destroy();
527
+ // Note: MMTokenManager doesn't currently need explicit cleanup
528
+ // but if it ever acquires resources that need cleanup, add it here
529
+ }
530
+ }
531
+ //# sourceMappingURL=mm-api-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mm-api-service.js","sourceRoot":"","sources":["../../../src/services/mm-api-service/mm-api-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { getCachedMMToken, setCachedMMToken, } from "../../utils/local-data-store/jobs-shared-data.js";
2
+ import { HTTPClientFactory } from "../../utils/http-client.js";
3
+ import { CoreConfiguration } from "../data-sync-service/configuration-manager.js";
4
+ import { logger } from "../reporting-service/index.js";
5
+ /**
6
+ * Manages the MM API token with caching and expiration checking
7
+ * Tokens are cached across jobs and job instances in local-data-store/jobs-shared-data.ts
8
+ * @jest-environment node
9
+ */
10
+ export class MMTokenManager {
11
+ token;
12
+ tokenExpiration;
13
+ baseUrl;
14
+ api;
15
+ constructor() {
16
+ const cached = getCachedMMToken();
17
+ this.token = cached?.token || "";
18
+ this.tokenExpiration = cached?.expiration
19
+ ? new Date(cached.expiration)
20
+ : null;
21
+ const config = CoreConfiguration.inst();
22
+ console.log("=== MMTOKEN MANAGER DEBUG ===");
23
+ console.log("config.mmApiBaseUrl:", config.mmApiBaseUrl);
24
+ console.log("config object keys:", Object.keys(config));
25
+ this.baseUrl = config.mmApiBaseUrl;
26
+ console.log("this.baseUrl set to:", this.baseUrl);
27
+ console.log("=== END MMTOKEN MANAGER DEBUG ===");
28
+ this.api = HTTPClientFactory.getInstance({
29
+ baseUrl: this.baseUrl,
30
+ retryAttempts: config.mmApiRetryAttempts,
31
+ });
32
+ }
33
+ /**
34
+ * Checks if the current token is expired or will expire within the next minute
35
+ * @returns boolean indicating if token needs refresh
36
+ */
37
+ isTokenExpired() {
38
+ if (!this.tokenExpiration)
39
+ return true;
40
+ // Add 1 minute buffer to ensure we refresh before actual expiration
41
+ const bufferTimeMS = 60_000;
42
+ const isExpired = this.tokenExpiration.getTime() - bufferTimeMS <= Date.now();
43
+ if (isExpired) {
44
+ logger.info("isTokenExpired: the api token from MM has expired");
45
+ }
46
+ return isExpired;
47
+ }
48
+ /**
49
+ * Safely extracts expiration time from JWT token
50
+ * @param token JWT token string
51
+ * @returns Date object representing token expiration, or null if cannot be determined
52
+ */
53
+ getTokenExpiration(token) {
54
+ try {
55
+ // Split token into parts
56
+ const parts = token.split(".");
57
+ if (parts.length !== 3) {
58
+ console.warn("Invalid JWT format: token does not have 3 parts");
59
+ return null;
60
+ }
61
+ // Decode payload (second part)
62
+ const payload = Buffer.from(parts[1], "base64").toString("utf-8");
63
+ const decodedPayload = JSON.parse(payload);
64
+ // Check if exp claim exists
65
+ if (typeof decodedPayload.exp !== "number") {
66
+ console.warn("JWT does not contain expiration time (exp claim)");
67
+ return null;
68
+ }
69
+ // Convert Unix timestamp (seconds) to Date
70
+ return new Date(decodedPayload.exp * 1000);
71
+ }
72
+ catch (error) {
73
+ console.warn("Error parsing JWT token:", error);
74
+ return null;
75
+ }
76
+ }
77
+ /**
78
+ * Gets a valid token, either from cache or by requesting a new one
79
+ * @returns Promise resolving to a valid token string
80
+ */
81
+ async getToken() {
82
+ if (this.token && !this.isTokenExpired()) {
83
+ return this.token;
84
+ }
85
+ const config = CoreConfiguration.inst();
86
+ const serviceToken = config.mmApiAuthToken;
87
+ const tokenResponse = await this.api.request({
88
+ url: "/user-token",
89
+ method: "GET",
90
+ headers: {
91
+ Authorization: `Bearer ${serviceToken}`,
92
+ },
93
+ });
94
+ this.token = tokenResponse.data;
95
+ this.tokenExpiration = this.getTokenExpiration(this.token);
96
+ // Cache the new token and its expiration
97
+ setCachedMMToken({
98
+ token: this.token,
99
+ expiration: this.tokenExpiration?.getTime() || null,
100
+ });
101
+ logger.info("getToken: the api token from MM has been refreshed");
102
+ return this.token;
103
+ }
104
+ /**
105
+ * Invalidates the current token, forcing a fresh fetch on next getToken() call
106
+ */
107
+ invalidateToken() {
108
+ this.token = "";
109
+ this.tokenExpiration = null;
110
+ setCachedMMToken({ token: "", expiration: null });
111
+ }
112
+ }
113
+ //# sourceMappingURL=token-mgr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-mgr.js","sourceRoot":"","sources":["../../../src/services/mm-api-service/token-mgr.ts"],"names":[],"mappings":"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"}