@machinemetrics/mm-erp-sdk 0.3.0-beta.0 → 0.3.0-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 (141) hide show
  1. package/dist/index.d.ts +2 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/services/data-sync-service/configuration-manager.d.ts.map +1 -1
  6. package/dist/services/data-sync-service/configuration-manager.js +30 -30
  7. package/dist/services/data-sync-service/configuration-manager.js.map +1 -1
  8. package/dist/services/data-sync-service/data-sync-service.d.ts.map +1 -1
  9. package/dist/services/data-sync-service/data-sync-service.js +9 -0
  10. package/dist/services/data-sync-service/data-sync-service.js.map +1 -1
  11. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.d.ts.map +1 -1
  12. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +1 -2
  13. package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -1
  14. package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -1
  15. package/dist/services/data-sync-service/jobs/from-erp.js +7 -13
  16. package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -1
  17. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.d.ts.map +1 -1
  18. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +1 -2
  19. package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -1
  20. package/dist/services/data-sync-service/jobs/run-migrations.d.ts.map +1 -1
  21. package/dist/services/data-sync-service/jobs/run-migrations.js +1 -2
  22. package/dist/services/data-sync-service/jobs/run-migrations.js.map +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 +12 -3
  25. package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -1
  26. package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts +30 -0
  27. package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts.map +1 -0
  28. package/dist/services/data-sync-service/nats-labor-ticket-listener.js +290 -0
  29. package/dist/services/data-sync-service/nats-labor-ticket-listener.js.map +1 -0
  30. package/dist/services/mm-api-service/company-info.d.ts +13 -0
  31. package/dist/services/mm-api-service/company-info.d.ts.map +1 -0
  32. package/dist/services/mm-api-service/company-info.js +60 -0
  33. package/dist/services/mm-api-service/company-info.js.map +1 -0
  34. package/dist/services/mm-api-service/index.d.ts +7 -0
  35. package/dist/services/mm-api-service/index.d.ts.map +1 -1
  36. package/dist/services/mm-api-service/index.js +5 -0
  37. package/dist/services/mm-api-service/index.js.map +1 -1
  38. package/dist/services/mm-api-service/mm-api-service.d.ts +6 -0
  39. package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -1
  40. package/dist/services/mm-api-service/mm-api-service.js +15 -3
  41. package/dist/services/mm-api-service/mm-api-service.js.map +1 -1
  42. package/dist/services/mm-api-service/types/receive-types.d.ts +3 -0
  43. package/dist/services/mm-api-service/types/receive-types.d.ts.map +1 -1
  44. package/dist/services/mm-api-service/types/receive-types.js +1 -0
  45. package/dist/services/mm-api-service/types/receive-types.js.map +1 -1
  46. package/dist/services/mm-api-service/types/send-types.d.ts +17 -8
  47. package/dist/services/mm-api-service/types/send-types.d.ts.map +1 -1
  48. package/dist/services/mm-api-service/types/send-types.js +41 -17
  49. package/dist/services/mm-api-service/types/send-types.js.map +1 -1
  50. package/dist/services/nats-service/nats-service.d.ts +114 -0
  51. package/dist/services/nats-service/nats-service.d.ts.map +1 -0
  52. package/dist/services/nats-service/nats-service.js +244 -0
  53. package/dist/services/nats-service/nats-service.js.map +1 -0
  54. package/dist/services/nats-service/test-nats-subscriber.d.ts +6 -0
  55. package/dist/services/nats-service/test-nats-subscriber.d.ts.map +1 -0
  56. package/dist/services/nats-service/test-nats-subscriber.js +79 -0
  57. package/dist/services/nats-service/test-nats-subscriber.js.map +1 -0
  58. package/dist/services/reporting-service/logger.d.ts.map +1 -1
  59. package/dist/services/reporting-service/logger.js +31 -6
  60. package/dist/services/reporting-service/logger.js.map +1 -1
  61. package/dist/types/erp-connector.d.ts +1 -8
  62. package/dist/types/erp-connector.d.ts.map +1 -1
  63. package/dist/types/index.d.ts +0 -1
  64. package/dist/types/index.d.ts.map +1 -1
  65. package/dist/utils/error-formatter.d.ts +19 -0
  66. package/dist/utils/error-formatter.d.ts.map +1 -0
  67. package/dist/utils/error-formatter.js +184 -0
  68. package/dist/utils/error-formatter.js.map +1 -0
  69. package/dist/utils/http-client.js +2 -4
  70. package/dist/utils/http-client.js.map +1 -1
  71. package/dist/utils/index.d.ts +5 -1
  72. package/dist/utils/index.d.ts.map +1 -1
  73. package/dist/utils/index.js +4 -1
  74. package/dist/utils/index.js.map +1 -1
  75. package/dist/utils/local-data-store/jobs-shared-data.d.ts +0 -2
  76. package/dist/utils/local-data-store/jobs-shared-data.d.ts.map +1 -1
  77. package/dist/utils/local-data-store/jobs-shared-data.js +0 -2
  78. package/dist/utils/local-data-store/jobs-shared-data.js.map +1 -1
  79. package/dist/utils/mm-labor-ticket-helpers.d.ts +4 -3
  80. package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -1
  81. package/dist/utils/mm-labor-ticket-helpers.js +7 -12
  82. package/dist/utils/mm-labor-ticket-helpers.js.map +1 -1
  83. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +0 -15
  84. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts.map +1 -1
  85. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js +46 -180
  86. package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +1 -1
  87. package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +1 -7
  88. package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
  89. package/dist/utils/standard-process-drivers/mm-entity-processor.js +1 -7
  90. package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +1 -1
  91. package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +2 -8
  92. package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
  93. package/dist/utils/standard-process-drivers/standard-process-drivers.js +18 -27
  94. package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +1 -1
  95. package/dist/utils/time-utils.d.ts.map +1 -1
  96. package/dist/utils/time-utils.js +0 -7
  97. package/dist/utils/time-utils.js.map +1 -1
  98. package/package.json +5 -4
  99. package/src/index.ts +3 -0
  100. package/src/services/data-sync-service/configuration-manager.ts +37 -50
  101. package/src/services/data-sync-service/data-sync-service.ts +10 -0
  102. package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +1 -2
  103. package/src/services/data-sync-service/jobs/from-erp.ts +7 -13
  104. package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +1 -2
  105. package/src/services/data-sync-service/jobs/run-migrations.ts +1 -2
  106. package/src/services/data-sync-service/jobs/to-erp.ts +12 -3
  107. package/src/services/data-sync-service/nats-labor-ticket-listener.ts +342 -0
  108. package/src/services/mm-api-service/company-info.ts +87 -0
  109. package/src/services/mm-api-service/index.ts +8 -0
  110. package/src/services/mm-api-service/mm-api-service.ts +20 -3
  111. package/src/services/mm-api-service/types/receive-types.ts +1 -0
  112. package/src/services/mm-api-service/types/send-types.ts +40 -16
  113. package/src/services/nats-service/nats-service.ts +351 -0
  114. package/src/services/nats-service/test-nats-subscriber.ts +96 -0
  115. package/src/services/reporting-service/logger.ts +39 -7
  116. package/src/types/erp-connector.ts +1 -8
  117. package/src/types/index.ts +0 -8
  118. package/src/utils/error-formatter.ts +205 -0
  119. package/src/utils/http-client.ts +3 -4
  120. package/src/utils/index.ts +6 -5
  121. package/src/utils/local-data-store/jobs-shared-data.ts +0 -2
  122. package/src/utils/mm-labor-ticket-helpers.ts +8 -11
  123. package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +64 -220
  124. package/src/utils/standard-process-drivers/mm-entity-processor.ts +1 -7
  125. package/src/utils/standard-process-drivers/standard-process-drivers.ts +19 -33
  126. package/src/utils/time-utils.ts +0 -11
  127. package/dist/types/flattened-work-order.d.ts +0 -99
  128. package/dist/types/flattened-work-order.d.ts.map +0 -1
  129. package/dist/types/flattened-work-order.js +0 -2
  130. package/dist/types/flattened-work-order.js.map +0 -1
  131. package/dist/utils/env.d.ts +0 -8
  132. package/dist/utils/env.d.ts.map +0 -1
  133. package/dist/utils/env.js +0 -58
  134. package/dist/utils/env.js.map +0 -1
  135. package/dist/utils/erp-timezone-utils.d.ts +0 -20
  136. package/dist/utils/erp-timezone-utils.d.ts.map +0 -1
  137. package/dist/utils/erp-timezone-utils.js +0 -75
  138. package/dist/utils/erp-timezone-utils.js.map +0 -1
  139. package/src/types/flattened-work-order.ts +0 -108
  140. package/src/utils/env.ts +0 -75
  141. package/src/utils/erp-timezone-utils.ts +0 -99
@@ -1 +1 @@
1
- {"version":3,"file":"time-utils.js","sourceRoot":"","sources":["../../src/utils/time-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time-utils.js","sourceRoot":"","sources":["../../src/utils/time-utils.ts"],"names":[],"mappings":"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"}
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.3.0-beta.0",
4
+ "version": "0.3.0-beta.2",
5
5
  "license": "MIT",
6
6
  "author": "machinemetrics",
7
7
  "main": "dist/index.js",
@@ -14,7 +14,8 @@
14
14
  "scripts": {
15
15
  "build": "tsc --project tsconfig.build.json",
16
16
  "start": "tsc --project tsconfig.build.json --watch",
17
- "type-check": "tsc --noEmit"
17
+ "type-check": "tsc --noEmit",
18
+ "test:nats": "tsx src/services/nats-service/test-nats-subscriber.ts"
18
19
  },
19
20
  "dependencies": {
20
21
  "@azure/msal-node": "^2.12.0",
@@ -27,8 +28,8 @@
27
28
  "json-stable-stringify": "^1.3.0",
28
29
  "knex": "^3.1.0",
29
30
  "lodash": "^4.17.21",
30
- "luxon": "^3.7.2",
31
31
  "mssql": "^11.0.1",
32
+ "nats": "^2.29.3",
32
33
  "winston": "^3.14.0",
33
34
  "winston-daily-rotate-file": "^5.0.0",
34
35
  "xxhashjs": "^0.2.2",
@@ -40,11 +41,11 @@
40
41
  "devDependencies": {
41
42
  "@types/json-stable-stringify": "^1.1.0",
42
43
  "@types/lodash": "^4.17.10",
43
- "@types/luxon": "^3.7.1",
44
44
  "@types/mssql": "^9.1.6",
45
45
  "@types/node": "^20.0.0",
46
46
  "@types/xxhashjs": "^0.2.4",
47
47
  "prettier": "^3.6.2",
48
+ "tsx": "^4.20.6",
48
49
  "typescript": "^5.8.3"
49
50
  },
50
51
  "files": [
package/src/index.ts CHANGED
@@ -49,7 +49,10 @@ export {
49
49
  applyTimezoneOffsetsToFields,
50
50
  convertToLocalTime,
51
51
  getErrorType,
52
+ formatError,
53
+ formatErrorForLogging,
52
54
  } from "./utils/index.js";
55
+ export type { FormattedError } from "./utils/index.js";
53
56
 
54
57
  // Local data store
55
58
  export { getInitialLoadComplete, setInitialLoadComplete } from "./utils/index.js";
@@ -1,7 +1,6 @@
1
1
  import "dotenv/config";
2
2
  import { configureLogger } from "../reporting-service/logger.js";
3
3
  import { SQLServerConfiguration } from "../sql-server-erp-service/configuration.js";
4
- import { getEnvBoolean, getEnvNumber, getEnvString } from "../../utils/env.js";
5
4
 
6
5
  export class CoreConfiguration {
7
6
  private static instance: CoreConfiguration;
@@ -30,66 +29,58 @@ export class CoreConfiguration {
30
29
  public readonly cacheExpirationCheckInterval: string;
31
30
 
32
31
  private constructor() {
33
- this.logLevel = getEnvString("LOG_LEVEL", "info");
34
- this.erpSystem = getEnvString("ERP_SYSTEM", "template");
35
- this.nodeEnv = getEnvString("NODE_ENV", "development");
32
+ this.logLevel = process.env.LOG_LEVEL || "info";
33
+ this.erpSystem = process.env.ERP_SYSTEM || "template";
34
+ this.nodeEnv = process.env.NODE_ENV || "development";
36
35
 
37
36
  //#region MM API (aka "Mapping") Service
38
37
  /**
39
38
  * MM ERP Service REST API URL (typically https://erp-api.svc.machinemetrics.com)
40
39
  */
41
- this.mmERPSvcApiBaseUrl = getEnvString("MM_MAPPING_SERVICE_URL", "");
40
+ this.mmERPSvcApiBaseUrl = process.env.MM_MAPPING_SERVICE_URL || "";
42
41
 
43
42
  /**
44
43
  * MM REST API URL (typically https://api.machinemetrics.com)
45
44
  */
46
45
  console.log("=== CONFIG DEBUG ===");
47
- const mmAuthSvcUrl = getEnvString("MM_MAPPING_AUTH_SERVICE_URL", "");
48
- console.log("MM_MAPPING_AUTH_SERVICE_URL env var:", mmAuthSvcUrl);
49
- this.mmApiBaseUrl = mmAuthSvcUrl;
46
+ console.log("MM_MAPPING_AUTH_SERVICE_URL env var:", process.env.MM_MAPPING_AUTH_SERVICE_URL);
47
+ this.mmApiBaseUrl = process.env.MM_MAPPING_AUTH_SERVICE_URL || "";
50
48
  console.log("mmApiBaseUrl set to:", this.mmApiBaseUrl);
51
49
  console.log("=== END CONFIG DEBUG ===");
52
50
 
53
51
  /**
54
52
  * Company Auth Token
55
53
  */
56
- this.mmApiAuthToken = getEnvString("MM_MAPPING_SERVICE_TOKEN", "");
54
+ this.mmApiAuthToken = process.env.MM_MAPPING_SERVICE_TOKEN || "";
57
55
 
58
56
  /**
59
57
  * Number of retry attempts for MM API calls
60
58
  */
61
- this.mmApiRetryAttempts = getEnvNumber("RETRY_ATTEMPTS", 0);
59
+ this.mmApiRetryAttempts = parseInt(process.env.RETRY_ATTEMPTS || "0");
62
60
  //#endregion MM API (aka "Mapping") Service
63
61
 
64
62
  /**
65
63
  * Default pagination limit for ERP API
66
64
  */
67
- this.erpApiPagingLimit = getEnvNumber("ERP_PAGINATION_LIMIT", 0);
65
+ this.erpApiPagingLimit = parseInt(process.env.ERP_PAGINATION_LIMIT || "0");
68
66
  //#endregion ERP API Service
69
67
 
70
68
  /**
71
69
  * For how to define the intervals, see Bree's documentation: https://github.com/breejs/bree
72
70
  */
73
- const pollInterval = getEnvString("POLL_INTERVAL", "");
74
- this.fromErpInterval = getEnvString(
75
- "FROM_ERP_INTERVAL",
76
- pollInterval || "5 min"
77
- );
78
- this.toErpInterval = getEnvString("TO_ERP_INTERVAL", "5 min");
79
- this.retryLaborTicketsInterval = getEnvString(
80
- "RETRY_LABOR_TICKETS_INTERVAL",
81
- "30 min"
82
- );
83
- this.cacheExpirationCheckInterval = getEnvString(
84
- "CACHE_EXPIRATION_CHECK_INTERVAL",
85
- "5 min"
86
- );
71
+ this.fromErpInterval =
72
+ process.env.FROM_ERP_INTERVAL || process.env.POLL_INTERVAL || "5 min";
73
+ this.toErpInterval = process.env.TO_ERP_INTERVAL || "5 min";
74
+ this.retryLaborTicketsInterval =
75
+ process.env.RETRY_LABOR_TICKETS_INTERVAL || "30 min";
76
+ this.cacheExpirationCheckInterval =
77
+ process.env.CACHE_EXPIRATION_CHECK_INTERVAL || "5 min";
87
78
 
88
79
  /**
89
80
  * Cache TTL (in seconds)
90
81
  */
91
82
  const cacheTTLDef = 7 * 24 * 60 * 60; // 7 days
92
- this.cacheTTL = getEnvNumber("CACHE_TTL", cacheTTLDef);
83
+ this.cacheTTL = parseInt(process.env.CACHE_TTL || cacheTTLDef.toString());
93
84
 
94
85
  // Configure the logger with our settings
95
86
  configureLogger(this.logLevel, this.nodeEnv);
@@ -141,24 +132,20 @@ export class CoreConfiguration {
141
132
  */
142
133
  export const getSQLServerConfiguration = (): SQLServerConfiguration => {
143
134
  return {
144
- username: getEnvString("ERP_SQLSERVER_USERNAME", ""),
145
- password: getEnvString("ERP_SQLSERVER_PASSWORD", ""),
146
- database: getEnvString("ERP_SQLSERVER_DATABASE", ""),
147
- host: getEnvString(
148
- "ERP_SQLSERVER_HOST",
149
- getEnvString("ERP_SQLSERVER_SERVER", "")
150
- ),
151
- port: getEnvString("ERP_SQLSERVER_PORT", "1433"),
152
- connectionTimeout: getEnvString("ERP_SQLSERVER_CONNECTION_TIMEOUT", "30000"),
153
- requestTimeout: getEnvString("ERP_SQLSERVER_REQUEST_TIMEOUT", "60000"),
154
- poolMax: getEnvString("ERP_SQLSERVER_MAX", "10"),
155
- poolMin: getEnvString("ERP_SQLSERVER_MIN", "0"),
156
- idleTimeoutMillis: getEnvString(
157
- "ERP_SQLSERVER_IDLE_TIMEOUT_MMILLIS",
158
- "30000"
159
- ),
160
- encrypt: getEnvBoolean("ERP_SQLSERVER_ENCRYPT", false),
161
- trustServer: getEnvBoolean("ERP_SQLSERVER_TRUST_SERVER", false),
135
+ username: process.env.ERP_SQLSERVER_USERNAME || "",
136
+ password: process.env.ERP_SQLSERVER_PASSWORD || "",
137
+ database: process.env.ERP_SQLSERVER_DATABASE || "",
138
+ host:
139
+ process.env.ERP_SQLSERVER_HOST || process.env.ERP_SQLSERVER_SERVER || "",
140
+ port: process.env.ERP_SQLSERVER_PORT || "1433",
141
+ connectionTimeout: process.env.ERP_SQLSERVER_CONNECTION_TIMEOUT || "30000",
142
+ requestTimeout: process.env.ERP_SQLSERVER_REQUEST_TIMEOUT || "60000",
143
+ poolMax: process.env.ERP_SQLSERVER_MAX || "10",
144
+ poolMin: process.env.ERP_SQLSERVER_MIN || "0",
145
+ idleTimeoutMillis:
146
+ process.env.ERP_SQLSERVER_IDLE_TIMEOUT_MMILLIS || "30000",
147
+ encrypt: process.env.ERP_SQLSERVER_ENCRYPT === "true",
148
+ trustServer: process.env.ERP_SQLSERVER_TRUST_SERVER === "true",
162
149
  };
163
150
  };
164
151
 
@@ -184,11 +171,11 @@ export class ErpApiConnectionParams {
184
171
  */
185
172
  export const getErpApiConnectionParams = (): ErpApiConnectionParams => {
186
173
  return new ErpApiConnectionParams(
187
- getEnvString("ERP_API_URL", ""),
188
- getEnvString("ERP_API_CLIENT_ID", ""),
189
- getEnvString("ERP_API_CLIENT_SECRET", ""),
190
- getEnvString("ERP_API_ORGANIZATION_ID", ""),
191
- getEnvString("ERP_AUTH_BASE_URL", ""),
192
- getEnvNumber("ERP_API_RETRY_ATTEMPTS", 3)
174
+ process.env.ERP_API_URL || "",
175
+ process.env.ERP_API_CLIENT_ID || "",
176
+ process.env.ERP_API_CLIENT_SECRET || "",
177
+ process.env.ERP_API_ORGANIZATION_ID || "",
178
+ process.env.ERP_AUTH_BASE_URL || "",
179
+ parseInt(process.env.ERP_API_RETRY_ATTEMPTS || "3")
193
180
  );
194
181
  };
@@ -4,6 +4,8 @@ import path from "path";
4
4
  import { fileURLToPath } from "url";
5
5
  import { CoreConfiguration } from "./configuration-manager.js";
6
6
  import logger from "../reporting-service/logger.js";
7
+ import { createConnectorFromPath } from "../../utils/connector-factory.js";
8
+ import { NatsLaborTicketListener } from "./nats-labor-ticket-listener.js";
7
9
 
8
10
  type GracefulConstructor = new (config: { brees: Bree[] }) => {
9
11
  listen: () => void;
@@ -15,6 +17,14 @@ export const runDataSyncService = async (connectorPath: string) => {
15
17
  const config = CoreConfiguration.inst();
16
18
 
17
19
  try {
20
+ // Create connector instance
21
+ const connector = await createConnectorFromPath(connectorPath);
22
+
23
+ // Start NATS listener if enabled
24
+ if (process.env.NATS_ENABLED === "true") {
25
+ const natsListener = new NatsLaborTicketListener(connector);
26
+ await natsListener.start();
27
+ }
18
28
  // Find the SDK's node_modules directory and jobs path using ES module import
19
29
  const currentFileUrl = import.meta.url;
20
30
  const currentFilePath = fileURLToPath(currentFileUrl);
@@ -2,10 +2,9 @@ import "dotenv/config";
2
2
  import { HashedCacheManager } from "../../caching-service/hashed-cache-manager.js";
3
3
  import { SQLiteCoordinator } from "../../sqlite-service/index.js";
4
4
  import logger from "../../../services/reporting-service/logger.js";
5
- import { getEnvString } from "../../../utils/env.js";
6
5
 
7
6
  // Configure the logger with the correct log level
8
- logger.level = getEnvString("LOG_LEVEL", "info");
7
+ logger.level = process.env.LOG_LEVEL || "info";
9
8
 
10
9
  const main = async () => {
11
10
  const cacheManager = new HashedCacheManager();
@@ -1,12 +1,10 @@
1
1
  import "dotenv/config";
2
2
 
3
3
  import logger from "../../../services/reporting-service/logger.js";
4
- import { SQLiteCoordinator } from "../../sqlite-service/index.js";
5
4
  import { createConnectorFromPath } from "../../../utils/connector-factory.js";
6
- import { getEnvString } from "../../../utils/env.js";
7
5
 
8
6
  // Configure the logger with the correct log level
9
- logger.level = getEnvString("LOG_LEVEL", "info");
7
+ logger.level = process.env.LOG_LEVEL || "info";
10
8
 
11
9
  const main = async () => {
12
10
  try {
@@ -23,21 +21,17 @@ const main = async () => {
23
21
  // Create a new connector instance for this job
24
22
  const connector = await createConnectorFromPath(connectorPath);
25
23
 
26
- await SQLiteCoordinator.executeWithLock("from-erp", async () => {
27
- await connector.syncFromERP();
28
- });
24
+ // No lock needed: from-erp syncs ERP→MM which doesn't conflict with
25
+ // to-erp/NATS that sync MM→ERP. Removing the lock prevents blocking
26
+ // real-time NATS labor ticket requests during long sync operations.
27
+ await connector.syncFromERP();
29
28
 
30
29
  await connector.syncFromERPCompleted();
31
30
  logger.info("==========Completed from-erp job cycle==========");
32
31
  } catch (error) {
33
- const errorDetails = {
34
- message: error instanceof Error ? error.message : String(error),
35
- stack: error instanceof Error ? error.stack : undefined,
36
- name: error instanceof Error ? error.name : undefined,
37
- ...(error && typeof error === "object" ? error : {}), // Include all enumerable properties if it's an object
38
- };
32
+ // Logger now handles circular references and error objects safely
39
33
  logger.error('Worker for job "from-erp" had an error', {
40
- error: errorDetails,
34
+ error,
41
35
  });
42
36
 
43
37
  throw error; // Rethrow so Bree can handle it properly
@@ -1,11 +1,10 @@
1
1
  import "dotenv/config";
2
2
 
3
3
  import logger from "../../../services/reporting-service/logger.js";
4
- import { getEnvString } from "../../../utils/env.js";
5
4
  import { createConnectorFromPath } from "../../../utils/connector-factory.js";
6
5
 
7
6
  // Configure the logger with the correct log level
8
- logger.level = getEnvString("LOG_LEVEL", "info");
7
+ logger.level = process.env.LOG_LEVEL || "info";
9
8
 
10
9
  const main = async () => {
11
10
  try {
@@ -1,10 +1,9 @@
1
1
  import knex, { Knex } from "knex";
2
2
  import logger from "../../reporting-service/logger.js";
3
3
  import config from "../../../knexfile.js";
4
- import { getEnvString } from "../../../utils/env.js";
5
4
 
6
5
  // Configure the logger with the correct log level
7
- logger.level = getEnvString("LOG_LEVEL", "info");
6
+ logger.level = process.env.LOG_LEVEL || "info";
8
7
 
9
8
  // MLW TODO Consider the location of knexfile
10
9
  const db: Knex = knex(config.local);
@@ -1,11 +1,11 @@
1
1
  import "dotenv/config";
2
2
 
3
3
  import logger from "../../reporting-service/logger.js";
4
+ import { SQLiteCoordinator } from "../../sqlite-service/index.js";
4
5
  import { createConnectorFromPath } from "../../../utils/connector-factory.js";
5
- import { getEnvString } from "../../../utils/env.js";
6
6
 
7
7
  // Configure the logger with the correct log level
8
- logger.level = getEnvString("LOG_LEVEL", "info");
8
+ logger.level = process.env.LOG_LEVEL || "info";
9
9
 
10
10
  const main = async () => {
11
11
  try {
@@ -22,7 +22,16 @@ const main = async () => {
22
22
  // Create a new connector instance for this job
23
23
  const connector = await createConnectorFromPath(connectorPath);
24
24
 
25
- await connector.syncToERP();
25
+ // Only use lock if NATS is enabled (to prevent concurrent processing)
26
+ // Otherwise, no lock needed - just run directly
27
+ if (process.env.NATS_ENABLED === "true") {
28
+ await SQLiteCoordinator.executeWithLock("to-erp", async () => {
29
+ await connector.syncToERP();
30
+ });
31
+ } else {
32
+ await connector.syncToERP();
33
+ }
34
+
26
35
  await connector.syncToERPCompleted();
27
36
 
28
37
  logger.info("==========Completed to-erp job cycle==========");