@adtrackify/at-service-common 5.1.2 → 5.1.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/cjs/__tests__/clients/acuity-client.spec.js +20 -21
- package/dist/cjs/__tests__/clients/acuity-client.spec.js.map +1 -1
- package/dist/cjs/__tests__/clients/cross-platform-compression.spec.js +86 -97
- package/dist/cjs/__tests__/clients/cross-platform-compression.spec.js.map +1 -1
- package/dist/cjs/__tests__/clients/dynamodb-client.spec.js +95 -94
- package/dist/cjs/__tests__/clients/dynamodb-client.spec.js.map +1 -1
- package/dist/cjs/__tests__/clients/event-collector-client.spec.js +58 -58
- package/dist/cjs/__tests__/clients/event-collector-client.spec.js.map +1 -1
- package/dist/cjs/__tests__/clients/liveintent-client.spec.js +37 -0
- package/dist/cjs/__tests__/clients/liveintent-client.spec.js.map +1 -0
- package/dist/cjs/__tests__/clients/open-exchange-rates-client.spec.js +17 -18
- package/dist/cjs/__tests__/clients/open-exchange-rates-client.spec.js.map +1 -1
- package/dist/cjs/__tests__/clients/sqs-bundled-client.spec.js +255 -273
- package/dist/cjs/__tests__/clients/sqs-bundled-client.spec.js.map +1 -1
- package/dist/cjs/__tests__/clients/sqs-bundling-contracts.spec.js +125 -137
- package/dist/cjs/__tests__/clients/sqs-bundling-contracts.spec.js.map +1 -1
- package/dist/cjs/__tests__/clients/sqs-client.spec.js +77 -78
- package/dist/cjs/__tests__/clients/sqs-client.spec.js.map +1 -1
- package/dist/cjs/__tests__/clients/sqs-unbundle.spec.js +430 -431
- package/dist/cjs/__tests__/clients/sqs-unbundle.spec.js.map +1 -1
- package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js +29 -30
- package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/db/destinations-db-service.spec.js +47 -45
- package/dist/cjs/__tests__/db/destinations-db-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/db/products-db-service.spec.js +40 -41
- package/dist/cjs/__tests__/db/products-db-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/db/shared-read-db-services.spec.js +26 -27
- package/dist/cjs/__tests__/db/shared-read-db-services.spec.js.map +1 -1
- package/dist/cjs/__tests__/db/shopify-app-installs-db-service.spec.js +37 -38
- package/dist/cjs/__tests__/db/shopify-app-installs-db-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/db/subscriptions-db-service.spec.js +35 -36
- package/dist/cjs/__tests__/db/subscriptions-db-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/db/user-accounts-db-service.spec.js +27 -28
- package/dist/cjs/__tests__/db/user-accounts-db-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/helpers/account-users-helper.spec.js +64 -65
- package/dist/cjs/__tests__/helpers/account-users-helper.spec.js.map +1 -1
- package/dist/cjs/__tests__/helpers/acuity-helper.spec.js +18 -19
- package/dist/cjs/__tests__/helpers/acuity-helper.spec.js.map +1 -1
- package/dist/cjs/__tests__/helpers/api-key-auth-helper.spec.js +23 -24
- package/dist/cjs/__tests__/helpers/api-key-auth-helper.spec.js.map +1 -1
- package/dist/cjs/__tests__/helpers/cognito-auth-helper.spec.js +16 -17
- package/dist/cjs/__tests__/helpers/cognito-auth-helper.spec.js.map +1 -1
- package/dist/cjs/__tests__/helpers/order-calculation-helper.spec.js +42 -43
- package/dist/cjs/__tests__/helpers/order-calculation-helper.spec.js.map +1 -1
- package/dist/cjs/__tests__/helpers/public-api-response-helper.spec.js +23 -24
- package/dist/cjs/__tests__/helpers/public-api-response-helper.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/helpers.spec.js +114 -115
- package/dist/cjs/__tests__/identity-cache/helpers.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-cache-alias-write.spec.js +29 -30
- package/dist/cjs/__tests__/identity-cache/identity-cache-alias-write.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.js +19 -20
- package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js +200 -223
- package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.js +114 -123
- package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-client.spec.js +107 -110
- package/dist/cjs/__tests__/identity-cache/identity-client.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-hit.spec.js +31 -32
- package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-hit.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-miss.spec.js +47 -60
- package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-miss.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-gateway-constructor.spec.js +15 -16
- package/dist/cjs/__tests__/identity-cache/identity-gateway-constructor.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.js +28 -35
- package/dist/cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js +27 -28
- package/dist/cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.js +52 -74
- package/dist/cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.d.ts +18 -14
- package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.js +30 -37
- package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.js +424 -403
- package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.js.map +1 -1
- package/dist/cjs/__tests__/identity-cache/volatile-traits-optimization.spec.js +218 -219
- package/dist/cjs/__tests__/identity-cache/volatile-traits-optimization.spec.js.map +1 -1
- package/dist/cjs/__tests__/integration/sqs-bundling-roundtrip.spec.js +117 -118
- package/dist/cjs/__tests__/integration/sqs-bundling-roundtrip.spec.js.map +1 -1
- package/dist/cjs/__tests__/libs/compress-decompress.spec.js +7 -8
- package/dist/cjs/__tests__/libs/compress-decompress.spec.js.map +1 -1
- package/dist/cjs/__tests__/libs/contacts.spec.js +101 -102
- package/dist/cjs/__tests__/libs/contacts.spec.js.map +1 -1
- package/dist/cjs/__tests__/libs/currency.spec.js +56 -57
- package/dist/cjs/__tests__/libs/currency.spec.js.map +1 -1
- package/dist/cjs/__tests__/libs/dates.spec.js +94 -82
- package/dist/cjs/__tests__/libs/dates.spec.js.map +1 -1
- package/dist/cjs/__tests__/libs/domain.spec.js +68 -69
- package/dist/cjs/__tests__/libs/domain.spec.js.map +1 -1
- package/dist/cjs/__tests__/libs/numbers.spec.js +249 -250
- package/dist/cjs/__tests__/libs/numbers.spec.js.map +1 -1
- package/dist/cjs/__tests__/s3-client/s3-client.spec.js +16 -15
- package/dist/cjs/__tests__/s3-client/s3-client.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/acuity-api-service.spec.js +32 -35
- package/dist/cjs/__tests__/services/acuity-api-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.js +14 -15
- package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.js +949 -1187
- package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.js +39 -40
- package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.js +204 -201
- package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js +174 -299
- package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/email-verification/contact-email-verification-service.spec.js +39 -41
- package/dist/cjs/__tests__/services/email-verification/contact-email-verification-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/email-verification/email-verification-service.spec.js +22 -27
- package/dist/cjs/__tests__/services/email-verification/email-verification-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/events/collect-queue-tracking-service.spec.js +64 -67
- package/dist/cjs/__tests__/services/events/collect-queue-tracking-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/events/tracking-event-sqs-service.spec.js +51 -54
- package/dist/cjs/__tests__/services/events/tracking-event-sqs-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/liveintent-api-service.spec.js +67 -0
- package/dist/cjs/__tests__/services/liveintent-api-service.spec.js.map +1 -0
- package/dist/cjs/__tests__/shopify/shopify-graphql-transformer.spec.js +9 -10
- package/dist/cjs/__tests__/shopify/shopify-graphql-transformer.spec.js.map +1 -1
- package/dist/cjs/__tests__/unit/libs/api-router/public-api-router.spec.js +58 -69
- package/dist/cjs/__tests__/unit/libs/api-router/public-api-router.spec.js.map +1 -1
- package/dist/cjs/__tests__/unit/libs/api-router/route-matcher.spec.js +31 -32
- package/dist/cjs/__tests__/unit/libs/api-router/route-matcher.spec.js.map +1 -1
- package/dist/cjs/__tests__/utils/custom-measure-formula-utils.spec.js +64 -65
- package/dist/cjs/__tests__/utils/custom-measure-formula-utils.spec.js.map +1 -1
- package/dist/cjs/clients/generic/cognito-client.js +14 -14
- package/dist/cjs/clients/generic/cognito-client.js.map +1 -1
- package/dist/cjs/clients/generic/dynamodb-client.js +9 -9
- package/dist/cjs/clients/generic/dynamodb-client.js.map +1 -1
- package/dist/cjs/clients/generic/eventbridge-client.js +2 -2
- package/dist/cjs/clients/generic/eventbridge-client.js.map +1 -1
- package/dist/cjs/clients/generic/http-client.js +5 -5
- package/dist/cjs/clients/generic/http-client.js.map +1 -1
- package/dist/cjs/clients/generic/lambda-invoke-client.js.map +1 -1
- package/dist/cjs/clients/generic/location-client.js +2 -2
- package/dist/cjs/clients/generic/location-client.js.map +1 -1
- package/dist/cjs/clients/generic/redis-client.js +2 -13
- package/dist/cjs/clients/generic/redis-client.js.map +1 -1
- package/dist/cjs/clients/generic/s3-client.d.ts +1 -0
- package/dist/cjs/clients/generic/s3-client.js +19 -19
- package/dist/cjs/clients/generic/s3-client.js.map +1 -1
- package/dist/cjs/clients/generic/singlestore-db-client.d.ts +2 -2
- package/dist/cjs/clients/generic/singlestore-db-client.js +8 -18
- package/dist/cjs/clients/generic/singlestore-db-client.js.map +1 -1
- package/dist/cjs/clients/generic/sqs-bundled-client.js +2 -2
- package/dist/cjs/clients/generic/sqs-bundled-client.js.map +1 -1
- package/dist/cjs/clients/generic/sqs-bundled-client.types.js +1 -1
- package/dist/cjs/clients/generic/sqs-bundled-client.types.js.map +1 -1
- package/dist/cjs/clients/generic/sqs-client.d.ts +1 -1
- package/dist/cjs/clients/generic/sqs-client.js +2 -2
- package/dist/cjs/clients/generic/sqs-client.js.map +1 -1
- package/dist/cjs/clients/generic/sqs-unbundle.js +7 -6
- package/dist/cjs/clients/generic/sqs-unbundle.js.map +1 -1
- package/dist/cjs/clients/internal-api/accounts-client.js +14 -14
- package/dist/cjs/clients/internal-api/accounts-client.js.map +1 -1
- package/dist/cjs/clients/internal-api/cache-lambda-client.js.map +1 -1
- package/dist/cjs/clients/internal-api/db-management-client.js.map +1 -1
- package/dist/cjs/clients/internal-api/destinations-client.d.ts +2 -1
- package/dist/cjs/clients/internal-api/destinations-client.js +15 -8
- package/dist/cjs/clients/internal-api/destinations-client.js.map +1 -1
- package/dist/cjs/clients/internal-api/event-collector-client.js.map +1 -1
- package/dist/cjs/clients/internal-api/identity-client.js.map +1 -1
- package/dist/cjs/clients/internal-api/shopify-app-install-client.js.map +1 -1
- package/dist/cjs/clients/internal-api/subscriptions-client.js.map +1 -1
- package/dist/cjs/clients/internal-api/users-auth-client.js +11 -11
- package/dist/cjs/clients/internal-api/users-auth-client.js.map +1 -1
- package/dist/cjs/clients/third-party/acuity-client.js.map +1 -1
- package/dist/cjs/clients/third-party/emailable-client.js.map +1 -1
- package/dist/cjs/clients/third-party/index.d.ts +1 -0
- package/dist/cjs/clients/third-party/index.js +1 -0
- package/dist/cjs/clients/third-party/index.js.map +1 -1
- package/dist/cjs/clients/third-party/liveintent-client.d.ts +11 -0
- package/dist/cjs/clients/third-party/liveintent-client.js +25 -0
- package/dist/cjs/clients/third-party/liveintent-client.js.map +1 -0
- package/dist/cjs/clients/third-party/loops-client.js.map +1 -1
- package/dist/cjs/clients/third-party/open-exchange-rates-client.js.map +1 -1
- package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.js.map +1 -1
- package/dist/cjs/clients/third-party/shopify-client.js +15 -15
- package/dist/cjs/clients/third-party/shopify-client.js.map +1 -1
- package/dist/cjs/constants/sqs.js +5 -5
- package/dist/cjs/constants/sqs.js.map +1 -1
- package/dist/cjs/helpers/account-users-helper.js.map +1 -1
- package/dist/cjs/helpers/acuity-helper.js.map +1 -1
- package/dist/cjs/helpers/api-key-auth-helper.d.ts +1 -2
- package/dist/cjs/helpers/api-key-auth-helper.js.map +1 -1
- package/dist/cjs/helpers/api-key-authorizer-helper.js.map +1 -1
- package/dist/cjs/helpers/cognito-auth-helper.d.ts +1 -2
- package/dist/cjs/helpers/cognito-auth-helper.js.map +1 -1
- package/dist/cjs/helpers/input-validation-helper.d.ts +1 -1
- package/dist/cjs/helpers/input-validation-helper.js.map +1 -1
- package/dist/cjs/helpers/logging-helper.d.ts +5 -5
- package/dist/cjs/helpers/logging-helper.js +7 -17
- package/dist/cjs/helpers/logging-helper.js.map +1 -1
- package/dist/cjs/helpers/order-calculation-helper.js.map +1 -1
- package/dist/cjs/helpers/public-api-response-helper.js.map +1 -1
- package/dist/cjs/helpers/response-helper.js.map +1 -1
- package/dist/cjs/helpers/shopify-helper.js.map +1 -1
- package/dist/cjs/helpers/sqs-utils.js +4 -8
- package/dist/cjs/helpers/sqs-utils.js.map +1 -1
- package/dist/cjs/libs/api-router/public-api-router.d.ts +2 -2
- package/dist/cjs/libs/api-router/public-api-router.js.map +1 -1
- package/dist/cjs/libs/api-router/route-matcher.js.map +1 -1
- package/dist/cjs/libs/click-id-parser.js +1 -1
- package/dist/cjs/libs/click-id-parser.js.map +1 -1
- package/dist/cjs/libs/compression.d.ts +1 -1
- package/dist/cjs/libs/compression.js.map +1 -1
- package/dist/cjs/libs/contacts.js.map +1 -1
- package/dist/cjs/libs/cookie.js +1 -1
- package/dist/cjs/libs/cookie.js.map +1 -1
- package/dist/cjs/libs/crypto.js.map +1 -1
- package/dist/cjs/libs/csv.js.map +1 -1
- package/dist/cjs/libs/currency.js.map +1 -1
- package/dist/cjs/libs/dates.d.ts +1 -0
- package/dist/cjs/libs/dates.js +18 -1
- package/dist/cjs/libs/dates.js.map +1 -1
- package/dist/cjs/libs/domain.js.map +1 -1
- package/dist/cjs/libs/emails.js.map +1 -1
- package/dist/cjs/libs/http-error.js.map +1 -1
- package/dist/cjs/libs/http-status-codes.js +1 -1
- package/dist/cjs/libs/http-status-codes.js.map +1 -1
- package/dist/cjs/libs/numbers.js.map +1 -1
- package/dist/cjs/libs/referrer-parser/referrer-parser-util.d.ts +1 -0
- package/dist/cjs/libs/referrer-parser/referrer-parser-util.js +2 -2
- package/dist/cjs/libs/referrer-parser/referrer-parser-util.js.map +1 -1
- package/dist/cjs/libs/strings.js.map +1 -1
- package/dist/cjs/libs/traits.js.map +1 -1
- package/dist/cjs/libs/url.js.map +1 -1
- package/dist/cjs/services/acuity-api-service.js.map +1 -1
- package/dist/cjs/services/cache/product-cache-service.js.map +1 -1
- package/dist/cjs/services/cost/cost-calculation-types.js +2 -1
- package/dist/cjs/services/cost/cost-calculation-types.js.map +1 -1
- package/dist/cjs/services/cost/cost-calculator-service.js +10 -43
- package/dist/cjs/services/cost/cost-calculator-service.js.map +1 -1
- package/dist/cjs/services/cost/cost-currency-service.js.map +1 -1
- package/dist/cjs/services/cost/cost-filter-service.js +7 -16
- package/dist/cjs/services/cost/cost-filter-service.js.map +1 -1
- package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js +9 -24
- package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js.map +1 -1
- package/dist/cjs/services/db/accounts-db-service.js.map +1 -1
- package/dist/cjs/services/db/api-keys-db-service.js.map +1 -1
- package/dist/cjs/services/db/contact-enrichments-db-service.js.map +1 -1
- package/dist/cjs/services/db/custom-measures-db-service.js.map +1 -1
- package/dist/cjs/services/db/destinations-db-service.js.map +1 -1
- package/dist/cjs/services/db/identity-cache-db-service.d.ts +1 -1
- package/dist/cjs/services/db/identity-cache-db-service.js.map +1 -1
- package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +1 -5
- package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js.map +1 -1
- package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +7 -21
- package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js.map +1 -1
- package/dist/cjs/services/db/identity-cache-dynamodb-service/key-builders.js +7 -7
- package/dist/cjs/services/db/identity-cache-dynamodb-service/key-builders.js.map +1 -1
- package/dist/cjs/services/db/identity-cache-dynamodb-service/types.js +3 -3
- package/dist/cjs/services/db/identity-cache-dynamodb-service/types.js.map +1 -1
- package/dist/cjs/services/db/index.d.ts +0 -1
- package/dist/cjs/services/db/index.js +0 -1
- package/dist/cjs/services/db/index.js.map +1 -1
- package/dist/cjs/services/db/log-events-db-service.js.map +1 -1
- package/dist/cjs/services/db/pixels-db-service.js.map +1 -1
- package/dist/cjs/services/db/products-db-service.js +16 -45
- package/dist/cjs/services/db/products-db-service.js.map +1 -1
- package/dist/cjs/services/db/purchasable-contacts-db-service.js.map +1 -1
- package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.js.map +1 -1
- package/dist/cjs/services/db/shopify-app-installs-db-service.js.map +1 -1
- package/dist/cjs/services/db/shopify-products-cache-db-service.js.map +1 -1
- package/dist/cjs/services/db/subscriptions-db-service.js.map +1 -1
- package/dist/cjs/services/db/tracking-events-db-service.js.map +1 -1
- package/dist/cjs/services/db/user-accounts-db-service.js.map +1 -1
- package/dist/cjs/services/email-verification/contact-email-verification-service.js.map +1 -1
- package/dist/cjs/services/email-verification/email-verification-service.js.map +1 -1
- package/dist/cjs/services/eventbridge-integration-service.js.map +1 -1
- package/dist/cjs/services/events/build-collect-queue-tracking-event.js +2 -2
- package/dist/cjs/services/events/build-collect-queue-tracking-event.js.map +1 -1
- package/dist/cjs/services/events/collect-queue-tracking-service.js.map +1 -1
- package/dist/cjs/services/events/log-event-service.js.map +1 -1
- package/dist/cjs/services/events/metric-event-service.js.map +1 -1
- package/dist/cjs/services/events/tracking-event-sqs-service.js.map +1 -1
- package/dist/cjs/services/generic-cache-service.js.map +1 -1
- package/dist/cjs/services/index.d.ts +1 -1
- package/dist/cjs/services/index.js +1 -1
- package/dist/cjs/services/index.js.map +1 -1
- package/dist/cjs/services/ipdata-lookup-service.d.ts +1 -1
- package/dist/cjs/services/ipdata-lookup-service.js.map +1 -1
- package/dist/cjs/services/liveintent-api-service.d.ts +15 -0
- package/dist/cjs/services/liveintent-api-service.js +59 -0
- package/dist/cjs/services/liveintent-api-service.js.map +1 -0
- package/dist/cjs/services/shopify/products/shopify-products-serviceV2.js.map +1 -1
- package/dist/cjs/services/shopify/shopify-graphql-transformer.js +1 -1
- package/dist/cjs/services/shopify/shopify-graphql-transformer.js.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +8 -17
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/internal-events/event-detail-types.js +4 -4
- package/dist/cjs/types/internal-events/event-detail-types.js.map +1 -1
- package/dist/cjs/types/liveintent-types.d.ts +8 -0
- package/dist/cjs/types/liveintent-types.js +3 -0
- package/dist/cjs/types/liveintent-types.js.map +1 -0
- package/dist/cjs/types/public-api-types.js +1 -1
- package/dist/cjs/types/public-api-types.js.map +1 -1
- package/dist/cjs/types/shopify-graphql-types/admin.types.js +491 -491
- package/dist/cjs/types/shopify-graphql-types/admin.types.js.map +1 -1
- package/dist/cjs/types/shopify-rest-types.d.ts +1 -1
- package/dist/cjs/utils/compression.d.ts +2 -0
- package/dist/cjs/utils/compression.js +11 -11
- package/dist/cjs/utils/compression.js.map +1 -1
- package/dist/cjs/utils/custom-measure-formula-utils.js.map +1 -1
- package/dist/cjs/utils/retry-envelope.js +4 -3
- package/dist/cjs/utils/retry-envelope.js.map +1 -1
- package/dist/cjs/utils/size.js +3 -2
- package/dist/cjs/utils/size.js.map +1 -1
- package/dist/esm/__tests__/clients/acuity-client.spec.js +5 -6
- package/dist/esm/__tests__/clients/acuity-client.spec.js.map +1 -1
- package/dist/esm/__tests__/clients/cross-platform-compression.spec.js +0 -1
- package/dist/esm/__tests__/clients/cross-platform-compression.spec.js.map +1 -1
- package/dist/esm/__tests__/clients/dynamodb-client.spec.js +42 -41
- package/dist/esm/__tests__/clients/dynamodb-client.spec.js.map +1 -1
- package/dist/esm/__tests__/clients/event-collector-client.spec.js +18 -18
- package/dist/esm/__tests__/clients/event-collector-client.spec.js.map +1 -1
- package/dist/esm/__tests__/clients/liveintent-client.spec.js +35 -0
- package/dist/esm/__tests__/clients/liveintent-client.spec.js.map +1 -0
- package/dist/esm/__tests__/clients/open-exchange-rates-client.spec.js +3 -4
- package/dist/esm/__tests__/clients/open-exchange-rates-client.spec.js.map +1 -1
- package/dist/esm/__tests__/clients/sqs-bundled-client.spec.js +47 -55
- package/dist/esm/__tests__/clients/sqs-bundled-client.spec.js.map +1 -1
- package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.js +1 -3
- package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.js.map +1 -1
- package/dist/esm/__tests__/clients/sqs-client.spec.js +21 -22
- package/dist/esm/__tests__/clients/sqs-client.spec.js.map +1 -1
- package/dist/esm/__tests__/clients/sqs-unbundle.spec.js +8 -9
- package/dist/esm/__tests__/clients/sqs-unbundle.spec.js.map +1 -1
- package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js +5 -6
- package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js.map +1 -1
- package/dist/esm/__tests__/db/destinations-db-service.spec.js +11 -9
- package/dist/esm/__tests__/db/destinations-db-service.spec.js.map +1 -1
- package/dist/esm/__tests__/db/products-db-service.spec.js +8 -9
- package/dist/esm/__tests__/db/products-db-service.spec.js.map +1 -1
- package/dist/esm/__tests__/db/shared-read-db-services.spec.js +6 -7
- package/dist/esm/__tests__/db/shared-read-db-services.spec.js.map +1 -1
- package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.js +12 -13
- package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.js.map +1 -1
- package/dist/esm/__tests__/db/subscriptions-db-service.spec.js +11 -12
- package/dist/esm/__tests__/db/subscriptions-db-service.spec.js.map +1 -1
- package/dist/esm/__tests__/db/user-accounts-db-service.spec.js +6 -7
- package/dist/esm/__tests__/db/user-accounts-db-service.spec.js.map +1 -1
- package/dist/esm/__tests__/helpers/account-users-helper.spec.js +3 -4
- package/dist/esm/__tests__/helpers/account-users-helper.spec.js.map +1 -1
- package/dist/esm/__tests__/helpers/acuity-helper.spec.js +0 -1
- package/dist/esm/__tests__/helpers/acuity-helper.spec.js.map +1 -1
- package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.js +3 -4
- package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.js.map +1 -1
- package/dist/esm/__tests__/helpers/cognito-auth-helper.spec.js +1 -2
- package/dist/esm/__tests__/helpers/cognito-auth-helper.spec.js.map +1 -1
- package/dist/esm/__tests__/helpers/order-calculation-helper.spec.js +4 -5
- package/dist/esm/__tests__/helpers/order-calculation-helper.spec.js.map +1 -1
- package/dist/esm/__tests__/helpers/public-api-response-helper.spec.js +1 -2
- package/dist/esm/__tests__/helpers/public-api-response-helper.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/helpers.spec.js +1 -2
- package/dist/esm/__tests__/identity-cache/helpers.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-cache-alias-write.spec.js +15 -16
- package/dist/esm/__tests__/identity-cache/identity-cache-alias-write.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js +1 -2
- package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js +29 -52
- package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js +31 -40
- package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-client.spec.js +21 -24
- package/dist/esm/__tests__/identity-cache/identity-client.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.js +0 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.js +4 -17
- package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.js +0 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.js +2 -9
- package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js +0 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.js +7 -29
- package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.d.ts +18 -14
- package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.js +30 -37
- package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.js +37 -16
- package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.js.map +1 -1
- package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.js +5 -6
- package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.js.map +1 -1
- package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.js +9 -10
- package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.js.map +1 -1
- package/dist/esm/__tests__/libs/compress-decompress.spec.js +1 -2
- package/dist/esm/__tests__/libs/compress-decompress.spec.js.map +1 -1
- package/dist/esm/__tests__/libs/contacts.spec.js +0 -1
- package/dist/esm/__tests__/libs/contacts.spec.js.map +1 -1
- package/dist/esm/__tests__/libs/currency.spec.js +3 -4
- package/dist/esm/__tests__/libs/currency.spec.js.map +1 -1
- package/dist/esm/__tests__/libs/dates.spec.js +23 -11
- package/dist/esm/__tests__/libs/dates.spec.js.map +1 -1
- package/dist/esm/__tests__/libs/domain.spec.js +0 -1
- package/dist/esm/__tests__/libs/domain.spec.js.map +1 -1
- package/dist/esm/__tests__/libs/numbers.spec.js +0 -1
- package/dist/esm/__tests__/libs/numbers.spec.js.map +1 -1
- package/dist/esm/__tests__/s3-client/s3-client.spec.js +7 -6
- package/dist/esm/__tests__/s3-client/s3-client.spec.js.map +1 -1
- package/dist/esm/__tests__/services/acuity-api-service.spec.js +10 -13
- package/dist/esm/__tests__/services/acuity-api-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.js +0 -1
- package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.js.map +1 -1
- package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js +280 -518
- package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/cost/cost-currency-service.spec.js +3 -4
- package/dist/esm/__tests__/services/cost/cost-currency-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/cost/cost-filter-service.spec.js +22 -19
- package/dist/esm/__tests__/services/cost/cost-filter-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js +41 -133
- package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.js +6 -8
- package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.js +5 -10
- package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.js +14 -17
- package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.js +16 -19
- package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/liveintent-api-service.spec.js +65 -0
- package/dist/esm/__tests__/services/liveintent-api-service.spec.js.map +1 -0
- package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.js +1 -2
- package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.js.map +1 -1
- package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.js +14 -15
- package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.js.map +1 -1
- package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.js +1 -2
- package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.js.map +1 -1
- package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.js +0 -1
- package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.js.map +1 -1
- package/dist/esm/clients/generic/cognito-client.js +2 -2
- package/dist/esm/clients/generic/cognito-client.js.map +1 -1
- package/dist/esm/clients/generic/dynamodb-client.js +9 -9
- package/dist/esm/clients/generic/dynamodb-client.js.map +1 -1
- package/dist/esm/clients/generic/eventbridge-client.js +1 -1
- package/dist/esm/clients/generic/eventbridge-client.js.map +1 -1
- package/dist/esm/clients/generic/http-client.js +5 -5
- package/dist/esm/clients/generic/http-client.js.map +1 -1
- package/dist/esm/clients/generic/lambda-invoke-client.js.map +1 -1
- package/dist/esm/clients/generic/location-client.js +1 -1
- package/dist/esm/clients/generic/location-client.js.map +1 -1
- package/dist/esm/clients/generic/redis-client.js +2 -13
- package/dist/esm/clients/generic/redis-client.js.map +1 -1
- package/dist/esm/clients/generic/s3-client.d.ts +1 -0
- package/dist/esm/clients/generic/s3-client.js +1 -1
- package/dist/esm/clients/generic/s3-client.js.map +1 -1
- package/dist/esm/clients/generic/singlestore-db-client.d.ts +2 -2
- package/dist/esm/clients/generic/singlestore-db-client.js +1 -1
- package/dist/esm/clients/generic/singlestore-db-client.js.map +1 -1
- package/dist/esm/clients/generic/sqs-bundled-client.js +2 -2
- package/dist/esm/clients/generic/sqs-bundled-client.js.map +1 -1
- package/dist/esm/clients/generic/sqs-client.d.ts +1 -1
- package/dist/esm/clients/generic/sqs-client.js +2 -2
- package/dist/esm/clients/generic/sqs-client.js.map +1 -1
- package/dist/esm/clients/generic/sqs-unbundle.js +2 -2
- package/dist/esm/clients/generic/sqs-unbundle.js.map +1 -1
- package/dist/esm/clients/internal-api/accounts-client.js +1 -1
- package/dist/esm/clients/internal-api/accounts-client.js.map +1 -1
- package/dist/esm/clients/internal-api/cache-lambda-client.js.map +1 -1
- package/dist/esm/clients/internal-api/destinations-client.d.ts +2 -1
- package/dist/esm/clients/internal-api/destinations-client.js +8 -1
- package/dist/esm/clients/internal-api/destinations-client.js.map +1 -1
- package/dist/esm/clients/internal-api/event-collector-client.js.map +1 -1
- package/dist/esm/clients/internal-api/identity-client.js.map +1 -1
- package/dist/esm/clients/internal-api/users-auth-client.js +1 -1
- package/dist/esm/clients/internal-api/users-auth-client.js.map +1 -1
- package/dist/esm/clients/third-party/emailable-client.js.map +1 -1
- package/dist/esm/clients/third-party/index.d.ts +1 -0
- package/dist/esm/clients/third-party/index.js +1 -0
- package/dist/esm/clients/third-party/index.js.map +1 -1
- package/dist/esm/clients/third-party/liveintent-client.d.ts +11 -0
- package/dist/esm/clients/third-party/liveintent-client.js +21 -0
- package/dist/esm/clients/third-party/liveintent-client.js.map +1 -0
- package/dist/esm/clients/third-party/loops-client.js.map +1 -1
- package/dist/esm/clients/third-party/open-exchange-rates-client.js.map +1 -1
- package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js +1 -1
- package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js.map +1 -1
- package/dist/esm/clients/third-party/shopify-client.js +1 -1
- package/dist/esm/clients/third-party/shopify-client.js.map +1 -1
- package/dist/esm/constants/sqs.js +3 -3
- package/dist/esm/constants/sqs.js.map +1 -1
- package/dist/esm/helpers/account-users-helper.js.map +1 -1
- package/dist/esm/helpers/acuity-helper.js.map +1 -1
- package/dist/esm/helpers/api-key-auth-helper.d.ts +1 -2
- package/dist/esm/helpers/api-key-auth-helper.js.map +1 -1
- package/dist/esm/helpers/api-key-authorizer-helper.js.map +1 -1
- package/dist/esm/helpers/cognito-auth-helper.d.ts +1 -2
- package/dist/esm/helpers/cognito-auth-helper.js.map +1 -1
- package/dist/esm/helpers/input-validation-helper.d.ts +1 -1
- package/dist/esm/helpers/input-validation-helper.js.map +1 -1
- package/dist/esm/helpers/logging-helper.d.ts +5 -5
- package/dist/esm/helpers/logging-helper.js.map +1 -1
- package/dist/esm/helpers/order-calculation-helper.js.map +1 -1
- package/dist/esm/helpers/public-api-response-helper.js.map +1 -1
- package/dist/esm/helpers/response-helper.js.map +1 -1
- package/dist/esm/helpers/shopify-helper.js.map +1 -1
- package/dist/esm/helpers/sqs-utils.js +1 -6
- package/dist/esm/helpers/sqs-utils.js.map +1 -1
- package/dist/esm/libs/api-router/public-api-router.d.ts +2 -2
- package/dist/esm/libs/api-router/public-api-router.js.map +1 -1
- package/dist/esm/libs/api-router/route-matcher.js.map +1 -1
- package/dist/esm/libs/click-id-parser.js.map +1 -1
- package/dist/esm/libs/compression.d.ts +1 -1
- package/dist/esm/libs/compression.js.map +1 -1
- package/dist/esm/libs/contacts.js.map +1 -1
- package/dist/esm/libs/cookie.js.map +1 -1
- package/dist/esm/libs/csv.js.map +1 -1
- package/dist/esm/libs/currency.js.map +1 -1
- package/dist/esm/libs/dates.d.ts +1 -0
- package/dist/esm/libs/dates.js +16 -0
- package/dist/esm/libs/dates.js.map +1 -1
- package/dist/esm/libs/domain.js.map +1 -1
- package/dist/esm/libs/emails.js.map +1 -1
- package/dist/esm/libs/http-error.js.map +1 -1
- package/dist/esm/libs/numbers.js.map +1 -1
- package/dist/esm/libs/referrer-parser/referrer-parser-util.d.ts +1 -0
- package/dist/esm/libs/referrer-parser/referrer-parser-util.js +2 -2
- package/dist/esm/libs/referrer-parser/referrer-parser-util.js.map +1 -1
- package/dist/esm/libs/strings.js.map +1 -1
- package/dist/esm/libs/traits.js.map +1 -1
- package/dist/esm/services/acuity-api-service.js.map +1 -1
- package/dist/esm/services/cache/product-cache-service.js.map +1 -1
- package/dist/esm/services/cost/cost-calculation-types.js.map +1 -1
- package/dist/esm/services/cost/cost-calculator-service.js +10 -43
- package/dist/esm/services/cost/cost-calculator-service.js.map +1 -1
- package/dist/esm/services/cost/cost-currency-service.js.map +1 -1
- package/dist/esm/services/cost/cost-filter-service.js +7 -16
- package/dist/esm/services/cost/cost-filter-service.js.map +1 -1
- package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js +9 -24
- package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js.map +1 -1
- package/dist/esm/services/db/accounts-db-service.js.map +1 -1
- package/dist/esm/services/db/api-keys-db-service.js.map +1 -1
- package/dist/esm/services/db/contact-enrichments-db-service.js.map +1 -1
- package/dist/esm/services/db/custom-measures-db-service.js.map +1 -1
- package/dist/esm/services/db/identity-cache-db-service.d.ts +1 -1
- package/dist/esm/services/db/identity-cache-db-service.js.map +1 -1
- package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +2 -6
- package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js.map +1 -1
- package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +8 -22
- package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js.map +1 -1
- package/dist/esm/services/db/identity-cache-dynamodb-service/types.js.map +1 -1
- package/dist/esm/services/db/index.d.ts +0 -1
- package/dist/esm/services/db/index.js +0 -1
- package/dist/esm/services/db/index.js.map +1 -1
- package/dist/esm/services/db/log-events-db-service.js.map +1 -1
- package/dist/esm/services/db/products-db-service.js +16 -45
- package/dist/esm/services/db/products-db-service.js.map +1 -1
- package/dist/esm/services/db/purchasable-contacts-db-service.js.map +1 -1
- package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.js.map +1 -1
- package/dist/esm/services/db/shopify-app-installs-db-service.js.map +1 -1
- package/dist/esm/services/db/shopify-products-cache-db-service.js.map +1 -1
- package/dist/esm/services/db/subscriptions-db-service.js.map +1 -1
- package/dist/esm/services/db/tracking-events-db-service.js.map +1 -1
- package/dist/esm/services/email-verification/contact-email-verification-service.js.map +1 -1
- package/dist/esm/services/email-verification/email-verification-service.js.map +1 -1
- package/dist/esm/services/events/build-collect-queue-tracking-event.js.map +1 -1
- package/dist/esm/services/events/collect-queue-tracking-service.js +1 -1
- package/dist/esm/services/events/collect-queue-tracking-service.js.map +1 -1
- package/dist/esm/services/events/log-event-service.js.map +1 -1
- package/dist/esm/services/events/metric-event-service.js.map +1 -1
- package/dist/esm/services/events/tracking-event-sqs-service.js.map +1 -1
- package/dist/esm/services/generic-cache-service.js.map +1 -1
- package/dist/esm/services/index.d.ts +1 -1
- package/dist/esm/services/index.js +1 -1
- package/dist/esm/services/index.js.map +1 -1
- package/dist/esm/services/ipdata-lookup-service.d.ts +1 -1
- package/dist/esm/services/ipdata-lookup-service.js.map +1 -1
- package/dist/esm/services/liveintent-api-service.d.ts +15 -0
- package/dist/esm/services/liveintent-api-service.js +55 -0
- package/dist/esm/services/liveintent-api-service.js.map +1 -0
- package/dist/esm/services/shopify/products/shopify-products-serviceV2.js.map +1 -1
- package/dist/esm/services/shopify/shopify-graphql-transformer.js +1 -1
- package/dist/esm/services/shopify/shopify-graphql-transformer.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/liveintent-types.d.ts +8 -0
- package/dist/esm/types/liveintent-types.js +2 -0
- package/dist/esm/types/liveintent-types.js.map +1 -0
- package/dist/esm/types/shopify-rest-types.d.ts +1 -1
- package/dist/esm/utils/compression.d.ts +2 -0
- package/dist/esm/utils/compression.js +3 -3
- package/dist/esm/utils/compression.js.map +1 -1
- package/dist/esm/utils/custom-measure-formula-utils.js.map +1 -1
- package/dist/esm/utils/retry-envelope.js.map +1 -1
- package/dist/esm/utils/size.js.map +1 -1
- package/package.json +136 -139
- package/dist/cjs/__tests__/clients/client-timeout-inventory.spec.js +0 -21
- package/dist/cjs/__tests__/clients/client-timeout-inventory.spec.js.map +0 -1
- package/dist/cjs/__tests__/clients/redis-client.spec.js +0 -79
- package/dist/cjs/__tests__/clients/redis-client.spec.js.map +0 -1
- package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.js +0 -40
- package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.js.map +0 -1
- package/dist/cjs/clients/third-party/exchange-rate-api-client.d.ts +0 -17
- package/dist/cjs/clients/third-party/exchange-rate-api-client.js +0 -20
- package/dist/cjs/clients/third-party/exchange-rate-api-client.js.map +0 -1
- package/dist/cjs/services/currency-exchange-rate-lookup-service.d.ts +0 -12
- package/dist/cjs/services/currency-exchange-rate-lookup-service.js +0 -98
- package/dist/cjs/services/currency-exchange-rate-lookup-service.js.map +0 -1
- package/dist/cjs/services/db/currency-exchange-rates-db-service.d.ts +0 -21
- package/dist/cjs/services/db/currency-exchange-rates-db-service.js +0 -40
- package/dist/cjs/services/db/currency-exchange-rates-db-service.js.map +0 -1
- package/dist/esm/__tests__/clients/client-timeout-inventory.spec.js +0 -19
- package/dist/esm/__tests__/clients/client-timeout-inventory.spec.js.map +0 -1
- package/dist/esm/__tests__/clients/redis-client.spec.d.ts +0 -1
- package/dist/esm/__tests__/clients/redis-client.spec.js +0 -77
- package/dist/esm/__tests__/clients/redis-client.spec.js.map +0 -1
- package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.d.ts +0 -1
- package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.js +0 -38
- package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.js.map +0 -1
- package/dist/esm/clients/third-party/exchange-rate-api-client.d.ts +0 -17
- package/dist/esm/clients/third-party/exchange-rate-api-client.js +0 -16
- package/dist/esm/clients/third-party/exchange-rate-api-client.js.map +0 -1
- package/dist/esm/services/currency-exchange-rate-lookup-service.d.ts +0 -12
- package/dist/esm/services/currency-exchange-rate-lookup-service.js +0 -94
- package/dist/esm/services/currency-exchange-rate-lookup-service.js.map +0 -1
- package/dist/esm/services/db/currency-exchange-rates-db-service.d.ts +0 -21
- package/dist/esm/services/db/currency-exchange-rates-db-service.js +0 -36
- package/dist/esm/services/db/currency-exchange-rates-db-service.js.map +0 -1
- /package/dist/cjs/__tests__/clients/{client-timeout-inventory.spec.d.ts → liveintent-client.spec.d.ts} +0 -0
- /package/dist/cjs/__tests__/{clients/redis-client.spec.d.ts → services/liveintent-api-service.spec.d.ts} +0 -0
- /package/dist/{cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.d.ts → esm/__tests__/clients/liveintent-client.spec.d.ts} +0 -0
- /package/dist/esm/__tests__/{clients/client-timeout-inventory.spec.d.ts → services/liveintent-api-service.spec.d.ts} +0 -0
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
5
|
-
vitest_1.vi.mock('../../clients/index.js', () => ({
|
|
3
|
+
jest.mock('../../clients/index.js', () => ({
|
|
6
4
|
DynamoDbClient: {
|
|
7
|
-
safeGet:
|
|
8
|
-
safePut:
|
|
9
|
-
safeDelete:
|
|
10
|
-
safeBatchGet:
|
|
11
|
-
safeBatchWrite:
|
|
12
|
-
safeQueryByGSI:
|
|
13
|
-
batchGet:
|
|
14
|
-
batchWrite:
|
|
5
|
+
safeGet: jest.fn(),
|
|
6
|
+
safePut: jest.fn(),
|
|
7
|
+
safeDelete: jest.fn(),
|
|
8
|
+
safeBatchGet: jest.fn(),
|
|
9
|
+
safeBatchWrite: jest.fn(),
|
|
10
|
+
safeQueryByGSI: jest.fn(),
|
|
11
|
+
batchGet: jest.fn(),
|
|
12
|
+
batchWrite: jest.fn(),
|
|
15
13
|
},
|
|
16
14
|
}));
|
|
17
|
-
|
|
15
|
+
jest.mock('../../helpers/index.js', () => ({
|
|
18
16
|
Logger: {
|
|
19
|
-
debug:
|
|
20
|
-
info:
|
|
21
|
-
warn:
|
|
22
|
-
error:
|
|
17
|
+
debug: jest.fn(),
|
|
18
|
+
info: jest.fn(),
|
|
19
|
+
warn: jest.fn(),
|
|
20
|
+
error: jest.fn(),
|
|
23
21
|
},
|
|
24
22
|
}));
|
|
25
23
|
const identity_cache_dynamodb_db_service_js_1 = require("../../services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js");
|
|
@@ -28,18 +26,18 @@ const index_js_2 = require("../../helpers/index.js");
|
|
|
28
26
|
const constants_js_1 = require("../../services/db/identity-cache-dynamodb-service/constants.js");
|
|
29
27
|
const mockedDynamoDbClient = index_js_1.DynamoDbClient;
|
|
30
28
|
const mockedLogger = index_js_2.Logger;
|
|
31
|
-
|
|
29
|
+
describe('IdentityCacheDynamoDbDbService.getIdentityFromCachePure()', () => {
|
|
32
30
|
const pixelId = 'pixel-test-123';
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
jest.clearAllMocks();
|
|
35
33
|
mockedDynamoDbClient.safeGet.mockReset();
|
|
36
34
|
mockedDynamoDbClient.safePut.mockReset();
|
|
37
35
|
mockedDynamoDbClient.safeBatchWrite.mockReset();
|
|
38
36
|
mockedDynamoDbClient.batchGet.mockReset();
|
|
39
37
|
mockedDynamoDbClient.batchWrite.mockReset();
|
|
40
38
|
});
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
describe('cache hit by identity ID', () => {
|
|
40
|
+
it('should return cachedIdentity with lookupPath=identity_id and cacheHit=true', async () => {
|
|
43
41
|
const incomingIdentity = {
|
|
44
42
|
identityId: 'identity-123',
|
|
45
43
|
traits: { emails: ['test@email.com'] },
|
|
@@ -59,14 +57,14 @@ const mockedLogger = index_js_2.Logger;
|
|
|
59
57
|
};
|
|
60
58
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
|
|
61
59
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
});
|
|
69
|
-
|
|
60
|
+
expect(result.cacheHit).toBe(true);
|
|
61
|
+
expect(result.lookupPath).toBe('identity_id');
|
|
62
|
+
expect(result.cachedIdentity).toEqual(cachedRecord.response);
|
|
63
|
+
expect(result.discoveredIdentityId).toBeUndefined();
|
|
64
|
+
expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledTimes(1);
|
|
65
|
+
expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `identity#${pixelId}#identity-123`);
|
|
66
|
+
});
|
|
67
|
+
it('should return cachedIdentity with all traits preserved', async () => {
|
|
70
68
|
const incomingIdentity = {
|
|
71
69
|
identityId: 'full-traits-id',
|
|
72
70
|
traits: { emails: ['new@email.com'] },
|
|
@@ -93,13 +91,13 @@ const mockedLogger = index_js_2.Logger;
|
|
|
93
91
|
};
|
|
94
92
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
|
|
95
93
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
94
|
+
expect(result.cacheHit).toBe(true);
|
|
95
|
+
expect(result.cachedIdentity).toEqual(fullCachedIdentity);
|
|
96
|
+
expect(result.cachedIdentity?.traits?.emails).toHaveLength(2);
|
|
97
|
+
expect(result.cachedIdentity?.traits?.phones).toHaveLength(2);
|
|
98
|
+
expect(result.cachedIdentity?.traits?.addresses).toHaveLength(1);
|
|
101
99
|
});
|
|
102
|
-
|
|
100
|
+
it('should NOT perform any merge logic', async () => {
|
|
103
101
|
const incomingIdentity = {
|
|
104
102
|
identityId: 'merge-test-id',
|
|
105
103
|
traits: {
|
|
@@ -122,11 +120,11 @@ const mockedLogger = index_js_2.Logger;
|
|
|
122
120
|
};
|
|
123
121
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
|
|
124
122
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
123
|
+
expect(result.cachedIdentity?.traits?.emails).toEqual(['old-email@test.com']);
|
|
124
|
+
expect(result.cachedIdentity?.traits?.phones).toEqual(['111-2222']);
|
|
125
|
+
expect(result.cachedIdentity?.traits?.emails).not.toContain('new-email@test.com');
|
|
128
126
|
});
|
|
129
|
-
|
|
127
|
+
it('should NOT perform staleness computation', async () => {
|
|
130
128
|
const incomingIdentity = {
|
|
131
129
|
identityId: 'stale-test-id',
|
|
132
130
|
traits: {
|
|
@@ -147,15 +145,15 @@ const mockedLogger = index_js_2.Logger;
|
|
|
147
145
|
};
|
|
148
146
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
|
|
149
147
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
148
|
+
expect(result).not.toHaveProperty('isCacheStale');
|
|
149
|
+
expect(result).not.toHaveProperty('staleTier');
|
|
150
|
+
expect(result).not.toHaveProperty('staleTracker');
|
|
151
|
+
expect(result).not.toHaveProperty('writeReason');
|
|
152
|
+
expect(result).not.toHaveProperty('skipNeptune');
|
|
155
153
|
});
|
|
156
154
|
});
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
describe('cache hit by email pointer', () => {
|
|
156
|
+
it('should return discoveredIdentityId with lookupPath=email_pointer and cacheHit=true', async () => {
|
|
159
157
|
const incomingIdentity = {
|
|
160
158
|
traits: { emails: ['lookup@email.com'] },
|
|
161
159
|
};
|
|
@@ -167,12 +165,12 @@ const mockedLogger = index_js_2.Logger;
|
|
|
167
165
|
};
|
|
168
166
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
|
|
169
167
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
expect(result.cacheHit).toBe(true);
|
|
169
|
+
expect(result.lookupPath).toBe('email_pointer');
|
|
170
|
+
expect(result.discoveredIdentityId).toBe('discovered-identity-456');
|
|
171
|
+
expect(result.cachedIdentity).toBeUndefined();
|
|
174
172
|
});
|
|
175
|
-
|
|
173
|
+
it('should use first email in emails array for lookup', async () => {
|
|
176
174
|
const incomingIdentity = {
|
|
177
175
|
traits: { emails: ['first@email.com', 'second@email.com'] },
|
|
178
176
|
};
|
|
@@ -184,10 +182,10 @@ const mockedLogger = index_js_2.Logger;
|
|
|
184
182
|
};
|
|
185
183
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
|
|
186
184
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
187
|
-
|
|
188
|
-
|
|
185
|
+
expect(result.discoveredIdentityId).toBe('pointer-identity-789');
|
|
186
|
+
expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `email#${pixelId}#first@email.com`);
|
|
189
187
|
});
|
|
190
|
-
|
|
188
|
+
it('should NOT merge traits when returning email pointer discovery', async () => {
|
|
191
189
|
const incomingIdentity = {
|
|
192
190
|
traits: {
|
|
193
191
|
emails: ['discovery@email.com'],
|
|
@@ -202,35 +200,35 @@ const mockedLogger = index_js_2.Logger;
|
|
|
202
200
|
};
|
|
203
201
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
|
|
204
202
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
205
|
-
|
|
206
|
-
|
|
203
|
+
expect(result.cachedIdentity).toBeUndefined();
|
|
204
|
+
expect(result.discoveredIdentityId).toBe('discovered-id');
|
|
207
205
|
});
|
|
208
206
|
});
|
|
209
|
-
|
|
210
|
-
|
|
207
|
+
describe('cache miss', () => {
|
|
208
|
+
it('should return lookupPath=miss and cacheHit=false when identity not found', async () => {
|
|
211
209
|
const incomingIdentity = {
|
|
212
210
|
identityId: 'nonexistent-identity',
|
|
213
211
|
traits: { emails: ['test@email.com'] },
|
|
214
212
|
};
|
|
215
213
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
|
|
216
214
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
215
|
+
expect(result.cacheHit).toBe(false);
|
|
216
|
+
expect(result.lookupPath).toBe('identity_id');
|
|
217
|
+
expect(result.cachedIdentity).toBeUndefined();
|
|
218
|
+
expect(result.discoveredIdentityId).toBeUndefined();
|
|
221
219
|
});
|
|
222
|
-
|
|
220
|
+
it('should return lookupPath=miss and cacheHit=false when email pointer not found', async () => {
|
|
223
221
|
const incomingIdentity = {
|
|
224
222
|
traits: { emails: ['unknown@email.com'] },
|
|
225
223
|
};
|
|
226
224
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
|
|
227
225
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
226
|
+
expect(result.cacheHit).toBe(false);
|
|
227
|
+
expect(result.lookupPath).toBe('miss');
|
|
228
|
+
expect(result.cachedIdentity).toBeUndefined();
|
|
229
|
+
expect(result.discoveredIdentityId).toBeUndefined();
|
|
232
230
|
});
|
|
233
|
-
|
|
231
|
+
it('should return lookupPath=miss when cached record has no response field', async () => {
|
|
234
232
|
const incomingIdentity = {
|
|
235
233
|
identityId: 'no-response-identity',
|
|
236
234
|
traits: { emails: ['test@email.com'] },
|
|
@@ -243,83 +241,83 @@ const mockedLogger = index_js_2.Logger;
|
|
|
243
241
|
};
|
|
244
242
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(incompleteRecord);
|
|
245
243
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
244
|
+
expect(result.cacheHit).toBe(false);
|
|
245
|
+
expect(result.lookupPath).toBe('identity_id');
|
|
246
|
+
expect(result.cachedIdentity).toBeUndefined();
|
|
249
247
|
});
|
|
250
|
-
|
|
248
|
+
it('should return lookupPath=miss when no email provided for pointer lookup', async () => {
|
|
251
249
|
const incomingIdentity = {
|
|
252
250
|
traits: { phones: ['555-1234'] },
|
|
253
251
|
};
|
|
254
252
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
253
|
+
expect(result.cacheHit).toBe(false);
|
|
254
|
+
expect(result.lookupPath).toBe('miss');
|
|
255
|
+
expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
|
|
258
256
|
});
|
|
259
257
|
});
|
|
260
|
-
|
|
261
|
-
|
|
258
|
+
describe('invalid input handling', () => {
|
|
259
|
+
it('should return cache miss for undefined pixelId', async () => {
|
|
262
260
|
const incomingIdentity = {
|
|
263
261
|
identityId: 'test-identity',
|
|
264
262
|
traits: { emails: ['test@email.com'] },
|
|
265
263
|
};
|
|
266
264
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(undefined, incomingIdentity);
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
265
|
+
expect(result.cacheHit).toBe(false);
|
|
266
|
+
expect(result.lookupPath).toBe('miss');
|
|
267
|
+
expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
|
|
270
268
|
});
|
|
271
|
-
|
|
269
|
+
it('should return cache miss for empty pixelId', async () => {
|
|
272
270
|
const incomingIdentity = {
|
|
273
271
|
identityId: 'test-identity',
|
|
274
272
|
traits: { emails: ['test@email.com'] },
|
|
275
273
|
};
|
|
276
274
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure('', incomingIdentity);
|
|
277
|
-
|
|
278
|
-
|
|
275
|
+
expect(result.cacheHit).toBe(false);
|
|
276
|
+
expect(result.lookupPath).toBe('miss');
|
|
279
277
|
});
|
|
280
|
-
|
|
278
|
+
it('should return cache miss for undefined incomingIdentity', async () => {
|
|
281
279
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, undefined);
|
|
282
|
-
|
|
283
|
-
|
|
280
|
+
expect(result.cacheHit).toBe(false);
|
|
281
|
+
expect(result.lookupPath).toBe('miss');
|
|
284
282
|
});
|
|
285
|
-
|
|
283
|
+
it('should return cache miss for null incomingIdentity', async () => {
|
|
286
284
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, null);
|
|
287
|
-
|
|
288
|
-
|
|
285
|
+
expect(result.cacheHit).toBe(false);
|
|
286
|
+
expect(result.lookupPath).toBe('miss');
|
|
289
287
|
});
|
|
290
288
|
});
|
|
291
|
-
|
|
292
|
-
|
|
289
|
+
describe('error handling', () => {
|
|
290
|
+
it('should return cache miss when DynamoDB throws an error', async () => {
|
|
293
291
|
const incomingIdentity = {
|
|
294
292
|
identityId: 'error-test-identity',
|
|
295
293
|
traits: { emails: ['test@email.com'] },
|
|
296
294
|
};
|
|
297
295
|
mockedDynamoDbClient.safeGet.mockRejectedValueOnce(new Error('DynamoDB connection failed'));
|
|
298
296
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
error:
|
|
297
|
+
expect(result.cacheHit).toBe(false);
|
|
298
|
+
expect(result.lookupPath).toBe('identity_id');
|
|
299
|
+
expect(result.cachedIdentity).toBeUndefined();
|
|
300
|
+
expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
|
|
301
|
+
error: expect.any(Error),
|
|
304
302
|
errorMessage: 'DynamoDB connection failed',
|
|
305
303
|
}));
|
|
306
304
|
});
|
|
307
|
-
|
|
305
|
+
it('should handle non-Error thrown values', async () => {
|
|
308
306
|
const incomingIdentity = {
|
|
309
307
|
identityId: 'string-error-identity',
|
|
310
308
|
traits: { emails: ['test@email.com'] },
|
|
311
309
|
};
|
|
312
310
|
mockedDynamoDbClient.safeGet.mockRejectedValueOnce('String error message');
|
|
313
311
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
312
|
+
expect(result.cacheHit).toBe(false);
|
|
313
|
+
expect(result.lookupPath).toBe('identity_id');
|
|
314
|
+
expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
|
|
317
315
|
errorMessage: 'String error message',
|
|
318
316
|
}));
|
|
319
317
|
});
|
|
320
318
|
});
|
|
321
|
-
|
|
322
|
-
|
|
319
|
+
describe('verification: no merge or staleness logic', () => {
|
|
320
|
+
it('should not call mergeIdentityTraits', async () => {
|
|
323
321
|
const incomingIdentity = {
|
|
324
322
|
identityId: 'verify-no-merge',
|
|
325
323
|
traits: { emails: ['incoming@email.com'] },
|
|
@@ -336,10 +334,10 @@ const mockedLogger = index_js_2.Logger;
|
|
|
336
334
|
};
|
|
337
335
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
|
|
338
336
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
339
|
-
|
|
340
|
-
|
|
337
|
+
expect(result.cachedIdentity).toBe(cachedRecord.response);
|
|
338
|
+
expect(result.cachedIdentity?.traits?.emails).toEqual(['cached@email.com']);
|
|
341
339
|
});
|
|
342
|
-
|
|
340
|
+
it('should not call isIdentityCacheStale', async () => {
|
|
343
341
|
const incomingIdentity = {
|
|
344
342
|
identityId: 'verify-no-staleness',
|
|
345
343
|
traits: {
|
|
@@ -358,9 +356,9 @@ const mockedLogger = index_js_2.Logger;
|
|
|
358
356
|
};
|
|
359
357
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
|
|
360
358
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
361
|
-
|
|
359
|
+
expect(Object.keys(result)).toEqual(['cachedIdentity', 'lookupPath', 'cacheHit']);
|
|
362
360
|
});
|
|
363
|
-
|
|
361
|
+
it('result should only contain pure lookup properties', async () => {
|
|
364
362
|
const incomingIdentity = {
|
|
365
363
|
identityId: 'result-shape-test',
|
|
366
364
|
traits: { emails: ['test@email.com'] },
|
|
@@ -377,22 +375,22 @@ const mockedLogger = index_js_2.Logger;
|
|
|
377
375
|
};
|
|
378
376
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
|
|
379
377
|
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
380
|
-
|
|
378
|
+
expect(result).toEqual({
|
|
381
379
|
cachedIdentity: cachedRecord.response,
|
|
382
380
|
lookupPath: 'identity_id',
|
|
383
381
|
cacheHit: true,
|
|
384
382
|
});
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
383
|
+
expect(result).not.toHaveProperty('resolvedIdentity');
|
|
384
|
+
expect(result).not.toHaveProperty('isCacheStale');
|
|
385
|
+
expect(result).not.toHaveProperty('staleTracker');
|
|
386
|
+
expect(result).not.toHaveProperty('staleTier');
|
|
387
|
+
expect(result).not.toHaveProperty('writeReason');
|
|
388
|
+
expect(result).not.toHaveProperty('skipNeptune');
|
|
389
|
+
expect(result).not.toHaveProperty('mergedIdentity');
|
|
392
390
|
});
|
|
393
391
|
});
|
|
394
|
-
|
|
395
|
-
|
|
392
|
+
describe('logging', () => {
|
|
393
|
+
it('should log debug on cache hit by identity ID', async () => {
|
|
396
394
|
const incomingIdentity = {
|
|
397
395
|
identityId: 'log-test-id',
|
|
398
396
|
traits: { emails: ['test@email.com'] },
|
|
@@ -409,24 +407,24 @@ const mockedLogger = index_js_2.Logger;
|
|
|
409
407
|
};
|
|
410
408
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
|
|
411
409
|
await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
412
|
-
|
|
410
|
+
expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup hit', expect.objectContaining({
|
|
413
411
|
pixelId,
|
|
414
412
|
identityId: 'log-test-id',
|
|
415
413
|
}));
|
|
416
414
|
});
|
|
417
|
-
|
|
415
|
+
it('should log debug on cache miss', async () => {
|
|
418
416
|
const incomingIdentity = {
|
|
419
417
|
identityId: 'miss-log-test',
|
|
420
418
|
traits: { emails: ['test@email.com'] },
|
|
421
419
|
};
|
|
422
420
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
|
|
423
421
|
await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
424
|
-
|
|
422
|
+
expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup miss', expect.objectContaining({
|
|
425
423
|
pixelId,
|
|
426
424
|
identityId: 'miss-log-test',
|
|
427
425
|
}));
|
|
428
426
|
});
|
|
429
|
-
|
|
427
|
+
it('should log debug on email pointer discovery', async () => {
|
|
430
428
|
const incomingIdentity = {
|
|
431
429
|
traits: { emails: ['email-pointer@test.com'] },
|
|
432
430
|
};
|
|
@@ -438,21 +436,21 @@ const mockedLogger = index_js_2.Logger;
|
|
|
438
436
|
};
|
|
439
437
|
mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
|
|
440
438
|
await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
|
|
441
|
-
|
|
439
|
+
expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure email pointer discovery', expect.objectContaining({
|
|
442
440
|
pixelId,
|
|
443
441
|
discoveredIdentityId: 'discovered-from-pointer',
|
|
444
442
|
}));
|
|
445
443
|
});
|
|
446
444
|
});
|
|
447
445
|
});
|
|
448
|
-
|
|
446
|
+
describe('IdentityCacheDynamoDbDbService cluster traits operations', () => {
|
|
449
447
|
const pixelId = 'pixel-cluster';
|
|
450
448
|
const primaryIdentityId = 'identity-primary';
|
|
451
449
|
const secondaryIdentityId = 'identity-secondary';
|
|
452
|
-
|
|
453
|
-
|
|
450
|
+
beforeEach(() => {
|
|
451
|
+
jest.clearAllMocks();
|
|
454
452
|
});
|
|
455
|
-
|
|
453
|
+
it('returns records by requested identity ID when every key is processed', async () => {
|
|
456
454
|
const primaryRecord = {
|
|
457
455
|
pk: `identity#${pixelId}#${primaryIdentityId}`,
|
|
458
456
|
pixelId,
|
|
@@ -465,16 +463,13 @@ const mockedLogger = index_js_2.Logger;
|
|
|
465
463
|
UnprocessedKeys: {},
|
|
466
464
|
$metadata: {},
|
|
467
465
|
});
|
|
468
|
-
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
(0, vitest_1.expect)(result.failedIdentityIds).toEqual([]);
|
|
474
|
-
(0, vitest_1.expect)(result.recordsByIdentityId.get(primaryIdentityId)).toEqual(primaryRecord);
|
|
475
|
-
(0, vitest_1.expect)(result.recordsByIdentityId.has(secondaryIdentityId)).toBe(false);
|
|
466
|
+
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
|
|
467
|
+
expect(result.complete).toBe(true);
|
|
468
|
+
expect(result.failedIdentityIds).toEqual([]);
|
|
469
|
+
expect(result.recordsByIdentityId.get(primaryIdentityId)).toEqual(primaryRecord);
|
|
470
|
+
expect(result.recordsByIdentityId.has(secondaryIdentityId)).toBe(false);
|
|
476
471
|
});
|
|
477
|
-
|
|
472
|
+
it('treats an unprocessed key as a failed read', async () => {
|
|
478
473
|
mockedDynamoDbClient.batchGet.mockResolvedValue({
|
|
479
474
|
Responses: { [constants_js_1.IDENTITY_CACHE_TABLE_NAME]: [] },
|
|
480
475
|
UnprocessedKeys: {
|
|
@@ -484,23 +479,17 @@ const mockedLogger = index_js_2.Logger;
|
|
|
484
479
|
},
|
|
485
480
|
$metadata: {},
|
|
486
481
|
});
|
|
487
|
-
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
]);
|
|
491
|
-
(0, vitest_1.expect)(result.complete).toBe(false);
|
|
492
|
-
(0, vitest_1.expect)(result.failedIdentityIds).toEqual([secondaryIdentityId]);
|
|
482
|
+
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
|
|
483
|
+
expect(result.complete).toBe(false);
|
|
484
|
+
expect(result.failedIdentityIds).toEqual([secondaryIdentityId]);
|
|
493
485
|
});
|
|
494
|
-
|
|
486
|
+
it('marks every key in a failed chunk as a failed read', async () => {
|
|
495
487
|
mockedDynamoDbClient.batchGet.mockRejectedValue(new Error('read failed'));
|
|
496
|
-
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
]);
|
|
500
|
-
(0, vitest_1.expect)(result.complete).toBe(false);
|
|
501
|
-
(0, vitest_1.expect)(result.failedIdentityIds).toEqual([primaryIdentityId, secondaryIdentityId]);
|
|
488
|
+
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
|
|
489
|
+
expect(result.complete).toBe(false);
|
|
490
|
+
expect(result.failedIdentityIds).toEqual([primaryIdentityId, secondaryIdentityId]);
|
|
502
491
|
});
|
|
503
|
-
|
|
492
|
+
it('writes final primary traits and the migration marker in one item', async () => {
|
|
504
493
|
mockedDynamoDbClient.safePut.mockResolvedValue({ $metadata: { httpStatusCode: 200 } });
|
|
505
494
|
const success = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.putPrimaryIdentityTraits({
|
|
506
495
|
pixelId,
|
|
@@ -508,8 +497,8 @@ const mockedLogger = index_js_2.Logger;
|
|
|
508
497
|
traits: { emails: ['merged@test.com'] },
|
|
509
498
|
traitsInDynamo: true,
|
|
510
499
|
});
|
|
511
|
-
|
|
512
|
-
|
|
500
|
+
expect(success).toBe(true);
|
|
501
|
+
expect(mockedDynamoDbClient.safePut).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
|
|
513
502
|
pk: `identity#${pixelId}#${primaryIdentityId}`,
|
|
514
503
|
identityId: primaryIdentityId,
|
|
515
504
|
traitsInDynamo: true,
|
|
@@ -519,7 +508,7 @@ const mockedLogger = index_js_2.Logger;
|
|
|
519
508
|
},
|
|
520
509
|
}));
|
|
521
510
|
});
|
|
522
|
-
|
|
511
|
+
it('reports a failed primary traits write', async () => {
|
|
523
512
|
mockedDynamoDbClient.safePut.mockResolvedValue(null);
|
|
524
513
|
const success = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.putPrimaryIdentityTraits({
|
|
525
514
|
pixelId,
|
|
@@ -527,25 +516,20 @@ const mockedLogger = index_js_2.Logger;
|
|
|
527
516
|
traits: {},
|
|
528
517
|
traitsInDynamo: true,
|
|
529
518
|
});
|
|
530
|
-
|
|
519
|
+
expect(success).toBe(false);
|
|
531
520
|
});
|
|
532
|
-
|
|
521
|
+
it('deletes exact identity keys and returns unprocessed identity IDs', async () => {
|
|
533
522
|
mockedDynamoDbClient.batchWrite.mockResolvedValue({
|
|
534
523
|
UnprocessedItems: {
|
|
535
|
-
[constants_js_1.IDENTITY_CACHE_TABLE_NAME]: [
|
|
536
|
-
{
|
|
524
|
+
[constants_js_1.IDENTITY_CACHE_TABLE_NAME]: [{
|
|
537
525
|
DeleteRequest: { Key: { pk: `identity#${pixelId}#${secondaryIdentityId}` } },
|
|
538
|
-
},
|
|
539
|
-
],
|
|
526
|
+
}],
|
|
540
527
|
},
|
|
541
528
|
$metadata: {},
|
|
542
529
|
});
|
|
543
|
-
const failedIdentityIds = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
]);
|
|
547
|
-
(0, vitest_1.expect)(failedIdentityIds).toEqual([secondaryIdentityId]);
|
|
548
|
-
(0, vitest_1.expect)(mockedDynamoDbClient.batchWrite).toHaveBeenCalledWith({
|
|
530
|
+
const failedIdentityIds = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
|
|
531
|
+
expect(failedIdentityIds).toEqual([secondaryIdentityId]);
|
|
532
|
+
expect(mockedDynamoDbClient.batchWrite).toHaveBeenCalledWith({
|
|
549
533
|
RequestItems: {
|
|
550
534
|
[constants_js_1.IDENTITY_CACHE_TABLE_NAME]: [
|
|
551
535
|
{ DeleteRequest: { Key: { pk: `identity#${pixelId}#${primaryIdentityId}` } } },
|
|
@@ -554,26 +538,19 @@ const mockedLogger = index_js_2.Logger;
|
|
|
554
538
|
},
|
|
555
539
|
});
|
|
556
540
|
});
|
|
557
|
-
|
|
541
|
+
it('returns every identity ID when an exact delete chunk fails', async () => {
|
|
558
542
|
mockedDynamoDbClient.batchWrite.mockRejectedValue(new Error('delete failed'));
|
|
559
|
-
const failedIdentityIds = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [
|
|
560
|
-
|
|
561
|
-
secondaryIdentityId,
|
|
562
|
-
]);
|
|
563
|
-
(0, vitest_1.expect)(failedIdentityIds).toEqual([primaryIdentityId, secondaryIdentityId]);
|
|
543
|
+
const failedIdentityIds = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
|
|
544
|
+
expect(failedIdentityIds).toEqual([primaryIdentityId, secondaryIdentityId]);
|
|
564
545
|
});
|
|
565
|
-
|
|
546
|
+
it('deduplicates requested identity IDs before issuing batchGet', async () => {
|
|
566
547
|
mockedDynamoDbClient.batchGet.mockResolvedValue({
|
|
567
548
|
Responses: { [constants_js_1.IDENTITY_CACHE_TABLE_NAME]: [] },
|
|
568
549
|
UnprocessedKeys: {},
|
|
569
550
|
$metadata: {},
|
|
570
551
|
});
|
|
571
|
-
await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
|
|
572
|
-
|
|
573
|
-
primaryIdentityId,
|
|
574
|
-
secondaryIdentityId,
|
|
575
|
-
]);
|
|
576
|
-
(0, vitest_1.expect)(mockedDynamoDbClient.batchGet).toHaveBeenCalledWith({
|
|
552
|
+
await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, primaryIdentityId, secondaryIdentityId]);
|
|
553
|
+
expect(mockedDynamoDbClient.batchGet).toHaveBeenCalledWith({
|
|
577
554
|
RequestItems: {
|
|
578
555
|
[constants_js_1.IDENTITY_CACHE_TABLE_NAME]: {
|
|
579
556
|
Keys: [
|
|
@@ -584,21 +561,18 @@ const mockedLogger = index_js_2.Logger;
|
|
|
584
561
|
},
|
|
585
562
|
});
|
|
586
563
|
});
|
|
587
|
-
|
|
564
|
+
it('treats a processed key with no returned item as a successful miss', async () => {
|
|
588
565
|
mockedDynamoDbClient.batchGet.mockResolvedValue({
|
|
589
566
|
Responses: { [constants_js_1.IDENTITY_CACHE_TABLE_NAME]: [] },
|
|
590
567
|
UnprocessedKeys: {},
|
|
591
568
|
$metadata: {},
|
|
592
569
|
});
|
|
593
|
-
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
(0, vitest_1.expect)(result.complete).toBe(true);
|
|
598
|
-
(0, vitest_1.expect)(result.failedIdentityIds).toEqual([]);
|
|
599
|
-
(0, vitest_1.expect)(result.recordsByIdentityId.size).toBe(0);
|
|
570
|
+
const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
|
|
571
|
+
expect(result.complete).toBe(true);
|
|
572
|
+
expect(result.failedIdentityIds).toEqual([]);
|
|
573
|
+
expect(result.recordsByIdentityId.size).toBe(0);
|
|
600
574
|
});
|
|
601
|
-
|
|
575
|
+
it('reports a failed primary traits write when safePut throws', async () => {
|
|
602
576
|
mockedDynamoDbClient.safePut.mockRejectedValue(new Error('put failed'));
|
|
603
577
|
const success = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.putPrimaryIdentityTraits({
|
|
604
578
|
pixelId,
|
|
@@ -606,38 +580,41 @@ const mockedLogger = index_js_2.Logger;
|
|
|
606
580
|
traits: { emails: ['merged@test.com'] },
|
|
607
581
|
traitsInDynamo: true,
|
|
608
582
|
});
|
|
609
|
-
|
|
610
|
-
|
|
583
|
+
expect(success).toBe(false);
|
|
584
|
+
expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache [primary traits write]: failed', expect.objectContaining({ pixelId, primaryIdentityId }));
|
|
611
585
|
});
|
|
612
|
-
|
|
586
|
+
it('deletes exact identity PKs without querying GSI1', async () => {
|
|
613
587
|
mockedDynamoDbClient.batchWrite.mockResolvedValue({
|
|
614
588
|
UnprocessedItems: {},
|
|
615
589
|
$metadata: {},
|
|
616
590
|
});
|
|
617
591
|
await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [secondaryIdentityId]);
|
|
618
|
-
|
|
619
|
-
|
|
592
|
+
expect(mockedDynamoDbClient.safeQueryByGSI).not.toHaveBeenCalled();
|
|
593
|
+
expect(mockedDynamoDbClient.batchWrite).toHaveBeenCalledWith({
|
|
620
594
|
RequestItems: {
|
|
621
|
-
[constants_js_1.IDENTITY_CACHE_TABLE_NAME]: [
|
|
595
|
+
[constants_js_1.IDENTITY_CACHE_TABLE_NAME]: [
|
|
596
|
+
{ DeleteRequest: { Key: { pk: `identity#${pixelId}#${secondaryIdentityId}` } } },
|
|
597
|
+
],
|
|
622
598
|
},
|
|
623
599
|
});
|
|
624
600
|
});
|
|
625
|
-
|
|
601
|
+
it('logs cluster read completion with requested identity IDs', async () => {
|
|
626
602
|
mockedDynamoDbClient.batchGet.mockResolvedValue({
|
|
627
603
|
Responses: { [constants_js_1.IDENTITY_CACHE_TABLE_NAME]: [] },
|
|
628
604
|
UnprocessedKeys: {},
|
|
629
605
|
$metadata: {},
|
|
630
606
|
});
|
|
631
607
|
await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId]);
|
|
632
|
-
|
|
608
|
+
expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache [cluster traits read]: completed', expect.objectContaining({
|
|
633
609
|
pixelId,
|
|
634
610
|
identityIds: [primaryIdentityId],
|
|
635
611
|
}));
|
|
636
612
|
});
|
|
637
613
|
});
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
614
|
+
describe('mergeAndComputeIdentityStaleness (pure function)', () => {
|
|
615
|
+
const { mergeAndComputeIdentityStaleness, IDENTITY_CACHE_STALENESS_TIER } = jest.requireActual('@adtrackify/at-shared-utils');
|
|
616
|
+
describe('merge behavior', () => {
|
|
617
|
+
it('should merge incoming traits with cached traits', () => {
|
|
641
618
|
const incomingIdentity = {
|
|
642
619
|
identityId: 'merge-test',
|
|
643
620
|
traits: {
|
|
@@ -651,14 +628,14 @@ const mockedLogger = index_js_2.Logger;
|
|
|
651
628
|
phones: ['555-1234'],
|
|
652
629
|
},
|
|
653
630
|
};
|
|
654
|
-
const result =
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
631
|
+
const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
|
|
632
|
+
expect(result.mergedIdentity.traits?.emails).toContain('new@email.com');
|
|
633
|
+
expect(result.mergedIdentity.traits?.emails).toContain('cached@email.com');
|
|
634
|
+
expect(result.mergedIdentity.traits?.phones).toContain('555-1234');
|
|
658
635
|
});
|
|
659
636
|
});
|
|
660
|
-
|
|
661
|
-
|
|
637
|
+
describe('staleness tier computation', () => {
|
|
638
|
+
it('should return NONE tier when no traits are stale', () => {
|
|
662
639
|
const incomingIdentity = {
|
|
663
640
|
identityId: 'same-test',
|
|
664
641
|
traits: { emails: ['same@email.com'] },
|
|
@@ -667,11 +644,11 @@ const mockedLogger = index_js_2.Logger;
|
|
|
667
644
|
identityId: 'same-test',
|
|
668
645
|
traits: { emails: ['same@email.com'] },
|
|
669
646
|
};
|
|
670
|
-
const result =
|
|
671
|
-
|
|
672
|
-
|
|
647
|
+
const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
|
|
648
|
+
expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
649
|
+
expect(result.isCacheStale).toBe(false);
|
|
673
650
|
});
|
|
674
|
-
|
|
651
|
+
it('should return VOLATILE_ONLY tier when incoming has new IP address (cached has none)', () => {
|
|
675
652
|
const incomingIdentity = {
|
|
676
653
|
identityId: 'volatile-test',
|
|
677
654
|
traits: {
|
|
@@ -685,11 +662,11 @@ const mockedLogger = index_js_2.Logger;
|
|
|
685
662
|
emails: ['same@email.com'],
|
|
686
663
|
},
|
|
687
664
|
};
|
|
688
|
-
const result =
|
|
689
|
-
|
|
690
|
-
|
|
665
|
+
const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
|
|
666
|
+
expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
667
|
+
expect(result.isCacheStale).toBe(false);
|
|
691
668
|
});
|
|
692
|
-
|
|
669
|
+
it('should return ADDRESS_UPDATE tier when non-IP address is new', () => {
|
|
693
670
|
const incomingIdentity = {
|
|
694
671
|
identityId: 'address-test',
|
|
695
672
|
traits: {
|
|
@@ -704,11 +681,11 @@ const mockedLogger = index_js_2.Logger;
|
|
|
704
681
|
addresses: [],
|
|
705
682
|
},
|
|
706
683
|
};
|
|
707
|
-
const result =
|
|
708
|
-
|
|
709
|
-
|
|
684
|
+
const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
|
|
685
|
+
expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
686
|
+
expect(result.isCacheStale).toBe(true);
|
|
710
687
|
});
|
|
711
|
-
|
|
688
|
+
it('should return IDENTITY_STALE tier when email changes', () => {
|
|
712
689
|
const incomingIdentity = {
|
|
713
690
|
identityId: 'stale-test',
|
|
714
691
|
traits: {
|
|
@@ -721,13 +698,13 @@ const mockedLogger = index_js_2.Logger;
|
|
|
721
698
|
emails: ['old@email.com'],
|
|
722
699
|
},
|
|
723
700
|
};
|
|
724
|
-
const result =
|
|
725
|
-
|
|
726
|
-
|
|
701
|
+
const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
|
|
702
|
+
expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
703
|
+
expect(result.isCacheStale).toBe(true);
|
|
727
704
|
});
|
|
728
705
|
});
|
|
729
|
-
|
|
730
|
-
|
|
706
|
+
describe('staleTraits extraction', () => {
|
|
707
|
+
it('should include changed trait names in staleTraits array', () => {
|
|
731
708
|
const incomingIdentity = {
|
|
732
709
|
identityId: 'traits-test',
|
|
733
710
|
traits: {
|
|
@@ -742,9 +719,9 @@ const mockedLogger = index_js_2.Logger;
|
|
|
742
719
|
phones: ['111-2222'],
|
|
743
720
|
},
|
|
744
721
|
};
|
|
745
|
-
const result =
|
|
746
|
-
|
|
747
|
-
|
|
722
|
+
const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
|
|
723
|
+
expect(result.staleTraits).toContain('emails');
|
|
724
|
+
expect(result.staleTraits).toContain('phones');
|
|
748
725
|
});
|
|
749
726
|
});
|
|
750
727
|
});
|