@machinemetrics/mm-erp-sdk 0.2.0-beta.2 → 0.3.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/index.d.ts +42 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +19 -0
- package/dist/knexfile.js.map +1 -0
- package/dist/migrations/20241015162631_create_cache_table.d.ts +4 -0
- package/dist/migrations/20241015162631_create_cache_table.d.ts.map +1 -0
- package/dist/migrations/20241015162631_create_cache_table.js +11 -15
- package/dist/migrations/20241015162631_create_cache_table.js.map +1 -1
- package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts +4 -0
- package/dist/migrations/20241015162632_create_sdk_cache_table.d.ts.map +1 -0
- package/dist/migrations/20241015162632_create_sdk_cache_table.js +11 -15
- package/dist/migrations/20241015162632_create_sdk_cache_table.js.map +1 -1
- package/dist/migrations/20250103162631_create_record_tracking_table.d.ts +4 -0
- package/dist/migrations/20250103162631_create_record_tracking_table.d.ts.map +1 -0
- package/dist/migrations/20250103162631_create_record_tracking_table.js +14 -15
- package/dist/migrations/20250103162631_create_record_tracking_table.js.map +1 -1
- package/dist/services/caching-service/batch-cache-manager.d.ts +1 -1
- package/dist/services/caching-service/batch-cache-manager.d.ts.map +1 -1
- package/dist/services/caching-service/batch-cache-manager.js +84 -0
- package/dist/services/caching-service/batch-cache-manager.js.map +1 -0
- package/dist/services/caching-service/hashed-cache-manager.d.ts +2 -2
- package/dist/services/caching-service/hashed-cache-manager.d.ts.map +1 -1
- package/dist/services/caching-service/hashed-cache-manager.js +223 -0
- package/dist/services/caching-service/hashed-cache-manager.js.map +1 -0
- package/dist/services/caching-service/index.d.ts +1 -1
- package/dist/services/caching-service/index.d.ts.map +1 -1
- package/dist/services/caching-service/index.js +2 -0
- package/dist/services/caching-service/index.js.map +1 -0
- package/dist/services/caching-service/record-tracking-manager.d.ts +1 -1
- package/dist/services/caching-service/record-tracking-manager.d.ts.map +1 -1
- package/dist/services/caching-service/record-tracking-manager.js +28 -0
- package/dist/services/caching-service/record-tracking-manager.js.map +1 -0
- package/dist/services/data-sync-service/configuration-manager.d.ts +1 -1
- package/dist/services/data-sync-service/configuration-manager.d.ts.map +1 -1
- package/dist/services/data-sync-service/configuration-manager.js +163 -0
- package/dist/services/data-sync-service/configuration-manager.js.map +1 -0
- package/dist/services/data-sync-service/data-sync-service.d.ts.map +1 -1
- package/dist/services/data-sync-service/data-sync-service.js +95 -0
- package/dist/services/data-sync-service/data-sync-service.js.map +1 -0
- package/dist/services/data-sync-service/index.d.ts +3 -3
- package/dist/services/data-sync-service/index.d.ts.map +1 -1
- package/dist/services/data-sync-service/index.js +10 -0
- package/dist/services/data-sync-service/index.js.map +1 -0
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js +42 -40
- package/dist/services/data-sync-service/jobs/clean-up-expired-cache.js.map +1 -1
- package/dist/services/data-sync-service/jobs/from-erp.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/from-erp.js +50 -37
- package/dist/services/data-sync-service/jobs/from-erp.js.map +1 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js +38 -36
- package/dist/services/data-sync-service/jobs/retry-failed-labor-tickets.js.map +1 -1
- package/dist/services/data-sync-service/jobs/run-migrations.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/run-migrations.js +24 -22
- package/dist/services/data-sync-service/jobs/run-migrations.js.map +1 -1
- package/dist/services/data-sync-service/jobs/to-erp.d.ts.map +1 -1
- package/dist/services/data-sync-service/jobs/to-erp.js +49 -49
- package/dist/services/data-sync-service/jobs/to-erp.js.map +1 -1
- package/dist/services/erp-api-services/errors.d.ts +1 -1
- package/dist/services/erp-api-services/errors.d.ts.map +1 -1
- package/dist/services/erp-api-services/errors.js +83 -0
- package/dist/services/erp-api-services/errors.js.map +1 -0
- package/dist/services/erp-api-services/graphql/graphql-service.d.ts +2 -2
- package/dist/services/erp-api-services/graphql/graphql-service.d.ts.map +1 -1
- package/dist/services/erp-api-services/graphql/graphql-service.js +102 -0
- package/dist/services/erp-api-services/graphql/graphql-service.js.map +1 -0
- package/dist/services/erp-api-services/graphql/types.js +6 -0
- package/dist/services/erp-api-services/graphql/types.js.map +1 -0
- package/dist/services/erp-api-services/index.d.ts +8 -8
- package/dist/services/erp-api-services/index.d.ts.map +1 -1
- package/dist/services/erp-api-services/index.js +13 -0
- package/dist/services/erp-api-services/index.js.map +1 -0
- package/dist/services/erp-api-services/oauth-client.js +41 -0
- package/dist/services/erp-api-services/oauth-client.js.map +1 -0
- package/dist/services/erp-api-services/rest/get-query-params.js +23 -0
- package/dist/services/erp-api-services/rest/get-query-params.js.map +1 -0
- package/dist/services/erp-api-services/rest/rest-api-service.d.ts +2 -2
- package/dist/services/erp-api-services/rest/rest-api-service.d.ts.map +1 -1
- package/dist/services/erp-api-services/rest/rest-api-service.js +163 -0
- package/dist/services/erp-api-services/rest/rest-api-service.js.map +1 -0
- package/dist/services/erp-api-services/types.d.ts +2 -2
- package/dist/services/erp-api-services/types.d.ts.map +1 -1
- package/dist/services/erp-api-services/types.js +2 -0
- package/dist/services/erp-api-services/types.js.map +1 -0
- package/dist/services/mm-api-service/index.d.ts +6 -13
- package/dist/services/mm-api-service/index.d.ts.map +1 -1
- package/dist/services/mm-api-service/index.js +15 -0
- package/dist/services/mm-api-service/index.js.map +1 -0
- package/dist/services/mm-api-service/mm-api-service.d.ts +7 -13
- package/dist/services/mm-api-service/mm-api-service.d.ts.map +1 -1
- package/dist/services/mm-api-service/mm-api-service.js +519 -0
- package/dist/services/mm-api-service/mm-api-service.js.map +1 -0
- package/dist/services/mm-api-service/token-mgr.js +113 -0
- package/dist/services/mm-api-service/token-mgr.js.map +1 -0
- package/dist/services/mm-api-service/types/checkpoint.js +2 -0
- package/dist/services/mm-api-service/types/checkpoint.js.map +1 -0
- package/dist/services/mm-api-service/types/entity-transformer.d.ts +2 -2
- package/dist/services/mm-api-service/types/entity-transformer.d.ts.map +1 -1
- package/dist/services/mm-api-service/types/entity-transformer.js +186 -0
- package/dist/services/mm-api-service/types/entity-transformer.js.map +1 -0
- package/dist/services/mm-api-service/types/mm-response-interfaces.js +34 -0
- package/dist/services/mm-api-service/types/mm-response-interfaces.js.map +1 -0
- package/dist/services/mm-api-service/types/receive-types.d.ts +0 -3
- package/dist/services/mm-api-service/types/receive-types.d.ts.map +1 -1
- package/dist/services/mm-api-service/types/receive-types.js +55 -0
- package/dist/services/mm-api-service/types/receive-types.js.map +1 -0
- package/dist/services/mm-api-service/types/send-types.js +337 -0
- package/dist/services/mm-api-service/types/send-types.js.map +1 -0
- package/dist/services/psql-erp-service/configuration.js +2 -0
- package/dist/services/psql-erp-service/configuration.js.map +1 -0
- package/dist/services/psql-erp-service/index.d.ts +3 -3
- package/dist/services/psql-erp-service/index.d.ts.map +1 -1
- package/dist/services/psql-erp-service/index.js +10 -0
- package/dist/services/psql-erp-service/index.js.map +1 -0
- package/dist/services/psql-erp-service/internal/types/psql-types.js +5 -0
- package/dist/services/psql-erp-service/internal/types/psql-types.js.map +1 -0
- package/dist/services/psql-erp-service/psql-helpers.js +99 -0
- package/dist/services/psql-erp-service/psql-helpers.js.map +1 -0
- package/dist/services/psql-erp-service/psql-service.d.ts +2 -2
- package/dist/services/psql-erp-service/psql-service.d.ts.map +1 -1
- package/dist/services/psql-erp-service/psql-service.js +187 -0
- package/dist/services/psql-erp-service/psql-service.js.map +1 -0
- package/dist/services/reporting-service/index.d.ts +1 -1
- package/dist/services/reporting-service/index.d.ts.map +1 -1
- package/dist/services/reporting-service/index.js +5 -0
- package/dist/services/reporting-service/index.js.map +1 -0
- package/dist/services/reporting-service/logger.d.ts.map +1 -1
- package/dist/services/reporting-service/logger.js +221 -0
- package/dist/services/reporting-service/logger.js.map +1 -0
- package/dist/services/sql-server-erp-service/configuration.js +2 -0
- package/dist/services/sql-server-erp-service/configuration.js.map +1 -0
- package/dist/services/sql-server-erp-service/index.d.ts +3 -3
- package/dist/services/sql-server-erp-service/index.d.ts.map +1 -1
- package/dist/services/sql-server-erp-service/index.js +11 -0
- package/dist/services/sql-server-erp-service/index.js.map +1 -0
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts +2 -2
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.d.ts.map +1 -1
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js +50 -0
- package/dist/services/sql-server-erp-service/internal/sql-labor-ticket-operations.js.map +1 -0
- package/dist/services/sql-server-erp-service/internal/sql-server-config.js +40 -0
- package/dist/services/sql-server-erp-service/internal/sql-server-config.js.map +1 -0
- package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js +36 -0
- package/dist/services/sql-server-erp-service/internal/sql-transaction-manager.js.map +1 -0
- package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js +2 -0
- package/dist/services/sql-server-erp-service/internal/types/sql-server-types.js.map +1 -0
- package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts +3 -3
- package/dist/services/sql-server-erp-service/sql-server-helpers.d.ts.map +1 -1
- package/dist/services/sql-server-erp-service/sql-server-helpers.js +66 -0
- package/dist/services/sql-server-erp-service/sql-server-helpers.js.map +1 -0
- package/dist/services/sql-server-erp-service/sql-server-service.d.ts +2 -2
- package/dist/services/sql-server-erp-service/sql-server-service.d.ts.map +1 -1
- package/dist/services/sql-server-erp-service/sql-server-service.js +154 -0
- package/dist/services/sql-server-erp-service/sql-server-service.js.map +1 -0
- package/dist/services/sql-server-erp-service/types/sql-input-param.js +2 -0
- package/dist/services/sql-server-erp-service/types/sql-input-param.js.map +1 -0
- package/dist/services/sqlite-service/index.d.ts +1 -1
- package/dist/services/sqlite-service/index.d.ts.map +1 -1
- package/dist/services/sqlite-service/index.js +2 -0
- package/dist/services/sqlite-service/index.js.map +1 -0
- package/dist/services/sqlite-service/sqlite-coordinator.js +60 -0
- package/dist/services/sqlite-service/sqlite-coordinator.js.map +1 -0
- package/dist/types/erp-connector.d.ts +9 -2
- package/dist/types/erp-connector.d.ts.map +1 -1
- package/dist/types/erp-connector.js +2 -0
- package/dist/types/erp-connector.js.map +1 -0
- package/dist/types/erp-types.js +13 -0
- package/dist/types/erp-types.js.map +1 -0
- package/dist/types/flattened-work-order.d.ts +99 -0
- package/dist/types/flattened-work-order.d.ts.map +1 -0
- package/dist/types/flattened-work-order.js +2 -0
- package/dist/types/flattened-work-order.js.map +1 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/application-initializer.js +55 -0
- package/dist/utils/application-initializer.js.map +1 -0
- package/dist/utils/cleanup-numbers.js +6 -0
- package/dist/utils/cleanup-numbers.js.map +1 -0
- package/dist/utils/connector-factory.d.ts +1 -1
- package/dist/utils/connector-factory.d.ts.map +1 -1
- package/dist/utils/connector-factory.js +34 -0
- package/dist/utils/connector-factory.js.map +1 -0
- package/dist/utils/connector-log/log-deduper.d.ts +1 -1
- package/dist/utils/connector-log/log-deduper.d.ts.map +1 -1
- package/dist/utils/connector-log/log-deduper.js +240 -0
- package/dist/utils/connector-log/log-deduper.js.map +1 -0
- package/dist/utils/connector-log/mm-connector-logger-example.d.ts +1 -0
- package/dist/utils/connector-log/mm-connector-logger-example.js +88 -0
- package/dist/utils/connector-log/mm-connector-logger-example.js.map +1 -0
- package/dist/utils/connector-log/mm-connector-logger.d.ts +1 -1
- package/dist/utils/connector-log/mm-connector-logger.d.ts.map +1 -1
- package/dist/utils/connector-log/mm-connector-logger.js +151 -0
- package/dist/utils/connector-log/mm-connector-logger.js.map +1 -0
- package/dist/utils/data-transformation.js +38 -0
- package/dist/utils/data-transformation.js.map +1 -0
- package/dist/utils/env.d.ts +8 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +58 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/erp-timezone-utils.d.ts +20 -0
- package/dist/utils/erp-timezone-utils.d.ts.map +1 -0
- package/dist/utils/erp-timezone-utils.js +75 -0
- package/dist/utils/erp-timezone-utils.js.map +1 -0
- package/dist/utils/erp-type-from-entity.d.ts +1 -1
- package/dist/utils/erp-type-from-entity.d.ts.map +1 -1
- package/dist/utils/erp-type-from-entity.js +6 -0
- package/dist/utils/erp-type-from-entity.js.map +1 -0
- package/dist/utils/error-utils.js +21 -0
- package/dist/utils/error-utils.js.map +1 -0
- package/dist/utils/http-client.js +189 -0
- package/dist/utils/http-client.js.map +1 -0
- package/dist/utils/index.d.ts +34 -38
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +66 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/local-data-store/database-lock.js +68 -0
- package/dist/utils/local-data-store/database-lock.js.map +1 -0
- package/dist/utils/local-data-store/jobs-shared-data.d.ts +2 -0
- package/dist/utils/local-data-store/jobs-shared-data.d.ts.map +1 -1
- package/dist/utils/local-data-store/jobs-shared-data.js +118 -0
- package/dist/utils/local-data-store/jobs-shared-data.js.map +1 -0
- package/dist/utils/mm-labor-ticket-helpers.d.ts +4 -5
- package/dist/utils/mm-labor-ticket-helpers.d.ts.map +1 -1
- package/dist/utils/mm-labor-ticket-helpers.js +28 -0
- package/dist/utils/mm-labor-ticket-helpers.js.map +1 -0
- package/dist/utils/removeExtraneousFields.d.ts +1 -1
- package/dist/utils/removeExtraneousFields.d.ts.map +1 -1
- package/dist/utils/removeExtraneousFields.js +16 -0
- package/dist/utils/removeExtraneousFields.js.map +1 -0
- package/dist/utils/removeIdFieldFromPayload.d.ts +1 -1
- package/dist/utils/removeIdFieldFromPayload.d.ts.map +1 -1
- package/dist/utils/removeIdFieldFromPayload.js +16 -0
- package/dist/utils/removeIdFieldFromPayload.js.map +1 -0
- package/dist/utils/resource-group.d.ts +1 -1
- package/dist/utils/resource-group.d.ts.map +1 -1
- package/dist/utils/resource-group.js +59 -0
- package/dist/utils/resource-group.js.map +1 -0
- package/dist/utils/standard-process-drivers/error-processor.d.ts +3 -3
- package/dist/utils/standard-process-drivers/error-processor.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/error-processor.js +262 -0
- package/dist/utils/standard-process-drivers/error-processor.js.map +1 -0
- package/dist/utils/standard-process-drivers/index.d.ts +3 -3
- package/dist/utils/standard-process-drivers/index.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/index.js +4 -0
- package/dist/utils/standard-process-drivers/index.js.map +1 -0
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.d.ts +16 -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 +299 -0
- package/dist/utils/standard-process-drivers/labor-ticket-erp-synchronizer.js.map +1 -0
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts +11 -5
- package/dist/utils/standard-process-drivers/mm-entity-processor.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/mm-entity-processor.js +174 -0
- package/dist/utils/standard-process-drivers/mm-entity-processor.js.map +1 -0
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts +12 -6
- package/dist/utils/standard-process-drivers/standard-process-drivers.d.ts.map +1 -1
- package/dist/utils/standard-process-drivers/standard-process-drivers.js +333 -0
- package/dist/utils/standard-process-drivers/standard-process-drivers.js.map +1 -0
- package/dist/utils/time-utils.d.ts.map +1 -1
- package/dist/utils/time-utils.js +103 -0
- package/dist/utils/time-utils.js.map +1 -0
- package/dist/utils/timezone.js +105 -0
- package/dist/utils/timezone.js.map +1 -0
- package/dist/utils/trimObjectValues.js +11 -0
- package/dist/utils/trimObjectValues.js.map +1 -0
- package/dist/utils/uniqueRows.js +35 -0
- package/dist/utils/uniqueRows.js.map +1 -0
- package/package.json +8 -10
- package/src/index.ts +42 -45
- package/src/knexfile.ts +1 -0
- package/src/services/caching-service/batch-cache-manager.ts +2 -2
- package/src/services/caching-service/hashed-cache-manager.ts +5 -5
- package/src/services/caching-service/index.ts +1 -1
- package/src/services/caching-service/record-tracking-manager.ts +2 -2
- package/src/services/data-sync-service/configuration-manager.ts +52 -39
- package/src/services/data-sync-service/data-sync-service.ts +10 -19
- package/src/services/data-sync-service/index.ts +3 -3
- package/src/services/data-sync-service/jobs/clean-up-expired-cache.ts +5 -4
- package/src/services/data-sync-service/jobs/from-erp.ts +12 -6
- package/src/services/data-sync-service/jobs/retry-failed-labor-tickets.ts +4 -3
- package/src/services/data-sync-service/jobs/run-migrations.ts +4 -3
- package/src/services/data-sync-service/jobs/to-erp.ts +5 -14
- package/src/services/erp-api-services/errors.ts +3 -3
- package/src/services/erp-api-services/graphql/graphql-service.ts +5 -5
- package/src/services/erp-api-services/index.ts +8 -8
- package/src/services/erp-api-services/rest/rest-api-service.ts +4 -4
- package/src/services/erp-api-services/types.ts +2 -2
- package/src/services/mm-api-service/index.ts +6 -14
- package/src/services/mm-api-service/mm-api-service.ts +13 -30
- package/src/services/mm-api-service/token-mgr.ts +4 -4
- package/src/services/mm-api-service/types/entity-transformer.ts +3 -3
- package/src/services/mm-api-service/types/receive-types.ts +0 -1
- package/src/services/psql-erp-service/index.ts +3 -3
- package/src/services/psql-erp-service/psql-service.ts +4 -4
- package/src/services/reporting-service/index.ts +1 -1
- package/src/services/reporting-service/logger.ts +116 -81
- package/src/services/sql-server-erp-service/index.ts +3 -3
- package/src/services/sql-server-erp-service/internal/sql-labor-ticket-operations.ts +2 -2
- package/src/services/sql-server-erp-service/internal/sql-transaction-manager.ts +1 -1
- package/src/services/sql-server-erp-service/sql-server-helpers.ts +6 -6
- package/src/services/sql-server-erp-service/sql-server-service.ts +4 -4
- package/src/services/sqlite-service/index.ts +1 -1
- package/src/services/sqlite-service/sqlite-coordinator.ts +2 -2
- package/src/types/erp-connector.ts +9 -2
- package/src/types/flattened-work-order.ts +108 -0
- package/src/types/index.ts +10 -2
- package/src/utils/application-initializer.ts +5 -5
- package/src/utils/connector-factory.ts +2 -2
- package/src/utils/connector-log/log-deduper.ts +2 -2
- package/src/utils/connector-log/mm-connector-logger.ts +3 -3
- package/src/utils/env.ts +75 -0
- package/src/utils/erp-timezone-utils.ts +99 -0
- package/src/utils/erp-type-from-entity.ts +1 -1
- package/src/utils/http-client.ts +5 -4
- package/src/utils/index.ts +38 -39
- package/src/utils/local-data-store/database-lock.ts +1 -1
- package/src/utils/local-data-store/jobs-shared-data.ts +2 -0
- package/src/utils/mm-labor-ticket-helpers.ts +12 -9
- package/src/utils/removeExtraneousFields.ts +1 -1
- package/src/utils/removeIdFieldFromPayload.ts +1 -1
- package/src/utils/resource-group.ts +2 -2
- package/src/utils/standard-process-drivers/error-processor.ts +5 -5
- package/src/utils/standard-process-drivers/index.ts +3 -3
- package/src/utils/standard-process-drivers/labor-ticket-erp-synchronizer.ts +225 -69
- package/src/utils/standard-process-drivers/mm-entity-processor.ts +14 -8
- package/src/utils/standard-process-drivers/standard-process-drivers.ts +39 -25
- package/src/utils/time-utils.ts +14 -3
- package/src/utils/timezone.ts +2 -2
- package/dist/config-CvA-mFWF.js +0 -418
- package/dist/config-CvA-mFWF.js.map +0 -1
- package/dist/connector-factory-BPm2GVVF.js +0 -30
- package/dist/connector-factory-BPm2GVVF.js.map +0 -1
- package/dist/hashed-cache-manager-B15NN8hK.js +0 -322
- package/dist/hashed-cache-manager-B15NN8hK.js.map +0 -1
- package/dist/index-D8qO1NyK.js +0 -192
- package/dist/index-D8qO1NyK.js.map +0 -1
- package/dist/knexfile-Bng2Ru9c.js +0 -20
- package/dist/knexfile-Bng2Ru9c.js.map +0 -1
- package/dist/logger-BWw0_z9q.js +0 -17557
- package/dist/logger-BWw0_z9q.js.map +0 -1
- package/dist/mm-erp-sdk.js +0 -4978
- package/dist/mm-erp-sdk.js.map +0 -1
- package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts +0 -30
- package/dist/services/data-sync-service/nats-labor-ticket-listener.d.ts.map +0 -1
- package/dist/services/mm-api-service/company-info.d.ts +0 -13
- package/dist/services/mm-api-service/company-info.d.ts.map +0 -1
- package/dist/services/nats-service/nats-service.d.ts +0 -114
- package/dist/services/nats-service/nats-service.d.ts.map +0 -1
- package/dist/services/nats-service/test-nats-subscriber.d.ts +0 -6
- package/dist/services/nats-service/test-nats-subscriber.d.ts.map +0 -1
- package/dist/utils/error-formatter.d.ts +0 -19
- package/dist/utils/error-formatter.d.ts.map +0 -1
- package/src/services/data-sync-service/nats-labor-ticket-listener.ts +0 -341
- package/src/services/mm-api-service/company-info.ts +0 -87
- package/src/services/nats-service/nats-service.ts +0 -351
- package/src/services/nats-service/test-nats-subscriber.ts +0 -96
- package/src/utils/error-formatter.ts +0 -205
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import logger from "../services/reporting-service/logger.js";
|
|
2
|
+
import { CoreConfiguration } from "../services/data-sync-service/configuration-manager.js";
|
|
3
|
+
import { SQLiteCoordinator } from "../services/sqlite-service/index.js";
|
|
4
|
+
import { getTimezoneOffsetAndPersist } from "./time-utils.js";
|
|
5
|
+
import knex from "knex";
|
|
6
|
+
import config from "../knexfile.js";
|
|
7
|
+
/**
|
|
8
|
+
* Utility class to handle application initialization tasks
|
|
9
|
+
*/
|
|
10
|
+
export class ApplicationInitializer {
|
|
11
|
+
/**
|
|
12
|
+
* Performs all necessary application initialization tasks
|
|
13
|
+
* This should be called before starting any services or jobs
|
|
14
|
+
*/
|
|
15
|
+
static async initialize() {
|
|
16
|
+
try {
|
|
17
|
+
logger.info("\n================================INITIALIZING APPLICATION================================\n");
|
|
18
|
+
// Load and validate core configuration
|
|
19
|
+
const coreConfig = CoreConfiguration.inst();
|
|
20
|
+
logger.info("Core Configuration loaded:", coreConfig.toSafeLogObject());
|
|
21
|
+
// Perform database startup checks
|
|
22
|
+
logger.info("Performing database startup checks...");
|
|
23
|
+
await SQLiteCoordinator.performStartupCheck();
|
|
24
|
+
logger.info("Database startup checks completed successfully");
|
|
25
|
+
// Run database migrations to ensure all tables exist
|
|
26
|
+
logger.info("Running database migrations...");
|
|
27
|
+
await ApplicationInitializer.runMigrations();
|
|
28
|
+
logger.info("Database migrations completed successfully");
|
|
29
|
+
// Required for most connectors
|
|
30
|
+
await getTimezoneOffsetAndPersist();
|
|
31
|
+
logger.info("\n================================APPLICATION INITIALIZATION COMPLETED================================\n");
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
logger.error("Critical initialization failure. Exiting.", error);
|
|
35
|
+
process.exitCode = 1;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Runs database migrations to ensure all required tables exist
|
|
40
|
+
*/
|
|
41
|
+
static async runMigrations() {
|
|
42
|
+
const db = knex(config.local);
|
|
43
|
+
try {
|
|
44
|
+
await db.migrate.latest();
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
logger.error("Error running migrations:", error);
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
await db.destroy();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=application-initializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-initializer.js","sourceRoot":"","sources":["../../src/utils/application-initializer.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,yCAAyC,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,gBAAgB,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAO,sBAAsB;IACjC;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU;QAC5B,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CACT,8FAA8F,CAC/F,CAAC;YAEF,uCAAuC;YACvC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;YAExE,kCAAkC;YAClC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACrD,MAAM,iBAAiB,CAAC,mBAAmB,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAE9D,qDAAqD;YACrD,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC9C,MAAM,sBAAsB,CAAC,aAAa,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAE1D,+BAA+B;YAC/B,MAAM,2BAA2B,EAAE,CAAC;YAEpC,MAAM,CAAC,IAAI,CACT,0GAA0G,CAC3G,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;YACjE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,KAAK,CAAC,aAAa;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup-numbers.js","sourceRoot":"","sources":["../../src/utils/cleanup-numbers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE;IAC7C,6CAA6C;IAC7C,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IERPConnector } from "../types/erp-connector";
|
|
1
|
+
import { IERPConnector } from "../types/erp-connector.js";
|
|
2
2
|
/**
|
|
3
3
|
* Helper function to dynamically import and create connector instance from a file path
|
|
4
4
|
* @param connectorPath - The file path to the connector module
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector-factory.d.ts","sourceRoot":"","sources":["../../src/utils/connector-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"connector-factory.d.ts","sourceRoot":"","sources":["../../src/utils/connector-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI1D;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,eAAe,MAAM,KACpB,OAAO,CAAC,aAAa,CAiCvB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-deduper.d.ts","sourceRoot":"","sources":["../../../src/utils/connector-log/log-deduper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,
|
|
1
|
+
{"version":3,"file":"log-deduper.d.ts","sourceRoot":"","sources":["../../../src/utils/connector-log/log-deduper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7D,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrG;AAkBD;;;GAGG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAO;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAO;IACxD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA+C;IAEvF;;;;;;;OAOG;gBACS,EACV,aAA4C,EAC5C,aAA4C,EAC5C,UAAsC,EACtC,oBAA4D,EAC7D,GAAG;QACF,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC1B;IAWN;;;;MAIE;IACI,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA8D5D,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtD,wBAAwB,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCxG,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;YAUP,QAAQ;IA2BtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAW5B"}
|
|
@@ -0,0 +1,240 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-deduper.js","sourceRoot":"","sources":["../../../src/utils/connector-log/log-deduper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,4CAA4C,CAAC;AA4BhE;;;GAGG;AACH,MAAM,OAAO,cAAc;IACR,aAAa,CAAS;IACtB,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,eAAe,CAAS;IACjC,aAAa,CAAS;IAEb,uBAAuB,GAAG,GAAG,CAAC;IAC9B,oBAAoB,GAAG,IAAI,CAAC;IAC5B,gCAAgC,GAAG,GAAG,CAAC;IACvC,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAEvF;;;;;;;OAOG;IACH,YAAY,EACV,aAAa,GAAG,IAAI,CAAC,uBAAuB,EAC5C,aAAa,GAAG,IAAI,CAAC,uBAAuB,EAC5C,UAAU,GAAG,IAAI,CAAC,oBAAoB,EACtC,oBAAoB,GAAG,IAAI,CAAC,gCAAgC,KAM1D,EAAE;QAEJ,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,IAAI,CAAC;QAChE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAEvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED;;;;MAIE;IACF,KAAK,CAAC,MAAM,CAAC,KAAe,EAAE,GAAW;QACvC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;QAE5B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAE/B,iDAAiD;YACjD,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACrC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;gBACzB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAE5B,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;gBACtG,IAAI,YAAY,EAAE,CAAC;oBACjB,+BAA+B;oBAC/B,KAAK,CAAC,GAAG,CAAC,GAAG;wBACX,GAAG,QAAQ;wBACX,eAAe,EAAE,QAAQ,CAAC,eAAe,GAAG,CAAC;wBAC7C,kBAAkB,EAAE,QAAQ,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB;wBAC3G,WAAW,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG;wBACnC,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;qBACvB,CAAC;oBACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,uEAAuE;gBACvE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBACvI,KAAK,CAAC,GAAG,CAAC,GAAG;oBACX,GAAG,QAAQ;oBACX,eAAe,EAAE,CAAC;oBAClB,kBAAkB,EAAE,CAAC;oBACrB,WAAW,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG;oBACnC,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC;gBACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACvB,OAAO,aAAa,CAAC;YACvB,CAAC;YAED,oDAAoD;YACpD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;YACnF,KAAK,CAAC,GAAG,CAAC,GAAG;gBACX,eAAe,EAAE,CAAC;gBAClB,eAAe,EAAE,CAAC;gBAClB,kBAAkB,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG;gBAC1C,WAAW,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG;gBACnC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,aAAa,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAe,EAAE,GAAW;QAC1C,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;QAE5B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,CAAC,GAAG,CAAC,GAAG;oBACX,GAAG,QAAQ;oBACX,eAAe,EAAE,GAAG;oBACpB,kBAAkB,EAAE,CAAC;oBACrB,eAAe,EAAE,CAAC;iBACnB,CAAC;gBACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,IAAyD;QACtF,uGAAuG;QACvG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,wBAAwB;YACxB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;iBACzB,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,CAAC;iBAC9C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAC9G,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC5G,eAAe;gBACf,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;oBAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC3B,IAAI,OAAO,EAAE,CAAC;wBACZ,KAAK,CAAC,GAAG,CAAC,GAAG;4BACX,GAAG,OAAO;4BACV,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;4BAC3B,eAAe,EAAE,CAAC;yBACnB,CAAC;wBACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,+CAA+C;gBAC/C,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB;IAEZ,qBAAqB;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBACvC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAEO,SAAS;QACf,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;gBAAE,OAAO,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC7D,OAAO,OAAO,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,KAAqB;QACtC,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAChF,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,OAAe,EAAE,OAAe,EAAE,eAAuB,EAAE,kBAA2B;QAC1G,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,GAAG,SAAS,MAAM,OAAO,EAAE,CAAC;QACzC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,kBAAkB,IAAI,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzH,OAAO,GAAG,IAAI,KAAK,eAAe,cAAc,KAAK,GAAG,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAI,EAAoB;QAC5C,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,aAAa,OAAO,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,qDAAqD;QACrD,0CAA0C;QAC1C,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACvC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;oBAC1B,OAAO,MAAM,CAAC;gBAChB,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC;wBAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAA,YAAY,CAAA,CAAC;oBAC9C,IAAI,CAAC;wBAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAA,YAAY,CAAA,CAAC;gBACvD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;gBACd,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC;oBAC9B,oDAAoD;oBACpD,OAAO,MAAM,EAAE,EAAE,CAAC;gBACpB,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,KAAqB,EAAE,GAAW;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;YACpF,IAAI,GAAG,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import type { LogDeduper } from './log-deduper';
|
|
1
|
+
import type { LogDeduper } from './log-deduper.js';
|
|
2
2
|
export type LogLevelString = 'info' | 'warn' | 'error';
|
|
3
3
|
/**
|
|
4
4
|
* dedupeKey - key used to deduplicate log entries when a LogDeduper is injected into the MMConnectorLogger
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mm-connector-logger.d.ts","sourceRoot":"","sources":["../../../src/utils/connector-log/mm-connector-logger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mm-connector-logger.d.ts","sourceRoot":"","sources":["../../../src/utils/connector-log/mm-connector-logger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD;;;;;;GAMG;AACH,qBAAa,QAAQ;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;gBAEN,MAAM,EAAE;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC;CAMjF;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IAEpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU;IAYhD;;;;;;;;;;;;OAYG;IACG,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAsC9D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;;;;;OAMG;IACG,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|