@machinemetrics/mm-erp-sdk 0.2.0-beta.0 → 0.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -5
- package/dist/config-CvA-mFWF.js +418 -0
- package/dist/config-CvA-mFWF.js.map +1 -0
- package/dist/connector-factory-BPm2GVVF.js +30 -0
- package/dist/connector-factory-BPm2GVVF.js.map +1 -0
- package/dist/hashed-cache-manager-B15NN8hK.js +322 -0
- package/dist/hashed-cache-manager-B15NN8hK.js.map +1 -0
- package/dist/index-D8qO1NyK.js +192 -0
- package/dist/index-D8qO1NyK.js.map +1 -0
- package/dist/index.d.ts +43 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/knexfile-Bng2Ru9c.js +20 -0
- package/dist/knexfile-Bng2Ru9c.js.map +1 -0
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/logger-BWw0_z9q.js +17557 -0
- package/dist/logger-BWw0_z9q.js.map +1 -0
- package/dist/migrations/20241015162631_create_cache_table.js +15 -11
- package/dist/migrations/20241015162631_create_cache_table.js.map +1 -1
- package/dist/migrations/20241015162632_create_sdk_cache_table.js +15 -11
- package/dist/migrations/20241015162632_create_sdk_cache_table.js.map +1 -1
- package/dist/migrations/20250103162631_create_record_tracking_table.js +15 -14
- package/dist/migrations/20250103162631_create_record_tracking_table.js.map +1 -1
- package/dist/mm-erp-sdk.js +4978 -0
- package/dist/mm-erp-sdk.js.map +1 -0
- 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/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/index.d.ts +1 -1
- package/dist/services/caching-service/index.d.ts.map +1 -1
- 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/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/data-sync-service.d.ts.map +1 -1
- 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/jobs/clean-up-expired-cache.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +40 -42
- 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 +37 -50
- 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 +36 -38
- 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 +22 -24
- 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 +49 -49
- package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -1
- package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts +30 -0
- package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts.map +1 -0
- package/dist/services/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/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/index.d.ts +8 -8
- package/dist/services/erp-api-services/index.d.ts.map +1 -1
- 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/types.d.ts +2 -2
- package/dist/services/erp-api-services/types.d.ts.map +1 -1
- package/dist/services/mm-api-service/company-info.d.ts +13 -0
- package/dist/services/mm-api-service/company-info.d.ts.map +1 -0
- package/dist/services/mm-api-service/index.d.ts +13 -6
- package/dist/services/mm-api-service/index.d.ts.map +1 -1
- package/dist/services/mm-api-service/mm-api-service.d.ts +13 -7
- package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -1
- 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/receive-types.d.ts +3 -0
- package/dist/services/mm-api-service/types/receive-types.d.ts.map +1 -1
- package/dist/services/nats-service/nats-service.d.ts +114 -0
- package/dist/services/nats-service/nats-service.d.ts.map +1 -0
- package/dist/services/nats-service/test-nats-subscriber.d.ts +6 -0
- package/dist/services/nats-service/test-nats-subscriber.d.ts.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/psql-service.d.ts +2 -2
- package/dist/services/psql-erp-service/psql-service.d.ts.map +1 -1
- 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/logger.d.ts.map +1 -1
- 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/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/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-service.d.ts +2 -2
- package/dist/services/sql-server-erp-service/sql-server-service.d.ts.map +1 -1
- package/dist/services/sqlite-service/index.d.ts +1 -1
- package/dist/services/sqlite-service/index.d.ts.map +1 -1
- package/dist/types/erp-connector.d.ts +2 -9
- package/dist/types/erp-connector.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/connector-factory.d.ts +1 -1
- package/dist/utils/connector-factory.d.ts.map +1 -1
- 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/mm-connector-logger-example.d.ts +0 -1
- 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/erp-type-from-entity.d.ts +1 -1
- package/dist/utils/erp-type-from-entity.d.ts.map +1 -1
- package/dist/utils/error-formatter.d.ts +19 -0
- package/dist/utils/error-formatter.d.ts.map +1 -0
- package/dist/utils/index.d.ts +38 -34
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/local-data-store/jobs-shared-data.d.ts +0 -2
- package/dist/utils/local-data-store/jobs-shared-data.d.ts.map +1 -1
- package/dist/utils/mm-labor-ticket-helpers.d.ts +5 -4
- package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -1
- package/dist/utils/removeExtraneousFields.d.ts +1 -1
- package/dist/utils/removeExtraneousFields.d.ts.map +1 -1
- package/dist/utils/removeIdFieldFromPayload.d.ts +1 -1
- package/dist/utils/removeIdFieldFromPayload.d.ts.map +1 -1
- package/dist/utils/resource-group.d.ts +1 -1
- package/dist/utils/resource-group.d.ts.map +1 -1
- 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/index.d.ts +3 -3
- package/dist/utils/standard-process-drivers/index.d.ts.map +1 -1
- 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/mm-entity-processor.d.ts +5 -11
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +6 -12
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
- package/dist/utils/time-utils.d.ts.map +1 -1
- package/package.json +10 -8
- package/src/index.ts +45 -42
- package/src/knexfile.ts +0 -1
- 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 +39 -52
- package/src/services/data-sync-service/data-sync-service.ts +19 -10
- package/src/services/data-sync-service/index.ts +3 -3
- package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +4 -5
- package/src/services/data-sync-service/jobs/from-erp.ts +6 -12
- package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +3 -4
- package/src/services/data-sync-service/jobs/run-migrations.ts +3 -4
- package/src/services/data-sync-service/jobs/to-erp.ts +14 -5
- package/src/services/data-sync-service/nats-labor-ticket-listener.ts +341 -0
- 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/company-info.ts +87 -0
- package/src/services/mm-api-service/index.ts +14 -6
- package/src/services/mm-api-service/mm-api-service.ts +30 -13
- 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/mm-api-service/types/receive-types.ts +1 -0
- package/src/services/nats-service/nats-service.ts +351 -0
- package/src/services/nats-service/test-nats-subscriber.ts +96 -0
- 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 +81 -116
- 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 +2 -9
- package/src/types/index.ts +2 -10
- 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/erp-type-from-entity.ts +1 -1
- package/src/utils/error-formatter.ts +205 -0
- package/src/utils/http-client.ts +3 -2
- package/src/utils/index.ts +39 -38
- package/src/utils/local-data-store/database-lock.ts +1 -1
- package/src/utils/local-data-store/jobs-shared-data.ts +0 -2
- package/src/utils/mm-labor-ticket-helpers.ts +9 -12
- 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 +12 -16
- package/src/utils/standard-process-drivers/mm-entity-processor.ts +8 -14
- package/src/utils/standard-process-drivers/standard-process-drivers.ts +25 -39
- package/src/utils/time-utils.ts +3 -14
- package/src/utils/timezone.ts +2 -2
- package/dist/index.js +0 -48
- package/dist/index.js.map +0 -1
- package/dist/knexfile.js +0 -19
- package/dist/knexfile.js.map +0 -1
- package/dist/migrations/20241015162631_create_cache_table.d.ts +0 -4
- package/dist/migrations/20241015162631_create_cache_table.d.ts.map +0 -1
- package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts +0 -4
- package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts.map +0 -1
- package/dist/migrations/20250103162631_create_record_tracking_table.d.ts +0 -4
- package/dist/migrations/20250103162631_create_record_tracking_table.d.ts.map +0 -1
- package/dist/services/caching-service/batch-cache-manager.js +0 -84
- package/dist/services/caching-service/batch-cache-manager.js.map +0 -1
- package/dist/services/caching-service/hashed-cache-manager.js +0 -223
- package/dist/services/caching-service/hashed-cache-manager.js.map +0 -1
- package/dist/services/caching-service/index.js +0 -2
- package/dist/services/caching-service/index.js.map +0 -1
- package/dist/services/caching-service/record-tracking-manager.js +0 -28
- package/dist/services/caching-service/record-tracking-manager.js.map +0 -1
- package/dist/services/data-sync-service/configuration-manager.js +0 -163
- package/dist/services/data-sync-service/configuration-manager.js.map +0 -1
- package/dist/services/data-sync-service/data-sync-service.js +0 -95
- package/dist/services/data-sync-service/data-sync-service.js.map +0 -1
- package/dist/services/data-sync-service/index.js +0 -10
- package/dist/services/data-sync-service/index.js.map +0 -1
- package/dist/services/erp-api-services/errors.js +0 -83
- package/dist/services/erp-api-services/errors.js.map +0 -1
- package/dist/services/erp-api-services/graphql/graphql-service.js +0 -102
- package/dist/services/erp-api-services/graphql/graphql-service.js.map +0 -1
- package/dist/services/erp-api-services/graphql/types.js +0 -6
- package/dist/services/erp-api-services/graphql/types.js.map +0 -1
- package/dist/services/erp-api-services/index.js +0 -13
- package/dist/services/erp-api-services/index.js.map +0 -1
- package/dist/services/erp-api-services/oauth-client.js +0 -41
- package/dist/services/erp-api-services/oauth-client.js.map +0 -1
- package/dist/services/erp-api-services/rest/get-query-params.js +0 -23
- package/dist/services/erp-api-services/rest/get-query-params.js.map +0 -1
- package/dist/services/erp-api-services/rest/rest-api-service.js +0 -163
- package/dist/services/erp-api-services/rest/rest-api-service.js.map +0 -1
- package/dist/services/erp-api-services/types.js +0 -2
- package/dist/services/erp-api-services/types.js.map +0 -1
- package/dist/services/mm-api-service/index.js +0 -15
- package/dist/services/mm-api-service/index.js.map +0 -1
- package/dist/services/mm-api-service/mm-api-service.js +0 -519
- package/dist/services/mm-api-service/mm-api-service.js.map +0 -1
- package/dist/services/mm-api-service/token-mgr.js +0 -113
- package/dist/services/mm-api-service/token-mgr.js.map +0 -1
- package/dist/services/mm-api-service/types/checkpoint.js +0 -2
- package/dist/services/mm-api-service/types/checkpoint.js.map +0 -1
- package/dist/services/mm-api-service/types/entity-transformer.js +0 -186
- package/dist/services/mm-api-service/types/entity-transformer.js.map +0 -1
- package/dist/services/mm-api-service/types/mm-response-interfaces.js +0 -34
- package/dist/services/mm-api-service/types/mm-response-interfaces.js.map +0 -1
- package/dist/services/mm-api-service/types/receive-types.js +0 -55
- package/dist/services/mm-api-service/types/receive-types.js.map +0 -1
- package/dist/services/mm-api-service/types/send-types.js +0 -337
- package/dist/services/mm-api-service/types/send-types.js.map +0 -1
- package/dist/services/psql-erp-service/configuration.js +0 -2
- package/dist/services/psql-erp-service/configuration.js.map +0 -1
- package/dist/services/psql-erp-service/index.js +0 -10
- package/dist/services/psql-erp-service/index.js.map +0 -1
- package/dist/services/psql-erp-service/internal/types/psql-types.js +0 -5
- package/dist/services/psql-erp-service/internal/types/psql-types.js.map +0 -1
- package/dist/services/psql-erp-service/psql-helpers.js +0 -99
- package/dist/services/psql-erp-service/psql-helpers.js.map +0 -1
- package/dist/services/psql-erp-service/psql-service.js +0 -187
- package/dist/services/psql-erp-service/psql-service.js.map +0 -1
- package/dist/services/reporting-service/index.js +0 -5
- package/dist/services/reporting-service/index.js.map +0 -1
- package/dist/services/reporting-service/logger.js +0 -221
- package/dist/services/reporting-service/logger.js.map +0 -1
- package/dist/services/sql-server-erp-service/configuration.js +0 -2
- package/dist/services/sql-server-erp-service/configuration.js.map +0 -1
- package/dist/services/sql-server-erp-service/index.js +0 -11
- package/dist/services/sql-server-erp-service/index.js.map +0 -1
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js +0 -50
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js.map +0 -1
- package/dist/services/sql-server-erp-service/internal/sql-server-config.js +0 -40
- package/dist/services/sql-server-erp-service/internal/sql-server-config.js.map +0 -1
- package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js +0 -36
- package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js.map +0 -1
- package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js +0 -2
- package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js.map +0 -1
- package/dist/services/sql-server-erp-service/sql-server-helpers.js +0 -66
- package/dist/services/sql-server-erp-service/sql-server-helpers.js.map +0 -1
- package/dist/services/sql-server-erp-service/sql-server-service.js +0 -154
- package/dist/services/sql-server-erp-service/sql-server-service.js.map +0 -1
- package/dist/services/sql-server-erp-service/types/sql-input-param.js +0 -2
- package/dist/services/sql-server-erp-service/types/sql-input-param.js.map +0 -1
- package/dist/services/sqlite-service/index.js +0 -2
- package/dist/services/sqlite-service/index.js.map +0 -1
- package/dist/services/sqlite-service/sqlite-coordinator.js +0 -60
- package/dist/services/sqlite-service/sqlite-coordinator.js.map +0 -1
- package/dist/types/erp-connector.js +0 -2
- package/dist/types/erp-connector.js.map +0 -1
- package/dist/types/erp-types.js +0 -13
- package/dist/types/erp-types.js.map +0 -1
- package/dist/types/flattened-work-order.d.ts +0 -99
- package/dist/types/flattened-work-order.d.ts.map +0 -1
- package/dist/types/flattened-work-order.js +0 -2
- package/dist/types/flattened-work-order.js.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/utils/application-initializer.js +0 -55
- package/dist/utils/application-initializer.js.map +0 -1
- package/dist/utils/cleanup-numbers.js +0 -6
- package/dist/utils/cleanup-numbers.js.map +0 -1
- package/dist/utils/connector-factory.js +0 -34
- package/dist/utils/connector-factory.js.map +0 -1
- package/dist/utils/connector-log/log-deduper.js +0 -240
- package/dist/utils/connector-log/log-deduper.js.map +0 -1
- package/dist/utils/connector-log/mm-connector-logger-example.js +0 -88
- package/dist/utils/connector-log/mm-connector-logger-example.js.map +0 -1
- package/dist/utils/connector-log/mm-connector-logger.js +0 -151
- package/dist/utils/connector-log/mm-connector-logger.js.map +0 -1
- package/dist/utils/data-transformation.js +0 -38
- package/dist/utils/data-transformation.js.map +0 -1
- package/dist/utils/env.d.ts +0 -8
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -58
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/erp-timezone-utils.d.ts +0 -20
- package/dist/utils/erp-timezone-utils.d.ts.map +0 -1
- package/dist/utils/erp-timezone-utils.js +0 -75
- package/dist/utils/erp-timezone-utils.js.map +0 -1
- package/dist/utils/erp-type-from-entity.js +0 -6
- package/dist/utils/erp-type-from-entity.js.map +0 -1
- package/dist/utils/error-utils.js +0 -21
- package/dist/utils/error-utils.js.map +0 -1
- package/dist/utils/http-client.js +0 -186
- package/dist/utils/http-client.js.map +0 -1
- package/dist/utils/index.js +0 -66
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/local-data-store/database-lock.js +0 -68
- package/dist/utils/local-data-store/database-lock.js.map +0 -1
- package/dist/utils/local-data-store/jobs-shared-data.js +0 -118
- package/dist/utils/local-data-store/jobs-shared-data.js.map +0 -1
- package/dist/utils/mm-labor-ticket-helpers.js +0 -28
- package/dist/utils/mm-labor-ticket-helpers.js.map +0 -1
- package/dist/utils/removeExtraneousFields.js +0 -16
- package/dist/utils/removeExtraneousFields.js.map +0 -1
- package/dist/utils/removeIdFieldFromPayload.js +0 -16
- package/dist/utils/removeIdFieldFromPayload.js.map +0 -1
- package/dist/utils/resource-group.js +0 -59
- package/dist/utils/resource-group.js.map +0 -1
- package/dist/utils/standard-process-drivers/error-processor.js +0 -262
- package/dist/utils/standard-process-drivers/error-processor.js.map +0 -1
- package/dist/utils/standard-process-drivers/index.js +0 -4
- package/dist/utils/standard-process-drivers/index.js.map +0 -1
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js +0 -173
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +0 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.js +0 -174
- package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +0 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.js +0 -333
- package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +0 -1
- package/dist/utils/time-utils.js +0 -103
- package/dist/utils/time-utils.js.map +0 -1
- package/dist/utils/timezone.js +0 -105
- package/dist/utils/timezone.js.map +0 -1
- package/dist/utils/trimObjectValues.js +0 -11
- package/dist/utils/trimObjectValues.js.map +0 -1
- package/dist/utils/uniqueRows.js +0 -35
- package/dist/utils/uniqueRows.js.map +0 -1
- package/src/types/flattened-work-order.ts +0 -108
- package/src/utils/env.ts +0 -75
- package/src/utils/erp-timezone-utils.ts +0 -99
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import logger from "../services/reporting-service/logger.js";
|
|
2
|
-
import { pathToFileURL } from "url";
|
|
3
|
-
/**
|
|
4
|
-
* Helper function to dynamically import and create connector instance from a file path
|
|
5
|
-
* @param connectorPath - The file path to the connector module
|
|
6
|
-
* @returns A new instance of the IERPConnector
|
|
7
|
-
*/
|
|
8
|
-
export const createConnectorFromPath = async (connectorPath) => {
|
|
9
|
-
try {
|
|
10
|
-
// Some detailed debug logging to help with troubleshooting multi-platform connector paths
|
|
11
|
-
const pathParts = connectorPath.split('/');
|
|
12
|
-
const filename = pathParts[pathParts.length - 1];
|
|
13
|
-
logger.debug("createConnectorFromPath:", {
|
|
14
|
-
connectorPath,
|
|
15
|
-
pathParts,
|
|
16
|
-
filename,
|
|
17
|
-
finalImport: pathToFileURL(connectorPath).href,
|
|
18
|
-
});
|
|
19
|
-
const connectorModule = await import(pathToFileURL(connectorPath).href);
|
|
20
|
-
// Get the default export or named export
|
|
21
|
-
const ConnectorClass = connectorModule.default ||
|
|
22
|
-
connectorModule[Object.keys(connectorModule)[0]];
|
|
23
|
-
if (!ConnectorClass) {
|
|
24
|
-
throw new Error(`No connector class found in module: ${connectorPath}`);
|
|
25
|
-
}
|
|
26
|
-
// Create new instance of the connector
|
|
27
|
-
return new ConnectorClass();
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
logger.error(`Failed to create connector instance from path: ${connectorPath}`, { error });
|
|
31
|
-
throw error;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
//# sourceMappingURL=connector-factory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connector-factory.js","sourceRoot":"","sources":["../../src/utils/connector-factory.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,yCAAyC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,aAAqB,EACG,EAAE;IAC1B,IAAI,CAAC;QACH,0FAA0F;QAC1F,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjD,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;YACvC,aAAa;YACb,SAAS;YACT,QAAQ;YACR,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI;SAC/C,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC;QAExE,yCAAyC;QACzC,MAAM,cAAc,GAClB,eAAe,CAAC,OAAO;YACvB,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uCAAuC,aAAa,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,uCAAuC;QACvC,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CACV,kDAAkD,aAAa,EAAE,EACjE,EAAE,KAAK,EAAE,CACV,CAAC;QACF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import logger from '../../services/reporting-service/logger.js';
|
|
4
|
-
/**
|
|
5
|
-
* FileLogDeduper implements the LogDeduper interface to deduplicate
|
|
6
|
-
* logs by storing them in a file; this allows deduping across jobs.
|
|
7
|
-
*/
|
|
8
|
-
export class FileLogDeduper {
|
|
9
|
-
storeFilePath;
|
|
10
|
-
windowMs;
|
|
11
|
-
ttlMs;
|
|
12
|
-
sweepIntervalMs;
|
|
13
|
-
lastSweepTsMs;
|
|
14
|
-
DEFAULT_WINDOW_TEN_MINS = 600;
|
|
15
|
-
DEFAULT_TTL_ONE_HOUR = 3600;
|
|
16
|
-
DEFAULT_SWEEP_INTERVAL_FIVE_MINS = 300;
|
|
17
|
-
DEFAULT_STORE_FILE_PATH = path.join('/tmp', 'log-deduplication.json');
|
|
18
|
-
/**
|
|
19
|
-
* Ctor.
|
|
20
|
-
* @param storeFilePath: The path to the file where the deduplication store is stored; recommended is to use the default
|
|
21
|
-
* @param windowSeconds: Suppression window. Duplicates within this period are suppressed.
|
|
22
|
-
* @param ttlSeconds: Eviction TTL. Store entries for keys inactive beyond this are removed. Enforced to be ≥ windowSeconds.
|
|
23
|
-
* @param sweepIntervalSeconds: Efficiency parameter. How often (min interval) to run opportunistic eviction; retry always sweeps
|
|
24
|
-
* The sweep is lazy, used only when the store is accessed
|
|
25
|
-
*/
|
|
26
|
-
constructor({ storeFilePath = this.DEFAULT_STORE_FILE_PATH, windowSeconds = this.DEFAULT_WINDOW_TEN_MINS, ttlSeconds = this.DEFAULT_TTL_ONE_HOUR, sweepIntervalSeconds = this.DEFAULT_SWEEP_INTERVAL_FIVE_MINS } = {}) {
|
|
27
|
-
this.storeFilePath = storeFilePath;
|
|
28
|
-
this.windowMs = Math.max(1, windowSeconds) * 1000;
|
|
29
|
-
this.ttlMs = Math.max(this.windowMs, Math.max(1, ttlSeconds) * 1000);
|
|
30
|
-
this.sweepIntervalMs = Math.max(1, sweepIntervalSeconds) * 1000;
|
|
31
|
-
this.lastSweepTsMs = 0;
|
|
32
|
-
this.ensureStoreFileExists();
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Deduplication gating function
|
|
36
|
-
* Returns the formatted message to send, or null to suppress
|
|
37
|
-
* Decision is based on the dedupeKey and the time of the entry
|
|
38
|
-
*/
|
|
39
|
-
async decide(entry, now) {
|
|
40
|
-
if (!entry.dedupeKey || typeof entry.dedupeKey !== 'string' || entry.dedupeKey.trim().length === 0) {
|
|
41
|
-
throw new Error('dedupeKey is required and must be a non-empty string');
|
|
42
|
-
}
|
|
43
|
-
const key = entry.dedupeKey;
|
|
44
|
-
return this.withLock(async () => {
|
|
45
|
-
const store = this.readStore();
|
|
46
|
-
// Opportunistic eviction gated by sweep interval
|
|
47
|
-
if (now - this.lastSweepTsMs >= this.sweepIntervalMs) {
|
|
48
|
-
this.evictExpiredInStore(store, now);
|
|
49
|
-
this.lastSweepTsMs = now;
|
|
50
|
-
this.writeStore(store);
|
|
51
|
-
}
|
|
52
|
-
const existing = store[key];
|
|
53
|
-
if (existing) {
|
|
54
|
-
const withinWindow = existing.lastTransmitted > 0 && (existing.lastTransmitted + this.windowMs) > now;
|
|
55
|
-
if (withinWindow) {
|
|
56
|
-
// Suppress and increment count
|
|
57
|
-
store[key] = {
|
|
58
|
-
...existing,
|
|
59
|
-
suppressedCount: existing.suppressedCount + 1,
|
|
60
|
-
firstUnsentEventTs: existing.suppressedCount === 0 ? (entry.eventTime ?? now) : existing.firstUnsentEventTs,
|
|
61
|
-
lastEventTs: entry.eventTime ?? now,
|
|
62
|
-
level: entry.level,
|
|
63
|
-
message: entry.message
|
|
64
|
-
};
|
|
65
|
-
this.writeStore(store);
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
// Outside window: allow, include timestamp and prior suppression count
|
|
69
|
-
const messageToSend = this.formatMessage(entry.message, entry.eventTime ?? now, existing.suppressedCount, existing.firstUnsentEventTs);
|
|
70
|
-
store[key] = {
|
|
71
|
-
...existing,
|
|
72
|
-
suppressedCount: 0,
|
|
73
|
-
firstUnsentEventTs: 0,
|
|
74
|
-
lastEventTs: entry.eventTime ?? now,
|
|
75
|
-
level: entry.level,
|
|
76
|
-
message: entry.message
|
|
77
|
-
};
|
|
78
|
-
this.writeStore(store);
|
|
79
|
-
return messageToSend;
|
|
80
|
-
}
|
|
81
|
-
// New entry: allow, timestamp, no suppression count
|
|
82
|
-
const messageToSend = this.formatMessage(entry.message, entry.eventTime ?? now, 0);
|
|
83
|
-
store[key] = {
|
|
84
|
-
lastTransmitted: 0,
|
|
85
|
-
suppressedCount: 0,
|
|
86
|
-
firstUnsentEventTs: entry.eventTime ?? now,
|
|
87
|
-
lastEventTs: entry.eventTime ?? now,
|
|
88
|
-
level: entry.level,
|
|
89
|
-
message: entry.message
|
|
90
|
-
};
|
|
91
|
-
this.writeStore(store);
|
|
92
|
-
return messageToSend;
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
async onSuccess(entry, now) {
|
|
96
|
-
if (!entry.dedupeKey || typeof entry.dedupeKey !== 'string' || entry.dedupeKey.trim().length === 0) {
|
|
97
|
-
throw new Error('dedupeKey is required and must be a non-empty string');
|
|
98
|
-
}
|
|
99
|
-
const key = entry.dedupeKey;
|
|
100
|
-
await this.withLock(async () => {
|
|
101
|
-
const store = this.readStore();
|
|
102
|
-
const existing = store[key];
|
|
103
|
-
if (existing) {
|
|
104
|
-
store[key] = {
|
|
105
|
-
...existing,
|
|
106
|
-
lastTransmitted: now,
|
|
107
|
-
firstUnsentEventTs: 0,
|
|
108
|
-
suppressedCount: 0
|
|
109
|
-
};
|
|
110
|
-
this.writeStore(store);
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
async retryFailedTransmissions(send) {
|
|
115
|
-
// Best-effort retry: first sweep expired entries, then iterate over entries with lastTransmitted === 0
|
|
116
|
-
const now = Date.now();
|
|
117
|
-
const entries = await this.withLock(async () => {
|
|
118
|
-
const store = this.readStore();
|
|
119
|
-
// Always sweep on retry
|
|
120
|
-
this.evictExpiredInStore(store, now);
|
|
121
|
-
this.lastSweepTsMs = now;
|
|
122
|
-
this.writeStore(store);
|
|
123
|
-
return Object.entries(store)
|
|
124
|
-
.filter(([, rec]) => rec.lastTransmitted === 0)
|
|
125
|
-
.map(([key, rec]) => ({ key, rec }));
|
|
126
|
-
});
|
|
127
|
-
for (const { key, rec } of entries) {
|
|
128
|
-
try {
|
|
129
|
-
const message = this.formatMessage(rec.message, rec.lastEventTs, rec.suppressedCount, rec.firstUnsentEventTs);
|
|
130
|
-
await send({ level: rec.level, message: rec.message, dedupeKey: key, eventTime: rec.lastEventTs }, message);
|
|
131
|
-
// Mark success
|
|
132
|
-
await this.withLock(async () => {
|
|
133
|
-
const store = this.readStore();
|
|
134
|
-
const current = store[key];
|
|
135
|
-
if (current) {
|
|
136
|
-
store[key] = {
|
|
137
|
-
...current,
|
|
138
|
-
lastTransmitted: Date.now(),
|
|
139
|
-
suppressedCount: 0
|
|
140
|
-
};
|
|
141
|
-
this.writeStore(store);
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
catch (err) {
|
|
146
|
-
// Leave entry for future retries; do not throw
|
|
147
|
-
logger.error('Failed to retry failed transmission', { key, rec, error: err });
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// --- Internals ---
|
|
153
|
-
ensureStoreFileExists() {
|
|
154
|
-
try {
|
|
155
|
-
if (!fs.existsSync(this.storeFilePath)) {
|
|
156
|
-
fs.writeFileSync(this.storeFilePath, JSON.stringify({}), 'utf-8');
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
// ignore
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
readStore() {
|
|
164
|
-
try {
|
|
165
|
-
if (!fs.existsSync(this.storeFilePath))
|
|
166
|
-
return {};
|
|
167
|
-
const content = fs.readFileSync(this.storeFilePath, 'utf-8');
|
|
168
|
-
return content ? JSON.parse(content) : {};
|
|
169
|
-
}
|
|
170
|
-
catch {
|
|
171
|
-
return {};
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
writeStore(store) {
|
|
175
|
-
try {
|
|
176
|
-
fs.writeFileSync(this.storeFilePath, JSON.stringify(store, null, 2), 'utf-8');
|
|
177
|
-
}
|
|
178
|
-
catch {
|
|
179
|
-
// ignore
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
formatMessage(message, eventTs, suppressedCount, firstUnsentEventTs) {
|
|
183
|
-
const timestamp = new Date(eventTs).toISOString();
|
|
184
|
-
const base = `${timestamp} | ${message}`;
|
|
185
|
-
if (suppressedCount > 0) {
|
|
186
|
-
const since = firstUnsentEventTs && firstUnsentEventTs > 0 ? ` since ${new Date(firstUnsentEventTs).toISOString()}` : '';
|
|
187
|
-
return `${base} (${suppressedCount} suppressed${since})`;
|
|
188
|
-
}
|
|
189
|
-
return base;
|
|
190
|
-
}
|
|
191
|
-
async withLock(fn) {
|
|
192
|
-
const lockPath = `${this.storeFilePath}.lock`;
|
|
193
|
-
const start = Date.now();
|
|
194
|
-
// Try to acquire the lock with retries (best effort)
|
|
195
|
-
// Avoid infinite waits; cap at ~3 seconds
|
|
196
|
-
while (true) {
|
|
197
|
-
try {
|
|
198
|
-
const fd = fs.openSync(lockPath, 'wx');
|
|
199
|
-
try {
|
|
200
|
-
const result = await fn();
|
|
201
|
-
return result;
|
|
202
|
-
}
|
|
203
|
-
finally {
|
|
204
|
-
try {
|
|
205
|
-
fs.closeSync(fd);
|
|
206
|
-
}
|
|
207
|
-
catch { /* ignore */ }
|
|
208
|
-
try {
|
|
209
|
-
fs.unlinkSync(lockPath);
|
|
210
|
-
}
|
|
211
|
-
catch { /* ignore */ }
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
catch {
|
|
215
|
-
// Lock exists
|
|
216
|
-
if (Date.now() - start > 3000) {
|
|
217
|
-
// Timed out; proceed without lock to avoid deadlock
|
|
218
|
-
return await fn();
|
|
219
|
-
}
|
|
220
|
-
await new Promise(resolve => setTimeout(resolve, 50));
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Evict expired entries from the store based on the TTL and the key's last transmitted time
|
|
226
|
-
*/
|
|
227
|
-
evictExpiredInStore(store, now) {
|
|
228
|
-
const keys = Object.keys(store);
|
|
229
|
-
if (keys.length === 0)
|
|
230
|
-
return;
|
|
231
|
-
for (const key of keys) {
|
|
232
|
-
const rec = store[key];
|
|
233
|
-
const referenceTs = rec.lastTransmitted > 0 ? rec.lastTransmitted : rec.lastEventTs;
|
|
234
|
-
if (now - referenceTs > this.ttlMs) {
|
|
235
|
-
delete store[key];
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
//# sourceMappingURL=log-deduper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log-deduper.js","sourceRoot":"","sources":["../../../src/utils/connector-log/log-deduper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
// import { FileLogDeduper } from './log-deduper';
|
|
2
|
-
// import { MMConnectorLogger, LogEntry } from './mm-connector-logger';
|
|
3
|
-
// import { HTTPError } from '../http-client';
|
|
4
|
-
// import { getErrorType } from '../error-utils';
|
|
5
|
-
// /**
|
|
6
|
-
// * Example usage of the MM Connector Logger with deduplication
|
|
7
|
-
// *
|
|
8
|
-
// * This example demonstrates how to use the MMConnectorLogger class to send
|
|
9
|
-
// * progress updates and error logs to the MM cloud. Deduplication is configured
|
|
10
|
-
// * via environment variables and applied consistently to all log messages.
|
|
11
|
-
// */
|
|
12
|
-
export {};
|
|
13
|
-
// async function exampleUsage() {
|
|
14
|
-
// // Initialize logger with source identifier and deduplication settings
|
|
15
|
-
// const logger = new MMConnectorLogger('proshop', new FileLogDeduper({
|
|
16
|
-
// windowSeconds: 300, // 5 minute deduplication window
|
|
17
|
-
// ttlSeconds: 3600, // 1 hour TTL for store cleanup
|
|
18
|
-
// sweepIntervalSeconds: 600 // 10 minute sweep interval
|
|
19
|
-
// }));
|
|
20
|
-
// try {
|
|
21
|
-
// // Sends initial sync start message
|
|
22
|
-
// await logger.sendLog(new LogEntry({
|
|
23
|
-
// level: 'info',
|
|
24
|
-
// dedupeKey: 'SyncStart',
|
|
25
|
-
// message: 'Starting sync process'
|
|
26
|
-
// }));
|
|
27
|
-
// // Simulates some work with progress updates
|
|
28
|
-
// for (let i = 1; i <= 3; i++) {
|
|
29
|
-
// await logger.sendLog(new LogEntry({
|
|
30
|
-
// level: 'info',
|
|
31
|
-
// dedupeKey: 'SyncProgress',
|
|
32
|
-
// message: `Processing batch ${i}/3`
|
|
33
|
-
// }));
|
|
34
|
-
// await new Promise(resolve => setTimeout(resolve, 100)); // Simulate work
|
|
35
|
-
// }
|
|
36
|
-
// // Sends completion message
|
|
37
|
-
// await logger.sendLog(new LogEntry({
|
|
38
|
-
// level: 'info',
|
|
39
|
-
// dedupeKey: 'SyncComplete',
|
|
40
|
-
// message: 'Sync process completed successfully'
|
|
41
|
-
// }));
|
|
42
|
-
// // Demonstrates error logging with error type extraction
|
|
43
|
-
// try {
|
|
44
|
-
// throw new Error('Simulated database connection failure');
|
|
45
|
-
// } catch (error) {
|
|
46
|
-
// const errorType = getErrorType(error);
|
|
47
|
-
// await logger.sendLog(new LogEntry({
|
|
48
|
-
// level: 'error',
|
|
49
|
-
// dedupeKey: `DatabaseError_${errorType}`,
|
|
50
|
-
// message: `Database operation failed: ${error instanceof Error ? error.message : 'Unknown error'}`
|
|
51
|
-
// }));
|
|
52
|
-
// }
|
|
53
|
-
// // Demonstrates getErrorType with different error types
|
|
54
|
-
// const httpError = new HTTPError('Bad Request', 400, 'INVALID_REQUEST');
|
|
55
|
-
// const errorTypeFromCode = getErrorType(httpError); // Returns 'INVALID_REQUEST'
|
|
56
|
-
// const typeError = new TypeError('Cannot read property of undefined');
|
|
57
|
-
// const errorTypeFromName = getErrorType(typeError); // Returns 'TypeError'
|
|
58
|
-
// await logger.sendLog(new LogEntry({
|
|
59
|
-
// level: 'error',
|
|
60
|
-
// dedupeKey: `HTTPError_${errorTypeFromCode}`,
|
|
61
|
-
// message: `HTTP request failed with code: ${errorTypeFromCode}`
|
|
62
|
-
// }));
|
|
63
|
-
// await logger.sendLog(new LogEntry({
|
|
64
|
-
// level: 'error',
|
|
65
|
-
// dedupeKey: `TypeError_${errorTypeFromName}`,
|
|
66
|
-
// message: `Type error occurred: ${errorTypeFromName}`
|
|
67
|
-
// }));
|
|
68
|
-
// // Demonstrate deduplication - this message will be suppressed if sent within 5 minutes
|
|
69
|
-
// await logger.sendLog(new LogEntry({
|
|
70
|
-
// level: 'warn',
|
|
71
|
-
// dedupeKey: 'RateLimit',
|
|
72
|
-
// message: 'API rate limit approaching'
|
|
73
|
-
// }));
|
|
74
|
-
// await logger.sendLog(new LogEntry({
|
|
75
|
-
// level: 'warn',
|
|
76
|
-
// dedupeKey: 'RateLimit',
|
|
77
|
-
// message: 'API rate limit approaching'
|
|
78
|
-
// })); // This will be deduplicated
|
|
79
|
-
// // Retry any failed transmissions
|
|
80
|
-
// await logger.retryFailedTransmissions();
|
|
81
|
-
// } catch (error) {
|
|
82
|
-
// console.error('Failed to send logs:', error);
|
|
83
|
-
// } finally {
|
|
84
|
-
// // Clean up resources
|
|
85
|
-
// await logger.destroy();
|
|
86
|
-
// }
|
|
87
|
-
// }
|
|
88
|
-
//# sourceMappingURL=mm-connector-logger-example.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mm-connector-logger-example.js","sourceRoot":"","sources":["../../../src/utils/connector-log/mm-connector-logger-example.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,uEAAuE;AACvE,8CAA8C;AAC9C,iDAAiD;AACjD,MAAM;AACN,iEAAiE;AACjE,MAAM;AACN,8EAA8E;AAC9E,kFAAkF;AAClF,6EAA6E;AAC7E,MAAM;;AAEN,kCAAkC;AAClC,2EAA2E;AAC3E,0EAA0E;AAC1E,8DAA8D;AAC9D,6DAA6D;AAC7D,6DAA6D;AAC7D,SAAS;AAET,UAAU;AACV,0CAA0C;AAC1C,0CAA0C;AAC1C,uBAAuB;AACvB,gCAAgC;AAChC,yCAAyC;AACzC,WAAW;AAEX,mDAAmD;AACnD,qCAAqC;AACrC,4CAA4C;AAC5C,yBAAyB;AACzB,qCAAqC;AACrC,6CAA6C;AAC7C,aAAa;AACb,iFAAiF;AACjF,QAAQ;AAER,kCAAkC;AAClC,0CAA0C;AAC1C,uBAAuB;AACvB,mCAAmC;AACnC,uDAAuD;AACvD,WAAW;AAEX,+DAA+D;AAC/D,YAAY;AACZ,kEAAkE;AAClE,wBAAwB;AACxB,+CAA+C;AAC/C,4CAA4C;AAC5C,0BAA0B;AAC1B,mDAAmD;AACnD,4GAA4G;AAC5G,aAAa;AACb,QAAQ;AAER,8DAA8D;AAC9D,8EAA8E;AAC9E,sFAAsF;AAEtF,4EAA4E;AAC5E,gFAAgF;AAEhF,0CAA0C;AAC1C,wBAAwB;AACxB,qDAAqD;AACrD,uEAAuE;AACvE,WAAW;AACX,0CAA0C;AAC1C,wBAAwB;AACxB,qDAAqD;AACrD,6DAA6D;AAC7D,WAAW;AAEX,8FAA8F;AAC9F,0CAA0C;AAC1C,uBAAuB;AACvB,gCAAgC;AAChC,8CAA8C;AAC9C,WAAW;AACX,0CAA0C;AAC1C,uBAAuB;AACvB,gCAAgC;AAChC,8CAA8C;AAC9C,wCAAwC;AAExC,wCAAwC;AACxC,+CAA+C;AAE/C,sBAAsB;AACtB,oDAAoD;AACpD,gBAAgB;AAChB,4BAA4B;AAC5B,8BAA8B;AAC9B,MAAM;AACN,IAAI"}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { MMApiClient } from '../../services/mm-api-service/mm-api-service.js';
|
|
2
|
-
import logger from '../../services/reporting-service/logger.js';
|
|
3
|
-
/**
|
|
4
|
-
* dedupeKey - key used to deduplicate log entries when a LogDeduper is injected into the MMConnectorLogger
|
|
5
|
-
*
|
|
6
|
-
* A recommended practice is to use a meaningful unique identifier for this log entry type.
|
|
7
|
-
* Examples: SyncFromERPCompleted
|
|
8
|
-
* SyncFromERPError:HTTPError
|
|
9
|
-
*/
|
|
10
|
-
export class LogEntry {
|
|
11
|
-
level;
|
|
12
|
-
message;
|
|
13
|
-
dedupeKey;
|
|
14
|
-
eventTime;
|
|
15
|
-
constructor(params) {
|
|
16
|
-
this.level = params.level;
|
|
17
|
-
this.message = params.message;
|
|
18
|
-
this.dedupeKey = params.dedupeKey;
|
|
19
|
-
this.eventTime = Date.now();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Helper function to check if a value is a LogResponse
|
|
24
|
-
*/
|
|
25
|
-
function isLogResponse(value) {
|
|
26
|
-
if (value === null || typeof value !== 'object')
|
|
27
|
-
return false;
|
|
28
|
-
const v = value;
|
|
29
|
-
if (typeof v.message !== 'string')
|
|
30
|
-
return false;
|
|
31
|
-
if ('processed' in v && typeof v.processed !== 'number')
|
|
32
|
-
return false;
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* MM Connector Logger for sending progress and error updates to the MM cloud
|
|
37
|
-
*
|
|
38
|
-
* This class provides helper methods to send individual logs to the
|
|
39
|
-
* MM connector logging API, providing support for validation, retries, and error handling
|
|
40
|
-
* according to the API specification.
|
|
41
|
-
*
|
|
42
|
-
* By injecting a LogDeduper, the log entries are deduplicated across jobs over a specified time window
|
|
43
|
-
*/
|
|
44
|
-
export class MMConnectorLogger {
|
|
45
|
-
MAX_MSG_LEN = 2000;
|
|
46
|
-
mmApiClient;
|
|
47
|
-
deduper;
|
|
48
|
-
source;
|
|
49
|
-
constructor(source, deduper) {
|
|
50
|
-
if (source.length < 1 || source.length > 64) {
|
|
51
|
-
throw new Error('source must be 1-64 characters');
|
|
52
|
-
}
|
|
53
|
-
this.mmApiClient = new MMApiClient();
|
|
54
|
-
this.deduper = deduper;
|
|
55
|
-
this.source = source;
|
|
56
|
-
}
|
|
57
|
-
// Deduplication helpers are delegated to injected FileLogDeduper
|
|
58
|
-
/**
|
|
59
|
-
* Send a single log entry to the MM cloud with deduplication.
|
|
60
|
-
*
|
|
61
|
-
* The deduplication is handled by the injected LogDeduper.
|
|
62
|
-
* If no deduper is injected, the log entry is sent without deduplication.
|
|
63
|
-
*
|
|
64
|
-
* The standard deduper, FileLogDeduper, stores the deduplication state in a file,
|
|
65
|
-
* allowing deduplication across jobs,
|
|
66
|
-
*
|
|
67
|
-
* @param logEntry - The log entry to send
|
|
68
|
-
* @returns Promise resolving to the API response or null if suppressed
|
|
69
|
-
* @throws HTTPError if the request fails or Error if the log entry is invalid
|
|
70
|
-
*/
|
|
71
|
-
async sendLog(logEntry) {
|
|
72
|
-
this.validateLogEntry(logEntry);
|
|
73
|
-
const now = Date.now();
|
|
74
|
-
let messageToSend = logEntry.message;
|
|
75
|
-
if (this.deduper) {
|
|
76
|
-
const decision = await this.deduper.decide(logEntry, now);
|
|
77
|
-
if (decision === null)
|
|
78
|
-
return null; // suppressed
|
|
79
|
-
messageToSend = decision;
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
const logEntryToSend = {
|
|
83
|
-
source: this.source,
|
|
84
|
-
level: logEntry.level,
|
|
85
|
-
message: messageToSend
|
|
86
|
-
};
|
|
87
|
-
const response = await this.mmApiClient.sendConnectorLog(logEntryToSend);
|
|
88
|
-
if (this.deduper) {
|
|
89
|
-
await this.deduper.onSuccess(logEntry, now);
|
|
90
|
-
}
|
|
91
|
-
if (!isLogResponse(response)) {
|
|
92
|
-
logger.warn('Unexpected success response format from MM API for connector log', { response });
|
|
93
|
-
return { message: 'Unexpected success response format when sending log' };
|
|
94
|
-
}
|
|
95
|
-
return { message: response.message };
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
logger.error('Failed to send log to MM cloud', {
|
|
99
|
-
level: logEntry.level,
|
|
100
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
101
|
-
});
|
|
102
|
-
throw error;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* @throws Error if validation fails
|
|
107
|
-
*/
|
|
108
|
-
validateLogEntry(logEntry) {
|
|
109
|
-
const allowedLevels = ['info', 'warn', 'error'];
|
|
110
|
-
if (!logEntry.level || !allowedLevels.includes(logEntry.level)) {
|
|
111
|
-
throw new Error(`level must be one of: ${allowedLevels.join(', ')}`);
|
|
112
|
-
}
|
|
113
|
-
if (!logEntry.message || typeof logEntry.message !== 'string') {
|
|
114
|
-
throw new Error('message is required and must be a string');
|
|
115
|
-
}
|
|
116
|
-
// Truncate message to MAX_MSG_LEN characters
|
|
117
|
-
logEntry.message = logEntry.message.slice(0, this.MAX_MSG_LEN);
|
|
118
|
-
if (!logEntry.dedupeKey || typeof logEntry.dedupeKey !== 'string') {
|
|
119
|
-
throw new Error('dedupeKey is required and must be a string');
|
|
120
|
-
}
|
|
121
|
-
if (logEntry.dedupeKey.trim().length < 1) {
|
|
122
|
-
throw new Error('dedupeKey must be a non-empty string');
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Retry all failed transmissions silently
|
|
127
|
-
* This method attempts to retry all messages that failed to transmit
|
|
128
|
-
* and removes them from the failed list if successful, else leaves them for the client to retry
|
|
129
|
-
*
|
|
130
|
-
* Expected usage is by a client to call this as part of its own retry mechanism
|
|
131
|
-
*/
|
|
132
|
-
async retryFailedTransmissions() {
|
|
133
|
-
if (!this.deduper || !this.deduper.retryFailedTransmissions) {
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
await this.deduper.retryFailedTransmissions(async (entry, message) => {
|
|
137
|
-
await this.mmApiClient.sendConnectorLog({
|
|
138
|
-
source: this.source,
|
|
139
|
-
level: entry.level,
|
|
140
|
-
message
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Clean up resources
|
|
146
|
-
*/
|
|
147
|
-
async destroy() {
|
|
148
|
-
await this.mmApiClient.destroy();
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
//# sourceMappingURL=mm-connector-logger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mm-connector-logger.js","sourceRoot":"","sources":["../../../src/utils/connector-log/mm-connector-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Add a new field to the data from an external source by matching on the same field name
|
|
3
|
-
* @param data The data to add the new field to
|
|
4
|
-
* @param externalSource The external source to get the new field from
|
|
5
|
-
* @param externalSourceFieldName The field in both data and external source to match on
|
|
6
|
-
* @param newFieldName The name of the new field to add
|
|
7
|
-
* @param defaultValue The default value to use if there is no match
|
|
8
|
-
*/
|
|
9
|
-
export const addNewFieldFromExternalSource = (data, externalSource, externalSourceFieldName, newFieldName, defaultValue = "-") => {
|
|
10
|
-
return data.map((current) => {
|
|
11
|
-
const cacheEntry = externalSource.find((existing) => existing[externalSourceFieldName] === current[externalSourceFieldName]);
|
|
12
|
-
const newFieldValue = cacheEntry?.[newFieldName] || defaultValue;
|
|
13
|
-
return {
|
|
14
|
-
...current,
|
|
15
|
-
[newFieldName]: newFieldValue,
|
|
16
|
-
};
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Add a new field to the data from an external source by matching on different field names
|
|
21
|
-
* @param data The data to add the new field to
|
|
22
|
-
* @param externalSource The external source to get the new field from
|
|
23
|
-
* @param lookupField The field in the external source to match on
|
|
24
|
-
* @param currentField The field in the current data to match on
|
|
25
|
-
* @param newFieldName The name of the new field to add
|
|
26
|
-
* @param defaultValue The default value to use if there is no match
|
|
27
|
-
*/
|
|
28
|
-
export const addNewFieldFromLookupField = (data, externalSource, lookupField, currentField, newFieldName, defaultValue = "-") => {
|
|
29
|
-
return data.map((current) => {
|
|
30
|
-
const cacheEntry = externalSource.find((existing) => existing[lookupField] === current[currentField]);
|
|
31
|
-
const newFieldValue = cacheEntry?.[currentField] || defaultValue;
|
|
32
|
-
return {
|
|
33
|
-
...current,
|
|
34
|
-
[newFieldName]: newFieldValue,
|
|
35
|
-
};
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=data-transformation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-transformation.js","sourceRoot":"","sources":["../../src/utils/data-transformation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,IAA8B,EAC9B,cAAwC,EACxC,uBAA+B,EAC/B,YAAoB,EACpB,eAAuB,GAAG,EACA,EAAE;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CACpC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,uBAAuB,CAAC,KAAK,OAAO,CAAC,uBAAuB,CAAC,CACzE,CAAC;QACF,MAAM,aAAa,GAAG,UAAU,EAAE,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC;QAEjE,OAAO;YACL,GAAG,OAAO;YACV,CAAC,YAAY,CAAC,EAAE,aAAa;SAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,IAA8B,EAC9B,cAAwC,EACxC,WAAmB,EACnB,YAAoB,EACpB,YAAoB,EACpB,eAAuB,GAAG,EACA,EAAE;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CACpC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAC9D,CAAC;QACF,MAAM,aAAa,GAAG,UAAU,EAAE,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC;QAEjE,OAAO;YACL,GAAG,OAAO;YACV,CAAC,YAAY,CAAC,EAAE,aAAa;SAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/dist/utils/env.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This module contains utility functions to get environment variables with default values and validation.
|
|
3
|
-
*/
|
|
4
|
-
export declare const getEnvString: (key: string, defaultValue?: string) => string;
|
|
5
|
-
export declare const getEnvNumber: (key: string, defaultValue: number) => number;
|
|
6
|
-
export declare const getEnvBoolean: (key: string, defaultValue?: boolean) => boolean;
|
|
7
|
-
export declare const getOptionalEnv: (key: string) => string | undefined;
|
|
8
|
-
//# sourceMappingURL=env.d.ts.map
|
package/dist/utils/env.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,qBAAiB,KAAG,MAG7D,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,KAAK,MAAM,EACX,cAAc,MAAM,KACnB,MAaF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,sBAAoB,KAAG,OAmBjE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAErD,CAAC"}
|