@adtrackify/at-service-common 4.0.29 → 4.0.32

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 (833) 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 +43 -43
  3. package/dist/cjs/__tests__/clients/cross-platform-compression.spec.d.ts +1 -1
  4. package/dist/cjs/__tests__/clients/cross-platform-compression.spec.js +354 -354
  5. package/dist/cjs/__tests__/clients/dynamodb-client.spec.d.ts +1 -1
  6. package/dist/cjs/__tests__/clients/dynamodb-client.spec.js +194 -194
  7. package/dist/cjs/__tests__/clients/event-collector-client.spec.d.ts +1 -1
  8. package/dist/cjs/__tests__/clients/event-collector-client.spec.js +227 -227
  9. package/dist/cjs/__tests__/clients/open-exchange-rates-client.spec.d.ts +1 -1
  10. package/dist/cjs/__tests__/clients/open-exchange-rates-client.spec.js +55 -55
  11. package/dist/cjs/__tests__/clients/sqs-bundled-client.spec.d.ts +1 -1
  12. package/dist/cjs/__tests__/clients/sqs-bundled-client.spec.js +931 -931
  13. package/dist/cjs/__tests__/clients/sqs-bundling-contracts.spec.d.ts +1 -1
  14. package/dist/cjs/__tests__/clients/sqs-bundling-contracts.spec.js +563 -563
  15. package/dist/cjs/__tests__/clients/sqs-client.spec.d.ts +1 -1
  16. package/dist/cjs/__tests__/clients/sqs-client.spec.js +191 -191
  17. package/dist/cjs/__tests__/clients/sqs-unbundle.spec.d.ts +1 -1
  18. package/dist/cjs/__tests__/clients/sqs-unbundle.spec.js +1357 -1357
  19. package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.d.ts +1 -1
  20. package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js +68 -68
  21. package/dist/cjs/__tests__/db/destinations-db-service.spec.d.ts +1 -1
  22. package/dist/cjs/__tests__/db/destinations-db-service.spec.js +125 -125
  23. package/dist/cjs/__tests__/db/products-db-service.spec.d.ts +1 -1
  24. package/dist/cjs/__tests__/db/products-db-service.spec.js +89 -89
  25. package/dist/cjs/__tests__/db/shared-read-db-services.spec.d.ts +1 -1
  26. package/dist/cjs/__tests__/db/shared-read-db-services.spec.js +89 -89
  27. package/dist/cjs/__tests__/db/shopify-app-installs-db-service.spec.d.ts +1 -1
  28. package/dist/cjs/__tests__/db/shopify-app-installs-db-service.spec.js +104 -104
  29. package/dist/cjs/__tests__/db/subscriptions-db-service.spec.d.ts +1 -1
  30. package/dist/cjs/__tests__/db/subscriptions-db-service.spec.js +95 -95
  31. package/dist/cjs/__tests__/db/user-accounts-db-service.spec.d.ts +1 -1
  32. package/dist/cjs/__tests__/db/user-accounts-db-service.spec.js +76 -76
  33. package/dist/cjs/__tests__/helpers/account-users-helper.spec.d.ts +1 -1
  34. package/dist/cjs/__tests__/helpers/account-users-helper.spec.js +220 -220
  35. package/dist/cjs/__tests__/helpers/acuity-helper.spec.d.ts +1 -1
  36. package/dist/cjs/__tests__/helpers/acuity-helper.spec.js +69 -69
  37. package/dist/cjs/__tests__/helpers/api-key-auth-helper.spec.d.ts +1 -1
  38. package/dist/cjs/__tests__/helpers/api-key-auth-helper.spec.js +82 -82
  39. package/dist/cjs/__tests__/helpers/cognito-auth-helper.spec.d.ts +1 -1
  40. package/dist/cjs/__tests__/helpers/cognito-auth-helper.spec.js +46 -46
  41. package/dist/cjs/__tests__/helpers/public-api-response-helper.spec.d.ts +1 -1
  42. package/dist/cjs/__tests__/helpers/public-api-response-helper.spec.js +60 -60
  43. package/dist/cjs/__tests__/identity-cache/helpers.spec.d.ts +1 -1
  44. package/dist/cjs/__tests__/identity-cache/helpers.spec.js +592 -592
  45. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.d.ts +1 -1
  46. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.js +676 -676
  47. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.d.ts +1 -1
  48. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js +555 -555
  49. package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.d.ts +1 -1
  50. package/dist/cjs/__tests__/identity-cache/identity-cache-tier-routing.spec.js +631 -631
  51. package/dist/cjs/__tests__/identity-cache/identity-client.spec.d.ts +1 -1
  52. package/dist/cjs/__tests__/identity-cache/identity-client.spec.js +359 -359
  53. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-hit.spec.d.ts +1 -1
  54. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-hit.spec.js +137 -137
  55. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-miss.spec.d.ts +1 -1
  56. package/dist/cjs/__tests__/identity-cache/identity-gateway-cache-miss.spec.js +152 -152
  57. package/dist/cjs/__tests__/identity-cache/identity-gateway-constructor.spec.d.ts +1 -1
  58. package/dist/cjs/__tests__/identity-cache/identity-gateway-constructor.spec.js +71 -71
  59. package/dist/cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.d.ts +1 -1
  60. package/dist/cjs/__tests__/identity-cache/identity-gateway-edge-cases.spec.js +88 -88
  61. package/dist/cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.d.ts +1 -1
  62. package/dist/cjs/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js +135 -135
  63. package/dist/cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.d.ts +1 -1
  64. package/dist/cjs/__tests__/identity-cache/identity-gateway-stale-cache.spec.js +223 -223
  65. package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.d.ts +28 -28
  66. package/dist/cjs/__tests__/identity-cache/identity-gateway-test-setup.js +89 -89
  67. package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.d.ts +1 -1
  68. package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.js +1770 -1770
  69. package/dist/cjs/__tests__/identity-cache/volatile-traits-optimization.spec.d.ts +1 -1
  70. package/dist/cjs/__tests__/identity-cache/volatile-traits-optimization.spec.js +818 -818
  71. package/dist/cjs/__tests__/integration/sqs-bundling-roundtrip.spec.d.ts +1 -1
  72. package/dist/cjs/__tests__/integration/sqs-bundling-roundtrip.spec.js +584 -584
  73. package/dist/cjs/__tests__/libs/compress-decompress.spec.d.ts +1 -1
  74. package/dist/cjs/__tests__/libs/compress-decompress.spec.js +16 -16
  75. package/dist/cjs/__tests__/libs/contacts.spec.d.ts +1 -1
  76. package/dist/cjs/__tests__/libs/contacts.spec.js +294 -294
  77. package/dist/cjs/__tests__/libs/currency.spec.d.ts +1 -1
  78. package/dist/cjs/__tests__/libs/currency.spec.js +220 -220
  79. package/dist/cjs/__tests__/libs/dates.spec.d.ts +1 -1
  80. package/dist/cjs/__tests__/libs/dates.spec.js +130 -130
  81. package/dist/cjs/__tests__/libs/domain.spec.d.ts +1 -1
  82. package/dist/cjs/__tests__/libs/domain.spec.js +107 -107
  83. package/dist/cjs/__tests__/libs/numbers.spec.d.ts +1 -1
  84. package/dist/cjs/__tests__/libs/numbers.spec.js +261 -261
  85. package/dist/cjs/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  86. package/dist/cjs/__tests__/s3-client/s3-client.spec.js +33 -33
  87. package/dist/cjs/__tests__/services/acuity-api-service.spec.d.ts +1 -1
  88. package/dist/cjs/__tests__/services/acuity-api-service.spec.js +71 -71
  89. package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.d.ts +1 -1
  90. package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.js +23 -23
  91. package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.d.ts +1 -1
  92. package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.js +3349 -3319
  93. package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.js.map +1 -1
  94. package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.d.ts +1 -1
  95. package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.js +114 -114
  96. package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.d.ts +1 -1
  97. package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.js +468 -468
  98. package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.d.ts +1 -1
  99. package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js +360 -206
  100. package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js.map +1 -1
  101. package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.d.ts +1 -1
  102. package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.js +34 -34
  103. package/dist/cjs/__tests__/services/email-verification/contact-email-verification-service.spec.d.ts +1 -1
  104. package/dist/cjs/__tests__/services/email-verification/contact-email-verification-service.spec.js +93 -93
  105. package/dist/cjs/__tests__/services/email-verification/email-verification-service.spec.d.ts +1 -1
  106. package/dist/cjs/__tests__/services/email-verification/email-verification-service.spec.js +57 -57
  107. package/dist/cjs/__tests__/services/events/collect-queue-tracking-service.spec.d.ts +1 -1
  108. package/dist/cjs/__tests__/services/events/collect-queue-tracking-service.spec.js +229 -229
  109. package/dist/cjs/__tests__/services/events/tracking-event-sqs-service.spec.d.ts +1 -1
  110. package/dist/cjs/__tests__/services/events/tracking-event-sqs-service.spec.js +191 -191
  111. package/dist/cjs/__tests__/shopify/shopify-graphql-transformer.spec.d.ts +1 -1
  112. package/dist/cjs/__tests__/shopify/shopify-graphql-transformer.spec.js +35 -35
  113. package/dist/cjs/__tests__/unit/libs/api-router/public-api-router.spec.d.ts +1 -1
  114. package/dist/cjs/__tests__/unit/libs/api-router/public-api-router.spec.js +181 -181
  115. package/dist/cjs/__tests__/unit/libs/api-router/route-matcher.spec.d.ts +1 -1
  116. package/dist/cjs/__tests__/unit/libs/api-router/route-matcher.spec.js +69 -69
  117. package/dist/cjs/__tests__/utils/custom-measure-formula-utils.spec.d.ts +1 -1
  118. package/dist/cjs/__tests__/utils/custom-measure-formula-utils.spec.js +146 -146
  119. package/dist/cjs/clients/generic/cognito-client.d.ts +23 -23
  120. package/dist/cjs/clients/generic/cognito-client.js +209 -209
  121. package/dist/cjs/clients/generic/dynamodb-client.d.ts +20 -20
  122. package/dist/cjs/clients/generic/dynamodb-client.js +235 -235
  123. package/dist/cjs/clients/generic/eventbridge-client.d.ts +14 -14
  124. package/dist/cjs/clients/generic/eventbridge-client.js +51 -51
  125. package/dist/cjs/clients/generic/http-client.d.ts +14 -14
  126. package/dist/cjs/clients/generic/http-client.js +61 -61
  127. package/dist/cjs/clients/generic/index.d.ts +13 -13
  128. package/dist/cjs/clients/generic/index.js +29 -29
  129. package/dist/cjs/clients/generic/lambda-invoke-client.d.ts +10 -10
  130. package/dist/cjs/clients/generic/lambda-invoke-client.js +39 -39
  131. package/dist/cjs/clients/generic/location-client.d.ts +8 -8
  132. package/dist/cjs/clients/generic/location-client.js +31 -31
  133. package/dist/cjs/clients/generic/redis-client.d.ts +33 -33
  134. package/dist/cjs/clients/generic/redis-client.js +191 -191
  135. package/dist/cjs/clients/generic/s3-client.d.ts +23 -23
  136. package/dist/cjs/clients/generic/s3-client.js +216 -216
  137. package/dist/cjs/clients/generic/singlestore-db-client.d.ts +14 -14
  138. package/dist/cjs/clients/generic/singlestore-db-client.js +67 -67
  139. package/dist/cjs/clients/generic/sqs-bundled-client.d.ts +15 -15
  140. package/dist/cjs/clients/generic/sqs-bundled-client.js +311 -311
  141. package/dist/cjs/clients/generic/sqs-bundled-client.types.d.ts +53 -53
  142. package/dist/cjs/clients/generic/sqs-bundled-client.types.js +17 -17
  143. package/dist/cjs/clients/generic/sqs-client.d.ts +53 -53
  144. package/dist/cjs/clients/generic/sqs-client.js +285 -285
  145. package/dist/cjs/clients/generic/sqs-unbundle.d.ts +32 -32
  146. package/dist/cjs/clients/generic/sqs-unbundle.js +144 -144
  147. package/dist/cjs/clients/index.d.ts +3 -3
  148. package/dist/cjs/clients/index.js +19 -19
  149. package/dist/cjs/clients/internal-api/accounts-client.d.ts +91 -91
  150. package/dist/cjs/clients/internal-api/accounts-client.js +129 -129
  151. package/dist/cjs/clients/internal-api/cache-lambda-client.d.ts +26 -26
  152. package/dist/cjs/clients/internal-api/cache-lambda-client.js +89 -89
  153. package/dist/cjs/clients/internal-api/db-management-client.d.ts +18 -18
  154. package/dist/cjs/clients/internal-api/db-management-client.js +36 -36
  155. package/dist/cjs/clients/internal-api/destinations-client.d.ts +34 -34
  156. package/dist/cjs/clients/internal-api/destinations-client.js +79 -79
  157. package/dist/cjs/clients/internal-api/event-collector-client.d.ts +122 -122
  158. package/dist/cjs/clients/internal-api/event-collector-client.js +78 -78
  159. package/dist/cjs/clients/internal-api/identity-client.d.ts +41 -41
  160. package/dist/cjs/clients/internal-api/identity-client.js +137 -137
  161. package/dist/cjs/clients/internal-api/index.d.ts +9 -9
  162. package/dist/cjs/clients/internal-api/index.js +25 -25
  163. package/dist/cjs/clients/internal-api/shopify-app-install-client.d.ts +37 -37
  164. package/dist/cjs/clients/internal-api/shopify-app-install-client.js +81 -81
  165. package/dist/cjs/clients/internal-api/subscriptions-client.d.ts +26 -26
  166. package/dist/cjs/clients/internal-api/subscriptions-client.js +77 -77
  167. package/dist/cjs/clients/internal-api/users-auth-client.d.ts +35 -35
  168. package/dist/cjs/clients/internal-api/users-auth-client.js +110 -110
  169. package/dist/cjs/clients/third-party/acuity-client.d.ts +10 -10
  170. package/dist/cjs/clients/third-party/acuity-client.js +40 -40
  171. package/dist/cjs/clients/third-party/emailable-client.d.ts +7 -7
  172. package/dist/cjs/clients/third-party/emailable-client.js +25 -25
  173. package/dist/cjs/clients/third-party/exchange-rate-api-client.d.ts +17 -17
  174. package/dist/cjs/clients/third-party/exchange-rate-api-client.js +19 -19
  175. package/dist/cjs/clients/third-party/index.d.ts +6 -6
  176. package/dist/cjs/clients/third-party/index.js +22 -22
  177. package/dist/cjs/clients/third-party/loops-client.d.ts +10 -10
  178. package/dist/cjs/clients/third-party/loops-client.js +30 -30
  179. package/dist/cjs/clients/third-party/open-exchange-rates-client.d.ts +8 -8
  180. package/dist/cjs/clients/third-party/open-exchange-rates-client.js +27 -27
  181. package/dist/cjs/clients/third-party/shopify/graphql-analytics-queries.d.ts +18 -0
  182. package/dist/cjs/clients/third-party/shopify/graphql-analytics-queries.js +23 -0
  183. package/dist/cjs/clients/third-party/shopify/graphql-analytics-queries.js.map +1 -0
  184. package/dist/cjs/clients/third-party/shopify/graphql-order-queries.d.ts +25 -25
  185. package/dist/cjs/clients/third-party/shopify/graphql-order-queries.js +4 -4
  186. package/dist/cjs/clients/third-party/shopify/graphql-product-queries.d.ts +2 -2
  187. package/dist/cjs/clients/third-party/shopify/graphql-product-queries.js +5 -5
  188. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.d.ts +42 -10
  189. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.js +352 -161
  190. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.js.map +1 -1
  191. package/dist/cjs/clients/third-party/shopify-client.d.ts +29 -29
  192. package/dist/cjs/clients/third-party/shopify-client.js +146 -146
  193. package/dist/cjs/constants/index.d.ts +1 -1
  194. package/dist/cjs/constants/index.js +17 -17
  195. package/dist/cjs/constants/sqs.d.ts +20 -20
  196. package/dist/cjs/constants/sqs.js +26 -26
  197. package/dist/cjs/helpers/account-users-helper.d.ts +2 -2
  198. package/dist/cjs/helpers/account-users-helper.js +22 -22
  199. package/dist/cjs/helpers/acuity-helper.d.ts +4 -4
  200. package/dist/cjs/helpers/acuity-helper.js +56 -56
  201. package/dist/cjs/helpers/api-key-auth-helper.d.ts +9 -9
  202. package/dist/cjs/helpers/api-key-auth-helper.js +40 -40
  203. package/dist/cjs/helpers/api-key-authorizer-helper.d.ts +36 -36
  204. package/dist/cjs/helpers/api-key-authorizer-helper.js +87 -87
  205. package/dist/cjs/helpers/cognito-auth-helper.d.ts +5 -5
  206. package/dist/cjs/helpers/cognito-auth-helper.js +14 -14
  207. package/dist/cjs/helpers/index.d.ts +11 -11
  208. package/dist/cjs/helpers/index.js +27 -27
  209. package/dist/cjs/helpers/input-validation-helper.d.ts +3 -3
  210. package/dist/cjs/helpers/input-validation-helper.js +22 -22
  211. package/dist/cjs/helpers/logging-helper.d.ts +16 -16
  212. package/dist/cjs/helpers/logging-helper.js +84 -84
  213. package/dist/cjs/helpers/public-api-response-helper.d.ts +21 -21
  214. package/dist/cjs/helpers/public-api-response-helper.js +45 -45
  215. package/dist/cjs/helpers/response-helper.d.ts +18 -18
  216. package/dist/cjs/helpers/response-helper.js +43 -43
  217. package/dist/cjs/helpers/shopify-helper.d.ts +9 -9
  218. package/dist/cjs/helpers/shopify-helper.js +26 -26
  219. package/dist/cjs/helpers/sqs-utils.d.ts +6 -6
  220. package/dist/cjs/helpers/sqs-utils.js +14 -14
  221. package/dist/cjs/index.d.ts +7 -7
  222. package/dist/cjs/index.js +23 -23
  223. package/dist/cjs/libs/api-router/index.d.ts +2 -2
  224. package/dist/cjs/libs/api-router/index.js +18 -18
  225. package/dist/cjs/libs/api-router/public-api-router.d.ts +3 -3
  226. package/dist/cjs/libs/api-router/public-api-router.js +36 -36
  227. package/dist/cjs/libs/api-router/route-matcher.d.ts +21 -21
  228. package/dist/cjs/libs/api-router/route-matcher.js +36 -36
  229. package/dist/cjs/libs/click-id-parser.d.ts +23 -23
  230. package/dist/cjs/libs/click-id-parser.js +49 -49
  231. package/dist/cjs/libs/compression.d.ts +2 -2
  232. package/dist/cjs/libs/compression.js +33 -33
  233. package/dist/cjs/libs/contacts.d.ts +7 -7
  234. package/dist/cjs/libs/contacts.js +152 -152
  235. package/dist/cjs/libs/cookie.d.ts +17 -17
  236. package/dist/cjs/libs/cookie.js +76 -76
  237. package/dist/cjs/libs/crypto.d.ts +4 -4
  238. package/dist/cjs/libs/crypto.js +25 -25
  239. package/dist/cjs/libs/csv.d.ts +2 -2
  240. package/dist/cjs/libs/csv.js +35 -35
  241. package/dist/cjs/libs/currency.d.ts +1 -1
  242. package/dist/cjs/libs/currency.js +29 -29
  243. package/dist/cjs/libs/dates.d.ts +12 -12
  244. package/dist/cjs/libs/dates.js +96 -96
  245. package/dist/cjs/libs/domain.d.ts +2 -2
  246. package/dist/cjs/libs/domain.js +38 -38
  247. package/dist/cjs/libs/emails.d.ts +8 -8
  248. package/dist/cjs/libs/emails.js +154 -154
  249. package/dist/cjs/libs/http-error.d.ts +21 -21
  250. package/dist/cjs/libs/http-error.js +63 -63
  251. package/dist/cjs/libs/http-status-codes.d.ts +58 -58
  252. package/dist/cjs/libs/http-status-codes.js +62 -62
  253. package/dist/cjs/libs/index.d.ts +19 -19
  254. package/dist/cjs/libs/index.js +35 -35
  255. package/dist/cjs/libs/numbers.d.ts +1 -1
  256. package/dist/cjs/libs/numbers.js +15 -15
  257. package/dist/cjs/libs/referrer-parser/index.d.ts +2 -2
  258. package/dist/cjs/libs/referrer-parser/index.js +18 -18
  259. package/dist/cjs/libs/referrer-parser/referrer-data.d.ts +9 -9
  260. package/dist/cjs/libs/referrer-parser/referrer-data.js +3307 -3307
  261. package/dist/cjs/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  262. package/dist/cjs/libs/referrer-parser/referrer-parser-util.js +131 -131
  263. package/dist/cjs/libs/strings.d.ts +3 -3
  264. package/dist/cjs/libs/strings.js +46 -46
  265. package/dist/cjs/libs/traits.d.ts +6 -6
  266. package/dist/cjs/libs/traits.js +65 -65
  267. package/dist/cjs/libs/url.d.ts +1 -1
  268. package/dist/cjs/libs/url.js +13 -13
  269. package/dist/cjs/services/acuity-api-service.d.ts +9 -9
  270. package/dist/cjs/services/acuity-api-service.js +73 -73
  271. package/dist/cjs/services/cache/generic-cached-object.d.ts +5 -5
  272. package/dist/cjs/services/cache/generic-cached-object.js +2 -2
  273. package/dist/cjs/services/cache/index.d.ts +1 -1
  274. package/dist/cjs/services/cache/index.js +17 -17
  275. package/dist/cjs/services/cache/product-cache-service.d.ts +21 -21
  276. package/dist/cjs/services/cache/product-cache-service.js +76 -76
  277. package/dist/cjs/services/cost/cost-calculation-types.d.ts +69 -69
  278. package/dist/cjs/services/cost/cost-calculation-types.js +19 -19
  279. package/dist/cjs/services/cost/cost-calculator-service.d.ts +24 -24
  280. package/dist/cjs/services/cost/cost-calculator-service.js +461 -456
  281. package/dist/cjs/services/cost/cost-calculator-service.js.map +1 -1
  282. package/dist/cjs/services/cost/cost-currency-service.d.ts +6 -6
  283. package/dist/cjs/services/cost/cost-currency-service.js +87 -87
  284. package/dist/cjs/services/cost/cost-filter-service.d.ts +10 -10
  285. package/dist/cjs/services/cost/cost-filter-service.js +121 -121
  286. package/dist/cjs/services/cost/index.d.ts +5 -5
  287. package/dist/cjs/services/cost/index.js +21 -21
  288. package/dist/cjs/services/cost/order-cost/index.d.ts +2 -2
  289. package/dist/cjs/services/cost/order-cost/index.js +18 -18
  290. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.d.ts +26 -23
  291. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js +403 -361
  292. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js.map +1 -1
  293. package/dist/cjs/services/cost/order-cost/order-cost-resolution-types.d.ts +37 -37
  294. package/dist/cjs/services/cost/order-cost/order-cost-resolution-types.js +2 -2
  295. package/dist/cjs/services/currency-exchange-rate-lookup-service.d.ts +12 -12
  296. package/dist/cjs/services/currency-exchange-rate-lookup-service.js +94 -94
  297. package/dist/cjs/services/db/accounts-db-service.d.ts +9 -9
  298. package/dist/cjs/services/db/accounts-db-service.js +33 -33
  299. package/dist/cjs/services/db/api-keys-db-service.d.ts +10 -10
  300. package/dist/cjs/services/db/api-keys-db-service.js +36 -36
  301. package/dist/cjs/services/db/contact-enrichments-db-service.d.ts +15 -15
  302. package/dist/cjs/services/db/contact-enrichments-db-service.js +94 -94
  303. package/dist/cjs/services/db/currency-exchange-rates-db-service.d.ts +21 -21
  304. package/dist/cjs/services/db/currency-exchange-rates-db-service.js +39 -39
  305. package/dist/cjs/services/db/custom-measures-db-service.d.ts +14 -14
  306. package/dist/cjs/services/db/custom-measures-db-service.js +48 -48
  307. package/dist/cjs/services/db/destinations-db-service.d.ts +13 -13
  308. package/dist/cjs/services/db/destinations-db-service.js +74 -74
  309. package/dist/cjs/services/db/identity-cache-db-service.d.ts +28 -28
  310. package/dist/cjs/services/db/identity-cache-db-service.js +320 -320
  311. package/dist/cjs/services/db/identity-cache-dynamodb-service/constants.d.ts +3 -3
  312. package/dist/cjs/services/db/identity-cache-dynamodb-service/constants.js +6 -6
  313. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.d.ts +20 -20
  314. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +362 -362
  315. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.d.ts +23 -23
  316. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +222 -222
  317. package/dist/cjs/services/db/identity-cache-dynamodb-service/index.d.ts +4 -4
  318. package/dist/cjs/services/db/identity-cache-dynamodb-service/index.js +20 -20
  319. package/dist/cjs/services/db/identity-cache-dynamodb-service/key-builders.d.ts +12 -12
  320. package/dist/cjs/services/db/identity-cache-dynamodb-service/key-builders.js +31 -31
  321. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.d.ts +71 -71
  322. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.js +28 -28
  323. package/dist/cjs/services/db/index.d.ts +22 -22
  324. package/dist/cjs/services/db/index.js +38 -38
  325. package/dist/cjs/services/db/log-events-db-service.d.ts +11 -11
  326. package/dist/cjs/services/db/log-events-db-service.js +181 -181
  327. package/dist/cjs/services/db/pixels-db-service.d.ts +8 -8
  328. package/dist/cjs/services/db/pixels-db-service.js +35 -35
  329. package/dist/cjs/services/db/products-db-service-types.d.ts +10 -10
  330. package/dist/cjs/services/db/products-db-service-types.js +2 -2
  331. package/dist/cjs/services/db/products-db-service.d.ts +19 -19
  332. package/dist/cjs/services/db/products-db-service.js +281 -281
  333. package/dist/cjs/services/db/purchasable-contacts-db-service.d.ts +9 -9
  334. package/dist/cjs/services/db/purchasable-contacts-db-service.js +43 -43
  335. package/dist/cjs/services/db/purchased-contacts/index.d.ts +2 -2
  336. package/dist/cjs/services/db/purchased-contacts/index.js +18 -18
  337. package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.d.ts +18 -18
  338. package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.js +152 -152
  339. package/dist/cjs/services/db/purchased-contacts/types.d.ts +11 -11
  340. package/dist/cjs/services/db/purchased-contacts/types.js +2 -2
  341. package/dist/cjs/services/db/shopify-app-installs-db-service.d.ts +10 -10
  342. package/dist/cjs/services/db/shopify-app-installs-db-service.js +52 -52
  343. package/dist/cjs/services/db/shopify-products-cache-db-service.d.ts +16 -16
  344. package/dist/cjs/services/db/shopify-products-cache-db-service.js +73 -73
  345. package/dist/cjs/services/db/subscriptions-db-service.d.ts +11 -11
  346. package/dist/cjs/services/db/subscriptions-db-service.js +38 -38
  347. package/dist/cjs/services/db/tracking-events-db-service.d.ts +21 -21
  348. package/dist/cjs/services/db/tracking-events-db-service.js +188 -188
  349. package/dist/cjs/services/db/user-accounts-db-service.d.ts +7 -7
  350. package/dist/cjs/services/db/user-accounts-db-service.js +17 -17
  351. package/dist/cjs/services/email-verification/contact-email-verification-service.d.ts +7 -7
  352. package/dist/cjs/services/email-verification/contact-email-verification-service.js +101 -101
  353. package/dist/cjs/services/email-verification/email-verification-service.d.ts +19 -19
  354. package/dist/cjs/services/email-verification/email-verification-service.js +131 -131
  355. package/dist/cjs/services/email-verification/index.d.ts +2 -2
  356. package/dist/cjs/services/email-verification/index.js +18 -18
  357. package/dist/cjs/services/eventbridge-integration-service.d.ts +9 -9
  358. package/dist/cjs/services/eventbridge-integration-service.js +28 -28
  359. package/dist/cjs/services/events/build-collect-queue-tracking-event.d.ts +11 -11
  360. package/dist/cjs/services/events/build-collect-queue-tracking-event.js +23 -23
  361. package/dist/cjs/services/events/collect-queue-tracking-service.d.ts +12 -12
  362. package/dist/cjs/services/events/collect-queue-tracking-service.js +22 -22
  363. package/dist/cjs/services/events/index.d.ts +5 -5
  364. package/dist/cjs/services/events/index.js +21 -21
  365. package/dist/cjs/services/events/log-event-service.d.ts +19 -19
  366. package/dist/cjs/services/events/log-event-service.js +77 -77
  367. package/dist/cjs/services/events/metric-event-service.d.ts +9 -9
  368. package/dist/cjs/services/events/metric-event-service.js +49 -49
  369. package/dist/cjs/services/events/tracking-event-sqs-service.d.ts +8 -8
  370. package/dist/cjs/services/events/tracking-event-sqs-service.js +36 -36
  371. package/dist/cjs/services/generic-cache-service.d.ts +7 -7
  372. package/dist/cjs/services/generic-cache-service.js +33 -33
  373. package/dist/cjs/services/index.d.ts +11 -11
  374. package/dist/cjs/services/index.js +27 -27
  375. package/dist/cjs/services/ipdata-lookup-service.d.ts +20 -20
  376. package/dist/cjs/services/ipdata-lookup-service.js +112 -112
  377. package/dist/cjs/services/shopify/index.d.ts +2 -2
  378. package/dist/cjs/services/shopify/index.js +18 -18
  379. package/dist/cjs/services/shopify/products/index.d.ts +1 -1
  380. package/dist/cjs/services/shopify/products/index.js +17 -17
  381. package/dist/cjs/services/shopify/products/shopify-products-serviceV2.d.ts +17 -17
  382. package/dist/cjs/services/shopify/products/shopify-products-serviceV2.js +112 -112
  383. package/dist/cjs/services/shopify/shopify-graphql-transformer.d.ts +8 -8
  384. package/dist/cjs/services/shopify/shopify-graphql-transformer.js +141 -141
  385. package/dist/cjs/types/acuity-types.d.ts +74 -74
  386. package/dist/cjs/types/acuity-types.js +2 -2
  387. package/dist/cjs/types/api-response.d.ts +6 -6
  388. package/dist/cjs/types/api-response.js +2 -2
  389. package/dist/cjs/types/index.d.ts +6 -6
  390. package/dist/cjs/types/index.js +35 -35
  391. package/dist/cjs/types/internal-events/event-detail-types.d.ts +20 -20
  392. package/dist/cjs/types/internal-events/event-detail-types.js +27 -27
  393. package/dist/cjs/types/internal-events/index.d.ts +1 -1
  394. package/dist/cjs/types/internal-events/index.js +17 -17
  395. package/dist/cjs/types/open-exchange-rates-types.d.ts +10 -10
  396. package/dist/cjs/types/open-exchange-rates-types.js +2 -2
  397. package/dist/cjs/types/public-api-types.d.ts +24 -24
  398. package/dist/cjs/types/public-api-types.js +13 -13
  399. package/dist/cjs/types/shopify-graphql-types/admin.generated.d.ts +123 -123
  400. package/dist/cjs/types/shopify-graphql-types/admin.generated.js +2 -2
  401. package/dist/cjs/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  402. package/dist/cjs/types/shopify-graphql-types/admin.types.js +5311 -5311
  403. package/dist/cjs/types/shopify-graphql-types/index.d.ts +2 -2
  404. package/dist/cjs/types/shopify-graphql-types/index.js +18 -18
  405. package/dist/cjs/types/shopify-rest-types.d.ts +767 -767
  406. package/dist/cjs/types/shopify-rest-types.js +2 -2
  407. package/dist/cjs/utils/compression.d.ts +36 -36
  408. package/dist/cjs/utils/compression.js +198 -198
  409. package/dist/cjs/utils/custom-measure-formula-utils.d.ts +6 -6
  410. package/dist/cjs/utils/custom-measure-formula-utils.js +209 -209
  411. package/dist/cjs/utils/index.d.ts +4 -4
  412. package/dist/cjs/utils/index.js +20 -20
  413. package/dist/cjs/utils/retry-envelope.d.ts +12 -12
  414. package/dist/cjs/utils/retry-envelope.js +28 -28
  415. package/dist/cjs/utils/size.d.ts +2 -2
  416. package/dist/cjs/utils/size.js +49 -49
  417. package/dist/esm/__tests__/clients/acuity-client.spec.d.ts +1 -1
  418. package/dist/esm/__tests__/clients/acuity-client.spec.js +41 -41
  419. package/dist/esm/__tests__/clients/cross-platform-compression.spec.d.ts +1 -1
  420. package/dist/esm/__tests__/clients/cross-platform-compression.spec.js +329 -329
  421. package/dist/esm/__tests__/clients/dynamodb-client.spec.d.ts +1 -1
  422. package/dist/esm/__tests__/clients/dynamodb-client.spec.js +192 -192
  423. package/dist/esm/__tests__/clients/event-collector-client.spec.d.ts +1 -1
  424. package/dist/esm/__tests__/clients/event-collector-client.spec.js +225 -225
  425. package/dist/esm/__tests__/clients/open-exchange-rates-client.spec.d.ts +1 -1
  426. package/dist/esm/__tests__/clients/open-exchange-rates-client.spec.js +53 -53
  427. package/dist/esm/__tests__/clients/sqs-bundled-client.spec.d.ts +1 -1
  428. package/dist/esm/__tests__/clients/sqs-bundled-client.spec.js +906 -906
  429. package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.d.ts +1 -1
  430. package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.js +538 -538
  431. package/dist/esm/__tests__/clients/sqs-client.spec.d.ts +1 -1
  432. package/dist/esm/__tests__/clients/sqs-client.spec.js +189 -189
  433. package/dist/esm/__tests__/clients/sqs-unbundle.spec.d.ts +1 -1
  434. package/dist/esm/__tests__/clients/sqs-unbundle.spec.js +1355 -1355
  435. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.d.ts +1 -1
  436. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js +66 -66
  437. package/dist/esm/__tests__/db/destinations-db-service.spec.d.ts +1 -1
  438. package/dist/esm/__tests__/db/destinations-db-service.spec.js +123 -123
  439. package/dist/esm/__tests__/db/products-db-service.spec.d.ts +1 -1
  440. package/dist/esm/__tests__/db/products-db-service.spec.js +87 -87
  441. package/dist/esm/__tests__/db/shared-read-db-services.spec.d.ts +1 -1
  442. package/dist/esm/__tests__/db/shared-read-db-services.spec.js +87 -87
  443. package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.d.ts +1 -1
  444. package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.js +102 -102
  445. package/dist/esm/__tests__/db/subscriptions-db-service.spec.d.ts +1 -1
  446. package/dist/esm/__tests__/db/subscriptions-db-service.spec.js +93 -93
  447. package/dist/esm/__tests__/db/user-accounts-db-service.spec.d.ts +1 -1
  448. package/dist/esm/__tests__/db/user-accounts-db-service.spec.js +74 -74
  449. package/dist/esm/__tests__/helpers/account-users-helper.spec.d.ts +1 -1
  450. package/dist/esm/__tests__/helpers/account-users-helper.spec.js +218 -218
  451. package/dist/esm/__tests__/helpers/acuity-helper.spec.d.ts +1 -1
  452. package/dist/esm/__tests__/helpers/acuity-helper.spec.js +67 -67
  453. package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.d.ts +1 -1
  454. package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.js +80 -80
  455. package/dist/esm/__tests__/helpers/cognito-auth-helper.spec.d.ts +1 -1
  456. package/dist/esm/__tests__/helpers/cognito-auth-helper.spec.js +44 -44
  457. package/dist/esm/__tests__/helpers/public-api-response-helper.spec.d.ts +1 -1
  458. package/dist/esm/__tests__/helpers/public-api-response-helper.spec.js +55 -55
  459. package/dist/esm/__tests__/identity-cache/helpers.spec.d.ts +1 -1
  460. package/dist/esm/__tests__/identity-cache/helpers.spec.js +590 -590
  461. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.d.ts +1 -1
  462. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js +674 -674
  463. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.d.ts +1 -1
  464. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js +553 -553
  465. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.d.ts +1 -1
  466. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js +629 -629
  467. package/dist/esm/__tests__/identity-cache/identity-client.spec.d.ts +1 -1
  468. package/dist/esm/__tests__/identity-cache/identity-client.spec.js +357 -357
  469. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.d.ts +1 -1
  470. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.js +135 -135
  471. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.d.ts +1 -1
  472. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.js +150 -150
  473. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.d.ts +1 -1
  474. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.js +69 -69
  475. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.d.ts +1 -1
  476. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.js +86 -86
  477. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.d.ts +1 -1
  478. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js +133 -133
  479. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.d.ts +1 -1
  480. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.js +221 -221
  481. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.d.ts +28 -28
  482. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.js +82 -82
  483. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.d.ts +1 -1
  484. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.js +1768 -1768
  485. package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.d.ts +1 -1
  486. package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.js +816 -816
  487. package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.d.ts +1 -1
  488. package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.js +582 -582
  489. package/dist/esm/__tests__/libs/compress-decompress.spec.d.ts +1 -1
  490. package/dist/esm/__tests__/libs/compress-decompress.spec.js +14 -14
  491. package/dist/esm/__tests__/libs/contacts.spec.d.ts +1 -1
  492. package/dist/esm/__tests__/libs/contacts.spec.js +292 -292
  493. package/dist/esm/__tests__/libs/currency.spec.d.ts +1 -1
  494. package/dist/esm/__tests__/libs/currency.spec.js +218 -218
  495. package/dist/esm/__tests__/libs/dates.spec.d.ts +1 -1
  496. package/dist/esm/__tests__/libs/dates.spec.js +128 -128
  497. package/dist/esm/__tests__/libs/domain.spec.d.ts +1 -1
  498. package/dist/esm/__tests__/libs/domain.spec.js +105 -105
  499. package/dist/esm/__tests__/libs/numbers.spec.d.ts +1 -1
  500. package/dist/esm/__tests__/libs/numbers.spec.js +259 -259
  501. package/dist/esm/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  502. package/dist/esm/__tests__/s3-client/s3-client.spec.js +31 -31
  503. package/dist/esm/__tests__/services/acuity-api-service.spec.d.ts +1 -1
  504. package/dist/esm/__tests__/services/acuity-api-service.spec.js +69 -69
  505. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.d.ts +1 -1
  506. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.js +21 -21
  507. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.d.ts +1 -1
  508. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js +3347 -3317
  509. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js.map +1 -1
  510. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.d.ts +1 -1
  511. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.js +112 -112
  512. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.d.ts +1 -1
  513. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.js +466 -466
  514. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.d.ts +1 -1
  515. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js +358 -204
  516. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js.map +1 -1
  517. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.d.ts +1 -1
  518. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.js +32 -32
  519. package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.d.ts +1 -1
  520. package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.js +91 -91
  521. package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.d.ts +1 -1
  522. package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.js +55 -55
  523. package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.d.ts +1 -1
  524. package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.js +227 -227
  525. package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.d.ts +1 -1
  526. package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.js +189 -189
  527. package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.d.ts +1 -1
  528. package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.js +33 -33
  529. package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.d.ts +1 -1
  530. package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.js +156 -156
  531. package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.d.ts +1 -1
  532. package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.js +67 -67
  533. package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.d.ts +1 -1
  534. package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.js +144 -144
  535. package/dist/esm/clients/generic/cognito-client.d.ts +23 -23
  536. package/dist/esm/clients/generic/cognito-client.js +204 -204
  537. package/dist/esm/clients/generic/dynamodb-client.d.ts +20 -20
  538. package/dist/esm/clients/generic/dynamodb-client.js +231 -231
  539. package/dist/esm/clients/generic/eventbridge-client.d.ts +14 -14
  540. package/dist/esm/clients/generic/eventbridge-client.js +47 -47
  541. package/dist/esm/clients/generic/http-client.d.ts +14 -14
  542. package/dist/esm/clients/generic/http-client.js +53 -53
  543. package/dist/esm/clients/generic/index.d.ts +13 -13
  544. package/dist/esm/clients/generic/index.js +13 -13
  545. package/dist/esm/clients/generic/lambda-invoke-client.d.ts +10 -10
  546. package/dist/esm/clients/generic/lambda-invoke-client.js +35 -35
  547. package/dist/esm/clients/generic/location-client.d.ts +8 -8
  548. package/dist/esm/clients/generic/location-client.js +27 -27
  549. package/dist/esm/clients/generic/redis-client.d.ts +33 -33
  550. package/dist/esm/clients/generic/redis-client.js +184 -184
  551. package/dist/esm/clients/generic/s3-client.d.ts +23 -23
  552. package/dist/esm/clients/generic/s3-client.js +209 -209
  553. package/dist/esm/clients/generic/singlestore-db-client.d.ts +14 -14
  554. package/dist/esm/clients/generic/singlestore-db-client.js +40 -40
  555. package/dist/esm/clients/generic/sqs-bundled-client.d.ts +15 -15
  556. package/dist/esm/clients/generic/sqs-bundled-client.js +307 -307
  557. package/dist/esm/clients/generic/sqs-bundled-client.types.d.ts +53 -53
  558. package/dist/esm/clients/generic/sqs-bundled-client.types.js +14 -14
  559. package/dist/esm/clients/generic/sqs-client.d.ts +53 -53
  560. package/dist/esm/clients/generic/sqs-client.js +281 -281
  561. package/dist/esm/clients/generic/sqs-unbundle.d.ts +32 -32
  562. package/dist/esm/clients/generic/sqs-unbundle.js +137 -137
  563. package/dist/esm/clients/index.d.ts +3 -3
  564. package/dist/esm/clients/index.js +3 -3
  565. package/dist/esm/clients/internal-api/accounts-client.d.ts +91 -91
  566. package/dist/esm/clients/internal-api/accounts-client.js +125 -125
  567. package/dist/esm/clients/internal-api/cache-lambda-client.d.ts +26 -26
  568. package/dist/esm/clients/internal-api/cache-lambda-client.js +85 -85
  569. package/dist/esm/clients/internal-api/db-management-client.d.ts +18 -18
  570. package/dist/esm/clients/internal-api/db-management-client.js +32 -32
  571. package/dist/esm/clients/internal-api/destinations-client.d.ts +34 -34
  572. package/dist/esm/clients/internal-api/destinations-client.js +75 -75
  573. package/dist/esm/clients/internal-api/event-collector-client.d.ts +122 -122
  574. package/dist/esm/clients/internal-api/event-collector-client.js +74 -74
  575. package/dist/esm/clients/internal-api/identity-client.d.ts +41 -41
  576. package/dist/esm/clients/internal-api/identity-client.js +133 -133
  577. package/dist/esm/clients/internal-api/index.d.ts +9 -9
  578. package/dist/esm/clients/internal-api/index.js +9 -9
  579. package/dist/esm/clients/internal-api/shopify-app-install-client.d.ts +37 -37
  580. package/dist/esm/clients/internal-api/shopify-app-install-client.js +77 -77
  581. package/dist/esm/clients/internal-api/subscriptions-client.d.ts +26 -26
  582. package/dist/esm/clients/internal-api/subscriptions-client.js +73 -73
  583. package/dist/esm/clients/internal-api/users-auth-client.d.ts +35 -35
  584. package/dist/esm/clients/internal-api/users-auth-client.js +106 -106
  585. package/dist/esm/clients/third-party/acuity-client.d.ts +10 -10
  586. package/dist/esm/clients/third-party/acuity-client.js +36 -36
  587. package/dist/esm/clients/third-party/emailable-client.d.ts +7 -7
  588. package/dist/esm/clients/third-party/emailable-client.js +21 -21
  589. package/dist/esm/clients/third-party/exchange-rate-api-client.d.ts +17 -17
  590. package/dist/esm/clients/third-party/exchange-rate-api-client.js +15 -15
  591. package/dist/esm/clients/third-party/index.d.ts +6 -6
  592. package/dist/esm/clients/third-party/index.js +6 -6
  593. package/dist/esm/clients/third-party/loops-client.d.ts +10 -10
  594. package/dist/esm/clients/third-party/loops-client.js +26 -26
  595. package/dist/esm/clients/third-party/open-exchange-rates-client.d.ts +8 -8
  596. package/dist/esm/clients/third-party/open-exchange-rates-client.js +23 -23
  597. package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.d.ts +18 -0
  598. package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.js +20 -0
  599. package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.js.map +1 -0
  600. package/dist/esm/clients/third-party/shopify/graphql-order-queries.d.ts +25 -25
  601. package/dist/esm/clients/third-party/shopify/graphql-order-queries.js +1 -1
  602. package/dist/esm/clients/third-party/shopify/graphql-product-queries.d.ts +2 -2
  603. package/dist/esm/clients/third-party/shopify/graphql-product-queries.js +2 -2
  604. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.d.ts +42 -10
  605. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js +348 -157
  606. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js.map +1 -1
  607. package/dist/esm/clients/third-party/shopify-client.d.ts +29 -29
  608. package/dist/esm/clients/third-party/shopify-client.js +142 -142
  609. package/dist/esm/constants/index.d.ts +1 -1
  610. package/dist/esm/constants/index.js +1 -1
  611. package/dist/esm/constants/sqs.d.ts +20 -20
  612. package/dist/esm/constants/sqs.js +22 -22
  613. package/dist/esm/helpers/account-users-helper.d.ts +2 -2
  614. package/dist/esm/helpers/account-users-helper.js +18 -18
  615. package/dist/esm/helpers/acuity-helper.d.ts +4 -4
  616. package/dist/esm/helpers/acuity-helper.js +51 -51
  617. package/dist/esm/helpers/api-key-auth-helper.d.ts +9 -9
  618. package/dist/esm/helpers/api-key-auth-helper.js +35 -35
  619. package/dist/esm/helpers/api-key-authorizer-helper.d.ts +36 -36
  620. package/dist/esm/helpers/api-key-authorizer-helper.js +83 -83
  621. package/dist/esm/helpers/cognito-auth-helper.d.ts +5 -5
  622. package/dist/esm/helpers/cognito-auth-helper.js +10 -10
  623. package/dist/esm/helpers/index.d.ts +11 -11
  624. package/dist/esm/helpers/index.js +11 -11
  625. package/dist/esm/helpers/input-validation-helper.d.ts +3 -3
  626. package/dist/esm/helpers/input-validation-helper.js +18 -18
  627. package/dist/esm/helpers/logging-helper.d.ts +16 -16
  628. package/dist/esm/helpers/logging-helper.js +56 -56
  629. package/dist/esm/helpers/public-api-response-helper.d.ts +21 -21
  630. package/dist/esm/helpers/public-api-response-helper.js +38 -38
  631. package/dist/esm/helpers/response-helper.d.ts +18 -18
  632. package/dist/esm/helpers/response-helper.js +37 -37
  633. package/dist/esm/helpers/shopify-helper.d.ts +9 -9
  634. package/dist/esm/helpers/shopify-helper.js +21 -21
  635. package/dist/esm/helpers/sqs-utils.d.ts +6 -6
  636. package/dist/esm/helpers/sqs-utils.js +9 -9
  637. package/dist/esm/index.d.ts +7 -7
  638. package/dist/esm/index.js +7 -7
  639. package/dist/esm/libs/api-router/index.d.ts +2 -2
  640. package/dist/esm/libs/api-router/index.js +2 -2
  641. package/dist/esm/libs/api-router/public-api-router.d.ts +3 -3
  642. package/dist/esm/libs/api-router/public-api-router.js +32 -32
  643. package/dist/esm/libs/api-router/route-matcher.d.ts +21 -21
  644. package/dist/esm/libs/api-router/route-matcher.js +30 -30
  645. package/dist/esm/libs/click-id-parser.d.ts +23 -23
  646. package/dist/esm/libs/click-id-parser.js +45 -45
  647. package/dist/esm/libs/compression.d.ts +2 -2
  648. package/dist/esm/libs/compression.js +25 -25
  649. package/dist/esm/libs/contacts.d.ts +7 -7
  650. package/dist/esm/libs/contacts.js +143 -143
  651. package/dist/esm/libs/cookie.d.ts +17 -17
  652. package/dist/esm/libs/cookie.js +70 -70
  653. package/dist/esm/libs/crypto.d.ts +4 -4
  654. package/dist/esm/libs/crypto.js +15 -15
  655. package/dist/esm/libs/csv.d.ts +2 -2
  656. package/dist/esm/libs/csv.js +30 -30
  657. package/dist/esm/libs/currency.d.ts +1 -1
  658. package/dist/esm/libs/currency.js +22 -22
  659. package/dist/esm/libs/dates.d.ts +12 -12
  660. package/dist/esm/libs/dates.js +83 -83
  661. package/dist/esm/libs/domain.d.ts +2 -2
  662. package/dist/esm/libs/domain.js +33 -33
  663. package/dist/esm/libs/emails.d.ts +8 -8
  664. package/dist/esm/libs/emails.js +146 -146
  665. package/dist/esm/libs/http-error.d.ts +21 -21
  666. package/dist/esm/libs/http-error.js +59 -59
  667. package/dist/esm/libs/http-status-codes.d.ts +58 -58
  668. package/dist/esm/libs/http-status-codes.js +59 -59
  669. package/dist/esm/libs/index.d.ts +19 -19
  670. package/dist/esm/libs/index.js +19 -19
  671. package/dist/esm/libs/numbers.d.ts +1 -1
  672. package/dist/esm/libs/numbers.js +11 -11
  673. package/dist/esm/libs/referrer-parser/index.d.ts +2 -2
  674. package/dist/esm/libs/referrer-parser/index.js +2 -2
  675. package/dist/esm/libs/referrer-parser/referrer-data.d.ts +9 -9
  676. package/dist/esm/libs/referrer-parser/referrer-data.js +3304 -3304
  677. package/dist/esm/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  678. package/dist/esm/libs/referrer-parser/referrer-parser-util.js +124 -124
  679. package/dist/esm/libs/strings.d.ts +3 -3
  680. package/dist/esm/libs/strings.js +40 -40
  681. package/dist/esm/libs/traits.d.ts +6 -6
  682. package/dist/esm/libs/traits.js +54 -54
  683. package/dist/esm/libs/url.d.ts +1 -1
  684. package/dist/esm/libs/url.js +9 -9
  685. package/dist/esm/services/acuity-api-service.d.ts +9 -9
  686. package/dist/esm/services/acuity-api-service.js +69 -69
  687. package/dist/esm/services/cache/generic-cached-object.d.ts +5 -5
  688. package/dist/esm/services/cache/generic-cached-object.js +1 -1
  689. package/dist/esm/services/cache/index.d.ts +1 -1
  690. package/dist/esm/services/cache/index.js +1 -1
  691. package/dist/esm/services/cache/product-cache-service.d.ts +21 -21
  692. package/dist/esm/services/cache/product-cache-service.js +68 -68
  693. package/dist/esm/services/cost/cost-calculation-types.d.ts +69 -69
  694. package/dist/esm/services/cost/cost-calculation-types.js +15 -15
  695. package/dist/esm/services/cost/cost-calculator-service.d.ts +24 -24
  696. package/dist/esm/services/cost/cost-calculator-service.js +455 -450
  697. package/dist/esm/services/cost/cost-calculator-service.js.map +1 -1
  698. package/dist/esm/services/cost/cost-currency-service.d.ts +6 -6
  699. package/dist/esm/services/cost/cost-currency-service.js +84 -84
  700. package/dist/esm/services/cost/cost-filter-service.d.ts +10 -10
  701. package/dist/esm/services/cost/cost-filter-service.js +118 -118
  702. package/dist/esm/services/cost/index.d.ts +5 -5
  703. package/dist/esm/services/cost/index.js +5 -5
  704. package/dist/esm/services/cost/order-cost/index.d.ts +2 -2
  705. package/dist/esm/services/cost/order-cost/index.js +2 -2
  706. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.d.ts +26 -23
  707. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js +397 -355
  708. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js.map +1 -1
  709. package/dist/esm/services/cost/order-cost/order-cost-resolution-types.d.ts +37 -37
  710. package/dist/esm/services/cost/order-cost/order-cost-resolution-types.js +1 -1
  711. package/dist/esm/services/currency-exchange-rate-lookup-service.d.ts +12 -12
  712. package/dist/esm/services/currency-exchange-rate-lookup-service.js +90 -90
  713. package/dist/esm/services/db/accounts-db-service.d.ts +9 -9
  714. package/dist/esm/services/db/accounts-db-service.js +29 -29
  715. package/dist/esm/services/db/api-keys-db-service.d.ts +10 -10
  716. package/dist/esm/services/db/api-keys-db-service.js +32 -32
  717. package/dist/esm/services/db/contact-enrichments-db-service.d.ts +15 -15
  718. package/dist/esm/services/db/contact-enrichments-db-service.js +90 -90
  719. package/dist/esm/services/db/currency-exchange-rates-db-service.d.ts +21 -21
  720. package/dist/esm/services/db/currency-exchange-rates-db-service.js +35 -35
  721. package/dist/esm/services/db/custom-measures-db-service.d.ts +14 -14
  722. package/dist/esm/services/db/custom-measures-db-service.js +44 -44
  723. package/dist/esm/services/db/destinations-db-service.d.ts +13 -13
  724. package/dist/esm/services/db/destinations-db-service.js +70 -70
  725. package/dist/esm/services/db/identity-cache-db-service.d.ts +28 -28
  726. package/dist/esm/services/db/identity-cache-db-service.js +313 -313
  727. package/dist/esm/services/db/identity-cache-dynamodb-service/constants.d.ts +3 -3
  728. package/dist/esm/services/db/identity-cache-dynamodb-service/constants.js +3 -3
  729. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.d.ts +20 -20
  730. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +358 -358
  731. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.d.ts +23 -23
  732. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +218 -218
  733. package/dist/esm/services/db/identity-cache-dynamodb-service/index.d.ts +4 -4
  734. package/dist/esm/services/db/identity-cache-dynamodb-service/index.js +4 -4
  735. package/dist/esm/services/db/identity-cache-dynamodb-service/key-builders.d.ts +12 -12
  736. package/dist/esm/services/db/identity-cache-dynamodb-service/key-builders.js +23 -23
  737. package/dist/esm/services/db/identity-cache-dynamodb-service/types.d.ts +71 -71
  738. package/dist/esm/services/db/identity-cache-dynamodb-service/types.js +25 -25
  739. package/dist/esm/services/db/index.d.ts +22 -22
  740. package/dist/esm/services/db/index.js +22 -22
  741. package/dist/esm/services/db/log-events-db-service.d.ts +11 -11
  742. package/dist/esm/services/db/log-events-db-service.js +177 -177
  743. package/dist/esm/services/db/pixels-db-service.d.ts +8 -8
  744. package/dist/esm/services/db/pixels-db-service.js +31 -31
  745. package/dist/esm/services/db/products-db-service-types.d.ts +10 -10
  746. package/dist/esm/services/db/products-db-service-types.js +1 -1
  747. package/dist/esm/services/db/products-db-service.d.ts +19 -19
  748. package/dist/esm/services/db/products-db-service.js +277 -277
  749. package/dist/esm/services/db/purchasable-contacts-db-service.d.ts +9 -9
  750. package/dist/esm/services/db/purchasable-contacts-db-service.js +39 -39
  751. package/dist/esm/services/db/purchased-contacts/index.d.ts +2 -2
  752. package/dist/esm/services/db/purchased-contacts/index.js +2 -2
  753. package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.d.ts +18 -18
  754. package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.js +148 -148
  755. package/dist/esm/services/db/purchased-contacts/types.d.ts +11 -11
  756. package/dist/esm/services/db/purchased-contacts/types.js +1 -1
  757. package/dist/esm/services/db/shopify-app-installs-db-service.d.ts +10 -10
  758. package/dist/esm/services/db/shopify-app-installs-db-service.js +48 -48
  759. package/dist/esm/services/db/shopify-products-cache-db-service.d.ts +16 -16
  760. package/dist/esm/services/db/shopify-products-cache-db-service.js +66 -66
  761. package/dist/esm/services/db/subscriptions-db-service.d.ts +11 -11
  762. package/dist/esm/services/db/subscriptions-db-service.js +34 -34
  763. package/dist/esm/services/db/tracking-events-db-service.d.ts +21 -21
  764. package/dist/esm/services/db/tracking-events-db-service.js +184 -184
  765. package/dist/esm/services/db/user-accounts-db-service.d.ts +7 -7
  766. package/dist/esm/services/db/user-accounts-db-service.js +13 -13
  767. package/dist/esm/services/email-verification/contact-email-verification-service.d.ts +7 -7
  768. package/dist/esm/services/email-verification/contact-email-verification-service.js +97 -97
  769. package/dist/esm/services/email-verification/email-verification-service.d.ts +19 -19
  770. package/dist/esm/services/email-verification/email-verification-service.js +127 -127
  771. package/dist/esm/services/email-verification/index.d.ts +2 -2
  772. package/dist/esm/services/email-verification/index.js +2 -2
  773. package/dist/esm/services/eventbridge-integration-service.d.ts +9 -9
  774. package/dist/esm/services/eventbridge-integration-service.js +24 -24
  775. package/dist/esm/services/events/build-collect-queue-tracking-event.d.ts +11 -11
  776. package/dist/esm/services/events/build-collect-queue-tracking-event.js +19 -19
  777. package/dist/esm/services/events/collect-queue-tracking-service.d.ts +12 -12
  778. package/dist/esm/services/events/collect-queue-tracking-service.js +18 -18
  779. package/dist/esm/services/events/index.d.ts +5 -5
  780. package/dist/esm/services/events/index.js +5 -5
  781. package/dist/esm/services/events/log-event-service.d.ts +19 -19
  782. package/dist/esm/services/events/log-event-service.js +73 -73
  783. package/dist/esm/services/events/metric-event-service.d.ts +9 -9
  784. package/dist/esm/services/events/metric-event-service.js +45 -45
  785. package/dist/esm/services/events/tracking-event-sqs-service.d.ts +8 -8
  786. package/dist/esm/services/events/tracking-event-sqs-service.js +32 -32
  787. package/dist/esm/services/generic-cache-service.d.ts +7 -7
  788. package/dist/esm/services/generic-cache-service.js +29 -29
  789. package/dist/esm/services/index.d.ts +11 -11
  790. package/dist/esm/services/index.js +11 -11
  791. package/dist/esm/services/ipdata-lookup-service.d.ts +20 -20
  792. package/dist/esm/services/ipdata-lookup-service.js +108 -108
  793. package/dist/esm/services/shopify/index.d.ts +2 -2
  794. package/dist/esm/services/shopify/index.js +2 -2
  795. package/dist/esm/services/shopify/products/index.d.ts +1 -1
  796. package/dist/esm/services/shopify/products/index.js +1 -1
  797. package/dist/esm/services/shopify/products/shopify-products-serviceV2.d.ts +17 -17
  798. package/dist/esm/services/shopify/products/shopify-products-serviceV2.js +108 -108
  799. package/dist/esm/services/shopify/shopify-graphql-transformer.d.ts +8 -8
  800. package/dist/esm/services/shopify/shopify-graphql-transformer.js +138 -138
  801. package/dist/esm/types/acuity-types.d.ts +74 -74
  802. package/dist/esm/types/acuity-types.js +1 -1
  803. package/dist/esm/types/api-response.d.ts +6 -6
  804. package/dist/esm/types/api-response.js +1 -1
  805. package/dist/esm/types/index.d.ts +6 -6
  806. package/dist/esm/types/index.js +6 -6
  807. package/dist/esm/types/internal-events/event-detail-types.d.ts +20 -20
  808. package/dist/esm/types/internal-events/event-detail-types.js +24 -24
  809. package/dist/esm/types/internal-events/index.d.ts +1 -1
  810. package/dist/esm/types/internal-events/index.js +1 -1
  811. package/dist/esm/types/open-exchange-rates-types.d.ts +10 -10
  812. package/dist/esm/types/open-exchange-rates-types.js +1 -1
  813. package/dist/esm/types/public-api-types.d.ts +24 -24
  814. package/dist/esm/types/public-api-types.js +10 -10
  815. package/dist/esm/types/shopify-graphql-types/admin.generated.d.ts +123 -123
  816. package/dist/esm/types/shopify-graphql-types/admin.generated.js +1 -1
  817. package/dist/esm/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  818. package/dist/esm/types/shopify-graphql-types/admin.types.js +5299 -5299
  819. package/dist/esm/types/shopify-graphql-types/index.d.ts +2 -2
  820. package/dist/esm/types/shopify-graphql-types/index.js +2 -2
  821. package/dist/esm/types/shopify-rest-types.d.ts +767 -767
  822. package/dist/esm/types/shopify-rest-types.js +1 -1
  823. package/dist/esm/utils/compression.d.ts +36 -36
  824. package/dist/esm/utils/compression.js +187 -187
  825. package/dist/esm/utils/custom-measure-formula-utils.d.ts +6 -6
  826. package/dist/esm/utils/custom-measure-formula-utils.js +201 -201
  827. package/dist/esm/utils/index.d.ts +4 -4
  828. package/dist/esm/utils/index.js +4 -4
  829. package/dist/esm/utils/retry-envelope.d.ts +12 -12
  830. package/dist/esm/utils/retry-envelope.js +22 -22
  831. package/dist/esm/utils/size.d.ts +2 -2
  832. package/dist/esm/utils/size.js +44 -44
  833. package/package.json +136 -135
@@ -1,556 +1,556 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- jest.mock('../../clients/index.js', () => ({
4
- DynamoDbClient: {
5
- safeGet: jest.fn(),
6
- safePut: jest.fn(),
7
- safeDelete: jest.fn(),
8
- safeBatchGet: jest.fn(),
9
- safeBatchWrite: jest.fn(),
10
- safeQueryByGSI: jest.fn(),
11
- batchWrite: jest.fn(),
12
- },
13
- }));
14
- jest.mock('../../helpers/index.js', () => ({
15
- Logger: {
16
- debug: jest.fn(),
17
- info: jest.fn(),
18
- warn: jest.fn(),
19
- error: jest.fn(),
20
- },
21
- }));
22
- const identity_cache_dynamodb_db_service_js_1 = require("../../services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js");
23
- const index_js_1 = require("../../clients/index.js");
24
- const index_js_2 = require("../../helpers/index.js");
25
- const mockedDynamoDbClient = index_js_1.DynamoDbClient;
26
- const mockedLogger = index_js_2.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
- });
35
- describe('cache hit by identity ID', () => {
36
- it('should return cachedIdentity with lookupPath=identity_id and cacheHit=true', async () => {
37
- const incomingIdentity = {
38
- identityId: 'identity-123',
39
- traits: { emails: ['test@email.com'] },
40
- };
41
- const cachedRecord = {
42
- pk: `identity#${pixelId}#identity-123`,
43
- pixelId,
44
- identityId: 'identity-123',
45
- response: {
46
- identityId: 'identity-123',
47
- traits: {
48
- emails: ['test@email.com', 'cached@email.com'],
49
- phones: ['555-1234'],
50
- },
51
- },
52
- updatedAt: new Date().toISOString(),
53
- };
54
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
55
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
56
- expect(result.cacheHit).toBe(true);
57
- expect(result.lookupPath).toBe('identity_id');
58
- expect(result.cachedIdentity).toEqual(cachedRecord.response);
59
- expect(result.discoveredIdentityId).toBeUndefined();
60
- expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledTimes(1);
61
- expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `identity#${pixelId}#identity-123`);
62
- });
63
- it('should return cachedIdentity with all traits preserved', async () => {
64
- const incomingIdentity = {
65
- identityId: 'full-traits-id',
66
- traits: { emails: ['new@email.com'] },
67
- };
68
- const fullCachedIdentity = {
69
- identityId: 'full-traits-id',
70
- traits: {
71
- emails: ['existing@email.com', 'another@email.com'],
72
- phones: ['555-1111', '555-2222'],
73
- addresses: [{ city: 'New York', zip: '10001' }],
74
- userIds: ['user-1', 'user-2'],
75
- shopifyYIds: ['shopify-y-1'],
76
- click: { fbp: 'fb.1.123.456' },
77
- ipAddress: '192.168.1.1',
78
- userAgent: 'Mozilla/5.0...',
79
- },
80
- };
81
- const cachedRecord = {
82
- pk: `identity#${pixelId}#full-traits-id`,
83
- pixelId,
84
- identityId: 'full-traits-id',
85
- response: fullCachedIdentity,
86
- updatedAt: new Date().toISOString(),
87
- };
88
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
89
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
90
- expect(result.cacheHit).toBe(true);
91
- expect(result.cachedIdentity).toEqual(fullCachedIdentity);
92
- expect(result.cachedIdentity?.traits?.emails).toHaveLength(2);
93
- expect(result.cachedIdentity?.traits?.phones).toHaveLength(2);
94
- expect(result.cachedIdentity?.traits?.addresses).toHaveLength(1);
95
- });
96
- it('should NOT perform any merge logic', async () => {
97
- const incomingIdentity = {
98
- identityId: 'merge-test-id',
99
- traits: {
100
- emails: ['new-email@test.com'],
101
- phones: ['999-0000'],
102
- },
103
- };
104
- const cachedRecord = {
105
- pk: `identity#${pixelId}#merge-test-id`,
106
- pixelId,
107
- identityId: 'merge-test-id',
108
- response: {
109
- identityId: 'merge-test-id',
110
- traits: {
111
- emails: ['old-email@test.com'],
112
- phones: ['111-2222'],
113
- },
114
- },
115
- updatedAt: new Date().toISOString(),
116
- };
117
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
118
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
119
- expect(result.cachedIdentity?.traits?.emails).toEqual(['old-email@test.com']);
120
- expect(result.cachedIdentity?.traits?.phones).toEqual(['111-2222']);
121
- expect(result.cachedIdentity?.traits?.emails).not.toContain('new-email@test.com');
122
- });
123
- it('should NOT perform staleness computation', async () => {
124
- const incomingIdentity = {
125
- identityId: 'stale-test-id',
126
- traits: {
127
- emails: ['new-email@test.com'],
128
- },
129
- };
130
- const cachedRecord = {
131
- pk: `identity#${pixelId}#stale-test-id`,
132
- pixelId,
133
- identityId: 'stale-test-id',
134
- response: {
135
- identityId: 'stale-test-id',
136
- traits: {
137
- emails: ['old-email@test.com'],
138
- },
139
- },
140
- updatedAt: new Date().toISOString(),
141
- };
142
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
143
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
144
- expect(result).not.toHaveProperty('isCacheStale');
145
- expect(result).not.toHaveProperty('staleTier');
146
- expect(result).not.toHaveProperty('staleTracker');
147
- expect(result).not.toHaveProperty('writeReason');
148
- expect(result).not.toHaveProperty('skipNeptune');
149
- });
150
- });
151
- describe('cache hit by email pointer', () => {
152
- it('should return discoveredIdentityId with lookupPath=email_pointer and cacheHit=true', async () => {
153
- const incomingIdentity = {
154
- traits: { emails: ['lookup@email.com'] },
155
- };
156
- const emailPointerRecord = {
157
- pk: `email#${pixelId}#lookup@email.com`,
158
- pixelId,
159
- identityId: 'discovered-identity-456',
160
- updatedAt: new Date().toISOString(),
161
- };
162
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
163
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
164
- expect(result.cacheHit).toBe(true);
165
- expect(result.lookupPath).toBe('email_pointer');
166
- expect(result.discoveredIdentityId).toBe('discovered-identity-456');
167
- expect(result.cachedIdentity).toBeUndefined();
168
- });
169
- it('should use first email in emails array for lookup', async () => {
170
- const incomingIdentity = {
171
- traits: { emails: ['first@email.com', 'second@email.com'] },
172
- };
173
- const emailPointerRecord = {
174
- pk: `email#${pixelId}#first@email.com`,
175
- pixelId,
176
- identityId: 'pointer-identity-789',
177
- updatedAt: new Date().toISOString(),
178
- };
179
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
180
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
181
- expect(result.discoveredIdentityId).toBe('pointer-identity-789');
182
- expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `email#${pixelId}#first@email.com`);
183
- });
184
- it('should NOT merge traits when returning email pointer discovery', async () => {
185
- const incomingIdentity = {
186
- traits: {
187
- emails: ['discovery@email.com'],
188
- phones: ['incoming-phone'],
189
- },
190
- };
191
- const emailPointerRecord = {
192
- pk: `email#${pixelId}#discovery@email.com`,
193
- pixelId,
194
- identityId: 'discovered-id',
195
- updatedAt: new Date().toISOString(),
196
- };
197
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
198
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
199
- expect(result.cachedIdentity).toBeUndefined();
200
- expect(result.discoveredIdentityId).toBe('discovered-id');
201
- });
202
- });
203
- describe('cache miss', () => {
204
- it('should return lookupPath=miss and cacheHit=false when identity not found', async () => {
205
- const incomingIdentity = {
206
- identityId: 'nonexistent-identity',
207
- traits: { emails: ['test@email.com'] },
208
- };
209
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
210
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
211
- expect(result.cacheHit).toBe(false);
212
- expect(result.lookupPath).toBe('identity_id');
213
- expect(result.cachedIdentity).toBeUndefined();
214
- expect(result.discoveredIdentityId).toBeUndefined();
215
- });
216
- it('should return lookupPath=miss and cacheHit=false when email pointer not found', async () => {
217
- const incomingIdentity = {
218
- traits: { emails: ['unknown@email.com'] },
219
- };
220
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
221
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
222
- expect(result.cacheHit).toBe(false);
223
- expect(result.lookupPath).toBe('miss');
224
- expect(result.cachedIdentity).toBeUndefined();
225
- expect(result.discoveredIdentityId).toBeUndefined();
226
- });
227
- it('should return lookupPath=miss when cached record has no response field', async () => {
228
- const incomingIdentity = {
229
- identityId: 'no-response-identity',
230
- traits: { emails: ['test@email.com'] },
231
- };
232
- const incompleteRecord = {
233
- pk: `identity#${pixelId}#no-response-identity`,
234
- pixelId,
235
- identityId: 'no-response-identity',
236
- updatedAt: new Date().toISOString(),
237
- };
238
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(incompleteRecord);
239
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
240
- expect(result.cacheHit).toBe(false);
241
- expect(result.lookupPath).toBe('identity_id');
242
- expect(result.cachedIdentity).toBeUndefined();
243
- });
244
- it('should return lookupPath=miss when no email provided for pointer lookup', async () => {
245
- const incomingIdentity = {
246
- traits: { phones: ['555-1234'] },
247
- };
248
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
249
- expect(result.cacheHit).toBe(false);
250
- expect(result.lookupPath).toBe('miss');
251
- expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
252
- });
253
- });
254
- describe('invalid input handling', () => {
255
- it('should return cache miss for undefined pixelId', async () => {
256
- const incomingIdentity = {
257
- identityId: 'test-identity',
258
- traits: { emails: ['test@email.com'] },
259
- };
260
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(undefined, incomingIdentity);
261
- expect(result.cacheHit).toBe(false);
262
- expect(result.lookupPath).toBe('miss');
263
- expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
264
- });
265
- it('should return cache miss for empty pixelId', async () => {
266
- const incomingIdentity = {
267
- identityId: 'test-identity',
268
- traits: { emails: ['test@email.com'] },
269
- };
270
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure('', incomingIdentity);
271
- expect(result.cacheHit).toBe(false);
272
- expect(result.lookupPath).toBe('miss');
273
- });
274
- it('should return cache miss for undefined incomingIdentity', async () => {
275
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, undefined);
276
- expect(result.cacheHit).toBe(false);
277
- expect(result.lookupPath).toBe('miss');
278
- });
279
- it('should return cache miss for null incomingIdentity', async () => {
280
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, null);
281
- expect(result.cacheHit).toBe(false);
282
- expect(result.lookupPath).toBe('miss');
283
- });
284
- });
285
- describe('error handling', () => {
286
- it('should return cache miss when DynamoDB throws an error', async () => {
287
- const incomingIdentity = {
288
- identityId: 'error-test-identity',
289
- traits: { emails: ['test@email.com'] },
290
- };
291
- mockedDynamoDbClient.safeGet.mockRejectedValueOnce(new Error('DynamoDB connection failed'));
292
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
293
- expect(result.cacheHit).toBe(false);
294
- expect(result.lookupPath).toBe('identity_id');
295
- expect(result.cachedIdentity).toBeUndefined();
296
- expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
297
- error: expect.any(Error),
298
- errorMessage: 'DynamoDB connection failed',
299
- }));
300
- });
301
- it('should handle non-Error thrown values', async () => {
302
- const incomingIdentity = {
303
- identityId: 'string-error-identity',
304
- traits: { emails: ['test@email.com'] },
305
- };
306
- mockedDynamoDbClient.safeGet.mockRejectedValueOnce('String error message');
307
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
308
- expect(result.cacheHit).toBe(false);
309
- expect(result.lookupPath).toBe('identity_id');
310
- expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
311
- errorMessage: 'String error message',
312
- }));
313
- });
314
- });
315
- describe('verification: no merge or staleness logic', () => {
316
- it('should not call mergeIdentityTraits', async () => {
317
- const incomingIdentity = {
318
- identityId: 'verify-no-merge',
319
- traits: { emails: ['incoming@email.com'] },
320
- };
321
- const cachedRecord = {
322
- pk: `identity#${pixelId}#verify-no-merge`,
323
- pixelId,
324
- identityId: 'verify-no-merge',
325
- response: {
326
- identityId: 'verify-no-merge',
327
- traits: { emails: ['cached@email.com'] },
328
- },
329
- updatedAt: new Date().toISOString(),
330
- };
331
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
332
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
333
- expect(result.cachedIdentity).toBe(cachedRecord.response);
334
- expect(result.cachedIdentity?.traits?.emails).toEqual(['cached@email.com']);
335
- });
336
- it('should not call isIdentityCacheStale', async () => {
337
- const incomingIdentity = {
338
- identityId: 'verify-no-staleness',
339
- traits: {
340
- emails: ['new-email@test.com'],
341
- },
342
- };
343
- const cachedRecord = {
344
- pk: `identity#${pixelId}#verify-no-staleness`,
345
- pixelId,
346
- identityId: 'verify-no-staleness',
347
- response: {
348
- identityId: 'verify-no-staleness',
349
- traits: { emails: ['old-email@test.com'] },
350
- },
351
- updatedAt: new Date().toISOString(),
352
- };
353
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
354
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
355
- expect(Object.keys(result)).toEqual(['cachedIdentity', 'lookupPath', 'cacheHit']);
356
- });
357
- it('result should only contain pure lookup properties', async () => {
358
- const incomingIdentity = {
359
- identityId: 'result-shape-test',
360
- traits: { emails: ['test@email.com'] },
361
- };
362
- const cachedRecord = {
363
- pk: `identity#${pixelId}#result-shape-test`,
364
- pixelId,
365
- identityId: 'result-shape-test',
366
- response: {
367
- identityId: 'result-shape-test',
368
- traits: { emails: ['test@email.com'] },
369
- },
370
- updatedAt: new Date().toISOString(),
371
- };
372
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
373
- const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
374
- expect(result).toEqual({
375
- cachedIdentity: cachedRecord.response,
376
- lookupPath: 'identity_id',
377
- cacheHit: true,
378
- });
379
- expect(result).not.toHaveProperty('resolvedIdentity');
380
- expect(result).not.toHaveProperty('isCacheStale');
381
- expect(result).not.toHaveProperty('staleTracker');
382
- expect(result).not.toHaveProperty('staleTier');
383
- expect(result).not.toHaveProperty('writeReason');
384
- expect(result).not.toHaveProperty('skipNeptune');
385
- expect(result).not.toHaveProperty('mergedIdentity');
386
- });
387
- });
388
- describe('logging', () => {
389
- it('should log debug on cache hit by identity ID', async () => {
390
- const incomingIdentity = {
391
- identityId: 'log-test-id',
392
- traits: { emails: ['test@email.com'] },
393
- };
394
- const cachedRecord = {
395
- pk: `identity#${pixelId}#log-test-id`,
396
- pixelId,
397
- identityId: 'log-test-id',
398
- response: {
399
- identityId: 'log-test-id',
400
- traits: { emails: ['test@email.com'] },
401
- },
402
- updatedAt: new Date().toISOString(),
403
- };
404
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
405
- await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
406
- expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup hit', expect.objectContaining({
407
- pixelId,
408
- identityId: 'log-test-id',
409
- }));
410
- });
411
- it('should log debug on cache miss', async () => {
412
- const incomingIdentity = {
413
- identityId: 'miss-log-test',
414
- traits: { emails: ['test@email.com'] },
415
- };
416
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
417
- await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
418
- expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup miss', expect.objectContaining({
419
- pixelId,
420
- identityId: 'miss-log-test',
421
- }));
422
- });
423
- it('should log debug on email pointer discovery', async () => {
424
- const incomingIdentity = {
425
- traits: { emails: ['email-pointer@test.com'] },
426
- };
427
- const emailPointerRecord = {
428
- pk: `email#${pixelId}#email-pointer@test.com`,
429
- pixelId,
430
- identityId: 'discovered-from-pointer',
431
- updatedAt: new Date().toISOString(),
432
- };
433
- mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
434
- await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
435
- expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure email pointer discovery', expect.objectContaining({
436
- pixelId,
437
- discoveredIdentityId: 'discovered-from-pointer',
438
- }));
439
- });
440
- });
441
- });
442
- describe('mergeAndComputeIdentityStaleness (pure function)', () => {
443
- const { mergeAndComputeIdentityStaleness, IDENTITY_CACHE_STALENESS_TIER } = jest.requireActual('@adtrackify/at-shared-utils');
444
- describe('merge behavior', () => {
445
- it('should merge incoming traits with cached traits', () => {
446
- const incomingIdentity = {
447
- identityId: 'merge-test',
448
- traits: {
449
- emails: ['new@email.com'],
450
- },
451
- };
452
- const cachedIdentity = {
453
- identityId: 'merge-test',
454
- traits: {
455
- emails: ['cached@email.com'],
456
- phones: ['555-1234'],
457
- },
458
- };
459
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
460
- expect(result.mergedIdentity.traits?.emails).toContain('new@email.com');
461
- expect(result.mergedIdentity.traits?.emails).toContain('cached@email.com');
462
- expect(result.mergedIdentity.traits?.phones).toContain('555-1234');
463
- });
464
- });
465
- describe('staleness tier computation', () => {
466
- it('should return NONE tier when no traits are stale', () => {
467
- const incomingIdentity = {
468
- identityId: 'same-test',
469
- traits: { emails: ['same@email.com'] },
470
- };
471
- const cachedIdentity = {
472
- identityId: 'same-test',
473
- traits: { emails: ['same@email.com'] },
474
- };
475
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
476
- expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.NONE);
477
- expect(result.isCacheStale).toBe(false);
478
- });
479
- it('should return VOLATILE_ONLY tier when incoming has new IP address (cached has none)', () => {
480
- const incomingIdentity = {
481
- identityId: 'volatile-test',
482
- traits: {
483
- emails: ['same@email.com'],
484
- ipAddress: '192.168.1.100',
485
- },
486
- };
487
- const cachedIdentity = {
488
- identityId: 'volatile-test',
489
- traits: {
490
- emails: ['same@email.com'],
491
- },
492
- };
493
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
494
- expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
495
- expect(result.isCacheStale).toBe(false);
496
- });
497
- it('should return ADDRESS_UPDATE tier when non-IP address is new', () => {
498
- const incomingIdentity = {
499
- identityId: 'address-test',
500
- traits: {
501
- emails: ['same@email.com'],
502
- addresses: [{ firstName: 'John', city: 'New York' }],
503
- },
504
- };
505
- const cachedIdentity = {
506
- identityId: 'address-test',
507
- traits: {
508
- emails: ['same@email.com'],
509
- addresses: [],
510
- },
511
- };
512
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
513
- expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
514
- expect(result.isCacheStale).toBe(true);
515
- });
516
- it('should return IDENTITY_STALE tier when email changes', () => {
517
- const incomingIdentity = {
518
- identityId: 'stale-test',
519
- traits: {
520
- emails: ['new@email.com'],
521
- },
522
- };
523
- const cachedIdentity = {
524
- identityId: 'stale-test',
525
- traits: {
526
- emails: ['old@email.com'],
527
- },
528
- };
529
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
530
- expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
531
- expect(result.isCacheStale).toBe(true);
532
- });
533
- });
534
- describe('staleTraits extraction', () => {
535
- it('should include changed trait names in staleTraits array', () => {
536
- const incomingIdentity = {
537
- identityId: 'traits-test',
538
- traits: {
539
- emails: ['new@email.com'],
540
- phones: ['999-0000'],
541
- },
542
- };
543
- const cachedIdentity = {
544
- identityId: 'traits-test',
545
- traits: {
546
- emails: ['old@email.com'],
547
- phones: ['111-2222'],
548
- },
549
- };
550
- const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
551
- expect(result.staleTraits).toContain('emails');
552
- expect(result.staleTraits).toContain('phones');
553
- });
554
- });
555
- });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ jest.mock('../../clients/index.js', () => ({
4
+ DynamoDbClient: {
5
+ safeGet: jest.fn(),
6
+ safePut: jest.fn(),
7
+ safeDelete: jest.fn(),
8
+ safeBatchGet: jest.fn(),
9
+ safeBatchWrite: jest.fn(),
10
+ safeQueryByGSI: jest.fn(),
11
+ batchWrite: jest.fn(),
12
+ },
13
+ }));
14
+ jest.mock('../../helpers/index.js', () => ({
15
+ Logger: {
16
+ debug: jest.fn(),
17
+ info: jest.fn(),
18
+ warn: jest.fn(),
19
+ error: jest.fn(),
20
+ },
21
+ }));
22
+ const identity_cache_dynamodb_db_service_js_1 = require("../../services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js");
23
+ const index_js_1 = require("../../clients/index.js");
24
+ const index_js_2 = require("../../helpers/index.js");
25
+ const mockedDynamoDbClient = index_js_1.DynamoDbClient;
26
+ const mockedLogger = index_js_2.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
+ });
35
+ describe('cache hit by identity ID', () => {
36
+ it('should return cachedIdentity with lookupPath=identity_id and cacheHit=true', async () => {
37
+ const incomingIdentity = {
38
+ identityId: 'identity-123',
39
+ traits: { emails: ['test@email.com'] },
40
+ };
41
+ const cachedRecord = {
42
+ pk: `identity#${pixelId}#identity-123`,
43
+ pixelId,
44
+ identityId: 'identity-123',
45
+ response: {
46
+ identityId: 'identity-123',
47
+ traits: {
48
+ emails: ['test@email.com', 'cached@email.com'],
49
+ phones: ['555-1234'],
50
+ },
51
+ },
52
+ updatedAt: new Date().toISOString(),
53
+ };
54
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
55
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
56
+ expect(result.cacheHit).toBe(true);
57
+ expect(result.lookupPath).toBe('identity_id');
58
+ expect(result.cachedIdentity).toEqual(cachedRecord.response);
59
+ expect(result.discoveredIdentityId).toBeUndefined();
60
+ expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledTimes(1);
61
+ expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `identity#${pixelId}#identity-123`);
62
+ });
63
+ it('should return cachedIdentity with all traits preserved', async () => {
64
+ const incomingIdentity = {
65
+ identityId: 'full-traits-id',
66
+ traits: { emails: ['new@email.com'] },
67
+ };
68
+ const fullCachedIdentity = {
69
+ identityId: 'full-traits-id',
70
+ traits: {
71
+ emails: ['existing@email.com', 'another@email.com'],
72
+ phones: ['555-1111', '555-2222'],
73
+ addresses: [{ city: 'New York', zip: '10001' }],
74
+ userIds: ['user-1', 'user-2'],
75
+ shopifyYIds: ['shopify-y-1'],
76
+ click: { fbp: 'fb.1.123.456' },
77
+ ipAddress: '192.168.1.1',
78
+ userAgent: 'Mozilla/5.0...',
79
+ },
80
+ };
81
+ const cachedRecord = {
82
+ pk: `identity#${pixelId}#full-traits-id`,
83
+ pixelId,
84
+ identityId: 'full-traits-id',
85
+ response: fullCachedIdentity,
86
+ updatedAt: new Date().toISOString(),
87
+ };
88
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
89
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
90
+ expect(result.cacheHit).toBe(true);
91
+ expect(result.cachedIdentity).toEqual(fullCachedIdentity);
92
+ expect(result.cachedIdentity?.traits?.emails).toHaveLength(2);
93
+ expect(result.cachedIdentity?.traits?.phones).toHaveLength(2);
94
+ expect(result.cachedIdentity?.traits?.addresses).toHaveLength(1);
95
+ });
96
+ it('should NOT perform any merge logic', async () => {
97
+ const incomingIdentity = {
98
+ identityId: 'merge-test-id',
99
+ traits: {
100
+ emails: ['new-email@test.com'],
101
+ phones: ['999-0000'],
102
+ },
103
+ };
104
+ const cachedRecord = {
105
+ pk: `identity#${pixelId}#merge-test-id`,
106
+ pixelId,
107
+ identityId: 'merge-test-id',
108
+ response: {
109
+ identityId: 'merge-test-id',
110
+ traits: {
111
+ emails: ['old-email@test.com'],
112
+ phones: ['111-2222'],
113
+ },
114
+ },
115
+ updatedAt: new Date().toISOString(),
116
+ };
117
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
118
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
119
+ expect(result.cachedIdentity?.traits?.emails).toEqual(['old-email@test.com']);
120
+ expect(result.cachedIdentity?.traits?.phones).toEqual(['111-2222']);
121
+ expect(result.cachedIdentity?.traits?.emails).not.toContain('new-email@test.com');
122
+ });
123
+ it('should NOT perform staleness computation', async () => {
124
+ const incomingIdentity = {
125
+ identityId: 'stale-test-id',
126
+ traits: {
127
+ emails: ['new-email@test.com'],
128
+ },
129
+ };
130
+ const cachedRecord = {
131
+ pk: `identity#${pixelId}#stale-test-id`,
132
+ pixelId,
133
+ identityId: 'stale-test-id',
134
+ response: {
135
+ identityId: 'stale-test-id',
136
+ traits: {
137
+ emails: ['old-email@test.com'],
138
+ },
139
+ },
140
+ updatedAt: new Date().toISOString(),
141
+ };
142
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
143
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
144
+ expect(result).not.toHaveProperty('isCacheStale');
145
+ expect(result).not.toHaveProperty('staleTier');
146
+ expect(result).not.toHaveProperty('staleTracker');
147
+ expect(result).not.toHaveProperty('writeReason');
148
+ expect(result).not.toHaveProperty('skipNeptune');
149
+ });
150
+ });
151
+ describe('cache hit by email pointer', () => {
152
+ it('should return discoveredIdentityId with lookupPath=email_pointer and cacheHit=true', async () => {
153
+ const incomingIdentity = {
154
+ traits: { emails: ['lookup@email.com'] },
155
+ };
156
+ const emailPointerRecord = {
157
+ pk: `email#${pixelId}#lookup@email.com`,
158
+ pixelId,
159
+ identityId: 'discovered-identity-456',
160
+ updatedAt: new Date().toISOString(),
161
+ };
162
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
163
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
164
+ expect(result.cacheHit).toBe(true);
165
+ expect(result.lookupPath).toBe('email_pointer');
166
+ expect(result.discoveredIdentityId).toBe('discovered-identity-456');
167
+ expect(result.cachedIdentity).toBeUndefined();
168
+ });
169
+ it('should use first email in emails array for lookup', async () => {
170
+ const incomingIdentity = {
171
+ traits: { emails: ['first@email.com', 'second@email.com'] },
172
+ };
173
+ const emailPointerRecord = {
174
+ pk: `email#${pixelId}#first@email.com`,
175
+ pixelId,
176
+ identityId: 'pointer-identity-789',
177
+ updatedAt: new Date().toISOString(),
178
+ };
179
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
180
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
181
+ expect(result.discoveredIdentityId).toBe('pointer-identity-789');
182
+ expect(mockedDynamoDbClient.safeGet).toHaveBeenCalledWith(expect.any(String), 'pk', `email#${pixelId}#first@email.com`);
183
+ });
184
+ it('should NOT merge traits when returning email pointer discovery', async () => {
185
+ const incomingIdentity = {
186
+ traits: {
187
+ emails: ['discovery@email.com'],
188
+ phones: ['incoming-phone'],
189
+ },
190
+ };
191
+ const emailPointerRecord = {
192
+ pk: `email#${pixelId}#discovery@email.com`,
193
+ pixelId,
194
+ identityId: 'discovered-id',
195
+ updatedAt: new Date().toISOString(),
196
+ };
197
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
198
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
199
+ expect(result.cachedIdentity).toBeUndefined();
200
+ expect(result.discoveredIdentityId).toBe('discovered-id');
201
+ });
202
+ });
203
+ describe('cache miss', () => {
204
+ it('should return lookupPath=miss and cacheHit=false when identity not found', async () => {
205
+ const incomingIdentity = {
206
+ identityId: 'nonexistent-identity',
207
+ traits: { emails: ['test@email.com'] },
208
+ };
209
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
210
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
211
+ expect(result.cacheHit).toBe(false);
212
+ expect(result.lookupPath).toBe('identity_id');
213
+ expect(result.cachedIdentity).toBeUndefined();
214
+ expect(result.discoveredIdentityId).toBeUndefined();
215
+ });
216
+ it('should return lookupPath=miss and cacheHit=false when email pointer not found', async () => {
217
+ const incomingIdentity = {
218
+ traits: { emails: ['unknown@email.com'] },
219
+ };
220
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
221
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
222
+ expect(result.cacheHit).toBe(false);
223
+ expect(result.lookupPath).toBe('miss');
224
+ expect(result.cachedIdentity).toBeUndefined();
225
+ expect(result.discoveredIdentityId).toBeUndefined();
226
+ });
227
+ it('should return lookupPath=miss when cached record has no response field', async () => {
228
+ const incomingIdentity = {
229
+ identityId: 'no-response-identity',
230
+ traits: { emails: ['test@email.com'] },
231
+ };
232
+ const incompleteRecord = {
233
+ pk: `identity#${pixelId}#no-response-identity`,
234
+ pixelId,
235
+ identityId: 'no-response-identity',
236
+ updatedAt: new Date().toISOString(),
237
+ };
238
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(incompleteRecord);
239
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
240
+ expect(result.cacheHit).toBe(false);
241
+ expect(result.lookupPath).toBe('identity_id');
242
+ expect(result.cachedIdentity).toBeUndefined();
243
+ });
244
+ it('should return lookupPath=miss when no email provided for pointer lookup', async () => {
245
+ const incomingIdentity = {
246
+ traits: { phones: ['555-1234'] },
247
+ };
248
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
249
+ expect(result.cacheHit).toBe(false);
250
+ expect(result.lookupPath).toBe('miss');
251
+ expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
252
+ });
253
+ });
254
+ describe('invalid input handling', () => {
255
+ it('should return cache miss for undefined pixelId', async () => {
256
+ const incomingIdentity = {
257
+ identityId: 'test-identity',
258
+ traits: { emails: ['test@email.com'] },
259
+ };
260
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(undefined, incomingIdentity);
261
+ expect(result.cacheHit).toBe(false);
262
+ expect(result.lookupPath).toBe('miss');
263
+ expect(mockedDynamoDbClient.safeGet).not.toHaveBeenCalled();
264
+ });
265
+ it('should return cache miss for empty pixelId', async () => {
266
+ const incomingIdentity = {
267
+ identityId: 'test-identity',
268
+ traits: { emails: ['test@email.com'] },
269
+ };
270
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure('', incomingIdentity);
271
+ expect(result.cacheHit).toBe(false);
272
+ expect(result.lookupPath).toBe('miss');
273
+ });
274
+ it('should return cache miss for undefined incomingIdentity', async () => {
275
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, undefined);
276
+ expect(result.cacheHit).toBe(false);
277
+ expect(result.lookupPath).toBe('miss');
278
+ });
279
+ it('should return cache miss for null incomingIdentity', async () => {
280
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, null);
281
+ expect(result.cacheHit).toBe(false);
282
+ expect(result.lookupPath).toBe('miss');
283
+ });
284
+ });
285
+ describe('error handling', () => {
286
+ it('should return cache miss when DynamoDB throws an error', async () => {
287
+ const incomingIdentity = {
288
+ identityId: 'error-test-identity',
289
+ traits: { emails: ['test@email.com'] },
290
+ };
291
+ mockedDynamoDbClient.safeGet.mockRejectedValueOnce(new Error('DynamoDB connection failed'));
292
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
293
+ expect(result.cacheHit).toBe(false);
294
+ expect(result.lookupPath).toBe('identity_id');
295
+ expect(result.cachedIdentity).toBeUndefined();
296
+ expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
297
+ error: expect.any(Error),
298
+ errorMessage: 'DynamoDB connection failed',
299
+ }));
300
+ });
301
+ it('should handle non-Error thrown values', async () => {
302
+ const incomingIdentity = {
303
+ identityId: 'string-error-identity',
304
+ traits: { emails: ['test@email.com'] },
305
+ };
306
+ mockedDynamoDbClient.safeGet.mockRejectedValueOnce('String error message');
307
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
308
+ expect(result.cacheHit).toBe(false);
309
+ expect(result.lookupPath).toBe('identity_id');
310
+ expect(mockedLogger.error).toHaveBeenCalledWith('IdentityCache - getItemByPk failed', expect.objectContaining({
311
+ errorMessage: 'String error message',
312
+ }));
313
+ });
314
+ });
315
+ describe('verification: no merge or staleness logic', () => {
316
+ it('should not call mergeIdentityTraits', async () => {
317
+ const incomingIdentity = {
318
+ identityId: 'verify-no-merge',
319
+ traits: { emails: ['incoming@email.com'] },
320
+ };
321
+ const cachedRecord = {
322
+ pk: `identity#${pixelId}#verify-no-merge`,
323
+ pixelId,
324
+ identityId: 'verify-no-merge',
325
+ response: {
326
+ identityId: 'verify-no-merge',
327
+ traits: { emails: ['cached@email.com'] },
328
+ },
329
+ updatedAt: new Date().toISOString(),
330
+ };
331
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
332
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
333
+ expect(result.cachedIdentity).toBe(cachedRecord.response);
334
+ expect(result.cachedIdentity?.traits?.emails).toEqual(['cached@email.com']);
335
+ });
336
+ it('should not call isIdentityCacheStale', async () => {
337
+ const incomingIdentity = {
338
+ identityId: 'verify-no-staleness',
339
+ traits: {
340
+ emails: ['new-email@test.com'],
341
+ },
342
+ };
343
+ const cachedRecord = {
344
+ pk: `identity#${pixelId}#verify-no-staleness`,
345
+ pixelId,
346
+ identityId: 'verify-no-staleness',
347
+ response: {
348
+ identityId: 'verify-no-staleness',
349
+ traits: { emails: ['old-email@test.com'] },
350
+ },
351
+ updatedAt: new Date().toISOString(),
352
+ };
353
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
354
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
355
+ expect(Object.keys(result)).toEqual(['cachedIdentity', 'lookupPath', 'cacheHit']);
356
+ });
357
+ it('result should only contain pure lookup properties', async () => {
358
+ const incomingIdentity = {
359
+ identityId: 'result-shape-test',
360
+ traits: { emails: ['test@email.com'] },
361
+ };
362
+ const cachedRecord = {
363
+ pk: `identity#${pixelId}#result-shape-test`,
364
+ pixelId,
365
+ identityId: 'result-shape-test',
366
+ response: {
367
+ identityId: 'result-shape-test',
368
+ traits: { emails: ['test@email.com'] },
369
+ },
370
+ updatedAt: new Date().toISOString(),
371
+ };
372
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
373
+ const result = await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
374
+ expect(result).toEqual({
375
+ cachedIdentity: cachedRecord.response,
376
+ lookupPath: 'identity_id',
377
+ cacheHit: true,
378
+ });
379
+ expect(result).not.toHaveProperty('resolvedIdentity');
380
+ expect(result).not.toHaveProperty('isCacheStale');
381
+ expect(result).not.toHaveProperty('staleTracker');
382
+ expect(result).not.toHaveProperty('staleTier');
383
+ expect(result).not.toHaveProperty('writeReason');
384
+ expect(result).not.toHaveProperty('skipNeptune');
385
+ expect(result).not.toHaveProperty('mergedIdentity');
386
+ });
387
+ });
388
+ describe('logging', () => {
389
+ it('should log debug on cache hit by identity ID', async () => {
390
+ const incomingIdentity = {
391
+ identityId: 'log-test-id',
392
+ traits: { emails: ['test@email.com'] },
393
+ };
394
+ const cachedRecord = {
395
+ pk: `identity#${pixelId}#log-test-id`,
396
+ pixelId,
397
+ identityId: 'log-test-id',
398
+ response: {
399
+ identityId: 'log-test-id',
400
+ traits: { emails: ['test@email.com'] },
401
+ },
402
+ updatedAt: new Date().toISOString(),
403
+ };
404
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(cachedRecord);
405
+ await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
406
+ expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup hit', expect.objectContaining({
407
+ pixelId,
408
+ identityId: 'log-test-id',
409
+ }));
410
+ });
411
+ it('should log debug on cache miss', async () => {
412
+ const incomingIdentity = {
413
+ identityId: 'miss-log-test',
414
+ traits: { emails: ['test@email.com'] },
415
+ };
416
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(null);
417
+ await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
418
+ expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure lookup miss', expect.objectContaining({
419
+ pixelId,
420
+ identityId: 'miss-log-test',
421
+ }));
422
+ });
423
+ it('should log debug on email pointer discovery', async () => {
424
+ const incomingIdentity = {
425
+ traits: { emails: ['email-pointer@test.com'] },
426
+ };
427
+ const emailPointerRecord = {
428
+ pk: `email#${pixelId}#email-pointer@test.com`,
429
+ pixelId,
430
+ identityId: 'discovered-from-pointer',
431
+ updatedAt: new Date().toISOString(),
432
+ };
433
+ mockedDynamoDbClient.safeGet.mockResolvedValueOnce(emailPointerRecord);
434
+ await identity_cache_dynamodb_db_service_js_1.IdentityCacheDynamoDbDbService.getIdentityFromCachePure(pixelId, incomingIdentity);
435
+ expect(mockedLogger.debug).toHaveBeenCalledWith('IdentityCache - pure email pointer discovery', expect.objectContaining({
436
+ pixelId,
437
+ discoveredIdentityId: 'discovered-from-pointer',
438
+ }));
439
+ });
440
+ });
441
+ });
442
+ describe('mergeAndComputeIdentityStaleness (pure function)', () => {
443
+ const { mergeAndComputeIdentityStaleness, IDENTITY_CACHE_STALENESS_TIER } = jest.requireActual('@adtrackify/at-shared-utils');
444
+ describe('merge behavior', () => {
445
+ it('should merge incoming traits with cached traits', () => {
446
+ const incomingIdentity = {
447
+ identityId: 'merge-test',
448
+ traits: {
449
+ emails: ['new@email.com'],
450
+ },
451
+ };
452
+ const cachedIdentity = {
453
+ identityId: 'merge-test',
454
+ traits: {
455
+ emails: ['cached@email.com'],
456
+ phones: ['555-1234'],
457
+ },
458
+ };
459
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
460
+ expect(result.mergedIdentity.traits?.emails).toContain('new@email.com');
461
+ expect(result.mergedIdentity.traits?.emails).toContain('cached@email.com');
462
+ expect(result.mergedIdentity.traits?.phones).toContain('555-1234');
463
+ });
464
+ });
465
+ describe('staleness tier computation', () => {
466
+ it('should return NONE tier when no traits are stale', () => {
467
+ const incomingIdentity = {
468
+ identityId: 'same-test',
469
+ traits: { emails: ['same@email.com'] },
470
+ };
471
+ const cachedIdentity = {
472
+ identityId: 'same-test',
473
+ traits: { emails: ['same@email.com'] },
474
+ };
475
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
476
+ expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.NONE);
477
+ expect(result.isCacheStale).toBe(false);
478
+ });
479
+ it('should return VOLATILE_ONLY tier when incoming has new IP address (cached has none)', () => {
480
+ const incomingIdentity = {
481
+ identityId: 'volatile-test',
482
+ traits: {
483
+ emails: ['same@email.com'],
484
+ ipAddress: '192.168.1.100',
485
+ },
486
+ };
487
+ const cachedIdentity = {
488
+ identityId: 'volatile-test',
489
+ traits: {
490
+ emails: ['same@email.com'],
491
+ },
492
+ };
493
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
494
+ expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.VOLATILE_ONLY);
495
+ expect(result.isCacheStale).toBe(false);
496
+ });
497
+ it('should return ADDRESS_UPDATE tier when non-IP address is new', () => {
498
+ const incomingIdentity = {
499
+ identityId: 'address-test',
500
+ traits: {
501
+ emails: ['same@email.com'],
502
+ addresses: [{ firstName: 'John', city: 'New York' }],
503
+ },
504
+ };
505
+ const cachedIdentity = {
506
+ identityId: 'address-test',
507
+ traits: {
508
+ emails: ['same@email.com'],
509
+ addresses: [],
510
+ },
511
+ };
512
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
513
+ expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.ADDRESS_UPDATE);
514
+ expect(result.isCacheStale).toBe(true);
515
+ });
516
+ it('should return IDENTITY_STALE tier when email changes', () => {
517
+ const incomingIdentity = {
518
+ identityId: 'stale-test',
519
+ traits: {
520
+ emails: ['new@email.com'],
521
+ },
522
+ };
523
+ const cachedIdentity = {
524
+ identityId: 'stale-test',
525
+ traits: {
526
+ emails: ['old@email.com'],
527
+ },
528
+ };
529
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
530
+ expect(result.staleTier).toBe(IDENTITY_CACHE_STALENESS_TIER.IDENTITY_STALE);
531
+ expect(result.isCacheStale).toBe(true);
532
+ });
533
+ });
534
+ describe('staleTraits extraction', () => {
535
+ it('should include changed trait names in staleTraits array', () => {
536
+ const incomingIdentity = {
537
+ identityId: 'traits-test',
538
+ traits: {
539
+ emails: ['new@email.com'],
540
+ phones: ['999-0000'],
541
+ },
542
+ };
543
+ const cachedIdentity = {
544
+ identityId: 'traits-test',
545
+ traits: {
546
+ emails: ['old@email.com'],
547
+ phones: ['111-2222'],
548
+ },
549
+ };
550
+ const result = mergeAndComputeIdentityStaleness(incomingIdentity, cachedIdentity);
551
+ expect(result.staleTraits).toContain('emails');
552
+ expect(result.staleTraits).toContain('phones');
553
+ });
554
+ });
555
+ });
556
556
  //# sourceMappingURL=identity-cache-dynamodb-db-service.spec.js.map