@adtrackify/at-service-common 4.0.31 → 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 (829) 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 -18
  182. package/dist/cjs/clients/third-party/shopify/graphql-analytics-queries.js +22 -22
  183. package/dist/cjs/clients/third-party/shopify/graphql-order-queries.d.ts +25 -25
  184. package/dist/cjs/clients/third-party/shopify/graphql-order-queries.js +4 -4
  185. package/dist/cjs/clients/third-party/shopify/graphql-product-queries.d.ts +2 -2
  186. package/dist/cjs/clients/third-party/shopify/graphql-product-queries.js +5 -5
  187. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.d.ts +42 -42
  188. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.js +352 -352
  189. package/dist/cjs/clients/third-party/shopify-client.d.ts +29 -29
  190. package/dist/cjs/clients/third-party/shopify-client.js +146 -146
  191. package/dist/cjs/constants/index.d.ts +1 -1
  192. package/dist/cjs/constants/index.js +17 -17
  193. package/dist/cjs/constants/sqs.d.ts +20 -20
  194. package/dist/cjs/constants/sqs.js +26 -26
  195. package/dist/cjs/helpers/account-users-helper.d.ts +2 -2
  196. package/dist/cjs/helpers/account-users-helper.js +22 -22
  197. package/dist/cjs/helpers/acuity-helper.d.ts +4 -4
  198. package/dist/cjs/helpers/acuity-helper.js +56 -56
  199. package/dist/cjs/helpers/api-key-auth-helper.d.ts +9 -9
  200. package/dist/cjs/helpers/api-key-auth-helper.js +40 -40
  201. package/dist/cjs/helpers/api-key-authorizer-helper.d.ts +36 -36
  202. package/dist/cjs/helpers/api-key-authorizer-helper.js +87 -87
  203. package/dist/cjs/helpers/cognito-auth-helper.d.ts +5 -5
  204. package/dist/cjs/helpers/cognito-auth-helper.js +14 -14
  205. package/dist/cjs/helpers/index.d.ts +11 -11
  206. package/dist/cjs/helpers/index.js +27 -27
  207. package/dist/cjs/helpers/input-validation-helper.d.ts +3 -3
  208. package/dist/cjs/helpers/input-validation-helper.js +22 -22
  209. package/dist/cjs/helpers/logging-helper.d.ts +16 -16
  210. package/dist/cjs/helpers/logging-helper.js +84 -84
  211. package/dist/cjs/helpers/public-api-response-helper.d.ts +21 -21
  212. package/dist/cjs/helpers/public-api-response-helper.js +45 -45
  213. package/dist/cjs/helpers/response-helper.d.ts +18 -18
  214. package/dist/cjs/helpers/response-helper.js +43 -43
  215. package/dist/cjs/helpers/shopify-helper.d.ts +9 -9
  216. package/dist/cjs/helpers/shopify-helper.js +26 -26
  217. package/dist/cjs/helpers/sqs-utils.d.ts +6 -6
  218. package/dist/cjs/helpers/sqs-utils.js +14 -14
  219. package/dist/cjs/index.d.ts +7 -7
  220. package/dist/cjs/index.js +23 -23
  221. package/dist/cjs/libs/api-router/index.d.ts +2 -2
  222. package/dist/cjs/libs/api-router/index.js +18 -18
  223. package/dist/cjs/libs/api-router/public-api-router.d.ts +3 -3
  224. package/dist/cjs/libs/api-router/public-api-router.js +36 -36
  225. package/dist/cjs/libs/api-router/route-matcher.d.ts +21 -21
  226. package/dist/cjs/libs/api-router/route-matcher.js +36 -36
  227. package/dist/cjs/libs/click-id-parser.d.ts +23 -23
  228. package/dist/cjs/libs/click-id-parser.js +49 -49
  229. package/dist/cjs/libs/compression.d.ts +2 -2
  230. package/dist/cjs/libs/compression.js +33 -33
  231. package/dist/cjs/libs/contacts.d.ts +7 -7
  232. package/dist/cjs/libs/contacts.js +152 -152
  233. package/dist/cjs/libs/cookie.d.ts +17 -17
  234. package/dist/cjs/libs/cookie.js +76 -76
  235. package/dist/cjs/libs/crypto.d.ts +4 -4
  236. package/dist/cjs/libs/crypto.js +25 -25
  237. package/dist/cjs/libs/csv.d.ts +2 -2
  238. package/dist/cjs/libs/csv.js +35 -35
  239. package/dist/cjs/libs/currency.d.ts +1 -1
  240. package/dist/cjs/libs/currency.js +29 -29
  241. package/dist/cjs/libs/dates.d.ts +12 -12
  242. package/dist/cjs/libs/dates.js +96 -96
  243. package/dist/cjs/libs/domain.d.ts +2 -2
  244. package/dist/cjs/libs/domain.js +38 -38
  245. package/dist/cjs/libs/emails.d.ts +8 -8
  246. package/dist/cjs/libs/emails.js +154 -154
  247. package/dist/cjs/libs/http-error.d.ts +21 -21
  248. package/dist/cjs/libs/http-error.js +63 -63
  249. package/dist/cjs/libs/http-status-codes.d.ts +58 -58
  250. package/dist/cjs/libs/http-status-codes.js +62 -62
  251. package/dist/cjs/libs/index.d.ts +19 -19
  252. package/dist/cjs/libs/index.js +35 -35
  253. package/dist/cjs/libs/numbers.d.ts +1 -1
  254. package/dist/cjs/libs/numbers.js +15 -15
  255. package/dist/cjs/libs/referrer-parser/index.d.ts +2 -2
  256. package/dist/cjs/libs/referrer-parser/index.js +18 -18
  257. package/dist/cjs/libs/referrer-parser/referrer-data.d.ts +9 -9
  258. package/dist/cjs/libs/referrer-parser/referrer-data.js +3307 -3307
  259. package/dist/cjs/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  260. package/dist/cjs/libs/referrer-parser/referrer-parser-util.js +131 -131
  261. package/dist/cjs/libs/strings.d.ts +3 -3
  262. package/dist/cjs/libs/strings.js +46 -46
  263. package/dist/cjs/libs/traits.d.ts +6 -6
  264. package/dist/cjs/libs/traits.js +65 -65
  265. package/dist/cjs/libs/url.d.ts +1 -1
  266. package/dist/cjs/libs/url.js +13 -13
  267. package/dist/cjs/services/acuity-api-service.d.ts +9 -9
  268. package/dist/cjs/services/acuity-api-service.js +73 -73
  269. package/dist/cjs/services/cache/generic-cached-object.d.ts +5 -5
  270. package/dist/cjs/services/cache/generic-cached-object.js +2 -2
  271. package/dist/cjs/services/cache/index.d.ts +1 -1
  272. package/dist/cjs/services/cache/index.js +17 -17
  273. package/dist/cjs/services/cache/product-cache-service.d.ts +21 -21
  274. package/dist/cjs/services/cache/product-cache-service.js +76 -76
  275. package/dist/cjs/services/cost/cost-calculation-types.d.ts +69 -69
  276. package/dist/cjs/services/cost/cost-calculation-types.js +19 -19
  277. package/dist/cjs/services/cost/cost-calculator-service.d.ts +24 -24
  278. package/dist/cjs/services/cost/cost-calculator-service.js +461 -456
  279. package/dist/cjs/services/cost/cost-calculator-service.js.map +1 -1
  280. package/dist/cjs/services/cost/cost-currency-service.d.ts +6 -6
  281. package/dist/cjs/services/cost/cost-currency-service.js +87 -87
  282. package/dist/cjs/services/cost/cost-filter-service.d.ts +10 -10
  283. package/dist/cjs/services/cost/cost-filter-service.js +121 -121
  284. package/dist/cjs/services/cost/index.d.ts +5 -5
  285. package/dist/cjs/services/cost/index.js +21 -21
  286. package/dist/cjs/services/cost/order-cost/index.d.ts +2 -2
  287. package/dist/cjs/services/cost/order-cost/index.js +18 -18
  288. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.d.ts +26 -23
  289. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js +403 -361
  290. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js.map +1 -1
  291. package/dist/cjs/services/cost/order-cost/order-cost-resolution-types.d.ts +37 -37
  292. package/dist/cjs/services/cost/order-cost/order-cost-resolution-types.js +2 -2
  293. package/dist/cjs/services/currency-exchange-rate-lookup-service.d.ts +12 -12
  294. package/dist/cjs/services/currency-exchange-rate-lookup-service.js +94 -94
  295. package/dist/cjs/services/db/accounts-db-service.d.ts +9 -9
  296. package/dist/cjs/services/db/accounts-db-service.js +33 -33
  297. package/dist/cjs/services/db/api-keys-db-service.d.ts +10 -10
  298. package/dist/cjs/services/db/api-keys-db-service.js +36 -36
  299. package/dist/cjs/services/db/contact-enrichments-db-service.d.ts +15 -15
  300. package/dist/cjs/services/db/contact-enrichments-db-service.js +94 -94
  301. package/dist/cjs/services/db/currency-exchange-rates-db-service.d.ts +21 -21
  302. package/dist/cjs/services/db/currency-exchange-rates-db-service.js +39 -39
  303. package/dist/cjs/services/db/custom-measures-db-service.d.ts +14 -14
  304. package/dist/cjs/services/db/custom-measures-db-service.js +48 -48
  305. package/dist/cjs/services/db/destinations-db-service.d.ts +13 -13
  306. package/dist/cjs/services/db/destinations-db-service.js +74 -74
  307. package/dist/cjs/services/db/identity-cache-db-service.d.ts +28 -28
  308. package/dist/cjs/services/db/identity-cache-db-service.js +320 -320
  309. package/dist/cjs/services/db/identity-cache-dynamodb-service/constants.d.ts +3 -3
  310. package/dist/cjs/services/db/identity-cache-dynamodb-service/constants.js +6 -6
  311. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.d.ts +20 -20
  312. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +362 -362
  313. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.d.ts +23 -23
  314. package/dist/cjs/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +222 -222
  315. package/dist/cjs/services/db/identity-cache-dynamodb-service/index.d.ts +4 -4
  316. package/dist/cjs/services/db/identity-cache-dynamodb-service/index.js +20 -20
  317. package/dist/cjs/services/db/identity-cache-dynamodb-service/key-builders.d.ts +12 -12
  318. package/dist/cjs/services/db/identity-cache-dynamodb-service/key-builders.js +31 -31
  319. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.d.ts +71 -71
  320. package/dist/cjs/services/db/identity-cache-dynamodb-service/types.js +28 -28
  321. package/dist/cjs/services/db/index.d.ts +22 -22
  322. package/dist/cjs/services/db/index.js +38 -38
  323. package/dist/cjs/services/db/log-events-db-service.d.ts +11 -11
  324. package/dist/cjs/services/db/log-events-db-service.js +181 -181
  325. package/dist/cjs/services/db/pixels-db-service.d.ts +8 -8
  326. package/dist/cjs/services/db/pixels-db-service.js +35 -35
  327. package/dist/cjs/services/db/products-db-service-types.d.ts +10 -10
  328. package/dist/cjs/services/db/products-db-service-types.js +2 -2
  329. package/dist/cjs/services/db/products-db-service.d.ts +19 -19
  330. package/dist/cjs/services/db/products-db-service.js +281 -281
  331. package/dist/cjs/services/db/purchasable-contacts-db-service.d.ts +9 -9
  332. package/dist/cjs/services/db/purchasable-contacts-db-service.js +43 -43
  333. package/dist/cjs/services/db/purchased-contacts/index.d.ts +2 -2
  334. package/dist/cjs/services/db/purchased-contacts/index.js +18 -18
  335. package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.d.ts +18 -18
  336. package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.js +152 -152
  337. package/dist/cjs/services/db/purchased-contacts/types.d.ts +11 -11
  338. package/dist/cjs/services/db/purchased-contacts/types.js +2 -2
  339. package/dist/cjs/services/db/shopify-app-installs-db-service.d.ts +10 -10
  340. package/dist/cjs/services/db/shopify-app-installs-db-service.js +52 -52
  341. package/dist/cjs/services/db/shopify-products-cache-db-service.d.ts +16 -16
  342. package/dist/cjs/services/db/shopify-products-cache-db-service.js +73 -73
  343. package/dist/cjs/services/db/subscriptions-db-service.d.ts +11 -11
  344. package/dist/cjs/services/db/subscriptions-db-service.js +38 -38
  345. package/dist/cjs/services/db/tracking-events-db-service.d.ts +21 -21
  346. package/dist/cjs/services/db/tracking-events-db-service.js +188 -188
  347. package/dist/cjs/services/db/user-accounts-db-service.d.ts +7 -7
  348. package/dist/cjs/services/db/user-accounts-db-service.js +17 -17
  349. package/dist/cjs/services/email-verification/contact-email-verification-service.d.ts +7 -7
  350. package/dist/cjs/services/email-verification/contact-email-verification-service.js +101 -101
  351. package/dist/cjs/services/email-verification/email-verification-service.d.ts +19 -19
  352. package/dist/cjs/services/email-verification/email-verification-service.js +131 -131
  353. package/dist/cjs/services/email-verification/index.d.ts +2 -2
  354. package/dist/cjs/services/email-verification/index.js +18 -18
  355. package/dist/cjs/services/eventbridge-integration-service.d.ts +9 -9
  356. package/dist/cjs/services/eventbridge-integration-service.js +28 -28
  357. package/dist/cjs/services/events/build-collect-queue-tracking-event.d.ts +11 -11
  358. package/dist/cjs/services/events/build-collect-queue-tracking-event.js +23 -23
  359. package/dist/cjs/services/events/collect-queue-tracking-service.d.ts +12 -12
  360. package/dist/cjs/services/events/collect-queue-tracking-service.js +22 -22
  361. package/dist/cjs/services/events/index.d.ts +5 -5
  362. package/dist/cjs/services/events/index.js +21 -21
  363. package/dist/cjs/services/events/log-event-service.d.ts +19 -19
  364. package/dist/cjs/services/events/log-event-service.js +77 -77
  365. package/dist/cjs/services/events/metric-event-service.d.ts +9 -9
  366. package/dist/cjs/services/events/metric-event-service.js +49 -49
  367. package/dist/cjs/services/events/tracking-event-sqs-service.d.ts +8 -8
  368. package/dist/cjs/services/events/tracking-event-sqs-service.js +36 -36
  369. package/dist/cjs/services/generic-cache-service.d.ts +7 -7
  370. package/dist/cjs/services/generic-cache-service.js +33 -33
  371. package/dist/cjs/services/index.d.ts +11 -11
  372. package/dist/cjs/services/index.js +27 -27
  373. package/dist/cjs/services/ipdata-lookup-service.d.ts +20 -20
  374. package/dist/cjs/services/ipdata-lookup-service.js +112 -112
  375. package/dist/cjs/services/shopify/index.d.ts +2 -2
  376. package/dist/cjs/services/shopify/index.js +18 -18
  377. package/dist/cjs/services/shopify/products/index.d.ts +1 -1
  378. package/dist/cjs/services/shopify/products/index.js +17 -17
  379. package/dist/cjs/services/shopify/products/shopify-products-serviceV2.d.ts +17 -17
  380. package/dist/cjs/services/shopify/products/shopify-products-serviceV2.js +112 -112
  381. package/dist/cjs/services/shopify/shopify-graphql-transformer.d.ts +8 -8
  382. package/dist/cjs/services/shopify/shopify-graphql-transformer.js +141 -141
  383. package/dist/cjs/types/acuity-types.d.ts +74 -74
  384. package/dist/cjs/types/acuity-types.js +2 -2
  385. package/dist/cjs/types/api-response.d.ts +6 -6
  386. package/dist/cjs/types/api-response.js +2 -2
  387. package/dist/cjs/types/index.d.ts +6 -6
  388. package/dist/cjs/types/index.js +35 -35
  389. package/dist/cjs/types/internal-events/event-detail-types.d.ts +20 -20
  390. package/dist/cjs/types/internal-events/event-detail-types.js +27 -27
  391. package/dist/cjs/types/internal-events/index.d.ts +1 -1
  392. package/dist/cjs/types/internal-events/index.js +17 -17
  393. package/dist/cjs/types/open-exchange-rates-types.d.ts +10 -10
  394. package/dist/cjs/types/open-exchange-rates-types.js +2 -2
  395. package/dist/cjs/types/public-api-types.d.ts +24 -24
  396. package/dist/cjs/types/public-api-types.js +13 -13
  397. package/dist/cjs/types/shopify-graphql-types/admin.generated.d.ts +123 -123
  398. package/dist/cjs/types/shopify-graphql-types/admin.generated.js +2 -2
  399. package/dist/cjs/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  400. package/dist/cjs/types/shopify-graphql-types/admin.types.js +5311 -5311
  401. package/dist/cjs/types/shopify-graphql-types/index.d.ts +2 -2
  402. package/dist/cjs/types/shopify-graphql-types/index.js +18 -18
  403. package/dist/cjs/types/shopify-rest-types.d.ts +767 -767
  404. package/dist/cjs/types/shopify-rest-types.js +2 -2
  405. package/dist/cjs/utils/compression.d.ts +36 -36
  406. package/dist/cjs/utils/compression.js +198 -198
  407. package/dist/cjs/utils/custom-measure-formula-utils.d.ts +6 -6
  408. package/dist/cjs/utils/custom-measure-formula-utils.js +209 -209
  409. package/dist/cjs/utils/index.d.ts +4 -4
  410. package/dist/cjs/utils/index.js +20 -20
  411. package/dist/cjs/utils/retry-envelope.d.ts +12 -12
  412. package/dist/cjs/utils/retry-envelope.js +28 -28
  413. package/dist/cjs/utils/size.d.ts +2 -2
  414. package/dist/cjs/utils/size.js +49 -49
  415. package/dist/esm/__tests__/clients/acuity-client.spec.d.ts +1 -1
  416. package/dist/esm/__tests__/clients/acuity-client.spec.js +41 -41
  417. package/dist/esm/__tests__/clients/cross-platform-compression.spec.d.ts +1 -1
  418. package/dist/esm/__tests__/clients/cross-platform-compression.spec.js +329 -329
  419. package/dist/esm/__tests__/clients/dynamodb-client.spec.d.ts +1 -1
  420. package/dist/esm/__tests__/clients/dynamodb-client.spec.js +192 -192
  421. package/dist/esm/__tests__/clients/event-collector-client.spec.d.ts +1 -1
  422. package/dist/esm/__tests__/clients/event-collector-client.spec.js +225 -225
  423. package/dist/esm/__tests__/clients/open-exchange-rates-client.spec.d.ts +1 -1
  424. package/dist/esm/__tests__/clients/open-exchange-rates-client.spec.js +53 -53
  425. package/dist/esm/__tests__/clients/sqs-bundled-client.spec.d.ts +1 -1
  426. package/dist/esm/__tests__/clients/sqs-bundled-client.spec.js +906 -906
  427. package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.d.ts +1 -1
  428. package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.js +538 -538
  429. package/dist/esm/__tests__/clients/sqs-client.spec.d.ts +1 -1
  430. package/dist/esm/__tests__/clients/sqs-client.spec.js +189 -189
  431. package/dist/esm/__tests__/clients/sqs-unbundle.spec.d.ts +1 -1
  432. package/dist/esm/__tests__/clients/sqs-unbundle.spec.js +1355 -1355
  433. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.d.ts +1 -1
  434. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js +66 -66
  435. package/dist/esm/__tests__/db/destinations-db-service.spec.d.ts +1 -1
  436. package/dist/esm/__tests__/db/destinations-db-service.spec.js +123 -123
  437. package/dist/esm/__tests__/db/products-db-service.spec.d.ts +1 -1
  438. package/dist/esm/__tests__/db/products-db-service.spec.js +87 -87
  439. package/dist/esm/__tests__/db/shared-read-db-services.spec.d.ts +1 -1
  440. package/dist/esm/__tests__/db/shared-read-db-services.spec.js +87 -87
  441. package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.d.ts +1 -1
  442. package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.js +102 -102
  443. package/dist/esm/__tests__/db/subscriptions-db-service.spec.d.ts +1 -1
  444. package/dist/esm/__tests__/db/subscriptions-db-service.spec.js +93 -93
  445. package/dist/esm/__tests__/db/user-accounts-db-service.spec.d.ts +1 -1
  446. package/dist/esm/__tests__/db/user-accounts-db-service.spec.js +74 -74
  447. package/dist/esm/__tests__/helpers/account-users-helper.spec.d.ts +1 -1
  448. package/dist/esm/__tests__/helpers/account-users-helper.spec.js +218 -218
  449. package/dist/esm/__tests__/helpers/acuity-helper.spec.d.ts +1 -1
  450. package/dist/esm/__tests__/helpers/acuity-helper.spec.js +67 -67
  451. package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.d.ts +1 -1
  452. package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.js +80 -80
  453. package/dist/esm/__tests__/helpers/cognito-auth-helper.spec.d.ts +1 -1
  454. package/dist/esm/__tests__/helpers/cognito-auth-helper.spec.js +44 -44
  455. package/dist/esm/__tests__/helpers/public-api-response-helper.spec.d.ts +1 -1
  456. package/dist/esm/__tests__/helpers/public-api-response-helper.spec.js +55 -55
  457. package/dist/esm/__tests__/identity-cache/helpers.spec.d.ts +1 -1
  458. package/dist/esm/__tests__/identity-cache/helpers.spec.js +590 -590
  459. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.d.ts +1 -1
  460. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js +674 -674
  461. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.d.ts +1 -1
  462. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-db-service.spec.js +553 -553
  463. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.d.ts +1 -1
  464. package/dist/esm/__tests__/identity-cache/identity-cache-tier-routing.spec.js +629 -629
  465. package/dist/esm/__tests__/identity-cache/identity-client.spec.d.ts +1 -1
  466. package/dist/esm/__tests__/identity-cache/identity-client.spec.js +357 -357
  467. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.d.ts +1 -1
  468. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-hit.spec.js +135 -135
  469. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.d.ts +1 -1
  470. package/dist/esm/__tests__/identity-cache/identity-gateway-cache-miss.spec.js +150 -150
  471. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.d.ts +1 -1
  472. package/dist/esm/__tests__/identity-cache/identity-gateway-constructor.spec.js +69 -69
  473. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.d.ts +1 -1
  474. package/dist/esm/__tests__/identity-cache/identity-gateway-edge-cases.spec.js +86 -86
  475. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.d.ts +1 -1
  476. package/dist/esm/__tests__/identity-cache/identity-gateway-enqueue-async.spec.js +133 -133
  477. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.d.ts +1 -1
  478. package/dist/esm/__tests__/identity-cache/identity-gateway-stale-cache.spec.js +221 -221
  479. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.d.ts +28 -28
  480. package/dist/esm/__tests__/identity-cache/identity-gateway-test-setup.js +82 -82
  481. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.d.ts +1 -1
  482. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.js +1768 -1768
  483. package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.d.ts +1 -1
  484. package/dist/esm/__tests__/identity-cache/volatile-traits-optimization.spec.js +816 -816
  485. package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.d.ts +1 -1
  486. package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.js +582 -582
  487. package/dist/esm/__tests__/libs/compress-decompress.spec.d.ts +1 -1
  488. package/dist/esm/__tests__/libs/compress-decompress.spec.js +14 -14
  489. package/dist/esm/__tests__/libs/contacts.spec.d.ts +1 -1
  490. package/dist/esm/__tests__/libs/contacts.spec.js +292 -292
  491. package/dist/esm/__tests__/libs/currency.spec.d.ts +1 -1
  492. package/dist/esm/__tests__/libs/currency.spec.js +218 -218
  493. package/dist/esm/__tests__/libs/dates.spec.d.ts +1 -1
  494. package/dist/esm/__tests__/libs/dates.spec.js +128 -128
  495. package/dist/esm/__tests__/libs/domain.spec.d.ts +1 -1
  496. package/dist/esm/__tests__/libs/domain.spec.js +105 -105
  497. package/dist/esm/__tests__/libs/numbers.spec.d.ts +1 -1
  498. package/dist/esm/__tests__/libs/numbers.spec.js +259 -259
  499. package/dist/esm/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  500. package/dist/esm/__tests__/s3-client/s3-client.spec.js +31 -31
  501. package/dist/esm/__tests__/services/acuity-api-service.spec.d.ts +1 -1
  502. package/dist/esm/__tests__/services/acuity-api-service.spec.js +69 -69
  503. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.d.ts +1 -1
  504. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.js +21 -21
  505. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.d.ts +1 -1
  506. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js +3347 -3317
  507. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js.map +1 -1
  508. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.d.ts +1 -1
  509. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.js +112 -112
  510. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.d.ts +1 -1
  511. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.js +466 -466
  512. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.d.ts +1 -1
  513. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js +358 -204
  514. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js.map +1 -1
  515. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.d.ts +1 -1
  516. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.js +32 -32
  517. package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.d.ts +1 -1
  518. package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.js +91 -91
  519. package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.d.ts +1 -1
  520. package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.js +55 -55
  521. package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.d.ts +1 -1
  522. package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.js +227 -227
  523. package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.d.ts +1 -1
  524. package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.js +189 -189
  525. package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.d.ts +1 -1
  526. package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.js +33 -33
  527. package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.d.ts +1 -1
  528. package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.js +156 -156
  529. package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.d.ts +1 -1
  530. package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.js +67 -67
  531. package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.d.ts +1 -1
  532. package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.js +144 -144
  533. package/dist/esm/clients/generic/cognito-client.d.ts +23 -23
  534. package/dist/esm/clients/generic/cognito-client.js +204 -204
  535. package/dist/esm/clients/generic/dynamodb-client.d.ts +20 -20
  536. package/dist/esm/clients/generic/dynamodb-client.js +231 -231
  537. package/dist/esm/clients/generic/eventbridge-client.d.ts +14 -14
  538. package/dist/esm/clients/generic/eventbridge-client.js +47 -47
  539. package/dist/esm/clients/generic/http-client.d.ts +14 -14
  540. package/dist/esm/clients/generic/http-client.js +53 -53
  541. package/dist/esm/clients/generic/index.d.ts +13 -13
  542. package/dist/esm/clients/generic/index.js +13 -13
  543. package/dist/esm/clients/generic/lambda-invoke-client.d.ts +10 -10
  544. package/dist/esm/clients/generic/lambda-invoke-client.js +35 -35
  545. package/dist/esm/clients/generic/location-client.d.ts +8 -8
  546. package/dist/esm/clients/generic/location-client.js +27 -27
  547. package/dist/esm/clients/generic/redis-client.d.ts +33 -33
  548. package/dist/esm/clients/generic/redis-client.js +184 -184
  549. package/dist/esm/clients/generic/s3-client.d.ts +23 -23
  550. package/dist/esm/clients/generic/s3-client.js +209 -209
  551. package/dist/esm/clients/generic/singlestore-db-client.d.ts +14 -14
  552. package/dist/esm/clients/generic/singlestore-db-client.js +40 -40
  553. package/dist/esm/clients/generic/sqs-bundled-client.d.ts +15 -15
  554. package/dist/esm/clients/generic/sqs-bundled-client.js +307 -307
  555. package/dist/esm/clients/generic/sqs-bundled-client.types.d.ts +53 -53
  556. package/dist/esm/clients/generic/sqs-bundled-client.types.js +14 -14
  557. package/dist/esm/clients/generic/sqs-client.d.ts +53 -53
  558. package/dist/esm/clients/generic/sqs-client.js +281 -281
  559. package/dist/esm/clients/generic/sqs-unbundle.d.ts +32 -32
  560. package/dist/esm/clients/generic/sqs-unbundle.js +137 -137
  561. package/dist/esm/clients/index.d.ts +3 -3
  562. package/dist/esm/clients/index.js +3 -3
  563. package/dist/esm/clients/internal-api/accounts-client.d.ts +91 -91
  564. package/dist/esm/clients/internal-api/accounts-client.js +125 -125
  565. package/dist/esm/clients/internal-api/cache-lambda-client.d.ts +26 -26
  566. package/dist/esm/clients/internal-api/cache-lambda-client.js +85 -85
  567. package/dist/esm/clients/internal-api/db-management-client.d.ts +18 -18
  568. package/dist/esm/clients/internal-api/db-management-client.js +32 -32
  569. package/dist/esm/clients/internal-api/destinations-client.d.ts +34 -34
  570. package/dist/esm/clients/internal-api/destinations-client.js +75 -75
  571. package/dist/esm/clients/internal-api/event-collector-client.d.ts +122 -122
  572. package/dist/esm/clients/internal-api/event-collector-client.js +74 -74
  573. package/dist/esm/clients/internal-api/identity-client.d.ts +41 -41
  574. package/dist/esm/clients/internal-api/identity-client.js +133 -133
  575. package/dist/esm/clients/internal-api/index.d.ts +9 -9
  576. package/dist/esm/clients/internal-api/index.js +9 -9
  577. package/dist/esm/clients/internal-api/shopify-app-install-client.d.ts +37 -37
  578. package/dist/esm/clients/internal-api/shopify-app-install-client.js +77 -77
  579. package/dist/esm/clients/internal-api/subscriptions-client.d.ts +26 -26
  580. package/dist/esm/clients/internal-api/subscriptions-client.js +73 -73
  581. package/dist/esm/clients/internal-api/users-auth-client.d.ts +35 -35
  582. package/dist/esm/clients/internal-api/users-auth-client.js +106 -106
  583. package/dist/esm/clients/third-party/acuity-client.d.ts +10 -10
  584. package/dist/esm/clients/third-party/acuity-client.js +36 -36
  585. package/dist/esm/clients/third-party/emailable-client.d.ts +7 -7
  586. package/dist/esm/clients/third-party/emailable-client.js +21 -21
  587. package/dist/esm/clients/third-party/exchange-rate-api-client.d.ts +17 -17
  588. package/dist/esm/clients/third-party/exchange-rate-api-client.js +15 -15
  589. package/dist/esm/clients/third-party/index.d.ts +6 -6
  590. package/dist/esm/clients/third-party/index.js +6 -6
  591. package/dist/esm/clients/third-party/loops-client.d.ts +10 -10
  592. package/dist/esm/clients/third-party/loops-client.js +26 -26
  593. package/dist/esm/clients/third-party/open-exchange-rates-client.d.ts +8 -8
  594. package/dist/esm/clients/third-party/open-exchange-rates-client.js +23 -23
  595. package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.d.ts +18 -18
  596. package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.js +19 -19
  597. package/dist/esm/clients/third-party/shopify/graphql-order-queries.d.ts +25 -25
  598. package/dist/esm/clients/third-party/shopify/graphql-order-queries.js +1 -1
  599. package/dist/esm/clients/third-party/shopify/graphql-product-queries.d.ts +2 -2
  600. package/dist/esm/clients/third-party/shopify/graphql-product-queries.js +2 -2
  601. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.d.ts +42 -42
  602. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js +348 -348
  603. package/dist/esm/clients/third-party/shopify-client.d.ts +29 -29
  604. package/dist/esm/clients/third-party/shopify-client.js +142 -142
  605. package/dist/esm/constants/index.d.ts +1 -1
  606. package/dist/esm/constants/index.js +1 -1
  607. package/dist/esm/constants/sqs.d.ts +20 -20
  608. package/dist/esm/constants/sqs.js +22 -22
  609. package/dist/esm/helpers/account-users-helper.d.ts +2 -2
  610. package/dist/esm/helpers/account-users-helper.js +18 -18
  611. package/dist/esm/helpers/acuity-helper.d.ts +4 -4
  612. package/dist/esm/helpers/acuity-helper.js +51 -51
  613. package/dist/esm/helpers/api-key-auth-helper.d.ts +9 -9
  614. package/dist/esm/helpers/api-key-auth-helper.js +35 -35
  615. package/dist/esm/helpers/api-key-authorizer-helper.d.ts +36 -36
  616. package/dist/esm/helpers/api-key-authorizer-helper.js +83 -83
  617. package/dist/esm/helpers/cognito-auth-helper.d.ts +5 -5
  618. package/dist/esm/helpers/cognito-auth-helper.js +10 -10
  619. package/dist/esm/helpers/index.d.ts +11 -11
  620. package/dist/esm/helpers/index.js +11 -11
  621. package/dist/esm/helpers/input-validation-helper.d.ts +3 -3
  622. package/dist/esm/helpers/input-validation-helper.js +18 -18
  623. package/dist/esm/helpers/logging-helper.d.ts +16 -16
  624. package/dist/esm/helpers/logging-helper.js +56 -56
  625. package/dist/esm/helpers/public-api-response-helper.d.ts +21 -21
  626. package/dist/esm/helpers/public-api-response-helper.js +38 -38
  627. package/dist/esm/helpers/response-helper.d.ts +18 -18
  628. package/dist/esm/helpers/response-helper.js +37 -37
  629. package/dist/esm/helpers/shopify-helper.d.ts +9 -9
  630. package/dist/esm/helpers/shopify-helper.js +21 -21
  631. package/dist/esm/helpers/sqs-utils.d.ts +6 -6
  632. package/dist/esm/helpers/sqs-utils.js +9 -9
  633. package/dist/esm/index.d.ts +7 -7
  634. package/dist/esm/index.js +7 -7
  635. package/dist/esm/libs/api-router/index.d.ts +2 -2
  636. package/dist/esm/libs/api-router/index.js +2 -2
  637. package/dist/esm/libs/api-router/public-api-router.d.ts +3 -3
  638. package/dist/esm/libs/api-router/public-api-router.js +32 -32
  639. package/dist/esm/libs/api-router/route-matcher.d.ts +21 -21
  640. package/dist/esm/libs/api-router/route-matcher.js +30 -30
  641. package/dist/esm/libs/click-id-parser.d.ts +23 -23
  642. package/dist/esm/libs/click-id-parser.js +45 -45
  643. package/dist/esm/libs/compression.d.ts +2 -2
  644. package/dist/esm/libs/compression.js +25 -25
  645. package/dist/esm/libs/contacts.d.ts +7 -7
  646. package/dist/esm/libs/contacts.js +143 -143
  647. package/dist/esm/libs/cookie.d.ts +17 -17
  648. package/dist/esm/libs/cookie.js +70 -70
  649. package/dist/esm/libs/crypto.d.ts +4 -4
  650. package/dist/esm/libs/crypto.js +15 -15
  651. package/dist/esm/libs/csv.d.ts +2 -2
  652. package/dist/esm/libs/csv.js +30 -30
  653. package/dist/esm/libs/currency.d.ts +1 -1
  654. package/dist/esm/libs/currency.js +22 -22
  655. package/dist/esm/libs/dates.d.ts +12 -12
  656. package/dist/esm/libs/dates.js +83 -83
  657. package/dist/esm/libs/domain.d.ts +2 -2
  658. package/dist/esm/libs/domain.js +33 -33
  659. package/dist/esm/libs/emails.d.ts +8 -8
  660. package/dist/esm/libs/emails.js +146 -146
  661. package/dist/esm/libs/http-error.d.ts +21 -21
  662. package/dist/esm/libs/http-error.js +59 -59
  663. package/dist/esm/libs/http-status-codes.d.ts +58 -58
  664. package/dist/esm/libs/http-status-codes.js +59 -59
  665. package/dist/esm/libs/index.d.ts +19 -19
  666. package/dist/esm/libs/index.js +19 -19
  667. package/dist/esm/libs/numbers.d.ts +1 -1
  668. package/dist/esm/libs/numbers.js +11 -11
  669. package/dist/esm/libs/referrer-parser/index.d.ts +2 -2
  670. package/dist/esm/libs/referrer-parser/index.js +2 -2
  671. package/dist/esm/libs/referrer-parser/referrer-data.d.ts +9 -9
  672. package/dist/esm/libs/referrer-parser/referrer-data.js +3304 -3304
  673. package/dist/esm/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  674. package/dist/esm/libs/referrer-parser/referrer-parser-util.js +124 -124
  675. package/dist/esm/libs/strings.d.ts +3 -3
  676. package/dist/esm/libs/strings.js +40 -40
  677. package/dist/esm/libs/traits.d.ts +6 -6
  678. package/dist/esm/libs/traits.js +54 -54
  679. package/dist/esm/libs/url.d.ts +1 -1
  680. package/dist/esm/libs/url.js +9 -9
  681. package/dist/esm/services/acuity-api-service.d.ts +9 -9
  682. package/dist/esm/services/acuity-api-service.js +69 -69
  683. package/dist/esm/services/cache/generic-cached-object.d.ts +5 -5
  684. package/dist/esm/services/cache/generic-cached-object.js +1 -1
  685. package/dist/esm/services/cache/index.d.ts +1 -1
  686. package/dist/esm/services/cache/index.js +1 -1
  687. package/dist/esm/services/cache/product-cache-service.d.ts +21 -21
  688. package/dist/esm/services/cache/product-cache-service.js +68 -68
  689. package/dist/esm/services/cost/cost-calculation-types.d.ts +69 -69
  690. package/dist/esm/services/cost/cost-calculation-types.js +15 -15
  691. package/dist/esm/services/cost/cost-calculator-service.d.ts +24 -24
  692. package/dist/esm/services/cost/cost-calculator-service.js +455 -450
  693. package/dist/esm/services/cost/cost-calculator-service.js.map +1 -1
  694. package/dist/esm/services/cost/cost-currency-service.d.ts +6 -6
  695. package/dist/esm/services/cost/cost-currency-service.js +84 -84
  696. package/dist/esm/services/cost/cost-filter-service.d.ts +10 -10
  697. package/dist/esm/services/cost/cost-filter-service.js +118 -118
  698. package/dist/esm/services/cost/index.d.ts +5 -5
  699. package/dist/esm/services/cost/index.js +5 -5
  700. package/dist/esm/services/cost/order-cost/index.d.ts +2 -2
  701. package/dist/esm/services/cost/order-cost/index.js +2 -2
  702. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.d.ts +26 -23
  703. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js +397 -355
  704. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js.map +1 -1
  705. package/dist/esm/services/cost/order-cost/order-cost-resolution-types.d.ts +37 -37
  706. package/dist/esm/services/cost/order-cost/order-cost-resolution-types.js +1 -1
  707. package/dist/esm/services/currency-exchange-rate-lookup-service.d.ts +12 -12
  708. package/dist/esm/services/currency-exchange-rate-lookup-service.js +90 -90
  709. package/dist/esm/services/db/accounts-db-service.d.ts +9 -9
  710. package/dist/esm/services/db/accounts-db-service.js +29 -29
  711. package/dist/esm/services/db/api-keys-db-service.d.ts +10 -10
  712. package/dist/esm/services/db/api-keys-db-service.js +32 -32
  713. package/dist/esm/services/db/contact-enrichments-db-service.d.ts +15 -15
  714. package/dist/esm/services/db/contact-enrichments-db-service.js +90 -90
  715. package/dist/esm/services/db/currency-exchange-rates-db-service.d.ts +21 -21
  716. package/dist/esm/services/db/currency-exchange-rates-db-service.js +35 -35
  717. package/dist/esm/services/db/custom-measures-db-service.d.ts +14 -14
  718. package/dist/esm/services/db/custom-measures-db-service.js +44 -44
  719. package/dist/esm/services/db/destinations-db-service.d.ts +13 -13
  720. package/dist/esm/services/db/destinations-db-service.js +70 -70
  721. package/dist/esm/services/db/identity-cache-db-service.d.ts +28 -28
  722. package/dist/esm/services/db/identity-cache-db-service.js +313 -313
  723. package/dist/esm/services/db/identity-cache-dynamodb-service/constants.d.ts +3 -3
  724. package/dist/esm/services/db/identity-cache-dynamodb-service/constants.js +3 -3
  725. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.d.ts +20 -20
  726. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-cache-dynamodb-db-service.js +358 -358
  727. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.d.ts +23 -23
  728. package/dist/esm/services/db/identity-cache-dynamodb-service/identity-gateway-service.js +218 -218
  729. package/dist/esm/services/db/identity-cache-dynamodb-service/index.d.ts +4 -4
  730. package/dist/esm/services/db/identity-cache-dynamodb-service/index.js +4 -4
  731. package/dist/esm/services/db/identity-cache-dynamodb-service/key-builders.d.ts +12 -12
  732. package/dist/esm/services/db/identity-cache-dynamodb-service/key-builders.js +23 -23
  733. package/dist/esm/services/db/identity-cache-dynamodb-service/types.d.ts +71 -71
  734. package/dist/esm/services/db/identity-cache-dynamodb-service/types.js +25 -25
  735. package/dist/esm/services/db/index.d.ts +22 -22
  736. package/dist/esm/services/db/index.js +22 -22
  737. package/dist/esm/services/db/log-events-db-service.d.ts +11 -11
  738. package/dist/esm/services/db/log-events-db-service.js +177 -177
  739. package/dist/esm/services/db/pixels-db-service.d.ts +8 -8
  740. package/dist/esm/services/db/pixels-db-service.js +31 -31
  741. package/dist/esm/services/db/products-db-service-types.d.ts +10 -10
  742. package/dist/esm/services/db/products-db-service-types.js +1 -1
  743. package/dist/esm/services/db/products-db-service.d.ts +19 -19
  744. package/dist/esm/services/db/products-db-service.js +277 -277
  745. package/dist/esm/services/db/purchasable-contacts-db-service.d.ts +9 -9
  746. package/dist/esm/services/db/purchasable-contacts-db-service.js +39 -39
  747. package/dist/esm/services/db/purchased-contacts/index.d.ts +2 -2
  748. package/dist/esm/services/db/purchased-contacts/index.js +2 -2
  749. package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.d.ts +18 -18
  750. package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.js +148 -148
  751. package/dist/esm/services/db/purchased-contacts/types.d.ts +11 -11
  752. package/dist/esm/services/db/purchased-contacts/types.js +1 -1
  753. package/dist/esm/services/db/shopify-app-installs-db-service.d.ts +10 -10
  754. package/dist/esm/services/db/shopify-app-installs-db-service.js +48 -48
  755. package/dist/esm/services/db/shopify-products-cache-db-service.d.ts +16 -16
  756. package/dist/esm/services/db/shopify-products-cache-db-service.js +66 -66
  757. package/dist/esm/services/db/subscriptions-db-service.d.ts +11 -11
  758. package/dist/esm/services/db/subscriptions-db-service.js +34 -34
  759. package/dist/esm/services/db/tracking-events-db-service.d.ts +21 -21
  760. package/dist/esm/services/db/tracking-events-db-service.js +184 -184
  761. package/dist/esm/services/db/user-accounts-db-service.d.ts +7 -7
  762. package/dist/esm/services/db/user-accounts-db-service.js +13 -13
  763. package/dist/esm/services/email-verification/contact-email-verification-service.d.ts +7 -7
  764. package/dist/esm/services/email-verification/contact-email-verification-service.js +97 -97
  765. package/dist/esm/services/email-verification/email-verification-service.d.ts +19 -19
  766. package/dist/esm/services/email-verification/email-verification-service.js +127 -127
  767. package/dist/esm/services/email-verification/index.d.ts +2 -2
  768. package/dist/esm/services/email-verification/index.js +2 -2
  769. package/dist/esm/services/eventbridge-integration-service.d.ts +9 -9
  770. package/dist/esm/services/eventbridge-integration-service.js +24 -24
  771. package/dist/esm/services/events/build-collect-queue-tracking-event.d.ts +11 -11
  772. package/dist/esm/services/events/build-collect-queue-tracking-event.js +19 -19
  773. package/dist/esm/services/events/collect-queue-tracking-service.d.ts +12 -12
  774. package/dist/esm/services/events/collect-queue-tracking-service.js +18 -18
  775. package/dist/esm/services/events/index.d.ts +5 -5
  776. package/dist/esm/services/events/index.js +5 -5
  777. package/dist/esm/services/events/log-event-service.d.ts +19 -19
  778. package/dist/esm/services/events/log-event-service.js +73 -73
  779. package/dist/esm/services/events/metric-event-service.d.ts +9 -9
  780. package/dist/esm/services/events/metric-event-service.js +45 -45
  781. package/dist/esm/services/events/tracking-event-sqs-service.d.ts +8 -8
  782. package/dist/esm/services/events/tracking-event-sqs-service.js +32 -32
  783. package/dist/esm/services/generic-cache-service.d.ts +7 -7
  784. package/dist/esm/services/generic-cache-service.js +29 -29
  785. package/dist/esm/services/index.d.ts +11 -11
  786. package/dist/esm/services/index.js +11 -11
  787. package/dist/esm/services/ipdata-lookup-service.d.ts +20 -20
  788. package/dist/esm/services/ipdata-lookup-service.js +108 -108
  789. package/dist/esm/services/shopify/index.d.ts +2 -2
  790. package/dist/esm/services/shopify/index.js +2 -2
  791. package/dist/esm/services/shopify/products/index.d.ts +1 -1
  792. package/dist/esm/services/shopify/products/index.js +1 -1
  793. package/dist/esm/services/shopify/products/shopify-products-serviceV2.d.ts +17 -17
  794. package/dist/esm/services/shopify/products/shopify-products-serviceV2.js +108 -108
  795. package/dist/esm/services/shopify/shopify-graphql-transformer.d.ts +8 -8
  796. package/dist/esm/services/shopify/shopify-graphql-transformer.js +138 -138
  797. package/dist/esm/types/acuity-types.d.ts +74 -74
  798. package/dist/esm/types/acuity-types.js +1 -1
  799. package/dist/esm/types/api-response.d.ts +6 -6
  800. package/dist/esm/types/api-response.js +1 -1
  801. package/dist/esm/types/index.d.ts +6 -6
  802. package/dist/esm/types/index.js +6 -6
  803. package/dist/esm/types/internal-events/event-detail-types.d.ts +20 -20
  804. package/dist/esm/types/internal-events/event-detail-types.js +24 -24
  805. package/dist/esm/types/internal-events/index.d.ts +1 -1
  806. package/dist/esm/types/internal-events/index.js +1 -1
  807. package/dist/esm/types/open-exchange-rates-types.d.ts +10 -10
  808. package/dist/esm/types/open-exchange-rates-types.js +1 -1
  809. package/dist/esm/types/public-api-types.d.ts +24 -24
  810. package/dist/esm/types/public-api-types.js +10 -10
  811. package/dist/esm/types/shopify-graphql-types/admin.generated.d.ts +123 -123
  812. package/dist/esm/types/shopify-graphql-types/admin.generated.js +1 -1
  813. package/dist/esm/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  814. package/dist/esm/types/shopify-graphql-types/admin.types.js +5299 -5299
  815. package/dist/esm/types/shopify-graphql-types/index.d.ts +2 -2
  816. package/dist/esm/types/shopify-graphql-types/index.js +2 -2
  817. package/dist/esm/types/shopify-rest-types.d.ts +767 -767
  818. package/dist/esm/types/shopify-rest-types.js +1 -1
  819. package/dist/esm/utils/compression.d.ts +36 -36
  820. package/dist/esm/utils/compression.js +187 -187
  821. package/dist/esm/utils/custom-measure-formula-utils.d.ts +6 -6
  822. package/dist/esm/utils/custom-measure-formula-utils.js +201 -201
  823. package/dist/esm/utils/index.d.ts +4 -4
  824. package/dist/esm/utils/index.js +4 -4
  825. package/dist/esm/utils/retry-envelope.d.ts +12 -12
  826. package/dist/esm/utils/retry-envelope.js +22 -22
  827. package/dist/esm/utils/size.d.ts +2 -2
  828. package/dist/esm/utils/size.js +44 -44
  829. package/package.json +136 -136
@@ -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