@adtrackify/at-service-common 5.0.7 → 5.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1166) hide show
  1. package/dist/cjs/__tests__/clients/acuity-client.spec.d.ts +1 -1
  2. package/dist/cjs/__tests__/clients/acuity-client.spec.js +44 -43
  3. package/dist/cjs/__tests__/clients/acuity-client.spec.js.map +1 -1
  4. package/dist/cjs/__tests__/clients/client-timeout-inventory.spec.d.ts +1 -0
  5. package/dist/cjs/__tests__/clients/client-timeout-inventory.spec.js +21 -0
  6. package/dist/cjs/__tests__/clients/client-timeout-inventory.spec.js.map +1 -0
  7. package/dist/cjs/__tests__/clients/cross-platform-compression.spec.d.ts +1 -1
  8. package/dist/cjs/__tests__/clients/cross-platform-compression.spec.js +365 -354
  9. package/dist/cjs/__tests__/clients/cross-platform-compression.spec.js.map +1 -1
  10. package/dist/cjs/__tests__/clients/dynamodb-client.spec.d.ts +1 -1
  11. package/dist/cjs/__tests__/clients/dynamodb-client.spec.js +193 -194
  12. package/dist/cjs/__tests__/clients/dynamodb-client.spec.js.map +1 -1
  13. package/dist/cjs/__tests__/clients/event-collector-client.spec.d.ts +1 -1
  14. package/dist/cjs/__tests__/clients/event-collector-client.spec.js +227 -227
  15. package/dist/cjs/__tests__/clients/event-collector-client.spec.js.map +1 -1
  16. package/dist/cjs/__tests__/clients/open-exchange-rates-client.spec.d.ts +1 -1
  17. package/dist/cjs/__tests__/clients/open-exchange-rates-client.spec.js +56 -55
  18. package/dist/cjs/__tests__/clients/open-exchange-rates-client.spec.js.map +1 -1
  19. package/dist/cjs/__tests__/clients/redis-client.spec.d.ts +1 -0
  20. package/dist/cjs/__tests__/clients/redis-client.spec.js +79 -0
  21. package/dist/cjs/__tests__/clients/redis-client.spec.js.map +1 -0
  22. package/dist/cjs/__tests__/clients/sqs-bundled-client.spec.d.ts +1 -1
  23. package/dist/cjs/__tests__/clients/sqs-bundled-client.spec.js +949 -931
  24. package/dist/cjs/__tests__/clients/sqs-bundled-client.spec.js.map +1 -1
  25. package/dist/cjs/__tests__/clients/sqs-bundling-contracts.spec.d.ts +1 -1
  26. package/dist/cjs/__tests__/clients/sqs-bundling-contracts.spec.js +575 -563
  27. package/dist/cjs/__tests__/clients/sqs-bundling-contracts.spec.js.map +1 -1
  28. package/dist/cjs/__tests__/clients/sqs-client.spec.d.ts +1 -1
  29. package/dist/cjs/__tests__/clients/sqs-client.spec.js +192 -191
  30. package/dist/cjs/__tests__/clients/sqs-client.spec.js.map +1 -1
  31. package/dist/cjs/__tests__/clients/sqs-unbundle.spec.d.ts +1 -1
  32. package/dist/cjs/__tests__/clients/sqs-unbundle.spec.js +1358 -1357
  33. package/dist/cjs/__tests__/clients/sqs-unbundle.spec.js.map +1 -1
  34. package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.d.ts +1 -1
  35. package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js +69 -68
  36. package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js.map +1 -1
  37. package/dist/cjs/__tests__/db/destinations-db-service.spec.d.ts +1 -1
  38. package/dist/cjs/__tests__/db/destinations-db-service.spec.js +123 -125
  39. package/dist/cjs/__tests__/db/destinations-db-service.spec.js.map +1 -1
  40. package/dist/cjs/__tests__/db/products-db-service.spec.d.ts +1 -1
  41. package/dist/cjs/__tests__/db/products-db-service.spec.js +90 -89
  42. package/dist/cjs/__tests__/db/products-db-service.spec.js.map +1 -1
  43. package/dist/cjs/__tests__/db/shared-read-db-services.spec.d.ts +1 -1
  44. package/dist/cjs/__tests__/db/shared-read-db-services.spec.js +90 -89
  45. package/dist/cjs/__tests__/db/shared-read-db-services.spec.js.map +1 -1
  46. package/dist/cjs/__tests__/db/shopify-app-installs-db-service.spec.d.ts +1 -1
  47. package/dist/cjs/__tests__/db/shopify-app-installs-db-service.spec.js +105 -104
  48. package/dist/cjs/__tests__/db/shopify-app-installs-db-service.spec.js.map +1 -1
  49. package/dist/cjs/__tests__/db/subscriptions-db-service.spec.d.ts +1 -1
  50. package/dist/cjs/__tests__/db/subscriptions-db-service.spec.js +96 -95
  51. package/dist/cjs/__tests__/db/subscriptions-db-service.spec.js.map +1 -1
  52. package/dist/cjs/__tests__/db/user-accounts-db-service.spec.d.ts +1 -1
  53. package/dist/cjs/__tests__/db/user-accounts-db-service.spec.js +77 -76
  54. package/dist/cjs/__tests__/db/user-accounts-db-service.spec.js.map +1 -1
  55. package/dist/cjs/__tests__/helpers/account-users-helper.spec.d.ts +1 -1
  56. package/dist/cjs/__tests__/helpers/account-users-helper.spec.js +221 -220
  57. package/dist/cjs/__tests__/helpers/account-users-helper.spec.js.map +1 -1
  58. package/dist/cjs/__tests__/helpers/acuity-helper.spec.d.ts +1 -1
  59. package/dist/cjs/__tests__/helpers/acuity-helper.spec.js +70 -69
  60. package/dist/cjs/__tests__/helpers/acuity-helper.spec.js.map +1 -1
  61. package/dist/cjs/__tests__/helpers/api-key-auth-helper.spec.d.ts +1 -1
  62. package/dist/cjs/__tests__/helpers/api-key-auth-helper.spec.js +83 -82
  63. package/dist/cjs/__tests__/helpers/api-key-auth-helper.spec.js.map +1 -1
  64. package/dist/cjs/__tests__/helpers/cognito-auth-helper.spec.d.ts +1 -1
  65. package/dist/cjs/__tests__/helpers/cognito-auth-helper.spec.js +47 -46
  66. package/dist/cjs/__tests__/helpers/cognito-auth-helper.spec.js.map +1 -1
  67. package/dist/cjs/__tests__/helpers/order-calculation-helper.spec.d.ts +1 -1
  68. package/dist/cjs/__tests__/helpers/order-calculation-helper.spec.js +153 -152
  69. package/dist/cjs/__tests__/helpers/order-calculation-helper.spec.js.map +1 -1
  70. package/dist/cjs/__tests__/helpers/public-api-response-helper.spec.d.ts +1 -1
  71. package/dist/cjs/__tests__/helpers/public-api-response-helper.spec.js +61 -60
  72. package/dist/cjs/__tests__/helpers/public-api-response-helper.spec.js.map +1 -1
  73. package/dist/cjs/__tests__/identity-cache/helpers.spec.d.ts +1 -1
  74. package/dist/cjs/__tests__/identity-cache/helpers.spec.js +593 -592
  75. package/dist/cjs/__tests__/identity-cache/helpers.spec.js.map +1 -1
  76. package/dist/cjs/__tests__/identity-cache/identity-cache-alias-write.spec.d.ts +1 -1
  77. package/dist/cjs/__tests__/identity-cache/identity-cache-alias-write.spec.js +71 -70
  78. package/dist/cjs/__tests__/identity-cache/identity-cache-alias-write.spec.js.map +1 -1
  79. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.d.ts +1 -1
  80. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.js +677 -676
  81. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.js.map +1 -1
  82. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.d.ts +1 -1
  83. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js +750 -727
  84. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js.map +1 -1
  85. package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.d.ts +1 -1
  86. package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.js +640 -631
  87. package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.js.map +1 -1
  88. package/dist/cjs/__tests__/identity-cache/identity-client.spec.d.ts +1 -1
  89. package/dist/cjs/__tests__/identity-cache/identity-client.spec.js +362 -359
  90. package/dist/cjs/__tests__/identity-cache/identity-client.spec.js.map +1 -1
  91. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-hit.spec.d.ts +1 -1
  92. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-hit.spec.js +138 -137
  93. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-hit.spec.js.map +1 -1
  94. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-miss.spec.d.ts +1 -1
  95. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-miss.spec.js +165 -152
  96. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-miss.spec.js.map +1 -1
  97. package/dist/cjs/__tests__/identity-cache/identity-gateway-constructor.spec.d.ts +1 -1
  98. package/dist/cjs/__tests__/identity-cache/identity-gateway-constructor.spec.js +72 -71
  99. package/dist/cjs/__tests__/identity-cache/identity-gateway-constructor.spec.js.map +1 -1
  100. package/dist/cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.d.ts +1 -1
  101. package/dist/cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.js +95 -88
  102. package/dist/cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.js.map +1 -1
  103. package/dist/cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.d.ts +1 -1
  104. package/dist/cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js +136 -135
  105. package/dist/cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js.map +1 -1
  106. package/dist/cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.d.ts +1 -1
  107. package/dist/cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.js +245 -223
  108. package/dist/cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.js.map +1 -1
  109. package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.d.ts +24 -28
  110. package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.js +96 -89
  111. package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.js.map +1 -1
  112. package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.d.ts +1 -1
  113. package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.js +1749 -1770
  114. package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.js.map +1 -1
  115. package/dist/cjs/__tests__/identity-cache/volatile-traits-optimization.spec.d.ts +1 -1
  116. package/dist/cjs/__tests__/identity-cache/volatile-traits-optimization.spec.js +819 -818
  117. package/dist/cjs/__tests__/identity-cache/volatile-traits-optimization.spec.js.map +1 -1
  118. package/dist/cjs/__tests__/integration/sqs-bundling-roundtrip.spec.d.ts +1 -1
  119. package/dist/cjs/__tests__/integration/sqs-bundling-roundtrip.spec.js +585 -584
  120. package/dist/cjs/__tests__/integration/sqs-bundling-roundtrip.spec.js.map +1 -1
  121. package/dist/cjs/__tests__/libs/compress-decompress.spec.d.ts +1 -1
  122. package/dist/cjs/__tests__/libs/compress-decompress.spec.js +17 -16
  123. package/dist/cjs/__tests__/libs/compress-decompress.spec.js.map +1 -1
  124. package/dist/cjs/__tests__/libs/contacts.spec.d.ts +1 -1
  125. package/dist/cjs/__tests__/libs/contacts.spec.js +295 -294
  126. package/dist/cjs/__tests__/libs/contacts.spec.js.map +1 -1
  127. package/dist/cjs/__tests__/libs/currency.spec.d.ts +1 -1
  128. package/dist/cjs/__tests__/libs/currency.spec.js +221 -220
  129. package/dist/cjs/__tests__/libs/currency.spec.js.map +1 -1
  130. package/dist/cjs/__tests__/libs/dates.spec.d.ts +1 -1
  131. package/dist/cjs/__tests__/libs/dates.spec.js +131 -130
  132. package/dist/cjs/__tests__/libs/dates.spec.js.map +1 -1
  133. package/dist/cjs/__tests__/libs/domain.spec.d.ts +1 -1
  134. package/dist/cjs/__tests__/libs/domain.spec.js +108 -107
  135. package/dist/cjs/__tests__/libs/domain.spec.js.map +1 -1
  136. package/dist/cjs/__tests__/libs/numbers.spec.d.ts +1 -1
  137. package/dist/cjs/__tests__/libs/numbers.spec.js +262 -261
  138. package/dist/cjs/__tests__/libs/numbers.spec.js.map +1 -1
  139. package/dist/cjs/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  140. package/dist/cjs/__tests__/s3-client/s3-client.spec.js +32 -33
  141. package/dist/cjs/__tests__/s3-client/s3-client.spec.js.map +1 -1
  142. package/dist/cjs/__tests__/services/acuity-api-service.spec.d.ts +1 -1
  143. package/dist/cjs/__tests__/services/acuity-api-service.spec.js +74 -71
  144. package/dist/cjs/__tests__/services/acuity-api-service.spec.js.map +1 -1
  145. package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.d.ts +1 -1
  146. package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.js +24 -23
  147. package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.js.map +1 -1
  148. package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.d.ts +1 -1
  149. package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.js +3599 -3361
  150. package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.js.map +1 -1
  151. package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.d.ts +1 -1
  152. package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.js +115 -114
  153. package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.js.map +1 -1
  154. package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.d.ts +1 -1
  155. package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.js +465 -468
  156. package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.js.map +1 -1
  157. package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.d.ts +1 -1
  158. package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js +485 -360
  159. package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js.map +1 -1
  160. package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.d.ts +1 -1
  161. package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.js +39 -34
  162. package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.js.map +1 -1
  163. package/dist/cjs/__tests__/services/email-verification/contact-email-verification-service.spec.d.ts +1 -1
  164. package/dist/cjs/__tests__/services/email-verification/contact-email-verification-service.spec.js +95 -93
  165. package/dist/cjs/__tests__/services/email-verification/contact-email-verification-service.spec.js.map +1 -1
  166. package/dist/cjs/__tests__/services/email-verification/email-verification-service.spec.d.ts +1 -1
  167. package/dist/cjs/__tests__/services/email-verification/email-verification-service.spec.js +62 -57
  168. package/dist/cjs/__tests__/services/email-verification/email-verification-service.spec.js.map +1 -1
  169. package/dist/cjs/__tests__/services/events/collect-queue-tracking-service.spec.d.ts +1 -1
  170. package/dist/cjs/__tests__/services/events/collect-queue-tracking-service.spec.js +232 -229
  171. package/dist/cjs/__tests__/services/events/collect-queue-tracking-service.spec.js.map +1 -1
  172. package/dist/cjs/__tests__/services/events/tracking-event-sqs-service.spec.d.ts +1 -1
  173. package/dist/cjs/__tests__/services/events/tracking-event-sqs-service.spec.js +194 -191
  174. package/dist/cjs/__tests__/services/events/tracking-event-sqs-service.spec.js.map +1 -1
  175. package/dist/cjs/__tests__/shopify/shopify-graphql-transformer.spec.d.ts +1 -1
  176. package/dist/cjs/__tests__/shopify/shopify-graphql-transformer.spec.js +36 -35
  177. package/dist/cjs/__tests__/shopify/shopify-graphql-transformer.spec.js.map +1 -1
  178. package/dist/cjs/__tests__/unit/libs/api-router/public-api-router.spec.d.ts +1 -1
  179. package/dist/cjs/__tests__/unit/libs/api-router/public-api-router.spec.js +192 -181
  180. package/dist/cjs/__tests__/unit/libs/api-router/public-api-router.spec.js.map +1 -1
  181. package/dist/cjs/__tests__/unit/libs/api-router/route-matcher.spec.d.ts +1 -1
  182. package/dist/cjs/__tests__/unit/libs/api-router/route-matcher.spec.js +70 -69
  183. package/dist/cjs/__tests__/unit/libs/api-router/route-matcher.spec.js.map +1 -1
  184. package/dist/cjs/__tests__/utils/custom-measure-formula-utils.spec.d.ts +1 -1
  185. package/dist/cjs/__tests__/utils/custom-measure-formula-utils.spec.js +147 -146
  186. package/dist/cjs/__tests__/utils/custom-measure-formula-utils.spec.js.map +1 -1
  187. package/dist/cjs/clients/generic/cognito-client.d.ts +23 -23
  188. package/dist/cjs/clients/generic/cognito-client.js +209 -209
  189. package/dist/cjs/clients/generic/cognito-client.js.map +1 -1
  190. package/dist/cjs/clients/generic/dynamodb-client.d.ts +20 -20
  191. package/dist/cjs/clients/generic/dynamodb-client.js +235 -235
  192. package/dist/cjs/clients/generic/dynamodb-client.js.map +1 -1
  193. package/dist/cjs/clients/generic/eventbridge-client.d.ts +14 -14
  194. package/dist/cjs/clients/generic/eventbridge-client.js +51 -51
  195. package/dist/cjs/clients/generic/eventbridge-client.js.map +1 -1
  196. package/dist/cjs/clients/generic/http-client.d.ts +14 -14
  197. package/dist/cjs/clients/generic/http-client.js +61 -61
  198. package/dist/cjs/clients/generic/http-client.js.map +1 -1
  199. package/dist/cjs/clients/generic/index.d.ts +13 -13
  200. package/dist/cjs/clients/generic/index.js +29 -29
  201. package/dist/cjs/clients/generic/lambda-invoke-client.d.ts +10 -10
  202. package/dist/cjs/clients/generic/lambda-invoke-client.js +39 -39
  203. package/dist/cjs/clients/generic/lambda-invoke-client.js.map +1 -1
  204. package/dist/cjs/clients/generic/location-client.d.ts +8 -8
  205. package/dist/cjs/clients/generic/location-client.js +31 -31
  206. package/dist/cjs/clients/generic/location-client.js.map +1 -1
  207. package/dist/cjs/clients/generic/redis-client.d.ts +33 -33
  208. package/dist/cjs/clients/generic/redis-client.js +202 -191
  209. package/dist/cjs/clients/generic/redis-client.js.map +1 -1
  210. package/dist/cjs/clients/generic/s3-client.d.ts +22 -23
  211. package/dist/cjs/clients/generic/s3-client.js +216 -216
  212. package/dist/cjs/clients/generic/s3-client.js.map +1 -1
  213. package/dist/cjs/clients/generic/singlestore-db-client.d.ts +21 -21
  214. package/dist/cjs/clients/generic/singlestore-db-client.js +102 -92
  215. package/dist/cjs/clients/generic/singlestore-db-client.js.map +1 -1
  216. package/dist/cjs/clients/generic/sqs-bundled-client.d.ts +15 -15
  217. package/dist/cjs/clients/generic/sqs-bundled-client.js +311 -311
  218. package/dist/cjs/clients/generic/sqs-bundled-client.js.map +1 -1
  219. package/dist/cjs/clients/generic/sqs-bundled-client.types.d.ts +53 -53
  220. package/dist/cjs/clients/generic/sqs-bundled-client.types.js +17 -17
  221. package/dist/cjs/clients/generic/sqs-bundled-client.types.js.map +1 -1
  222. package/dist/cjs/clients/generic/sqs-client.d.ts +53 -53
  223. package/dist/cjs/clients/generic/sqs-client.js +285 -285
  224. package/dist/cjs/clients/generic/sqs-client.js.map +1 -1
  225. package/dist/cjs/clients/generic/sqs-unbundle.d.ts +32 -32
  226. package/dist/cjs/clients/generic/sqs-unbundle.js +143 -144
  227. package/dist/cjs/clients/generic/sqs-unbundle.js.map +1 -1
  228. package/dist/cjs/clients/index.d.ts +3 -3
  229. package/dist/cjs/clients/index.js +19 -19
  230. package/dist/cjs/clients/internal-api/accounts-client.d.ts +91 -91
  231. package/dist/cjs/clients/internal-api/accounts-client.js +129 -129
  232. package/dist/cjs/clients/internal-api/accounts-client.js.map +1 -1
  233. package/dist/cjs/clients/internal-api/cache-lambda-client.d.ts +26 -26
  234. package/dist/cjs/clients/internal-api/cache-lambda-client.js +89 -89
  235. package/dist/cjs/clients/internal-api/cache-lambda-client.js.map +1 -1
  236. package/dist/cjs/clients/internal-api/db-management-client.d.ts +18 -18
  237. package/dist/cjs/clients/internal-api/db-management-client.js +36 -36
  238. package/dist/cjs/clients/internal-api/db-management-client.js.map +1 -1
  239. package/dist/cjs/clients/internal-api/destinations-client.d.ts +34 -34
  240. package/dist/cjs/clients/internal-api/destinations-client.js +79 -79
  241. package/dist/cjs/clients/internal-api/destinations-client.js.map +1 -1
  242. package/dist/cjs/clients/internal-api/event-collector-client.d.ts +122 -122
  243. package/dist/cjs/clients/internal-api/event-collector-client.js +78 -78
  244. package/dist/cjs/clients/internal-api/event-collector-client.js.map +1 -1
  245. package/dist/cjs/clients/internal-api/identity-client.d.ts +41 -41
  246. package/dist/cjs/clients/internal-api/identity-client.js +137 -137
  247. package/dist/cjs/clients/internal-api/identity-client.js.map +1 -1
  248. package/dist/cjs/clients/internal-api/index.d.ts +9 -9
  249. package/dist/cjs/clients/internal-api/index.js +25 -25
  250. package/dist/cjs/clients/internal-api/shopify-app-install-client.d.ts +37 -37
  251. package/dist/cjs/clients/internal-api/shopify-app-install-client.js +81 -81
  252. package/dist/cjs/clients/internal-api/shopify-app-install-client.js.map +1 -1
  253. package/dist/cjs/clients/internal-api/subscriptions-client.d.ts +26 -26
  254. package/dist/cjs/clients/internal-api/subscriptions-client.js +77 -77
  255. package/dist/cjs/clients/internal-api/subscriptions-client.js.map +1 -1
  256. package/dist/cjs/clients/internal-api/users-auth-client.d.ts +35 -35
  257. package/dist/cjs/clients/internal-api/users-auth-client.js +110 -110
  258. package/dist/cjs/clients/internal-api/users-auth-client.js.map +1 -1
  259. package/dist/cjs/clients/third-party/acuity-client.d.ts +10 -10
  260. package/dist/cjs/clients/third-party/acuity-client.js +40 -40
  261. package/dist/cjs/clients/third-party/acuity-client.js.map +1 -1
  262. package/dist/cjs/clients/third-party/emailable-client.d.ts +7 -7
  263. package/dist/cjs/clients/third-party/emailable-client.js +25 -25
  264. package/dist/cjs/clients/third-party/emailable-client.js.map +1 -1
  265. package/dist/cjs/clients/third-party/exchange-rate-api-client.d.ts +17 -17
  266. package/dist/cjs/clients/third-party/exchange-rate-api-client.js +19 -19
  267. package/dist/cjs/clients/third-party/exchange-rate-api-client.js.map +1 -1
  268. package/dist/cjs/clients/third-party/index.d.ts +6 -6
  269. package/dist/cjs/clients/third-party/index.js +22 -22
  270. package/dist/cjs/clients/third-party/loops-client.d.ts +10 -10
  271. package/dist/cjs/clients/third-party/loops-client.js +30 -30
  272. package/dist/cjs/clients/third-party/loops-client.js.map +1 -1
  273. package/dist/cjs/clients/third-party/open-exchange-rates-client.d.ts +8 -8
  274. package/dist/cjs/clients/third-party/open-exchange-rates-client.js +27 -27
  275. package/dist/cjs/clients/third-party/open-exchange-rates-client.js.map +1 -1
  276. package/dist/cjs/clients/third-party/shopify/graphql-analytics-queries.d.ts +18 -18
  277. package/dist/cjs/clients/third-party/shopify/graphql-analytics-queries.js +22 -22
  278. package/dist/cjs/clients/third-party/shopify/graphql-order-queries.d.ts +25 -25
  279. package/dist/cjs/clients/third-party/shopify/graphql-order-queries.js +4 -4
  280. package/dist/cjs/clients/third-party/shopify/graphql-product-queries.d.ts +2 -2
  281. package/dist/cjs/clients/third-party/shopify/graphql-product-queries.js +5 -5
  282. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.d.ts +42 -42
  283. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.js +352 -352
  284. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.js.map +1 -1
  285. package/dist/cjs/clients/third-party/shopify-client.d.ts +29 -29
  286. package/dist/cjs/clients/third-party/shopify-client.js +146 -146
  287. package/dist/cjs/clients/third-party/shopify-client.js.map +1 -1
  288. package/dist/cjs/constants/index.d.ts +1 -1
  289. package/dist/cjs/constants/index.js +17 -17
  290. package/dist/cjs/constants/sqs.d.ts +20 -20
  291. package/dist/cjs/constants/sqs.js +26 -26
  292. package/dist/cjs/constants/sqs.js.map +1 -1
  293. package/dist/cjs/helpers/account-users-helper.d.ts +2 -2
  294. package/dist/cjs/helpers/account-users-helper.js +22 -22
  295. package/dist/cjs/helpers/account-users-helper.js.map +1 -1
  296. package/dist/cjs/helpers/acuity-helper.d.ts +4 -4
  297. package/dist/cjs/helpers/acuity-helper.js +56 -56
  298. package/dist/cjs/helpers/acuity-helper.js.map +1 -1
  299. package/dist/cjs/helpers/api-key-auth-helper.d.ts +10 -9
  300. package/dist/cjs/helpers/api-key-auth-helper.js +40 -40
  301. package/dist/cjs/helpers/api-key-auth-helper.js.map +1 -1
  302. package/dist/cjs/helpers/api-key-authorizer-helper.d.ts +36 -36
  303. package/dist/cjs/helpers/api-key-authorizer-helper.js +87 -87
  304. package/dist/cjs/helpers/api-key-authorizer-helper.js.map +1 -1
  305. package/dist/cjs/helpers/cognito-auth-helper.d.ts +6 -5
  306. package/dist/cjs/helpers/cognito-auth-helper.js +14 -14
  307. package/dist/cjs/helpers/cognito-auth-helper.js.map +1 -1
  308. package/dist/cjs/helpers/index.d.ts +12 -12
  309. package/dist/cjs/helpers/index.js +28 -28
  310. package/dist/cjs/helpers/input-validation-helper.d.ts +3 -3
  311. package/dist/cjs/helpers/input-validation-helper.js +22 -22
  312. package/dist/cjs/helpers/input-validation-helper.js.map +1 -1
  313. package/dist/cjs/helpers/logging-helper.d.ts +16 -16
  314. package/dist/cjs/helpers/logging-helper.js +94 -84
  315. package/dist/cjs/helpers/logging-helper.js.map +1 -1
  316. package/dist/cjs/helpers/order-calculation-helper.d.ts +13 -13
  317. package/dist/cjs/helpers/order-calculation-helper.js +117 -117
  318. package/dist/cjs/helpers/order-calculation-helper.js.map +1 -1
  319. package/dist/cjs/helpers/public-api-response-helper.d.ts +21 -21
  320. package/dist/cjs/helpers/public-api-response-helper.js +45 -45
  321. package/dist/cjs/helpers/public-api-response-helper.js.map +1 -1
  322. package/dist/cjs/helpers/response-helper.d.ts +18 -18
  323. package/dist/cjs/helpers/response-helper.js +43 -43
  324. package/dist/cjs/helpers/response-helper.js.map +1 -1
  325. package/dist/cjs/helpers/shopify-helper.d.ts +9 -9
  326. package/dist/cjs/helpers/shopify-helper.js +26 -26
  327. package/dist/cjs/helpers/shopify-helper.js.map +1 -1
  328. package/dist/cjs/helpers/sqs-utils.d.ts +6 -6
  329. package/dist/cjs/helpers/sqs-utils.js +18 -14
  330. package/dist/cjs/helpers/sqs-utils.js.map +1 -1
  331. package/dist/cjs/index.d.ts +7 -7
  332. package/dist/cjs/index.js +23 -23
  333. package/dist/cjs/libs/api-router/index.d.ts +2 -2
  334. package/dist/cjs/libs/api-router/index.js +18 -18
  335. package/dist/cjs/libs/api-router/public-api-router.d.ts +3 -3
  336. package/dist/cjs/libs/api-router/public-api-router.js +36 -36
  337. package/dist/cjs/libs/api-router/public-api-router.js.map +1 -1
  338. package/dist/cjs/libs/api-router/route-matcher.d.ts +21 -21
  339. package/dist/cjs/libs/api-router/route-matcher.js +36 -36
  340. package/dist/cjs/libs/api-router/route-matcher.js.map +1 -1
  341. package/dist/cjs/libs/click-id-parser.d.ts +23 -23
  342. package/dist/cjs/libs/click-id-parser.js +49 -49
  343. package/dist/cjs/libs/click-id-parser.js.map +1 -1
  344. package/dist/cjs/libs/compression.d.ts +2 -2
  345. package/dist/cjs/libs/compression.js +33 -33
  346. package/dist/cjs/libs/compression.js.map +1 -1
  347. package/dist/cjs/libs/contacts.d.ts +7 -7
  348. package/dist/cjs/libs/contacts.js +152 -152
  349. package/dist/cjs/libs/contacts.js.map +1 -1
  350. package/dist/cjs/libs/cookie.d.ts +17 -17
  351. package/dist/cjs/libs/cookie.js +76 -76
  352. package/dist/cjs/libs/cookie.js.map +1 -1
  353. package/dist/cjs/libs/crypto.d.ts +4 -4
  354. package/dist/cjs/libs/crypto.js +25 -25
  355. package/dist/cjs/libs/crypto.js.map +1 -1
  356. package/dist/cjs/libs/csv.d.ts +2 -2
  357. package/dist/cjs/libs/csv.js +35 -35
  358. package/dist/cjs/libs/csv.js.map +1 -1
  359. package/dist/cjs/libs/currency.d.ts +1 -1
  360. package/dist/cjs/libs/currency.js +29 -29
  361. package/dist/cjs/libs/currency.js.map +1 -1
  362. package/dist/cjs/libs/dates.d.ts +12 -12
  363. package/dist/cjs/libs/dates.js +96 -96
  364. package/dist/cjs/libs/dates.js.map +1 -1
  365. package/dist/cjs/libs/domain.d.ts +2 -2
  366. package/dist/cjs/libs/domain.js +38 -38
  367. package/dist/cjs/libs/domain.js.map +1 -1
  368. package/dist/cjs/libs/emails.d.ts +8 -8
  369. package/dist/cjs/libs/emails.js +154 -154
  370. package/dist/cjs/libs/emails.js.map +1 -1
  371. package/dist/cjs/libs/http-error.d.ts +21 -21
  372. package/dist/cjs/libs/http-error.js +63 -63
  373. package/dist/cjs/libs/http-error.js.map +1 -1
  374. package/dist/cjs/libs/http-status-codes.d.ts +58 -58
  375. package/dist/cjs/libs/http-status-codes.js +62 -62
  376. package/dist/cjs/libs/http-status-codes.js.map +1 -1
  377. package/dist/cjs/libs/index.d.ts +19 -19
  378. package/dist/cjs/libs/index.js +35 -35
  379. package/dist/cjs/libs/numbers.d.ts +1 -1
  380. package/dist/cjs/libs/numbers.js +15 -15
  381. package/dist/cjs/libs/numbers.js.map +1 -1
  382. package/dist/cjs/libs/referrer-parser/index.d.ts +2 -2
  383. package/dist/cjs/libs/referrer-parser/index.js +18 -18
  384. package/dist/cjs/libs/referrer-parser/referrer-data.d.ts +9 -9
  385. package/dist/cjs/libs/referrer-parser/referrer-data.js +3307 -3307
  386. package/dist/cjs/libs/referrer-parser/referrer-parser-util.d.ts +19 -20
  387. package/dist/cjs/libs/referrer-parser/referrer-parser-util.js +131 -131
  388. package/dist/cjs/libs/referrer-parser/referrer-parser-util.js.map +1 -1
  389. package/dist/cjs/libs/strings.d.ts +3 -3
  390. package/dist/cjs/libs/strings.js +46 -46
  391. package/dist/cjs/libs/strings.js.map +1 -1
  392. package/dist/cjs/libs/traits.d.ts +6 -6
  393. package/dist/cjs/libs/traits.js +65 -65
  394. package/dist/cjs/libs/traits.js.map +1 -1
  395. package/dist/cjs/libs/url.d.ts +1 -1
  396. package/dist/cjs/libs/url.js +13 -13
  397. package/dist/cjs/libs/url.js.map +1 -1
  398. package/dist/cjs/services/acuity-api-service.d.ts +9 -9
  399. package/dist/cjs/services/acuity-api-service.js +73 -73
  400. package/dist/cjs/services/acuity-api-service.js.map +1 -1
  401. package/dist/cjs/services/cache/generic-cached-object.d.ts +5 -5
  402. package/dist/cjs/services/cache/generic-cached-object.js +2 -2
  403. package/dist/cjs/services/cache/index.d.ts +1 -1
  404. package/dist/cjs/services/cache/index.js +17 -17
  405. package/dist/cjs/services/cache/product-cache-service.d.ts +21 -21
  406. package/dist/cjs/services/cache/product-cache-service.js +76 -76
  407. package/dist/cjs/services/cache/product-cache-service.js.map +1 -1
  408. package/dist/cjs/services/cost/cost-calculation-types.d.ts +69 -69
  409. package/dist/cjs/services/cost/cost-calculation-types.js +18 -19
  410. package/dist/cjs/services/cost/cost-calculation-types.js.map +1 -1
  411. package/dist/cjs/services/cost/cost-calculator-service.d.ts +24 -24
  412. package/dist/cjs/services/cost/cost-calculator-service.js +495 -462
  413. package/dist/cjs/services/cost/cost-calculator-service.js.map +1 -1
  414. package/dist/cjs/services/cost/cost-currency-service.d.ts +6 -6
  415. package/dist/cjs/services/cost/cost-currency-service.js +87 -87
  416. package/dist/cjs/services/cost/cost-currency-service.js.map +1 -1
  417. package/dist/cjs/services/cost/cost-filter-service.d.ts +10 -10
  418. package/dist/cjs/services/cost/cost-filter-service.js +130 -121
  419. package/dist/cjs/services/cost/cost-filter-service.js.map +1 -1
  420. package/dist/cjs/services/cost/index.d.ts +5 -5
  421. package/dist/cjs/services/cost/index.js +21 -21
  422. package/dist/cjs/services/cost/order-cost/index.d.ts +2 -2
  423. package/dist/cjs/services/cost/order-cost/index.js +18 -18
  424. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.d.ts +23 -23
  425. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js +308 -293
  426. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js.map +1 -1
  427. package/dist/cjs/services/cost/order-cost/order-cost-resolution-types.d.ts +31 -31
  428. package/dist/cjs/services/cost/order-cost/order-cost-resolution-types.js +2 -2
  429. package/dist/cjs/services/currency-exchange-rate-lookup-service.d.ts +12 -12
  430. package/dist/cjs/services/currency-exchange-rate-lookup-service.js +97 -94
  431. package/dist/cjs/services/currency-exchange-rate-lookup-service.js.map +1 -1
  432. package/dist/cjs/services/db/accounts-db-service.d.ts +9 -9
  433. package/dist/cjs/services/db/accounts-db-service.js +33 -33
  434. package/dist/cjs/services/db/accounts-db-service.js.map +1 -1
  435. package/dist/cjs/services/db/api-keys-db-service.d.ts +10 -10
  436. package/dist/cjs/services/db/api-keys-db-service.js +36 -36
  437. package/dist/cjs/services/db/api-keys-db-service.js.map +1 -1
  438. package/dist/cjs/services/db/contact-enrichments-db-service.d.ts +15 -15
  439. package/dist/cjs/services/db/contact-enrichments-db-service.js +94 -94
  440. package/dist/cjs/services/db/contact-enrichments-db-service.js.map +1 -1
  441. package/dist/cjs/services/db/currency-exchange-rates-db-service.d.ts +21 -21
  442. package/dist/cjs/services/db/currency-exchange-rates-db-service.js +39 -39
  443. package/dist/cjs/services/db/currency-exchange-rates-db-service.js.map +1 -1
  444. package/dist/cjs/services/db/custom-measures-db-service.d.ts +14 -14
  445. package/dist/cjs/services/db/custom-measures-db-service.js +48 -48
  446. package/dist/cjs/services/db/custom-measures-db-service.js.map +1 -1
  447. package/dist/cjs/services/db/destinations-db-service.d.ts +13 -13
  448. package/dist/cjs/services/db/destinations-db-service.js +74 -74
  449. package/dist/cjs/services/db/destinations-db-service.js.map +1 -1
  450. package/dist/cjs/services/db/identity-cache-db-service.d.ts +28 -28
  451. package/dist/cjs/services/db/identity-cache-db-service.js +320 -320
  452. package/dist/cjs/services/db/identity-cache-db-service.js.map +1 -1
  453. package/dist/cjs/services/db/identity-cache-dynamodb-service/constants.d.ts +3 -3
  454. package/dist/cjs/services/db/identity-cache-dynamodb-service/constants.js +6 -6
  455. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.d.ts +25 -25
  456. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +529 -525
  457. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js.map +1 -1
  458. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.d.ts +23 -23
  459. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +236 -222
  460. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js.map +1 -1
  461. package/dist/cjs/services/db/identity-cache-dynamodb-service/index.d.ts +4 -4
  462. package/dist/cjs/services/db/identity-cache-dynamodb-service/index.js +20 -20
  463. package/dist/cjs/services/db/identity-cache-dynamodb-service/key-builders.d.ts +12 -12
  464. package/dist/cjs/services/db/identity-cache-dynamodb-service/key-builders.js +31 -31
  465. package/dist/cjs/services/db/identity-cache-dynamodb-service/key-builders.js.map +1 -1
  466. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.d.ts +82 -82
  467. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.js +28 -28
  468. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.js.map +1 -1
  469. package/dist/cjs/services/db/index.d.ts +22 -22
  470. package/dist/cjs/services/db/index.js +38 -38
  471. package/dist/cjs/services/db/log-events-db-service.d.ts +11 -11
  472. package/dist/cjs/services/db/log-events-db-service.js +181 -181
  473. package/dist/cjs/services/db/log-events-db-service.js.map +1 -1
  474. package/dist/cjs/services/db/pixels-db-service.d.ts +8 -8
  475. package/dist/cjs/services/db/pixels-db-service.js +35 -35
  476. package/dist/cjs/services/db/pixels-db-service.js.map +1 -1
  477. package/dist/cjs/services/db/products-db-service-types.d.ts +10 -10
  478. package/dist/cjs/services/db/products-db-service-types.js +2 -2
  479. package/dist/cjs/services/db/products-db-service.d.ts +19 -19
  480. package/dist/cjs/services/db/products-db-service.js +310 -281
  481. package/dist/cjs/services/db/products-db-service.js.map +1 -1
  482. package/dist/cjs/services/db/purchasable-contacts-db-service.d.ts +9 -9
  483. package/dist/cjs/services/db/purchasable-contacts-db-service.js +43 -43
  484. package/dist/cjs/services/db/purchasable-contacts-db-service.js.map +1 -1
  485. package/dist/cjs/services/db/purchased-contacts/index.d.ts +2 -2
  486. package/dist/cjs/services/db/purchased-contacts/index.js +18 -18
  487. package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.d.ts +18 -18
  488. package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.js +152 -152
  489. package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.js.map +1 -1
  490. package/dist/cjs/services/db/purchased-contacts/types.d.ts +11 -11
  491. package/dist/cjs/services/db/purchased-contacts/types.js +2 -2
  492. package/dist/cjs/services/db/shopify-app-installs-db-service.d.ts +10 -10
  493. package/dist/cjs/services/db/shopify-app-installs-db-service.js +52 -52
  494. package/dist/cjs/services/db/shopify-app-installs-db-service.js.map +1 -1
  495. package/dist/cjs/services/db/shopify-products-cache-db-service.d.ts +16 -16
  496. package/dist/cjs/services/db/shopify-products-cache-db-service.js +73 -73
  497. package/dist/cjs/services/db/shopify-products-cache-db-service.js.map +1 -1
  498. package/dist/cjs/services/db/subscriptions-db-service.d.ts +11 -11
  499. package/dist/cjs/services/db/subscriptions-db-service.js +38 -38
  500. package/dist/cjs/services/db/subscriptions-db-service.js.map +1 -1
  501. package/dist/cjs/services/db/tracking-events-db-service.d.ts +21 -21
  502. package/dist/cjs/services/db/tracking-events-db-service.js +188 -188
  503. package/dist/cjs/services/db/tracking-events-db-service.js.map +1 -1
  504. package/dist/cjs/services/db/user-accounts-db-service.d.ts +7 -7
  505. package/dist/cjs/services/db/user-accounts-db-service.js +17 -17
  506. package/dist/cjs/services/db/user-accounts-db-service.js.map +1 -1
  507. package/dist/cjs/services/email-verification/contact-email-verification-service.d.ts +7 -7
  508. package/dist/cjs/services/email-verification/contact-email-verification-service.js +101 -101
  509. package/dist/cjs/services/email-verification/contact-email-verification-service.js.map +1 -1
  510. package/dist/cjs/services/email-verification/email-verification-service.d.ts +19 -19
  511. package/dist/cjs/services/email-verification/email-verification-service.js +131 -131
  512. package/dist/cjs/services/email-verification/email-verification-service.js.map +1 -1
  513. package/dist/cjs/services/email-verification/index.d.ts +2 -2
  514. package/dist/cjs/services/email-verification/index.js +18 -18
  515. package/dist/cjs/services/eventbridge-integration-service.d.ts +9 -9
  516. package/dist/cjs/services/eventbridge-integration-service.js +28 -28
  517. package/dist/cjs/services/eventbridge-integration-service.js.map +1 -1
  518. package/dist/cjs/services/events/build-collect-queue-tracking-event.d.ts +11 -11
  519. package/dist/cjs/services/events/build-collect-queue-tracking-event.js +23 -23
  520. package/dist/cjs/services/events/build-collect-queue-tracking-event.js.map +1 -1
  521. package/dist/cjs/services/events/collect-queue-tracking-service.d.ts +12 -12
  522. package/dist/cjs/services/events/collect-queue-tracking-service.js +22 -22
  523. package/dist/cjs/services/events/collect-queue-tracking-service.js.map +1 -1
  524. package/dist/cjs/services/events/index.d.ts +5 -5
  525. package/dist/cjs/services/events/index.js +21 -21
  526. package/dist/cjs/services/events/log-event-service.d.ts +19 -19
  527. package/dist/cjs/services/events/log-event-service.js +77 -77
  528. package/dist/cjs/services/events/log-event-service.js.map +1 -1
  529. package/dist/cjs/services/events/metric-event-service.d.ts +9 -9
  530. package/dist/cjs/services/events/metric-event-service.js +49 -49
  531. package/dist/cjs/services/events/metric-event-service.js.map +1 -1
  532. package/dist/cjs/services/events/tracking-event-sqs-service.d.ts +8 -8
  533. package/dist/cjs/services/events/tracking-event-sqs-service.js +36 -36
  534. package/dist/cjs/services/events/tracking-event-sqs-service.js.map +1 -1
  535. package/dist/cjs/services/generic-cache-service.d.ts +7 -7
  536. package/dist/cjs/services/generic-cache-service.js +33 -33
  537. package/dist/cjs/services/generic-cache-service.js.map +1 -1
  538. package/dist/cjs/services/index.d.ts +11 -11
  539. package/dist/cjs/services/index.js +27 -27
  540. package/dist/cjs/services/ipdata-lookup-service.d.ts +20 -20
  541. package/dist/cjs/services/ipdata-lookup-service.js +112 -112
  542. package/dist/cjs/services/ipdata-lookup-service.js.map +1 -1
  543. package/dist/cjs/services/shopify/index.d.ts +2 -2
  544. package/dist/cjs/services/shopify/index.js +18 -18
  545. package/dist/cjs/services/shopify/products/index.d.ts +1 -1
  546. package/dist/cjs/services/shopify/products/index.js +17 -17
  547. package/dist/cjs/services/shopify/products/shopify-products-serviceV2.d.ts +17 -17
  548. package/dist/cjs/services/shopify/products/shopify-products-serviceV2.js +112 -112
  549. package/dist/cjs/services/shopify/products/shopify-products-serviceV2.js.map +1 -1
  550. package/dist/cjs/services/shopify/shopify-graphql-transformer.d.ts +8 -8
  551. package/dist/cjs/services/shopify/shopify-graphql-transformer.js +141 -141
  552. package/dist/cjs/services/shopify/shopify-graphql-transformer.js.map +1 -1
  553. package/dist/cjs/types/acuity-types.d.ts +74 -74
  554. package/dist/cjs/types/acuity-types.js +2 -2
  555. package/dist/cjs/types/api-response.d.ts +6 -6
  556. package/dist/cjs/types/api-response.js +2 -2
  557. package/dist/cjs/types/index.d.ts +6 -6
  558. package/dist/cjs/types/index.js +45 -35
  559. package/dist/cjs/types/index.js.map +1 -1
  560. package/dist/cjs/types/internal-events/event-detail-types.d.ts +20 -20
  561. package/dist/cjs/types/internal-events/event-detail-types.js +27 -27
  562. package/dist/cjs/types/internal-events/event-detail-types.js.map +1 -1
  563. package/dist/cjs/types/internal-events/index.d.ts +1 -1
  564. package/dist/cjs/types/internal-events/index.js +17 -17
  565. package/dist/cjs/types/open-exchange-rates-types.d.ts +10 -10
  566. package/dist/cjs/types/open-exchange-rates-types.js +2 -2
  567. package/dist/cjs/types/public-api-types.d.ts +24 -24
  568. package/dist/cjs/types/public-api-types.js +13 -13
  569. package/dist/cjs/types/public-api-types.js.map +1 -1
  570. package/dist/cjs/types/shopify-graphql-types/admin.generated.d.ts +123 -123
  571. package/dist/cjs/types/shopify-graphql-types/admin.generated.js +2 -2
  572. package/dist/cjs/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  573. package/dist/cjs/types/shopify-graphql-types/admin.types.js +5311 -5311
  574. package/dist/cjs/types/shopify-graphql-types/admin.types.js.map +1 -1
  575. package/dist/cjs/types/shopify-graphql-types/index.d.ts +2 -2
  576. package/dist/cjs/types/shopify-graphql-types/index.js +18 -18
  577. package/dist/cjs/types/shopify-rest-types.d.ts +767 -767
  578. package/dist/cjs/types/shopify-rest-types.js +2 -2
  579. package/dist/cjs/utils/compression.d.ts +34 -36
  580. package/dist/cjs/utils/compression.js +198 -198
  581. package/dist/cjs/utils/compression.js.map +1 -1
  582. package/dist/cjs/utils/custom-measure-formula-utils.d.ts +6 -6
  583. package/dist/cjs/utils/custom-measure-formula-utils.js +209 -209
  584. package/dist/cjs/utils/custom-measure-formula-utils.js.map +1 -1
  585. package/dist/cjs/utils/index.d.ts +4 -4
  586. package/dist/cjs/utils/index.js +20 -20
  587. package/dist/cjs/utils/retry-envelope.d.ts +12 -12
  588. package/dist/cjs/utils/retry-envelope.js +27 -28
  589. package/dist/cjs/utils/retry-envelope.js.map +1 -1
  590. package/dist/cjs/utils/size.d.ts +2 -2
  591. package/dist/cjs/utils/size.js +48 -49
  592. package/dist/cjs/utils/size.js.map +1 -1
  593. package/dist/esm/__tests__/clients/acuity-client.spec.d.ts +1 -1
  594. package/dist/esm/__tests__/clients/acuity-client.spec.js +42 -41
  595. package/dist/esm/__tests__/clients/acuity-client.spec.js.map +1 -1
  596. package/dist/esm/__tests__/clients/client-timeout-inventory.spec.d.ts +1 -0
  597. package/dist/esm/__tests__/clients/client-timeout-inventory.spec.js +19 -0
  598. package/dist/esm/__tests__/clients/client-timeout-inventory.spec.js.map +1 -0
  599. package/dist/esm/__tests__/clients/cross-platform-compression.spec.d.ts +1 -1
  600. package/dist/esm/__tests__/clients/cross-platform-compression.spec.js +330 -329
  601. package/dist/esm/__tests__/clients/cross-platform-compression.spec.js.map +1 -1
  602. package/dist/esm/__tests__/clients/dynamodb-client.spec.d.ts +1 -1
  603. package/dist/esm/__tests__/clients/dynamodb-client.spec.js +191 -192
  604. package/dist/esm/__tests__/clients/dynamodb-client.spec.js.map +1 -1
  605. package/dist/esm/__tests__/clients/event-collector-client.spec.d.ts +1 -1
  606. package/dist/esm/__tests__/clients/event-collector-client.spec.js +225 -225
  607. package/dist/esm/__tests__/clients/event-collector-client.spec.js.map +1 -1
  608. package/dist/esm/__tests__/clients/open-exchange-rates-client.spec.d.ts +1 -1
  609. package/dist/esm/__tests__/clients/open-exchange-rates-client.spec.js +54 -53
  610. package/dist/esm/__tests__/clients/open-exchange-rates-client.spec.js.map +1 -1
  611. package/dist/esm/__tests__/clients/redis-client.spec.d.ts +1 -0
  612. package/dist/esm/__tests__/clients/redis-client.spec.js +77 -0
  613. package/dist/esm/__tests__/clients/redis-client.spec.js.map +1 -0
  614. package/dist/esm/__tests__/clients/sqs-bundled-client.spec.d.ts +1 -1
  615. package/dist/esm/__tests__/clients/sqs-bundled-client.spec.js +914 -906
  616. package/dist/esm/__tests__/clients/sqs-bundled-client.spec.js.map +1 -1
  617. package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.d.ts +1 -1
  618. package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.js +540 -538
  619. package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.js.map +1 -1
  620. package/dist/esm/__tests__/clients/sqs-client.spec.d.ts +1 -1
  621. package/dist/esm/__tests__/clients/sqs-client.spec.js +190 -189
  622. package/dist/esm/__tests__/clients/sqs-client.spec.js.map +1 -1
  623. package/dist/esm/__tests__/clients/sqs-unbundle.spec.d.ts +1 -1
  624. package/dist/esm/__tests__/clients/sqs-unbundle.spec.js +1356 -1355
  625. package/dist/esm/__tests__/clients/sqs-unbundle.spec.js.map +1 -1
  626. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.d.ts +1 -1
  627. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js +67 -66
  628. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js.map +1 -1
  629. package/dist/esm/__tests__/db/destinations-db-service.spec.d.ts +1 -1
  630. package/dist/esm/__tests__/db/destinations-db-service.spec.js +121 -123
  631. package/dist/esm/__tests__/db/destinations-db-service.spec.js.map +1 -1
  632. package/dist/esm/__tests__/db/products-db-service.spec.d.ts +1 -1
  633. package/dist/esm/__tests__/db/products-db-service.spec.js +88 -87
  634. package/dist/esm/__tests__/db/products-db-service.spec.js.map +1 -1
  635. package/dist/esm/__tests__/db/shared-read-db-services.spec.d.ts +1 -1
  636. package/dist/esm/__tests__/db/shared-read-db-services.spec.js +88 -87
  637. package/dist/esm/__tests__/db/shared-read-db-services.spec.js.map +1 -1
  638. package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.d.ts +1 -1
  639. package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.js +103 -102
  640. package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.js.map +1 -1
  641. package/dist/esm/__tests__/db/subscriptions-db-service.spec.d.ts +1 -1
  642. package/dist/esm/__tests__/db/subscriptions-db-service.spec.js +94 -93
  643. package/dist/esm/__tests__/db/subscriptions-db-service.spec.js.map +1 -1
  644. package/dist/esm/__tests__/db/user-accounts-db-service.spec.d.ts +1 -1
  645. package/dist/esm/__tests__/db/user-accounts-db-service.spec.js +75 -74
  646. package/dist/esm/__tests__/db/user-accounts-db-service.spec.js.map +1 -1
  647. package/dist/esm/__tests__/helpers/account-users-helper.spec.d.ts +1 -1
  648. package/dist/esm/__tests__/helpers/account-users-helper.spec.js +219 -218
  649. package/dist/esm/__tests__/helpers/account-users-helper.spec.js.map +1 -1
  650. package/dist/esm/__tests__/helpers/acuity-helper.spec.d.ts +1 -1
  651. package/dist/esm/__tests__/helpers/acuity-helper.spec.js +68 -67
  652. package/dist/esm/__tests__/helpers/acuity-helper.spec.js.map +1 -1
  653. package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.d.ts +1 -1
  654. package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.js +81 -80
  655. package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.js.map +1 -1
  656. package/dist/esm/__tests__/helpers/cognito-auth-helper.spec.d.ts +1 -1
  657. package/dist/esm/__tests__/helpers/cognito-auth-helper.spec.js +45 -44
  658. package/dist/esm/__tests__/helpers/cognito-auth-helper.spec.js.map +1 -1
  659. package/dist/esm/__tests__/helpers/order-calculation-helper.spec.d.ts +1 -1
  660. package/dist/esm/__tests__/helpers/order-calculation-helper.spec.js +151 -150
  661. package/dist/esm/__tests__/helpers/order-calculation-helper.spec.js.map +1 -1
  662. package/dist/esm/__tests__/helpers/public-api-response-helper.spec.d.ts +1 -1
  663. package/dist/esm/__tests__/helpers/public-api-response-helper.spec.js +56 -55
  664. package/dist/esm/__tests__/helpers/public-api-response-helper.spec.js.map +1 -1
  665. package/dist/esm/__tests__/identity-cache/helpers.spec.d.ts +1 -1
  666. package/dist/esm/__tests__/identity-cache/helpers.spec.js +591 -590
  667. package/dist/esm/__tests__/identity-cache/helpers.spec.js.map +1 -1
  668. package/dist/esm/__tests__/identity-cache/identity-cache-alias-write.spec.d.ts +1 -1
  669. package/dist/esm/__tests__/identity-cache/identity-cache-alias-write.spec.js +69 -68
  670. package/dist/esm/__tests__/identity-cache/identity-cache-alias-write.spec.js.map +1 -1
  671. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.d.ts +1 -1
  672. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js +675 -674
  673. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js.map +1 -1
  674. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.d.ts +1 -1
  675. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js +748 -725
  676. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js.map +1 -1
  677. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.d.ts +1 -1
  678. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js +638 -629
  679. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js.map +1 -1
  680. package/dist/esm/__tests__/identity-cache/identity-client.spec.d.ts +1 -1
  681. package/dist/esm/__tests__/identity-cache/identity-client.spec.js +360 -357
  682. package/dist/esm/__tests__/identity-cache/identity-client.spec.js.map +1 -1
  683. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.d.ts +1 -1
  684. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.js +136 -135
  685. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.js.map +1 -1
  686. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.d.ts +1 -1
  687. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.js +163 -150
  688. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.js.map +1 -1
  689. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.d.ts +1 -1
  690. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.js +70 -69
  691. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.js.map +1 -1
  692. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.d.ts +1 -1
  693. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.js +93 -86
  694. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.js.map +1 -1
  695. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.d.ts +1 -1
  696. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js +134 -133
  697. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js.map +1 -1
  698. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.d.ts +1 -1
  699. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.js +243 -221
  700. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.js.map +1 -1
  701. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.d.ts +24 -28
  702. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.js +89 -82
  703. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.js.map +1 -1
  704. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.d.ts +1 -1
  705. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.js +1747 -1768
  706. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.js.map +1 -1
  707. package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.d.ts +1 -1
  708. package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.js +817 -816
  709. package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.js.map +1 -1
  710. package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.d.ts +1 -1
  711. package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.js +583 -582
  712. package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.js.map +1 -1
  713. package/dist/esm/__tests__/libs/compress-decompress.spec.d.ts +1 -1
  714. package/dist/esm/__tests__/libs/compress-decompress.spec.js +15 -14
  715. package/dist/esm/__tests__/libs/compress-decompress.spec.js.map +1 -1
  716. package/dist/esm/__tests__/libs/contacts.spec.d.ts +1 -1
  717. package/dist/esm/__tests__/libs/contacts.spec.js +293 -292
  718. package/dist/esm/__tests__/libs/contacts.spec.js.map +1 -1
  719. package/dist/esm/__tests__/libs/currency.spec.d.ts +1 -1
  720. package/dist/esm/__tests__/libs/currency.spec.js +219 -218
  721. package/dist/esm/__tests__/libs/currency.spec.js.map +1 -1
  722. package/dist/esm/__tests__/libs/dates.spec.d.ts +1 -1
  723. package/dist/esm/__tests__/libs/dates.spec.js +129 -128
  724. package/dist/esm/__tests__/libs/dates.spec.js.map +1 -1
  725. package/dist/esm/__tests__/libs/domain.spec.d.ts +1 -1
  726. package/dist/esm/__tests__/libs/domain.spec.js +106 -105
  727. package/dist/esm/__tests__/libs/domain.spec.js.map +1 -1
  728. package/dist/esm/__tests__/libs/numbers.spec.d.ts +1 -1
  729. package/dist/esm/__tests__/libs/numbers.spec.js +260 -259
  730. package/dist/esm/__tests__/libs/numbers.spec.js.map +1 -1
  731. package/dist/esm/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  732. package/dist/esm/__tests__/s3-client/s3-client.spec.js +30 -31
  733. package/dist/esm/__tests__/s3-client/s3-client.spec.js.map +1 -1
  734. package/dist/esm/__tests__/services/acuity-api-service.spec.d.ts +1 -1
  735. package/dist/esm/__tests__/services/acuity-api-service.spec.js +72 -69
  736. package/dist/esm/__tests__/services/acuity-api-service.spec.js.map +1 -1
  737. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.d.ts +1 -1
  738. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.js +22 -21
  739. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.js.map +1 -1
  740. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.d.ts +1 -1
  741. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js +3597 -3359
  742. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js.map +1 -1
  743. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.d.ts +1 -1
  744. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.js +113 -112
  745. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.js.map +1 -1
  746. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.d.ts +1 -1
  747. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.js +463 -466
  748. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.js.map +1 -1
  749. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.d.ts +1 -1
  750. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js +450 -358
  751. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js.map +1 -1
  752. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.d.ts +1 -1
  753. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.js +37 -32
  754. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.js.map +1 -1
  755. package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.d.ts +1 -1
  756. package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.js +93 -91
  757. package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.js.map +1 -1
  758. package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.d.ts +1 -1
  759. package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.js +60 -55
  760. package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.js.map +1 -1
  761. package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.d.ts +1 -1
  762. package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.js +230 -227
  763. package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.js.map +1 -1
  764. package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.d.ts +1 -1
  765. package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.js +192 -189
  766. package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.js.map +1 -1
  767. package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.d.ts +1 -1
  768. package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.js +34 -33
  769. package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.js.map +1 -1
  770. package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.d.ts +1 -1
  771. package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.js +157 -156
  772. package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.js.map +1 -1
  773. package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.d.ts +1 -1
  774. package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.js +68 -67
  775. package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.js.map +1 -1
  776. package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.d.ts +1 -1
  777. package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.js +145 -144
  778. package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.js.map +1 -1
  779. package/dist/esm/clients/generic/cognito-client.d.ts +23 -23
  780. package/dist/esm/clients/generic/cognito-client.js +204 -204
  781. package/dist/esm/clients/generic/cognito-client.js.map +1 -1
  782. package/dist/esm/clients/generic/dynamodb-client.d.ts +20 -20
  783. package/dist/esm/clients/generic/dynamodb-client.js +231 -231
  784. package/dist/esm/clients/generic/dynamodb-client.js.map +1 -1
  785. package/dist/esm/clients/generic/eventbridge-client.d.ts +14 -14
  786. package/dist/esm/clients/generic/eventbridge-client.js +47 -47
  787. package/dist/esm/clients/generic/eventbridge-client.js.map +1 -1
  788. package/dist/esm/clients/generic/http-client.d.ts +14 -14
  789. package/dist/esm/clients/generic/http-client.js +53 -53
  790. package/dist/esm/clients/generic/http-client.js.map +1 -1
  791. package/dist/esm/clients/generic/index.d.ts +13 -13
  792. package/dist/esm/clients/generic/index.js +13 -13
  793. package/dist/esm/clients/generic/lambda-invoke-client.d.ts +10 -10
  794. package/dist/esm/clients/generic/lambda-invoke-client.js +35 -35
  795. package/dist/esm/clients/generic/lambda-invoke-client.js.map +1 -1
  796. package/dist/esm/clients/generic/location-client.d.ts +8 -8
  797. package/dist/esm/clients/generic/location-client.js +27 -27
  798. package/dist/esm/clients/generic/location-client.js.map +1 -1
  799. package/dist/esm/clients/generic/redis-client.d.ts +33 -33
  800. package/dist/esm/clients/generic/redis-client.js +195 -184
  801. package/dist/esm/clients/generic/redis-client.js.map +1 -1
  802. package/dist/esm/clients/generic/s3-client.d.ts +22 -23
  803. package/dist/esm/clients/generic/s3-client.js +209 -209
  804. package/dist/esm/clients/generic/s3-client.js.map +1 -1
  805. package/dist/esm/clients/generic/singlestore-db-client.d.ts +21 -21
  806. package/dist/esm/clients/generic/singlestore-db-client.js +65 -65
  807. package/dist/esm/clients/generic/singlestore-db-client.js.map +1 -1
  808. package/dist/esm/clients/generic/sqs-bundled-client.d.ts +15 -15
  809. package/dist/esm/clients/generic/sqs-bundled-client.js +307 -307
  810. package/dist/esm/clients/generic/sqs-bundled-client.js.map +1 -1
  811. package/dist/esm/clients/generic/sqs-bundled-client.types.d.ts +53 -53
  812. package/dist/esm/clients/generic/sqs-bundled-client.types.js +14 -14
  813. package/dist/esm/clients/generic/sqs-client.d.ts +53 -53
  814. package/dist/esm/clients/generic/sqs-client.js +281 -281
  815. package/dist/esm/clients/generic/sqs-client.js.map +1 -1
  816. package/dist/esm/clients/generic/sqs-unbundle.d.ts +32 -32
  817. package/dist/esm/clients/generic/sqs-unbundle.js +137 -137
  818. package/dist/esm/clients/generic/sqs-unbundle.js.map +1 -1
  819. package/dist/esm/clients/index.d.ts +3 -3
  820. package/dist/esm/clients/index.js +3 -3
  821. package/dist/esm/clients/internal-api/accounts-client.d.ts +91 -91
  822. package/dist/esm/clients/internal-api/accounts-client.js +125 -125
  823. package/dist/esm/clients/internal-api/accounts-client.js.map +1 -1
  824. package/dist/esm/clients/internal-api/cache-lambda-client.d.ts +26 -26
  825. package/dist/esm/clients/internal-api/cache-lambda-client.js +85 -85
  826. package/dist/esm/clients/internal-api/cache-lambda-client.js.map +1 -1
  827. package/dist/esm/clients/internal-api/db-management-client.d.ts +18 -18
  828. package/dist/esm/clients/internal-api/db-management-client.js +32 -32
  829. package/dist/esm/clients/internal-api/destinations-client.d.ts +34 -34
  830. package/dist/esm/clients/internal-api/destinations-client.js +75 -75
  831. package/dist/esm/clients/internal-api/destinations-client.js.map +1 -1
  832. package/dist/esm/clients/internal-api/event-collector-client.d.ts +122 -122
  833. package/dist/esm/clients/internal-api/event-collector-client.js +74 -74
  834. package/dist/esm/clients/internal-api/event-collector-client.js.map +1 -1
  835. package/dist/esm/clients/internal-api/identity-client.d.ts +41 -41
  836. package/dist/esm/clients/internal-api/identity-client.js +133 -133
  837. package/dist/esm/clients/internal-api/identity-client.js.map +1 -1
  838. package/dist/esm/clients/internal-api/index.d.ts +9 -9
  839. package/dist/esm/clients/internal-api/index.js +9 -9
  840. package/dist/esm/clients/internal-api/shopify-app-install-client.d.ts +37 -37
  841. package/dist/esm/clients/internal-api/shopify-app-install-client.js +77 -77
  842. package/dist/esm/clients/internal-api/subscriptions-client.d.ts +26 -26
  843. package/dist/esm/clients/internal-api/subscriptions-client.js +73 -73
  844. package/dist/esm/clients/internal-api/users-auth-client.d.ts +35 -35
  845. package/dist/esm/clients/internal-api/users-auth-client.js +106 -106
  846. package/dist/esm/clients/internal-api/users-auth-client.js.map +1 -1
  847. package/dist/esm/clients/third-party/acuity-client.d.ts +10 -10
  848. package/dist/esm/clients/third-party/acuity-client.js +36 -36
  849. package/dist/esm/clients/third-party/emailable-client.d.ts +7 -7
  850. package/dist/esm/clients/third-party/emailable-client.js +21 -21
  851. package/dist/esm/clients/third-party/emailable-client.js.map +1 -1
  852. package/dist/esm/clients/third-party/exchange-rate-api-client.d.ts +17 -17
  853. package/dist/esm/clients/third-party/exchange-rate-api-client.js +15 -15
  854. package/dist/esm/clients/third-party/index.d.ts +6 -6
  855. package/dist/esm/clients/third-party/index.js +6 -6
  856. package/dist/esm/clients/third-party/loops-client.d.ts +10 -10
  857. package/dist/esm/clients/third-party/loops-client.js +26 -26
  858. package/dist/esm/clients/third-party/loops-client.js.map +1 -1
  859. package/dist/esm/clients/third-party/open-exchange-rates-client.d.ts +8 -8
  860. package/dist/esm/clients/third-party/open-exchange-rates-client.js +23 -23
  861. package/dist/esm/clients/third-party/open-exchange-rates-client.js.map +1 -1
  862. package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.d.ts +18 -18
  863. package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.js +19 -19
  864. package/dist/esm/clients/third-party/shopify/graphql-order-queries.d.ts +25 -25
  865. package/dist/esm/clients/third-party/shopify/graphql-order-queries.js +1 -1
  866. package/dist/esm/clients/third-party/shopify/graphql-product-queries.d.ts +2 -2
  867. package/dist/esm/clients/third-party/shopify/graphql-product-queries.js +2 -2
  868. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.d.ts +42 -42
  869. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js +348 -348
  870. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js.map +1 -1
  871. package/dist/esm/clients/third-party/shopify-client.d.ts +29 -29
  872. package/dist/esm/clients/third-party/shopify-client.js +142 -142
  873. package/dist/esm/clients/third-party/shopify-client.js.map +1 -1
  874. package/dist/esm/constants/index.d.ts +1 -1
  875. package/dist/esm/constants/index.js +1 -1
  876. package/dist/esm/constants/sqs.d.ts +20 -20
  877. package/dist/esm/constants/sqs.js +22 -22
  878. package/dist/esm/constants/sqs.js.map +1 -1
  879. package/dist/esm/helpers/account-users-helper.d.ts +2 -2
  880. package/dist/esm/helpers/account-users-helper.js +18 -18
  881. package/dist/esm/helpers/account-users-helper.js.map +1 -1
  882. package/dist/esm/helpers/acuity-helper.d.ts +4 -4
  883. package/dist/esm/helpers/acuity-helper.js +51 -51
  884. package/dist/esm/helpers/acuity-helper.js.map +1 -1
  885. package/dist/esm/helpers/api-key-auth-helper.d.ts +10 -9
  886. package/dist/esm/helpers/api-key-auth-helper.js +35 -35
  887. package/dist/esm/helpers/api-key-auth-helper.js.map +1 -1
  888. package/dist/esm/helpers/api-key-authorizer-helper.d.ts +36 -36
  889. package/dist/esm/helpers/api-key-authorizer-helper.js +83 -83
  890. package/dist/esm/helpers/api-key-authorizer-helper.js.map +1 -1
  891. package/dist/esm/helpers/cognito-auth-helper.d.ts +6 -5
  892. package/dist/esm/helpers/cognito-auth-helper.js +10 -10
  893. package/dist/esm/helpers/cognito-auth-helper.js.map +1 -1
  894. package/dist/esm/helpers/index.d.ts +12 -12
  895. package/dist/esm/helpers/index.js +12 -12
  896. package/dist/esm/helpers/input-validation-helper.d.ts +3 -3
  897. package/dist/esm/helpers/input-validation-helper.js +18 -18
  898. package/dist/esm/helpers/input-validation-helper.js.map +1 -1
  899. package/dist/esm/helpers/logging-helper.d.ts +16 -16
  900. package/dist/esm/helpers/logging-helper.js +56 -56
  901. package/dist/esm/helpers/logging-helper.js.map +1 -1
  902. package/dist/esm/helpers/order-calculation-helper.d.ts +13 -13
  903. package/dist/esm/helpers/order-calculation-helper.js +111 -111
  904. package/dist/esm/helpers/order-calculation-helper.js.map +1 -1
  905. package/dist/esm/helpers/public-api-response-helper.d.ts +21 -21
  906. package/dist/esm/helpers/public-api-response-helper.js +38 -38
  907. package/dist/esm/helpers/public-api-response-helper.js.map +1 -1
  908. package/dist/esm/helpers/response-helper.d.ts +18 -18
  909. package/dist/esm/helpers/response-helper.js +37 -37
  910. package/dist/esm/helpers/response-helper.js.map +1 -1
  911. package/dist/esm/helpers/shopify-helper.d.ts +9 -9
  912. package/dist/esm/helpers/shopify-helper.js +21 -21
  913. package/dist/esm/helpers/shopify-helper.js.map +1 -1
  914. package/dist/esm/helpers/sqs-utils.d.ts +6 -6
  915. package/dist/esm/helpers/sqs-utils.js +14 -9
  916. package/dist/esm/helpers/sqs-utils.js.map +1 -1
  917. package/dist/esm/index.d.ts +7 -7
  918. package/dist/esm/index.js +7 -7
  919. package/dist/esm/libs/api-router/index.d.ts +2 -2
  920. package/dist/esm/libs/api-router/index.js +2 -2
  921. package/dist/esm/libs/api-router/public-api-router.d.ts +3 -3
  922. package/dist/esm/libs/api-router/public-api-router.js +32 -32
  923. package/dist/esm/libs/api-router/public-api-router.js.map +1 -1
  924. package/dist/esm/libs/api-router/route-matcher.d.ts +21 -21
  925. package/dist/esm/libs/api-router/route-matcher.js +30 -30
  926. package/dist/esm/libs/api-router/route-matcher.js.map +1 -1
  927. package/dist/esm/libs/click-id-parser.d.ts +23 -23
  928. package/dist/esm/libs/click-id-parser.js +45 -45
  929. package/dist/esm/libs/click-id-parser.js.map +1 -1
  930. package/dist/esm/libs/compression.d.ts +2 -2
  931. package/dist/esm/libs/compression.js +25 -25
  932. package/dist/esm/libs/compression.js.map +1 -1
  933. package/dist/esm/libs/contacts.d.ts +7 -7
  934. package/dist/esm/libs/contacts.js +143 -143
  935. package/dist/esm/libs/contacts.js.map +1 -1
  936. package/dist/esm/libs/cookie.d.ts +17 -17
  937. package/dist/esm/libs/cookie.js +70 -70
  938. package/dist/esm/libs/cookie.js.map +1 -1
  939. package/dist/esm/libs/crypto.d.ts +4 -4
  940. package/dist/esm/libs/crypto.js +15 -15
  941. package/dist/esm/libs/csv.d.ts +2 -2
  942. package/dist/esm/libs/csv.js +30 -30
  943. package/dist/esm/libs/csv.js.map +1 -1
  944. package/dist/esm/libs/currency.d.ts +1 -1
  945. package/dist/esm/libs/currency.js +22 -22
  946. package/dist/esm/libs/currency.js.map +1 -1
  947. package/dist/esm/libs/dates.d.ts +12 -12
  948. package/dist/esm/libs/dates.js +83 -83
  949. package/dist/esm/libs/dates.js.map +1 -1
  950. package/dist/esm/libs/domain.d.ts +2 -2
  951. package/dist/esm/libs/domain.js +33 -33
  952. package/dist/esm/libs/domain.js.map +1 -1
  953. package/dist/esm/libs/emails.d.ts +8 -8
  954. package/dist/esm/libs/emails.js +146 -146
  955. package/dist/esm/libs/emails.js.map +1 -1
  956. package/dist/esm/libs/http-error.d.ts +21 -21
  957. package/dist/esm/libs/http-error.js +59 -59
  958. package/dist/esm/libs/http-error.js.map +1 -1
  959. package/dist/esm/libs/http-status-codes.d.ts +58 -58
  960. package/dist/esm/libs/http-status-codes.js +59 -59
  961. package/dist/esm/libs/index.d.ts +19 -19
  962. package/dist/esm/libs/index.js +19 -19
  963. package/dist/esm/libs/numbers.d.ts +1 -1
  964. package/dist/esm/libs/numbers.js +11 -11
  965. package/dist/esm/libs/numbers.js.map +1 -1
  966. package/dist/esm/libs/referrer-parser/index.d.ts +2 -2
  967. package/dist/esm/libs/referrer-parser/index.js +2 -2
  968. package/dist/esm/libs/referrer-parser/referrer-data.d.ts +9 -9
  969. package/dist/esm/libs/referrer-parser/referrer-data.js +3304 -3304
  970. package/dist/esm/libs/referrer-parser/referrer-parser-util.d.ts +19 -20
  971. package/dist/esm/libs/referrer-parser/referrer-parser-util.js +124 -124
  972. package/dist/esm/libs/referrer-parser/referrer-parser-util.js.map +1 -1
  973. package/dist/esm/libs/strings.d.ts +3 -3
  974. package/dist/esm/libs/strings.js +40 -40
  975. package/dist/esm/libs/strings.js.map +1 -1
  976. package/dist/esm/libs/traits.d.ts +6 -6
  977. package/dist/esm/libs/traits.js +54 -54
  978. package/dist/esm/libs/traits.js.map +1 -1
  979. package/dist/esm/libs/url.d.ts +1 -1
  980. package/dist/esm/libs/url.js +9 -9
  981. package/dist/esm/services/acuity-api-service.d.ts +9 -9
  982. package/dist/esm/services/acuity-api-service.js +69 -69
  983. package/dist/esm/services/acuity-api-service.js.map +1 -1
  984. package/dist/esm/services/cache/generic-cached-object.d.ts +5 -5
  985. package/dist/esm/services/cache/generic-cached-object.js +1 -1
  986. package/dist/esm/services/cache/index.d.ts +1 -1
  987. package/dist/esm/services/cache/index.js +1 -1
  988. package/dist/esm/services/cache/product-cache-service.d.ts +21 -21
  989. package/dist/esm/services/cache/product-cache-service.js +68 -68
  990. package/dist/esm/services/cache/product-cache-service.js.map +1 -1
  991. package/dist/esm/services/cost/cost-calculation-types.d.ts +69 -69
  992. package/dist/esm/services/cost/cost-calculation-types.js +15 -15
  993. package/dist/esm/services/cost/cost-calculation-types.js.map +1 -1
  994. package/dist/esm/services/cost/cost-calculator-service.d.ts +24 -24
  995. package/dist/esm/services/cost/cost-calculator-service.js +489 -456
  996. package/dist/esm/services/cost/cost-calculator-service.js.map +1 -1
  997. package/dist/esm/services/cost/cost-currency-service.d.ts +6 -6
  998. package/dist/esm/services/cost/cost-currency-service.js +84 -84
  999. package/dist/esm/services/cost/cost-currency-service.js.map +1 -1
  1000. package/dist/esm/services/cost/cost-filter-service.d.ts +10 -10
  1001. package/dist/esm/services/cost/cost-filter-service.js +127 -118
  1002. package/dist/esm/services/cost/cost-filter-service.js.map +1 -1
  1003. package/dist/esm/services/cost/index.d.ts +5 -5
  1004. package/dist/esm/services/cost/index.js +5 -5
  1005. package/dist/esm/services/cost/order-cost/index.d.ts +2 -2
  1006. package/dist/esm/services/cost/order-cost/index.js +2 -2
  1007. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.d.ts +23 -23
  1008. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js +302 -287
  1009. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js.map +1 -1
  1010. package/dist/esm/services/cost/order-cost/order-cost-resolution-types.d.ts +31 -31
  1011. package/dist/esm/services/cost/order-cost/order-cost-resolution-types.js +1 -1
  1012. package/dist/esm/services/currency-exchange-rate-lookup-service.d.ts +12 -12
  1013. package/dist/esm/services/currency-exchange-rate-lookup-service.js +93 -90
  1014. package/dist/esm/services/currency-exchange-rate-lookup-service.js.map +1 -1
  1015. package/dist/esm/services/db/accounts-db-service.d.ts +9 -9
  1016. package/dist/esm/services/db/accounts-db-service.js +29 -29
  1017. package/dist/esm/services/db/accounts-db-service.js.map +1 -1
  1018. package/dist/esm/services/db/api-keys-db-service.d.ts +10 -10
  1019. package/dist/esm/services/db/api-keys-db-service.js +32 -32
  1020. package/dist/esm/services/db/api-keys-db-service.js.map +1 -1
  1021. package/dist/esm/services/db/contact-enrichments-db-service.d.ts +15 -15
  1022. package/dist/esm/services/db/contact-enrichments-db-service.js +90 -90
  1023. package/dist/esm/services/db/contact-enrichments-db-service.js.map +1 -1
  1024. package/dist/esm/services/db/currency-exchange-rates-db-service.d.ts +21 -21
  1025. package/dist/esm/services/db/currency-exchange-rates-db-service.js +35 -35
  1026. package/dist/esm/services/db/custom-measures-db-service.d.ts +14 -14
  1027. package/dist/esm/services/db/custom-measures-db-service.js +44 -44
  1028. package/dist/esm/services/db/custom-measures-db-service.js.map +1 -1
  1029. package/dist/esm/services/db/destinations-db-service.d.ts +13 -13
  1030. package/dist/esm/services/db/destinations-db-service.js +70 -70
  1031. package/dist/esm/services/db/identity-cache-db-service.d.ts +28 -28
  1032. package/dist/esm/services/db/identity-cache-db-service.js +313 -313
  1033. package/dist/esm/services/db/identity-cache-db-service.js.map +1 -1
  1034. package/dist/esm/services/db/identity-cache-dynamodb-service/constants.d.ts +3 -3
  1035. package/dist/esm/services/db/identity-cache-dynamodb-service/constants.js +3 -3
  1036. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.d.ts +25 -25
  1037. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +525 -521
  1038. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js.map +1 -1
  1039. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.d.ts +23 -23
  1040. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +232 -218
  1041. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js.map +1 -1
  1042. package/dist/esm/services/db/identity-cache-dynamodb-service/index.d.ts +4 -4
  1043. package/dist/esm/services/db/identity-cache-dynamodb-service/index.js +4 -4
  1044. package/dist/esm/services/db/identity-cache-dynamodb-service/key-builders.d.ts +12 -12
  1045. package/dist/esm/services/db/identity-cache-dynamodb-service/key-builders.js +23 -23
  1046. package/dist/esm/services/db/identity-cache-dynamodb-service/types.d.ts +82 -82
  1047. package/dist/esm/services/db/identity-cache-dynamodb-service/types.js +25 -25
  1048. package/dist/esm/services/db/identity-cache-dynamodb-service/types.js.map +1 -1
  1049. package/dist/esm/services/db/index.d.ts +22 -22
  1050. package/dist/esm/services/db/index.js +22 -22
  1051. package/dist/esm/services/db/log-events-db-service.d.ts +11 -11
  1052. package/dist/esm/services/db/log-events-db-service.js +177 -177
  1053. package/dist/esm/services/db/log-events-db-service.js.map +1 -1
  1054. package/dist/esm/services/db/pixels-db-service.d.ts +8 -8
  1055. package/dist/esm/services/db/pixels-db-service.js +31 -31
  1056. package/dist/esm/services/db/products-db-service-types.d.ts +10 -10
  1057. package/dist/esm/services/db/products-db-service-types.js +1 -1
  1058. package/dist/esm/services/db/products-db-service.d.ts +19 -19
  1059. package/dist/esm/services/db/products-db-service.js +306 -277
  1060. package/dist/esm/services/db/products-db-service.js.map +1 -1
  1061. package/dist/esm/services/db/purchasable-contacts-db-service.d.ts +9 -9
  1062. package/dist/esm/services/db/purchasable-contacts-db-service.js +39 -39
  1063. package/dist/esm/services/db/purchasable-contacts-db-service.js.map +1 -1
  1064. package/dist/esm/services/db/purchased-contacts/index.d.ts +2 -2
  1065. package/dist/esm/services/db/purchased-contacts/index.js +2 -2
  1066. package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.d.ts +18 -18
  1067. package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.js +148 -148
  1068. package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.js.map +1 -1
  1069. package/dist/esm/services/db/purchased-contacts/types.d.ts +11 -11
  1070. package/dist/esm/services/db/purchased-contacts/types.js +1 -1
  1071. package/dist/esm/services/db/shopify-app-installs-db-service.d.ts +10 -10
  1072. package/dist/esm/services/db/shopify-app-installs-db-service.js +48 -48
  1073. package/dist/esm/services/db/shopify-app-installs-db-service.js.map +1 -1
  1074. package/dist/esm/services/db/shopify-products-cache-db-service.d.ts +16 -16
  1075. package/dist/esm/services/db/shopify-products-cache-db-service.js +66 -66
  1076. package/dist/esm/services/db/shopify-products-cache-db-service.js.map +1 -1
  1077. package/dist/esm/services/db/subscriptions-db-service.d.ts +11 -11
  1078. package/dist/esm/services/db/subscriptions-db-service.js +34 -34
  1079. package/dist/esm/services/db/subscriptions-db-service.js.map +1 -1
  1080. package/dist/esm/services/db/tracking-events-db-service.d.ts +21 -21
  1081. package/dist/esm/services/db/tracking-events-db-service.js +184 -184
  1082. package/dist/esm/services/db/tracking-events-db-service.js.map +1 -1
  1083. package/dist/esm/services/db/user-accounts-db-service.d.ts +7 -7
  1084. package/dist/esm/services/db/user-accounts-db-service.js +13 -13
  1085. package/dist/esm/services/email-verification/contact-email-verification-service.d.ts +7 -7
  1086. package/dist/esm/services/email-verification/contact-email-verification-service.js +97 -97
  1087. package/dist/esm/services/email-verification/contact-email-verification-service.js.map +1 -1
  1088. package/dist/esm/services/email-verification/email-verification-service.d.ts +19 -19
  1089. package/dist/esm/services/email-verification/email-verification-service.js +127 -127
  1090. package/dist/esm/services/email-verification/email-verification-service.js.map +1 -1
  1091. package/dist/esm/services/email-verification/index.d.ts +2 -2
  1092. package/dist/esm/services/email-verification/index.js +2 -2
  1093. package/dist/esm/services/eventbridge-integration-service.d.ts +9 -9
  1094. package/dist/esm/services/eventbridge-integration-service.js +24 -24
  1095. package/dist/esm/services/events/build-collect-queue-tracking-event.d.ts +11 -11
  1096. package/dist/esm/services/events/build-collect-queue-tracking-event.js +19 -19
  1097. package/dist/esm/services/events/build-collect-queue-tracking-event.js.map +1 -1
  1098. package/dist/esm/services/events/collect-queue-tracking-service.d.ts +12 -12
  1099. package/dist/esm/services/events/collect-queue-tracking-service.js +18 -18
  1100. package/dist/esm/services/events/collect-queue-tracking-service.js.map +1 -1
  1101. package/dist/esm/services/events/index.d.ts +5 -5
  1102. package/dist/esm/services/events/index.js +5 -5
  1103. package/dist/esm/services/events/log-event-service.d.ts +19 -19
  1104. package/dist/esm/services/events/log-event-service.js +73 -73
  1105. package/dist/esm/services/events/log-event-service.js.map +1 -1
  1106. package/dist/esm/services/events/metric-event-service.d.ts +9 -9
  1107. package/dist/esm/services/events/metric-event-service.js +45 -45
  1108. package/dist/esm/services/events/metric-event-service.js.map +1 -1
  1109. package/dist/esm/services/events/tracking-event-sqs-service.d.ts +8 -8
  1110. package/dist/esm/services/events/tracking-event-sqs-service.js +32 -32
  1111. package/dist/esm/services/events/tracking-event-sqs-service.js.map +1 -1
  1112. package/dist/esm/services/generic-cache-service.d.ts +7 -7
  1113. package/dist/esm/services/generic-cache-service.js +29 -29
  1114. package/dist/esm/services/generic-cache-service.js.map +1 -1
  1115. package/dist/esm/services/index.d.ts +11 -11
  1116. package/dist/esm/services/index.js +11 -11
  1117. package/dist/esm/services/ipdata-lookup-service.d.ts +20 -20
  1118. package/dist/esm/services/ipdata-lookup-service.js +108 -108
  1119. package/dist/esm/services/ipdata-lookup-service.js.map +1 -1
  1120. package/dist/esm/services/shopify/index.d.ts +2 -2
  1121. package/dist/esm/services/shopify/index.js +2 -2
  1122. package/dist/esm/services/shopify/products/index.d.ts +1 -1
  1123. package/dist/esm/services/shopify/products/index.js +1 -1
  1124. package/dist/esm/services/shopify/products/shopify-products-serviceV2.d.ts +17 -17
  1125. package/dist/esm/services/shopify/products/shopify-products-serviceV2.js +108 -108
  1126. package/dist/esm/services/shopify/products/shopify-products-serviceV2.js.map +1 -1
  1127. package/dist/esm/services/shopify/shopify-graphql-transformer.d.ts +8 -8
  1128. package/dist/esm/services/shopify/shopify-graphql-transformer.js +138 -138
  1129. package/dist/esm/services/shopify/shopify-graphql-transformer.js.map +1 -1
  1130. package/dist/esm/types/acuity-types.d.ts +74 -74
  1131. package/dist/esm/types/acuity-types.js +1 -1
  1132. package/dist/esm/types/api-response.d.ts +6 -6
  1133. package/dist/esm/types/api-response.js +1 -1
  1134. package/dist/esm/types/index.d.ts +6 -6
  1135. package/dist/esm/types/index.js +6 -6
  1136. package/dist/esm/types/internal-events/event-detail-types.d.ts +20 -20
  1137. package/dist/esm/types/internal-events/event-detail-types.js +24 -24
  1138. package/dist/esm/types/internal-events/index.d.ts +1 -1
  1139. package/dist/esm/types/internal-events/index.js +1 -1
  1140. package/dist/esm/types/open-exchange-rates-types.d.ts +10 -10
  1141. package/dist/esm/types/open-exchange-rates-types.js +1 -1
  1142. package/dist/esm/types/public-api-types.d.ts +24 -24
  1143. package/dist/esm/types/public-api-types.js +10 -10
  1144. package/dist/esm/types/shopify-graphql-types/admin.generated.d.ts +123 -123
  1145. package/dist/esm/types/shopify-graphql-types/admin.generated.js +1 -1
  1146. package/dist/esm/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  1147. package/dist/esm/types/shopify-graphql-types/admin.types.js +5299 -5299
  1148. package/dist/esm/types/shopify-graphql-types/index.d.ts +2 -2
  1149. package/dist/esm/types/shopify-graphql-types/index.js +2 -2
  1150. package/dist/esm/types/shopify-rest-types.d.ts +767 -767
  1151. package/dist/esm/types/shopify-rest-types.js +1 -1
  1152. package/dist/esm/utils/compression.d.ts +34 -36
  1153. package/dist/esm/utils/compression.js +187 -187
  1154. package/dist/esm/utils/compression.js.map +1 -1
  1155. package/dist/esm/utils/custom-measure-formula-utils.d.ts +6 -6
  1156. package/dist/esm/utils/custom-measure-formula-utils.js +201 -201
  1157. package/dist/esm/utils/custom-measure-formula-utils.js.map +1 -1
  1158. package/dist/esm/utils/index.d.ts +4 -4
  1159. package/dist/esm/utils/index.js +4 -4
  1160. package/dist/esm/utils/retry-envelope.d.ts +12 -12
  1161. package/dist/esm/utils/retry-envelope.js +22 -22
  1162. package/dist/esm/utils/retry-envelope.js.map +1 -1
  1163. package/dist/esm/utils/size.d.ts +2 -2
  1164. package/dist/esm/utils/size.js +44 -44
  1165. package/dist/esm/utils/size.js.map +1 -1
  1166. package/package.json +45 -40
@@ -1,726 +1,749 @@
1
- jest.mock('../../clients/index.js', () => ({
2
- DynamoDbClient: {
3
- safeGet: jest.fn(),
4
- safePut: jest.fn(),
5
- safeDelete: jest.fn(),
6
- safeBatchGet: jest.fn(),
7
- safeBatchWrite: jest.fn(),
8
- safeQueryByGSI: jest.fn(),
9
- batchGet: jest.fn(),
10
- batchWrite: jest.fn(),
11
- },
12
- }));
13
- jest.mock('../../helpers/index.js', () => ({
14
- Logger: {
15
- debug: jest.fn(),
16
- info: jest.fn(),
17
- warn: jest.fn(),
18
- error: jest.fn(),
19
- },
20
- }));
21
- import { IdentityCacheDynamoDbDbService } from '../../services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js';
22
- import { DynamoDbClient } from '../../clients/index.js';
23
- import { Logger } from '../../helpers/index.js';
24
- import { IDENTITY_CACHE_TABLE_NAME } from '../../services/db/identity-cache-dynamodb-service/constants.js';
25
- const mockedDynamoDbClient = DynamoDbClient;
26
- const mockedLogger = Logger;
27
- describe('IdentityCacheDynamoDbDbService.getIdentityFromCachePure()', () => {
28
- const pixelId = 'pixel-test-123';
29
- beforeEach(() => {
30
- jest.clearAllMocks();
31
- mockedDynamoDbClient.safeGet.mockReset();
32
- mockedDynamoDbClient.safePut.mockReset();
33
- mockedDynamoDbClient.safeBatchWrite.mockReset();
34
- mockedDynamoDbClient.batchGet.mockReset();
35
- mockedDynamoDbClient.batchWrite.mockReset();
36
- });
37
- describe('cache hit by identity ID', () => {
38
- it('should return cachedIdentity with lookupPath=identity_id and cacheHit=true', async () => {
39
- const incomingIdentity = {
40
- identityId: 'identity-123',
41
- traits: { emails: ['test@email.com'] },
42
- };
43
- const cachedRecord = {
44
- pk: `identity#${pixelId}#identity-123`,
45
- pixelId,
46
- identityId: 'identity-123',
47
- response: {
48
- identityId: 'identity-123',
49
- traits: {
50
- emails: ['test@email.com', 'cached@email.com'],
51
- phones: ['555-1234'],
52
- },
53
- },
54
- updatedAt: new Date().toISOString(),
55
- };
56
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
57
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
58
- expect(result.cacheHit).toBe(true);
59
- expect(result.lookupPath).toBe('identity_id');
60
- expect(result.cachedIdentity).toEqual(cachedRecord.response);
61
- expect(result.discoveredIdentityId).toBeUndefined();
62
- expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledTimes(1);
63
- expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `identity#${pixelId}#identity-123`);
64
- });
65
- it('should return cachedIdentity with all traits preserved', async () => {
66
- const incomingIdentity = {
67
- identityId: 'full-traits-id',
68
- traits: { emails: ['new@email.com'] },
69
- };
70
- const fullCachedIdentity = {
71
- identityId: 'full-traits-id',
72
- traits: {
73
- emails: ['existing@email.com', 'another@email.com'],
74
- phones: ['555-1111', '555-2222'],
75
- addresses: [{ city: 'New York', zip: '10001' }],
76
- userIds: ['user-1', 'user-2'],
77
- shopifyYIds: ['shopify-y-1'],
78
- click: { fbp: 'fb.1.123.456' },
79
- ipAddress: '192.168.1.1',
80
- userAgent: 'Mozilla/5.0...',
81
- },
82
- };
83
- const cachedRecord = {
84
- pk: `identity#${pixelId}#full-traits-id`,
85
- pixelId,
86
- identityId: 'full-traits-id',
87
- response: fullCachedIdentity,
88
- updatedAt: new Date().toISOString(),
89
- };
90
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
91
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
92
- expect(result.cacheHit).toBe(true);
93
- expect(result.cachedIdentity).toEqual(fullCachedIdentity);
94
- expect(result.cachedIdentity?.traits?.emails).toHaveLength(2);
95
- expect(result.cachedIdentity?.traits?.phones).toHaveLength(2);
96
- expect(result.cachedIdentity?.traits?.addresses).toHaveLength(1);
97
- });
98
- it('should NOT perform any merge logic', async () => {
99
- const incomingIdentity = {
100
- identityId: 'merge-test-id',
101
- traits: {
102
- emails: ['new-email@test.com'],
103
- phones: ['999-0000'],
104
- },
105
- };
106
- const cachedRecord = {
107
- pk: `identity#${pixelId}#merge-test-id`,
108
- pixelId,
109
- identityId: 'merge-test-id',
110
- response: {
111
- identityId: 'merge-test-id',
112
- traits: {
113
- emails: ['old-email@test.com'],
114
- phones: ['111-2222'],
115
- },
116
- },
117
- updatedAt: new Date().toISOString(),
118
- };
119
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
120
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
121
- expect(result.cachedIdentity?.traits?.emails).toEqual(['old-email@test.com']);
122
- expect(result.cachedIdentity?.traits?.phones).toEqual(['111-2222']);
123
- expect(result.cachedIdentity?.traits?.emails).not.toContain('new-email@test.com');
124
- });
125
- it('should NOT perform staleness computation', async () => {
126
- const incomingIdentity = {
127
- identityId: 'stale-test-id',
128
- traits: {
129
- emails: ['new-email@test.com'],
130
- },
131
- };
132
- const cachedRecord = {
133
- pk: `identity#${pixelId}#stale-test-id`,
134
- pixelId,
135
- identityId: 'stale-test-id',
136
- response: {
137
- identityId: 'stale-test-id',
138
- traits: {
139
- emails: ['old-email@test.com'],
140
- },
141
- },
142
- updatedAt: new Date().toISOString(),
143
- };
144
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
145
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
146
- expect(result).not.toHaveProperty('isCacheStale');
147
- expect(result).not.toHaveProperty('staleTier');
148
- expect(result).not.toHaveProperty('staleTracker');
149
- expect(result).not.toHaveProperty('writeReason');
150
- expect(result).not.toHaveProperty('skipNeptune');
151
- });
152
- });
153
- describe('cache hit by email pointer', () => {
154
- it('should return discoveredIdentityId with lookupPath=email_pointer and cacheHit=true', async () => {
155
- const incomingIdentity = {
156
- traits: { emails: ['lookup@email.com'] },
157
- };
158
- const emailPointerRecord = {
159
- pk: `email#${pixelId}#lookup@email.com`,
160
- pixelId,
161
- identityId: 'discovered-identity-456',
162
- updatedAt: new Date().toISOString(),
163
- };
164
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
165
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
166
- expect(result.cacheHit).toBe(true);
167
- expect(result.lookupPath).toBe('email_pointer');
168
- expect(result.discoveredIdentityId).toBe('discovered-identity-456');
169
- expect(result.cachedIdentity).toBeUndefined();
170
- });
171
- it('should use first email in emails array for lookup', async () => {
172
- const incomingIdentity = {
173
- traits: { emails: ['first@email.com', 'second@email.com'] },
174
- };
175
- const emailPointerRecord = {
176
- pk: `email#${pixelId}#first@email.com`,
177
- pixelId,
178
- identityId: 'pointer-identity-789',
179
- updatedAt: new Date().toISOString(),
180
- };
181
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
182
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
183
- expect(result.discoveredIdentityId).toBe('pointer-identity-789');
184
- expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `email#${pixelId}#first@email.com`);
185
- });
186
- it('should NOT merge traits when returning email pointer discovery', async () => {
187
- const incomingIdentity = {
188
- traits: {
189
- emails: ['discovery@email.com'],
190
- phones: ['incoming-phone'],
191
- },
192
- };
193
- const emailPointerRecord = {
194
- pk: `email#${pixelId}#discovery@email.com`,
195
- pixelId,
196
- identityId: 'discovered-id',
197
- updatedAt: new Date().toISOString(),
198
- };
199
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
200
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
201
- expect(result.cachedIdentity).toBeUndefined();
202
- expect(result.discoveredIdentityId).toBe('discovered-id');
203
- });
204
- });
205
- describe('cache miss', () => {
206
- it('should return lookupPath=miss and cacheHit=false when identity not found', async () => {
207
- const incomingIdentity = {
208
- identityId: 'nonexistent-identity',
209
- traits: { emails: ['test@email.com'] },
210
- };
211
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
212
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
213
- expect(result.cacheHit).toBe(false);
214
- expect(result.lookupPath).toBe('identity_id');
215
- expect(result.cachedIdentity).toBeUndefined();
216
- expect(result.discoveredIdentityId).toBeUndefined();
217
- });
218
- it('should return lookupPath=miss and cacheHit=false when email pointer not found', async () => {
219
- const incomingIdentity = {
220
- traits: { emails: ['unknown@email.com'] },
221
- };
222
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
223
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
224
- expect(result.cacheHit).toBe(false);
225
- expect(result.lookupPath).toBe('miss');
226
- expect(result.cachedIdentity).toBeUndefined();
227
- expect(result.discoveredIdentityId).toBeUndefined();
228
- });
229
- it('should return lookupPath=miss when cached record has no response field', async () => {
230
- const incomingIdentity = {
231
- identityId: 'no-response-identity',
232
- traits: { emails: ['test@email.com'] },
233
- };
234
- const incompleteRecord = {
235
- pk: `identity#${pixelId}#no-response-identity`,
236
- pixelId,
237
- identityId: 'no-response-identity',
238
- updatedAt: new Date().toISOString(),
239
- };
240
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(incompleteRecord);
241
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
242
- expect(result.cacheHit).toBe(false);
243
- expect(result.lookupPath).toBe('identity_id');
244
- expect(result.cachedIdentity).toBeUndefined();
245
- });
246
- it('should return lookupPath=miss when no email provided for pointer lookup', async () => {
247
- const incomingIdentity = {
248
- traits: { phones: ['555-1234'] },
249
- };
250
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
251
- expect(result.cacheHit).toBe(false);
252
- expect(result.lookupPath).toBe('miss');
253
- expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
254
- });
255
- });
256
- describe('invalid input handling', () => {
257
- it('should return cache miss for undefined pixelId', async () => {
258
- const incomingIdentity = {
259
- identityId: 'test-identity',
260
- traits: { emails: ['test@email.com'] },
261
- };
262
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(undefined, incomingIdentity);
263
- expect(result.cacheHit).toBe(false);
264
- expect(result.lookupPath).toBe('miss');
265
- expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
266
- });
267
- it('should return cache miss for empty pixelId', async () => {
268
- const incomingIdentity = {
269
- identityId: 'test-identity',
270
- traits: { emails: ['test@email.com'] },
271
- };
272
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure('', incomingIdentity);
273
- expect(result.cacheHit).toBe(false);
274
- expect(result.lookupPath).toBe('miss');
275
- });
276
- it('should return cache miss for undefined incomingIdentity', async () => {
277
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, undefined);
278
- expect(result.cacheHit).toBe(false);
279
- expect(result.lookupPath).toBe('miss');
280
- });
281
- it('should return cache miss for null incomingIdentity', async () => {
282
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, null);
283
- expect(result.cacheHit).toBe(false);
284
- expect(result.lookupPath).toBe('miss');
285
- });
286
- });
287
- describe('error handling', () => {
288
- it('should return cache miss when DynamoDB throws an error', async () => {
289
- const incomingIdentity = {
290
- identityId: 'error-test-identity',
291
- traits: { emails: ['test@email.com'] },
292
- };
293
- mockedDynamoDbClient.safeGet.mockRejectedValueOnce(new Error('DynamoDB connection failed'));
294
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
295
- expect(result.cacheHit).toBe(false);
296
- expect(result.lookupPath).toBe('identity_id');
297
- expect(result.cachedIdentity).toBeUndefined();
298
- expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
299
- error: expect.any(Error),
300
- errorMessage: 'DynamoDB connection failed',
301
- }));
302
- });
303
- it('should handle non-Error thrown values', async () => {
304
- const incomingIdentity = {
305
- identityId: 'string-error-identity',
306
- traits: { emails: ['test@email.com'] },
307
- };
308
- mockedDynamoDbClient.safeGet.mockRejectedValueOnce('String error message');
309
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
310
- expect(result.cacheHit).toBe(false);
311
- expect(result.lookupPath).toBe('identity_id');
312
- expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
313
- errorMessage: 'String error message',
314
- }));
315
- });
316
- });
317
- describe('verification: no merge or staleness logic', () => {
318
- it('should not call mergeIdentityTraits', async () => {
319
- const incomingIdentity = {
320
- identityId: 'verify-no-merge',
321
- traits: { emails: ['incoming@email.com'] },
322
- };
323
- const cachedRecord = {
324
- pk: `identity#${pixelId}#verify-no-merge`,
325
- pixelId,
326
- identityId: 'verify-no-merge',
327
- response: {
328
- identityId: 'verify-no-merge',
329
- traits: { emails: ['cached@email.com'] },
330
- },
331
- updatedAt: new Date().toISOString(),
332
- };
333
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
334
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
335
- expect(result.cachedIdentity).toBe(cachedRecord.response);
336
- expect(result.cachedIdentity?.traits?.emails).toEqual(['cached@email.com']);
337
- });
338
- it('should not call isIdentityCacheStale', async () => {
339
- const incomingIdentity = {
340
- identityId: 'verify-no-staleness',
341
- traits: {
342
- emails: ['new-email@test.com'],
343
- },
344
- };
345
- const cachedRecord = {
346
- pk: `identity#${pixelId}#verify-no-staleness`,
347
- pixelId,
348
- identityId: 'verify-no-staleness',
349
- response: {
350
- identityId: 'verify-no-staleness',
351
- traits: { emails: ['old-email@test.com'] },
352
- },
353
- updatedAt: new Date().toISOString(),
354
- };
355
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
356
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
357
- expect(Object.keys(result)).toEqual(['cachedIdentity', 'lookupPath', 'cacheHit']);
358
- });
359
- it('result should only contain pure lookup properties', async () => {
360
- const incomingIdentity = {
361
- identityId: 'result-shape-test',
362
- traits: { emails: ['test@email.com'] },
363
- };
364
- const cachedRecord = {
365
- pk: `identity#${pixelId}#result-shape-test`,
366
- pixelId,
367
- identityId: 'result-shape-test',
368
- response: {
369
- identityId: 'result-shape-test',
370
- traits: { emails: ['test@email.com'] },
371
- },
372
- updatedAt: new Date().toISOString(),
373
- };
374
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
375
- const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
376
- expect(result).toEqual({
377
- cachedIdentity: cachedRecord.response,
378
- lookupPath: 'identity_id',
379
- cacheHit: true,
380
- });
381
- expect(result).not.toHaveProperty('resolvedIdentity');
382
- expect(result).not.toHaveProperty('isCacheStale');
383
- expect(result).not.toHaveProperty('staleTracker');
384
- expect(result).not.toHaveProperty('staleTier');
385
- expect(result).not.toHaveProperty('writeReason');
386
- expect(result).not.toHaveProperty('skipNeptune');
387
- expect(result).not.toHaveProperty('mergedIdentity');
388
- });
389
- });
390
- describe('logging', () => {
391
- it('should log debug on cache hit by identity ID', async () => {
392
- const incomingIdentity = {
393
- identityId: 'log-test-id',
394
- traits: { emails: ['test@email.com'] },
395
- };
396
- const cachedRecord = {
397
- pk: `identity#${pixelId}#log-test-id`,
398
- pixelId,
399
- identityId: 'log-test-id',
400
- response: {
401
- identityId: 'log-test-id',
402
- traits: { emails: ['test@email.com'] },
403
- },
404
- updatedAt: new Date().toISOString(),
405
- };
406
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
407
- await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
408
- expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup hit', expect.objectContaining({
409
- pixelId,
410
- identityId: 'log-test-id',
411
- }));
412
- });
413
- it('should log debug on cache miss', async () => {
414
- const incomingIdentity = {
415
- identityId: 'miss-log-test',
416
- traits: { emails: ['test@email.com'] },
417
- };
418
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
419
- await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
420
- expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup miss', expect.objectContaining({
421
- pixelId,
422
- identityId: 'miss-log-test',
423
- }));
424
- });
425
- it('should log debug on email pointer discovery', async () => {
426
- const incomingIdentity = {
427
- traits: { emails: ['email-pointer@test.com'] },
428
- };
429
- const emailPointerRecord = {
430
- pk: `email#${pixelId}#email-pointer@test.com`,
431
- pixelId,
432
- identityId: 'discovered-from-pointer',
433
- updatedAt: new Date().toISOString(),
434
- };
435
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
436
- await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
437
- expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure email pointer discovery', expect.objectContaining({
438
- pixelId,
439
- discoveredIdentityId: 'discovered-from-pointer',
440
- }));
441
- });
442
- });
443
- });
444
- describe('IdentityCacheDynamoDbDbService cluster traits operations', () => {
445
- const pixelId = 'pixel-cluster';
446
- const primaryIdentityId = 'identity-primary';
447
- const secondaryIdentityId = 'identity-secondary';
448
- beforeEach(() => {
449
- jest.clearAllMocks();
450
- });
451
- it('returns records by requested identity ID when every key is processed', async () => {
452
- const primaryRecord = {
453
- pk: `identity#${pixelId}#${primaryIdentityId}`,
454
- pixelId,
455
- identityId: primaryIdentityId,
456
- response: { identityId: primaryIdentityId, traits: { emails: ['primary@test.com'] } },
457
- updatedAt: '2026-09-04T12:00:00.000Z',
458
- };
459
- mockedDynamoDbClient.batchGet.mockResolvedValue({
460
- Responses: { [IDENTITY_CACHE_TABLE_NAME]: [primaryRecord] },
461
- UnprocessedKeys: {},
462
- $metadata: {},
463
- });
464
- const result = await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
465
- expect(result.complete).toBe(true);
466
- expect(result.failedIdentityIds).toEqual([]);
467
- expect(result.recordsByIdentityId.get(primaryIdentityId)).toEqual(primaryRecord);
468
- expect(result.recordsByIdentityId.has(secondaryIdentityId)).toBe(false);
469
- });
470
- it('treats an unprocessed key as a failed read', async () => {
471
- mockedDynamoDbClient.batchGet.mockResolvedValue({
472
- Responses: { [IDENTITY_CACHE_TABLE_NAME]: [] },
473
- UnprocessedKeys: {
474
- [IDENTITY_CACHE_TABLE_NAME]: {
475
- Keys: [{ pk: `identity#${pixelId}#${secondaryIdentityId}` }],
476
- },
477
- },
478
- $metadata: {},
479
- });
480
- const result = await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
481
- expect(result.complete).toBe(false);
482
- expect(result.failedIdentityIds).toEqual([secondaryIdentityId]);
483
- });
484
- it('marks every key in a failed chunk as a failed read', async () => {
485
- mockedDynamoDbClient.batchGet.mockRejectedValue(new Error('read failed'));
486
- const result = await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
487
- expect(result.complete).toBe(false);
488
- expect(result.failedIdentityIds).toEqual([primaryIdentityId, secondaryIdentityId]);
489
- });
490
- it('writes final primary traits and the migration marker in one item', async () => {
491
- mockedDynamoDbClient.safePut.mockResolvedValue({ $metadata: { httpStatusCode: 200 } });
492
- const success = await IdentityCacheDynamoDbDbService.putPrimaryIdentityTraits({
493
- pixelId,
494
- primaryIdentityId,
495
- traits: { emails: ['merged@test.com'] },
496
- traitsInDynamo: true,
497
- });
498
- expect(success).toBe(true);
499
- expect(mockedDynamoDbClient.safePut).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
500
- pk: `identity#${pixelId}#${primaryIdentityId}`,
501
- identityId: primaryIdentityId,
502
- traitsInDynamo: true,
503
- response: {
504
- identityId: primaryIdentityId,
505
- traits: { emails: ['merged@test.com'] },
506
- },
507
- }));
508
- });
509
- it('reports a failed primary traits write', async () => {
510
- mockedDynamoDbClient.safePut.mockResolvedValue(null);
511
- const success = await IdentityCacheDynamoDbDbService.putPrimaryIdentityTraits({
512
- pixelId,
513
- primaryIdentityId,
514
- traits: {},
515
- traitsInDynamo: true,
516
- });
517
- expect(success).toBe(false);
518
- });
519
- it('deletes exact identity keys and returns unprocessed identity IDs', async () => {
520
- mockedDynamoDbClient.batchWrite.mockResolvedValue({
521
- UnprocessedItems: {
522
- [IDENTITY_CACHE_TABLE_NAME]: [{
523
- DeleteRequest: { Key: { pk: `identity#${pixelId}#${secondaryIdentityId}` } },
524
- }],
525
- },
526
- $metadata: {},
527
- });
528
- const failedIdentityIds = await IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
529
- expect(failedIdentityIds).toEqual([secondaryIdentityId]);
530
- expect(mockedDynamoDbClient.batchWrite).toHaveBeenCalledWith({
531
- RequestItems: {
532
- [IDENTITY_CACHE_TABLE_NAME]: [
533
- { DeleteRequest: { Key: { pk: `identity#${pixelId}#${primaryIdentityId}` } } },
534
- { DeleteRequest: { Key: { pk: `identity#${pixelId}#${secondaryIdentityId}` } } },
535
- ],
536
- },
537
- });
538
- });
539
- it('returns every identity ID when an exact delete chunk fails', async () => {
540
- mockedDynamoDbClient.batchWrite.mockRejectedValue(new Error('delete failed'));
541
- const failedIdentityIds = await IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
542
- expect(failedIdentityIds).toEqual([primaryIdentityId, secondaryIdentityId]);
543
- });
544
- it('deduplicates requested identity IDs before issuing batchGet', async () => {
545
- mockedDynamoDbClient.batchGet.mockResolvedValue({
546
- Responses: { [IDENTITY_CACHE_TABLE_NAME]: [] },
547
- UnprocessedKeys: {},
548
- $metadata: {},
549
- });
550
- await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, primaryIdentityId, secondaryIdentityId]);
551
- expect(mockedDynamoDbClient.batchGet).toHaveBeenCalledWith({
552
- RequestItems: {
553
- [IDENTITY_CACHE_TABLE_NAME]: {
554
- Keys: [
555
- { pk: `identity#${pixelId}#${primaryIdentityId}` },
556
- { pk: `identity#${pixelId}#${secondaryIdentityId}` },
557
- ],
558
- },
559
- },
560
- });
561
- });
562
- it('treats a processed key with no returned item as a successful miss', async () => {
563
- mockedDynamoDbClient.batchGet.mockResolvedValue({
564
- Responses: { [IDENTITY_CACHE_TABLE_NAME]: [] },
565
- UnprocessedKeys: {},
566
- $metadata: {},
567
- });
568
- const result = await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId, secondaryIdentityId]);
569
- expect(result.complete).toBe(true);
570
- expect(result.failedIdentityIds).toEqual([]);
571
- expect(result.recordsByIdentityId.size).toBe(0);
572
- });
573
- it('reports a failed primary traits write when safePut throws', async () => {
574
- mockedDynamoDbClient.safePut.mockRejectedValue(new Error('put failed'));
575
- const success = await IdentityCacheDynamoDbDbService.putPrimaryIdentityTraits({
576
- pixelId,
577
- primaryIdentityId,
578
- traits: { emails: ['merged@test.com'] },
579
- traitsInDynamo: true,
580
- });
581
- expect(success).toBe(false);
582
- expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache [primary traits write]: failed', expect.objectContaining({ pixelId, primaryIdentityId }));
583
- });
584
- it('deletes exact identity PKs without querying GSI1', async () => {
585
- mockedDynamoDbClient.batchWrite.mockResolvedValue({
586
- UnprocessedItems: {},
587
- $metadata: {},
588
- });
589
- await IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [secondaryIdentityId]);
590
- expect(mockedDynamoDbClient.safeQueryByGSI).not.toHaveBeenCalled();
591
- expect(mockedDynamoDbClient.batchWrite).toHaveBeenCalledWith({
592
- RequestItems: {
593
- [IDENTITY_CACHE_TABLE_NAME]: [
594
- { DeleteRequest: { Key: { pk: `identity#${pixelId}#${secondaryIdentityId}` } } },
595
- ],
596
- },
597
- });
598
- });
599
- it('logs cluster read completion with requested identity IDs', async () => {
600
- mockedDynamoDbClient.batchGet.mockResolvedValue({
601
- Responses: { [IDENTITY_CACHE_TABLE_NAME]: [] },
602
- UnprocessedKeys: {},
603
- $metadata: {},
604
- });
605
- await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId]);
606
- expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache [cluster traits read]: completed', expect.objectContaining({
607
- pixelId,
608
- identityIds: [primaryIdentityId],
609
- }));
610
- });
611
- });
612
- describe('mergeAndComputeIdentityStaleness (pure function)', () => {
613
- const { mergeAndComputeIdentityStaleness, IDENTITY_CACHE_STALENESS_TIER } = jest.requireActual('@adtrackify/at-shared-utils');
614
- describe('merge behavior', () => {
615
- it('should merge incoming traits with cached traits', () => {
616
- const incomingIdentity = {
617
- identityId: 'merge-test',
618
- traits: {
619
- emails: ['new@email.com'],
620
- },
621
- };
622
- const cachedIdentity = {
623
- identityId: 'merge-test',
624
- traits: {
625
- emails: ['cached@email.com'],
626
- phones: ['555-1234'],
627
- },
628
- };
629
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
630
- expect(result.mergedIdentity.traits?.emails).toContain('new@email.com');
631
- expect(result.mergedIdentity.traits?.emails).toContain('cached@email.com');
632
- expect(result.mergedIdentity.traits?.phones).toContain('555-1234');
633
- });
634
- });
635
- describe('staleness tier computation', () => {
636
- it('should return NONE tier when no traits are stale', () => {
637
- const incomingIdentity = {
638
- identityId: 'same-test',
639
- traits: { emails: ['same@email.com'] },
640
- };
641
- const cachedIdentity = {
642
- identityId: 'same-test',
643
- traits: { emails: ['same@email.com'] },
644
- };
645
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
646
- expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.NONE);
647
- expect(result.isCacheStale).toBe(false);
648
- });
649
- it('should return VOLATILE_ONLY tier when incoming has new IP address (cached has none)', () => {
650
- const incomingIdentity = {
651
- identityId: 'volatile-test',
652
- traits: {
653
- emails: ['same@email.com'],
654
- ipAddress: '192.168.1.100',
655
- },
656
- };
657
- const cachedIdentity = {
658
- identityId: 'volatile-test',
659
- traits: {
660
- emails: ['same@email.com'],
661
- },
662
- };
663
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
664
- expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
665
- expect(result.isCacheStale).toBe(false);
666
- });
667
- it('should return ADDRESS_UPDATE tier when non-IP address is new', () => {
668
- const incomingIdentity = {
669
- identityId: 'address-test',
670
- traits: {
671
- emails: ['same@email.com'],
672
- addresses: [{ firstName: 'John', city: 'New York' }],
673
- },
674
- };
675
- const cachedIdentity = {
676
- identityId: 'address-test',
677
- traits: {
678
- emails: ['same@email.com'],
679
- addresses: [],
680
- },
681
- };
682
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
683
- expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
684
- expect(result.isCacheStale).toBe(true);
685
- });
686
- it('should return IDENTITY_STALE tier when email changes', () => {
687
- const incomingIdentity = {
688
- identityId: 'stale-test',
689
- traits: {
690
- emails: ['new@email.com'],
691
- },
692
- };
693
- const cachedIdentity = {
694
- identityId: 'stale-test',
695
- traits: {
696
- emails: ['old@email.com'],
697
- },
698
- };
699
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
700
- expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
701
- expect(result.isCacheStale).toBe(true);
702
- });
703
- });
704
- describe('staleTraits extraction', () => {
705
- it('should include changed trait names in staleTraits array', () => {
706
- const incomingIdentity = {
707
- identityId: 'traits-test',
708
- traits: {
709
- emails: ['new@email.com'],
710
- phones: ['999-0000'],
711
- },
712
- };
713
- const cachedIdentity = {
714
- identityId: 'traits-test',
715
- traits: {
716
- emails: ['old@email.com'],
717
- phones: ['111-2222'],
718
- },
719
- };
720
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
721
- expect(result.staleTraits).toContain('emails');
722
- expect(result.staleTraits).toContain('phones');
723
- });
724
- });
725
- });
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { IDENTITY_CACHE_STALENESS_TIER, mergeAndComputeIdentityStaleness } from '@adtrackify/at-shared-utils';
3
+ vi.mock('../../clients/index.js', () => ({
4
+ DynamoDbClient: {
5
+ safeGet: vi.fn(),
6
+ safePut: vi.fn(),
7
+ safeDelete: vi.fn(),
8
+ safeBatchGet: vi.fn(),
9
+ safeBatchWrite: vi.fn(),
10
+ safeQueryByGSI: vi.fn(),
11
+ batchGet: vi.fn(),
12
+ batchWrite: vi.fn(),
13
+ },
14
+ }));
15
+ vi.mock('../../helpers/index.js', () => ({
16
+ Logger: {
17
+ debug: vi.fn(),
18
+ info: vi.fn(),
19
+ warn: vi.fn(),
20
+ error: vi.fn(),
21
+ },
22
+ }));
23
+ import { IdentityCacheDynamoDbDbService } from '../../services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js';
24
+ import { DynamoDbClient } from '../../clients/index.js';
25
+ import { Logger } from '../../helpers/index.js';
26
+ import { IDENTITY_CACHE_TABLE_NAME } from '../../services/db/identity-cache-dynamodb-service/constants.js';
27
+ const mockedDynamoDbClient = DynamoDbClient;
28
+ const mockedLogger = Logger;
29
+ describe('IdentityCacheDynamoDbDbService.getIdentityFromCachePure()', () => {
30
+ const pixelId = 'pixel-test-123';
31
+ beforeEach(() => {
32
+ vi.clearAllMocks();
33
+ mockedDynamoDbClient.safeGet.mockReset();
34
+ mockedDynamoDbClient.safePut.mockReset();
35
+ mockedDynamoDbClient.safeBatchWrite.mockReset();
36
+ mockedDynamoDbClient.batchGet.mockReset();
37
+ mockedDynamoDbClient.batchWrite.mockReset();
38
+ });
39
+ describe('cache hit by identity ID', () => {
40
+ it('should return cachedIdentity with lookupPath=identity_id and cacheHit=true', async () => {
41
+ const incomingIdentity = {
42
+ identityId: 'identity-123',
43
+ traits: { emails: ['test@email.com'] },
44
+ };
45
+ const cachedRecord = {
46
+ pk: `identity#${pixelId}#identity-123`,
47
+ pixelId,
48
+ identityId: 'identity-123',
49
+ response: {
50
+ identityId: 'identity-123',
51
+ traits: {
52
+ emails: ['test@email.com', 'cached@email.com'],
53
+ phones: ['555-1234'],
54
+ },
55
+ },
56
+ updatedAt: new Date().toISOString(),
57
+ };
58
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
59
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
60
+ expect(result.cacheHit).toBe(true);
61
+ expect(result.lookupPath).toBe('identity_id');
62
+ expect(result.cachedIdentity).toEqual(cachedRecord.response);
63
+ expect(result.discoveredIdentityId).toBeUndefined();
64
+ expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledTimes(1);
65
+ expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `identity#${pixelId}#identity-123`);
66
+ });
67
+ it('should return cachedIdentity with all traits preserved', async () => {
68
+ const incomingIdentity = {
69
+ identityId: 'full-traits-id',
70
+ traits: { emails: ['new@email.com'] },
71
+ };
72
+ const fullCachedIdentity = {
73
+ identityId: 'full-traits-id',
74
+ traits: {
75
+ emails: ['existing@email.com', 'another@email.com'],
76
+ phones: ['555-1111', '555-2222'],
77
+ addresses: [{ city: 'New York', zip: '10001' }],
78
+ userIds: ['user-1', 'user-2'],
79
+ shopifyYIds: ['shopify-y-1'],
80
+ click: { fbp: 'fb.1.123.456' },
81
+ ipAddress: '192.168.1.1',
82
+ userAgent: 'Mozilla/5.0...',
83
+ },
84
+ };
85
+ const cachedRecord = {
86
+ pk: `identity#${pixelId}#full-traits-id`,
87
+ pixelId,
88
+ identityId: 'full-traits-id',
89
+ response: fullCachedIdentity,
90
+ updatedAt: new Date().toISOString(),
91
+ };
92
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
93
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
94
+ expect(result.cacheHit).toBe(true);
95
+ expect(result.cachedIdentity).toEqual(fullCachedIdentity);
96
+ expect(result.cachedIdentity?.traits?.emails).toHaveLength(2);
97
+ expect(result.cachedIdentity?.traits?.phones).toHaveLength(2);
98
+ expect(result.cachedIdentity?.traits?.addresses).toHaveLength(1);
99
+ });
100
+ it('should NOT perform any merge logic', async () => {
101
+ const incomingIdentity = {
102
+ identityId: 'merge-test-id',
103
+ traits: {
104
+ emails: ['new-email@test.com'],
105
+ phones: ['999-0000'],
106
+ },
107
+ };
108
+ const cachedRecord = {
109
+ pk: `identity#${pixelId}#merge-test-id`,
110
+ pixelId,
111
+ identityId: 'merge-test-id',
112
+ response: {
113
+ identityId: 'merge-test-id',
114
+ traits: {
115
+ emails: ['old-email@test.com'],
116
+ phones: ['111-2222'],
117
+ },
118
+ },
119
+ updatedAt: new Date().toISOString(),
120
+ };
121
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
122
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
123
+ expect(result.cachedIdentity?.traits?.emails).toEqual(['old-email@test.com']);
124
+ expect(result.cachedIdentity?.traits?.phones).toEqual(['111-2222']);
125
+ expect(result.cachedIdentity?.traits?.emails).not.toContain('new-email@test.com');
126
+ });
127
+ it('should NOT perform staleness computation', async () => {
128
+ const incomingIdentity = {
129
+ identityId: 'stale-test-id',
130
+ traits: {
131
+ emails: ['new-email@test.com'],
132
+ },
133
+ };
134
+ const cachedRecord = {
135
+ pk: `identity#${pixelId}#stale-test-id`,
136
+ pixelId,
137
+ identityId: 'stale-test-id',
138
+ response: {
139
+ identityId: 'stale-test-id',
140
+ traits: {
141
+ emails: ['old-email@test.com'],
142
+ },
143
+ },
144
+ updatedAt: new Date().toISOString(),
145
+ };
146
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
147
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
148
+ expect(result).not.toHaveProperty('isCacheStale');
149
+ expect(result).not.toHaveProperty('staleTier');
150
+ expect(result).not.toHaveProperty('staleTracker');
151
+ expect(result).not.toHaveProperty('writeReason');
152
+ expect(result).not.toHaveProperty('skipNeptune');
153
+ });
154
+ });
155
+ describe('cache hit by email pointer', () => {
156
+ it('should return discoveredIdentityId with lookupPath=email_pointer and cacheHit=true', async () => {
157
+ const incomingIdentity = {
158
+ traits: { emails: ['lookup@email.com'] },
159
+ };
160
+ const emailPointerRecord = {
161
+ pk: `email#${pixelId}#lookup@email.com`,
162
+ pixelId,
163
+ identityId: 'discovered-identity-456',
164
+ updatedAt: new Date().toISOString(),
165
+ };
166
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
167
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
168
+ expect(result.cacheHit).toBe(true);
169
+ expect(result.lookupPath).toBe('email_pointer');
170
+ expect(result.discoveredIdentityId).toBe('discovered-identity-456');
171
+ expect(result.cachedIdentity).toBeUndefined();
172
+ });
173
+ it('should use first email in emails array for lookup', async () => {
174
+ const incomingIdentity = {
175
+ traits: { emails: ['first@email.com', 'second@email.com'] },
176
+ };
177
+ const emailPointerRecord = {
178
+ pk: `email#${pixelId}#first@email.com`,
179
+ pixelId,
180
+ identityId: 'pointer-identity-789',
181
+ updatedAt: new Date().toISOString(),
182
+ };
183
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
184
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
185
+ expect(result.discoveredIdentityId).toBe('pointer-identity-789');
186
+ expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `email#${pixelId}#first@email.com`);
187
+ });
188
+ it('should NOT merge traits when returning email pointer discovery', async () => {
189
+ const incomingIdentity = {
190
+ traits: {
191
+ emails: ['discovery@email.com'],
192
+ phones: ['incoming-phone'],
193
+ },
194
+ };
195
+ const emailPointerRecord = {
196
+ pk: `email#${pixelId}#discovery@email.com`,
197
+ pixelId,
198
+ identityId: 'discovered-id',
199
+ updatedAt: new Date().toISOString(),
200
+ };
201
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
202
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
203
+ expect(result.cachedIdentity).toBeUndefined();
204
+ expect(result.discoveredIdentityId).toBe('discovered-id');
205
+ });
206
+ });
207
+ describe('cache miss', () => {
208
+ it('should return lookupPath=miss and cacheHit=false when identity not found', async () => {
209
+ const incomingIdentity = {
210
+ identityId: 'nonexistent-identity',
211
+ traits: { emails: ['test@email.com'] },
212
+ };
213
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
214
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
215
+ expect(result.cacheHit).toBe(false);
216
+ expect(result.lookupPath).toBe('identity_id');
217
+ expect(result.cachedIdentity).toBeUndefined();
218
+ expect(result.discoveredIdentityId).toBeUndefined();
219
+ });
220
+ it('should return lookupPath=miss and cacheHit=false when email pointer not found', async () => {
221
+ const incomingIdentity = {
222
+ traits: { emails: ['unknown@email.com'] },
223
+ };
224
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
225
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
226
+ expect(result.cacheHit).toBe(false);
227
+ expect(result.lookupPath).toBe('miss');
228
+ expect(result.cachedIdentity).toBeUndefined();
229
+ expect(result.discoveredIdentityId).toBeUndefined();
230
+ });
231
+ it('should return lookupPath=miss when cached record has no response field', async () => {
232
+ const incomingIdentity = {
233
+ identityId: 'no-response-identity',
234
+ traits: { emails: ['test@email.com'] },
235
+ };
236
+ const incompleteRecord = {
237
+ pk: `identity#${pixelId}#no-response-identity`,
238
+ pixelId,
239
+ identityId: 'no-response-identity',
240
+ updatedAt: new Date().toISOString(),
241
+ };
242
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(incompleteRecord);
243
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
244
+ expect(result.cacheHit).toBe(false);
245
+ expect(result.lookupPath).toBe('identity_id');
246
+ expect(result.cachedIdentity).toBeUndefined();
247
+ });
248
+ it('should return lookupPath=miss when no email provided for pointer lookup', async () => {
249
+ const incomingIdentity = {
250
+ traits: { phones: ['555-1234'] },
251
+ };
252
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
253
+ expect(result.cacheHit).toBe(false);
254
+ expect(result.lookupPath).toBe('miss');
255
+ expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
256
+ });
257
+ });
258
+ describe('invalid input handling', () => {
259
+ it('should return cache miss for undefined pixelId', async () => {
260
+ const incomingIdentity = {
261
+ identityId: 'test-identity',
262
+ traits: { emails: ['test@email.com'] },
263
+ };
264
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(undefined, incomingIdentity);
265
+ expect(result.cacheHit).toBe(false);
266
+ expect(result.lookupPath).toBe('miss');
267
+ expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
268
+ });
269
+ it('should return cache miss for empty pixelId', async () => {
270
+ const incomingIdentity = {
271
+ identityId: 'test-identity',
272
+ traits: { emails: ['test@email.com'] },
273
+ };
274
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure('', incomingIdentity);
275
+ expect(result.cacheHit).toBe(false);
276
+ expect(result.lookupPath).toBe('miss');
277
+ });
278
+ it('should return cache miss for undefined incomingIdentity', async () => {
279
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, undefined);
280
+ expect(result.cacheHit).toBe(false);
281
+ expect(result.lookupPath).toBe('miss');
282
+ });
283
+ it('should return cache miss for null incomingIdentity', async () => {
284
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, null);
285
+ expect(result.cacheHit).toBe(false);
286
+ expect(result.lookupPath).toBe('miss');
287
+ });
288
+ });
289
+ describe('error handling', () => {
290
+ it('should return cache miss when DynamoDB throws an error', async () => {
291
+ const incomingIdentity = {
292
+ identityId: 'error-test-identity',
293
+ traits: { emails: ['test@email.com'] },
294
+ };
295
+ mockedDynamoDbClient.safeGet.mockRejectedValueOnce(new Error('DynamoDB connection failed'));
296
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
297
+ expect(result.cacheHit).toBe(false);
298
+ expect(result.lookupPath).toBe('identity_id');
299
+ expect(result.cachedIdentity).toBeUndefined();
300
+ expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
301
+ error: expect.any(Error),
302
+ errorMessage: 'DynamoDB connection failed',
303
+ }));
304
+ });
305
+ it('should handle non-Error thrown values', async () => {
306
+ const incomingIdentity = {
307
+ identityId: 'string-error-identity',
308
+ traits: { emails: ['test@email.com'] },
309
+ };
310
+ mockedDynamoDbClient.safeGet.mockRejectedValueOnce('String error message');
311
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
312
+ expect(result.cacheHit).toBe(false);
313
+ expect(result.lookupPath).toBe('identity_id');
314
+ expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
315
+ errorMessage: 'String error message',
316
+ }));
317
+ });
318
+ });
319
+ describe('verification: no merge or staleness logic', () => {
320
+ it('should not call mergeIdentityTraits', async () => {
321
+ const incomingIdentity = {
322
+ identityId: 'verify-no-merge',
323
+ traits: { emails: ['incoming@email.com'] },
324
+ };
325
+ const cachedRecord = {
326
+ pk: `identity#${pixelId}#verify-no-merge`,
327
+ pixelId,
328
+ identityId: 'verify-no-merge',
329
+ response: {
330
+ identityId: 'verify-no-merge',
331
+ traits: { emails: ['cached@email.com'] },
332
+ },
333
+ updatedAt: new Date().toISOString(),
334
+ };
335
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
336
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
337
+ expect(result.cachedIdentity).toBe(cachedRecord.response);
338
+ expect(result.cachedIdentity?.traits?.emails).toEqual(['cached@email.com']);
339
+ });
340
+ it('should not call isIdentityCacheStale', async () => {
341
+ const incomingIdentity = {
342
+ identityId: 'verify-no-staleness',
343
+ traits: {
344
+ emails: ['new-email@test.com'],
345
+ },
346
+ };
347
+ const cachedRecord = {
348
+ pk: `identity#${pixelId}#verify-no-staleness`,
349
+ pixelId,
350
+ identityId: 'verify-no-staleness',
351
+ response: {
352
+ identityId: 'verify-no-staleness',
353
+ traits: { emails: ['old-email@test.com'] },
354
+ },
355
+ updatedAt: new Date().toISOString(),
356
+ };
357
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
358
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
359
+ expect(Object.keys(result)).toEqual(['cachedIdentity', 'lookupPath', 'cacheHit']);
360
+ });
361
+ it('result should only contain pure lookup properties', async () => {
362
+ const incomingIdentity = {
363
+ identityId: 'result-shape-test',
364
+ traits: { emails: ['test@email.com'] },
365
+ };
366
+ const cachedRecord = {
367
+ pk: `identity#${pixelId}#result-shape-test`,
368
+ pixelId,
369
+ identityId: 'result-shape-test',
370
+ response: {
371
+ identityId: 'result-shape-test',
372
+ traits: { emails: ['test@email.com'] },
373
+ },
374
+ updatedAt: new Date().toISOString(),
375
+ };
376
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
377
+ const result = await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
378
+ expect(result).toEqual({
379
+ cachedIdentity: cachedRecord.response,
380
+ lookupPath: 'identity_id',
381
+ cacheHit: true,
382
+ });
383
+ expect(result).not.toHaveProperty('resolvedIdentity');
384
+ expect(result).not.toHaveProperty('isCacheStale');
385
+ expect(result).not.toHaveProperty('staleTracker');
386
+ expect(result).not.toHaveProperty('staleTier');
387
+ expect(result).not.toHaveProperty('writeReason');
388
+ expect(result).not.toHaveProperty('skipNeptune');
389
+ expect(result).not.toHaveProperty('mergedIdentity');
390
+ });
391
+ });
392
+ describe('logging', () => {
393
+ it('should log debug on cache hit by identity ID', async () => {
394
+ const incomingIdentity = {
395
+ identityId: 'log-test-id',
396
+ traits: { emails: ['test@email.com'] },
397
+ };
398
+ const cachedRecord = {
399
+ pk: `identity#${pixelId}#log-test-id`,
400
+ pixelId,
401
+ identityId: 'log-test-id',
402
+ response: {
403
+ identityId: 'log-test-id',
404
+ traits: { emails: ['test@email.com'] },
405
+ },
406
+ updatedAt: new Date().toISOString(),
407
+ };
408
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
409
+ await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
410
+ expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup hit', expect.objectContaining({
411
+ pixelId,
412
+ identityId: 'log-test-id',
413
+ }));
414
+ });
415
+ it('should log debug on cache miss', async () => {
416
+ const incomingIdentity = {
417
+ identityId: 'miss-log-test',
418
+ traits: { emails: ['test@email.com'] },
419
+ };
420
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
421
+ await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
422
+ expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup miss', expect.objectContaining({
423
+ pixelId,
424
+ identityId: 'miss-log-test',
425
+ }));
426
+ });
427
+ it('should log debug on email pointer discovery', async () => {
428
+ const incomingIdentity = {
429
+ traits: { emails: ['email-pointer@test.com'] },
430
+ };
431
+ const emailPointerRecord = {
432
+ pk: `email#${pixelId}#email-pointer@test.com`,
433
+ pixelId,
434
+ identityId: 'discovered-from-pointer',
435
+ updatedAt: new Date().toISOString(),
436
+ };
437
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
438
+ await IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
439
+ expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure email pointer discovery', expect.objectContaining({
440
+ pixelId,
441
+ discoveredIdentityId: 'discovered-from-pointer',
442
+ }));
443
+ });
444
+ });
445
+ });
446
+ describe('IdentityCacheDynamoDbDbService cluster traits operations', () => {
447
+ const pixelId = 'pixel-cluster';
448
+ const primaryIdentityId = 'identity-primary';
449
+ const secondaryIdentityId = 'identity-secondary';
450
+ beforeEach(() => {
451
+ vi.clearAllMocks();
452
+ });
453
+ it('returns records by requested identity ID when every key is processed', async () => {
454
+ const primaryRecord = {
455
+ pk: `identity#${pixelId}#${primaryIdentityId}`,
456
+ pixelId,
457
+ identityId: primaryIdentityId,
458
+ response: { identityId: primaryIdentityId, traits: { emails: ['primary@test.com'] } },
459
+ updatedAt: '2026-09-04T12:00:00.000Z',
460
+ };
461
+ mockedDynamoDbClient.batchGet.mockResolvedValue({
462
+ Responses: { [IDENTITY_CACHE_TABLE_NAME]: [primaryRecord] },
463
+ UnprocessedKeys: {},
464
+ $metadata: {},
465
+ });
466
+ const result = await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
467
+ primaryIdentityId,
468
+ secondaryIdentityId,
469
+ ]);
470
+ expect(result.complete).toBe(true);
471
+ expect(result.failedIdentityIds).toEqual([]);
472
+ expect(result.recordsByIdentityId.get(primaryIdentityId)).toEqual(primaryRecord);
473
+ expect(result.recordsByIdentityId.has(secondaryIdentityId)).toBe(false);
474
+ });
475
+ it('treats an unprocessed key as a failed read', async () => {
476
+ mockedDynamoDbClient.batchGet.mockResolvedValue({
477
+ Responses: { [IDENTITY_CACHE_TABLE_NAME]: [] },
478
+ UnprocessedKeys: {
479
+ [IDENTITY_CACHE_TABLE_NAME]: {
480
+ Keys: [{ pk: `identity#${pixelId}#${secondaryIdentityId}` }],
481
+ },
482
+ },
483
+ $metadata: {},
484
+ });
485
+ const result = await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
486
+ primaryIdentityId,
487
+ secondaryIdentityId,
488
+ ]);
489
+ expect(result.complete).toBe(false);
490
+ expect(result.failedIdentityIds).toEqual([secondaryIdentityId]);
491
+ });
492
+ it('marks every key in a failed chunk as a failed read', async () => {
493
+ mockedDynamoDbClient.batchGet.mockRejectedValue(new Error('read failed'));
494
+ const result = await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
495
+ primaryIdentityId,
496
+ secondaryIdentityId,
497
+ ]);
498
+ expect(result.complete).toBe(false);
499
+ expect(result.failedIdentityIds).toEqual([primaryIdentityId, secondaryIdentityId]);
500
+ });
501
+ it('writes final primary traits and the migration marker in one item', async () => {
502
+ mockedDynamoDbClient.safePut.mockResolvedValue({ $metadata: { httpStatusCode: 200 } });
503
+ const success = await IdentityCacheDynamoDbDbService.putPrimaryIdentityTraits({
504
+ pixelId,
505
+ primaryIdentityId,
506
+ traits: { emails: ['merged@test.com'] },
507
+ traitsInDynamo: true,
508
+ });
509
+ expect(success).toBe(true);
510
+ expect(mockedDynamoDbClient.safePut).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
511
+ pk: `identity#${pixelId}#${primaryIdentityId}`,
512
+ identityId: primaryIdentityId,
513
+ traitsInDynamo: true,
514
+ response: {
515
+ identityId: primaryIdentityId,
516
+ traits: { emails: ['merged@test.com'] },
517
+ },
518
+ }));
519
+ });
520
+ it('reports a failed primary traits write', async () => {
521
+ mockedDynamoDbClient.safePut.mockResolvedValue(null);
522
+ const success = await IdentityCacheDynamoDbDbService.putPrimaryIdentityTraits({
523
+ pixelId,
524
+ primaryIdentityId,
525
+ traits: {},
526
+ traitsInDynamo: true,
527
+ });
528
+ expect(success).toBe(false);
529
+ });
530
+ it('deletes exact identity keys and returns unprocessed identity IDs', async () => {
531
+ mockedDynamoDbClient.batchWrite.mockResolvedValue({
532
+ UnprocessedItems: {
533
+ [IDENTITY_CACHE_TABLE_NAME]: [
534
+ {
535
+ DeleteRequest: { Key: { pk: `identity#${pixelId}#${secondaryIdentityId}` } },
536
+ },
537
+ ],
538
+ },
539
+ $metadata: {},
540
+ });
541
+ const failedIdentityIds = await IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [
542
+ primaryIdentityId,
543
+ secondaryIdentityId,
544
+ ]);
545
+ expect(failedIdentityIds).toEqual([secondaryIdentityId]);
546
+ expect(mockedDynamoDbClient.batchWrite).toHaveBeenCalledWith({
547
+ RequestItems: {
548
+ [IDENTITY_CACHE_TABLE_NAME]: [
549
+ { DeleteRequest: { Key: { pk: `identity#${pixelId}#${primaryIdentityId}` } } },
550
+ { DeleteRequest: { Key: { pk: `identity#${pixelId}#${secondaryIdentityId}` } } },
551
+ ],
552
+ },
553
+ });
554
+ });
555
+ it('returns every identity ID when an exact delete chunk fails', async () => {
556
+ mockedDynamoDbClient.batchWrite.mockRejectedValue(new Error('delete failed'));
557
+ const failedIdentityIds = await IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [
558
+ primaryIdentityId,
559
+ secondaryIdentityId,
560
+ ]);
561
+ expect(failedIdentityIds).toEqual([primaryIdentityId, secondaryIdentityId]);
562
+ });
563
+ it('deduplicates requested identity IDs before issuing batchGet', async () => {
564
+ mockedDynamoDbClient.batchGet.mockResolvedValue({
565
+ Responses: { [IDENTITY_CACHE_TABLE_NAME]: [] },
566
+ UnprocessedKeys: {},
567
+ $metadata: {},
568
+ });
569
+ await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
570
+ primaryIdentityId,
571
+ primaryIdentityId,
572
+ secondaryIdentityId,
573
+ ]);
574
+ expect(mockedDynamoDbClient.batchGet).toHaveBeenCalledWith({
575
+ RequestItems: {
576
+ [IDENTITY_CACHE_TABLE_NAME]: {
577
+ Keys: [
578
+ { pk: `identity#${pixelId}#${primaryIdentityId}` },
579
+ { pk: `identity#${pixelId}#${secondaryIdentityId}` },
580
+ ],
581
+ },
582
+ },
583
+ });
584
+ });
585
+ it('treats a processed key with no returned item as a successful miss', async () => {
586
+ mockedDynamoDbClient.batchGet.mockResolvedValue({
587
+ Responses: { [IDENTITY_CACHE_TABLE_NAME]: [] },
588
+ UnprocessedKeys: {},
589
+ $metadata: {},
590
+ });
591
+ const result = await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [
592
+ primaryIdentityId,
593
+ secondaryIdentityId,
594
+ ]);
595
+ expect(result.complete).toBe(true);
596
+ expect(result.failedIdentityIds).toEqual([]);
597
+ expect(result.recordsByIdentityId.size).toBe(0);
598
+ });
599
+ it('reports a failed primary traits write when safePut throws', async () => {
600
+ mockedDynamoDbClient.safePut.mockRejectedValue(new Error('put failed'));
601
+ const success = await IdentityCacheDynamoDbDbService.putPrimaryIdentityTraits({
602
+ pixelId,
603
+ primaryIdentityId,
604
+ traits: { emails: ['merged@test.com'] },
605
+ traitsInDynamo: true,
606
+ });
607
+ expect(success).toBe(false);
608
+ expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache [primary traits write]: failed', expect.objectContaining({ pixelId, primaryIdentityId }));
609
+ });
610
+ it('deletes exact identity PKs without querying GSI1', async () => {
611
+ mockedDynamoDbClient.batchWrite.mockResolvedValue({
612
+ UnprocessedItems: {},
613
+ $metadata: {},
614
+ });
615
+ await IdentityCacheDynamoDbDbService.deleteIdentityRecords(pixelId, [secondaryIdentityId]);
616
+ expect(mockedDynamoDbClient.safeQueryByGSI).not.toHaveBeenCalled();
617
+ expect(mockedDynamoDbClient.batchWrite).toHaveBeenCalledWith({
618
+ RequestItems: {
619
+ [IDENTITY_CACHE_TABLE_NAME]: [{ DeleteRequest: { Key: { pk: `identity#${pixelId}#${secondaryIdentityId}` } } }],
620
+ },
621
+ });
622
+ });
623
+ it('logs cluster read completion with requested identity IDs', async () => {
624
+ mockedDynamoDbClient.batchGet.mockResolvedValue({
625
+ Responses: { [IDENTITY_CACHE_TABLE_NAME]: [] },
626
+ UnprocessedKeys: {},
627
+ $metadata: {},
628
+ });
629
+ await IdentityCacheDynamoDbDbService.getClusterIdentityRecords(pixelId, [primaryIdentityId]);
630
+ expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache [cluster traits read]: completed', expect.objectContaining({
631
+ pixelId,
632
+ identityIds: [primaryIdentityId],
633
+ }));
634
+ });
635
+ });
636
+ describe('mergeAndComputeIdentityStaleness (pure function)', () => {
637
+ describe('merge behavior', () => {
638
+ it('should merge incoming traits with cached traits', () => {
639
+ const incomingIdentity = {
640
+ identityId: 'merge-test',
641
+ traits: {
642
+ emails: ['new@email.com'],
643
+ },
644
+ };
645
+ const cachedIdentity = {
646
+ identityId: 'merge-test',
647
+ traits: {
648
+ emails: ['cached@email.com'],
649
+ phones: ['555-1234'],
650
+ },
651
+ };
652
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
653
+ expect(result.mergedIdentity.traits?.emails).toContain('new@email.com');
654
+ expect(result.mergedIdentity.traits?.emails).toContain('cached@email.com');
655
+ expect(result.mergedIdentity.traits?.phones).toContain('555-1234');
656
+ });
657
+ });
658
+ describe('staleness tier computation', () => {
659
+ it('should return NONE tier when no traits are stale', () => {
660
+ const incomingIdentity = {
661
+ identityId: 'same-test',
662
+ traits: { emails: ['same@email.com'] },
663
+ };
664
+ const cachedIdentity = {
665
+ identityId: 'same-test',
666
+ traits: { emails: ['same@email.com'] },
667
+ };
668
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
669
+ expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.NONE);
670
+ expect(result.isCacheStale).toBe(false);
671
+ });
672
+ it('should return VOLATILE_ONLY tier when incoming has new IP address (cached has none)', () => {
673
+ const incomingIdentity = {
674
+ identityId: 'volatile-test',
675
+ traits: {
676
+ emails: ['same@email.com'],
677
+ ipAddress: '192.168.1.100',
678
+ },
679
+ };
680
+ const cachedIdentity = {
681
+ identityId: 'volatile-test',
682
+ traits: {
683
+ emails: ['same@email.com'],
684
+ },
685
+ };
686
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
687
+ expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
688
+ expect(result.isCacheStale).toBe(false);
689
+ });
690
+ it('should return ADDRESS_UPDATE tier when non-IP address is new', () => {
691
+ const incomingIdentity = {
692
+ identityId: 'address-test',
693
+ traits: {
694
+ emails: ['same@email.com'],
695
+ addresses: [{ firstName: 'John', city: 'New York' }],
696
+ },
697
+ };
698
+ const cachedIdentity = {
699
+ identityId: 'address-test',
700
+ traits: {
701
+ emails: ['same@email.com'],
702
+ addresses: [],
703
+ },
704
+ };
705
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
706
+ expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
707
+ expect(result.isCacheStale).toBe(true);
708
+ });
709
+ it('should return IDENTITY_STALE tier when email changes', () => {
710
+ const incomingIdentity = {
711
+ identityId: 'stale-test',
712
+ traits: {
713
+ emails: ['new@email.com'],
714
+ },
715
+ };
716
+ const cachedIdentity = {
717
+ identityId: 'stale-test',
718
+ traits: {
719
+ emails: ['old@email.com'],
720
+ },
721
+ };
722
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
723
+ expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
724
+ expect(result.isCacheStale).toBe(true);
725
+ });
726
+ });
727
+ describe('staleTraits extraction', () => {
728
+ it('should include changed trait names in staleTraits array', () => {
729
+ const incomingIdentity = {
730
+ identityId: 'traits-test',
731
+ traits: {
732
+ emails: ['new@email.com'],
733
+ phones: ['999-0000'],
734
+ },
735
+ };
736
+ const cachedIdentity = {
737
+ identityId: 'traits-test',
738
+ traits: {
739
+ emails: ['old@email.com'],
740
+ phones: ['111-2222'],
741
+ },
742
+ };
743
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
744
+ expect(result.staleTraits).toContain('emails');
745
+ expect(result.staleTraits).toContain('phones');
746
+ });
747
+ });
748
+ });
726
749
  //# sourceMappingURL=identity-cache-dynamodb-db-service.spec.js.map