@adtrackify/at-service-common 4.0.31 → 4.0.33

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