@machinemetrics/mm-erp-sdk 0.1.9-beta.2 → 0.1.9-beta.4
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/dist/index.d.ts +42 -42
- 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.js +40 -39
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -1
- package/dist/services/data-sync-service/jobs/from-erp.js +48 -43
- package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +36 -35
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -1
- package/dist/services/data-sync-service/jobs/run-migrations.js +22 -21
- package/dist/services/data-sync-service/jobs/run-migrations.js.map +1 -1
- package/dist/services/data-sync-service/jobs/to-erp.js +48 -42
- 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 -6
- 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 -7
- 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.js +217 -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 +1 -1
- 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/index.d.ts +2 -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/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 +33 -33
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +65 -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.js +116 -0
- package/dist/utils/local-data-store/jobs-shared-data.js.map +1 -0
- package/dist/utils/mm-labor-ticket-helpers.d.ts +1 -1
- package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -1
- package/dist/utils/mm-labor-ticket-helpers.js +23 -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 +164 -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 +4 -4
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.js +168 -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 +4 -4
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.js +324 -0
- package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +1 -0
- package/dist/utils/time-utils.js +96 -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 +5 -6
- package/src/index.ts +42 -42
- 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 +2 -2
- package/src/services/data-sync-service/data-sync-service.ts +9 -3
- package/src/services/data-sync-service/index.ts +3 -3
- package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +3 -3
- package/src/services/data-sync-service/jobs/from-erp.ts +3 -3
- package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +2 -2
- package/src/services/data-sync-service/jobs/run-migrations.ts +2 -2
- package/src/services/data-sync-service/jobs/to-erp.ts +2 -2
- 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 -6
- package/src/services/mm-api-service/mm-api-service.ts +10 -10
- 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/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 +1 -1
- package/src/types/index.ts +2 -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/erp-type-from-entity.ts +1 -1
- package/src/utils/http-client.ts +1 -1
- package/src/utils/index.ts +33 -33
- package/src/utils/local-data-store/database-lock.ts +1 -1
- package/src/utils/mm-labor-ticket-helpers.ts +2 -2
- 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 +6 -6
- package/src/utils/standard-process-drivers/mm-entity-processor.ts +7 -7
- package/src/utils/standard-process-drivers/standard-process-drivers.ts +6 -6
- package/src/utils/time-utils.ts +3 -3
- package/src/utils/timezone.ts +2 -2
- package/dist/config-Bax6Ofp5.js +0 -418
- package/dist/config-Bax6Ofp5.js.map +0 -1
- package/dist/connector-factory-BaMIlES8.js +0 -30
- package/dist/connector-factory-BaMIlES8.js.map +0 -1
- package/dist/hashed-cache-manager-C1u9jQgY.js +0 -322
- package/dist/hashed-cache-manager-C1u9jQgY.js.map +0 -1
- package/dist/index-BkVlW0ZW.js +0 -192
- package/dist/index-BkVlW0ZW.js.map +0 -1
- package/dist/knexfile-Bng2Ru9c.js +0 -20
- package/dist/knexfile-Bng2Ru9c.js.map +0 -1
- package/dist/logger-DW5fyhVS.js +0 -17593
- package/dist/logger-DW5fyhVS.js.map +0 -1
- package/dist/mm-erp-sdk.js +0 -4266
- package/dist/mm-erp-sdk.js.map +0 -1
|
@@ -0,0 +1,151 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mm-connector-logger.js","sourceRoot":"","sources":["../../../src/utils/connector-log/mm-connector-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erp-type-from-entity.d.ts","sourceRoot":"","sources":["../../src/utils/erp-type-from-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"erp-type-from-entity.d.ts","sourceRoot":"","sources":["../../src/utils/erp-type-from-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAChD,UAAU,GAAG,SAAS,CAMxB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export function getERPAPITypeFromEntity(entity, entityMap) {
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
3
|
+
const entry = Object.entries(entityMap).find(([_, value]) => value.entity === entity);
|
|
4
|
+
return entry ? Number(entry[0]) : undefined;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=erp-type-from-entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erp-type-from-entity.js","sourceRoot":"","sources":["../../src/utils/erp-type-from-entity.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,SAAiD;IAEjD,6DAA6D;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAC1C,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CACxC,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,CAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** A utility to get the type of an error, particularly
|
|
2
|
+
* useful for the purpose of error deduplication
|
|
3
|
+
*
|
|
4
|
+
* Note: prefers 'code' over 'name' in the expectation that this better
|
|
5
|
+
* represents the error type
|
|
6
|
+
*/
|
|
7
|
+
const isNonEmptyString = (v) => typeof v === 'string' && v.trim().length > 0;
|
|
8
|
+
export function getErrorType(error) {
|
|
9
|
+
if (error && typeof error === 'object') {
|
|
10
|
+
const o = error;
|
|
11
|
+
if (isNonEmptyString(o.code))
|
|
12
|
+
return o.code;
|
|
13
|
+
if (isNonEmptyString(o.name))
|
|
14
|
+
return o.name;
|
|
15
|
+
const ctorName = o.constructor?.name;
|
|
16
|
+
if (isNonEmptyString(ctorName) && ctorName !== 'Object')
|
|
17
|
+
return ctorName;
|
|
18
|
+
}
|
|
19
|
+
return 'Error';
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=error-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-utils.js","sourceRoot":"","sources":["../../src/utils/error-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAEnG,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,KAA6E,CAAC;QACxF,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;QAC5C,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;QAC5C,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC;QACrC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;IAC3E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import axios, { AxiosError } from "axios";
|
|
2
|
+
import logger from "../services/reporting-service/logger.js";
|
|
3
|
+
export class HTTPError extends Error {
|
|
4
|
+
status;
|
|
5
|
+
code;
|
|
6
|
+
data;
|
|
7
|
+
constructor(message, status, code, data) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.status = status;
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.data = data;
|
|
12
|
+
this.name = "HTTPError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* This is a factory class for creating HTTPClient instances, at least for now
|
|
17
|
+
* just a wrapper around AxiosClient
|
|
18
|
+
*/
|
|
19
|
+
export class HTTPClientFactory {
|
|
20
|
+
static getInstance(config) {
|
|
21
|
+
return new AxiosClient(config.baseUrl, config.retryAttempts);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
class AxiosClient {
|
|
25
|
+
client = null;
|
|
26
|
+
retryAttempts;
|
|
27
|
+
isDestroyed = false;
|
|
28
|
+
inFlightControllers = new Set();
|
|
29
|
+
pendingTimeouts = new Set();
|
|
30
|
+
pendingSleepResolvers = new Set();
|
|
31
|
+
/**
|
|
32
|
+
* Note regarding baseURL, from https://github.com/axios/axios
|
|
33
|
+
* `baseURL` will be prepended to `url` unless `url` is absolute and option `allowAbsoluteUrls` is set to true (the default).
|
|
34
|
+
* It can be convenient to set `baseURL` for an instance of axios to pass relative URLs to methods of that instance.
|
|
35
|
+
*/
|
|
36
|
+
constructor(baseUrl, retryAttempts) {
|
|
37
|
+
this.client = axios.create({
|
|
38
|
+
baseURL: baseUrl,
|
|
39
|
+
timeout: 30000,
|
|
40
|
+
headers: {
|
|
41
|
+
"Content-Type": "application/json",
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
this.retryAttempts = retryAttempts;
|
|
45
|
+
}
|
|
46
|
+
sleep(ms) {
|
|
47
|
+
return new Promise((resolve) => {
|
|
48
|
+
if (this.isDestroyed) {
|
|
49
|
+
resolve();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const timeout = setTimeout(() => {
|
|
53
|
+
this.pendingTimeouts.delete(timeout);
|
|
54
|
+
this.pendingSleepResolvers.delete(resolve);
|
|
55
|
+
resolve();
|
|
56
|
+
}, ms);
|
|
57
|
+
this.pendingTimeouts.add(timeout);
|
|
58
|
+
this.pendingSleepResolvers.add(resolve);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async request(config) {
|
|
62
|
+
if (this.isDestroyed || !this.client) {
|
|
63
|
+
throw new HTTPError("HTTP client has been destroyed", 500);
|
|
64
|
+
}
|
|
65
|
+
const controller = new AbortController();
|
|
66
|
+
this.inFlightControllers.add(controller);
|
|
67
|
+
const axiosConfig = {
|
|
68
|
+
method: config.method,
|
|
69
|
+
url: config.url,
|
|
70
|
+
headers: config.headers,
|
|
71
|
+
data: config.data,
|
|
72
|
+
params: config.params,
|
|
73
|
+
signal: controller.signal,
|
|
74
|
+
};
|
|
75
|
+
logger.info("HTTP request starting", {
|
|
76
|
+
url: config.url,
|
|
77
|
+
method: config.method,
|
|
78
|
+
baseURL: this.client.defaults.baseURL,
|
|
79
|
+
retryAttempts: this.retryAttempts
|
|
80
|
+
});
|
|
81
|
+
// Extra console.log for debugging
|
|
82
|
+
console.log("=== FULL URL DEBUG ===");
|
|
83
|
+
console.log("baseURL:", this.client.defaults.baseURL);
|
|
84
|
+
console.log("relative url:", config.url);
|
|
85
|
+
console.log("full constructed URL:", (this.client.defaults.baseURL || "") + config.url);
|
|
86
|
+
console.log("method:", config.method);
|
|
87
|
+
let lastError;
|
|
88
|
+
try {
|
|
89
|
+
for (let attempt = 0; attempt <= this.retryAttempts; attempt++) {
|
|
90
|
+
try {
|
|
91
|
+
logger.info(`HTTP request attempt ${attempt + 1}/${this.retryAttempts + 1}`);
|
|
92
|
+
const response = await this.client.request(axiosConfig);
|
|
93
|
+
logger.info("HTTP request succeeded", { status: response.status });
|
|
94
|
+
return {
|
|
95
|
+
data: response.data,
|
|
96
|
+
status: response.status,
|
|
97
|
+
headers: response.headers,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
lastError = error;
|
|
102
|
+
const isAxiosErr = error instanceof AxiosError;
|
|
103
|
+
const code = isAxiosErr ? error.code : undefined;
|
|
104
|
+
const status = isAxiosErr ? error.response?.status : undefined;
|
|
105
|
+
const errorConstructor = error instanceof Error ? error.constructor.name : undefined;
|
|
106
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
107
|
+
logger.info(`HTTP request attempt ${attempt + 1} failed`, {
|
|
108
|
+
errorType: typeof error,
|
|
109
|
+
errorConstructor,
|
|
110
|
+
isAxiosError: isAxiosErr,
|
|
111
|
+
message,
|
|
112
|
+
code,
|
|
113
|
+
status,
|
|
114
|
+
});
|
|
115
|
+
// Don't retry on 4xx errors (client errors)
|
|
116
|
+
if (error instanceof AxiosError &&
|
|
117
|
+
error.response?.status &&
|
|
118
|
+
error.response.status >= 400 &&
|
|
119
|
+
error.response.status < 500) {
|
|
120
|
+
logger.info("Not retrying due to 4xx client error");
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
// Don't retry canceled/aborted requests
|
|
124
|
+
if (error instanceof AxiosError && error.code === "ERR_CANCELED") {
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
// If this was the last attempt, don't wait
|
|
128
|
+
if (attempt < this.retryAttempts) {
|
|
129
|
+
const waitTime = Math.pow(2, attempt) * 1000;
|
|
130
|
+
logger.info(`Waiting ${waitTime}ms before retry`);
|
|
131
|
+
await this.sleep(waitTime);
|
|
132
|
+
if (this.isDestroyed) {
|
|
133
|
+
throw new HTTPError("HTTP client has been destroyed", 500);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
this.inFlightControllers.delete(controller);
|
|
141
|
+
}
|
|
142
|
+
logger.info("HTTP request failed after all retries, throwing error");
|
|
143
|
+
throw this.handleError(lastError, config);
|
|
144
|
+
}
|
|
145
|
+
handleError(error, requestConfig) {
|
|
146
|
+
if (error instanceof AxiosError) {
|
|
147
|
+
// Build a more descriptive error message that includes the URL and method
|
|
148
|
+
const baseUrl = this.client?.defaults.baseURL || "";
|
|
149
|
+
const fullUrl = requestConfig
|
|
150
|
+
? `${baseUrl}${requestConfig.url}`
|
|
151
|
+
: "Unknown URL";
|
|
152
|
+
const method = requestConfig?.method || "Unknown method";
|
|
153
|
+
const errorMessage = `${error.message} (${method} ${fullUrl})`;
|
|
154
|
+
return new HTTPError(errorMessage, error.response?.status || 500, error.code, error.response?.data);
|
|
155
|
+
}
|
|
156
|
+
return new HTTPError(error instanceof Error ? error.message : "Unknown error occurred", 500);
|
|
157
|
+
}
|
|
158
|
+
async destroy() {
|
|
159
|
+
if (this.isDestroyed)
|
|
160
|
+
return;
|
|
161
|
+
this.isDestroyed = true;
|
|
162
|
+
// Abort any in-flight requests
|
|
163
|
+
for (const c of this.inFlightControllers) {
|
|
164
|
+
try {
|
|
165
|
+
c.abort();
|
|
166
|
+
}
|
|
167
|
+
catch { /* ignore: abort may throw in some environments */ }
|
|
168
|
+
}
|
|
169
|
+
this.inFlightControllers.clear();
|
|
170
|
+
// Cancel any pending retry waits
|
|
171
|
+
for (const t of this.pendingTimeouts) {
|
|
172
|
+
clearTimeout(t);
|
|
173
|
+
}
|
|
174
|
+
this.pendingTimeouts.clear();
|
|
175
|
+
for (const resolve of this.pendingSleepResolvers) {
|
|
176
|
+
try {
|
|
177
|
+
resolve();
|
|
178
|
+
}
|
|
179
|
+
catch { /* ignore: resolver threw; cleanup proceeds */ }
|
|
180
|
+
}
|
|
181
|
+
this.pendingSleepResolvers.clear();
|
|
182
|
+
// Drop axios instance reference
|
|
183
|
+
this.client = null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/utils/http-client.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
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";
|
|
9
|
-
export { addNewFieldFromExternalSource, addNewFieldFromLookupField, } from "./data-transformation";
|
|
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
|
+
export { addNewFieldFromExternalSource, addNewFieldFromLookupField, } from "./data-transformation.js";
|
|
10
10
|
/**
|
|
11
11
|
* Timezone and time-related utilities
|
|
12
12
|
*/
|
|
13
|
-
export { getTimezoneOffsetAndPersist } from "./time-utils";
|
|
14
|
-
export { formatDateWithTZOffset, convertToLocalTime, toISOWithOffset } from "./timezone";
|
|
15
|
-
export { applyTimezoneOffsetsToFields } from "./time-utils";
|
|
16
|
-
export * from "./time-utils";
|
|
13
|
+
export { getTimezoneOffsetAndPersist } from "./time-utils.js";
|
|
14
|
+
export { formatDateWithTZOffset, convertToLocalTime, toISOWithOffset } from "./timezone.js";
|
|
15
|
+
export { applyTimezoneOffsetsToFields } from "./time-utils.js";
|
|
16
|
+
export * from "./time-utils.js";
|
|
17
17
|
/**
|
|
18
18
|
* Caching and record tracking utilities
|
|
19
19
|
*/
|
|
20
|
-
export { RecordTrackingManager } from "../services/caching-service/record-tracking-manager";
|
|
21
|
-
export type { RecordTrackingObject } from "../services/caching-service/record-tracking-manager";
|
|
22
|
-
export { HashedCacheManager } from "../services/caching-service/hashed-cache-manager";
|
|
23
|
-
export { BatchCacheManager } from "../services/caching-service/batch-cache-manager";
|
|
20
|
+
export { RecordTrackingManager } from "../services/caching-service/record-tracking-manager.js";
|
|
21
|
+
export type { RecordTrackingObject } from "../services/caching-service/record-tracking-manager.js";
|
|
22
|
+
export { HashedCacheManager } from "../services/caching-service/hashed-cache-manager.js";
|
|
23
|
+
export { BatchCacheManager } from "../services/caching-service/batch-cache-manager.js";
|
|
24
24
|
/**
|
|
25
25
|
* Process and data transformation utilities
|
|
26
26
|
*/
|
|
27
|
-
export { StandardProcessDrivers } from "./standard-process-drivers/";
|
|
28
|
-
export type { WriteEntitiesToMMResult } from "./standard-process-drivers/";
|
|
29
|
-
export { MMBatchValidationError } from "./standard-process-drivers/";
|
|
30
|
-
export { getCachedTimezoneOffset, getCachedTimezoneName, } from "./local-data-store/jobs-shared-data";
|
|
31
|
-
export { getInitialLoadComplete, setInitialLoadComplete, } from "./local-data-store/jobs-shared-data";
|
|
27
|
+
export { StandardProcessDrivers } from "./standard-process-drivers/index.js";
|
|
28
|
+
export type { WriteEntitiesToMMResult } from "./standard-process-drivers/index.js";
|
|
29
|
+
export { MMBatchValidationError } from "./standard-process-drivers/index.js";
|
|
30
|
+
export { getCachedTimezoneOffset, getCachedTimezoneName, } from "./local-data-store/jobs-shared-data.js";
|
|
31
|
+
export { getInitialLoadComplete, setInitialLoadComplete, } from "./local-data-store/jobs-shared-data.js";
|
|
32
32
|
/**
|
|
33
33
|
* ERP API utilities
|
|
34
34
|
*/
|
|
35
|
-
export * from "../services/erp-api-services/rest/rest-api-service";
|
|
36
|
-
export * from "../services/erp-api-services/rest/get-query-params";
|
|
37
|
-
export { getERPAPITypeFromEntity } from "./erp-type-from-entity";
|
|
35
|
+
export * from "../services/erp-api-services/rest/rest-api-service.js";
|
|
36
|
+
export * from "../services/erp-api-services/rest/get-query-params.js";
|
|
37
|
+
export { getERPAPITypeFromEntity } from "./erp-type-from-entity.js";
|
|
38
38
|
/**
|
|
39
39
|
* HTTP Client utilities
|
|
40
40
|
*/
|
|
41
|
-
export { HTTPClientFactory } from "./http-client";
|
|
42
|
-
export { HTTPError } from "./http-client";
|
|
43
|
-
export type { HTTPClient, HTTPRequestConfig, HTTPResponse } from "./http-client";
|
|
41
|
+
export { HTTPClientFactory } from "./http-client.js";
|
|
42
|
+
export { HTTPError } from "./http-client.js";
|
|
43
|
+
export type { HTTPClient, HTTPRequestConfig, HTTPResponse } from "./http-client.js";
|
|
44
44
|
/**
|
|
45
45
|
* MM Labor Ticket utilities
|
|
46
46
|
*/
|
|
47
|
-
export * from "./mm-labor-ticket-helpers";
|
|
48
|
-
export { getErrorType } from './error-utils';
|
|
47
|
+
export * from "./mm-labor-ticket-helpers.js";
|
|
48
|
+
export { getErrorType } from './error-utils.js';
|
|
49
49
|
/**
|
|
50
50
|
* MM Connector Logger utilities
|
|
51
51
|
*/
|
|
52
|
-
export { MMConnectorLogger, LogEntry, type LogResponse, type LogLevelString } from './connector-log/mm-connector-logger';
|
|
53
|
-
export { FileLogDeduper } from './connector-log/log-deduper';
|
|
52
|
+
export { MMConnectorLogger, LogEntry, type LogResponse, type LogLevelString } from './connector-log/mm-connector-logger.js';
|
|
53
|
+
export { FileLogDeduper } from './connector-log/log-deduper.js';
|
|
54
54
|
/**
|
|
55
55
|
* Application initializer
|
|
56
56
|
*/
|
|
57
|
-
export * from "./application-initializer";
|
|
57
|
+
export * from "./application-initializer.js";
|
|
58
58
|
/**
|
|
59
59
|
* GraphQL utilities
|
|
60
60
|
*/
|
|
61
|
-
export { GraphQLService } from "../services/erp-api-services/graphql/graphql-service";
|
|
62
|
-
export { OAuthClient } from "../services/erp-api-services/oauth-client";
|
|
61
|
+
export { GraphQLService } from "../services/erp-api-services/graphql/graphql-service.js";
|
|
62
|
+
export { OAuthClient } from "../services/erp-api-services/oauth-client.js";
|
|
63
63
|
/**
|
|
64
64
|
* Connector factory utilities
|
|
65
65
|
*/
|
|
66
|
-
export { createConnectorFromPath } from "./connector-factory";
|
|
66
|
+
export { createConnectorFromPath } from "./connector-factory.js";
|
|
67
67
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,cAAc,iBAAiB,CAAC;AAEhC;;GAEG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAC/F,YAAY,EAAE,oBAAoB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AAEvF;;GAEG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,YAAY,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,wCAAwC,CAAC;AAGhD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;AAEhD;;GAEG;AACH,cAAc,uDAAuD,CAAC;AACtE,cAAc,uDAAuD,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEpF;;GAEG;AACH,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC5H,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE;;GAEG;AACH,cAAc,8BAA8B,CAAC;AAE7C;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,yDAAyD,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAE3E;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for data manipulation
|
|
3
|
+
*/
|
|
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
|
+
export { addNewFieldFromExternalSource, addNewFieldFromLookupField, } from "./data-transformation.js";
|
|
10
|
+
/**
|
|
11
|
+
* Timezone and time-related utilities
|
|
12
|
+
*/
|
|
13
|
+
export { getTimezoneOffsetAndPersist } from "./time-utils.js";
|
|
14
|
+
export { formatDateWithTZOffset, convertToLocalTime, toISOWithOffset } from "./timezone.js";
|
|
15
|
+
export { applyTimezoneOffsetsToFields } from "./time-utils.js";
|
|
16
|
+
export * from "./time-utils.js";
|
|
17
|
+
/**
|
|
18
|
+
* Caching and record tracking utilities
|
|
19
|
+
*/
|
|
20
|
+
export { RecordTrackingManager } from "../services/caching-service/record-tracking-manager.js";
|
|
21
|
+
export { HashedCacheManager } from "../services/caching-service/hashed-cache-manager.js";
|
|
22
|
+
export { BatchCacheManager } from "../services/caching-service/batch-cache-manager.js";
|
|
23
|
+
/**
|
|
24
|
+
* Process and data transformation utilities
|
|
25
|
+
*/
|
|
26
|
+
export { StandardProcessDrivers } from "./standard-process-drivers/index.js";
|
|
27
|
+
export { MMBatchValidationError } from "./standard-process-drivers/index.js";
|
|
28
|
+
export { getCachedTimezoneOffset, getCachedTimezoneName, } from "./local-data-store/jobs-shared-data.js";
|
|
29
|
+
// Local data store
|
|
30
|
+
export { getInitialLoadComplete, setInitialLoadComplete, } from "./local-data-store/jobs-shared-data.js";
|
|
31
|
+
/**
|
|
32
|
+
* ERP API utilities
|
|
33
|
+
*/
|
|
34
|
+
export * from "../services/erp-api-services/rest/rest-api-service.js";
|
|
35
|
+
export * from "../services/erp-api-services/rest/get-query-params.js";
|
|
36
|
+
export { getERPAPITypeFromEntity } from "./erp-type-from-entity.js";
|
|
37
|
+
/**
|
|
38
|
+
* HTTP Client utilities
|
|
39
|
+
*/
|
|
40
|
+
export { HTTPClientFactory } from "./http-client.js";
|
|
41
|
+
export { HTTPError } from "./http-client.js";
|
|
42
|
+
/**
|
|
43
|
+
* MM Labor Ticket utilities
|
|
44
|
+
*/
|
|
45
|
+
export * from "./mm-labor-ticket-helpers.js";
|
|
46
|
+
export { getErrorType } from './error-utils.js';
|
|
47
|
+
/**
|
|
48
|
+
* MM Connector Logger utilities
|
|
49
|
+
*/
|
|
50
|
+
export { MMConnectorLogger, LogEntry } from './connector-log/mm-connector-logger.js';
|
|
51
|
+
export { FileLogDeduper } from './connector-log/log-deduper.js';
|
|
52
|
+
/**
|
|
53
|
+
* Application initializer
|
|
54
|
+
*/
|
|
55
|
+
export * from "./application-initializer.js";
|
|
56
|
+
/**
|
|
57
|
+
* GraphQL utilities
|
|
58
|
+
*/
|
|
59
|
+
export { GraphQLService } from "../services/erp-api-services/graphql/graphql-service.js";
|
|
60
|
+
export { OAuthClient } from "../services/erp-api-services/oauth-client.js";
|
|
61
|
+
/**
|
|
62
|
+
* Connector factory utilities
|
|
63
|
+
*/
|
|
64
|
+
export { createConnectorFromPath } from "./connector-factory.js";
|
|
65
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,cAAc,iBAAiB,CAAC;AAEhC;;GAEG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAE/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AAEvF;;GAEG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,wCAAwC,CAAC;AAEhD,mBAAmB;AACnB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;AAEhD;;GAEG;AACH,cAAc,uDAAuD,CAAC;AACtE,cAAc,uDAAuD,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;GAEG;AACH,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAyC,MAAM,wCAAwC,CAAC;AAC5H,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE;;GAEG;AACH,cAAc,8BAA8B,CAAC;AAE7C;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,yDAAyD,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAE3E;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
|