@machinemetrics/mm-erp-sdk 0.1.1-beta.1
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/LICENSE +21 -0
- package/README.md +147 -0
- package/dist/config-2l5vnNkA.js +418 -0
- package/dist/config-2l5vnNkA.js.map +1 -0
- package/dist/connector-factory-CQ8e7Tae.js +21 -0
- package/dist/connector-factory-CQ8e7Tae.js.map +1 -0
- package/dist/hashed-cache-manager-Ci9X3GAB.js +292 -0
- package/dist/hashed-cache-manager-Ci9X3GAB.js.map +1 -0
- package/dist/index-Cn9ccxOO.js +179 -0
- package/dist/index-Cn9ccxOO.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/knexfile-1qKKIORB.js +20 -0
- package/dist/knexfile-1qKKIORB.js.map +1 -0
- package/dist/knexfile.d.ts +6 -0
- package/dist/knexfile.d.ts.map +1 -0
- package/dist/logger-QG73MndU.js +17523 -0
- package/dist/logger-QG73MndU.js.map +1 -0
- package/dist/migrations/20241015162631_create_cache_table.js +17 -0
- package/dist/migrations/20241015162631_create_cache_table.js.map +1 -0
- package/dist/migrations/20241015162632_create_sdk_cache_table.js +17 -0
- package/dist/migrations/20241015162632_create_sdk_cache_table.js.map +1 -0
- package/dist/migrations/20250103162631_create_record_tracking_table.js +17 -0
- package/dist/migrations/20250103162631_create_record_tracking_table.js.map +1 -0
- package/dist/mm-erp-sdk.js +3503 -0
- package/dist/mm-erp-sdk.js.map +1 -0
- package/dist/services/caching-service/batch-cache-manager.d.ts +52 -0
- package/dist/services/caching-service/batch-cache-manager.d.ts.map +1 -0
- package/dist/services/caching-service/hashed-cache-manager.d.ts +83 -0
- package/dist/services/caching-service/hashed-cache-manager.d.ts.map +1 -0
- package/dist/services/caching-service/index.d.ts +92 -0
- package/dist/services/caching-service/index.d.ts.map +1 -0
- package/dist/services/caching-service/record-tracking-manager.d.ts +15 -0
- package/dist/services/caching-service/record-tracking-manager.d.ts.map +1 -0
- package/dist/services/data-sync-service/configuration-manager.d.ts +50 -0
- package/dist/services/data-sync-service/configuration-manager.d.ts.map +1 -0
- package/dist/services/data-sync-service/data-sync-service.d.ts +2 -0
- package/dist/services/data-sync-service/data-sync-service.d.ts.map +1 -0
- package/dist/services/data-sync-service/index.d.ts +10 -0
- package/dist/services/data-sync-service/index.d.ts.map +1 -0
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.d.ts +2 -0
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.d.ts.map +1 -0
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +41 -0
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -0
- package/dist/services/data-sync-service/jobs/from-erp.d.ts +4 -0
- package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -0
- package/dist/services/data-sync-service/jobs/from-erp.js +42 -0
- package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -0
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.d.ts +2 -0
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.d.ts.map +1 -0
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +41 -0
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -0
- package/dist/services/data-sync-service/jobs/run-migrations.d.ts +2 -0
- package/dist/services/data-sync-service/jobs/run-migrations.d.ts.map +1 -0
- package/dist/services/data-sync-service/jobs/run-migrations.js +21 -0
- package/dist/services/data-sync-service/jobs/run-migrations.js.map +1 -0
- package/dist/services/data-sync-service/jobs/to-erp.d.ts +4 -0
- package/dist/services/data-sync-service/jobs/to-erp.d.ts.map +1 -0
- package/dist/services/data-sync-service/jobs/to-erp.js +39 -0
- package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -0
- package/dist/services/erp-api-services/errors.d.ts +22 -0
- package/dist/services/erp-api-services/errors.d.ts.map +1 -0
- package/dist/services/erp-api-services/graphql/graphql-service.d.ts +40 -0
- package/dist/services/erp-api-services/graphql/graphql-service.d.ts.map +1 -0
- package/dist/services/erp-api-services/graphql/types.d.ts +32 -0
- package/dist/services/erp-api-services/graphql/types.d.ts.map +1 -0
- package/dist/services/erp-api-services/index.d.ts +9 -0
- package/dist/services/erp-api-services/index.d.ts.map +1 -0
- package/dist/services/erp-api-services/oauth-client.d.ts +45 -0
- package/dist/services/erp-api-services/oauth-client.d.ts.map +1 -0
- package/dist/services/erp-api-services/rest/get-query-params.d.ts +50 -0
- package/dist/services/erp-api-services/rest/get-query-params.d.ts.map +1 -0
- package/dist/services/erp-api-services/rest/rest-api-service.d.ts +35 -0
- package/dist/services/erp-api-services/rest/rest-api-service.d.ts.map +1 -0
- package/dist/services/erp-api-services/types.d.ts +27 -0
- package/dist/services/erp-api-services/types.d.ts.map +1 -0
- package/dist/services/mm-api-service/index.d.ts +31 -0
- package/dist/services/mm-api-service/index.d.ts.map +1 -0
- package/dist/services/mm-api-service/mm-api-service.d.ts +214 -0
- package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -0
- package/dist/services/mm-api-service/token-mgr.d.ts +33 -0
- package/dist/services/mm-api-service/token-mgr.d.ts.map +1 -0
- package/dist/services/mm-api-service/types/checkpoint.d.ts +13 -0
- package/dist/services/mm-api-service/types/checkpoint.d.ts.map +1 -0
- package/dist/services/mm-api-service/types/entity-transformer.d.ts +58 -0
- package/dist/services/mm-api-service/types/entity-transformer.d.ts.map +1 -0
- package/dist/services/mm-api-service/types/mm-response-interfaces.d.ts +263 -0
- package/dist/services/mm-api-service/types/mm-response-interfaces.d.ts.map +1 -0
- package/dist/services/mm-api-service/types/receive-types.d.ts +57 -0
- package/dist/services/mm-api-service/types/receive-types.d.ts.map +1 -0
- package/dist/services/mm-api-service/types/send-types.d.ts +147 -0
- package/dist/services/mm-api-service/types/send-types.d.ts.map +1 -0
- package/dist/services/reporting-service/index.d.ts +5 -0
- package/dist/services/reporting-service/index.d.ts.map +1 -0
- package/dist/services/reporting-service/logger.d.ts +4 -0
- package/dist/services/reporting-service/logger.d.ts.map +1 -0
- package/dist/services/sql-server-erp-service/configuration.d.ts +15 -0
- package/dist/services/sql-server-erp-service/configuration.d.ts.map +1 -0
- package/dist/services/sql-server-erp-service/index.d.ts +16 -0
- package/dist/services/sql-server-erp-service/index.d.ts.map +1 -0
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts +31 -0
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts.map +1 -0
- package/dist/services/sql-server-erp-service/internal/sql-server-config.d.ts +65 -0
- package/dist/services/sql-server-erp-service/internal/sql-server-config.d.ts.map +1 -0
- package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.d.ts +20 -0
- package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.d.ts.map +1 -0
- package/dist/services/sql-server-erp-service/internal/types/sql-server-types.d.ts +3 -0
- package/dist/services/sql-server-erp-service/internal/types/sql-server-types.d.ts.map +1 -0
- package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts +35 -0
- package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts.map +1 -0
- package/dist/services/sql-server-erp-service/sql-server-service.d.ts +37 -0
- package/dist/services/sql-server-erp-service/sql-server-service.d.ts.map +1 -0
- package/dist/services/sql-server-erp-service/types/sql-input-param.d.ts +10 -0
- package/dist/services/sql-server-erp-service/types/sql-input-param.d.ts.map +1 -0
- package/dist/services/sqlite-service/index.d.ts +2 -0
- package/dist/services/sqlite-service/index.d.ts.map +1 -0
- package/dist/services/sqlite-service/sqlite-coordinator.d.ts +28 -0
- package/dist/services/sqlite-service/sqlite-coordinator.d.ts.map +1 -0
- package/dist/types/erp-connector.d.ts +40 -0
- package/dist/types/erp-connector.d.ts.map +1 -0
- package/dist/types/erp-types.d.ts +32 -0
- package/dist/types/erp-types.d.ts.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/application-initializer.d.ts +15 -0
- package/dist/utils/application-initializer.d.ts.map +1 -0
- package/dist/utils/cleanup-numbers.d.ts +2 -0
- package/dist/utils/cleanup-numbers.d.ts.map +1 -0
- package/dist/utils/connector-factory.d.ts +8 -0
- package/dist/utils/connector-factory.d.ts.map +1 -0
- package/dist/utils/data-transformation.d.ts +20 -0
- package/dist/utils/data-transformation.d.ts.map +1 -0
- package/dist/utils/erp-type-from-entity.d.ts +5 -0
- package/dist/utils/erp-type-from-entity.d.ts.map +1 -0
- package/dist/utils/http-client.d.ts +35 -0
- package/dist/utils/http-client.d.ts.map +1 -0
- package/dist/utils/index.d.ts +57 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/local-data-store/database-lock.d.ts +29 -0
- package/dist/utils/local-data-store/database-lock.d.ts.map +1 -0
- package/dist/utils/local-data-store/jobs-shared-data.d.ts +34 -0
- package/dist/utils/local-data-store/jobs-shared-data.d.ts.map +1 -0
- package/dist/utils/mm-labor-ticket-helpers.d.ts +9 -0
- package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -0
- package/dist/utils/removeExtraneousFields.d.ts +6 -0
- package/dist/utils/removeExtraneousFields.d.ts.map +1 -0
- package/dist/utils/removeIdFieldFromPayload.d.ts +6 -0
- package/dist/utils/removeIdFieldFromPayload.d.ts.map +1 -0
- package/dist/utils/resource-group.d.ts +11 -0
- package/dist/utils/resource-group.d.ts.map +1 -0
- package/dist/utils/standard-process-drivers/error-processor.d.ts +68 -0
- package/dist/utils/standard-process-drivers/error-processor.d.ts.map +1 -0
- package/dist/utils/standard-process-drivers/index.d.ts +3 -0
- package/dist/utils/standard-process-drivers/index.d.ts.map +1 -0
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +18 -0
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts.map +1 -0
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +40 -0
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -0
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +178 -0
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -0
- package/dist/utils/time-utils.d.ts +31 -0
- package/dist/utils/time-utils.d.ts.map +1 -0
- package/dist/utils/timezone.d.ts +21 -0
- package/dist/utils/timezone.d.ts.map +1 -0
- package/dist/utils/trimObjectValues.d.ts +5 -0
- package/dist/utils/trimObjectValues.d.ts.map +1 -0
- package/dist/utils/uniqueRows.d.ts +9 -0
- package/dist/utils/uniqueRows.d.ts.map +1 -0
- package/package.json +50 -0
- package/src/index.ts +98 -0
- package/src/knexfile.ts +21 -0
- package/src/migrations/20241015162631_create_cache_table.ts +15 -0
- package/src/migrations/20241015162632_create_sdk_cache_table.ts +15 -0
- package/src/migrations/20250103162631_create_record_tracking_table.ts +18 -0
- package/src/services/caching-service/batch-cache-manager.ts +111 -0
- package/src/services/caching-service/hashed-cache-manager.ts +253 -0
- package/src/services/caching-service/index.ts +114 -0
- package/src/services/caching-service/record-tracking-manager.ts +41 -0
- package/src/services/data-sync-service/configuration-manager.ts +153 -0
- package/src/services/data-sync-service/data-sync-service.ts +100 -0
- package/src/services/data-sync-service/index.ts +14 -0
- package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +38 -0
- package/src/services/data-sync-service/jobs/from-erp.ts +55 -0
- package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +44 -0
- package/src/services/data-sync-service/jobs/run-migrations.ts +21 -0
- package/src/services/data-sync-service/jobs/to-erp.ts +53 -0
- package/src/services/erp-api-services/errors.ts +115 -0
- package/src/services/erp-api-services/graphql/graphql-service.ts +116 -0
- package/src/services/erp-api-services/graphql/types.ts +30 -0
- package/src/services/erp-api-services/index.ts +14 -0
- package/src/services/erp-api-services/oauth-client.ts +72 -0
- package/src/services/erp-api-services/rest/get-query-params.ts +63 -0
- package/src/services/erp-api-services/rest/rest-api-service.ts +212 -0
- package/src/services/erp-api-services/types.ts +28 -0
- package/src/services/mm-api-service/index.ts +83 -0
- package/src/services/mm-api-service/mm-api-service.ts +685 -0
- package/src/services/mm-api-service/token-mgr.ts +123 -0
- package/src/services/mm-api-service/types/checkpoint.ts +13 -0
- package/src/services/mm-api-service/types/entity-transformer.ts +298 -0
- package/src/services/mm-api-service/types/mm-response-interfaces.ts +293 -0
- package/src/services/mm-api-service/types/receive-types.ts +89 -0
- package/src/services/mm-api-service/types/send-types.ts +383 -0
- package/src/services/reporting-service/index.ts +4 -0
- package/src/services/reporting-service/logger.ts +117 -0
- package/src/services/sql-server-erp-service/configuration.ts +14 -0
- package/src/services/sql-server-erp-service/index.ts +18 -0
- package/src/services/sql-server-erp-service/internal/sql-labor-ticket-operations.ts +66 -0
- package/src/services/sql-server-erp-service/internal/sql-server-config.ts +38 -0
- package/src/services/sql-server-erp-service/internal/sql-transaction-manager.ts +45 -0
- package/src/services/sql-server-erp-service/internal/types/sql-server-types.ts +23 -0
- package/src/services/sql-server-erp-service/sql-server-helpers.ts +99 -0
- package/src/services/sql-server-erp-service/sql-server-service.ts +191 -0
- package/src/services/sql-server-erp-service/types/sql-input-param.ts +14 -0
- package/src/services/sqlite-service/index.ts +1 -0
- package/src/services/sqlite-service/sqlite-coordinator.ts +80 -0
- package/src/types/erp-connector.ts +46 -0
- package/src/types/erp-types.ts +37 -0
- package/src/types/index.ts +13 -0
- package/src/utils/application-initializer.ts +62 -0
- package/src/utils/cleanup-numbers.ts +5 -0
- package/src/utils/connector-factory.ts +34 -0
- package/src/utils/data-transformation.ts +58 -0
- package/src/utils/erp-type-from-entity.ts +12 -0
- package/src/utils/http-client.ts +137 -0
- package/src/utils/index.ts +71 -0
- package/src/utils/local-data-store/database-lock.ts +86 -0
- package/src/utils/local-data-store/jobs-shared-data.ts +111 -0
- package/src/utils/mm-labor-ticket-helpers.ts +28 -0
- package/src/utils/removeExtraneousFields.ts +22 -0
- package/src/utils/removeIdFieldFromPayload.ts +22 -0
- package/src/utils/resource-group.ts +92 -0
- package/src/utils/standard-process-drivers/error-processor.ts +417 -0
- package/src/utils/standard-process-drivers/index.ts +6 -0
- package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +261 -0
- package/src/utils/standard-process-drivers/mm-entity-processor.ts +265 -0
- package/src/utils/standard-process-drivers/standard-process-drivers.ts +459 -0
- package/src/utils/time-utils.ts +131 -0
- package/src/utils/timezone.ts +96 -0
- package/src/utils/trimObjectValues.ts +12 -0
- package/src/utils/uniqueRows.ts +40 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ERPObjType } from "../../types/erp-types";
|
|
2
|
+
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager";
|
|
3
|
+
import { IToRESTApiObject, MM207NonLaborTicketResponse, MM207LaborTicketResponse } from "../../services/mm-api-service";
|
|
4
|
+
/**
|
|
5
|
+
* Handles error processing and record management utilities for MM API operations
|
|
6
|
+
*/
|
|
7
|
+
export declare class ErrorProcessor {
|
|
8
|
+
/**
|
|
9
|
+
* Creates a set of primary keys for all failed records from batch errors
|
|
10
|
+
* @param entityType The type of entity being processed
|
|
11
|
+
* @param batchErrors Array of batch errors containing failed entities
|
|
12
|
+
* @returns Set of primary keys for failed records
|
|
13
|
+
*/
|
|
14
|
+
static createFailedRecordKeySet(entityType: ERPObjType, batchErrors: Array<{
|
|
15
|
+
message: string;
|
|
16
|
+
errorEntities: IToRESTApiObject[];
|
|
17
|
+
}>): Set<string>;
|
|
18
|
+
/**
|
|
19
|
+
* Filters out failed records, returning only successful ones
|
|
20
|
+
* @param entityType The type of entity being processed
|
|
21
|
+
* @param allRecords All records (typed objects) that were sent to the API
|
|
22
|
+
* @param failedKeySet Set of primary keys for records that failed
|
|
23
|
+
* @returns Array of records that succeeded
|
|
24
|
+
*/
|
|
25
|
+
static filterSuccessfulRecords(entityType: ERPObjType, allRecords: IToRESTApiObject[], failedKeySet: Set<string>): IToRESTApiObject[];
|
|
26
|
+
/**
|
|
27
|
+
* Orchestrates the caching of successful records on partial failure
|
|
28
|
+
* @param entityType The type of entity being processed
|
|
29
|
+
* @param toProcess All records that were sent to the API (all are now guaranteed to be typed objects)
|
|
30
|
+
* @param batchErrors Array of batch errors containing failed entities
|
|
31
|
+
* @param batchCacheManager The cache manager instance
|
|
32
|
+
*/
|
|
33
|
+
static cacheSuccessfulRecordsOnPartialFailure(entityType: ERPObjType, toProcess: IToRESTApiObject[], batchErrors: Array<{
|
|
34
|
+
message: string;
|
|
35
|
+
errorEntities: IToRESTApiObject[];
|
|
36
|
+
}>, batchCacheManager: BatchCacheManager): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Extracts error count and batch errors from MM API response for partial failures (HTTP 207)
|
|
39
|
+
* This supports all entities, including the slightly different format for labor tickets.
|
|
40
|
+
* In case of labor tickets, the updateErrors and insertErrors arrays are combined into errorEntities.
|
|
41
|
+
* @param mmApiResponse The full MM API response object
|
|
42
|
+
* @param entityType The type of entity being processed (determines response structure)
|
|
43
|
+
* @returns Object containing errorCount and batchErrors
|
|
44
|
+
* See MM207NonLaborTicketResponse and MM207LaborTicketResponse for response structure details
|
|
45
|
+
*/
|
|
46
|
+
static extractErrorDetails(mmApiResponse: MM207NonLaborTicketResponse | MM207LaborTicketResponse, entityType: ERPObjType): {
|
|
47
|
+
errorCount: number;
|
|
48
|
+
batchErrors: Array<{
|
|
49
|
+
message: string;
|
|
50
|
+
errorEntities: IToRESTApiObject[];
|
|
51
|
+
}>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Extracts error details from a 500 HTTP exception when it contains structured error data
|
|
55
|
+
* @param exception The caught exception from MM API call
|
|
56
|
+
* @param entityType The type of entity being processed
|
|
57
|
+
* @returns Object containing errorCount and batchErrors, or null if not a structured 500 error
|
|
58
|
+
* See MM500NonLaborTicketException and MM500LaborTicketException for exception structure details
|
|
59
|
+
*/
|
|
60
|
+
static extractErrorDetailsFrom500Exception(exception: unknown, entityType: ERPObjType): {
|
|
61
|
+
errorCount: number;
|
|
62
|
+
batchErrors: Array<{
|
|
63
|
+
message: string;
|
|
64
|
+
errorEntities: IToRESTApiObject[];
|
|
65
|
+
}>;
|
|
66
|
+
} | null;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=error-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-processor.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/error-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AAIvC;;GAEG;AACH,qBAAa,cAAc;IACzB;;;;;OAKG;IACH,MAAM,CAAC,wBAAwB,CAC7B,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,KAAK,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;KACnC,CAAC,GACD,GAAG,CAAC,MAAM,CAAC;IAuBd;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAC5B,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,gBAAgB,EAAE;IAuBrB;;;;;;OAMG;WACU,sCAAsC,CACjD,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,gBAAgB,EAAE,EAC7B,WAAW,EAAE,KAAK,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;KACnC,CAAC,EACF,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,IAAI,CAAC;IAqBhB;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CACxB,aAAa,EAAE,2BAA2B,GAAG,wBAAwB,EACrE,UAAU,EAAE,UAAU,GACrB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,KAAK,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;SACnC,CAAC,CAAC;KACJ;IAqGD;;;;;;OAMG;IACH,MAAM,CAAC,mCAAmC,CACxC,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,UAAU,GACrB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,KAAK,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;SACnC,CAAC,CAAC;KACJ,GAAG,IAAI;CAkKT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ERPType } from "../../types/erp-types";
|
|
2
|
+
import { IERPLaborTicketHandler } from "../../types/erp-connector";
|
|
3
|
+
/**
|
|
4
|
+
* Handles synchronization of labor tickets between MachineMetrics and ERP systems
|
|
5
|
+
*/
|
|
6
|
+
export declare class LaborTicketERPSynchronizer {
|
|
7
|
+
/**
|
|
8
|
+
* Synchronizes updated labor tickets from MachineMetrics to an ERP system
|
|
9
|
+
*/
|
|
10
|
+
static syncToERP(connectorType: ERPType, connector: IERPLaborTicketHandler): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Retries labor tickets that have failed to be created or updated in the ERP during the sync
|
|
13
|
+
*/
|
|
14
|
+
static retryFailed(connectorType: ERPType, connector: IERPLaborTicketHandler): Promise<void>;
|
|
15
|
+
private static writeLaborTicketIdToMM;
|
|
16
|
+
private static processLaborTicket;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=labor-ticket-erp-synchronizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labor-ticket-erp-synchronizer.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAOnE;;GAEG;AACH,qBAAa,0BAA0B;IACrC;;OAEG;WACU,SAAS,CACpB,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;IA4GhB;;OAEG;WACU,WAAW,CACtB,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;mBA+DK,sBAAsB;mBAetB,kBAAkB;CAkDxC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ERPObjType } from "../../types/erp-types";
|
|
2
|
+
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager";
|
|
3
|
+
import { IToRESTApiObject } from "../../services/mm-api-service";
|
|
4
|
+
import { WriteEntitiesToMMResult } from "./standard-process-drivers";
|
|
5
|
+
/**
|
|
6
|
+
* Handles processing of entities to the MachineMetrics API
|
|
7
|
+
*/
|
|
8
|
+
export declare class MMEntityProcessor {
|
|
9
|
+
/**
|
|
10
|
+
* Writes entities to MM API with deduplication and caching
|
|
11
|
+
*/
|
|
12
|
+
static writeEntities(entityType: ERPObjType, mmRecords: IToRESTApiObject[], batchCacheManager: BatchCacheManager | null): Promise<WriteEntitiesToMMResult>;
|
|
13
|
+
/**
|
|
14
|
+
* Deduplicates records against cache
|
|
15
|
+
* Returns the records to process and the result object
|
|
16
|
+
* If the batchCacheManager is provided, the records are deduplicated against the cache
|
|
17
|
+
* If the batchCacheManager is not provided, the records are not deduplicated
|
|
18
|
+
*/
|
|
19
|
+
private static _prepareAndDedupe;
|
|
20
|
+
/**
|
|
21
|
+
* Sends records to MM API
|
|
22
|
+
*/
|
|
23
|
+
private static _sendToAPI;
|
|
24
|
+
/**
|
|
25
|
+
* Handles exceptions from API calls, converting structured 500 errors to MMBatchValidationError
|
|
26
|
+
* @throws MMBatchValidationError for structured 500 errors
|
|
27
|
+
* @throws The original exception for all other errors
|
|
28
|
+
*/
|
|
29
|
+
private static _handleException;
|
|
30
|
+
/**
|
|
31
|
+
* Handles the MM API response based on HTTP status code, caching successful records
|
|
32
|
+
* and throwing exceptions for partial failures
|
|
33
|
+
*
|
|
34
|
+
* @returns The final result for success cases
|
|
35
|
+
* @throws MMBatchValidationError for partial success cases
|
|
36
|
+
* @throws Error for unknown status codes
|
|
37
|
+
*/
|
|
38
|
+
private static _handleResponse;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=mm-entity-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mm-entity-processor.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/mm-entity-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EACL,gBAAgB,EAcjB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,uBAAuB,EAExB,MAAM,4BAA4B,CAAC;AAGpC;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,aAAa,CACxB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,gBAAgB,EAAE,EAC7B,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAC1C,OAAO,CAAC,uBAAuB,CAAC;IAiCnC;;;;;OAKG;mBACkB,iBAAiB;IA+BtC;;OAEG;mBACkB,UAAU;IAsC/B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAgC/B;;;;;;;OAOG;mBACkB,eAAe;CAuErC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { ERPType, ERPObjType } from "../../types/erp-types";
|
|
2
|
+
import { IERPLaborTicketHandler } from "../../types/erp-connector";
|
|
3
|
+
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager";
|
|
4
|
+
import { IToRESTApiObject, MMSendWorkOrderBatch } from "../../services/mm-api-service";
|
|
5
|
+
/**
|
|
6
|
+
* The result of writing entities to the MachineMetrics API on complete success.
|
|
7
|
+
*/
|
|
8
|
+
export interface WriteEntitiesToMMResult {
|
|
9
|
+
message: string;
|
|
10
|
+
upsertedEntities: number;
|
|
11
|
+
localDedupeCount: number;
|
|
12
|
+
apiDedupeCount: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class MMBatchValidationError extends Error {
|
|
15
|
+
readonly upsertedEntities: number;
|
|
16
|
+
readonly localDedupeCount: number;
|
|
17
|
+
readonly apiDedupeCount: number;
|
|
18
|
+
readonly errorCount: number;
|
|
19
|
+
readonly httpStatus: number;
|
|
20
|
+
readonly batchErrors: Array<{
|
|
21
|
+
message: string;
|
|
22
|
+
errorEntities: IToRESTApiObject[];
|
|
23
|
+
}>;
|
|
24
|
+
constructor(options: {
|
|
25
|
+
message: string;
|
|
26
|
+
upsertedEntities: number;
|
|
27
|
+
localDedupeCount: number;
|
|
28
|
+
apiDedupeCount: number;
|
|
29
|
+
errorCount: number;
|
|
30
|
+
httpStatus: number;
|
|
31
|
+
batchErrors: Array<{
|
|
32
|
+
message: string;
|
|
33
|
+
errorEntities: IToRESTApiObject[];
|
|
34
|
+
}>;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A collection of standardized process drivers that orchestrate various synchronization
|
|
39
|
+
* and integration processes between systems. Use of these drivers is optional,
|
|
40
|
+
* and useful as a reference implementation for how to implement the various processes.
|
|
41
|
+
*/
|
|
42
|
+
export declare class StandardProcessDrivers {
|
|
43
|
+
/**
|
|
44
|
+
* Synchronizes updated labor tickets from MachineMetrics to an ERP system:
|
|
45
|
+
*
|
|
46
|
+
* Initializes a checkpoint that tracks the last time labor tickets were synced,
|
|
47
|
+
* fetches labor tickets from MM and converts them to the company timezone,
|
|
48
|
+
* creates or updates the labor ticket in the ERP via connector-specific implementations,
|
|
49
|
+
* updates the labor ticket id in MM on newly created labor tickets,
|
|
50
|
+
* and saves the checkpoint
|
|
51
|
+
*/
|
|
52
|
+
static syncLaborTicketsToERP(connectorType: ERPType, connector: IERPLaborTicketHandler): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Retries labor tickets that have failed to be created or updated in the ERP during the sync:
|
|
55
|
+
*
|
|
56
|
+
* Fetches failed labor tickets from MM, processes them, and updates the labor ticket id in MM.
|
|
57
|
+
* If the labor ticket is successfully created or updated, it is added to the list of successful labor ticket ids,
|
|
58
|
+
* which are then deleted from the list of failed labor ticket ids.
|
|
59
|
+
*/
|
|
60
|
+
static retryFailedLaborTickets(connectorType: ERPType, connector: IERPLaborTicketHandler): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Writes a batch of records to MM for a specific entity type by:
|
|
63
|
+
* 1. Deduplicating against cached records (localDedupeCount)
|
|
64
|
+
* 2. Sending non-duplicate records to the MM API (apiDedupeCount)
|
|
65
|
+
* 3. Storing successful records in cache
|
|
66
|
+
*
|
|
67
|
+
* An example usage pattern including comprehensive error handling:
|
|
68
|
+
* ```
|
|
69
|
+
* try {
|
|
70
|
+
* const result = await StandardProcessDrivers.writeEntitiesToMM(
|
|
71
|
+
* 'WorkOrders',
|
|
72
|
+
* workOrderRecords,
|
|
73
|
+
* batchCacheManager
|
|
74
|
+
* );
|
|
75
|
+
*
|
|
76
|
+
* // HTTP 200 - Complete success
|
|
77
|
+
* console.log(`✅ Success: ${result.message}`);
|
|
78
|
+
* console.log(`📊 Metrics: ${result.upsertedEntities} upserted, ${result.localDedupeCount} locally deduplicated, ${result.apiDedupeCount} API deduplicated`);
|
|
79
|
+
*
|
|
80
|
+
* } catch (error) {
|
|
81
|
+
* if (error instanceof MMBatchValidationError) {
|
|
82
|
+
* // HTTP 207 - Partial success with some validation errors
|
|
83
|
+
* // HTTP 500 - A specific type of which represent complete failure due to validation issues;
|
|
84
|
+
* // other 500 types represent failure due to other issues and are not converted to MMBatchValidationError
|
|
85
|
+
*
|
|
86
|
+
* console.log(`⚠️ Batch processing completed with errors (HTTP ${error.httpStatus})`);
|
|
87
|
+
* console.log(`📊 Metrics: ${error.upsertedEntities} upserted, ${error.localDedupeCount} locally deduplicated, ${error.apiDedupeCount} API deduplicated`);
|
|
88
|
+
* console.log(`❌ Error count: ${error.errorCount}`);
|
|
89
|
+
*
|
|
90
|
+
* // Process specific batch errors for retry or logging
|
|
91
|
+
* error.batchErrors.forEach((batchError, index) => {
|
|
92
|
+
* console.log(`Batch ${index + 1} error: ${batchError.message}`);
|
|
93
|
+
* console.log(`Affected entities:`, batchError.errorEntities);
|
|
94
|
+
*
|
|
95
|
+
* // Example: Queue failed entities for retry
|
|
96
|
+
* await queueForRetry(batchError.errorEntities);
|
|
97
|
+
* });
|
|
98
|
+
*
|
|
99
|
+
* // Decide whether to continue or halt based on httpStatus
|
|
100
|
+
* if (error.httpStatus === 207) {
|
|
101
|
+
* // Partial success - some records processed successfully
|
|
102
|
+
* console.log('⚠️ Continuing with partial success');
|
|
103
|
+
* } else if (error.httpStatus === 500) {
|
|
104
|
+
* // Complete failure - no records processed
|
|
105
|
+
* console.log('🛑 Complete failure - no records processed');
|
|
106
|
+
* throw error; // Re-throw if complete failure should halt the process
|
|
107
|
+
* }
|
|
108
|
+
*
|
|
109
|
+
* } else {
|
|
110
|
+
* // Other underlying errors (network issues, authentication, etc.)
|
|
111
|
+
* console.error('🚨 Unexpected error during MM API call:', error);
|
|
112
|
+
*
|
|
113
|
+
* // Example: Check for specific error types
|
|
114
|
+
* if (error.message?.includes('authentication')) {
|
|
115
|
+
* console.error('🔐 Authentication issue - check MM API credentials');
|
|
116
|
+
* } else if (error.message?.includes('network') || error.code === 'ECONNREFUSED') {
|
|
117
|
+
* console.error('🌐 Network connectivity issue - check MM API endpoint');
|
|
118
|
+
* }
|
|
119
|
+
*
|
|
120
|
+
* throw error; // Re-throw for upstream handling
|
|
121
|
+
* }
|
|
122
|
+
* }
|
|
123
|
+
* ```
|
|
124
|
+
*
|
|
125
|
+
* @param entityType The type of entity being processed
|
|
126
|
+
* @param mmRecords The records to process
|
|
127
|
+
* @param batchCacheManager The batch cache manager instance; pass in null if caching is not desired
|
|
128
|
+
*
|
|
129
|
+
* @returns WriteEntitiesToMMResult on complete success (HTTP 200)
|
|
130
|
+
* @throws MMBatchValidationError on partial success (HTTP 207) or complete failure (HTTP 500) with structured error details
|
|
131
|
+
* @throws Error on other underlying issues (network, authentication, etc.)
|
|
132
|
+
*/
|
|
133
|
+
static writeEntitiesToMM(entityType: ERPObjType, mmRecords: IToRESTApiObject[], batchCacheManager: BatchCacheManager | null): Promise<WriteEntitiesToMMResult>;
|
|
134
|
+
/**
|
|
135
|
+
* Writes a batch of Work Order related entities to MM maintaining referential integrity by:
|
|
136
|
+
* 1. Processing parts first (base entities)
|
|
137
|
+
* 2. Processing part operations (depends on parts)
|
|
138
|
+
* 3. Processing work orders (depends on parts)
|
|
139
|
+
* 4. Processing work order operations (depends on work orders and part operations)
|
|
140
|
+
*
|
|
141
|
+
* This ensures all foreign key constraints are satisfied and prevents referential integrity errors.
|
|
142
|
+
*
|
|
143
|
+
* @param workOrderBatch The batch containing all related entities
|
|
144
|
+
* @param batchCacheManager The batch cache manager instance; pass in null if caching is not desired
|
|
145
|
+
*
|
|
146
|
+
* @returns Combined results from all entity processing
|
|
147
|
+
* @throws MMBatchValidationError on partial success or complete failure with structured error details
|
|
148
|
+
* @throws Error on other underlying issues (network, authentication, etc.)
|
|
149
|
+
*/
|
|
150
|
+
static writeWorkOrderBatchToMM(workOrderBatch: MMSendWorkOrderBatch, batchCacheManager: BatchCacheManager | null): Promise<{
|
|
151
|
+
parts: WriteEntitiesToMMResult;
|
|
152
|
+
partOperations: WriteEntitiesToMMResult;
|
|
153
|
+
workOrders: WriteEntitiesToMMResult;
|
|
154
|
+
workOrderOperations: WriteEntitiesToMMResult;
|
|
155
|
+
}>;
|
|
156
|
+
/**
|
|
157
|
+
* Processes flattened work order data and syncs it to MM maintaining referential integrity.
|
|
158
|
+
*
|
|
159
|
+
* This method expects flattened data where each row contains both work order and operation information
|
|
160
|
+
* with camelCase field names matching the GraphQL schema. It will automatically extract and deduplicate
|
|
161
|
+
* parts, part operations, work orders, and work order operations, then process them in the correct order
|
|
162
|
+
* to maintain referential integrity.
|
|
163
|
+
*
|
|
164
|
+
* @param flattenedData Array of flattened rows containing both work order and operation data (camelCase fields)
|
|
165
|
+
* @param batchCacheManager The batch cache manager instance; pass in null if caching is not desired
|
|
166
|
+
*
|
|
167
|
+
* @returns Combined results from all entity processing with detailed logging information
|
|
168
|
+
* @throws MMBatchValidationError on partial success or complete failure with structured error details
|
|
169
|
+
* @throws Error on other underlying issues (network, authentication, etc.)
|
|
170
|
+
*/
|
|
171
|
+
static syncWorkOrderBatchFromFlattened(flattenedData: any[], batchCacheManager: BatchCacheManager | null): Promise<{
|
|
172
|
+
parts: WriteEntitiesToMMResult;
|
|
173
|
+
partOperations: WriteEntitiesToMMResult;
|
|
174
|
+
workOrders: WriteEntitiesToMMResult;
|
|
175
|
+
workOrderOperations: WriteEntitiesToMMResult;
|
|
176
|
+
}>;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=standard-process-drivers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-process-drivers.d.ts","sourceRoot":"","sources":["../../../src/utils/standard-process-drivers/standard-process-drivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EAKrB,MAAM,+BAA+B,CAAC;AAIvC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,SAAgB,gBAAgB,EAAE,MAAM,CAAC;IACzC,SAAgB,gBAAgB,EAAE,MAAM,CAAC;IACzC,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,WAAW,EAAE,KAAK,CAAC;QACjC,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;KACnC,CAAC,CAAC;gBAES,OAAO,EAAE;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,KAAK,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,EAAE,gBAAgB,EAAE,CAAC;SACnC,CAAC,CAAC;KACJ;CAUF;AAED;;;;GAIG;AACH,qBAAa,sBAAsB;IACjC;;;;;;;;OAQG;WACU,qBAAqB,CAChC,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;OAMG;WACU,uBAAuB,CAClC,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuEG;WACU,iBAAiB,CAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,gBAAgB,EAAE,EAC7B,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAC1C,OAAO,CAAC,uBAAuB,CAAC;IAQnC;;;;;;;;;;;;;;;OAeG;WACU,uBAAuB,CAClC,cAAc,EAAE,oBAAoB,EACpC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAC1C,OAAO,CAAC;QACT,KAAK,EAAE,uBAAuB,CAAC;QAC/B,cAAc,EAAE,uBAAuB,CAAC;QACxC,UAAU,EAAE,uBAAuB,CAAC;QACpC,mBAAmB,EAAE,uBAAuB,CAAC;KAC9C,CAAC;IAuCF;;;;;;;;;;;;;;OAcG;WACU,+BAA+B,CAC1C,aAAa,EAAE,GAAG,EAAE,EACpB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAC1C,OAAO,CAAC;QACT,KAAK,EAAE,uBAAuB,CAAC;QAC/B,cAAc,EAAE,uBAAuB,CAAC;QACxC,UAAU,EAAE,uBAAuB,CAAC;QACpC,mBAAmB,EAAE,uBAAuB,CAAC;KAC9C,CAAC;CAkMH"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates the difference in hours between two timestamps
|
|
3
|
+
* @param startTime ISO timestamp string
|
|
4
|
+
* @param endTime ISO timestamp string
|
|
5
|
+
* @param timezoneOffset timezone offset in hours
|
|
6
|
+
* @returns number representing hours difference, rounded to 3 decimal places
|
|
7
|
+
*/
|
|
8
|
+
export declare function calculateTimeDifferenceInHours(startTime: string | null | undefined, endTime: string | null | undefined, timezoneOffset: number): number;
|
|
9
|
+
export declare const getSecondsOfDay: (timestamp: string | null) => string | null;
|
|
10
|
+
/**
|
|
11
|
+
* Apply timezone offsets to specified datetime fields in an object
|
|
12
|
+
* @param item The object to transform
|
|
13
|
+
* @param fields The fields to apply timezone offset to
|
|
14
|
+
* @param timezoneOffset The timezone offset to apply
|
|
15
|
+
* @returns The transformed object
|
|
16
|
+
*/
|
|
17
|
+
export declare const applyTimezoneOffsetsToFields: (item: Record<string, string>, fields: string[], timezoneOffset: number) => Record<string, string>;
|
|
18
|
+
interface TimezoneOffsetParams {
|
|
19
|
+
maxRetries: number;
|
|
20
|
+
retryIntervalMs: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Gets the timezone offset for the company and sets it in the cache
|
|
24
|
+
* The cached offset can be acquired from getCachedTimezoneOffset() in "./local-data-store/jobs-shared-data"
|
|
25
|
+
*
|
|
26
|
+
* @param params.maxRetries Maximum number of retry attempts
|
|
27
|
+
* @param params.retryIntervalMs Time to wait between retries in milliseconds
|
|
28
|
+
*/
|
|
29
|
+
export declare const getTimezoneOffsetAndPersist: (params?: TimezoneOffsetParams) => Promise<void>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=time-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-utils.d.ts","sourceRoot":"","sources":["../../src/utils/time-utils.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,cAAc,EAAE,MAAM,GACrB,MAAM,CA2BR;AAED,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,GAAG,IAAI,kBASvD,CAAC;AAEF;;;;;;GAMG;AAEH,eAAO,MAAM,4BAA4B,GACvC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,QAAQ,MAAM,EAAE,EAChB,gBAAgB,MAAM,KACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAcvB,CAAC;AAEF,UAAU,oBAAoB;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GACtC,SAAQ,oBAGP,KACA,OAAO,CAAC,IAAI,CA0Bd,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gets the timezone offset in hours for the company's timezone
|
|
3
|
+
* @returns Promise<number> The timezone offset in hours
|
|
4
|
+
* @throws Error if unable to fetch timezone information
|
|
5
|
+
*/
|
|
6
|
+
export declare const getTimezoneOffset: () => Promise<number>;
|
|
7
|
+
/**
|
|
8
|
+
* Converts a UTC/Zulu time to local time based on the provided timezone offset
|
|
9
|
+
* @param zuluTime The UTC/Zulu time to convert
|
|
10
|
+
* @param timezoneOffset The timezone offset in hours
|
|
11
|
+
* @returns The converted local time, or undefined if input is null/undefined
|
|
12
|
+
*/
|
|
13
|
+
export declare const convertToLocalTime: (zuluTime: string | Date | null | undefined, timezoneOffset: number) => Date | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Formats a date with the timezone offset in ISO format with offset
|
|
16
|
+
* @param date The date string in format YYYY-MM-DD HH:mm:ss or YYYY-MM-DDTHH:mm:ss
|
|
17
|
+
* @param timezoneOffset The timezone offset in hours
|
|
18
|
+
* @returns The formatted date string in format: YYYY-MM-DDTHH:mm:ss+/-HH:MM
|
|
19
|
+
*/
|
|
20
|
+
export declare const formatDateWithTZOffset: (date: string | null | undefined, timezoneOffset: number) => string | undefined;
|
|
21
|
+
//# sourceMappingURL=timezone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../src/utils/timezone.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,MAAM,CA6CxD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,EAC1C,gBAAgB,MAAM,KACrB,IAAI,GAAG,SAIT,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,gBAAgB,MAAM,KACrB,MAAM,GAAG,SAgBX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trimObjectValues.d.ts","sourceRoot":"","sources":["../../src/utils/trimObjectValues.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,KAAG,CAQ3D,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts unique rows from data based on specified fields and sorts by up to two fields
|
|
3
|
+
* @param data Array of data objects
|
|
4
|
+
* @param fields Array of field names to use as a unique keys
|
|
5
|
+
* @param sortFields Optional array of field names to sort by (up to two fields)
|
|
6
|
+
* @returns Array of unique objects based on the specified fields, or an empty array if data is empty
|
|
7
|
+
*/
|
|
8
|
+
export declare function getUniqueRows<T extends Record<string, unknown>>(data: T[], fields: (keyof T)[], sortFields?: (keyof T)[]): T[];
|
|
9
|
+
//# sourceMappingURL=uniqueRows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniqueRows.d.ts","sourceRoot":"","sources":["../../src/utils/uniqueRows.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,IAAI,EAAE,CAAC,EAAE,EACT,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EACnB,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GACvB,CAAC,EAAE,CA4BL"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@machinemetrics/mm-erp-sdk",
|
|
3
|
+
"description": "A library for syncing data between MachineMetrics and ERP systems",
|
|
4
|
+
"version": "0.1.1-beta.1",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "machinemetrics",
|
|
7
|
+
"main": "dist/mm-erp-sdk.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"source": "src/index.ts",
|
|
10
|
+
"type": "module",
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": ">=20"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "vite build && tsc --project tsconfig.declarations.json",
|
|
16
|
+
"start": "vite build --watch",
|
|
17
|
+
"type-check": "tsc --noEmit"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@azure/msal-node": "^2.12.0",
|
|
21
|
+
"@ladjs/graceful": "^4.2.0",
|
|
22
|
+
"axios": "^1.7.3",
|
|
23
|
+
"axios-retry": "^4.5.0",
|
|
24
|
+
"better-sqlite3": "^11.3.0",
|
|
25
|
+
"bree": "^9.2.4",
|
|
26
|
+
"dotenv": "^16.4.5",
|
|
27
|
+
"json-stable-stringify": "^1.3.0",
|
|
28
|
+
"knex": "^3.1.0",
|
|
29
|
+
"lodash": "^4.17.21",
|
|
30
|
+
"mssql": "^11.0.1",
|
|
31
|
+
"winston": "^3.14.0",
|
|
32
|
+
"winston-daily-rotate-file": "^5.0.0",
|
|
33
|
+
"xxhashjs": "^0.2.2",
|
|
34
|
+
"zod": "^3.24.1"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/json-stable-stringify": "^1.1.0",
|
|
38
|
+
"@types/lodash": "^4.17.10",
|
|
39
|
+
"@types/mssql": "^9.1.6",
|
|
40
|
+
"@types/node": "^20.0.0",
|
|
41
|
+
"@types/xxhashjs": "^0.2.4",
|
|
42
|
+
"prettier": "^3.3.3",
|
|
43
|
+
"typescript": "^5.8.3",
|
|
44
|
+
"vite": "^5.3.4"
|
|
45
|
+
},
|
|
46
|
+
"files": [
|
|
47
|
+
"dist",
|
|
48
|
+
"src"
|
|
49
|
+
]
|
|
50
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main entry point for the MM ERP Connector SDK.
|
|
3
|
+
* This file exports the public API that client code should use.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Core interfaces and types
|
|
7
|
+
export type { IERPConnector } from "./types/erp-connector";
|
|
8
|
+
export { ERPType, ERPObjType } from "./types/erp-types";
|
|
9
|
+
export type { ERPPagination, ERPResponse, ERPObject } from "./types/erp-types";
|
|
10
|
+
|
|
11
|
+
// Configuration interfaces
|
|
12
|
+
export type { ErpApiConnectionParams } from "./services/data-sync-service/configuration-manager";
|
|
13
|
+
export { getErpApiConnectionParams } from "./services/data-sync-service/configuration-manager";
|
|
14
|
+
export { buildLogicalCondition } from "./services/erp-api-services/rest/get-query-params";
|
|
15
|
+
export type { ERPApiConfig } from "./services/erp-api-services/types";
|
|
16
|
+
|
|
17
|
+
// MM API client and types
|
|
18
|
+
export { MMApiClient } from "./services/mm-api-service";
|
|
19
|
+
export type {
|
|
20
|
+
MMReceiveLaborTicket,
|
|
21
|
+
MMReceiveLaborTicketReason,
|
|
22
|
+
MMReceiveLaborTicketWorkOrderOperation,
|
|
23
|
+
IToRESTApiObject,
|
|
24
|
+
} from "./services/mm-api-service";
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
MMSendPerson,
|
|
28
|
+
MMSendResource,
|
|
29
|
+
MMSendPart,
|
|
30
|
+
MMSendPartOperation,
|
|
31
|
+
MMSendWorkOrder,
|
|
32
|
+
MMSendWorkOrderOperation,
|
|
33
|
+
MMSendReason,
|
|
34
|
+
MMSendLaborTicket,
|
|
35
|
+
} from "./services/mm-api-service";
|
|
36
|
+
|
|
37
|
+
export type { MMSendWorkOrderBatch } from "./services/mm-api-service";
|
|
38
|
+
|
|
39
|
+
// Utility functions that are safe for client use
|
|
40
|
+
export {
|
|
41
|
+
getUniqueRows,
|
|
42
|
+
removeExtraneousFields,
|
|
43
|
+
getPayloadWithoutIDField,
|
|
44
|
+
trimObjectValues,
|
|
45
|
+
cleanupNumbers,
|
|
46
|
+
addNewFieldFromExternalSource,
|
|
47
|
+
addNewFieldFromLookupField,
|
|
48
|
+
formatDateWithTZOffset,
|
|
49
|
+
applyTimezoneOffsetsToFields,
|
|
50
|
+
convertToLocalTime,
|
|
51
|
+
} from "./utils";
|
|
52
|
+
|
|
53
|
+
// HTTP client factory and types for custom API integrations
|
|
54
|
+
export { HTTPClientFactory } from "./utils/http-client";
|
|
55
|
+
export type { HTTPResponse } from "./utils/http-client";
|
|
56
|
+
|
|
57
|
+
// Application initialization utilities
|
|
58
|
+
export { ApplicationInitializer } from "./utils/application-initializer";
|
|
59
|
+
|
|
60
|
+
// Data sync service
|
|
61
|
+
export { runDataSyncService } from "./services/data-sync-service";
|
|
62
|
+
|
|
63
|
+
// Logging service
|
|
64
|
+
export { logger } from "./services/reporting-service";
|
|
65
|
+
|
|
66
|
+
// Labor ticket handler interface
|
|
67
|
+
export type { IERPLaborTicketHandler } from "./types/erp-connector";
|
|
68
|
+
|
|
69
|
+
// Process drivers and utilities
|
|
70
|
+
export { StandardProcessDrivers, getCachedTimezoneOffset } from "./utils";
|
|
71
|
+
|
|
72
|
+
// API services
|
|
73
|
+
export { RestAPIService } from "./services/erp-api-services/rest/rest-api-service";
|
|
74
|
+
export { ErrorHandler } from "./services/erp-api-services/errors";
|
|
75
|
+
export type {
|
|
76
|
+
QueryParams,
|
|
77
|
+
PaginatedAPIResponse,
|
|
78
|
+
} from "./services/erp-api-services/rest/get-query-params";
|
|
79
|
+
export { OAuthClient } from "./services/erp-api-services/oauth-client";
|
|
80
|
+
export type { OAuthConfig } from "./services/erp-api-services/oauth-client";
|
|
81
|
+
export { GraphQLService } from "./services/erp-api-services/graphql/graphql-service";
|
|
82
|
+
export type { GraphQLServerError } from "./services/erp-api-services/graphql/types";
|
|
83
|
+
|
|
84
|
+
// Caching services
|
|
85
|
+
export { BatchCacheManager } from "./services/caching-service/batch-cache-manager";
|
|
86
|
+
|
|
87
|
+
// Configuration services
|
|
88
|
+
export {
|
|
89
|
+
CoreConfiguration,
|
|
90
|
+
getSQLServerConfiguration,
|
|
91
|
+
} from "./services/data-sync-service/configuration-manager";
|
|
92
|
+
|
|
93
|
+
// SQL Server services
|
|
94
|
+
export {
|
|
95
|
+
SqlServerService,
|
|
96
|
+
SqlServerHelper,
|
|
97
|
+
} from "./services/sql-server-erp-service";
|
|
98
|
+
export type { SQLInput } from "./services/sql-server-erp-service";
|
package/src/knexfile.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Knex } from "knex";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
|
|
7
|
+
const config: { [key: string]: Knex.Config } = {
|
|
8
|
+
local: {
|
|
9
|
+
client: "better-sqlite3",
|
|
10
|
+
connection: {
|
|
11
|
+
filename: "./local.sqlite3",
|
|
12
|
+
},
|
|
13
|
+
useNullAsDefault: true,
|
|
14
|
+
migrations: {
|
|
15
|
+
directory: path.join(__dirname, "migrations"),
|
|
16
|
+
extension: "js",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default config;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Knex } from "knex";
|
|
2
|
+
|
|
3
|
+
export async function up(knex: Knex): Promise<void> {
|
|
4
|
+
await knex.schema.createTable("cache", (table) => {
|
|
5
|
+
table.increments("id");
|
|
6
|
+
table.jsonb("value").notNullable();
|
|
7
|
+
table.jsonb("type").notNullable().index();
|
|
8
|
+
table.string("key").unique().notNullable();
|
|
9
|
+
table.timestamps(true, true);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function down(knex: Knex): Promise<void> {
|
|
14
|
+
await knex.schema.dropTable("cache");
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Knex } from "knex";
|
|
2
|
+
|
|
3
|
+
export async function up(knex: Knex): Promise<void> {
|
|
4
|
+
await knex.schema.createTable("sdk_cache", (table) => {
|
|
5
|
+
table.increments("id");
|
|
6
|
+
table.string("type").notNullable().index();
|
|
7
|
+
table.string("key").notNullable();
|
|
8
|
+
table.timestamp("created_at").defaultTo(knex.fn.now());
|
|
9
|
+
table.unique(["type", "key"]); // Composite unique constraint
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function down(knex: Knex): Promise<void> {
|
|
14
|
+
await knex.schema.dropTable("sdk_cache");
|
|
15
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Knex } from "knex";
|
|
2
|
+
|
|
3
|
+
export async function up(knex: Knex): Promise<void> {
|
|
4
|
+
await knex.schema.createTable("record_tracking", (table) => {
|
|
5
|
+
table.increments("id");
|
|
6
|
+
table.integer("entityType").notNullable().index();
|
|
7
|
+
table
|
|
8
|
+
.datetime("lastValue", { useTz: true, precision: 3 })
|
|
9
|
+
.notNullable()
|
|
10
|
+
.index();
|
|
11
|
+
table.string("recordId").notNullable().index();
|
|
12
|
+
table.timestamps(true, true);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export async function down(knex: Knex): Promise<void> {
|
|
17
|
+
await knex.schema.dropTable("record_tracking");
|
|
18
|
+
}
|