@machinemetrics/mm-erp-sdk 0.9.4 → 0.9.6-beta.0
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 +54 -43
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/migrations/20260617160000_create_sdk_runtime_state_table.d.ts +4 -0
- package/dist/migrations/20260617160000_create_sdk_runtime_state_table.d.ts.map +1 -0
- package/dist/migrations/20260617160000_create_sdk_runtime_state_table.js +11 -0
- package/dist/migrations/20260617160000_create_sdk_runtime_state_table.js.map +1 -0
- package/dist/services/mm-api-service/company-info.d.ts.map +1 -1
- package/dist/services/mm-api-service/company-info.js +4 -5
- package/dist/services/mm-api-service/company-info.js.map +1 -1
- package/dist/services/mm-api-service/index.d.ts +3 -3
- package/dist/services/mm-api-service/index.d.ts.map +1 -1
- package/dist/services/mm-api-service/index.js +1 -1
- package/dist/services/mm-api-service/index.js.map +1 -1
- package/dist/services/mm-api-service/mes-machine-settings.d.ts +46 -0
- package/dist/services/mm-api-service/mes-machine-settings.d.ts.map +1 -0
- package/dist/services/mm-api-service/mes-machine-settings.js +124 -0
- package/dist/services/mm-api-service/mes-machine-settings.js.map +1 -0
- package/dist/services/mm-api-service/mm-api-service.d.ts +28 -13
- package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -1
- package/dist/services/mm-api-service/mm-api-service.js +43 -47
- package/dist/services/mm-api-service/mm-api-service.js.map +1 -1
- package/dist/services/mm-api-service/token-mgr.d.ts +1 -1
- package/dist/services/mm-api-service/token-mgr.js +1 -1
- package/dist/services/mm-api-service/types/mm-response-interfaces.d.ts +4 -16
- package/dist/services/mm-api-service/types/mm-response-interfaces.d.ts.map +1 -1
- package/dist/services/mm-api-service/types/mm-response-interfaces.js.map +1 -1
- package/dist/services/mm-api-service/types/receive-types.d.ts +19 -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 +22 -2
- package/dist/services/mm-api-service/types/receive-types.js.map +1 -1
- package/dist/types/erp-connector.d.ts +8 -2
- package/dist/types/erp-connector.d.ts.map +1 -1
- package/dist/utils/application-initializer.js +1 -1
- package/dist/utils/application-initializer.js.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/labor-import-from-erp.d.ts +68 -0
- package/dist/utils/labor-import-from-erp.d.ts.map +1 -0
- package/dist/utils/labor-import-from-erp.js +194 -0
- package/dist/utils/labor-import-from-erp.js.map +1 -0
- package/dist/utils/local-data-store/database-lock.d.ts.map +1 -1
- package/dist/utils/local-data-store/database-lock.js +32 -41
- package/dist/utils/local-data-store/database-lock.js.map +1 -1
- package/dist/utils/local-data-store/jobs-shared-data.d.ts +1 -11
- package/dist/utils/local-data-store/jobs-shared-data.d.ts.map +1 -1
- package/dist/utils/local-data-store/jobs-shared-data.js +13 -71
- package/dist/utils/local-data-store/jobs-shared-data.js.map +1 -1
- package/dist/utils/local-data-store/sdk-runtime-state-db.d.ts +15 -0
- package/dist/utils/local-data-store/sdk-runtime-state-db.d.ts.map +1 -0
- package/dist/utils/local-data-store/sdk-runtime-state-db.js +120 -0
- package/dist/utils/local-data-store/sdk-runtime-state-db.js.map +1 -0
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +4 -2
- 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 +17 -15
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +1 -1
- package/dist/utils/standard-process-drivers/labor-ticket-normalization.d.ts +6 -0
- package/dist/utils/standard-process-drivers/labor-ticket-normalization.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/labor-ticket-normalization.js +12 -0
- package/dist/utils/standard-process-drivers/labor-ticket-normalization.js.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +11 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.js +42 -4
- package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +22 -2
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.js +84 -0
- package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +1 -1
- package/dist/utils/standard-process-drivers/timesheet-erp-synchronizer.d.ts +12 -0
- package/dist/utils/standard-process-drivers/timesheet-erp-synchronizer.d.ts.map +1 -0
- package/dist/utils/standard-process-drivers/timesheet-erp-synchronizer.js +79 -0
- package/dist/utils/standard-process-drivers/timesheet-erp-synchronizer.js.map +1 -0
- package/package.json +12 -3
- package/src/index.ts +22 -1
- package/src/migrations/20260617160000_create_sdk_runtime_state_table.ts +13 -0
- package/src/services/mm-api-service/company-info.ts +4 -5
- package/src/services/mm-api-service/index.ts +5 -3
- package/src/services/mm-api-service/mes-machine-settings.test.ts +174 -0
- package/src/services/mm-api-service/mes-machine-settings.ts +169 -0
- package/src/services/mm-api-service/mm-api-service.ts +58 -60
- package/src/services/mm-api-service/token-mgr.ts +1 -1
- package/src/services/mm-api-service/types/mm-response-interfaces.ts +4 -17
- package/src/services/mm-api-service/types/receive-types.ts +22 -3
- package/src/types/erp-connector.ts +12 -2
- package/src/utils/application-initializer.ts +1 -1
- package/src/utils/index.ts +19 -0
- package/src/utils/labor-import-from-erp.test.ts +116 -0
- package/src/utils/labor-import-from-erp.ts +310 -0
- package/src/utils/local-data-store/database-lock.ts +38 -47
- package/src/utils/local-data-store/jobs-shared-data.ts +16 -76
- package/src/utils/local-data-store/sdk-runtime-state-db.ts +141 -0
- package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +20 -14
- package/src/utils/standard-process-drivers/labor-ticket-normalization.ts +15 -0
- package/src/utils/standard-process-drivers/mm-entity-processor.ts +61 -8
- package/src/utils/standard-process-drivers/standard-process-drivers.ts +134 -1
- package/src/utils/standard-process-drivers/timesheet-erp-synchronizer.ts +102 -0
- package/dist/utils/resource-group.d.ts +0 -11
- package/dist/utils/resource-group.d.ts.map +0 -1
- package/dist/utils/resource-group.js +0 -71
- package/dist/utils/resource-group.js.map +0 -1
- package/src/utils/resource-group.ts +0 -105
package/README.md
CHANGED
|
@@ -22,6 +22,8 @@ npm install mm-erp-sdk
|
|
|
22
22
|
### 2. Implement an ERP Connector
|
|
23
23
|
|
|
24
24
|
```typescript
|
|
25
|
+
import path from "path";
|
|
26
|
+
import { fileURLToPath } from "url";
|
|
25
27
|
import {
|
|
26
28
|
IERPConnector,
|
|
27
29
|
IERPLaborTicketHandler,
|
|
@@ -41,7 +43,13 @@ export default class MyERPConnector
|
|
|
41
43
|
async startUp(): Promise<void> {
|
|
42
44
|
try {
|
|
43
45
|
await ApplicationInitializer.initialize();
|
|
44
|
-
|
|
46
|
+
// Bree workers re-import the built connector module from disk each cycle,
|
|
47
|
+
// so runDataSyncService needs the path to this connector's compiled JS.
|
|
48
|
+
const connectorPath = path.resolve(
|
|
49
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
50
|
+
"my-erp-connector.js"
|
|
51
|
+
);
|
|
52
|
+
await runDataSyncService(connectorPath);
|
|
45
53
|
} catch (error) {
|
|
46
54
|
console.error("Startup failed:", error);
|
|
47
55
|
process.exitCode = 1;
|
|
@@ -81,12 +89,14 @@ const connector = new MyERPConnector();
|
|
|
81
89
|
await connector.startUp();
|
|
82
90
|
```
|
|
83
91
|
|
|
92
|
+
> `runDataSyncService(connectorPath)` requires a path to the connector's **compiled JS** module (not the `.ts` source). See the template `CONNECTOR-GUIDE.md` for the build/runtime path resolution details.
|
|
93
|
+
|
|
84
94
|
## Data Sync Jobs
|
|
85
95
|
|
|
86
96
|
The SDK includes automated jobs that run on configurable intervals:
|
|
87
97
|
|
|
88
98
|
- **from-erp**: Syncs data from ERP to MachineMetrics
|
|
89
|
-
- **to-erp**: Syncs labor tickets from MachineMetrics to ERP
|
|
99
|
+
- **to-erp**: Syncs labor tickets and employee timesheets from MachineMetrics to ERP
|
|
90
100
|
- **retry-failed-labor-tickets**: Retries failed labor ticket operations
|
|
91
101
|
- **clean-up-expired-cache**: Maintains cache hygiene
|
|
92
102
|
|
|
@@ -99,44 +109,44 @@ RETRY_LABOR_TICKETS_INTERVAL="10m"
|
|
|
99
109
|
CACHE_EXPIRATION_CHECK_INTERVAL="1h"
|
|
100
110
|
```
|
|
101
111
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
The SDK automatically prevents circular writes when implementing bidirectional labor ticket synchronization:
|
|
105
|
-
|
|
106
|
-
### Automatic Deduplication
|
|
107
|
-
|
|
108
|
-
When you write labor tickets to MachineMetrics using `MMApiClient.sendLaborTicketsToMM()`, the SDK **automatically marks them in a deduplication cache**. This prevents the `to-erp` job from processing them again and creating circular writes back to the ERP.
|
|
112
|
+
### Execution model
|
|
109
113
|
|
|
110
|
-
|
|
111
|
-
// In your from-erp job - just write normally
|
|
112
|
-
const mmApiClient = new MMApiClient();
|
|
113
|
-
await mmApiClient.sendLaborTicketsToMM(laborTickets);
|
|
114
|
-
// ↑ SDK automatically marks these in dedup cache
|
|
115
|
-
```
|
|
114
|
+
Jobs are scheduled with **Bree**. Each job cycle runs as an **independent worker process** that constructs a **fresh connector instance** — so in-memory state does **not** persist across cycles, and cycles are not guaranteed to run serially (labor tickets may be processed concurrently within a cycle). Persist durable state in the SDK's SQLite stores or MM checkpoints, not in instance/module memory. See `CONNECTOR_SDK_UTILITIES.md` (`runDataSyncService`) for the full contract.
|
|
116
115
|
|
|
117
|
-
|
|
116
|
+
## Labor Ticket Synchronization
|
|
118
117
|
|
|
119
|
-
|
|
120
|
-
2. **Auto-marking**: SDK marks the business signature in dedup cache (24h TTL)
|
|
121
|
-
3. **to-erp job runs**: Fetches updated tickets from MM
|
|
122
|
-
4. **Dedup check**: Checks cache by business signature
|
|
123
|
-
- **Cache hit**: Skips (no circular write)
|
|
124
|
-
- **Cache miss**: Processes normally (user edited the ticket)
|
|
118
|
+
The SDK provides bidirectional labor ticket synchronization with built-in protection against circular writes (ERP → MM → ERP):
|
|
125
119
|
|
|
126
|
-
|
|
120
|
+
- **Labor sync ledger** (SQLite-backed): records a per-ticket business signature so the `to-erp` export skips tickets whose business-relevant content is unchanged since they were last processed. Tickets imported from the ERP before MM assigns a `laborTicketRef` are tracked under a stable `erp-import:{workOrderId}:{laborTicketId}` key.
|
|
121
|
+
- **ERP → MM import filtering**: `StandardProcessDrivers.writeLaborTicketsToMmFromErpImport()` applies MES/operator allowlists and FK rules, pre-marks accepted tickets in the ledger, writes them to MM, and advances the labor-tickets export checkpoint.
|
|
122
|
+
- **Hashed batch cache**: `BatchCacheManager` / `StandardProcessDrivers.writeEntitiesToMM()` deduplicate repeated upserts within a batch (local + API-side).
|
|
123
|
+
- **Signature semantics**: the business signature excludes identity fields (`laborTicketRef`, ERP-import keys) and SDK-mutated fields, so the same business state produces a stable hash across import and the next export. A dashboard edit changes the signature, so the change is exported.
|
|
127
124
|
|
|
128
|
-
|
|
125
|
+
See `CONNECTOR_SDK_UTILITIES.md` for the helper APIs, and the template `CONNECTOR-GUIDE.md` for the connector workflow.
|
|
129
126
|
|
|
130
127
|
### Persistent Storage
|
|
131
128
|
|
|
132
|
-
For production deployments,
|
|
129
|
+
For production deployments, mount a persistent volume for the SQLite database so the sync ledger and dedup cache survive container restarts:
|
|
133
130
|
|
|
134
131
|
```bash
|
|
135
|
-
# Set environment variable
|
|
136
132
|
SQLITE_DB_PATH=/app/data/local.sqlite3
|
|
137
133
|
```
|
|
138
134
|
|
|
139
|
-
|
|
135
|
+
## Timesheet Export
|
|
136
|
+
|
|
137
|
+
The SDK provides employee clock in/out export from MM to the ERP, separate from shop-floor labor tickets:
|
|
138
|
+
|
|
139
|
+
- `IERPTimesheetHandler` — connector-implemented hook that receives `MMReceiveTimesheet` rows.
|
|
140
|
+
- `StandardProcessDrivers.syncTimesheetsToERP()` — fetches pending rows from `/erp/v1/timesheets/updates`, processes them in `timesheetRef` order, and checkpoints progress. It assumes labor ticket export has already run for the cycle, so shop-floor labor is written/closed before clock-out.
|
|
141
|
+
|
|
142
|
+
## ERP Resource Mapping (MES Machine Settings)
|
|
143
|
+
|
|
144
|
+
Machine-to-ERP-resource mapping is sourced from **MES machine settings** (`GET /mes/settings/machine-settings`):
|
|
145
|
+
|
|
146
|
+
- `MMApiClient.fetchMappedErpResourcesForCompany()` — machines mapped to ERP labor resources (`machineRef` + `laborResourceId`).
|
|
147
|
+
- `MMApiClient.fetchMesSchedulableErpResourceIds()` / `getMesLaborImportResourceIds()` — schedulable and labor-import resource-id allowlists.
|
|
148
|
+
|
|
149
|
+
> **Deprecation:** `erpResources.machineRef` is deprecated and is no longer populated for new configuration in the MM App. Use MES machine settings instead. See `CONNECTOR_SDK_UTILITIES.md`.
|
|
140
150
|
|
|
141
151
|
## Environment Configuration
|
|
142
152
|
|
|
@@ -168,35 +178,36 @@ LOG_LEVEL="info"
|
|
|
168
178
|
|
|
169
179
|
### Core Interfaces
|
|
170
180
|
|
|
171
|
-
- `IERPConnector`: Main connector interface
|
|
172
|
-
- `IERPLaborTicketHandler`:
|
|
181
|
+
- `IERPConnector`: Main connector interface (`syncFromERP`, `syncToERP`, lifecycle hooks)
|
|
182
|
+
- `IERPLaborTicketHandler`: Create/update labor tickets in the ERP (`MMReceiveLaborTicket`)
|
|
183
|
+
- `IERPTimesheetHandler`: Process employee clock in/out rows in the ERP (`MMReceiveTimesheet`)
|
|
173
184
|
|
|
174
185
|
### Utilities
|
|
175
186
|
|
|
176
187
|
- `ApplicationInitializer`: SDK initialization
|
|
177
188
|
- `runDataSyncService`: Start automated sync jobs
|
|
178
|
-
- `StandardProcessDrivers`: Common sync operations
|
|
189
|
+
- `StandardProcessDrivers`: Common sync operations, including:
|
|
190
|
+
- `syncLaborTicketsToERP(connectorType, handler, { onlyClosed? })`
|
|
191
|
+
- `syncTimesheetsToERP(connectorType, handler)`
|
|
192
|
+
- `retryFailedLaborTickets(connectorType, handler)`
|
|
193
|
+
- `writeLaborTicketsToMmFromErpImport(tickets, filterOptions, cache?, writeOptions?)`
|
|
194
|
+
- `writeEntitiesToMM(entityType, records, cache?, options?)`
|
|
179
195
|
|
|
180
196
|
### Services
|
|
181
197
|
|
|
182
198
|
- `SqlServerService`: SQL Server integration
|
|
183
199
|
- `RestAPIService`: HTTP API client
|
|
184
|
-
- `MMApiClient`: MachineMetrics API client
|
|
200
|
+
- `MMApiClient`: MachineMetrics API client (includes `fetchMappedErpResourcesForCompany`, `fetchMesSchedulableErpResourceIds`, `fetchTimesheetUpdates`)
|
|
185
201
|
|
|
186
|
-
For
|
|
202
|
+
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`.
|
|
187
203
|
|
|
188
|
-
## Labor ticket updates:
|
|
204
|
+
## Labor ticket updates: the `onlyClosed` option
|
|
189
205
|
|
|
190
|
-
|
|
206
|
+
`syncLaborTicketsToERP` accepts an optional `onlyClosed` flag:
|
|
191
207
|
|
|
192
|
-
|
|
193
|
-
|
|
208
|
+
- `onlyClosed: true` — the SDK requests only closed labor tickets, forwarding `onlyClosed=true` to `/erp/v1/labor-tickets/export/updates`.
|
|
209
|
+
- omitted (default) — all labor tickets are processed.
|
|
194
210
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
});
|
|
211
|
+
```typescript
|
|
212
|
+
StandardProcessDrivers.syncLaborTicketsToERP(connectorType, handler, { onlyClosed?: boolean });
|
|
198
213
|
```
|
|
199
|
-
|
|
200
|
-
This forwards `onlyClosed=true` to:
|
|
201
|
-
|
|
202
|
-
- `/erp/v1/labor-tickets/export/updates`
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Main entry point for the MM ERP Connector SDK.
|
|
3
3
|
* This file exports the public API that client code should use.
|
|
4
4
|
*/
|
|
5
|
-
export type { IERPConnector } from "./types/erp-connector.js";
|
|
5
|
+
export type { IERPConnector, IERPTimesheetHandler, } from "./types/erp-connector.js";
|
|
6
6
|
export { ERPObjType } from "./types/erp-types.js";
|
|
7
7
|
export type { ERPPagination, ERPResponse, ERPObject } from "./types/erp-types.js";
|
|
8
8
|
export type { FlattenedWorkOrderRow, FlattenedWorkOrderRowBase, FlattenedWorkOrderPartFields, FlattenedWorkOrderPartOperationFields, FlattenedWorkOrderFields, FlattenedWorkOrderOperationFields, } from "./types/flattened-work-order.js";
|
|
@@ -13,6 +13,7 @@ export type { ERPApiConfig } from "./services/erp-api-services/types.js";
|
|
|
13
13
|
export { MMApiClient } from "./services/mm-api-service/index.js";
|
|
14
14
|
export { MMReceiveLaborTicket } from "./services/mm-api-service/index.js";
|
|
15
15
|
export { MMReceiveWorkOrder } from "./services/mm-api-service/index.js";
|
|
16
|
+
export { MMReceiveTimesheet } from "./services/mm-api-service/index.js";
|
|
16
17
|
export type { MMReceiveLaborTicketReason, MMReceiveLaborTicketWorkOrderOperation, IToRESTApiObject, IToFullApiObject, MMMappedErpResourceRow, MMAggregatedPartCountBucket, } from "./services/mm-api-service/index.js";
|
|
17
18
|
export { MMSendPerson, MMSendResource, MMSendPart, MMSendPartOperation, MMSendWorkOrder, MMSendWorkOrderOperation, MMSendWorkOrderOperationLaborTicketSync, MMSendReason, MMSendLaborTicket, } from "./services/mm-api-service/index.js";
|
|
18
19
|
export type { MMSendWorkOrderBatch, MMSendWorkOrderOperationLaborTicketSyncPatch, MMSendWorkOrderOperationPayload, } from "./services/mm-api-service/index.js";
|
|
@@ -29,6 +30,8 @@ export type { IERPLaborTicketHandler } from "./types/erp-connector.js";
|
|
|
29
30
|
export { StandardProcessDrivers, getCachedCompanyInfo, getCachedCompanyId, getCachedCompanyLocationRef, getCachedTimezoneOffset, getCachedTimezoneName, } from "./utils/index.js";
|
|
30
31
|
export type { WriteEntitiesToMMResult } from "./utils/index.js";
|
|
31
32
|
export { MMBatchValidationError } from "./utils/index.js";
|
|
33
|
+
export { getMesLaborImportResourceIds, getMappedOperatorErpIdsForImport, normalizeLaborTicketWorkOrderOpKey, buildSyncedWorkOrderOperationKeySet, resolveSyncedWorkOrderOperationKeysForLaborImport, filterLaborTicketsForMmImport, collectMesSchedulableErpResourceIds, fetchMesSchedulableErpResourceIds, } from "./utils/index.js";
|
|
34
|
+
export type { MesMachineSettingRow, SyncedWorkOrderOperationRow, FilterLaborTicketsForMmImportOptions, FilterLaborTicketsForMmImportResult, } from "./utils/labor-import-from-erp.js";
|
|
32
35
|
export type { APIResponse } from "./services/erp-api-services/types.js";
|
|
33
36
|
export { RestAPIService } from "./services/erp-api-services/rest/rest-api-service.js";
|
|
34
37
|
export { ErrorHandler, GraphQLError } from "./services/erp-api-services/errors.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ export { buildLogicalCondition } from "./services/erp-api-services/rest/get-quer
|
|
|
11
11
|
export { MMApiClient } from "./services/mm-api-service/index.js";
|
|
12
12
|
export { MMReceiveLaborTicket } from "./services/mm-api-service/index.js";
|
|
13
13
|
export { MMReceiveWorkOrder } from "./services/mm-api-service/index.js";
|
|
14
|
+
export { MMReceiveTimesheet } from "./services/mm-api-service/index.js";
|
|
14
15
|
export { MMSendPerson, MMSendResource, MMSendPart, MMSendPartOperation, MMSendWorkOrder, MMSendWorkOrderOperation, MMSendWorkOrderOperationLaborTicketSync, MMSendReason, MMSendLaborTicket, } from "./services/mm-api-service/index.js";
|
|
15
16
|
// Utility functions that are safe for client use
|
|
16
17
|
export { getUniqueRows, removeExtraneousFields, getPayloadWithoutIDField, trimObjectValues, cleanupNumbers, addNewFieldFromExternalSource, addNewFieldFromLookupField, formatDateWithTZOffset, toISOWithOffset, applyTimezoneOffsetsToFields, calculateTimeDifferenceInHours, getSecondsOfDay, convertToLocalTime, convertUtcDateTimeToErpLocal, convertErpLocalDateTimeToUtc, getERPTimezone, getErrorType, formatError, formatErrorForLogging, } from "./utils/index.js";
|
|
@@ -28,6 +29,7 @@ export { logger } from "./services/reporting-service/index.js";
|
|
|
28
29
|
// Process drivers and utilities
|
|
29
30
|
export { StandardProcessDrivers, getCachedCompanyInfo, getCachedCompanyId, getCachedCompanyLocationRef, getCachedTimezoneOffset, getCachedTimezoneName, } from "./utils/index.js";
|
|
30
31
|
export { MMBatchValidationError } from "./utils/index.js";
|
|
32
|
+
export { getMesLaborImportResourceIds, getMappedOperatorErpIdsForImport, normalizeLaborTicketWorkOrderOpKey, buildSyncedWorkOrderOperationKeySet, resolveSyncedWorkOrderOperationKeysForLaborImport, filterLaborTicketsForMmImport, collectMesSchedulableErpResourceIds, fetchMesSchedulableErpResourceIds, } from "./utils/index.js";
|
|
31
33
|
export { RestAPIService } from "./services/erp-api-services/rest/rest-api-service.js";
|
|
32
34
|
export { ErrorHandler, GraphQLError } from "./services/erp-api-services/errors.js";
|
|
33
35
|
export { OAuthClient } from "./services/erp-api-services/oauth-client.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260617160000_create_sdk_runtime_state_table.d.ts","sourceRoot":"","sources":["../../src/migrations/20260617160000_create_sdk_runtime_state_table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export async function up(knex) {
|
|
2
|
+
await knex.schema.createTable("sdk_runtime_state", (table) => {
|
|
3
|
+
table.string("key").primary();
|
|
4
|
+
table.text("value").notNullable();
|
|
5
|
+
table.string("updated_at").notNullable();
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
export async function down(knex) {
|
|
9
|
+
await knex.schema.dropTable("sdk_runtime_state");
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=20260617160000_create_sdk_runtime_state_table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260617160000_create_sdk_runtime_state_table.js","sourceRoot":"","sources":["../../src/migrations/20260617160000_create_sdk_runtime_state_table.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAU;IACjC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3D,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company-info.d.ts","sourceRoot":"","sources":["../../../src/services/mm-api-service/company-info.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"company-info.d.ts","sourceRoot":"","sources":["../../../src/services/mm-api-service/company-info.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AA4BD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,QAAa,OAAO,CAAC,WAAW,CAsDrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,WAAW,CAS1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAQ,uBAGP,KACA,OAAO,CAAC,IAAI,CAkBd,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,WAAW,CAElD;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAG5D;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,4FAA4F;AAC5F,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Company info from MM (`/accounts/current`) is loaded during SDK startup
|
|
3
3
|
* (`ApplicationInitializer.initialize` → {@link ensureCompanyInfo}), written to shared
|
|
4
|
-
*
|
|
4
|
+
* SQLite runtime state, and read by synchronous {@link getCachedCompanyInfo} and related getters.
|
|
5
5
|
*
|
|
6
|
-
* Persisted data
|
|
7
|
-
* e.g. one container’s filesystem unless that path is mounted shared. Company fields are treated
|
|
6
|
+
* Persisted data lives in `sdk_runtime_state` (same SQLite file as `SQLITE_DB_PATH`). Company fields are treated
|
|
8
7
|
* as stable for the deployment; refreshing them if MM changes is the SDK’s responsibility when we
|
|
9
8
|
* add that behavior—not connector boilerplate.
|
|
10
9
|
*
|
|
@@ -32,7 +31,7 @@ function hydrateCacheFromDiskIfPresent() {
|
|
|
32
31
|
return null;
|
|
33
32
|
}
|
|
34
33
|
/**
|
|
35
|
-
* Resolves company info for synchronous readers: in-memory, then persisted
|
|
34
|
+
* Resolves company info for synchronous readers: in-memory, then persisted SQLite runtime state.
|
|
36
35
|
* @throws Error if neither is available (initialization / API fetch has not populated data).
|
|
37
36
|
*/
|
|
38
37
|
function resolveCompanyInfoOrThrow() {
|
|
@@ -43,7 +42,7 @@ function resolveCompanyInfoOrThrow() {
|
|
|
43
42
|
if (fromDisk) {
|
|
44
43
|
return fromDisk;
|
|
45
44
|
}
|
|
46
|
-
throw new Error("Company info is not available: run ApplicationInitializer.initialize() or ensureCompanyInfo() in a process with API access, or ensure
|
|
45
|
+
throw new Error("Company info is not available: run ApplicationInitializer.initialize() or ensureCompanyInfo() in a process with API access, or ensure sdk_runtime_state contains companyInfo from a prior fetch");
|
|
47
46
|
}
|
|
48
47
|
/**
|
|
49
48
|
* Fetches company info from MM, updates in-memory cache and persisted job-state.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company-info.js","sourceRoot":"","sources":["../../../src/services/mm-api-service/company-info.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"company-info.js","sourceRoot":"","sources":["../../../src/services/mm-api-service/company-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MMApiClient } from "./mm-api-service.js";
|
|
2
2
|
import type { MMReceiveLaborTicketReason, MMReceiveLaborTicketWorkOrderOperation } from "./types/receive-types.js";
|
|
3
3
|
import { MMSendPerson, MMSendResource, MMSendPart, MMSendPartOperation, MMSendWorkOrder, MMSendWorkOrderOperation, MMSendWorkOrderOperationLaborTicketSync, MMSendReason, MMSendLaborTicket, MMSendWorkOrderBatch } from "./types/send-types.js";
|
|
4
|
-
import type { MMAggregatedPartCountBucket, MMApiBaseResponse, MM200NonLaborTicketResponse, MM200LaborTicketResponse, MM207NonLaborTicketResponse, MM207LaborTicketResponse, MM500NonLaborTicketException, MM500LaborTicketException,
|
|
4
|
+
import type { MMAggregatedPartCountBucket, MMApiBaseResponse, MM200NonLaborTicketResponse, MM200LaborTicketResponse, MM207NonLaborTicketResponse, MM207LaborTicketResponse, MM500NonLaborTicketException, MM500LaborTicketException, MMGraphQLWorkOrderResponse, MMMachineGroupsResponse, MMMappedErpResourceRow } from "./types/mm-response-interfaces.js";
|
|
5
5
|
import { ensureCompanyInfo, getCachedCompanyId, getCachedCompanyInfo, getCachedCompanyLocationRef, getCachedCompanyTimezoneName, getCachedCompanyTimezoneOffsetHours, getCachedTimezoneName, getCachedTimezoneOffset, getCompanyInfo } from "./company-info.js";
|
|
6
6
|
import type { CompanyInfo, EnsureCompanyInfoParams } from "./company-info.js";
|
|
7
7
|
/**
|
|
@@ -12,11 +12,11 @@ export { MMApiClient };
|
|
|
12
12
|
* Response interfaces for MM API calls
|
|
13
13
|
* These provide type safety for the various response shapes based on HTTP status codes and entity types
|
|
14
14
|
*/
|
|
15
|
-
export type { MMAggregatedPartCountBucket, MMApiBaseResponse, MM200NonLaborTicketResponse, MM200LaborTicketResponse, MM207NonLaborTicketResponse, MM207LaborTicketResponse, MM500NonLaborTicketException, MM500LaborTicketException,
|
|
15
|
+
export type { MMAggregatedPartCountBucket, MMApiBaseResponse, MM200NonLaborTicketResponse, MM200LaborTicketResponse, MM207NonLaborTicketResponse, MM207LaborTicketResponse, MM500NonLaborTicketException, MM500LaborTicketException, MMGraphQLWorkOrderResponse, MMMachineGroupsResponse, MMMappedErpResourceRow, };
|
|
16
16
|
/**
|
|
17
17
|
* Types related to entities received from the MM API
|
|
18
18
|
*/
|
|
19
|
-
export { MMReceiveLaborTicket, MMReceiveWorkOrder } from "./types/receive-types.js";
|
|
19
|
+
export { MMReceiveLaborTicket, MMReceiveWorkOrder, MMReceiveTimesheet, } from "./types/receive-types.js";
|
|
20
20
|
export type { MMReceiveLaborTicketReason, MMReceiveLaborTicketWorkOrderOperation, };
|
|
21
21
|
/**
|
|
22
22
|
* Interface for entities sent to the MM API
|
|
@@ -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,qBAAqB,CAAC;AAClD,OAAO,KAAK,EACV,0BAA0B,EAC1B,sCAAsC,EACvC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uCAAuC,EACvC,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/mm-api-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EACV,0BAA0B,EAC1B,sCAAsC,EACvC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uCAAuC,EACvC,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC3B,4BAA4B,EAC5B,mCAAmC,EACnC,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB;;;GAGG;AACH,YAAY,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,GACvB,CAAC;AAEF;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,0BAA0B,EAC1B,sCAAsC,GACvC,CAAC;AAEF;;GAEG;AACH,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,4CAA4C,EAC5C,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uCAAuC,EACvC,YAAY,EACZ,iBAAiB,GAClB,CAAC;AAEF;;GAEG;AACH,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC;;GAEG;AACH,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,mCAAmC,EACnC,4BAA4B,GAC7B,CAAC;AACF,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -8,7 +8,7 @@ export { MMApiClient };
|
|
|
8
8
|
/**
|
|
9
9
|
* Types related to entities received from the MM API
|
|
10
10
|
*/
|
|
11
|
-
export { MMReceiveLaborTicket, MMReceiveWorkOrder } from "./types/receive-types.js";
|
|
11
|
+
export { MMReceiveLaborTicket, MMReceiveWorkOrder, MMReceiveTimesheet, } from "./types/receive-types.js";
|
|
12
12
|
/**
|
|
13
13
|
* Classes for entities sent to the MM API
|
|
14
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/mm-api-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uCAAuC,EACvC,YAAY,EACZ,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/mm-api-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uCAAuC,EACvC,YAAY,EACZ,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAc/B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC3B,4BAA4B,EAC5B,mCAAmC,EACnC,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAM3B;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,CAAC;AAoBvB;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAgBlC;;GAEG;AACH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uCAAuC,EACvC,YAAY,EACZ,iBAAiB,GAClB,CAAC;AAOF;;GAEG;AACH,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,mCAAmC,EACnC,4BAA4B,GAC7B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { MMMappedErpResourceRow } from "./types/mm-response-interfaces.js";
|
|
2
|
+
/**
|
|
3
|
+
* One row from `GET /mes/settings/machine-settings`. Field names follow the MES mapping service;
|
|
4
|
+
* see {@link mapMesMachineSettingsToMappedErpResourceRows} for how each field maps to the SDK.
|
|
5
|
+
*/
|
|
6
|
+
export interface MesMachineSettingRow {
|
|
7
|
+
laborTicketEnabled?: boolean;
|
|
8
|
+
laborResourceId?: string | null;
|
|
9
|
+
/**
|
|
10
|
+
* ERP resource ids this machine can be scheduled as (in addition to {@link laborResourceId} for labor).
|
|
11
|
+
*/
|
|
12
|
+
scheduledAs?: ReadonlyArray<string | number | null | undefined> | null;
|
|
13
|
+
machineRef?: number | string | null;
|
|
14
|
+
name?: string | null;
|
|
15
|
+
type?: string | null;
|
|
16
|
+
machineGroupId?: string | number | null;
|
|
17
|
+
isResourceGroup?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* `GET {mmApiBaseUrl}/mes/settings/machine-settings` — returns a JSON array of machine rows
|
|
21
|
+
* (auth: bearer `mmApiAuthToken`).
|
|
22
|
+
*
|
|
23
|
+
* Requires `mmApiBaseUrl` and `mmApiAuthToken` in {@link CoreConfiguration}. Throws if either is
|
|
24
|
+
* missing, if the response body is not a JSON array, or if the HTTP request fails.
|
|
25
|
+
* Used by labor import allowlists and mapped-resource helpers on `MMApiClient`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function fetchMesMachineSettingsRows(): Promise<MesMachineSettingRow[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Collects every non-empty {@link MesMachineSettingRow.laborResourceId} and every entry in
|
|
30
|
+
* {@link MesMachineSettingRow.scheduledAs} across **all** machine-settings rows, deduped
|
|
31
|
+
* case-insensitively (first-seen casing preserved). Does not filter on `laborTicketEnabled`.
|
|
32
|
+
* Non-array `scheduledAs` is ignored.
|
|
33
|
+
*/
|
|
34
|
+
export declare function collectMesSchedulableErpResourceIds(rows: ReadonlyArray<MesMachineSettingRow>): string[];
|
|
35
|
+
/**
|
|
36
|
+
* Loads machine-settings and returns {@link collectMesSchedulableErpResourceIds}.
|
|
37
|
+
* Same configuration and failure behavior as {@link fetchMesMachineSettingsRows}.
|
|
38
|
+
*/
|
|
39
|
+
export declare function fetchMesSchedulableErpResourceIds(): Promise<string[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Maps machine-settings rows to {@link MMMappedErpResourceRow} for connectors.
|
|
42
|
+
* Emits one row per MES machine that has both a finite `machineRef` and a non-empty
|
|
43
|
+
* `laborResourceId` (ERP labor resource mapping). Optional display / group fields pass through when present.
|
|
44
|
+
*/
|
|
45
|
+
export declare function mapMesMachineSettingsToMappedErpResourceRows(rows: ReadonlyArray<MesMachineSettingRow>): MMMappedErpResourceRow[];
|
|
46
|
+
//# sourceMappingURL=mes-machine-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mes-machine-settings.d.ts","sourceRoot":"","sources":["../../../src/services/mm-api-service/mes-machine-settings.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IACvE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAC1D,oBAAoB,EAAE,CACvB,CA+BA;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,aAAa,CAAC,oBAAoB,CAAC,GACxC,MAAM,EAAE,CAyBV;AAED;;;GAGG;AACH,wBAAsB,iCAAiC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAO3E;AAED;;;;GAIG;AACH,wBAAgB,4CAA4C,CAC1D,IAAI,EAAE,aAAa,CAAC,oBAAoB,CAAC,GACxC,sBAAsB,EAAE,CAO1B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { CoreConfiguration } from "../data-sync-service/configuration-manager.js";
|
|
2
|
+
import { sdkLogger as logger } from "../reporting-service/logger.js";
|
|
3
|
+
import { HTTPClientFactory } from "../../utils/http-client.js";
|
|
4
|
+
/**
|
|
5
|
+
* `GET {mmApiBaseUrl}/mes/settings/machine-settings` — returns a JSON array of machine rows
|
|
6
|
+
* (auth: bearer `mmApiAuthToken`).
|
|
7
|
+
*
|
|
8
|
+
* Requires `mmApiBaseUrl` and `mmApiAuthToken` in {@link CoreConfiguration}. Throws if either is
|
|
9
|
+
* missing, if the response body is not a JSON array, or if the HTTP request fails.
|
|
10
|
+
* Used by labor import allowlists and mapped-resource helpers on `MMApiClient`.
|
|
11
|
+
*/
|
|
12
|
+
export async function fetchMesMachineSettingsRows() {
|
|
13
|
+
const config = CoreConfiguration.inst();
|
|
14
|
+
const baseUrl = config.mmApiBaseUrl;
|
|
15
|
+
const token = config.mmApiAuthToken;
|
|
16
|
+
if (!baseUrl || !token) {
|
|
17
|
+
throw new Error("fetchMesMachineSettingsRows: missing mmApiBaseUrl or mmApiAuthToken");
|
|
18
|
+
}
|
|
19
|
+
const client = HTTPClientFactory.getInstance({
|
|
20
|
+
baseUrl,
|
|
21
|
+
retryAttempts: config.mmApiRetryAttempts,
|
|
22
|
+
timeoutMs: config.mmApiTimeoutSeconds * 1000,
|
|
23
|
+
});
|
|
24
|
+
const response = await client.request({
|
|
25
|
+
url: "/mes/settings/machine-settings",
|
|
26
|
+
method: "GET",
|
|
27
|
+
headers: {
|
|
28
|
+
Accept: "application/json",
|
|
29
|
+
Authorization: `Bearer ${token}`,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
const rows = response.data;
|
|
33
|
+
if (!Array.isArray(rows)) {
|
|
34
|
+
throw new Error("fetchMesMachineSettingsRows: response is not a JSON array");
|
|
35
|
+
}
|
|
36
|
+
return rows;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Collects every non-empty {@link MesMachineSettingRow.laborResourceId} and every entry in
|
|
40
|
+
* {@link MesMachineSettingRow.scheduledAs} across **all** machine-settings rows, deduped
|
|
41
|
+
* case-insensitively (first-seen casing preserved). Does not filter on `laborTicketEnabled`.
|
|
42
|
+
* Non-array `scheduledAs` is ignored.
|
|
43
|
+
*/
|
|
44
|
+
export function collectMesSchedulableErpResourceIds(rows) {
|
|
45
|
+
const seenLower = new Set();
|
|
46
|
+
const out = [];
|
|
47
|
+
const add = (raw) => {
|
|
48
|
+
if (raw === null || raw === undefined)
|
|
49
|
+
return;
|
|
50
|
+
const s = typeof raw === "string" ? raw.trim() : String(raw).trim();
|
|
51
|
+
if (s === "")
|
|
52
|
+
return;
|
|
53
|
+
const low = s.toLowerCase();
|
|
54
|
+
if (seenLower.has(low))
|
|
55
|
+
return;
|
|
56
|
+
seenLower.add(low);
|
|
57
|
+
out.push(s);
|
|
58
|
+
};
|
|
59
|
+
for (const row of rows) {
|
|
60
|
+
add(row.laborResourceId);
|
|
61
|
+
const sched = row.scheduledAs;
|
|
62
|
+
if (!Array.isArray(sched))
|
|
63
|
+
continue;
|
|
64
|
+
for (const id of sched) {
|
|
65
|
+
add(id);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Loads machine-settings and returns {@link collectMesSchedulableErpResourceIds}.
|
|
72
|
+
* Same configuration and failure behavior as {@link fetchMesMachineSettingsRows}.
|
|
73
|
+
*/
|
|
74
|
+
export async function fetchMesSchedulableErpResourceIds() {
|
|
75
|
+
const rows = await fetchMesMachineSettingsRows();
|
|
76
|
+
const ids = collectMesSchedulableErpResourceIds(rows);
|
|
77
|
+
logger.info(`fetchMesSchedulableErpResourceIds: ${ids.length} unique ERP resource id(s) from laborResourceId + scheduledAs`);
|
|
78
|
+
return ids;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Maps machine-settings rows to {@link MMMappedErpResourceRow} for connectors.
|
|
82
|
+
* Emits one row per MES machine that has both a finite `machineRef` and a non-empty
|
|
83
|
+
* `laborResourceId` (ERP labor resource mapping). Optional display / group fields pass through when present.
|
|
84
|
+
*/
|
|
85
|
+
export function mapMesMachineSettingsToMappedErpResourceRows(rows) {
|
|
86
|
+
const out = [];
|
|
87
|
+
for (const raw of rows) {
|
|
88
|
+
const row = mapMesMachineSettingRowToMapped(raw);
|
|
89
|
+
if (row)
|
|
90
|
+
out.push(row);
|
|
91
|
+
}
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
function mapMesMachineSettingRowToMapped(raw) {
|
|
95
|
+
const refRaw = raw.machineRef;
|
|
96
|
+
if (refRaw === null || refRaw === undefined || refRaw === "") {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const ref = typeof refRaw === "number" ? refRaw : Number(refRaw);
|
|
100
|
+
if (!Number.isFinite(ref)) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
const ridRaw = raw.laborResourceId;
|
|
104
|
+
if (ridRaw === null || ridRaw === undefined) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const resourceId = typeof ridRaw === "string" ? ridRaw.trim() : String(ridRaw).trim();
|
|
108
|
+
if (resourceId === "") {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
const mgId = raw.machineGroupId;
|
|
112
|
+
const machineGroupId = mgId === null || mgId === undefined ? null : String(mgId);
|
|
113
|
+
const name = typeof raw.name === "string" ? raw.name : null;
|
|
114
|
+
const type = raw.type === null || raw.type === undefined ? null : String(raw.type);
|
|
115
|
+
return {
|
|
116
|
+
isResourceGroup: Boolean(raw.isResourceGroup),
|
|
117
|
+
machineGroupId,
|
|
118
|
+
machineRef: Math.trunc(ref),
|
|
119
|
+
resourceId,
|
|
120
|
+
name,
|
|
121
|
+
type,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=mes-machine-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mes-machine-settings.js","sourceRoot":"","sources":["../../../src/services/mm-api-service/mes-machine-settings.ts"],"names":[],"mappings":"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"}
|