@machinemetrics/mm-erp-sdk 0.1.9-beta.6 → 0.2.0-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 +5 -0
- package/dist/index.d.ts +42 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +19 -0
- package/dist/knexfile.js.map +1 -0
- package/dist/migrations/20241015162631_create_cache_table.d.ts +4 -0
- package/dist/migrations/20241015162631_create_cache_table.d.ts.map +1 -0
- package/dist/migrations/20241015162631_create_cache_table.js +11 -15
- package/dist/migrations/20241015162631_create_cache_table.js.map +1 -1
- package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts +4 -0
- package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts.map +1 -0
- package/dist/migrations/20241015162632_create_sdk_cache_table.js +11 -15
- package/dist/migrations/20241015162632_create_sdk_cache_table.js.map +1 -1
- package/dist/migrations/20250103162631_create_record_tracking_table.d.ts +4 -0
- package/dist/migrations/20250103162631_create_record_tracking_table.d.ts.map +1 -0
- package/dist/migrations/20250103162631_create_record_tracking_table.js +14 -15
- package/dist/migrations/20250103162631_create_record_tracking_table.js.map +1 -1
- package/dist/services/caching-service/batch-cache-manager.d.ts +1 -1
- package/dist/services/caching-service/batch-cache-manager.d.ts.map +1 -1
- package/dist/services/caching-service/batch-cache-manager.js +84 -0
- package/dist/services/caching-service/batch-cache-manager.js.map +1 -0
- package/dist/services/caching-service/hashed-cache-manager.d.ts +2 -2
- package/dist/services/caching-service/hashed-cache-manager.d.ts.map +1 -1
- package/dist/services/caching-service/hashed-cache-manager.js +223 -0
- package/dist/services/caching-service/hashed-cache-manager.js.map +1 -0
- package/dist/services/caching-service/index.d.ts +1 -1
- package/dist/services/caching-service/index.d.ts.map +1 -1
- package/dist/services/caching-service/index.js +2 -0
- package/dist/services/caching-service/index.js.map +1 -0
- package/dist/services/caching-service/record-tracking-manager.d.ts +1 -1
- package/dist/services/caching-service/record-tracking-manager.d.ts.map +1 -1
- package/dist/services/caching-service/record-tracking-manager.js +28 -0
- package/dist/services/caching-service/record-tracking-manager.js.map +1 -0
- package/dist/services/data-sync-service/configuration-manager.d.ts +1 -1
- package/dist/services/data-sync-service/configuration-manager.d.ts.map +1 -1
- package/dist/services/data-sync-service/configuration-manager.js +163 -0
- package/dist/services/data-sync-service/configuration-manager.js.map +1 -0
- package/dist/services/data-sync-service/data-sync-service.d.ts.map +1 -1
- package/dist/services/data-sync-service/data-sync-service.js +95 -0
- package/dist/services/data-sync-service/data-sync-service.js.map +1 -0
- package/dist/services/data-sync-service/index.d.ts +3 -3
- package/dist/services/data-sync-service/index.d.ts.map +1 -1
- package/dist/services/data-sync-service/index.js +10 -0
- package/dist/services/data-sync-service/index.js.map +1 -0
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +42 -40
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -1
- package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/from-erp.js +50 -37
- package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +38 -36
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -1
- package/dist/services/data-sync-service/jobs/run-migrations.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/run-migrations.js +24 -22
- package/dist/services/data-sync-service/jobs/run-migrations.js.map +1 -1
- package/dist/services/data-sync-service/jobs/to-erp.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/to-erp.js +50 -46
- package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -1
- package/dist/services/erp-api-services/errors.d.ts +1 -1
- package/dist/services/erp-api-services/errors.d.ts.map +1 -1
- package/dist/services/erp-api-services/errors.js +83 -0
- package/dist/services/erp-api-services/errors.js.map +1 -0
- package/dist/services/erp-api-services/graphql/graphql-service.d.ts +2 -2
- package/dist/services/erp-api-services/graphql/graphql-service.d.ts.map +1 -1
- package/dist/services/erp-api-services/graphql/graphql-service.js +102 -0
- package/dist/services/erp-api-services/graphql/graphql-service.js.map +1 -0
- package/dist/services/erp-api-services/graphql/types.js +6 -0
- package/dist/services/erp-api-services/graphql/types.js.map +1 -0
- package/dist/services/erp-api-services/index.d.ts +8 -8
- package/dist/services/erp-api-services/index.d.ts.map +1 -1
- package/dist/services/erp-api-services/index.js +13 -0
- package/dist/services/erp-api-services/index.js.map +1 -0
- package/dist/services/erp-api-services/oauth-client.js +41 -0
- package/dist/services/erp-api-services/oauth-client.js.map +1 -0
- package/dist/services/erp-api-services/rest/get-query-params.js +23 -0
- package/dist/services/erp-api-services/rest/get-query-params.js.map +1 -0
- package/dist/services/erp-api-services/rest/rest-api-service.d.ts +2 -2
- package/dist/services/erp-api-services/rest/rest-api-service.d.ts.map +1 -1
- package/dist/services/erp-api-services/rest/rest-api-service.js +163 -0
- package/dist/services/erp-api-services/rest/rest-api-service.js.map +1 -0
- package/dist/services/erp-api-services/types.d.ts +2 -2
- package/dist/services/erp-api-services/types.d.ts.map +1 -1
- package/dist/services/erp-api-services/types.js +2 -0
- package/dist/services/erp-api-services/types.js.map +1 -0
- package/dist/services/mm-api-service/index.d.ts +6 -13
- package/dist/services/mm-api-service/index.d.ts.map +1 -1
- package/dist/services/mm-api-service/index.js +15 -0
- package/dist/services/mm-api-service/index.js.map +1 -0
- package/dist/services/mm-api-service/mm-api-service.d.ts +7 -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 +519 -0
- package/dist/services/mm-api-service/mm-api-service.js.map +1 -0
- package/dist/services/mm-api-service/token-mgr.js +113 -0
- package/dist/services/mm-api-service/token-mgr.js.map +1 -0
- package/dist/services/mm-api-service/types/checkpoint.js +2 -0
- package/dist/services/mm-api-service/types/checkpoint.js.map +1 -0
- package/dist/services/mm-api-service/types/entity-transformer.d.ts +2 -2
- package/dist/services/mm-api-service/types/entity-transformer.d.ts.map +1 -1
- package/dist/services/mm-api-service/types/entity-transformer.js +186 -0
- package/dist/services/mm-api-service/types/entity-transformer.js.map +1 -0
- package/dist/services/mm-api-service/types/mm-response-interfaces.js +34 -0
- package/dist/services/mm-api-service/types/mm-response-interfaces.js.map +1 -0
- package/dist/services/mm-api-service/types/receive-types.js +55 -0
- package/dist/services/mm-api-service/types/receive-types.js.map +1 -0
- package/dist/services/mm-api-service/types/send-types.js +337 -0
- package/dist/services/mm-api-service/types/send-types.js.map +1 -0
- package/dist/services/psql-erp-service/configuration.js +2 -0
- package/dist/services/psql-erp-service/configuration.js.map +1 -0
- package/dist/services/psql-erp-service/index.d.ts +3 -3
- package/dist/services/psql-erp-service/index.d.ts.map +1 -1
- package/dist/services/psql-erp-service/index.js +10 -0
- package/dist/services/psql-erp-service/index.js.map +1 -0
- package/dist/services/psql-erp-service/internal/types/psql-types.js +5 -0
- package/dist/services/psql-erp-service/internal/types/psql-types.js.map +1 -0
- package/dist/services/psql-erp-service/psql-helpers.js +99 -0
- package/dist/services/psql-erp-service/psql-helpers.js.map +1 -0
- package/dist/services/psql-erp-service/psql-service.d.ts +2 -2
- package/dist/services/psql-erp-service/psql-service.d.ts.map +1 -1
- package/dist/services/psql-erp-service/psql-service.js +187 -0
- package/dist/services/psql-erp-service/psql-service.js.map +1 -0
- package/dist/services/reporting-service/index.d.ts +1 -1
- package/dist/services/reporting-service/index.d.ts.map +1 -1
- package/dist/services/reporting-service/index.js +5 -0
- package/dist/services/reporting-service/index.js.map +1 -0
- package/dist/services/reporting-service/logger.d.ts.map +1 -1
- package/dist/services/reporting-service/logger.js +221 -0
- package/dist/services/reporting-service/logger.js.map +1 -0
- package/dist/services/sql-server-erp-service/configuration.js +2 -0
- package/dist/services/sql-server-erp-service/configuration.js.map +1 -0
- package/dist/services/sql-server-erp-service/index.d.ts +3 -3
- package/dist/services/sql-server-erp-service/index.d.ts.map +1 -1
- package/dist/services/sql-server-erp-service/index.js +11 -0
- package/dist/services/sql-server-erp-service/index.js.map +1 -0
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts +2 -2
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts.map +1 -1
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js +50 -0
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js.map +1 -0
- package/dist/services/sql-server-erp-service/internal/sql-server-config.js +40 -0
- package/dist/services/sql-server-erp-service/internal/sql-server-config.js.map +1 -0
- package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js +36 -0
- package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js.map +1 -0
- package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js +2 -0
- package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js.map +1 -0
- package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts +3 -3
- package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts.map +1 -1
- package/dist/services/sql-server-erp-service/sql-server-helpers.js +66 -0
- package/dist/services/sql-server-erp-service/sql-server-helpers.js.map +1 -0
- package/dist/services/sql-server-erp-service/sql-server-service.d.ts +2 -2
- package/dist/services/sql-server-erp-service/sql-server-service.d.ts.map +1 -1
- package/dist/services/sql-server-erp-service/sql-server-service.js +154 -0
- package/dist/services/sql-server-erp-service/sql-server-service.js.map +1 -0
- package/dist/services/sql-server-erp-service/types/sql-input-param.js +2 -0
- package/dist/services/sql-server-erp-service/types/sql-input-param.js.map +1 -0
- package/dist/services/sqlite-service/index.d.ts +1 -1
- package/dist/services/sqlite-service/index.d.ts.map +1 -1
- package/dist/services/sqlite-service/index.js +2 -0
- package/dist/services/sqlite-service/index.js.map +1 -0
- package/dist/services/sqlite-service/sqlite-coordinator.js +60 -0
- package/dist/services/sqlite-service/sqlite-coordinator.js.map +1 -0
- package/dist/types/erp-connector.d.ts +9 -2
- package/dist/types/erp-connector.d.ts.map +1 -1
- package/dist/types/erp-connector.js +2 -0
- package/dist/types/erp-connector.js.map +1 -0
- package/dist/types/erp-types.js +13 -0
- package/dist/types/erp-types.js.map +1 -0
- package/dist/types/flattened-work-order.d.ts +99 -0
- package/dist/types/flattened-work-order.d.ts.map +1 -0
- package/dist/types/flattened-work-order.js +2 -0
- package/dist/types/flattened-work-order.js.map +1 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/application-initializer.js +55 -0
- package/dist/utils/application-initializer.js.map +1 -0
- package/dist/utils/cleanup-numbers.js +6 -0
- package/dist/utils/cleanup-numbers.js.map +1 -0
- package/dist/utils/connector-factory.d.ts +1 -1
- package/dist/utils/connector-factory.d.ts.map +1 -1
- package/dist/utils/connector-factory.js +34 -0
- package/dist/utils/connector-factory.js.map +1 -0
- package/dist/utils/connector-log/log-deduper.d.ts +1 -1
- package/dist/utils/connector-log/log-deduper.d.ts.map +1 -1
- package/dist/utils/connector-log/log-deduper.js +240 -0
- package/dist/utils/connector-log/log-deduper.js.map +1 -0
- package/dist/utils/connector-log/mm-connector-logger-example.d.ts +1 -0
- package/dist/utils/connector-log/mm-connector-logger-example.js +88 -0
- package/dist/utils/connector-log/mm-connector-logger-example.js.map +1 -0
- package/dist/utils/connector-log/mm-connector-logger.d.ts +1 -1
- package/dist/utils/connector-log/mm-connector-logger.d.ts.map +1 -1
- package/dist/utils/connector-log/mm-connector-logger.js +151 -0
- package/dist/utils/connector-log/mm-connector-logger.js.map +1 -0
- package/dist/utils/data-transformation.js +38 -0
- package/dist/utils/data-transformation.js.map +1 -0
- package/dist/utils/env.d.ts +8 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +58 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/erp-timezone-utils.d.ts +20 -0
- package/dist/utils/erp-timezone-utils.d.ts.map +1 -0
- package/dist/utils/erp-timezone-utils.js +75 -0
- package/dist/utils/erp-timezone-utils.js.map +1 -0
- package/dist/utils/erp-type-from-entity.d.ts +1 -1
- package/dist/utils/erp-type-from-entity.d.ts.map +1 -1
- package/dist/utils/erp-type-from-entity.js +6 -0
- package/dist/utils/erp-type-from-entity.js.map +1 -0
- package/dist/utils/error-utils.js +21 -0
- package/dist/utils/error-utils.js.map +1 -0
- package/dist/utils/http-client.js +186 -0
- package/dist/utils/http-client.js.map +1 -0
- package/dist/utils/index.d.ts +34 -38
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +66 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/local-data-store/database-lock.js +68 -0
- package/dist/utils/local-data-store/database-lock.js.map +1 -0
- package/dist/utils/local-data-store/jobs-shared-data.d.ts +2 -0
- package/dist/utils/local-data-store/jobs-shared-data.d.ts.map +1 -1
- package/dist/utils/local-data-store/jobs-shared-data.js +118 -0
- package/dist/utils/local-data-store/jobs-shared-data.js.map +1 -0
- package/dist/utils/mm-labor-ticket-helpers.d.ts +4 -5
- package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -1
- package/dist/utils/mm-labor-ticket-helpers.js +28 -0
- package/dist/utils/mm-labor-ticket-helpers.js.map +1 -0
- package/dist/utils/removeExtraneousFields.d.ts +1 -1
- package/dist/utils/removeExtraneousFields.d.ts.map +1 -1
- package/dist/utils/removeExtraneousFields.js +16 -0
- package/dist/utils/removeExtraneousFields.js.map +1 -0
- package/dist/utils/removeIdFieldFromPayload.d.ts +1 -1
- package/dist/utils/removeIdFieldFromPayload.d.ts.map +1 -1
- package/dist/utils/removeIdFieldFromPayload.js +16 -0
- package/dist/utils/removeIdFieldFromPayload.js.map +1 -0
- package/dist/utils/resource-group.d.ts +1 -1
- package/dist/utils/resource-group.d.ts.map +1 -1
- package/dist/utils/resource-group.js +59 -0
- package/dist/utils/resource-group.js.map +1 -0
- package/dist/utils/standard-process-drivers/error-processor.d.ts +3 -3
- package/dist/utils/standard-process-drivers/error-processor.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/error-processor.js +262 -0
- package/dist/utils/standard-process-drivers/error-processor.js.map +1 -0
- package/dist/utils/standard-process-drivers/index.d.ts +3 -3
- package/dist/utils/standard-process-drivers/index.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/index.js +4 -0
- package/dist/utils/standard-process-drivers/index.js.map +1 -0
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +1 -1
- 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 +173 -0
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +1 -0
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +11 -5
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.js +174 -0
- package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +1 -0
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +12 -6
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.js +333 -0
- package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +1 -0
- package/dist/utils/time-utils.d.ts.map +1 -1
- package/dist/utils/time-utils.js +103 -0
- package/dist/utils/time-utils.js.map +1 -0
- package/dist/utils/timezone.js +105 -0
- package/dist/utils/timezone.js.map +1 -0
- package/dist/utils/trimObjectValues.js +11 -0
- package/dist/utils/trimObjectValues.js.map +1 -0
- package/dist/utils/uniqueRows.js +35 -0
- package/dist/utils/uniqueRows.js.map +1 -0
- package/package.json +8 -10
- package/src/index.ts +42 -45
- package/src/knexfile.ts +1 -0
- package/src/services/caching-service/batch-cache-manager.ts +2 -2
- package/src/services/caching-service/hashed-cache-manager.ts +5 -5
- package/src/services/caching-service/index.ts +1 -1
- package/src/services/caching-service/record-tracking-manager.ts +2 -2
- package/src/services/data-sync-service/configuration-manager.ts +52 -39
- package/src/services/data-sync-service/data-sync-service.ts +10 -19
- package/src/services/data-sync-service/index.ts +3 -3
- package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +5 -4
- package/src/services/data-sync-service/jobs/from-erp.ts +12 -6
- package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +4 -3
- package/src/services/data-sync-service/jobs/run-migrations.ts +4 -3
- package/src/services/data-sync-service/jobs/to-erp.ts +5 -8
- package/src/services/erp-api-services/errors.ts +3 -3
- package/src/services/erp-api-services/graphql/graphql-service.ts +5 -5
- package/src/services/erp-api-services/index.ts +8 -8
- package/src/services/erp-api-services/rest/rest-api-service.ts +4 -4
- package/src/services/erp-api-services/types.ts +2 -2
- package/src/services/mm-api-service/index.ts +6 -14
- package/src/services/mm-api-service/mm-api-service.ts +13 -30
- package/src/services/mm-api-service/token-mgr.ts +4 -4
- package/src/services/mm-api-service/types/entity-transformer.ts +3 -3
- package/src/services/psql-erp-service/index.ts +3 -3
- package/src/services/psql-erp-service/psql-service.ts +4 -4
- package/src/services/reporting-service/index.ts +1 -1
- package/src/services/reporting-service/logger.ts +116 -81
- package/src/services/sql-server-erp-service/index.ts +3 -3
- package/src/services/sql-server-erp-service/internal/sql-labor-ticket-operations.ts +2 -2
- package/src/services/sql-server-erp-service/internal/sql-transaction-manager.ts +1 -1
- package/src/services/sql-server-erp-service/sql-server-helpers.ts +6 -6
- package/src/services/sql-server-erp-service/sql-server-service.ts +4 -4
- package/src/services/sqlite-service/index.ts +1 -1
- package/src/services/sqlite-service/sqlite-coordinator.ts +2 -2
- package/src/types/erp-connector.ts +9 -2
- package/src/types/flattened-work-order.ts +108 -0
- package/src/types/index.ts +10 -2
- package/src/utils/application-initializer.ts +5 -5
- package/src/utils/connector-factory.ts +2 -2
- package/src/utils/connector-log/log-deduper.ts +2 -2
- package/src/utils/connector-log/mm-connector-logger.ts +3 -3
- package/src/utils/env.ts +75 -0
- package/src/utils/erp-timezone-utils.ts +99 -0
- package/src/utils/erp-type-from-entity.ts +1 -1
- package/src/utils/http-client.ts +2 -3
- package/src/utils/index.ts +38 -39
- package/src/utils/local-data-store/database-lock.ts +1 -1
- package/src/utils/local-data-store/jobs-shared-data.ts +2 -0
- package/src/utils/mm-labor-ticket-helpers.ts +12 -9
- package/src/utils/removeExtraneousFields.ts +1 -1
- package/src/utils/removeIdFieldFromPayload.ts +1 -1
- package/src/utils/resource-group.ts +2 -2
- package/src/utils/standard-process-drivers/error-processor.ts +5 -5
- package/src/utils/standard-process-drivers/index.ts +3 -3
- package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +16 -11
- package/src/utils/standard-process-drivers/mm-entity-processor.ts +14 -8
- package/src/utils/standard-process-drivers/standard-process-drivers.ts +39 -25
- package/src/utils/time-utils.ts +14 -3
- package/src/utils/timezone.ts +2 -2
- package/dist/config-CvA-mFWF.js +0 -418
- package/dist/config-CvA-mFWF.js.map +0 -1
- package/dist/connector-factory-BPm2GVVF.js +0 -30
- package/dist/connector-factory-BPm2GVVF.js.map +0 -1
- package/dist/hashed-cache-manager-B15NN8hK.js +0 -322
- package/dist/hashed-cache-manager-B15NN8hK.js.map +0 -1
- package/dist/index-D8qO1NyK.js +0 -192
- package/dist/index-D8qO1NyK.js.map +0 -1
- package/dist/knexfile-Bng2Ru9c.js +0 -20
- package/dist/knexfile-Bng2Ru9c.js.map +0 -1
- package/dist/logger-BWw0_z9q.js +0 -17557
- package/dist/logger-BWw0_z9q.js.map +0 -1
- package/dist/mm-erp-sdk.js +0 -4976
- package/dist/mm-erp-sdk.js.map +0 -1
- package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts +0 -30
- package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts.map +0 -1
- package/dist/services/mm-api-service/company-info.d.ts +0 -13
- package/dist/services/mm-api-service/company-info.d.ts.map +0 -1
- package/dist/services/nats-service/nats-service.d.ts +0 -114
- package/dist/services/nats-service/nats-service.d.ts.map +0 -1
- package/dist/services/nats-service/test-nats-subscriber.d.ts +0 -6
- package/dist/services/nats-service/test-nats-subscriber.d.ts.map +0 -1
- package/dist/utils/error-formatter.d.ts +0 -19
- package/dist/utils/error-formatter.d.ts.map +0 -1
- package/src/services/data-sync-service/nats-labor-ticket-listener.ts +0 -341
- package/src/services/mm-api-service/company-info.ts +0 -87
- package/src/services/nats-service/nats-service.ts +0 -351
- package/src/services/nats-service/test-nats-subscriber.ts +0 -96
- package/src/utils/error-formatter.ts +0 -205
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { DateTime } from "luxon";
|
|
2
|
+
import logger from "../services/reporting-service/logger.js";
|
|
3
|
+
import { getCachedTimezoneName } from "./local-data-store/jobs-shared-data.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Retrieves the ERP timezone name that should have been cached during initialization.
|
|
7
|
+
* @throws Error when the timezone cache has not been populated.
|
|
8
|
+
*/
|
|
9
|
+
export function getERPTimezone(): string {
|
|
10
|
+
const timezone = getCachedTimezoneName();
|
|
11
|
+
if (!timezone) {
|
|
12
|
+
throw new Error(
|
|
13
|
+
"ERP timezone is not cached. Run getTimezoneOffsetAndPersist() to populate it."
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
return timezone;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Converts a UTC ISO-8601 datetime string to the ERP's local timezone (also ISO-8601).
|
|
21
|
+
* @param utcDateTime ISO-8601 datetime string representing UTC time.
|
|
22
|
+
* @param timezone Optional timezone override; defaults to the cached ERP timezone.
|
|
23
|
+
* @returns ISO-8601 string in the ERP timezone.
|
|
24
|
+
*/
|
|
25
|
+
export function convertUtcDateTimeToErpLocal(
|
|
26
|
+
utcDateTime: string,
|
|
27
|
+
timezone?: string
|
|
28
|
+
): string {
|
|
29
|
+
if (!utcDateTime) {
|
|
30
|
+
throw new Error("convertUtcDateTimeToErpLocal requires a non-empty UTC datetime string");
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const targetZone = timezone ?? getERPTimezone();
|
|
34
|
+
const parsedUtc = DateTime.fromISO(utcDateTime, { zone: "utc" });
|
|
35
|
+
if (!parsedUtc.isValid) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
`Invalid UTC datetime "${utcDateTime}": ${parsedUtc.invalidReason}`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const localized = parsedUtc.setZone(targetZone);
|
|
42
|
+
if (!localized.isValid) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
`Unable to convert UTC datetime "${utcDateTime}" to target zone "${targetZone}": ${localized.invalidReason}`
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return localized.toISO();
|
|
49
|
+
} catch (error) {
|
|
50
|
+
logger.error("convertUtcDateTimeToErpLocal: Failed to convert datetime", {
|
|
51
|
+
utcDateTime,
|
|
52
|
+
error,
|
|
53
|
+
});
|
|
54
|
+
throw new Error(
|
|
55
|
+
"Failed to convert UTC datetime to ERP local timezone. See logs for details."
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Converts an ERP-local ISO-8601 datetime string to UTC (still ISO-8601).
|
|
62
|
+
* @param localDateTime ISO-8601 datetime string representing ERP local time.
|
|
63
|
+
* @param timezone Optional timezone override; defaults to the cached ERP timezone.
|
|
64
|
+
* @returns ISO-8601 string in UTC.
|
|
65
|
+
*/
|
|
66
|
+
export function convertErpLocalDateTimeToUtc(
|
|
67
|
+
localDateTime: string,
|
|
68
|
+
timezone?: string
|
|
69
|
+
): string {
|
|
70
|
+
if (!localDateTime) {
|
|
71
|
+
throw new Error("convertErpLocalDateTimeToUtc requires a non-empty local datetime string");
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const sourceZone = timezone ?? getERPTimezone();
|
|
75
|
+
const parsedLocal = DateTime.fromISO(localDateTime, { zone: sourceZone });
|
|
76
|
+
if (!parsedLocal.isValid) {
|
|
77
|
+
throw new Error(
|
|
78
|
+
`Invalid ERP local datetime "${localDateTime}" for zone "${sourceZone}": ${parsedLocal.invalidReason}`
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const utcDateTime = parsedLocal.setZone("utc");
|
|
83
|
+
if (!utcDateTime.isValid) {
|
|
84
|
+
throw new Error(
|
|
85
|
+
`Unable to convert ERP local datetime "${localDateTime}" to UTC: ${utcDateTime.invalidReason}`
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return utcDateTime.toISO();
|
|
90
|
+
} catch (error) {
|
|
91
|
+
logger.error("convertErpLocalDateTimeToUtc: Failed to convert datetime", {
|
|
92
|
+
localDateTime,
|
|
93
|
+
error,
|
|
94
|
+
});
|
|
95
|
+
throw new Error(
|
|
96
|
+
"Failed to convert ERP local datetime to UTC. See logs for details."
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
}
|
package/src/utils/http-client.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from "axios";
|
|
2
|
-
import logger from "../services/reporting-service/logger";
|
|
2
|
+
import logger from "../services/reporting-service/logger.js";
|
|
3
3
|
|
|
4
4
|
export class HTTPError extends Error {
|
|
5
5
|
constructor(
|
|
@@ -64,10 +64,9 @@ class AxiosClient implements HTTPClient {
|
|
|
64
64
|
* It can be convenient to set `baseURL` for an instance of axios to pass relative URLs to methods of that instance.
|
|
65
65
|
*/
|
|
66
66
|
constructor(baseUrl: string, retryAttempts: number) {
|
|
67
|
-
const timeout = parseInt(process.env.MM_API_TIMEOUT || "30000");
|
|
68
67
|
this.client = axios.create({
|
|
69
68
|
baseURL: baseUrl,
|
|
70
|
-
timeout:
|
|
69
|
+
timeout: 30000,
|
|
71
70
|
headers: {
|
|
72
71
|
"Content-Type": "application/json",
|
|
73
72
|
},
|
package/src/utils/index.ts
CHANGED
|
@@ -1,93 +1,92 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Utility functions for data manipulation
|
|
3
3
|
*/
|
|
4
|
-
export { getUniqueRows } from "./uniqueRows";
|
|
5
|
-
export { removeExtraneousFields } from "./removeExtraneousFields";
|
|
6
|
-
export { getPayloadWithoutIDField } from "./removeIdFieldFromPayload";
|
|
7
|
-
export { trimObjectValues } from "./trimObjectValues";
|
|
8
|
-
export { cleanupNumbers } from "./cleanup-numbers";
|
|
4
|
+
export { getUniqueRows } from "./uniqueRows.js";
|
|
5
|
+
export { removeExtraneousFields } from "./removeExtraneousFields.js";
|
|
6
|
+
export { getPayloadWithoutIDField } from "./removeIdFieldFromPayload.js";
|
|
7
|
+
export { trimObjectValues } from "./trimObjectValues.js";
|
|
8
|
+
export { cleanupNumbers } from "./cleanup-numbers.js";
|
|
9
9
|
export {
|
|
10
10
|
addNewFieldFromExternalSource,
|
|
11
11
|
addNewFieldFromLookupField,
|
|
12
|
-
} from "./data-transformation";
|
|
12
|
+
} from "./data-transformation.js";
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Timezone and time-related utilities
|
|
16
16
|
*/
|
|
17
|
-
export { getTimezoneOffsetAndPersist } from "./time-utils";
|
|
18
|
-
export { formatDateWithTZOffset, convertToLocalTime, toISOWithOffset } from "./timezone";
|
|
19
|
-
export { applyTimezoneOffsetsToFields } from "./time-utils";
|
|
20
|
-
export
|
|
17
|
+
export { getTimezoneOffsetAndPersist } from "./time-utils.js";
|
|
18
|
+
export { formatDateWithTZOffset, convertToLocalTime, toISOWithOffset } from "./timezone.js";
|
|
19
|
+
export { applyTimezoneOffsetsToFields } from "./time-utils.js";
|
|
20
|
+
export {
|
|
21
|
+
convertUtcDateTimeToErpLocal,
|
|
22
|
+
convertErpLocalDateTimeToUtc,
|
|
23
|
+
getERPTimezone,
|
|
24
|
+
} from "./erp-timezone-utils.js";
|
|
25
|
+
export * from "./time-utils.js";
|
|
21
26
|
|
|
22
27
|
/**
|
|
23
28
|
* Caching and record tracking utilities
|
|
24
29
|
*/
|
|
25
|
-
export { RecordTrackingManager } from "../services/caching-service/record-tracking-manager";
|
|
26
|
-
export type { RecordTrackingObject } from "../services/caching-service/record-tracking-manager";
|
|
27
|
-
export { HashedCacheManager } from "../services/caching-service/hashed-cache-manager";
|
|
28
|
-
export { BatchCacheManager } from "../services/caching-service/batch-cache-manager";
|
|
30
|
+
export { RecordTrackingManager } from "../services/caching-service/record-tracking-manager.js";
|
|
31
|
+
export type { RecordTrackingObject } from "../services/caching-service/record-tracking-manager.js";
|
|
32
|
+
export { HashedCacheManager } from "../services/caching-service/hashed-cache-manager.js";
|
|
33
|
+
export { BatchCacheManager } from "../services/caching-service/batch-cache-manager.js";
|
|
29
34
|
|
|
30
35
|
/**
|
|
31
36
|
* Process and data transformation utilities
|
|
32
37
|
*/
|
|
33
|
-
export { StandardProcessDrivers } from "./standard-process-drivers/";
|
|
34
|
-
export type { WriteEntitiesToMMResult } from "./standard-process-drivers/";
|
|
35
|
-
export { MMBatchValidationError } from "./standard-process-drivers/";
|
|
38
|
+
export { StandardProcessDrivers } from "./standard-process-drivers/index.js";
|
|
39
|
+
export type { WriteEntitiesToMMResult } from "./standard-process-drivers/index.js";
|
|
40
|
+
export { MMBatchValidationError } from "./standard-process-drivers/index.js";
|
|
36
41
|
export {
|
|
37
42
|
getCachedTimezoneOffset,
|
|
38
43
|
getCachedTimezoneName,
|
|
39
|
-
} from "./local-data-store/jobs-shared-data";
|
|
44
|
+
} from "./local-data-store/jobs-shared-data.js";
|
|
40
45
|
|
|
41
46
|
// Local data store
|
|
42
47
|
export {
|
|
43
48
|
getInitialLoadComplete,
|
|
44
49
|
setInitialLoadComplete,
|
|
45
|
-
} from "./local-data-store/jobs-shared-data";
|
|
50
|
+
} from "./local-data-store/jobs-shared-data.js";
|
|
46
51
|
|
|
47
52
|
/**
|
|
48
53
|
* ERP API utilities
|
|
49
54
|
*/
|
|
50
|
-
export * from "../services/erp-api-services/rest/rest-api-service";
|
|
51
|
-
export * from "../services/erp-api-services/rest/get-query-params";
|
|
52
|
-
export { getERPAPITypeFromEntity } from "./erp-type-from-entity";
|
|
55
|
+
export * from "../services/erp-api-services/rest/rest-api-service.js";
|
|
56
|
+
export * from "../services/erp-api-services/rest/get-query-params.js";
|
|
57
|
+
export { getERPAPITypeFromEntity } from "./erp-type-from-entity.js";
|
|
53
58
|
|
|
54
59
|
/**
|
|
55
60
|
* HTTP Client utilities
|
|
56
61
|
*/
|
|
57
|
-
export { HTTPClientFactory } from "./http-client";
|
|
58
|
-
export { HTTPError } from "./http-client";
|
|
59
|
-
export type { HTTPClient, HTTPRequestConfig, HTTPResponse } from "./http-client";
|
|
62
|
+
export { HTTPClientFactory } from "./http-client.js";
|
|
63
|
+
export { HTTPError } from "./http-client.js";
|
|
64
|
+
export type { HTTPClient, HTTPRequestConfig, HTTPResponse } from "./http-client.js";
|
|
60
65
|
|
|
61
66
|
/**
|
|
62
67
|
* MM Labor Ticket utilities
|
|
63
68
|
*/
|
|
64
|
-
export * from "./mm-labor-ticket-helpers";
|
|
65
|
-
export { getErrorType } from './error-utils';
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Error formatting utilities
|
|
69
|
-
*/
|
|
70
|
-
export { formatError, formatErrorForLogging } from './error-formatter';
|
|
71
|
-
export type { FormattedError } from './error-formatter';
|
|
69
|
+
export * from "./mm-labor-ticket-helpers.js";
|
|
70
|
+
export { getErrorType } from './error-utils.js';
|
|
72
71
|
|
|
73
72
|
/**
|
|
74
73
|
* MM Connector Logger utilities
|
|
75
74
|
*/
|
|
76
|
-
export { MMConnectorLogger, LogEntry, type LogResponse, type LogLevelString } from './connector-log/mm-connector-logger';
|
|
77
|
-
export { FileLogDeduper } from './connector-log/log-deduper';
|
|
75
|
+
export { MMConnectorLogger, LogEntry, type LogResponse, type LogLevelString } from './connector-log/mm-connector-logger.js';
|
|
76
|
+
export { FileLogDeduper } from './connector-log/log-deduper.js';
|
|
78
77
|
|
|
79
78
|
/**
|
|
80
79
|
* Application initializer
|
|
81
80
|
*/
|
|
82
|
-
export * from "./application-initializer";
|
|
81
|
+
export * from "./application-initializer.js";
|
|
83
82
|
|
|
84
83
|
/**
|
|
85
84
|
* GraphQL utilities
|
|
86
85
|
*/
|
|
87
|
-
export { GraphQLService } from "../services/erp-api-services/graphql/graphql-service";
|
|
88
|
-
export { OAuthClient } from "../services/erp-api-services/oauth-client";
|
|
86
|
+
export { GraphQLService } from "../services/erp-api-services/graphql/graphql-service.js";
|
|
87
|
+
export { OAuthClient } from "../services/erp-api-services/oauth-client.js";
|
|
89
88
|
|
|
90
89
|
/**
|
|
91
90
|
* Connector factory utilities
|
|
92
91
|
*/
|
|
93
|
-
export { createConnectorFromPath } from "./connector-factory";
|
|
92
|
+
export { createConnectorFromPath } from "./connector-factory.js";
|
|
@@ -72,6 +72,8 @@ export const setInitialLoadComplete = (complete: boolean): void => {
|
|
|
72
72
|
};
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
|
+
* @deprecated The cached numeric offset cannot account for DST changes.
|
|
76
|
+
* Prefer using the cached timezone name with Luxon helpers for conversions.
|
|
75
77
|
* Gets the company's cached current timezone offset (e.g., -5)
|
|
76
78
|
* @returns The cached timezone offset or 0 if not found
|
|
77
79
|
*/
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { MMReceiveLaborTicket } from "../services/mm-api-service/types/receive-types.js";
|
|
2
|
+
import { convertUtcDateTimeToErpLocal, getERPTimezone } from "./erp-timezone-utils.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Converts key datetime fields from UTC (MachineMetrics API) to the ERP's local timezone.
|
|
6
|
+
* All inputs/outputs are ISO-8601 strings, and invalid inputs throw errors.
|
|
7
7
|
* @param laborTicket The MMApiReceiveLaborTicket object to convert
|
|
8
|
-
* @param timezoneOffset The timezone offset to apply
|
|
9
8
|
*/
|
|
10
9
|
export function convertLaborTicketToLocalTimezone(
|
|
11
|
-
laborTicket: MMReceiveLaborTicket
|
|
12
|
-
timezoneOffset: number
|
|
10
|
+
laborTicket: MMReceiveLaborTicket
|
|
13
11
|
): MMReceiveLaborTicket {
|
|
14
12
|
const timeFields = [
|
|
15
13
|
"clockIn",
|
|
@@ -20,9 +18,14 @@ export function convertLaborTicketToLocalTimezone(
|
|
|
20
18
|
"workOrderOperationClosedDate",
|
|
21
19
|
] as const;
|
|
22
20
|
|
|
21
|
+
const timezone = getERPTimezone();
|
|
23
22
|
timeFields.forEach((field) => {
|
|
24
|
-
const
|
|
25
|
-
|
|
23
|
+
const value = laborTicket[field];
|
|
24
|
+
if (value) {
|
|
25
|
+
laborTicket[field] = convertUtcDateTimeToErpLocal(value, timezone);
|
|
26
|
+
} else {
|
|
27
|
+
laborTicket[field] = null;
|
|
28
|
+
}
|
|
26
29
|
});
|
|
27
30
|
return laborTicket;
|
|
28
31
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import logger from "../services/reporting-service/logger";
|
|
1
|
+
import logger from "../services/reporting-service/logger.js";
|
|
2
2
|
import {
|
|
3
3
|
MMApiClient,
|
|
4
4
|
MMGraphQLResourceResponse,
|
|
5
5
|
MMMachineGroupsResponse,
|
|
6
|
-
} from "../services/mm-api-service";
|
|
6
|
+
} from "../services/mm-api-service/index.js";
|
|
7
7
|
|
|
8
8
|
// The GraphQLResourceTypes interface has been replaced by the centralized
|
|
9
9
|
// MM response interfaces: MMGraphQLResourceResponse and MMMachineGroupsResponse
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { ERPObjType } from "../../types/erp-types";
|
|
2
|
-
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager";
|
|
1
|
+
import { ERPObjType } from "../../types/erp-types.js";
|
|
2
|
+
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager.js";
|
|
3
3
|
import {
|
|
4
4
|
IToRESTApiObject,
|
|
5
5
|
MM207NonLaborTicketResponse,
|
|
6
6
|
MM207LaborTicketResponse,
|
|
7
|
-
} from "../../services/mm-api-service";
|
|
8
|
-
import { EntityTransformer } from "../../services/mm-api-service/types/entity-transformer";
|
|
9
|
-
import logger from "../../services/reporting-service/logger";
|
|
7
|
+
} from "../../services/mm-api-service/index.js";
|
|
8
|
+
import { EntityTransformer } from "../../services/mm-api-service/types/entity-transformer.js";
|
|
9
|
+
import logger from "../../services/reporting-service/logger.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Handles error processing and record management utilities for MM API operations
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Public exports for standard-process-drivers
|
|
2
|
-
export { StandardProcessDrivers } from "./standard-process-drivers";
|
|
3
|
-
export type { WriteEntitiesToMMResult } from "./standard-process-drivers";
|
|
4
|
-
export { MMBatchValidationError } from "./standard-process-drivers";
|
|
2
|
+
export { StandardProcessDrivers } from "./standard-process-drivers.js";
|
|
3
|
+
export type { WriteEntitiesToMMResult } from "./standard-process-drivers.js";
|
|
4
|
+
export { MMBatchValidationError } from "./standard-process-drivers.js";
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { IERPLaborTicketHandler } from "../../types/erp-connector";
|
|
2
|
-
import { MMApiClient } from "../../services/mm-api-service/mm-api-service";
|
|
3
|
-
import { MMReceiveLaborTicket } from "../../services/mm-api-service/types/receive-types";
|
|
4
|
-
import { convertLaborTicketToLocalTimezone } from "../mm-labor-ticket-helpers";
|
|
5
|
-
import
|
|
6
|
-
import logger from "../../services/reporting-service/logger";
|
|
1
|
+
import { IERPLaborTicketHandler } from "../../types/erp-connector.js";
|
|
2
|
+
import { MMApiClient } from "../../services/mm-api-service/mm-api-service.js";
|
|
3
|
+
import { MMReceiveLaborTicket } from "../../services/mm-api-service/types/receive-types.js";
|
|
4
|
+
import { convertLaborTicketToLocalTimezone } from "../mm-labor-ticket-helpers.js";
|
|
5
|
+
import logger from "../../services/reporting-service/logger.js";
|
|
7
6
|
|
|
8
7
|
/**
|
|
9
8
|
* Handles synchronization of labor tickets between MachineMetrics and ERP systems
|
|
@@ -54,9 +53,12 @@ export class LaborTicketERPSynchronizer {
|
|
|
54
53
|
|
|
55
54
|
// Find the most recent updatedAt timestamp from labor tickets. This will be used to update
|
|
56
55
|
// the checkpoint to ensure there is no gap of time for the next sync.
|
|
56
|
+
// Consider, for instance, a time offset between an edge and the cloud, or that
|
|
57
|
+
// a DST change may have occurred between the last checkpoint and Now.
|
|
57
58
|
const mostRecentUpdate = laborTicketsUpdates.reduce(
|
|
58
59
|
(latest: string | null, ticket: MMReceiveLaborTicket) => {
|
|
59
|
-
if (!
|
|
60
|
+
if (!ticket.updatedAt) return latest; // Skip tickets without updatedAt
|
|
61
|
+
if (!latest) return ticket.updatedAt; // Initialize on first valid value
|
|
60
62
|
return new Date(ticket.updatedAt) > new Date(latest)
|
|
61
63
|
? ticket.updatedAt
|
|
62
64
|
: latest;
|
|
@@ -118,6 +120,9 @@ export class LaborTicketERPSynchronizer {
|
|
|
118
120
|
timestamp: mostRecentUpdate || fallbackTimestamp,
|
|
119
121
|
},
|
|
120
122
|
});
|
|
123
|
+
logger.info("syncLaborTicketsToERP: Checkpoint saved:", {
|
|
124
|
+
checkpointTimestamp: (mostRecentUpdate || fallbackTimestamp)
|
|
125
|
+
});
|
|
121
126
|
} catch (error) {
|
|
122
127
|
logger.error("syncLaborTicketsToERP: Error:", error);
|
|
123
128
|
}
|
|
@@ -214,10 +219,10 @@ export class LaborTicketERPSynchronizer {
|
|
|
214
219
|
): Promise<MMReceiveLaborTicket> {
|
|
215
220
|
let laborTicketResult: MMReceiveLaborTicket;
|
|
216
221
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
);
|
|
222
|
+
// Convert MM's UTC timestamps into the ERP's local timezone before invoking connector code.
|
|
223
|
+
// Connector implementations should treat the incoming values as localized wall time and avoid
|
|
224
|
+
// applying any further timezone shifts.
|
|
225
|
+
laborTicketResult = convertLaborTicketToLocalTimezone(laborTicket);
|
|
221
226
|
|
|
222
227
|
logger.info(
|
|
223
228
|
`processing laborTicket, id=${laborTicket.laborTicketId}, ref=${laborTicket.laborTicketRef}`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ERPObjType } from "../../types/erp-types";
|
|
2
|
-
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager";
|
|
1
|
+
import { ERPObjType } from "../../types/erp-types.js";
|
|
2
|
+
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager.js";
|
|
3
3
|
import {
|
|
4
4
|
IToRESTApiObject,
|
|
5
5
|
MMSendPerson,
|
|
@@ -15,21 +15,27 @@ import {
|
|
|
15
15
|
MM200LaborTicketResponse,
|
|
16
16
|
MM207NonLaborTicketResponse,
|
|
17
17
|
MM207LaborTicketResponse,
|
|
18
|
-
} from "../../services/mm-api-service";
|
|
19
|
-
import { MMApiClient } from "../../services/mm-api-service/mm-api-service";
|
|
20
|
-
import { HTTPError } from "../http-client";
|
|
18
|
+
} from "../../services/mm-api-service/index.js";
|
|
19
|
+
import { MMApiClient } from "../../services/mm-api-service/mm-api-service.js";
|
|
20
|
+
import { HTTPError } from "../http-client.js";
|
|
21
21
|
import {
|
|
22
22
|
WriteEntitiesToMMResult,
|
|
23
23
|
MMBatchValidationError,
|
|
24
|
-
} from "./standard-process-drivers";
|
|
25
|
-
import { ErrorProcessor } from "./error-processor";
|
|
24
|
+
} from "./standard-process-drivers.js";
|
|
25
|
+
import { ErrorProcessor } from "./error-processor.js";
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* Handles processing of entities to the MachineMetrics API
|
|
29
29
|
*/
|
|
30
30
|
export class MMEntityProcessor {
|
|
31
31
|
/**
|
|
32
|
-
* Writes entities to MM API with deduplication and caching
|
|
32
|
+
* Writes entities to MM API with deduplication and caching.
|
|
33
|
+
*
|
|
34
|
+
* IMPORTANT: All datetime fields on `mmRecords` MUST already be expressed as
|
|
35
|
+
* ISO-8601 UTC strings (either trailing `Z` or an explicit offset). The SDK
|
|
36
|
+
* does not apply timezone conversion on this path. It forwards values directly
|
|
37
|
+
* to MachineMetrics and only reserializes them for validation. Connector code
|
|
38
|
+
* is responsible for converting local ERP times to UTC before invoking this API.
|
|
33
39
|
*/
|
|
34
40
|
static async writeEntities(
|
|
35
41
|
entityType: ERPObjType,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { ERPObjType } from "../../types/erp-types";
|
|
2
|
-
import { IERPLaborTicketHandler } from "../../types/erp-connector";
|
|
3
|
-
import {
|
|
1
|
+
import { ERPObjType } from "../../types/erp-types.js";
|
|
2
|
+
import { IERPLaborTicketHandler } from "../../types/erp-connector.js";
|
|
3
|
+
import type { FlattenedWorkOrderRow } from "../../types/flattened-work-order.js";
|
|
4
|
+
import { BatchCacheManager } from "../../services/caching-service/batch-cache-manager.js";
|
|
4
5
|
import {
|
|
5
6
|
IToRESTApiObject,
|
|
6
7
|
MMSendWorkOrderBatch,
|
|
@@ -8,9 +9,9 @@ import {
|
|
|
8
9
|
MMSendPartOperation,
|
|
9
10
|
MMSendWorkOrder,
|
|
10
11
|
MMSendWorkOrderOperation,
|
|
11
|
-
} from "../../services/mm-api-service";
|
|
12
|
-
import { LaborTicketERPSynchronizer } from "./labor-ticket-erp-synchronizer";
|
|
13
|
-
import { MMEntityProcessor } from "./mm-entity-processor";
|
|
12
|
+
} from "../../services/mm-api-service/index.js";
|
|
13
|
+
import { LaborTicketERPSynchronizer } from "./labor-ticket-erp-synchronizer.js";
|
|
14
|
+
import { MMEntityProcessor } from "./mm-entity-processor.js";
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* The result of writing entities to the MachineMetrics API on complete success.
|
|
@@ -248,7 +249,12 @@ export class StandardProcessDrivers {
|
|
|
248
249
|
* parts, part operations, work orders, and work order operations, then process them in the correct order
|
|
249
250
|
* to maintain referential integrity.
|
|
250
251
|
*
|
|
251
|
-
*
|
|
252
|
+
* Timezone expectation: all datetime fields provided in `flattenedData` MUST already be expressed
|
|
253
|
+
* as ISO-8601 UTC strings (trailing `Z` or explicit offset). The SDK does not attempt to infer or
|
|
254
|
+
* convert local ERP timestamps on this path; it simply validates and forwards the values to MM.
|
|
255
|
+
* Connector implementations should convert ERP-local times to UTC before invoking this method.
|
|
256
|
+
*
|
|
257
|
+
* @param flattenedData Array of flattened rows containing both work order and operation data (see `FlattenedWorkOrderRow`)
|
|
252
258
|
* @param batchCacheManager The batch cache manager instance; pass in null if caching is not desired
|
|
253
259
|
*
|
|
254
260
|
* @returns Combined results from all entity processing with detailed logging information
|
|
@@ -256,7 +262,7 @@ export class StandardProcessDrivers {
|
|
|
256
262
|
* @throws Error on other underlying issues (network, authentication, etc.)
|
|
257
263
|
*/
|
|
258
264
|
static async syncWorkOrderBatchFromFlattened(
|
|
259
|
-
flattenedData:
|
|
265
|
+
flattenedData: ReadonlyArray<FlattenedWorkOrderRow>,
|
|
260
266
|
batchCacheManager: BatchCacheManager | null
|
|
261
267
|
): Promise<{
|
|
262
268
|
parts: WriteEntitiesToMMResult;
|
|
@@ -268,6 +274,11 @@ export class StandardProcessDrivers {
|
|
|
268
274
|
throw new Error("No flattened work order data provided");
|
|
269
275
|
}
|
|
270
276
|
|
|
277
|
+
const toStringOrFallback = (
|
|
278
|
+
value: string | number | null | undefined,
|
|
279
|
+
fallback = ""
|
|
280
|
+
): string => (value === undefined || value === null ? fallback : String(value));
|
|
281
|
+
|
|
271
282
|
// Process the flattened data - each row contains both work order and operation info
|
|
272
283
|
const uniqueParts = new Map();
|
|
273
284
|
const uniquePartOperations = new Map();
|
|
@@ -297,8 +308,8 @@ export class StandardProcessDrivers {
|
|
|
297
308
|
resourceId: row.resourceId, // → resourceId
|
|
298
309
|
cycleTimeMs: row.cycleTimeMs, // → cycleTimeMs
|
|
299
310
|
setupTimeMs: row.setupTimeMs, // → setupTimeMs
|
|
300
|
-
|
|
301
|
-
quantityPerPart: row.quantityPerPart
|
|
311
|
+
operationDescription: row.operationDescription, // → description
|
|
312
|
+
quantityPerPart: row.quantityPerPart ?? 1, // → quantityPerPart
|
|
302
313
|
});
|
|
303
314
|
}
|
|
304
315
|
|
|
@@ -351,8 +362,8 @@ export class StandardProcessDrivers {
|
|
|
351
362
|
const parts = Array.from(uniqueParts.values()).map(
|
|
352
363
|
(item) =>
|
|
353
364
|
new MMSendPart(
|
|
354
|
-
item.partNumber
|
|
355
|
-
item.partRevision
|
|
365
|
+
toStringOrFallback(item.partNumber), // partNumber
|
|
366
|
+
toStringOrFallback(item.partRevision), // partRevision
|
|
356
367
|
item.method || "Standard" // method
|
|
357
368
|
)
|
|
358
369
|
);
|
|
@@ -360,14 +371,14 @@ export class StandardProcessDrivers {
|
|
|
360
371
|
const partOperations = Array.from(uniquePartOperations.values()).map(
|
|
361
372
|
(item) =>
|
|
362
373
|
new MMSendPartOperation(
|
|
363
|
-
item.partNumber
|
|
364
|
-
item.partRevision
|
|
374
|
+
toStringOrFallback(item.partNumber), // partNumber
|
|
375
|
+
toStringOrFallback(item.partRevision), // partRevision
|
|
365
376
|
item.method || "Standard", // method
|
|
366
377
|
item.sequenceNumber?.toString() || "", // sequenceNumber
|
|
367
378
|
item.resourceId?.toString() || "", // resourceId
|
|
368
379
|
item.cycleTimeMs || 0, // cycleTimeMs
|
|
369
380
|
item.setupTimeMs || 0, // setupTimeMs
|
|
370
|
-
item.
|
|
381
|
+
item.operationDescription || "", // description
|
|
371
382
|
item.quantityPerPart || 1 // quantityPerPart
|
|
372
383
|
)
|
|
373
384
|
);
|
|
@@ -376,10 +387,12 @@ export class StandardProcessDrivers {
|
|
|
376
387
|
(item) =>
|
|
377
388
|
new MMSendWorkOrder(
|
|
378
389
|
item.workOrderId?.toString() || "", // workOrderId
|
|
379
|
-
item.lot
|
|
380
|
-
item.split
|
|
381
|
-
item.sub
|
|
390
|
+
toStringOrFallback(item.lot), // lot
|
|
391
|
+
toStringOrFallback(item.split), // split
|
|
392
|
+
toStringOrFallback(item.sub), // sub
|
|
382
393
|
item.status || "Open", // status
|
|
394
|
+
// Datetimes are assumed to already be UTC (or include an explicit offset).
|
|
395
|
+
// We reserialize via Date solely to validate the ISO format before sending to MM.
|
|
383
396
|
item.dueDate ? new Date(item.dueDate).toISOString() : null, // dueDate
|
|
384
397
|
item.description || "", // description
|
|
385
398
|
item.scheduledStartDate
|
|
@@ -390,8 +403,8 @@ export class StandardProcessDrivers {
|
|
|
390
403
|
: null, // scheduledEndDate
|
|
391
404
|
item.closedDate ? new Date(item.closedDate).toISOString() : null, // closedDate
|
|
392
405
|
item.quantityRequired || 0, // quantityRequired
|
|
393
|
-
item.partNumber
|
|
394
|
-
item.partRevision
|
|
406
|
+
toStringOrFallback(item.partNumber), // partNumber
|
|
407
|
+
toStringOrFallback(item.partRevision), // partRevision
|
|
395
408
|
item.method || "Standard" // method
|
|
396
409
|
)
|
|
397
410
|
);
|
|
@@ -400,14 +413,15 @@ export class StandardProcessDrivers {
|
|
|
400
413
|
(item) =>
|
|
401
414
|
new MMSendWorkOrderOperation(
|
|
402
415
|
item.workOrderId?.toString() || "", // workOrderId
|
|
403
|
-
item.lot
|
|
404
|
-
item.split
|
|
405
|
-
item.sub
|
|
416
|
+
toStringOrFallback(item.lot), // lot
|
|
417
|
+
toStringOrFallback(item.split), // split
|
|
418
|
+
toStringOrFallback(item.sub), // sub
|
|
406
419
|
item.sequenceNumber?.toString() || "", // sequenceNumber
|
|
407
420
|
item.resourceId?.toString() || "", // resourceId
|
|
408
421
|
item.startQuantity || 0, // startQuantity
|
|
409
422
|
item.finishQuantity || 0, // finishQuantity
|
|
410
423
|
item.expectedRejectRate || 0, // expectedRejectRate
|
|
424
|
+
// Same UTC expectation as above; reserialize to ensure valid ISO.
|
|
411
425
|
item.scheduledStartDate
|
|
412
426
|
? new Date(item.scheduledStartDate).toISOString()
|
|
413
427
|
: null, // scheduledStartDate
|
|
@@ -417,8 +431,8 @@ export class StandardProcessDrivers {
|
|
|
417
431
|
item.closedDate ? new Date(item.closedDate).toISOString() : null, // closedDate
|
|
418
432
|
item.cycleTimeMs || 0, // cycleTimeMs
|
|
419
433
|
item.setupTimeMs || 0, // setupTimeMs
|
|
420
|
-
parseFloat(item.productionburdenRateHourly
|
|
421
|
-
parseFloat(item.setupburdenRatehourly
|
|
434
|
+
parseFloat(toStringOrFallback(item.productionburdenRateHourly, "0")), // productionburdenRateHourly
|
|
435
|
+
parseFloat(toStringOrFallback(item.setupburdenRatehourly, "0")), // setupburdenRatehourly
|
|
422
436
|
item.operationType || "Production", // operationType
|
|
423
437
|
item.quantityPerPart || 1, // quantityPerPart
|
|
424
438
|
item.status || "Open" // status
|