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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +5 -0
  2. package/dist/{config-CvA-mFWF.js → config-Bax6Ofp5.js} +2 -2
  3. package/dist/{config-CvA-mFWF.js.map → config-Bax6Ofp5.js.map} +1 -1
  4. package/dist/{connector-factory-BPm2GVVF.js → connector-factory-BaMIlES8.js} +2 -2
  5. package/dist/{connector-factory-BPm2GVVF.js.map → connector-factory-BaMIlES8.js.map} +1 -1
  6. package/dist/{hashed-cache-manager-B15NN8hK.js → hashed-cache-manager-C1u9jQgY.js} +4 -4
  7. package/dist/{hashed-cache-manager-B15NN8hK.js.map → hashed-cache-manager-C1u9jQgY.js.map} +1 -1
  8. package/dist/{index-D8qO1NyK.js → index-BkVlW0ZW.js} +2 -2
  9. package/dist/{index-D8qO1NyK.js.map → index-BkVlW0ZW.js.map} +1 -1
  10. package/dist/index.d.ts +1 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/{logger-BWw0_z9q.js → logger-DW5fyhVS.js} +114 -78
  13. package/dist/logger-DW5fyhVS.js.map +1 -0
  14. package/dist/mm-erp-sdk.js +7 -716
  15. package/dist/mm-erp-sdk.js.map +1 -1
  16. package/dist/services/data-sync-service/data-sync-service.d.ts.map +1 -1
  17. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +4 -4
  18. package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -1
  19. package/dist/services/data-sync-service/jobs/from-erp.js +12 -5
  20. package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -1
  21. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +3 -3
  22. package/dist/services/data-sync-service/jobs/run-migrations.js +1 -1
  23. package/dist/services/data-sync-service/jobs/to-erp.d.ts.map +1 -1
  24. package/dist/services/data-sync-service/jobs/to-erp.js +4 -7
  25. package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -1
  26. package/dist/services/mm-api-service/index.d.ts +0 -7
  27. package/dist/services/mm-api-service/index.d.ts.map +1 -1
  28. package/dist/services/mm-api-service/mm-api-service.d.ts +0 -6
  29. package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -1
  30. package/dist/services/reporting-service/logger.d.ts.map +1 -1
  31. package/dist/utils/index.d.ts +0 -5
  32. package/dist/utils/index.d.ts.map +1 -1
  33. package/package.json +2 -5
  34. package/src/index.ts +0 -3
  35. package/src/services/data-sync-service/data-sync-service.ts +0 -10
  36. package/src/services/data-sync-service/jobs/from-erp.ts +7 -2
  37. package/src/services/data-sync-service/jobs/to-erp.ts +1 -5
  38. package/src/services/mm-api-service/index.ts +0 -8
  39. package/src/services/mm-api-service/mm-api-service.ts +2 -19
  40. package/src/services/reporting-service/logger.ts +111 -81
  41. package/src/utils/index.ts +0 -6
  42. package/dist/logger-BWw0_z9q.js.map +0 -1
  43. package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts +0 -30
  44. package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts.map +0 -1
  45. package/dist/services/mm-api-service/company-info.d.ts +0 -13
  46. package/dist/services/mm-api-service/company-info.d.ts.map +0 -1
  47. package/dist/services/nats-service/nats-service.d.ts +0 -114
  48. package/dist/services/nats-service/nats-service.d.ts.map +0 -1
  49. package/dist/services/nats-service/test-nats-subscriber.d.ts +0 -6
  50. package/dist/services/nats-service/test-nats-subscriber.d.ts.map +0 -1
  51. package/dist/utils/error-formatter.d.ts +0 -19
  52. package/dist/utils/error-formatter.d.ts.map +0 -1
  53. package/src/services/data-sync-service/nats-labor-ticket-listener.ts +0 -341
  54. package/src/services/mm-api-service/company-info.ts +0 -87
  55. package/src/services/nats-service/nats-service.ts +0 -351
  56. package/src/services/nats-service/test-nats-subscriber.ts +0 -96
  57. package/src/utils/error-formatter.ts +0 -205
@@ -1 +1 @@
1
- {"version":3,"file":"data-sync-service.d.ts","sourceRoot":"","sources":["../../../src/services/data-sync-service/data-sync-service.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,kBAAkB,GAAU,eAAe,MAAM,kBA+G7D,CAAC"}
1
+ {"version":3,"file":"data-sync-service.d.ts","sourceRoot":"","sources":["../../../src/services/data-sync-service/data-sync-service.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB,GAAU,eAAe,MAAM,kBAuG7D,CAAC"}
@@ -1,7 +1,7 @@
1
- import "../../../config-CvA-mFWF.js";
2
- import { H as HashedCacheManager } from "../../../hashed-cache-manager-B15NN8hK.js";
3
- import { S as SQLiteCoordinator } from "../../../index-D8qO1NyK.js";
4
- import { l as logger } from "../../../logger-BWw0_z9q.js";
1
+ import "../../../config-Bax6Ofp5.js";
2
+ import { H as HashedCacheManager } from "../../../hashed-cache-manager-C1u9jQgY.js";
3
+ import { S as SQLiteCoordinator } from "../../../index-BkVlW0ZW.js";
4
+ import { l as logger } from "../../../logger-DW5fyhVS.js";
5
5
  logger.level = process.env.LOG_LEVEL || "info";
6
6
  const main = async () => {
7
7
  const cacheManager = new HashedCacheManager();
@@ -1 +1 @@
1
- {"version":3,"file":"from-erp.d.ts","sourceRoot":"","sources":["../../../../src/services/data-sync-service/jobs/from-erp.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AASvB,QAAA,MAAM,IAAI,qBA6BT,CAAC;AAoBF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"from-erp.d.ts","sourceRoot":"","sources":["../../../../src/services/data-sync-service/jobs/from-erp.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AASvB,QAAA,MAAM,IAAI,qBAkCT,CAAC;AAoBF,eAAe,IAAI,CAAC"}
@@ -1,7 +1,7 @@
1
- import "../../../config-CvA-mFWF.js";
2
- import { l as logger } from "../../../logger-BWw0_z9q.js";
3
- import { S as SQLiteCoordinator } from "../../../index-D8qO1NyK.js";
4
- import { c as createConnectorFromPath } from "../../../connector-factory-BPm2GVVF.js";
1
+ import "../../../config-Bax6Ofp5.js";
2
+ import { l as logger } from "../../../logger-DW5fyhVS.js";
3
+ import { S as SQLiteCoordinator } from "../../../index-BkVlW0ZW.js";
4
+ import { c as createConnectorFromPath } from "../../../connector-factory-BaMIlES8.js";
5
5
  logger.level = process.env.LOG_LEVEL || "info";
6
6
  const main = async () => {
7
7
  try {
@@ -18,8 +18,15 @@ const main = async () => {
18
18
  await connector.syncFromERPCompleted();
19
19
  logger.info("==========Completed from-erp job cycle==========");
20
20
  } catch (error) {
21
+ const errorDetails = {
22
+ message: error instanceof Error ? error.message : String(error),
23
+ stack: error instanceof Error ? error.stack : void 0,
24
+ name: error instanceof Error ? error.name : void 0,
25
+ ...error && typeof error === "object" ? error : {}
26
+ // Include all enumerable properties if it's an object
27
+ };
21
28
  logger.error('Worker for job "from-erp" had an error', {
22
- error
29
+ error: errorDetails
23
30
  });
24
31
  throw error;
25
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"from-erp.js","sources":["../../../../src/services/data-sync-service/jobs/from-erp.ts"],"sourcesContent":["import \"dotenv/config\";\n\nimport logger from \"../../../services/reporting-service/logger\";\nimport { SQLiteCoordinator } from \"../../sqlite-service\";\nimport { createConnectorFromPath } from \"../../../utils/connector-factory\";\n\n// Configure the logger with the correct log level\nlogger.level = process.env.LOG_LEVEL || \"info\";\n\nconst main = async () => {\n try {\n logger.info('Worker for job \"from-erp\" online');\n logger.info(\"==========Starting from-erp job cycle==========\");\n\n // Get the connector path from the environment variable\n const connectorPath = process.env.CONNECTOR_PATH;\n \n if (!connectorPath) {\n throw new Error(\"Connector path not provided in environment variables\");\n }\n\n // Create a new connector instance for this job\n const connector = await createConnectorFromPath(connectorPath);\n\n await SQLiteCoordinator.executeWithLock(\"from-erp\", async () => {\n await connector.syncFromERP();\n });\n\n await connector.syncFromERPCompleted();\n logger.info(\"==========Completed from-erp job cycle==========\");\n } catch (error) {\n // Logger now handles circular references and error objects safely\n logger.error('Worker for job \"from-erp\" had an error', {\n error,\n });\n\n throw error; // Rethrow so Bree can handle it properly\n }\n};\n\n// Cross-platform module detection fix for Bree compatibility\n// Windows: process.argv[1] uses backslashes, import.meta.url uses forward slashes\n// Linux/Mac: both use forward slashes, so this normalization is safe\nconst normalizedArgv1 = process.argv[1].replace(/\\\\/g, '/');\nconst fileUrl = normalizedArgv1.startsWith('/') ? \n `file://${normalizedArgv1}` : // Unix: file:// + /path = file:///path\n `file:///${normalizedArgv1}`; // Windows: file:/// + C:/path = file:///C:/path\nconst isMainModule = import.meta.url === fileUrl;\n\nif (isMainModule) {\n // This is called when Bree runs this file as a worker\n try {\n await main();\n } catch {\n process.exitCode = 1; // prefer exitCode so stdout/stderr can flush\n }\n}\n\nexport default main;"],"names":[],"mappings":";;;;AAOA,OAAO,QAAQ,QAAQ,IAAI,aAAa;AAExC,MAAM,OAAO,YAAY;AACvB,MAAI;AACF,WAAO,KAAK,kCAAkC;AAC9C,WAAO,KAAK,iDAAiD;AAG7D,UAAM,gBAAgB,QAAQ,IAAI;AAElC,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAGA,UAAM,YAAY,MAAM,wBAAwB,aAAa;AAE7D,UAAM,kBAAkB,gBAAgB,YAAY,YAAY;AAC9D,YAAM,UAAU,YAAA;AAAA,IAClB,CAAC;AAED,UAAM,UAAU,qBAAA;AAChB,WAAO,KAAK,kDAAkD;AAAA,EAChE,SAAS,OAAO;AAEd,WAAO,MAAM,0CAA0C;AAAA,MACrD;AAAA,IAAA,CACD;AAED,UAAM;AAAA,EACR;AACF;AAKA,MAAM,kBAAkB,QAAQ,KAAK,CAAC,EAAE,QAAQ,OAAO,GAAG;AAC1D,MAAM,UAAU,gBAAgB,WAAW,GAAG,IAC5C,UAAU,eAAe;AAAA;AAAA,EACzB,WAAW,eAAe;AAAA;AAC5B,MAAM,eAAe,YAAY,QAAQ;AAEzC,IAAI,cAAc;AAEhB,MAAI;AACF,UAAM,KAAA;AAAA,EACR,QAAQ;AACN,YAAQ,WAAW;AAAA,EACrB;AACF;"}
1
+ {"version":3,"file":"from-erp.js","sources":["../../../../src/services/data-sync-service/jobs/from-erp.ts"],"sourcesContent":["import \"dotenv/config\";\n\nimport logger from \"../../../services/reporting-service/logger\";\nimport { SQLiteCoordinator } from \"../../sqlite-service\";\nimport { createConnectorFromPath } from \"../../../utils/connector-factory\";\n\n// Configure the logger with the correct log level\nlogger.level = process.env.LOG_LEVEL || \"info\";\n\nconst main = async () => {\n try {\n logger.info('Worker for job \"from-erp\" online');\n logger.info(\"==========Starting from-erp job cycle==========\");\n\n // Get the connector path from the environment variable\n const connectorPath = process.env.CONNECTOR_PATH;\n \n if (!connectorPath) {\n throw new Error(\"Connector path not provided in environment variables\");\n }\n\n // Create a new connector instance for this job\n const connector = await createConnectorFromPath(connectorPath);\n\n await SQLiteCoordinator.executeWithLock(\"from-erp\", async () => {\n await connector.syncFromERP();\n });\n\n await connector.syncFromERPCompleted();\n logger.info(\"==========Completed from-erp job cycle==========\");\n } catch (error) {\n const errorDetails = {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n name: error instanceof Error ? error.name : undefined,\n ...(error && typeof error === \"object\" ? error : {}), // Include all enumerable properties if it's an object\n };\n logger.error('Worker for job \"from-erp\" had an error', {\n error: errorDetails,\n });\n\n throw error; // Rethrow so Bree can handle it properly\n }\n};\n\n// Cross-platform module detection fix for Bree compatibility\n// Windows: process.argv[1] uses backslashes, import.meta.url uses forward slashes\n// Linux/Mac: both use forward slashes, so this normalization is safe\nconst normalizedArgv1 = process.argv[1].replace(/\\\\/g, '/');\nconst fileUrl = normalizedArgv1.startsWith('/') ? \n `file://${normalizedArgv1}` : // Unix: file:// + /path = file:///path\n `file:///${normalizedArgv1}`; // Windows: file:/// + C:/path = file:///C:/path\nconst isMainModule = import.meta.url === fileUrl;\n\nif (isMainModule) {\n // This is called when Bree runs this file as a worker\n try {\n await main();\n } catch {\n process.exitCode = 1; // prefer exitCode so stdout/stderr can flush\n }\n}\n\nexport default main;"],"names":[],"mappings":";;;;AAOA,OAAO,QAAQ,QAAQ,IAAI,aAAa;AAExC,MAAM,OAAO,YAAY;AACvB,MAAI;AACF,WAAO,KAAK,kCAAkC;AAC9C,WAAO,KAAK,iDAAiD;AAG7D,UAAM,gBAAgB,QAAQ,IAAI;AAElC,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAGA,UAAM,YAAY,MAAM,wBAAwB,aAAa;AAE7D,UAAM,kBAAkB,gBAAgB,YAAY,YAAY;AAC9D,YAAM,UAAU,YAAA;AAAA,IAClB,CAAC;AAED,UAAM,UAAU,qBAAA;AAChB,WAAO,KAAK,kDAAkD;AAAA,EAChE,SAAS,OAAO;AACd,UAAM,eAAe;AAAA,MACnB,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,OAAO,iBAAiB,QAAQ,MAAM,QAAQ;AAAA,MAC9C,MAAM,iBAAiB,QAAQ,MAAM,OAAO;AAAA,MAC5C,GAAI,SAAS,OAAO,UAAU,WAAW,QAAQ,CAAA;AAAA;AAAA,IAAC;AAEpD,WAAO,MAAM,0CAA0C;AAAA,MACrD,OAAO;AAAA,IAAA,CACR;AAED,UAAM;AAAA,EACR;AACF;AAKA,MAAM,kBAAkB,QAAQ,KAAK,CAAC,EAAE,QAAQ,OAAO,GAAG;AAC1D,MAAM,UAAU,gBAAgB,WAAW,GAAG,IAC5C,UAAU,eAAe;AAAA;AAAA,EACzB,WAAW,eAAe;AAAA;AAC5B,MAAM,eAAe,YAAY,QAAQ;AAEzC,IAAI,cAAc;AAEhB,MAAI;AACF,UAAM,KAAA;AAAA,EACR,QAAQ;AACN,YAAQ,WAAW;AAAA,EACrB;AACF;"}
@@ -1,6 +1,6 @@
1
- import "../../../config-CvA-mFWF.js";
2
- import { l as logger } from "../../../logger-BWw0_z9q.js";
3
- import { c as createConnectorFromPath } from "../../../connector-factory-BPm2GVVF.js";
1
+ import "../../../config-Bax6Ofp5.js";
2
+ import { l as logger } from "../../../logger-DW5fyhVS.js";
3
+ import { c as createConnectorFromPath } from "../../../connector-factory-BaMIlES8.js";
4
4
  logger.level = process.env.LOG_LEVEL || "info";
5
5
  const main = async () => {
6
6
  try {
@@ -1,5 +1,5 @@
1
1
  import knex from "knex";
2
- import { l as logger } from "../../../logger-BWw0_z9q.js";
2
+ import { l as logger } from "../../../logger-DW5fyhVS.js";
3
3
  import { c as config } from "../../../knexfile-Bng2Ru9c.js";
4
4
  logger.level = process.env.LOG_LEVEL || "info";
5
5
  const db = knex(config.local);
@@ -1 +1 @@
1
- {"version":3,"file":"to-erp.d.ts","sourceRoot":"","sources":["../../../../src/services/data-sync-service/jobs/to-erp.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AASvB,QAAA,MAAM,IAAI,qBAuCT,CAAC;AAoBF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"to-erp.d.ts","sourceRoot":"","sources":["../../../../src/services/data-sync-service/jobs/to-erp.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAQvB,QAAA,MAAM,IAAI,qBAoCT,CAAC;AAoBF,eAAe,IAAI,CAAC"}
@@ -1,7 +1,6 @@
1
- import "../../../config-CvA-mFWF.js";
2
- import { l as logger } from "../../../logger-BWw0_z9q.js";
3
- import { S as SQLiteCoordinator } from "../../../index-D8qO1NyK.js";
4
- import { c as createConnectorFromPath } from "../../../connector-factory-BPm2GVVF.js";
1
+ import "../../../config-Bax6Ofp5.js";
2
+ import { l as logger } from "../../../logger-DW5fyhVS.js";
3
+ import { c as createConnectorFromPath } from "../../../connector-factory-BaMIlES8.js";
5
4
  logger.level = process.env.LOG_LEVEL || "info";
6
5
  const main = async () => {
7
6
  try {
@@ -12,9 +11,7 @@ const main = async () => {
12
11
  throw new Error("Connector path not provided in environment variables");
13
12
  }
14
13
  const connector = await createConnectorFromPath(connectorPath);
15
- await SQLiteCoordinator.executeWithLock("to-erp", async () => {
16
- await connector.syncToERP();
17
- });
14
+ await connector.syncToERP();
18
15
  await connector.syncToERPCompleted();
19
16
  logger.info("==========Completed to-erp job cycle==========");
20
17
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"to-erp.js","sources":["../../../../src/services/data-sync-service/jobs/to-erp.ts"],"sourcesContent":["import \"dotenv/config\";\n\nimport logger from \"../../reporting-service/logger\";\nimport { SQLiteCoordinator } from \"../../sqlite-service\";\nimport { createConnectorFromPath } from \"../../../utils/connector-factory\";\n\n// Configure the logger with the correct log level\nlogger.level = process.env.LOG_LEVEL || \"info\";\n\nconst main = async () => {\n try {\n logger.info('Worker for job \"to-erp\" online');\n logger.info(\"==========Starting to-erp job cycle==========\");\n\n // Get the connector path from the environment variable\n const connectorPath = process.env.CONNECTOR_PATH;\n\n if (!connectorPath) {\n throw new Error(\"Connector path not provided in environment variables\");\n }\n\n // Create a new connector instance for this job\n const connector = await createConnectorFromPath(connectorPath);\n\n await SQLiteCoordinator.executeWithLock(\"to-erp\", async () => {\n await connector.syncToERP();\n });\n\n await connector.syncToERPCompleted();\n\n logger.info(\"==========Completed to-erp job cycle==========\");\n } catch (error) {\n const errorDetails = {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n name: error instanceof Error ? error.name : undefined,\n ...(error && typeof error === \"object\" ? error : {}), // Include all enumerable properties if it's an object\n };\n logger.error('Worker for job \"to-erp\" had an error', {\n error: errorDetails,\n connectorPath: process.env.CONNECTOR_PATH,\n });\n\n // Also log to console for immediate visibility\n console.error(\"to-erp job error:\", error);\n\n throw error; // Rethrow so Bree can handle it properly\n }\n};\n\n// Cross-platform module detection fix for Bree compatibility\n// Windows: process.argv[1] uses backslashes, import.meta.url uses forward slashes\n// Linux/Mac: both use forward slashes, so this normalization is safe\nconst normalizedArgv1 = process.argv[1].replace(/\\\\/g, '/');\nconst fileUrl = normalizedArgv1.startsWith('/') ? \n `file://${normalizedArgv1}` : // Unix: file:// + /path = file:///path\n `file:///${normalizedArgv1}`; // Windows: file:/// + C:/path = file:///C:/path\nconst isMainModule = import.meta.url === fileUrl;\n\nif (isMainModule) {\n // This is called when Bree runs this file as a worker\n try {\n await main();\n } catch {\n process.exitCode = 1; // prefer exitCode so stdout/stderr can flush\n }\n}\n\nexport default main;\n"],"names":[],"mappings":";;;;AAOA,OAAO,QAAQ,QAAQ,IAAI,aAAa;AAExC,MAAM,OAAO,YAAY;AACvB,MAAI;AACF,WAAO,KAAK,gCAAgC;AAC5C,WAAO,KAAK,+CAA+C;AAG3D,UAAM,gBAAgB,QAAQ,IAAI;AAElC,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAGA,UAAM,YAAY,MAAM,wBAAwB,aAAa;AAE7D,UAAM,kBAAkB,gBAAgB,UAAU,YAAY;AAC5D,YAAM,UAAU,UAAA;AAAA,IAClB,CAAC;AAED,UAAM,UAAU,mBAAA;AAEhB,WAAO,KAAK,gDAAgD;AAAA,EAC9D,SAAS,OAAO;AACd,UAAM,eAAe;AAAA,MACnB,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,OAAO,iBAAiB,QAAQ,MAAM,QAAQ;AAAA,MAC9C,MAAM,iBAAiB,QAAQ,MAAM,OAAO;AAAA,MAC5C,GAAI,SAAS,OAAO,UAAU,WAAW,QAAQ,CAAA;AAAA;AAAA,IAAC;AAEpD,WAAO,MAAM,wCAAwC;AAAA,MACnD,OAAO;AAAA,MACP,eAAe,QAAQ,IAAI;AAAA,IAAA,CAC5B;AAGD,YAAQ,MAAM,qBAAqB,KAAK;AAExC,UAAM;AAAA,EACR;AACF;AAKA,MAAM,kBAAkB,QAAQ,KAAK,CAAC,EAAE,QAAQ,OAAO,GAAG;AAC1D,MAAM,UAAU,gBAAgB,WAAW,GAAG,IAC5C,UAAU,eAAe;AAAA;AAAA,EACzB,WAAW,eAAe;AAAA;AAC5B,MAAM,eAAe,YAAY,QAAQ;AAEzC,IAAI,cAAc;AAEhB,MAAI;AACF,UAAM,KAAA;AAAA,EACR,QAAQ;AACN,YAAQ,WAAW;AAAA,EACrB;AACF;"}
1
+ {"version":3,"file":"to-erp.js","sources":["../../../../src/services/data-sync-service/jobs/to-erp.ts"],"sourcesContent":["import \"dotenv/config\";\n\nimport logger from \"../../reporting-service/logger\";\nimport { createConnectorFromPath } from \"../../../utils/connector-factory\";\n\n// Configure the logger with the correct log level\nlogger.level = process.env.LOG_LEVEL || \"info\";\n\nconst main = async () => {\n try {\n logger.info('Worker for job \"to-erp\" online');\n logger.info(\"==========Starting to-erp job cycle==========\");\n\n // Get the connector path from the environment variable\n const connectorPath = process.env.CONNECTOR_PATH;\n\n if (!connectorPath) {\n throw new Error(\"Connector path not provided in environment variables\");\n }\n\n // Create a new connector instance for this job\n const connector = await createConnectorFromPath(connectorPath);\n\n await connector.syncToERP();\n await connector.syncToERPCompleted();\n\n logger.info(\"==========Completed to-erp job cycle==========\");\n } catch (error) {\n const errorDetails = {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n name: error instanceof Error ? error.name : undefined,\n ...(error && typeof error === \"object\" ? error : {}), // Include all enumerable properties if it's an object\n };\n logger.error('Worker for job \"to-erp\" had an error', {\n error: errorDetails,\n connectorPath: process.env.CONNECTOR_PATH,\n });\n\n // Also log to console for immediate visibility\n console.error(\"to-erp job error:\", error);\n\n throw error; // Rethrow so Bree can handle it properly\n }\n};\n\n// Cross-platform module detection fix for Bree compatibility\n// Windows: process.argv[1] uses backslashes, import.meta.url uses forward slashes\n// Linux/Mac: both use forward slashes, so this normalization is safe\nconst normalizedArgv1 = process.argv[1].replace(/\\\\/g, '/');\nconst fileUrl = normalizedArgv1.startsWith('/') ? \n `file://${normalizedArgv1}` : // Unix: file:// + /path = file:///path\n `file:///${normalizedArgv1}`; // Windows: file:/// + C:/path = file:///C:/path\nconst isMainModule = import.meta.url === fileUrl;\n\nif (isMainModule) {\n // This is called when Bree runs this file as a worker\n try {\n await main();\n } catch {\n process.exitCode = 1; // prefer exitCode so stdout/stderr can flush\n }\n}\n\nexport default main;\n"],"names":[],"mappings":";;;AAMA,OAAO,QAAQ,QAAQ,IAAI,aAAa;AAExC,MAAM,OAAO,YAAY;AACvB,MAAI;AACF,WAAO,KAAK,gCAAgC;AAC5C,WAAO,KAAK,+CAA+C;AAG3D,UAAM,gBAAgB,QAAQ,IAAI;AAElC,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAGA,UAAM,YAAY,MAAM,wBAAwB,aAAa;AAE7D,UAAM,UAAU,UAAA;AAChB,UAAM,UAAU,mBAAA;AAEhB,WAAO,KAAK,gDAAgD;AAAA,EAC9D,SAAS,OAAO;AACd,UAAM,eAAe;AAAA,MACnB,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,OAAO,iBAAiB,QAAQ,MAAM,QAAQ;AAAA,MAC9C,MAAM,iBAAiB,QAAQ,MAAM,OAAO;AAAA,MAC5C,GAAI,SAAS,OAAO,UAAU,WAAW,QAAQ,CAAA;AAAA;AAAA,IAAC;AAEpD,WAAO,MAAM,wCAAwC;AAAA,MACnD,OAAO;AAAA,MACP,eAAe,QAAQ,IAAI;AAAA,IAAA,CAC5B;AAGD,YAAQ,MAAM,qBAAqB,KAAK;AAExC,UAAM;AAAA,EACR;AACF;AAKA,MAAM,kBAAkB,QAAQ,KAAK,CAAC,EAAE,QAAQ,OAAO,GAAG;AAC1D,MAAM,UAAU,gBAAgB,WAAW,GAAG,IAC5C,UAAU,eAAe;AAAA;AAAA,EACzB,WAAW,eAAe;AAAA;AAC5B,MAAM,eAAe,YAAY,QAAQ;AAEzC,IAAI,cAAc;AAEhB,MAAI;AACF,UAAM,KAAA;AAAA,EACR,QAAQ;AACN,YAAQ,WAAW;AAAA,EACrB;AACF;"}
@@ -3,8 +3,6 @@ import type { MMReceiveLaborTicketReason, MMReceiveLaborTicketWorkOrderOperation
3
3
  import { MMSendPerson, MMSendResource, MMSendPart, MMSendPartOperation, MMSendWorkOrder, MMSendWorkOrderOperation, MMSendReason, MMSendLaborTicket, MMSendWorkOrderBatch } from "./types/send-types";
4
4
  import type { IToRESTApiObject } from "./types/send-types";
5
5
  import type { MMApiBaseResponse, MM200NonLaborTicketResponse, MM200LaborTicketResponse, MM207NonLaborTicketResponse, MM207LaborTicketResponse, MM500NonLaborTicketException, MM500LaborTicketException, MMGraphQLResourceResponse, MMMachineGroupsResponse } from "./types/mm-response-interfaces";
6
- import { getCompanyInfo } from "./company-info";
7
- import type { CompanyInfo } from "./company-info";
8
6
  /**
9
7
  * A class to manage interactions with the MM API
10
8
  */
@@ -31,9 +29,4 @@ export { MMSendPerson, MMSendResource, MMSendPart, MMSendPartOperation, MMSendWo
31
29
  * Batch interfaces for sending multiple related entities
32
30
  */
33
31
  export type { MMSendWorkOrderBatch };
34
- /**
35
- * Company information utilities
36
- */
37
- export { getCompanyInfo };
38
- export type { CompanyInfo };
39
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/mm-api-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAEV,0BAA0B,EAC1B,sCAAsC,EACvC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB;;;GAGG;AACH,YAAY,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,GACxB,CAAC;AAEF;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EACV,0BAA0B,EAC1B,sCAAsC,GACvC,CAAC;AAEF;;GAEG;AACH,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC;;GAEG;AACH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,GAClB,CAAC;AAEF;;GAEG;AACH,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/mm-api-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAEV,0BAA0B,EAC1B,sCAAsC,EACvC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB;;;GAGG;AACH,YAAY,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,GACxB,CAAC;AAEF;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EACV,0BAA0B,EAC1B,sCAAsC,GACvC,CAAC;AAEF;;GAEG;AACH,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC;;GAEG;AACH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,GAClB,CAAC;AAEF;;GAEG;AACH,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
@@ -160,12 +160,6 @@ export declare class MMApiClient {
160
160
  * @returns Promise with an array of labor ticket updates
161
161
  */
162
162
  fetchLaborTicketUpdates(query: Record<string, string>): Promise<MMReceiveLaborTicket[]>;
163
- /**
164
- * Fetch a single labor ticket by reference from the MM API
165
- * @param laborTicketRef The labor ticket reference to fetch
166
- * @returns Promise with the labor ticket data
167
- */
168
- fetchLaborTicketByRef(laborTicketRef: string): Promise<MMReceiveLaborTicket>;
169
163
  /**
170
164
  * Fetch a checkpoint for a specific system, table, and checkpoint type
171
165
  * @param checkpoint The checkpoint to fetch
@@ -1 +1 @@
1
- {"version":3,"file":"mm-api-service.d.ts","sourceRoot":"","sources":["../../../src/services/mm-api-service/mm-api-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mm-api-service.d.ts","sourceRoot":"","sources":["../../../src/services/mm-api-service/mm-api-service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/services/reporting-service/logger.ts"],"names":[],"mappings":"AAoGA,QAAA,MAAM,MAAM,0BAaV,CAAC;AA0DH,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,SAAS,MAAM,SAuChE,CAAC;AAKF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/services/reporting-service/logger.ts"],"names":[],"mappings":"AAuGA,QAAA,MAAM,MAAM,0BAIV,CAAC;AAuGH,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,SAAS,MAAM,SA8BhE,CAAC;AAKF,eAAe,MAAM,CAAC"}
@@ -46,11 +46,6 @@ export type { HTTPClient, HTTPRequestConfig, HTTPResponse } from "./http-client"
46
46
  */
47
47
  export * from "./mm-labor-ticket-helpers";
48
48
  export { getErrorType } from './error-utils';
49
- /**
50
- * Error formatting utilities
51
- */
52
- export { formatError, formatErrorForLogging } from './error-formatter';
53
- export type { FormattedError } from './error-formatter';
54
49
  /**
55
50
  * MM Connector Logger utilities
56
51
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,cAAc,cAAc,CAAC;AAE7B;;GAEG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,YAAY,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAEpF;;GAEG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAE7C;;GAEG;AACH,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjF;;GAEG;AACH,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACzH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;GAEG;AACH,cAAc,2BAA2B,CAAC;AAE1C;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAExE;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,cAAc,cAAc,CAAC;AAE7B;;GAEG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,YAAY,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAEpF;;GAEG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAE7C;;GAEG;AACH,cAAc,oDAAoD,CAAC;AACnE,cAAc,oDAAoD,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjF;;GAEG;AACH,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACzH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;GAEG;AACH,cAAc,2BAA2B,CAAC;AAE1C;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAExE;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@machinemetrics/mm-erp-sdk",
3
3
  "description": "A library for syncing data between MachineMetrics and ERP systems",
4
- "version": "0.1.9-beta.1",
4
+ "version": "0.1.9-beta.2",
5
5
  "license": "MIT",
6
6
  "author": "machinemetrics",
7
7
  "main": "dist/mm-erp-sdk.js",
@@ -14,8 +14,7 @@
14
14
  "scripts": {
15
15
  "build": "vite build && tsc --project tsconfig.declarations.json",
16
16
  "start": "vite build --watch",
17
- "type-check": "tsc --noEmit",
18
- "test:nats": "tsx src/services/nats-service/test-nats-subscriber.ts"
17
+ "type-check": "tsc --noEmit"
19
18
  },
20
19
  "dependencies": {
21
20
  "@azure/msal-node": "^2.12.0",
@@ -29,7 +28,6 @@
29
28
  "knex": "^3.1.0",
30
29
  "lodash": "^4.17.21",
31
30
  "mssql": "^11.0.1",
32
- "nats": "^2.29.3",
33
31
  "winston": "^3.14.0",
34
32
  "winston-daily-rotate-file": "^5.0.0",
35
33
  "xxhashjs": "^0.2.2",
@@ -45,7 +43,6 @@
45
43
  "@types/node": "^20.0.0",
46
44
  "@types/xxhashjs": "^0.2.4",
47
45
  "prettier": "^3.6.2",
48
- "tsx": "^4.20.6",
49
46
  "typescript": "^5.8.3",
50
47
  "vite": "^5.3.4"
51
48
  },
package/src/index.ts CHANGED
@@ -49,10 +49,7 @@ export {
49
49
  applyTimezoneOffsetsToFields,
50
50
  convertToLocalTime,
51
51
  getErrorType,
52
- formatError,
53
- formatErrorForLogging,
54
52
  } from "./utils";
55
- export type { FormattedError } from "./utils";
56
53
 
57
54
  // Local data store
58
55
  export { getInitialLoadComplete, setInitialLoadComplete } from "./utils";
@@ -4,21 +4,11 @@ import path from "path";
4
4
  import { fileURLToPath } from "url";
5
5
  import { CoreConfiguration } from "./configuration-manager";
6
6
  import logger from "../reporting-service/logger";
7
- import { createConnectorFromPath } from "../../utils/connector-factory";
8
- import { NatsLaborTicketListener } from "./nats-labor-ticket-listener";
9
7
 
10
8
  export const runDataSyncService = async (connectorPath: string) => {
11
9
  const config = CoreConfiguration.inst();
12
10
 
13
11
  try {
14
- // Create connector instance
15
- const connector = await createConnectorFromPath(connectorPath);
16
-
17
- // Start NATS listener if enabled
18
- if (process.env.NATS_ENABLED === "true") {
19
- const natsListener = new NatsLaborTicketListener(connector);
20
- await natsListener.start();
21
- }
22
12
  // Find the SDK's node_modules directory and jobs path using ES module import
23
13
  const currentFileUrl = import.meta.url;
24
14
  const currentFilePath = fileURLToPath(currentFileUrl);
@@ -29,9 +29,14 @@ const main = async () => {
29
29
  await connector.syncFromERPCompleted();
30
30
  logger.info("==========Completed from-erp job cycle==========");
31
31
  } catch (error) {
32
- // Logger now handles circular references and error objects safely
32
+ const errorDetails = {
33
+ message: error instanceof Error ? error.message : String(error),
34
+ stack: error instanceof Error ? error.stack : undefined,
35
+ name: error instanceof Error ? error.name : undefined,
36
+ ...(error && typeof error === "object" ? error : {}), // Include all enumerable properties if it's an object
37
+ };
33
38
  logger.error('Worker for job "from-erp" had an error', {
34
- error,
39
+ error: errorDetails,
35
40
  });
36
41
 
37
42
  throw error; // Rethrow so Bree can handle it properly
@@ -1,7 +1,6 @@
1
1
  import "dotenv/config";
2
2
 
3
3
  import logger from "../../reporting-service/logger";
4
- import { SQLiteCoordinator } from "../../sqlite-service";
5
4
  import { createConnectorFromPath } from "../../../utils/connector-factory";
6
5
 
7
6
  // Configure the logger with the correct log level
@@ -22,10 +21,7 @@ const main = async () => {
22
21
  // Create a new connector instance for this job
23
22
  const connector = await createConnectorFromPath(connectorPath);
24
23
 
25
- await SQLiteCoordinator.executeWithLock("to-erp", async () => {
26
- await connector.syncToERP();
27
- });
28
-
24
+ await connector.syncToERP();
29
25
  await connector.syncToERPCompleted();
30
26
 
31
27
  logger.info("==========Completed to-erp job cycle==========");
@@ -27,8 +27,6 @@ import type {
27
27
  MMGraphQLResourceResponse,
28
28
  MMMachineGroupsResponse,
29
29
  } from "./types/mm-response-interfaces";
30
- import { getCompanyInfo } from "./company-info";
31
- import type { CompanyInfo } from "./company-info";
32
30
 
33
31
  /**
34
32
  * A class to manage interactions with the MM API
@@ -83,9 +81,3 @@ export {
83
81
  * Batch interfaces for sending multiple related entities
84
82
  */
85
83
  export type { MMSendWorkOrderBatch };
86
-
87
- /**
88
- * Company information utilities
89
- */
90
- export { getCompanyInfo };
91
- export type { CompanyInfo };
@@ -80,12 +80,9 @@ export class MMApiClient {
80
80
  return typeof err === "object" && err !== null && "status" in err;
81
81
  };
82
82
 
83
- // Check if this looks like an auth error - retry on auth status codes or JWT expiration errors
83
+ // Check if this looks like an auth error - only retry on explicit auth status codes
84
84
  const isAuthError =
85
- hasStatus(error) && (error.status === 401 || error.status === 403) ||
86
- (hasStatus(error) && error.status === 500 &&
87
- typeof (error as any).data?.error === 'string' &&
88
- (error as any).data.error.includes('JWT'));
85
+ hasStatus(error) && (error.status === 401 || error.status === 403);
89
86
 
90
87
  if (isAuthError && !options.token) {
91
88
  // Only retry if we used cached token
@@ -509,20 +506,6 @@ export class MMApiClient {
509
506
  return updates.data.map((ticket) => new MMReceiveLaborTicket(ticket));
510
507
  }
511
508
 
512
- /**
513
- * Fetch a single labor ticket by reference from the MM API
514
- * @param laborTicketRef The labor ticket reference to fetch
515
- * @returns Promise with the labor ticket data
516
- */
517
- async fetchLaborTicketByRef(
518
- laborTicketRef: string
519
- ): Promise<MMReceiveLaborTicket> {
520
- const response = (await this.getData(
521
- `${this.resourceURLs[ERPObjType.LABOR_TICKETS]}/${laborTicketRef}`
522
- )) as { data: MMReceiveLaborTicket };
523
- return new MMReceiveLaborTicket(response.data);
524
- }
525
-
526
509
  /**
527
510
  * Fetch a checkpoint for a specific system, table, and checkpoint type
528
511
  * @param checkpoint The checkpoint to fetch
@@ -3,6 +3,33 @@ import DailyRotateFile from "winston-daily-rotate-file";
3
3
  import path from "path";
4
4
 
5
5
  const logDirectory = "logs";
6
+ const initialLogLevel = process.env.LOG_LEVEL || "info";
7
+
8
+ const LOGGER_ERROR_PREFIX = "[mm-erp-sdk logger]";
9
+
10
+ const serializeLoggerError = (error: unknown): string => {
11
+ if (error instanceof Error) {
12
+ return error.stack ?? error.message;
13
+ }
14
+ if (typeof error === "string") {
15
+ return error;
16
+ }
17
+ try {
18
+ return JSON.stringify(error);
19
+ } catch {
20
+ return String(error);
21
+ }
22
+ };
23
+
24
+ const handleLoggerError = (error: unknown) => {
25
+ const serialized = serializeLoggerError(error);
26
+ try {
27
+ // eslint-disable-next-line no-console
28
+ console.error(`${LOGGER_ERROR_PREFIX} transport error: ${serialized}`);
29
+ } catch {
30
+ /* ignore failures when reporting logger errors */
31
+ }
32
+ };
6
33
 
7
34
  const MSG_MAX_LEN = 60;
8
35
  const MSG_MAX_CHARS = 2048;
@@ -23,45 +50,8 @@ const truncateString = (str: string): string => {
23
50
  return result;
24
51
  };
25
52
 
26
- /**
27
- * Safe JSON serializer that handles circular references and extracts meaningful error data
28
- */
29
- const safeStringify = (obj: any, indent: number = 2): string => {
30
- const seen = new WeakSet();
31
-
32
- return JSON.stringify(
33
- obj,
34
- (key, value) => {
35
- // Handle Error objects specially
36
- if (value instanceof Error) {
37
- return {
38
- message: value.message,
39
- name: value.name,
40
- stack: value.stack,
41
- ...(value.constructor.name === 'HTTPError' || value.constructor.name === 'AxiosError' ? {
42
- status: (value as any).status,
43
- code: (value as any).code,
44
- data: (value as any).data,
45
- } : {}),
46
- };
47
- }
48
-
49
- // Handle circular references
50
- if (typeof value === "object" && value !== null) {
51
- if (seen.has(value)) {
52
- return "[Circular]";
53
- }
54
- seen.add(value);
55
- }
56
-
57
- return value;
58
- },
59
- indent
60
- );
61
- };
62
-
63
53
  const baseFormat = format.printf(({ timestamp, level, message, ...rest }) => {
64
- let restString = safeStringify(rest, 2);
54
+ let restString = JSON.stringify(rest, undefined, 2);
65
55
  restString = restString === "{}" ? "" : restString;
66
56
 
67
57
  let formattedMessage: string;
@@ -97,25 +87,31 @@ const logFormat = format.combine(
97
87
  baseFormat
98
88
  );
99
89
 
90
+ const createConsoleTransport = () => {
91
+ const consoleTransport = new transports.Console({
92
+ format: format.combine(
93
+ format.timestamp(),
94
+ format.splat(),
95
+ baseFormat,
96
+ format.colorize({ all: true })
97
+ ),
98
+ });
99
+ consoleTransport.on("error", handleLoggerError);
100
+ return consoleTransport;
101
+ };
102
+
100
103
  // Create a basic logger with default configuration
101
104
  const logger = createLogger({
102
- level: process.env.LOG_LEVEL || "info",
105
+ level: initialLogLevel,
103
106
  format: logFormat,
104
- transports: [
105
- new transports.Console({
106
- format: format.combine(
107
- format.timestamp(),
108
- format.splat(),
109
- baseFormat,
110
- format.colorize({ all: true })
111
- ),
112
- }),
113
- ],
107
+ transports: [createConsoleTransport()],
114
108
  });
115
109
 
110
+ logger.on("error", handleLoggerError);
111
+
116
112
  // Helper function to create a file transport with shared configuration
117
113
  const createFileTransport = (): DailyRotateFile => {
118
- return new DailyRotateFile({
114
+ const transport = new DailyRotateFile({
119
115
  filename: path.join(logDirectory, "%DATE%.log"),
120
116
  datePattern: "YYYY-MM-DD",
121
117
  zippedArchive: true,
@@ -123,6 +119,8 @@ const createFileTransport = (): DailyRotateFile => {
123
119
  maxFiles: "14d",
124
120
  format: logFormat,
125
121
  });
122
+ transport.on("error", handleLoggerError);
123
+ return transport;
126
124
  };
127
125
 
128
126
  // Rotate mitigation helper: attaches rotate handler to transport and recursively attaches to replacements
@@ -136,35 +134,76 @@ function attachRotateMitigation(
136
134
  if (isRefreshing) return;
137
135
  isRefreshing = true;
138
136
  let removalTimer: NodeJS.Timeout | null = null;
137
+ let next: DailyRotateFile | null = null;
139
138
 
140
- // Create replacement first to avoid any logging gap
141
- const next = createFileTransport();
142
- // When the new file is created, remove the old transport
143
- next.on("new", () => {
139
+ const cleanupRefresh = () => {
144
140
  if (removalTimer) {
145
141
  clearTimeout(removalTimer);
146
142
  removalTimer = null;
147
143
  }
148
- try {
149
- logger.remove(transport);
150
- } catch {}
151
144
  isRefreshing = false;
152
- });
153
- attachRotateMitigation(next, opts);
154
- logger.add(next);
155
-
156
- // Fallback: if the "new" event doesn't fire, remove the old transport after a grace period
157
- const REMOVAL_GRACE_MS = 30000;
158
- removalTimer = setTimeout(() => {
145
+ };
146
+
147
+ try {
148
+ // Create replacement first to avoid any logging gap
149
+ next = createFileTransport();
150
+ // When the new file is created, remove the old transport
151
+ next.on("new", () => {
152
+ if (removalTimer) {
153
+ clearTimeout(removalTimer);
154
+ removalTimer = null;
155
+ }
156
+ try {
157
+ logger.remove(transport);
158
+ } catch (error) {
159
+ handleLoggerError(error);
160
+ }
161
+ cleanupRefresh();
162
+ });
163
+ attachRotateMitigation(next, opts);
159
164
  try {
160
- logger.remove(transport);
161
- } catch {}
162
- isRefreshing = false;
163
- removalTimer = null;
164
- }, REMOVAL_GRACE_MS);
165
+ logger.add(next);
166
+ } catch (error) {
167
+ handleLoggerError(error);
168
+ cleanupRefresh();
169
+ try {
170
+ logger.remove(next);
171
+ } catch {}
172
+ try {
173
+ if (typeof next.close === "function") {
174
+ next.close();
175
+ }
176
+ } catch {}
177
+ return;
178
+ }
165
179
 
166
- // Keep console and other transports intact; do not silence or clear
167
- logger.level = logLevel;
180
+ // Fallback: if the "new" event doesn't fire, remove the old transport after a grace period
181
+ const REMOVAL_GRACE_MS = 30000;
182
+ removalTimer = setTimeout(() => {
183
+ try {
184
+ logger.remove(transport);
185
+ } catch (error) {
186
+ handleLoggerError(error);
187
+ }
188
+ cleanupRefresh();
189
+ }, REMOVAL_GRACE_MS);
190
+
191
+ // Keep console and other transports intact; do not silence or clear
192
+ logger.level = logLevel;
193
+ } catch (error) {
194
+ cleanupRefresh();
195
+ handleLoggerError(error);
196
+ if (next) {
197
+ try {
198
+ logger.remove(next);
199
+ } catch {}
200
+ try {
201
+ if (typeof next.close === "function") {
202
+ next.close();
203
+ }
204
+ } catch {}
205
+ }
206
+ }
168
207
  });
169
208
  }
170
209
 
@@ -194,16 +233,7 @@ export const configureLogger = (logLevel: string, nodeEnv: string) => {
194
233
 
195
234
  // Add console transport in non-production environments
196
235
  if (nodeEnv !== "production") {
197
- logger.add(
198
- new transports.Console({
199
- format: format.combine(
200
- format.timestamp(),
201
- format.splat(),
202
- baseFormat,
203
- format.colorize({ all: true })
204
- ),
205
- })
206
- );
236
+ logger.add(createConsoleTransport());
207
237
  }
208
238
 
209
239
  // Set the log level