@adtrackify/at-service-common 4.0.25 → 4.0.28

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