@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.
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/data-sync-service/configuration-manager.d.ts.map +1 -1
- package/dist/services/data-sync-service/configuration-manager.js +30 -30
- package/dist/services/data-sync-service/configuration-manager.js.map +1 -1
- package/dist/services/data-sync-service/data-sync-service.d.ts.map +1 -1
- package/dist/services/data-sync-service/data-sync-service.js +9 -0
- package/dist/services/data-sync-service/data-sync-service.js.map +1 -1
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +1 -2
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -1
- package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/from-erp.js +7 -13
- package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +1 -2
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -1
- package/dist/services/data-sync-service/jobs/run-migrations.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/run-migrations.js +1 -2
- package/dist/services/data-sync-service/jobs/run-migrations.js.map +1 -1
- package/dist/services/data-sync-service/jobs/to-erp.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/to-erp.js +12 -3
- package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -1
- package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts +30 -0
- package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts.map +1 -0
- package/dist/services/data-sync-service/nats-labor-ticket-listener.js +290 -0
- package/dist/services/data-sync-service/nats-labor-ticket-listener.js.map +1 -0
- package/dist/services/mm-api-service/company-info.d.ts +13 -0
- package/dist/services/mm-api-service/company-info.d.ts.map +1 -0
- package/dist/services/mm-api-service/company-info.js +60 -0
- package/dist/services/mm-api-service/company-info.js.map +1 -0
- package/dist/services/mm-api-service/index.d.ts +7 -0
- package/dist/services/mm-api-service/index.d.ts.map +1 -1
- package/dist/services/mm-api-service/index.js +5 -0
- package/dist/services/mm-api-service/index.js.map +1 -1
- package/dist/services/mm-api-service/mm-api-service.d.ts +6 -0
- package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -1
- package/dist/services/mm-api-service/mm-api-service.js +15 -3
- package/dist/services/mm-api-service/mm-api-service.js.map +1 -1
- package/dist/services/mm-api-service/types/receive-types.d.ts +3 -0
- package/dist/services/mm-api-service/types/receive-types.d.ts.map +1 -1
- package/dist/services/mm-api-service/types/receive-types.js +1 -0
- package/dist/services/mm-api-service/types/receive-types.js.map +1 -1
- package/dist/services/mm-api-service/types/send-types.d.ts +17 -8
- package/dist/services/mm-api-service/types/send-types.d.ts.map +1 -1
- package/dist/services/mm-api-service/types/send-types.js +41 -17
- package/dist/services/mm-api-service/types/send-types.js.map +1 -1
- package/dist/services/nats-service/nats-service.d.ts +114 -0
- package/dist/services/nats-service/nats-service.d.ts.map +1 -0
- package/dist/services/nats-service/nats-service.js +244 -0
- package/dist/services/nats-service/nats-service.js.map +1 -0
- package/dist/services/nats-service/test-nats-subscriber.d.ts +6 -0
- package/dist/services/nats-service/test-nats-subscriber.d.ts.map +1 -0
- package/dist/services/nats-service/test-nats-subscriber.js +79 -0
- package/dist/services/nats-service/test-nats-subscriber.js.map +1 -0
- package/dist/services/reporting-service/logger.d.ts.map +1 -1
- package/dist/services/reporting-service/logger.js +31 -6
- package/dist/services/reporting-service/logger.js.map +1 -1
- package/dist/types/erp-connector.d.ts +1 -8
- package/dist/types/erp-connector.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/error-formatter.d.ts +19 -0
- package/dist/utils/error-formatter.d.ts.map +1 -0
- package/dist/utils/error-formatter.js +184 -0
- package/dist/utils/error-formatter.js.map +1 -0
- package/dist/utils/http-client.js +2 -4
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/index.d.ts +5 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/local-data-store/jobs-shared-data.d.ts +0 -2
- package/dist/utils/local-data-store/jobs-shared-data.d.ts.map +1 -1
- package/dist/utils/local-data-store/jobs-shared-data.js +0 -2
- package/dist/utils/local-data-store/jobs-shared-data.js.map +1 -1
- package/dist/utils/mm-labor-ticket-helpers.d.ts +4 -3
- package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -1
- package/dist/utils/mm-labor-ticket-helpers.js +7 -12
- package/dist/utils/mm-labor-ticket-helpers.js.map +1 -1
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +0 -15
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js +46 -180
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +1 -7
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.js +1 -7
- package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +2 -8
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.js +18 -27
- package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +1 -1
- package/dist/utils/time-utils.d.ts.map +1 -1
- package/dist/utils/time-utils.js +0 -7
- package/dist/utils/time-utils.js.map +1 -1
- package/package.json +5 -4
- package/src/index.ts +3 -0
- package/src/services/data-sync-service/configuration-manager.ts +37 -50
- package/src/services/data-sync-service/data-sync-service.ts +10 -0
- package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +1 -2
- package/src/services/data-sync-service/jobs/from-erp.ts +7 -13
- package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +1 -2
- package/src/services/data-sync-service/jobs/run-migrations.ts +1 -2
- package/src/services/data-sync-service/jobs/to-erp.ts +12 -3
- package/src/services/data-sync-service/nats-labor-ticket-listener.ts +342 -0
- package/src/services/mm-api-service/company-info.ts +87 -0
- package/src/services/mm-api-service/index.ts +8 -0
- package/src/services/mm-api-service/mm-api-service.ts +20 -3
- package/src/services/mm-api-service/types/receive-types.ts +1 -0
- package/src/services/mm-api-service/types/send-types.ts +40 -16
- package/src/services/nats-service/nats-service.ts +351 -0
- package/src/services/nats-service/test-nats-subscriber.ts +96 -0
- package/src/services/reporting-service/logger.ts +39 -7
- package/src/types/erp-connector.ts +1 -8
- package/src/types/index.ts +0 -8
- package/src/utils/error-formatter.ts +205 -0
- package/src/utils/http-client.ts +3 -4
- package/src/utils/index.ts +6 -5
- package/src/utils/local-data-store/jobs-shared-data.ts +0 -2
- package/src/utils/mm-labor-ticket-helpers.ts +8 -11
- package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +64 -220
- package/src/utils/standard-process-drivers/mm-entity-processor.ts +1 -7
- package/src/utils/standard-process-drivers/standard-process-drivers.ts +19 -33
- package/src/utils/time-utils.ts +0 -11
- package/dist/types/flattened-work-order.d.ts +0 -99
- package/dist/types/flattened-work-order.d.ts.map +0 -1
- package/dist/types/flattened-work-order.js +0 -2
- package/dist/types/flattened-work-order.js.map +0 -1
- package/dist/utils/env.d.ts +0 -8
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -58
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/erp-timezone-utils.d.ts +0 -20
- package/dist/utils/erp-timezone-utils.d.ts.map +0 -1
- package/dist/utils/erp-timezone-utils.js +0 -75
- package/dist/utils/erp-timezone-utils.js.map +0 -1
- package/src/types/flattened-work-order.ts +0 -108
- package/src/utils/env.ts +0 -75
- 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":"AAAA,OAAO,
|
|
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.
|
|
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 =
|
|
34
|
-
this.erpSystem =
|
|
35
|
-
this.nodeEnv =
|
|
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 =
|
|
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
|
-
|
|
48
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
this.
|
|
79
|
-
|
|
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 =
|
|
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:
|
|
145
|
-
password:
|
|
146
|
-
database:
|
|
147
|
-
host:
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
27
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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==========");
|