@adtrackify/at-service-common 4.0.36 → 5.0.2

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