@machinemetrics/mm-erp-sdk 0.9.6-beta.2 → 0.9.7
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/README.md +105 -26
- package/dist/services/data-sync-service/configuration-manager.d.ts +0 -1
- package/dist/services/data-sync-service/configuration-manager.d.ts.map +1 -1
- package/dist/services/data-sync-service/configuration-manager.js +0 -3
- 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 +0 -1
- package/dist/services/data-sync-service/data-sync-service.js.map +1 -1
- package/package.json +1 -1
- package/src/services/data-sync-service/configuration-manager.ts +0 -3
- package/src/services/data-sync-service/data-sync-service.ts +0 -1
package/README.md
CHANGED
|
@@ -11,12 +11,18 @@ This SDK provides the core infrastructure for:
|
|
|
11
11
|
- **MM API Integration**: Client for interacting with MachineMetrics APIs
|
|
12
12
|
- **Utility Functions**: Common data transformation and HTTP utilities
|
|
13
13
|
|
|
14
|
+
## Documentation
|
|
15
|
+
|
|
16
|
+
- **Building a new connector?** Start with the [MachineMetrics ERP connector guide](https://developers.machinemetrics.com/docs/erp-connector/) on the developer hub — it orients you across scaffolding, implementation, and deployment.
|
|
17
|
+
- **SDK API detail (this repo):** [`CONNECTOR_SDK_UTILITIES.md`](./CONNECTOR_SDK_UTILITIES.md) for the SDK classes/services/utilities, and [`MM_ENTITY_KEYS_REFERENCE.md`](./MM_ENTITY_KEYS_REFERENCE.md) for entity keys and referential integrity.
|
|
18
|
+
- **Connector implementation workflow:** the `generic-erp-connector` template's `CONNECTOR-GUIDE.md` (how a generated project wires the SDK together).
|
|
19
|
+
|
|
14
20
|
## Quick Start
|
|
15
21
|
|
|
16
22
|
### 1. Install the SDK
|
|
17
23
|
|
|
18
24
|
```bash
|
|
19
|
-
npm install mm-erp-sdk
|
|
25
|
+
npm install @machinemetrics/mm-erp-sdk
|
|
20
26
|
```
|
|
21
27
|
|
|
22
28
|
### 2. Implement an ERP Connector
|
|
@@ -31,7 +37,7 @@ import {
|
|
|
31
37
|
MMReceiveLaborTicket,
|
|
32
38
|
ApplicationInitializer,
|
|
33
39
|
runDataSyncService,
|
|
34
|
-
} from "mm-erp-sdk";
|
|
40
|
+
} from "@machinemetrics/mm-erp-sdk";
|
|
35
41
|
|
|
36
42
|
export default class MyERPConnector
|
|
37
43
|
implements IERPConnector, IERPLaborTicketHandler
|
|
@@ -100,13 +106,13 @@ The SDK includes automated jobs that run on configurable intervals:
|
|
|
100
106
|
- **retry-failed-labor-tickets**: Retries failed labor ticket operations
|
|
101
107
|
- **clean-up-expired-cache**: Maintains cache hygiene
|
|
102
108
|
|
|
103
|
-
Configure job intervals via environment variables:
|
|
109
|
+
Configure job intervals via environment variables (Bree-compatible strings, e.g. `"5 min"`, `"1h"`):
|
|
104
110
|
|
|
105
111
|
```bash
|
|
106
|
-
FROM_ERP_INTERVAL="
|
|
107
|
-
TO_ERP_INTERVAL="
|
|
108
|
-
RETRY_LABOR_TICKETS_INTERVAL="
|
|
109
|
-
CACHE_EXPIRATION_CHECK_INTERVAL="
|
|
112
|
+
FROM_ERP_INTERVAL="5 min"
|
|
113
|
+
TO_ERP_INTERVAL="5 min"
|
|
114
|
+
RETRY_LABOR_TICKETS_INTERVAL="30 min"
|
|
115
|
+
CACHE_EXPIRATION_CHECK_INTERVAL="60 min"
|
|
110
116
|
```
|
|
111
117
|
|
|
112
118
|
### Execution model
|
|
@@ -126,12 +132,14 @@ See `CONNECTOR_SDK_UTILITIES.md` for the helper APIs, and the template `CONNECTO
|
|
|
126
132
|
|
|
127
133
|
### Persistent Storage
|
|
128
134
|
|
|
129
|
-
|
|
135
|
+
The SDK persists durable state — the labor sync ledger, the dedup/batch cache, and SDK runtime state — in a SQLite database at the path given by `SQLITE_DB_PATH` (default `./local.sqlite3`):
|
|
130
136
|
|
|
131
137
|
```bash
|
|
132
138
|
SQLITE_DB_PATH=/app/data/local.sqlite3
|
|
133
139
|
```
|
|
134
140
|
|
|
141
|
+
This file must survive process/container restarts for the sync ledger and dedup cache to remain correct across cycles. How that path is made durable (e.g. a mounted volume or backed-up disk) is a deployment concern owned by your connector's deployment setup, not by the SDK.
|
|
142
|
+
|
|
135
143
|
## Timesheet Export
|
|
136
144
|
|
|
137
145
|
The SDK provides employee clock in/out export from MM to the ERP, separate from shop-floor labor tickets:
|
|
@@ -143,30 +151,99 @@ The SDK provides employee clock in/out export from MM to the ERP, separate from
|
|
|
143
151
|
|
|
144
152
|
Machine-to-ERP-resource mapping is sourced from **MES machine settings** (`GET /mes/settings/machine-settings`):
|
|
145
153
|
|
|
146
|
-
- `MMApiClient.fetchMappedErpResourcesForCompany()` — machines mapped to ERP labor resources (`machineRef` + `laborResourceId`).
|
|
154
|
+
- `MMApiClient.fetchMappedErpResourcesForCompany()` — machines mapped to ERP labor resources (`machineRef` + `laborResourceId`), sourced from MES machine settings.
|
|
147
155
|
- `MMApiClient.fetchMesSchedulableErpResourceIds()` / `getMesLaborImportResourceIds()` — schedulable and labor-import resource-id allowlists.
|
|
148
156
|
|
|
149
|
-
|
|
157
|
+
See `CONNECTOR_SDK_UTILITIES.md` for MES machine-settings helpers and `MM_ENTITY_KEYS_REFERENCE.md` for entity keys.
|
|
150
158
|
|
|
151
159
|
## Environment Configuration
|
|
152
160
|
|
|
153
|
-
|
|
161
|
+
These are the environment variables the SDK reads (via `CoreConfiguration`, `getSQLServerConfiguration`, `getErpApiConnectionParams`, and the SQLite/knex setup). Names and defaults below match the SDK source; defaults are shown where one exists.
|
|
162
|
+
|
|
163
|
+
### Required
|
|
154
164
|
|
|
155
165
|
```bash
|
|
156
|
-
#
|
|
157
|
-
ERP_SYSTEM="job-boss"
|
|
158
|
-
MM_MAPPING_SERVICE_URL="https://erp-api.svc.machinemetrics.com"
|
|
166
|
+
# MM REST API base URL (e.g. https://api.machinemetrics.com). The SDK throws on startup if this is unset.
|
|
159
167
|
MM_MAPPING_AUTH_SERVICE_URL="https://api.machinemetrics.com"
|
|
160
|
-
MM_API_AUTH_TOKEN="your-auth-token"
|
|
161
168
|
|
|
162
|
-
#
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
169
|
+
# MM company auth token. ApplicationInitializer.initialize() fetches /accounts/current with this
|
|
170
|
+
# bearer token. If unset, startup retries every 10s (up to 36000 attempts) and initialization
|
|
171
|
+
# never completes — set this before calling initialize().
|
|
172
|
+
MM_MAPPING_SERVICE_TOKEN="your-company-auth-token"
|
|
173
|
+
|
|
174
|
+
# MM ERP mapping service REST API URL (e.g. https://erp-api.svc.machinemetrics.com). Required for
|
|
175
|
+
# entity sync, labor-ticket export, checkpoints, and other /erp/v1/* calls via MMApiClient.
|
|
176
|
+
MM_MAPPING_SERVICE_URL="https://erp-api.svc.machinemetrics.com"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### MachineMetrics API
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
MM_API_TIMEOUT_SEC="30" # MM API request timeout, seconds (default: 30)
|
|
183
|
+
MM_API_RETRY_ATTEMPTS="0" # MM API retry attempts (default: 0)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### General
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
NODE_ENV="production" # Runtime environment (default: "development")
|
|
190
|
+
LOG_LEVEL="info" # Log level (default: "info")
|
|
191
|
+
SDK_LOG_PREFIX="SDK:" # Prefix applied to SDK log lines (default: "SDK:")
|
|
192
|
+
NATS_ENABLED="false" # When "true", starts the real-time NATS labor-ticket listener alongside Bree jobs
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Job intervals
|
|
196
|
+
|
|
197
|
+
Interval strings accept any [Bree](https://github.com/breejs/bree)-compatible duration (e.g. `"5 min"`, `"1h"`).
|
|
167
198
|
|
|
168
|
-
|
|
169
|
-
|
|
199
|
+
```bash
|
|
200
|
+
FROM_ERP_INTERVAL="5 min" # from-ERP sync interval (default: "5 min", or POLL_INTERVAL if set)
|
|
201
|
+
TO_ERP_INTERVAL="5 min" # to-ERP sync interval (default: "5 min")
|
|
202
|
+
RETRY_LABOR_TICKETS_INTERVAL="30 min" # retry-failed-labor-tickets interval (default: "30 min")
|
|
203
|
+
CACHE_EXPIRATION_CHECK_INTERVAL="60 min" # expired-cache cleanup interval (default: "60 min")
|
|
204
|
+
POLL_INTERVAL="5 min" # fallback default for FROM_ERP_INTERVAL (default: "")
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Caching & local storage
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
CACHE_TTL="604800" # Dedup cache TTL, seconds (default: 604800 = 7 days)
|
|
211
|
+
SQLITE_DB_PATH="/app/data/local.sqlite3" # SQLite file for ledger/cache/runtime state (default: "./local.sqlite3")
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### ERP API (generic REST/GraphQL)
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
ERP_PAGINATION_LIMIT="0" # Default pagination limit for ERP API (default: 0)
|
|
218
|
+
ERP_API_TIMEOUT_SEC="30" # ERP API request timeout, seconds (default: 30)
|
|
219
|
+
ERP_API_RETRY_ATTEMPTS="3" # ERP API retry attempts (default: 3)
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Connectors using `getErpApiConnectionParams()` also read:
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
ERP_API_URL="https://erp.example.com"
|
|
226
|
+
ERP_API_CLIENT_ID="client-id"
|
|
227
|
+
ERP_API_CLIENT_SECRET="client-secret"
|
|
228
|
+
ERP_API_ORGANIZATION_ID="org-id"
|
|
229
|
+
ERP_AUTH_BASE_URL="https://auth.example.com"
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### SQL Server ERP (when using `SqlServerService` / `getSQLServerConfiguration()`)
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
ERP_SQLSERVER_USERNAME="username"
|
|
236
|
+
ERP_SQLSERVER_PASSWORD="password"
|
|
237
|
+
ERP_SQLSERVER_DATABASE="your-db"
|
|
238
|
+
ERP_SQLSERVER_HOST="localhost" # alias: ERP_SQLSERVER_SERVER
|
|
239
|
+
ERP_SQLSERVER_PORT="1433" # default: 1433
|
|
240
|
+
ERP_SQLSERVER_CONNECTION_TIMEOUT="30000" # default: 30000 (ms)
|
|
241
|
+
ERP_SQLSERVER_REQUEST_TIMEOUT="60000" # default: 60000 (ms)
|
|
242
|
+
ERP_SQLSERVER_MAX="10" # connection pool max (default: 10)
|
|
243
|
+
ERP_SQLSERVER_MIN="0" # connection pool min (default: 0)
|
|
244
|
+
ERP_SQLSERVER_IDLE_TIMEOUT_MMILLIS="30000" # pool idle timeout, ms (env name spelled as in the SDK; default: 30000)
|
|
245
|
+
ERP_SQLSERVER_ENCRYPT="false" # default: false
|
|
246
|
+
ERP_SQLSERVER_TRUST_SERVER="false" # default: false
|
|
170
247
|
```
|
|
171
248
|
|
|
172
249
|
## Logging Reliability
|
|
@@ -178,14 +255,15 @@ LOG_LEVEL="info"
|
|
|
178
255
|
|
|
179
256
|
### Core Interfaces
|
|
180
257
|
|
|
181
|
-
- `IERPConnector`: Main connector interface (`syncFromERP`, `syncToERP`, lifecycle hooks)
|
|
258
|
+
- `IERPConnector`: Main connector interface (`syncFromERP`, `syncToERP`, lifecycle hooks). The `type` getter is the ERP system identifier passed to MM API `system` parameters and `StandardProcessDrivers` as `connectorType`.
|
|
182
259
|
- `IERPLaborTicketHandler`: Create/update labor tickets in the ERP (`MMReceiveLaborTicket`)
|
|
183
260
|
- `IERPTimesheetHandler`: Process employee clock in/out rows in the ERP (`MMReceiveTimesheet`)
|
|
184
261
|
|
|
185
262
|
### Utilities
|
|
186
263
|
|
|
187
|
-
- `ApplicationInitializer`: SDK initialization
|
|
264
|
+
- `ApplicationInitializer`: SDK initialization (configuration, migrations, company info)
|
|
188
265
|
- `runDataSyncService`: Start automated sync jobs
|
|
266
|
+
- `getCachedCompanyInfo()` / `getCachedCompanyId()` / `getCachedCompanyLocationRef()` / `getCachedTimezoneName()`: read company info persisted at startup
|
|
189
267
|
- `StandardProcessDrivers`: Common sync operations, including:
|
|
190
268
|
- `syncLaborTicketsToERP(connectorType, handler, { onlyClosed? })`
|
|
191
269
|
- `syncTimesheetsToERP(connectorType, handler)`
|
|
@@ -195,8 +273,9 @@ LOG_LEVEL="info"
|
|
|
195
273
|
|
|
196
274
|
### Services
|
|
197
275
|
|
|
198
|
-
- `SqlServerService`: SQL Server integration
|
|
199
|
-
- `
|
|
276
|
+
- `SqlServerService` / `SqlServerHelper`: SQL Server ERP integration
|
|
277
|
+
- `PsqlService`: PSQL / Pervasive (ODBC) ERP integration, with `formatPsqlDate`, `formatPsqlTime`, `combinePsqlDateTime`, `isPsqlDateEmpty`, `cleanPsqlCharField` helpers
|
|
278
|
+
- `RestAPIService` / `GraphQLService`: ERP REST / GraphQL API clients
|
|
200
279
|
- `MMApiClient`: MachineMetrics API client (includes `fetchMappedErpResourcesForCompany`, `fetchMesSchedulableErpResourceIds`, `fetchTimesheetUpdates`)
|
|
201
280
|
|
|
202
281
|
For SDK helper, type, and entity-key detail, see `CONNECTOR_SDK_UTILITIES.md` and `MM_ENTITY_KEYS_REFERENCE.md`. For the connector implementation workflow, see the template `CONNECTOR-GUIDE.md`.
|
|
@@ -3,7 +3,6 @@ import { SQLServerConfiguration } from "../sql-server-erp-service/configuration.
|
|
|
3
3
|
export declare class CoreConfiguration {
|
|
4
4
|
private static instance;
|
|
5
5
|
readonly logLevel: string;
|
|
6
|
-
readonly erpSystem: string;
|
|
7
6
|
readonly nodeEnv: string;
|
|
8
7
|
readonly mmERPSvcApiBaseUrl: string;
|
|
9
8
|
readonly mmApiBaseUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration-manager.d.ts","sourceRoot":"","sources":["../../../src/services/data-sync-service/configuration-manager.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAiBpF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAG3C,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,
|
|
1
|
+
{"version":3,"file":"configuration-manager.d.ts","sourceRoot":"","sources":["../../../src/services/data-sync-service/configuration-manager.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAiBpF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAG3C,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAGhC,SAAgB,kBAAkB,EAAE,MAAM,CAAC;IAC3C,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,kBAAkB,EAAE,MAAM,CAAC;IAC3C,SAAgB,mBAAmB,EAAE,MAAM,CAAC;IAG5C,SAAgB,QAAQ,EAAE,MAAM,CAAC;IAGjC,SAAgB,iBAAiB,EAAE,MAAM,CAAC;IAC1C,SAAgB,oBAAoB,EAAE,MAAM,CAAC;IAC7C,SAAgB,mBAAmB,EAAE,MAAM,CAAC;IAG5C,SAAgB,eAAe,EAAE,MAAM,CAAC;IACxC,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,yBAAyB,EAAE,MAAM,CAAC;IAClD,SAAgB,4BAA4B,EAAE,MAAM,CAAC;IAErD,OAAO;WAmFO,IAAI,IAAI,iBAAiB;IAOvC;;;OAGG;IACI,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CA8BlD;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,QAAO,sBAqB5C,CAAC;AAEF;;;GAGG;AACH,qBAAa,sBAAsB;aAEf,SAAS,EAAE,MAAM;aACjB,cAAc,EAAE,MAAM;aACtB,kBAAkB,EAAE,MAAM;aAC1B,oBAAoB,EAAE,MAAM;aAC5B,cAAc,EAAE,MAAM;aACtB,aAAa,EAAE,MAAM;gBALrB,SAAS,EAAE,MAAM,EAAE,kBAAkB;IACrC,cAAc,EAAE,MAAM,EAAE,qCAAqC;IAC7D,kBAAkB,EAAE,MAAM,EAAE,yCAAyC;IACrE,oBAAoB,EAAE,MAAM,EAAE,2BAA2B;IACzD,cAAc,EAAE,MAAM,EAAE,gBAAgB;IACxC,aAAa,GAAE,MAAU;CAE5C;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,QAAO,sBAS5C,CAAC"}
|
|
@@ -16,7 +16,6 @@ export class CoreConfiguration {
|
|
|
16
16
|
static instance;
|
|
17
17
|
// General Configuration
|
|
18
18
|
logLevel;
|
|
19
|
-
erpSystem;
|
|
20
19
|
nodeEnv;
|
|
21
20
|
// MM API (aka "Mapping") Service
|
|
22
21
|
mmERPSvcApiBaseUrl;
|
|
@@ -37,7 +36,6 @@ export class CoreConfiguration {
|
|
|
37
36
|
cacheExpirationCheckInterval;
|
|
38
37
|
constructor() {
|
|
39
38
|
this.logLevel = getEnvString("LOG_LEVEL", "info");
|
|
40
|
-
this.erpSystem = getEnvString("ERP_SYSTEM", "template");
|
|
41
39
|
this.nodeEnv = getEnvString("NODE_ENV", "development");
|
|
42
40
|
//#region MM API (aka "Mapping") Service
|
|
43
41
|
/**
|
|
@@ -118,7 +116,6 @@ export class CoreConfiguration {
|
|
|
118
116
|
};
|
|
119
117
|
return {
|
|
120
118
|
logLevel: this.logLevel,
|
|
121
|
-
erpSystem: this.erpSystem,
|
|
122
119
|
nodeEnv: this.nodeEnv,
|
|
123
120
|
mmERPSvcApiBaseUrl: this.mmERPSvcApiBaseUrl,
|
|
124
121
|
mmApiBaseUrl: this.mmApiBaseUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration-manager.js","sourceRoot":"","sources":["../../../src/services/data-sync-service/configuration-manager.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE/E;;;GAGG;AACH,SAAS,mBAAmB;IAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,2HAA2H,CAC5H,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAC,QAAQ,CAAoB;IAE3C,wBAAwB;IACR,QAAQ,CAAS;IACjB,
|
|
1
|
+
{"version":3,"file":"configuration-manager.js","sourceRoot":"","sources":["../../../src/services/data-sync-service/configuration-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-sync-service.d.ts","sourceRoot":"","sources":["../../../src/services/data-sync-service/data-sync-service.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,kBAAkB,GAAU,eAAe,MAAM,
|
|
1
|
+
{"version":3,"file":"data-sync-service.d.ts","sourceRoot":"","sources":["../../../src/services/data-sync-service/data-sync-service.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,kBAAkB,GAAU,eAAe,MAAM,kBA0G7D,CAAC"}
|
|
@@ -35,7 +35,6 @@ export const runDataSyncService = async (connectorPath) => {
|
|
|
35
35
|
MM_MAPPING_SERVICE_URL: process.env.MM_MAPPING_SERVICE_URL,
|
|
36
36
|
MM_MAPPING_AUTH_SERVICE_URL: process.env.MM_MAPPING_AUTH_SERVICE_URL,
|
|
37
37
|
MM_MAPPING_SERVICE_TOKEN: process.env.MM_MAPPING_SERVICE_TOKEN,
|
|
38
|
-
ERP_SYSTEM: process.env.ERP_SYSTEM,
|
|
39
38
|
LOG_LEVEL: process.env.LOG_LEVEL,
|
|
40
39
|
NODE_ENV: process.env.NODE_ENV,
|
|
41
40
|
RETRY_ATTEMPTS: process.env.RETRY_ATTEMPTS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-sync-service.js","sourceRoot":"","sources":["../../../src/services/data-sync-service/data-sync-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAa,MAAM,MAAM,CAAC;AACjC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAM1E,MAAM,aAAa,GAAG,QAA0C,CAAC;AAEjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,aAAqB,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAExC,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAE/D,iCAAiC;QACjC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAC5D,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;QACD,6EAA6E;QAC7E,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACvC,MAAM,eAAe,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;QAEtD,8DAA8D;QAC9D,8CAA8C;QAC9C,6DAA6D;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEhD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;YACpB,IAAI,EAAE,QAAQ;YACd,MAAM;YACN,MAAM,EAAE;gBACN,GAAG,EAAE;oBACH,cAAc,EAAE,aAAa;oBAC7B,kDAAkD;oBAClD,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;oBAC1D,2BAA2B,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;oBACpE,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;oBAC9D,
|
|
1
|
+
{"version":3,"file":"data-sync-service.js","sourceRoot":"","sources":["../../../src/services/data-sync-service/data-sync-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -22,7 +22,6 @@ export class CoreConfiguration {
|
|
|
22
22
|
|
|
23
23
|
// General Configuration
|
|
24
24
|
public readonly logLevel: string;
|
|
25
|
-
public readonly erpSystem: string;
|
|
26
25
|
public readonly nodeEnv: string;
|
|
27
26
|
|
|
28
27
|
// MM API (aka "Mapping") Service
|
|
@@ -48,7 +47,6 @@ export class CoreConfiguration {
|
|
|
48
47
|
|
|
49
48
|
private constructor() {
|
|
50
49
|
this.logLevel = getEnvString("LOG_LEVEL", "info");
|
|
51
|
-
this.erpSystem = getEnvString("ERP_SYSTEM", "template");
|
|
52
50
|
this.nodeEnv = getEnvString("NODE_ENV", "development");
|
|
53
51
|
|
|
54
52
|
//#region MM API (aka "Mapping") Service
|
|
@@ -155,7 +153,6 @@ export class CoreConfiguration {
|
|
|
155
153
|
|
|
156
154
|
return {
|
|
157
155
|
logLevel: this.logLevel,
|
|
158
|
-
erpSystem: this.erpSystem,
|
|
159
156
|
nodeEnv: this.nodeEnv,
|
|
160
157
|
mmERPSvcApiBaseUrl: this.mmERPSvcApiBaseUrl,
|
|
161
158
|
mmApiBaseUrl: this.mmApiBaseUrl,
|
|
@@ -45,7 +45,6 @@ export const runDataSyncService = async (connectorPath: string) => {
|
|
|
45
45
|
MM_MAPPING_SERVICE_URL: process.env.MM_MAPPING_SERVICE_URL,
|
|
46
46
|
MM_MAPPING_AUTH_SERVICE_URL: process.env.MM_MAPPING_AUTH_SERVICE_URL,
|
|
47
47
|
MM_MAPPING_SERVICE_TOKEN: process.env.MM_MAPPING_SERVICE_TOKEN,
|
|
48
|
-
ERP_SYSTEM: process.env.ERP_SYSTEM,
|
|
49
48
|
LOG_LEVEL: process.env.LOG_LEVEL,
|
|
50
49
|
NODE_ENV: process.env.NODE_ENV,
|
|
51
50
|
RETRY_ATTEMPTS: process.env.RETRY_ATTEMPTS,
|