@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,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const vitest_1 = require("vitest");
|
|
4
3
|
const at_tracking_event_types_1 = require("@adtrackify/at-tracking-event-types");
|
|
5
4
|
const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
describe('Identity Trait Merging Tests', () => {
|
|
6
|
+
afterEach(() => {
|
|
7
|
+
jest.resetModules();
|
|
9
8
|
});
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
describe('mergeIdentityTraits function', () => {
|
|
10
|
+
it('should merge simple string arrays correctly', () => {
|
|
12
11
|
const incomingTraits = {
|
|
13
12
|
emails: ['new@email.com'],
|
|
14
13
|
userIds: ['user1', 'user2'],
|
|
@@ -19,11 +18,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
19
18
|
phones: ['+1234567890'],
|
|
20
19
|
};
|
|
21
20
|
const merged = (0, at_shared_utils_1.mergeIdentityTraits)(incomingTraits, cachedTraits);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
expect(merged.emails).toEqual(['new@email.com', 'existing@email.com']);
|
|
22
|
+
expect(merged.userIds).toEqual(['user1', 'user2', 'user3']);
|
|
23
|
+
expect(merged.phones).toEqual(['+1234567890']);
|
|
25
24
|
});
|
|
26
|
-
|
|
25
|
+
it('should handle null and undefined values in arrays', () => {
|
|
27
26
|
const incomingTraits = {
|
|
28
27
|
emails: ['test@email.com', null, undefined],
|
|
29
28
|
userIds: ['user1'],
|
|
@@ -33,11 +32,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
33
32
|
userIds: null,
|
|
34
33
|
};
|
|
35
34
|
const merged = (0, at_shared_utils_1.mergeIdentityTraits)(incomingTraits, cachedTraits);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
expect(merged.emails).toContain('test@email.com');
|
|
36
|
+
expect(merged.emails).toContain('cached@email.com');
|
|
37
|
+
expect(merged.userIds).toEqual(['user1']);
|
|
39
38
|
});
|
|
40
|
-
|
|
39
|
+
it('should merge addresses correctly', () => {
|
|
41
40
|
const incomingTraits = {
|
|
42
41
|
addresses: [
|
|
43
42
|
{
|
|
@@ -61,13 +60,13 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
61
60
|
],
|
|
62
61
|
};
|
|
63
62
|
const merged = (0, at_shared_utils_1.mergeIdentityTraits)(incomingTraits, cachedTraits);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
expect(merged.addresses).toHaveLength(2);
|
|
64
|
+
expect(merged.addresses).toEqual(expect.arrayContaining([
|
|
65
|
+
expect.objectContaining({ city: 'New York' }),
|
|
66
|
+
expect.objectContaining({ city: 'Los Angeles' }),
|
|
68
67
|
]));
|
|
69
68
|
});
|
|
70
|
-
|
|
69
|
+
it('should merge click information correctly', () => {
|
|
71
70
|
const incomingTraits = {
|
|
72
71
|
click: {
|
|
73
72
|
fbp: 'fb.new.123',
|
|
@@ -83,30 +82,30 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
83
82
|
},
|
|
84
83
|
};
|
|
85
84
|
const merged = (0, at_shared_utils_1.mergeIdentityTraits)(incomingTraits, cachedTraits);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
expect(merged.click?.fbp).toBe('fb.new.123');
|
|
86
|
+
expect(merged.click?.gclid).toBe('new_gclid');
|
|
87
|
+
expect(merged.click?.fbpCollectedAt).toBe('2024-01-01T00:00:00.000Z');
|
|
88
|
+
expect(merged.click?.fbclid).toBeUndefined();
|
|
90
89
|
});
|
|
91
|
-
|
|
90
|
+
it('should handle empty traits correctly', () => {
|
|
92
91
|
const incomingTraits = {};
|
|
93
92
|
const cachedTraits = {
|
|
94
93
|
emails: ['cached@email.com'],
|
|
95
94
|
userIds: ['user1'],
|
|
96
95
|
};
|
|
97
96
|
const merged = (0, at_shared_utils_1.mergeIdentityTraits)(incomingTraits, cachedTraits);
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
expect(merged.emails).toEqual(['cached@email.com']);
|
|
98
|
+
expect(merged.userIds).toEqual(['user1']);
|
|
100
99
|
});
|
|
101
|
-
|
|
100
|
+
it('should handle undefined traits correctly', () => {
|
|
102
101
|
const merged1 = (0, at_shared_utils_1.mergeIdentityTraits)(undefined, { emails: ['test@email.com'] });
|
|
103
|
-
|
|
102
|
+
expect(merged1.emails).toEqual(['test@email.com']);
|
|
104
103
|
const merged2 = (0, at_shared_utils_1.mergeIdentityTraits)({ emails: ['test@email.com'] }, undefined);
|
|
105
|
-
|
|
104
|
+
expect(merged2.emails).toEqual(['test@email.com']);
|
|
106
105
|
const merged3 = (0, at_shared_utils_1.mergeIdentityTraits)(undefined, undefined);
|
|
107
|
-
|
|
106
|
+
expect(merged3).toEqual({});
|
|
108
107
|
});
|
|
109
|
-
|
|
108
|
+
it('should preserve version information', () => {
|
|
110
109
|
const incomingTraits = {
|
|
111
110
|
version: '3',
|
|
112
111
|
emails: ['new@email.com'],
|
|
@@ -116,10 +115,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
116
115
|
emails: ['old@email.com'],
|
|
117
116
|
};
|
|
118
117
|
const merged = (0, at_shared_utils_1.mergeIdentityTraits)(incomingTraits, cachedTraits);
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
expect(merged.version).toBe('3');
|
|
119
|
+
expect(merged.emails).toEqual(['new@email.com', 'old@email.com']);
|
|
121
120
|
});
|
|
122
|
-
|
|
121
|
+
it('should handle complex nested objects', () => {
|
|
123
122
|
const incomingTraits = {
|
|
124
123
|
click: {
|
|
125
124
|
googleClientInfos: [{ id: 'new1', clickId: 'click1', sessionId: 'session1' }],
|
|
@@ -131,13 +130,13 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
131
130
|
},
|
|
132
131
|
};
|
|
133
132
|
const merged = (0, at_shared_utils_1.mergeIdentityTraits)(incomingTraits, cachedTraits);
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
expect(merged.click?.googleClientInfos).toBeDefined();
|
|
134
|
+
expect(Array.isArray(merged.click?.googleClientInfos)).toBe(true);
|
|
135
|
+
expect(merged.click?.googleClientInfos).toEqual([{ id: 'cached1', clickId: 'click2', sessionId: 'session2' }]);
|
|
137
136
|
});
|
|
138
137
|
});
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
describe('Integration: Merging + Staleness Checking', () => {
|
|
139
|
+
it('should not be stale when merged identity matches cached identity', () => {
|
|
141
140
|
const cachedIdentity = {
|
|
142
141
|
identityId: 'test-id-123',
|
|
143
142
|
traits: {
|
|
@@ -164,10 +163,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
164
163
|
const mergedTraits = (0, at_shared_utils_1.mergeIdentityTraits)(incomingIdentity.traits, cachedIdentity.traits);
|
|
165
164
|
const mergedIdentity = { ...incomingIdentity, traits: mergedTraits };
|
|
166
165
|
const staleTracker = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, mergedIdentity);
|
|
167
|
-
|
|
168
|
-
|
|
166
|
+
expect(staleTracker.isCacheStale).toBe(false);
|
|
167
|
+
expect(mergedIdentity.traits?.emails).toEqual(['shared@email.com', 'cached@email.com']);
|
|
169
168
|
});
|
|
170
|
-
|
|
169
|
+
it('should be stale when merged identity has new traits', () => {
|
|
171
170
|
const cachedIdentity = {
|
|
172
171
|
identityId: 'test-id-123',
|
|
173
172
|
traits: {
|
|
@@ -185,17 +184,17 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
185
184
|
const mergedTraits = (0, at_shared_utils_1.mergeIdentityTraits)(incomingIdentity.traits, cachedIdentity.traits);
|
|
186
185
|
const mergedIdentity = { ...incomingIdentity, traits: mergedTraits };
|
|
187
186
|
const staleTracker = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, mergedIdentity);
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
expect(staleTracker.isCacheStale).toBe(true);
|
|
188
|
+
expect(staleTracker.isEmailsStale).toBe(true);
|
|
190
189
|
});
|
|
191
190
|
});
|
|
192
191
|
});
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
192
|
+
describe('Identity Cache Staleness Tests', () => {
|
|
193
|
+
afterEach(() => {
|
|
194
|
+
jest.resetModules();
|
|
196
195
|
});
|
|
197
|
-
|
|
198
|
-
|
|
196
|
+
describe('isIdentityCacheStale function', () => {
|
|
197
|
+
it('should detect identity ID changes', () => {
|
|
199
198
|
const cachedIdentity = {
|
|
200
199
|
identityId: 'old-id',
|
|
201
200
|
traits: { emails: ['test@email.com'] },
|
|
@@ -205,10 +204,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
205
204
|
traits: { emails: ['test@email.com'] },
|
|
206
205
|
};
|
|
207
206
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
208
|
-
|
|
209
|
-
|
|
207
|
+
expect(result.isCacheStale).toBe(true);
|
|
208
|
+
expect(result.isIdentityIdStale).toBe(true);
|
|
210
209
|
});
|
|
211
|
-
|
|
210
|
+
it('should detect new emails', () => {
|
|
212
211
|
const cachedIdentity = {
|
|
213
212
|
identityId: 'test-id',
|
|
214
213
|
traits: { emails: ['old@email.com'] },
|
|
@@ -218,10 +217,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
218
217
|
traits: { emails: ['old@email.com', 'new@email.com'] },
|
|
219
218
|
};
|
|
220
219
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
221
|
-
|
|
222
|
-
|
|
220
|
+
expect(result.isCacheStale).toBe(true);
|
|
221
|
+
expect(result.isEmailsStale).toBe(true);
|
|
223
222
|
});
|
|
224
|
-
|
|
223
|
+
it('should detect new user IDs', () => {
|
|
225
224
|
const cachedIdentity = {
|
|
226
225
|
identityId: 'test-id',
|
|
227
226
|
traits: { userIds: ['user1'] },
|
|
@@ -231,10 +230,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
231
230
|
traits: { userIds: ['user1', 'user2'] },
|
|
232
231
|
};
|
|
233
232
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
234
|
-
|
|
235
|
-
|
|
233
|
+
expect(result.isCacheStale).toBe(true);
|
|
234
|
+
expect(result.isUserIdsStale).toBe(true);
|
|
236
235
|
});
|
|
237
|
-
|
|
236
|
+
it('should detect new phones', () => {
|
|
238
237
|
const cachedIdentity = {
|
|
239
238
|
identityId: 'test-id',
|
|
240
239
|
traits: { phones: ['+1234567890'] },
|
|
@@ -244,10 +243,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
244
243
|
traits: { phones: ['+1234567890', '+9876543210'] },
|
|
245
244
|
};
|
|
246
245
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
247
|
-
|
|
248
|
-
|
|
246
|
+
expect(result.isCacheStale).toBe(true);
|
|
247
|
+
expect(result.isPhonesStale).toBe(true);
|
|
249
248
|
});
|
|
250
|
-
|
|
249
|
+
it('should detect new addresses (non-IP sourced)', () => {
|
|
251
250
|
const cachedIdentity = {
|
|
252
251
|
identityId: 'test-id',
|
|
253
252
|
traits: {
|
|
@@ -270,12 +269,12 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
270
269
|
},
|
|
271
270
|
};
|
|
272
271
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
272
|
+
expect(result.isCacheStale).toBe(true);
|
|
273
|
+
expect(result.isAddressesStale).toBe(true);
|
|
274
|
+
expect(result.isNonIpAddressesStale).toBe(true);
|
|
275
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
277
276
|
});
|
|
278
|
-
|
|
277
|
+
it('should detect IP address changes but NOT mark cache stale (volatile trait)', () => {
|
|
279
278
|
const cachedIdentity = {
|
|
280
279
|
identityId: 'test-id',
|
|
281
280
|
traits: { ipAddress: '192.168.1.1' },
|
|
@@ -285,11 +284,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
285
284
|
traits: { ipAddress: '10.0.0.1' },
|
|
286
285
|
};
|
|
287
286
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
287
|
+
expect(result.isCacheStale).toBe(false);
|
|
288
|
+
expect(result.isIpAddressStale).toBe(true);
|
|
289
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
291
290
|
});
|
|
292
|
-
|
|
291
|
+
it('should detect user agent changes but NOT mark cache stale (volatile trait)', () => {
|
|
293
292
|
const cachedIdentity = {
|
|
294
293
|
identityId: 'test-id',
|
|
295
294
|
traits: { userAgent: 'Mozilla/5.0 (old browser)' },
|
|
@@ -299,11 +298,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
299
298
|
traits: { userAgent: 'Mozilla/5.0 (new browser)' },
|
|
300
299
|
};
|
|
301
300
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
301
|
+
expect(result.isCacheStale).toBe(false);
|
|
302
|
+
expect(result.isUserAgentStale).toBe(true);
|
|
303
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
305
304
|
});
|
|
306
|
-
|
|
305
|
+
it('should not be stale when no new information is provided', () => {
|
|
307
306
|
const cachedIdentity = {
|
|
308
307
|
identityId: 'test-id',
|
|
309
308
|
traits: {
|
|
@@ -320,9 +319,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
320
319
|
},
|
|
321
320
|
};
|
|
322
321
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
323
|
-
|
|
322
|
+
expect(result.isCacheStale).toBe(false);
|
|
324
323
|
});
|
|
325
|
-
|
|
324
|
+
it('should handle empty traits gracefully', () => {
|
|
326
325
|
const cachedIdentity = {
|
|
327
326
|
identityId: 'test-id',
|
|
328
327
|
traits: {},
|
|
@@ -332,9 +331,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
332
331
|
traits: {},
|
|
333
332
|
};
|
|
334
333
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
335
|
-
|
|
334
|
+
expect(result.isCacheStale).toBe(false);
|
|
336
335
|
});
|
|
337
|
-
|
|
336
|
+
it('should handle undefined traits gracefully', () => {
|
|
338
337
|
const cachedIdentity = {
|
|
339
338
|
identityId: 'test-id',
|
|
340
339
|
};
|
|
@@ -342,9 +341,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
342
341
|
identityId: 'test-id',
|
|
343
342
|
};
|
|
344
343
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
345
|
-
|
|
344
|
+
expect(result.isCacheStale).toBe(false);
|
|
346
345
|
});
|
|
347
|
-
|
|
346
|
+
it('should detect multiple stale conditions (identity traits take priority over volatile)', () => {
|
|
348
347
|
const cachedIdentity = {
|
|
349
348
|
identityId: 'test-id',
|
|
350
349
|
traits: {
|
|
@@ -362,15 +361,15 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
362
361
|
},
|
|
363
362
|
};
|
|
364
363
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
364
|
+
expect(result.isCacheStale).toBe(true);
|
|
365
|
+
expect(result.isEmailsStale).toBe(true);
|
|
366
|
+
expect(result.isUserIdsStale).toBe(true);
|
|
367
|
+
expect(result.isIpAddressStale).toBe(true);
|
|
368
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
370
369
|
});
|
|
371
370
|
});
|
|
372
|
-
|
|
373
|
-
|
|
371
|
+
describe('isClickInfosStale function', () => {
|
|
372
|
+
it('should detect new FBC values', () => {
|
|
374
373
|
const cachedClick = {
|
|
375
374
|
fbc: 'fb.1.123.old_fbclid',
|
|
376
375
|
};
|
|
@@ -378,9 +377,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
378
377
|
fbc: 'fb.1.123.new_fbclid',
|
|
379
378
|
};
|
|
380
379
|
const result = (0, at_shared_utils_1.isClickInfosStale)(cachedClick, incomingClick);
|
|
381
|
-
|
|
380
|
+
expect(result).toBe(true);
|
|
382
381
|
});
|
|
383
|
-
|
|
382
|
+
it('should detect new click IDs', () => {
|
|
384
383
|
const cachedClick = {
|
|
385
384
|
gclid: 'old_gclid',
|
|
386
385
|
};
|
|
@@ -388,9 +387,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
388
387
|
gclid: 'new_gclid',
|
|
389
388
|
};
|
|
390
389
|
const result = (0, at_shared_utils_1.isClickInfosStale)(cachedClick, incomingClick);
|
|
391
|
-
|
|
390
|
+
expect(result).toBe(true);
|
|
392
391
|
});
|
|
393
|
-
|
|
392
|
+
it('should ignore collection timestamps', () => {
|
|
394
393
|
const cachedClick = {
|
|
395
394
|
fbp: 'fb.2.123.456',
|
|
396
395
|
fbpCollectedAt: '2023-01-01T00:00:00.000Z',
|
|
@@ -400,9 +399,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
400
399
|
fbpCollectedAt: '2024-01-01T00:00:00.000Z',
|
|
401
400
|
};
|
|
402
401
|
const result = (0, at_shared_utils_1.isClickInfosStale)(cachedClick, incomingClick);
|
|
403
|
-
|
|
402
|
+
expect(result).toBe(false);
|
|
404
403
|
});
|
|
405
|
-
|
|
404
|
+
it('should ignore googleClientInfos', () => {
|
|
406
405
|
const cachedClick = {
|
|
407
406
|
googleClientInfos: [{ id: 'old', clickId: 'old_click' }],
|
|
408
407
|
};
|
|
@@ -410,23 +409,23 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
410
409
|
googleClientInfos: [{ id: 'new', clickId: 'new_click' }],
|
|
411
410
|
};
|
|
412
411
|
const result = (0, at_shared_utils_1.isClickInfosStale)(cachedClick, incomingClick);
|
|
413
|
-
|
|
412
|
+
expect(result).toBe(false);
|
|
414
413
|
});
|
|
415
|
-
|
|
414
|
+
it('should handle empty click info', () => {
|
|
416
415
|
const result = (0, at_shared_utils_1.isClickInfosStale)({}, {});
|
|
417
|
-
|
|
416
|
+
expect(result).toBe(false);
|
|
418
417
|
});
|
|
419
|
-
|
|
418
|
+
it('should detect when incoming has new click info but cached is empty', () => {
|
|
420
419
|
const cachedClick = {};
|
|
421
420
|
const incomingClick = {
|
|
422
421
|
fbp: 'fb.2.123.456',
|
|
423
422
|
};
|
|
424
423
|
const result = (0, at_shared_utils_1.isClickInfosStale)(cachedClick, incomingClick);
|
|
425
|
-
|
|
424
|
+
expect(result).toBe(true);
|
|
426
425
|
});
|
|
427
426
|
});
|
|
428
|
-
|
|
429
|
-
|
|
427
|
+
describe('Edge Cases and Error Handling', () => {
|
|
428
|
+
it('should handle malformed FBC values gracefully', () => {
|
|
430
429
|
const cachedClick = {
|
|
431
430
|
fbc: 'malformed_fbc',
|
|
432
431
|
};
|
|
@@ -434,9 +433,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
434
433
|
fbc: 'also_malformed',
|
|
435
434
|
};
|
|
436
435
|
const result = (0, at_shared_utils_1.isClickInfosStale)(cachedClick, incomingClick);
|
|
437
|
-
|
|
436
|
+
expect(result).toBe(true);
|
|
438
437
|
});
|
|
439
|
-
|
|
438
|
+
it('should handle null/undefined arrays in traits', () => {
|
|
440
439
|
const cachedIdentity = {
|
|
441
440
|
identityId: 'test-id',
|
|
442
441
|
traits: {
|
|
@@ -452,11 +451,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
452
451
|
},
|
|
453
452
|
};
|
|
454
453
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
454
|
+
expect(result.isCacheStale).toBe(true);
|
|
455
|
+
expect(result.isEmailsStale).toBe(true);
|
|
456
|
+
expect(result.isUserIdsStale).toBe(true);
|
|
458
457
|
});
|
|
459
|
-
|
|
458
|
+
it('should handle arrays with null/undefined elements', () => {
|
|
460
459
|
const cachedIdentity = {
|
|
461
460
|
identityId: 'test-id',
|
|
462
461
|
traits: {
|
|
@@ -470,16 +469,16 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
470
469
|
},
|
|
471
470
|
};
|
|
472
471
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
473
|
-
|
|
474
|
-
|
|
472
|
+
expect(result.isCacheStale).toBe(true);
|
|
473
|
+
expect(result.isEmailsStale).toBe(true);
|
|
475
474
|
});
|
|
476
|
-
|
|
475
|
+
it('should handle error conditions gracefully', () => {
|
|
477
476
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(null, undefined);
|
|
478
|
-
|
|
477
|
+
expect(result.isCacheStale).toBe(false);
|
|
479
478
|
});
|
|
480
479
|
});
|
|
481
|
-
|
|
482
|
-
|
|
480
|
+
describe('Comprehensive Scenario Tests', () => {
|
|
481
|
+
it('should handle complex real-world scenario', () => {
|
|
483
482
|
const cachedIdentity = {
|
|
484
483
|
identityId: '01HXRZ27H4TXWBBTRK09Q7APDP',
|
|
485
484
|
traits: {
|
|
@@ -529,18 +528,18 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
529
528
|
const mergedTraits = (0, at_shared_utils_1.mergeIdentityTraits)(cachedIdentity.traits, incomingIdentity.traits);
|
|
530
529
|
const mergedIdentity = { ...incomingIdentity, traits: mergedTraits };
|
|
531
530
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, mergedIdentity);
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
531
|
+
expect(result.isCacheStale).toBe(true);
|
|
532
|
+
expect(result.isEmailsStale).toBe(true);
|
|
533
|
+
expect(result.isPhonesStale).toBe(true);
|
|
534
|
+
expect(result.isClickInfosStale).toBe(true);
|
|
535
|
+
expect(result.isAddressesStale).toBe(false);
|
|
536
|
+
expect(result.isIpAddressStale).toBe(false);
|
|
537
|
+
expect(mergedIdentity.traits?.emails).toEqual(['user@domain.com', 'user.secondary@domain.com']);
|
|
538
|
+
expect(mergedIdentity.traits?.phones).toEqual(['+1234567890']);
|
|
539
|
+
expect(mergedIdentity.traits?.userIds).toEqual(['shopify_123']);
|
|
540
|
+
expect(mergedIdentity.traits?.click?.gclid).toEqual('updated_gclid');
|
|
542
541
|
});
|
|
543
|
-
|
|
542
|
+
it('should properly detect click staleness when click info actually differs', () => {
|
|
544
543
|
const cachedIdentity = {
|
|
545
544
|
identityId: 'test-id',
|
|
546
545
|
traits: {
|
|
@@ -562,10 +561,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
562
561
|
const mergedTraits = (0, at_shared_utils_1.mergeIdentityTraits)(cachedIdentity.traits, incomingIdentity.traits);
|
|
563
562
|
const mergedIdentity = { ...incomingIdentity, traits: mergedTraits };
|
|
564
563
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, mergedIdentity);
|
|
565
|
-
|
|
566
|
-
|
|
564
|
+
expect(mergedTraits?.click?.gclid).toEqual('original_gclid');
|
|
565
|
+
expect(result.isCacheStale).toBe(false);
|
|
567
566
|
});
|
|
568
|
-
|
|
567
|
+
it('should handle scenario where cache is fresh', () => {
|
|
569
568
|
const cachedIdentity = {
|
|
570
569
|
identityId: 'test-id',
|
|
571
570
|
traits: {
|
|
@@ -586,19 +585,19 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
586
585
|
const mergedTraits = (0, at_shared_utils_1.mergeIdentityTraits)(cachedIdentity.traits, incomingIdentity.traits);
|
|
587
586
|
const mergedIdentity = { ...incomingIdentity, traits: mergedTraits };
|
|
588
587
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, mergedIdentity);
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
588
|
+
expect(result.isCacheStale).toBe(false);
|
|
589
|
+
expect(mergedIdentity.traits?.emails).toEqual(['user@domain.com', 'secondary@domain.com']);
|
|
590
|
+
expect(mergedIdentity.traits?.userIds).toEqual(['user1', 'user2']);
|
|
591
|
+
expect(mergedIdentity.traits?.phones).toEqual(['+1234567890']);
|
|
593
592
|
});
|
|
594
593
|
});
|
|
595
594
|
});
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
595
|
+
describe('Three-Tier Staleness Model Tests', () => {
|
|
596
|
+
afterEach(() => {
|
|
597
|
+
jest.resetModules();
|
|
599
598
|
});
|
|
600
|
-
|
|
601
|
-
|
|
599
|
+
describe('TIER 1: VOLATILE_ONLY (no action needed)', () => {
|
|
600
|
+
it('should return VOLATILE_ONLY tier when only ipAddress is stale', () => {
|
|
602
601
|
const cachedIdentity = {
|
|
603
602
|
identityId: 'test-id',
|
|
604
603
|
traits: {
|
|
@@ -614,11 +613,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
614
613
|
},
|
|
615
614
|
};
|
|
616
615
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
616
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
617
|
+
expect(result.isCacheStale).toBe(false);
|
|
618
|
+
expect(result.isIpAddressStale).toBe(true);
|
|
620
619
|
});
|
|
621
|
-
|
|
620
|
+
it('should return VOLATILE_ONLY tier when only userAgent is stale', () => {
|
|
622
621
|
const cachedIdentity = {
|
|
623
622
|
identityId: 'test-id',
|
|
624
623
|
traits: {
|
|
@@ -634,16 +633,18 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
634
633
|
},
|
|
635
634
|
};
|
|
636
635
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
636
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
637
|
+
expect(result.isCacheStale).toBe(false);
|
|
638
|
+
expect(result.isUserAgentStale).toBe(true);
|
|
640
639
|
});
|
|
641
|
-
|
|
640
|
+
it('should return VOLATILE_ONLY tier when only IP-sourced addresses are stale', () => {
|
|
642
641
|
const cachedIdentity = {
|
|
643
642
|
identityId: 'test-id',
|
|
644
643
|
traits: {
|
|
645
644
|
emails: ['test@email.com'],
|
|
646
|
-
addresses: [
|
|
645
|
+
addresses: [
|
|
646
|
+
{ city: 'New York', country: 'USA', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.IP_ADDRESS },
|
|
647
|
+
],
|
|
647
648
|
},
|
|
648
649
|
};
|
|
649
650
|
const incomingIdentity = {
|
|
@@ -656,19 +657,21 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
656
657
|
},
|
|
657
658
|
};
|
|
658
659
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
660
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
661
|
+
expect(result.isCacheStale).toBe(false);
|
|
662
|
+
expect(result.isIpAddressesStale).toBe(true);
|
|
663
|
+
expect(result.isNonIpAddressesStale).toBe(false);
|
|
663
664
|
});
|
|
664
|
-
|
|
665
|
+
it('should return VOLATILE_ONLY tier when multiple volatile traits are stale', () => {
|
|
665
666
|
const cachedIdentity = {
|
|
666
667
|
identityId: 'test-id',
|
|
667
668
|
traits: {
|
|
668
669
|
emails: ['test@email.com'],
|
|
669
670
|
ipAddress: '192.168.1.1',
|
|
670
671
|
userAgent: 'Mozilla/5.0 (old)',
|
|
671
|
-
addresses: [
|
|
672
|
+
addresses: [
|
|
673
|
+
{ city: 'New York', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.IP_ADDRESS },
|
|
674
|
+
],
|
|
672
675
|
},
|
|
673
676
|
};
|
|
674
677
|
const incomingIdentity = {
|
|
@@ -677,19 +680,21 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
677
680
|
emails: ['test@email.com'],
|
|
678
681
|
ipAddress: '10.0.0.1',
|
|
679
682
|
userAgent: 'Mozilla/5.0 (new)',
|
|
680
|
-
addresses: [
|
|
683
|
+
addresses: [
|
|
684
|
+
{ city: 'Chicago', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.IP_ADDRESS },
|
|
685
|
+
],
|
|
681
686
|
},
|
|
682
687
|
};
|
|
683
688
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
690
|
+
expect(result.isCacheStale).toBe(false);
|
|
691
|
+
expect(result.isIpAddressStale).toBe(true);
|
|
692
|
+
expect(result.isUserAgentStale).toBe(true);
|
|
693
|
+
expect(result.isIpAddressesStale).toBe(true);
|
|
689
694
|
});
|
|
690
695
|
});
|
|
691
|
-
|
|
692
|
-
|
|
696
|
+
describe('TIER 2: ADDRESS_UPDATE (cache write only, skip Neptune)', () => {
|
|
697
|
+
it('should return ADDRESS_UPDATE tier when non-IP address is new', () => {
|
|
693
698
|
const cachedIdentity = {
|
|
694
699
|
identityId: 'test-id',
|
|
695
700
|
traits: {
|
|
@@ -701,20 +706,24 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
701
706
|
identityId: 'test-id',
|
|
702
707
|
traits: {
|
|
703
708
|
emails: ['test@email.com'],
|
|
704
|
-
addresses: [
|
|
709
|
+
addresses: [
|
|
710
|
+
{ city: 'Boston', province: 'MA', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.INPUT },
|
|
711
|
+
],
|
|
705
712
|
},
|
|
706
713
|
};
|
|
707
714
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
715
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
716
|
+
expect(result.isCacheStale).toBe(true);
|
|
717
|
+
expect(result.isNonIpAddressesStale).toBe(true);
|
|
711
718
|
});
|
|
712
|
-
|
|
719
|
+
it('should return ADDRESS_UPDATE tier when new input address added', () => {
|
|
713
720
|
const cachedIdentity = {
|
|
714
721
|
identityId: 'test-id',
|
|
715
722
|
traits: {
|
|
716
723
|
emails: ['test@email.com'],
|
|
717
|
-
addresses: [
|
|
724
|
+
addresses: [
|
|
725
|
+
{ city: 'New York', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.INPUT },
|
|
726
|
+
],
|
|
718
727
|
},
|
|
719
728
|
};
|
|
720
729
|
const incomingIdentity = {
|
|
@@ -728,11 +737,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
728
737
|
},
|
|
729
738
|
};
|
|
730
739
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
740
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
741
|
+
expect(result.isCacheStale).toBe(true);
|
|
742
|
+
expect(result.isNonIpAddressesStale).toBe(true);
|
|
734
743
|
});
|
|
735
|
-
|
|
744
|
+
it('should return ADDRESS_UPDATE tier even when volatile traits are also stale', () => {
|
|
736
745
|
const cachedIdentity = {
|
|
737
746
|
identityId: 'test-id',
|
|
738
747
|
traits: {
|
|
@@ -752,14 +761,14 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
752
761
|
},
|
|
753
762
|
};
|
|
754
763
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
764
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
765
|
+
expect(result.isCacheStale).toBe(true);
|
|
766
|
+
expect(result.isIpAddressStale).toBe(true);
|
|
767
|
+
expect(result.isNonIpAddressesStale).toBe(true);
|
|
759
768
|
});
|
|
760
769
|
});
|
|
761
|
-
|
|
762
|
-
|
|
770
|
+
describe('TIER 3: IDENTITY_STALE (full Neptune resolution)', () => {
|
|
771
|
+
it('should return IDENTITY_STALE tier when email is new', () => {
|
|
763
772
|
const cachedIdentity = {
|
|
764
773
|
identityId: 'test-id',
|
|
765
774
|
traits: {
|
|
@@ -773,11 +782,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
773
782
|
},
|
|
774
783
|
};
|
|
775
784
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
785
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
786
|
+
expect(result.isCacheStale).toBe(true);
|
|
787
|
+
expect(result.isEmailsStale).toBe(true);
|
|
779
788
|
});
|
|
780
|
-
|
|
789
|
+
it('should return IDENTITY_STALE tier when identityId changes', () => {
|
|
781
790
|
const cachedIdentity = {
|
|
782
791
|
identityId: 'old-id',
|
|
783
792
|
traits: { emails: ['test@email.com'] },
|
|
@@ -787,11 +796,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
787
796
|
traits: { emails: ['test@email.com'] },
|
|
788
797
|
};
|
|
789
798
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
799
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
800
|
+
expect(result.isCacheStale).toBe(true);
|
|
801
|
+
expect(result.isIdentityIdStale).toBe(true);
|
|
793
802
|
});
|
|
794
|
-
|
|
803
|
+
it('should return IDENTITY_STALE tier when phone is new', () => {
|
|
795
804
|
const cachedIdentity = {
|
|
796
805
|
identityId: 'test-id',
|
|
797
806
|
traits: { phones: ['+1234567890'] },
|
|
@@ -801,11 +810,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
801
810
|
traits: { phones: ['+1234567890', '+9876543210'] },
|
|
802
811
|
};
|
|
803
812
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
813
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
814
|
+
expect(result.isCacheStale).toBe(true);
|
|
815
|
+
expect(result.isPhonesStale).toBe(true);
|
|
807
816
|
});
|
|
808
|
-
|
|
817
|
+
it('should return IDENTITY_STALE tier when click info changes', () => {
|
|
809
818
|
const cachedIdentity = {
|
|
810
819
|
identityId: 'test-id',
|
|
811
820
|
traits: {
|
|
@@ -819,11 +828,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
819
828
|
},
|
|
820
829
|
};
|
|
821
830
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
831
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
832
|
+
expect(result.isCacheStale).toBe(true);
|
|
833
|
+
expect(result.isClickInfosStale).toBe(true);
|
|
825
834
|
});
|
|
826
|
-
|
|
835
|
+
it('should return IDENTITY_STALE tier when identity trait is stale even with ADDRESS_UPDATE', () => {
|
|
827
836
|
const cachedIdentity = {
|
|
828
837
|
identityId: 'test-id',
|
|
829
838
|
traits: {
|
|
@@ -841,12 +850,12 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
841
850
|
},
|
|
842
851
|
};
|
|
843
852
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
853
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
854
|
+
expect(result.isCacheStale).toBe(true);
|
|
855
|
+
expect(result.isEmailsStale).toBe(true);
|
|
856
|
+
expect(result.isNonIpAddressesStale).toBe(true);
|
|
848
857
|
});
|
|
849
|
-
|
|
858
|
+
it('should return IDENTITY_STALE tier when identity trait is stale even with VOLATILE_ONLY', () => {
|
|
850
859
|
const cachedIdentity = {
|
|
851
860
|
identityId: 'test-id',
|
|
852
861
|
traits: {
|
|
@@ -862,14 +871,14 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
862
871
|
},
|
|
863
872
|
};
|
|
864
873
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
874
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
875
|
+
expect(result.isCacheStale).toBe(true);
|
|
876
|
+
expect(result.isEmailsStale).toBe(true);
|
|
877
|
+
expect(result.isIpAddressStale).toBe(true);
|
|
869
878
|
});
|
|
870
879
|
});
|
|
871
|
-
|
|
872
|
-
|
|
880
|
+
describe('TIER NONE: No staleness', () => {
|
|
881
|
+
it('should return NONE tier when nothing is stale', () => {
|
|
873
882
|
const cachedIdentity = {
|
|
874
883
|
identityId: 'test-id',
|
|
875
884
|
traits: {
|
|
@@ -887,10 +896,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
887
896
|
},
|
|
888
897
|
};
|
|
889
898
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
890
|
-
|
|
891
|
-
|
|
899
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
900
|
+
expect(result.isCacheStale).toBe(false);
|
|
892
901
|
});
|
|
893
|
-
|
|
902
|
+
it('should return NONE tier when incoming is subset of cached', () => {
|
|
894
903
|
const cachedIdentity = {
|
|
895
904
|
identityId: 'test-id',
|
|
896
905
|
traits: {
|
|
@@ -905,16 +914,18 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
905
914
|
},
|
|
906
915
|
};
|
|
907
916
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
908
|
-
|
|
909
|
-
|
|
917
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
918
|
+
expect(result.isCacheStale).toBe(false);
|
|
910
919
|
});
|
|
911
920
|
});
|
|
912
|
-
|
|
913
|
-
|
|
921
|
+
describe('Address source filtering', () => {
|
|
922
|
+
it('should correctly identify IP-sourced addresses', () => {
|
|
914
923
|
const cachedIdentity = {
|
|
915
924
|
identityId: 'test-id',
|
|
916
925
|
traits: {
|
|
917
|
-
addresses: [
|
|
926
|
+
addresses: [
|
|
927
|
+
{ city: 'CachedCity', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.IP_ADDRESS },
|
|
928
|
+
],
|
|
918
929
|
},
|
|
919
930
|
};
|
|
920
931
|
const incomingIdentity = {
|
|
@@ -926,15 +937,17 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
926
937
|
},
|
|
927
938
|
};
|
|
928
939
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
940
|
+
expect(result.isIpAddressesStale).toBe(true);
|
|
941
|
+
expect(result.isNonIpAddressesStale).toBe(false);
|
|
942
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
932
943
|
});
|
|
933
|
-
|
|
944
|
+
it('should correctly identify INPUT-sourced addresses', () => {
|
|
934
945
|
const cachedIdentity = {
|
|
935
946
|
identityId: 'test-id',
|
|
936
947
|
traits: {
|
|
937
|
-
addresses: [
|
|
948
|
+
addresses: [
|
|
949
|
+
{ city: 'CachedCity', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.INPUT },
|
|
950
|
+
],
|
|
938
951
|
},
|
|
939
952
|
};
|
|
940
953
|
const incomingIdentity = {
|
|
@@ -947,11 +960,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
947
960
|
},
|
|
948
961
|
};
|
|
949
962
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
963
|
+
expect(result.isIpAddressesStale).toBe(false);
|
|
964
|
+
expect(result.isNonIpAddressesStale).toBe(true);
|
|
965
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
953
966
|
});
|
|
954
|
-
|
|
967
|
+
it('should handle mixed address sources correctly', () => {
|
|
955
968
|
const cachedIdentity = {
|
|
956
969
|
identityId: 'test-id',
|
|
957
970
|
traits: {
|
|
@@ -972,12 +985,12 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
972
985
|
},
|
|
973
986
|
};
|
|
974
987
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
988
|
+
expect(result.isIpAddressesStale).toBe(true);
|
|
989
|
+
expect(result.isNonIpAddressesStale).toBe(true);
|
|
990
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
991
|
+
expect(result.isCacheStale).toBe(true);
|
|
979
992
|
});
|
|
980
|
-
|
|
993
|
+
it('should handle addresses without source field (default to IP based on PII)', () => {
|
|
981
994
|
const cachedIdentity = {
|
|
982
995
|
identityId: 'test-id',
|
|
983
996
|
traits: {
|
|
@@ -993,12 +1006,12 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
993
1006
|
},
|
|
994
1007
|
};
|
|
995
1008
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1009
|
+
expect(result.isIpAddressesStale).toBe(true);
|
|
1010
|
+
expect(result.isNonIpAddressesStale).toBe(false);
|
|
1011
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
1012
|
+
expect(result.isCacheStale).toBe(false);
|
|
1000
1013
|
});
|
|
1001
|
-
|
|
1014
|
+
it('should treat addresses without source but with PII as non-IP', () => {
|
|
1002
1015
|
const cachedIdentity = {
|
|
1003
1016
|
identityId: 'test-id',
|
|
1004
1017
|
traits: {
|
|
@@ -1014,34 +1027,38 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1014
1027
|
},
|
|
1015
1028
|
};
|
|
1016
1029
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1030
|
+
expect(result.isNonIpAddressesStale).toBe(true);
|
|
1031
|
+
expect(result.isIpAddressesStale).toBe(false);
|
|
1032
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
1033
|
+
expect(result.isCacheStale).toBe(true);
|
|
1021
1034
|
});
|
|
1022
1035
|
});
|
|
1023
|
-
|
|
1024
|
-
|
|
1036
|
+
describe('Backward compatibility', () => {
|
|
1037
|
+
it('should maintain isAddressesStale for any address change', () => {
|
|
1025
1038
|
const cachedIdentity = {
|
|
1026
1039
|
identityId: 'test-id',
|
|
1027
1040
|
traits: {
|
|
1028
|
-
addresses: [
|
|
1041
|
+
addresses: [
|
|
1042
|
+
{ city: 'OldCity', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.IP_ADDRESS },
|
|
1043
|
+
],
|
|
1029
1044
|
},
|
|
1030
1045
|
};
|
|
1031
1046
|
const incomingIdentity = {
|
|
1032
1047
|
identityId: 'test-id',
|
|
1033
1048
|
traits: {
|
|
1034
|
-
addresses: [
|
|
1049
|
+
addresses: [
|
|
1050
|
+
{ city: 'NewCity', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.IP_ADDRESS },
|
|
1051
|
+
],
|
|
1035
1052
|
},
|
|
1036
1053
|
};
|
|
1037
1054
|
const result = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
1038
|
-
|
|
1039
|
-
|
|
1055
|
+
expect(result.isAddressesStale).toBe(true);
|
|
1056
|
+
expect(result.isCacheStale).toBe(false);
|
|
1040
1057
|
});
|
|
1041
1058
|
});
|
|
1042
1059
|
});
|
|
1043
|
-
|
|
1044
|
-
|
|
1060
|
+
describe('extractStaleTraitNames function', () => {
|
|
1061
|
+
it('should return empty array when nothing is stale', () => {
|
|
1045
1062
|
const cachedIdentity = {
|
|
1046
1063
|
identityId: 'test-id',
|
|
1047
1064
|
traits: { emails: ['test@email.com'] },
|
|
@@ -1052,9 +1069,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1052
1069
|
};
|
|
1053
1070
|
const tracker = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
1054
1071
|
const staleTraits = (0, at_shared_utils_1.extractStaleTraitNames)(tracker);
|
|
1055
|
-
|
|
1072
|
+
expect(staleTraits).toEqual([]);
|
|
1056
1073
|
});
|
|
1057
|
-
|
|
1074
|
+
it('should return identity-defining trait names when stale', () => {
|
|
1058
1075
|
const cachedIdentity = {
|
|
1059
1076
|
identityId: 'test-id',
|
|
1060
1077
|
traits: { emails: ['old@email.com'] },
|
|
@@ -1065,9 +1082,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1065
1082
|
};
|
|
1066
1083
|
const tracker = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
1067
1084
|
const staleTraits = (0, at_shared_utils_1.extractStaleTraitNames)(tracker);
|
|
1068
|
-
|
|
1085
|
+
expect(staleTraits).toContain('emails');
|
|
1069
1086
|
});
|
|
1070
|
-
|
|
1087
|
+
it('should return multiple stale trait names', () => {
|
|
1071
1088
|
const cachedIdentity = {
|
|
1072
1089
|
identityId: 'test-id',
|
|
1073
1090
|
traits: {
|
|
@@ -1084,10 +1101,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1084
1101
|
};
|
|
1085
1102
|
const tracker = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
1086
1103
|
const staleTraits = (0, at_shared_utils_1.extractStaleTraitNames)(tracker);
|
|
1087
|
-
|
|
1088
|
-
|
|
1104
|
+
expect(staleTraits).toContain('emails');
|
|
1105
|
+
expect(staleTraits).toContain('phones');
|
|
1089
1106
|
});
|
|
1090
|
-
|
|
1107
|
+
it('should return volatile trait names when stale', () => {
|
|
1091
1108
|
const cachedIdentity = {
|
|
1092
1109
|
identityId: 'test-id',
|
|
1093
1110
|
traits: {
|
|
@@ -1104,13 +1121,13 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1104
1121
|
};
|
|
1105
1122
|
const tracker = (0, at_shared_utils_1.isIdentityCacheStale)(cachedIdentity, incomingIdentity);
|
|
1106
1123
|
const staleTraits = (0, at_shared_utils_1.extractStaleTraitNames)(tracker);
|
|
1107
|
-
|
|
1108
|
-
|
|
1124
|
+
expect(staleTraits).toContain('ipAddress');
|
|
1125
|
+
expect(staleTraits).toContain('userAgent');
|
|
1109
1126
|
});
|
|
1110
1127
|
});
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1128
|
+
describe('mergeAndComputeIdentityStaleness function', () => {
|
|
1129
|
+
describe('NONE tier - cache is fresh', () => {
|
|
1130
|
+
it('should return NONE tier when incoming is subset of cached', () => {
|
|
1114
1131
|
const incomingIdentity = {
|
|
1115
1132
|
identityId: 'test-id',
|
|
1116
1133
|
traits: { emails: ['shared@email.com'] },
|
|
@@ -1123,13 +1140,13 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1123
1140
|
},
|
|
1124
1141
|
};
|
|
1125
1142
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1143
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
1144
|
+
expect(result.isCacheStale).toBe(false);
|
|
1145
|
+
expect(result.staleTraits).toEqual([]);
|
|
1146
|
+
expect(result.mergedIdentity.traits?.emails).toEqual(['shared@email.com', 'other@email.com']);
|
|
1147
|
+
expect(result.mergedIdentity.traits?.phones).toEqual(['+1234567890']);
|
|
1131
1148
|
});
|
|
1132
|
-
|
|
1149
|
+
it('should return NONE tier when identities are identical', () => {
|
|
1133
1150
|
const incomingIdentity = {
|
|
1134
1151
|
identityId: 'test-id',
|
|
1135
1152
|
traits: {
|
|
@@ -1145,11 +1162,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1145
1162
|
},
|
|
1146
1163
|
};
|
|
1147
1164
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1165
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
1166
|
+
expect(result.isCacheStale).toBe(false);
|
|
1167
|
+
expect(result.staleTraits).toEqual([]);
|
|
1151
1168
|
});
|
|
1152
|
-
|
|
1169
|
+
it('should return NONE tier with identical click info', () => {
|
|
1153
1170
|
const incomingIdentity = {
|
|
1154
1171
|
identityId: 'test-id',
|
|
1155
1172
|
traits: {
|
|
@@ -1165,12 +1182,12 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1165
1182
|
},
|
|
1166
1183
|
};
|
|
1167
1184
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1168
|
-
|
|
1169
|
-
|
|
1185
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
1186
|
+
expect(result.isCacheStale).toBe(false);
|
|
1170
1187
|
});
|
|
1171
1188
|
});
|
|
1172
|
-
|
|
1173
|
-
|
|
1189
|
+
describe('VOLATILE_ONLY tier - treat as cache hit', () => {
|
|
1190
|
+
it('should return VOLATILE_ONLY tier when only ipAddress is new', () => {
|
|
1174
1191
|
const incomingIdentity = {
|
|
1175
1192
|
identityId: 'test-id',
|
|
1176
1193
|
traits: {
|
|
@@ -1185,11 +1202,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1185
1202
|
},
|
|
1186
1203
|
};
|
|
1187
1204
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1205
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
1206
|
+
expect(result.isCacheStale).toBe(false);
|
|
1207
|
+
expect(result.staleTraits).toContain('ipAddress');
|
|
1191
1208
|
});
|
|
1192
|
-
|
|
1209
|
+
it('should return VOLATILE_ONLY tier when only userAgent is new', () => {
|
|
1193
1210
|
const incomingIdentity = {
|
|
1194
1211
|
identityId: 'test-id',
|
|
1195
1212
|
traits: {
|
|
@@ -1204,11 +1221,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1204
1221
|
},
|
|
1205
1222
|
};
|
|
1206
1223
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1224
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
1225
|
+
expect(result.isCacheStale).toBe(false);
|
|
1226
|
+
expect(result.staleTraits).toContain('userAgent');
|
|
1210
1227
|
});
|
|
1211
|
-
|
|
1228
|
+
it('should return VOLATILE_ONLY tier when only IP-sourced address is new', () => {
|
|
1212
1229
|
const incomingIdentity = {
|
|
1213
1230
|
identityId: 'test-id',
|
|
1214
1231
|
traits: {
|
|
@@ -1224,12 +1241,12 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1224
1241
|
},
|
|
1225
1242
|
};
|
|
1226
1243
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1227
|
-
|
|
1228
|
-
|
|
1244
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
1245
|
+
expect(result.isCacheStale).toBe(false);
|
|
1229
1246
|
});
|
|
1230
1247
|
});
|
|
1231
|
-
|
|
1232
|
-
|
|
1248
|
+
describe('ADDRESS_UPDATE tier - cache write only, skip Neptune', () => {
|
|
1249
|
+
it('should return ADDRESS_UPDATE tier when non-IP address is new', () => {
|
|
1233
1250
|
const incomingIdentity = {
|
|
1234
1251
|
identityId: 'test-id',
|
|
1235
1252
|
traits: {
|
|
@@ -1245,11 +1262,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1245
1262
|
},
|
|
1246
1263
|
};
|
|
1247
1264
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1265
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
1266
|
+
expect(result.isCacheStale).toBe(true);
|
|
1267
|
+
expect(result.staleTraits).toContain('addresses');
|
|
1251
1268
|
});
|
|
1252
|
-
|
|
1269
|
+
it('should return ADDRESS_UPDATE even with volatile traits stale', () => {
|
|
1253
1270
|
const incomingIdentity = {
|
|
1254
1271
|
identityId: 'test-id',
|
|
1255
1272
|
traits: {
|
|
@@ -1267,12 +1284,12 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1267
1284
|
},
|
|
1268
1285
|
};
|
|
1269
1286
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1270
|
-
|
|
1271
|
-
|
|
1287
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
1288
|
+
expect(result.isCacheStale).toBe(true);
|
|
1272
1289
|
});
|
|
1273
1290
|
});
|
|
1274
|
-
|
|
1275
|
-
|
|
1291
|
+
describe('IDENTITY_STALE tier - full Neptune resolution', () => {
|
|
1292
|
+
it('should return IDENTITY_STALE tier when email is new', () => {
|
|
1276
1293
|
const incomingIdentity = {
|
|
1277
1294
|
identityId: 'test-id',
|
|
1278
1295
|
traits: { emails: ['old@email.com', 'new@email.com'] },
|
|
@@ -1282,11 +1299,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1282
1299
|
traits: { emails: ['old@email.com'] },
|
|
1283
1300
|
};
|
|
1284
1301
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1302
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1303
|
+
expect(result.isCacheStale).toBe(true);
|
|
1304
|
+
expect(result.staleTraits).toContain('emails');
|
|
1288
1305
|
});
|
|
1289
|
-
|
|
1306
|
+
it('should return IDENTITY_STALE tier when phone is new', () => {
|
|
1290
1307
|
const incomingIdentity = {
|
|
1291
1308
|
identityId: 'test-id',
|
|
1292
1309
|
traits: { phones: ['+1234567890', '+9876543210'] },
|
|
@@ -1296,11 +1313,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1296
1313
|
traits: { phones: ['+1234567890'] },
|
|
1297
1314
|
};
|
|
1298
1315
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1316
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1317
|
+
expect(result.isCacheStale).toBe(true);
|
|
1318
|
+
expect(result.staleTraits).toContain('phones');
|
|
1302
1319
|
});
|
|
1303
|
-
|
|
1320
|
+
it('should return IDENTITY_STALE tier when identityId changes', () => {
|
|
1304
1321
|
const incomingIdentity = {
|
|
1305
1322
|
identityId: 'new-id',
|
|
1306
1323
|
traits: { emails: ['test@email.com'] },
|
|
@@ -1310,11 +1327,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1310
1327
|
traits: { emails: ['test@email.com'] },
|
|
1311
1328
|
};
|
|
1312
1329
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1330
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1331
|
+
expect(result.isCacheStale).toBe(true);
|
|
1332
|
+
expect(result.staleTraits).toContain('identityId');
|
|
1316
1333
|
});
|
|
1317
|
-
|
|
1334
|
+
it('should return IDENTITY_STALE tier when click info is new', () => {
|
|
1318
1335
|
const incomingIdentity = {
|
|
1319
1336
|
identityId: 'test-id',
|
|
1320
1337
|
traits: { click: { gclid: 'new_gclid' } },
|
|
@@ -1324,11 +1341,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1324
1341
|
traits: {},
|
|
1325
1342
|
};
|
|
1326
1343
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1344
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1345
|
+
expect(result.isCacheStale).toBe(true);
|
|
1346
|
+
expect(result.staleTraits).toContain('clickInfos');
|
|
1330
1347
|
});
|
|
1331
|
-
|
|
1348
|
+
it('should return IDENTITY_STALE even with ADDRESS_UPDATE also present', () => {
|
|
1332
1349
|
const incomingIdentity = {
|
|
1333
1350
|
identityId: 'test-id',
|
|
1334
1351
|
traits: {
|
|
@@ -1344,14 +1361,14 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1344
1361
|
},
|
|
1345
1362
|
};
|
|
1346
1363
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1364
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1365
|
+
expect(result.isCacheStale).toBe(true);
|
|
1366
|
+
expect(result.staleTraits).toContain('emails');
|
|
1367
|
+
expect(result.staleTraits).toContain('addresses');
|
|
1351
1368
|
});
|
|
1352
1369
|
});
|
|
1353
|
-
|
|
1354
|
-
|
|
1370
|
+
describe('Merged identity structure', () => {
|
|
1371
|
+
it('should preserve incoming identityId in merged identity', () => {
|
|
1355
1372
|
const incomingIdentity = {
|
|
1356
1373
|
identityId: 'incoming-id',
|
|
1357
1374
|
traits: { emails: ['test@email.com'] },
|
|
@@ -1361,9 +1378,9 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1361
1378
|
traits: { phones: ['+1234567890'] },
|
|
1362
1379
|
};
|
|
1363
1380
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1364
|
-
|
|
1381
|
+
expect(result.mergedIdentity.identityId).toBe('incoming-id');
|
|
1365
1382
|
});
|
|
1366
|
-
|
|
1383
|
+
it('should merge traits from both incoming and cached', () => {
|
|
1367
1384
|
const incomingIdentity = {
|
|
1368
1385
|
identityId: 'test-id',
|
|
1369
1386
|
traits: {
|
|
@@ -1379,14 +1396,14 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1379
1396
|
},
|
|
1380
1397
|
};
|
|
1381
1398
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1399
|
+
expect(result.mergedIdentity.traits?.emails).toContain('incoming@email.com');
|
|
1400
|
+
expect(result.mergedIdentity.traits?.emails).toContain('cached@email.com');
|
|
1401
|
+
expect(result.mergedIdentity.traits?.userIds).toEqual(['user1']);
|
|
1402
|
+
expect(result.mergedIdentity.traits?.phones).toEqual(['+1234567890']);
|
|
1386
1403
|
});
|
|
1387
1404
|
});
|
|
1388
|
-
|
|
1389
|
-
|
|
1405
|
+
describe('staleTracker output', () => {
|
|
1406
|
+
it('should include full staleTracker with all flags', () => {
|
|
1390
1407
|
const incomingIdentity = {
|
|
1391
1408
|
identityId: 'test-id',
|
|
1392
1409
|
traits: {
|
|
@@ -1401,14 +1418,14 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1401
1418
|
},
|
|
1402
1419
|
};
|
|
1403
1420
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1421
|
+
expect(result.staleTracker).toBeDefined();
|
|
1422
|
+
expect(result.staleTracker.isEmailsStale).toBe(true);
|
|
1423
|
+
expect(result.staleTracker.isIpAddressStale).toBe(true);
|
|
1424
|
+
expect(result.staleTracker.isPhonesStale).toBe(false);
|
|
1408
1425
|
});
|
|
1409
1426
|
});
|
|
1410
|
-
|
|
1411
|
-
|
|
1427
|
+
describe('Edge cases - empty traits', () => {
|
|
1428
|
+
it('should handle empty traits on incoming identity', () => {
|
|
1412
1429
|
const incomingIdentity = {
|
|
1413
1430
|
identityId: 'test-id',
|
|
1414
1431
|
traits: {},
|
|
@@ -1422,14 +1439,14 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1422
1439
|
},
|
|
1423
1440
|
};
|
|
1424
1441
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1442
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
1443
|
+
expect(result.isCacheStale).toBe(false);
|
|
1444
|
+
expect(result.staleTraits).toEqual([]);
|
|
1445
|
+
expect(result.mergedIdentity.traits?.emails).toEqual(['cached@email.com']);
|
|
1446
|
+
expect(result.mergedIdentity.traits?.phones).toEqual(['+1234567890']);
|
|
1447
|
+
expect(result.mergedIdentity.traits?.userIds).toEqual(['user1']);
|
|
1431
1448
|
});
|
|
1432
|
-
|
|
1449
|
+
it('should handle empty traits on cached identity', () => {
|
|
1433
1450
|
const incomingIdentity = {
|
|
1434
1451
|
identityId: 'test-id',
|
|
1435
1452
|
traits: {
|
|
@@ -1442,14 +1459,14 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1442
1459
|
traits: {},
|
|
1443
1460
|
};
|
|
1444
1461
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1462
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1463
|
+
expect(result.isCacheStale).toBe(true);
|
|
1464
|
+
expect(result.staleTraits).toContain('emails');
|
|
1465
|
+
expect(result.staleTraits).toContain('phones');
|
|
1466
|
+
expect(result.mergedIdentity.traits?.emails).toEqual(['new@email.com']);
|
|
1467
|
+
expect(result.mergedIdentity.traits?.phones).toEqual(['+1234567890']);
|
|
1451
1468
|
});
|
|
1452
|
-
|
|
1469
|
+
it('should handle both identities with empty traits', () => {
|
|
1453
1470
|
const incomingIdentity = {
|
|
1454
1471
|
identityId: 'test-id',
|
|
1455
1472
|
traits: {},
|
|
@@ -1459,13 +1476,13 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1459
1476
|
traits: {},
|
|
1460
1477
|
};
|
|
1461
1478
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1479
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
1480
|
+
expect(result.isCacheStale).toBe(false);
|
|
1481
|
+
expect(result.staleTraits).toEqual([]);
|
|
1465
1482
|
});
|
|
1466
1483
|
});
|
|
1467
|
-
|
|
1468
|
-
|
|
1484
|
+
describe('Edge cases - null/undefined handling', () => {
|
|
1485
|
+
it('should handle undefined traits on incoming identity', () => {
|
|
1469
1486
|
const incomingIdentity = {
|
|
1470
1487
|
identityId: 'test-id',
|
|
1471
1488
|
};
|
|
@@ -1476,10 +1493,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1476
1493
|
},
|
|
1477
1494
|
};
|
|
1478
1495
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1479
|
-
|
|
1480
|
-
|
|
1496
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
1497
|
+
expect(result.isCacheStale).toBe(false);
|
|
1481
1498
|
});
|
|
1482
|
-
|
|
1499
|
+
it('should handle undefined traits on cached identity', () => {
|
|
1483
1500
|
const incomingIdentity = {
|
|
1484
1501
|
identityId: 'test-id',
|
|
1485
1502
|
traits: {
|
|
@@ -1490,11 +1507,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1490
1507
|
identityId: 'test-id',
|
|
1491
1508
|
};
|
|
1492
1509
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1510
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1511
|
+
expect(result.isCacheStale).toBe(true);
|
|
1512
|
+
expect(result.staleTraits).toContain('emails');
|
|
1496
1513
|
});
|
|
1497
|
-
|
|
1514
|
+
it('should handle both identities with undefined traits', () => {
|
|
1498
1515
|
const incomingIdentity = {
|
|
1499
1516
|
identityId: 'test-id',
|
|
1500
1517
|
};
|
|
@@ -1502,11 +1519,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1502
1519
|
identityId: 'test-id',
|
|
1503
1520
|
};
|
|
1504
1521
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1522
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
1523
|
+
expect(result.isCacheStale).toBe(false);
|
|
1524
|
+
expect(result.staleTraits).toEqual([]);
|
|
1508
1525
|
});
|
|
1509
|
-
|
|
1526
|
+
it('should handle null values in array traits gracefully', () => {
|
|
1510
1527
|
const incomingIdentity = {
|
|
1511
1528
|
identityId: 'test-id',
|
|
1512
1529
|
traits: {
|
|
@@ -1520,12 +1537,12 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1520
1537
|
},
|
|
1521
1538
|
};
|
|
1522
1539
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1523
|
-
|
|
1524
|
-
|
|
1540
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1541
|
+
expect(result.isCacheStale).toBe(true);
|
|
1525
1542
|
});
|
|
1526
1543
|
});
|
|
1527
|
-
|
|
1528
|
-
|
|
1544
|
+
describe('Edge cases - click trait merging', () => {
|
|
1545
|
+
it('should detect staleness when incoming has new click info', () => {
|
|
1529
1546
|
const incomingIdentity = {
|
|
1530
1547
|
identityId: 'test-id',
|
|
1531
1548
|
traits: {
|
|
@@ -1540,11 +1557,11 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1540
1557
|
traits: {},
|
|
1541
1558
|
};
|
|
1542
1559
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1560
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1561
|
+
expect(result.isCacheStale).toBe(true);
|
|
1562
|
+
expect(result.staleTraits).toContain('clickInfos');
|
|
1546
1563
|
});
|
|
1547
|
-
|
|
1564
|
+
it('should preserve cached click info when merging', () => {
|
|
1548
1565
|
const incomingIdentity = {
|
|
1549
1566
|
identityId: 'test-id',
|
|
1550
1567
|
traits: {
|
|
@@ -1563,10 +1580,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1563
1580
|
},
|
|
1564
1581
|
};
|
|
1565
1582
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1566
|
-
|
|
1567
|
-
|
|
1583
|
+
expect(result.mergedIdentity.traits?.click?.gclid).toBe('cached_gclid');
|
|
1584
|
+
expect(result.mergedIdentity.traits?.click?.fbp).toBe('fb.1.cached.456');
|
|
1568
1585
|
});
|
|
1569
|
-
|
|
1586
|
+
it('should not be stale when click timestamps differ but values are same', () => {
|
|
1570
1587
|
const incomingIdentity = {
|
|
1571
1588
|
identityId: 'test-id',
|
|
1572
1589
|
traits: {
|
|
@@ -1586,10 +1603,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1586
1603
|
},
|
|
1587
1604
|
};
|
|
1588
1605
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1589
|
-
|
|
1590
|
-
|
|
1606
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
1607
|
+
expect(result.isCacheStale).toBe(false);
|
|
1591
1608
|
});
|
|
1592
|
-
|
|
1609
|
+
it('should detect staleness when fbc changes (incoming has new fbc, cached has none)', () => {
|
|
1593
1610
|
const incomingIdentity = {
|
|
1594
1611
|
identityId: 'test-id',
|
|
1595
1612
|
traits: {
|
|
@@ -1605,13 +1622,13 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1605
1622
|
},
|
|
1606
1623
|
};
|
|
1607
1624
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1625
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1626
|
+
expect(result.isCacheStale).toBe(true);
|
|
1627
|
+
expect(result.staleTraits).toContain('clickInfos');
|
|
1611
1628
|
});
|
|
1612
1629
|
});
|
|
1613
|
-
|
|
1614
|
-
|
|
1630
|
+
describe('staleTraits extraction comprehensive tests', () => {
|
|
1631
|
+
it('should return empty array when NONE tier', () => {
|
|
1615
1632
|
const incomingIdentity = {
|
|
1616
1633
|
identityId: 'test-id',
|
|
1617
1634
|
traits: { emails: ['test@email.com'] },
|
|
@@ -1621,10 +1638,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1621
1638
|
traits: { emails: ['test@email.com', 'other@email.com'] },
|
|
1622
1639
|
};
|
|
1623
1640
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1624
|
-
|
|
1625
|
-
|
|
1641
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.NONE);
|
|
1642
|
+
expect(result.staleTraits).toEqual([]);
|
|
1626
1643
|
});
|
|
1627
|
-
|
|
1644
|
+
it('should return volatile trait names for VOLATILE_ONLY tier', () => {
|
|
1628
1645
|
const incomingIdentity = {
|
|
1629
1646
|
identityId: 'test-id',
|
|
1630
1647
|
traits: {
|
|
@@ -1640,12 +1657,12 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1640
1657
|
},
|
|
1641
1658
|
};
|
|
1642
1659
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1660
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
|
|
1661
|
+
expect(result.staleTraits).toContain('ipAddress');
|
|
1662
|
+
expect(result.staleTraits).toContain('userAgent');
|
|
1663
|
+
expect(result.staleTraits).not.toContain('emails');
|
|
1647
1664
|
});
|
|
1648
|
-
|
|
1665
|
+
it('should return address trait name for ADDRESS_UPDATE tier', () => {
|
|
1649
1666
|
const incomingIdentity = {
|
|
1650
1667
|
identityId: 'test-id',
|
|
1651
1668
|
traits: {
|
|
@@ -1661,10 +1678,10 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1661
1678
|
},
|
|
1662
1679
|
};
|
|
1663
1680
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1664
|
-
|
|
1665
|
-
|
|
1681
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
|
|
1682
|
+
expect(result.staleTraits).toContain('addresses');
|
|
1666
1683
|
});
|
|
1667
|
-
|
|
1684
|
+
it('should return all stale identity trait names for IDENTITY_STALE tier', () => {
|
|
1668
1685
|
const incomingIdentity = {
|
|
1669
1686
|
identityId: 'test-id',
|
|
1670
1687
|
traits: {
|
|
@@ -1682,14 +1699,14 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1682
1699
|
},
|
|
1683
1700
|
};
|
|
1684
1701
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1702
|
+
expect(result.staleTier).toBe(at_shared_utils_1.IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
|
|
1703
|
+
expect(result.staleTraits).toContain('emails');
|
|
1704
|
+
expect(result.staleTraits).toContain('phones');
|
|
1705
|
+
expect(result.staleTraits).toContain('userIds');
|
|
1689
1706
|
});
|
|
1690
1707
|
});
|
|
1691
|
-
|
|
1692
|
-
|
|
1708
|
+
describe('Merge behavior verification', () => {
|
|
1709
|
+
it('should merge incoming and cached array traits (emails, phones, userIds)', () => {
|
|
1693
1710
|
const incomingIdentity = {
|
|
1694
1711
|
identityId: 'incoming-id',
|
|
1695
1712
|
traits: {
|
|
@@ -1706,14 +1723,14 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1706
1723
|
},
|
|
1707
1724
|
};
|
|
1708
1725
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1726
|
+
expect(result.mergedIdentity.traits?.emails).toContain('incoming@email.com');
|
|
1727
|
+
expect(result.mergedIdentity.traits?.emails).toContain('cached@email.com');
|
|
1728
|
+
expect(result.mergedIdentity.traits?.emails).toContain('shared@email.com');
|
|
1729
|
+
expect(result.mergedIdentity.traits?.phones).toEqual(['+1234567890']);
|
|
1730
|
+
expect(result.mergedIdentity.traits?.userIds).toContain('incominguser');
|
|
1731
|
+
expect(result.mergedIdentity.traits?.userIds).toContain('cacheduser');
|
|
1715
1732
|
});
|
|
1716
|
-
|
|
1733
|
+
it('should preserve identityId from incoming identity', () => {
|
|
1717
1734
|
const incomingIdentity = {
|
|
1718
1735
|
identityId: 'incoming-id-123',
|
|
1719
1736
|
traits: { emails: ['test@email.com'] },
|
|
@@ -1723,26 +1740,30 @@ const at_shared_utils_1 = require("@adtrackify/at-shared-utils");
|
|
|
1723
1740
|
traits: { phones: ['+1234567890'] },
|
|
1724
1741
|
};
|
|
1725
1742
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1726
|
-
|
|
1743
|
+
expect(result.mergedIdentity.identityId).toBe('incoming-id-123');
|
|
1727
1744
|
});
|
|
1728
|
-
|
|
1745
|
+
it('should merge addresses from both identities', () => {
|
|
1729
1746
|
const incomingIdentity = {
|
|
1730
1747
|
identityId: 'test-id',
|
|
1731
1748
|
traits: {
|
|
1732
|
-
addresses: [
|
|
1749
|
+
addresses: [
|
|
1750
|
+
{ city: 'IncomingCity', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.INPUT },
|
|
1751
|
+
],
|
|
1733
1752
|
},
|
|
1734
1753
|
};
|
|
1735
1754
|
const cachedIdentity = {
|
|
1736
1755
|
identityId: 'test-id',
|
|
1737
1756
|
traits: {
|
|
1738
|
-
addresses: [
|
|
1757
|
+
addresses: [
|
|
1758
|
+
{ city: 'CachedCity', s: at_tracking_event_types_1.ADDRESS_INFO_SOURCE.INPUT },
|
|
1759
|
+
],
|
|
1739
1760
|
},
|
|
1740
1761
|
};
|
|
1741
1762
|
const result = (0, at_shared_utils_1.mergeAndComputeIdentityStaleness)(incomingIdentity, cachedIdentity);
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1763
|
+
expect(result.mergedIdentity.traits?.addresses).toHaveLength(2);
|
|
1764
|
+
expect(result.mergedIdentity.traits?.addresses).toEqual(expect.arrayContaining([
|
|
1765
|
+
expect.objectContaining({ city: 'IncomingCity' }),
|
|
1766
|
+
expect.objectContaining({ city: 'CachedCity' }),
|
|
1746
1767
|
]));
|
|
1747
1768
|
});
|
|
1748
1769
|
});
|