@adtrackify/at-service-common 3.19.23 → 3.19.25

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 (747) 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/sqs-bundled-client.spec.d.ts +1 -1
  8. package/dist/cjs/__tests__/clients/sqs-bundled-client.spec.js +931 -931
  9. package/dist/cjs/__tests__/clients/sqs-bundling-contracts.spec.d.ts +1 -1
  10. package/dist/cjs/__tests__/clients/sqs-bundling-contracts.spec.js +563 -563
  11. package/dist/cjs/__tests__/clients/sqs-client.spec.d.ts +1 -1
  12. package/dist/cjs/__tests__/clients/sqs-client.spec.js +191 -191
  13. package/dist/cjs/__tests__/clients/sqs-unbundle.spec.d.ts +1 -1
  14. package/dist/cjs/__tests__/clients/sqs-unbundle.spec.js +1357 -1357
  15. package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.d.ts +1 -1
  16. package/dist/cjs/__tests__/db/contact-enrichments-db-service.spec.js +68 -68
  17. package/dist/cjs/__tests__/db/destinations-db-service.spec.d.ts +1 -1
  18. package/dist/cjs/__tests__/db/destinations-db-service.spec.js +125 -125
  19. package/dist/cjs/__tests__/db/products-db-service.spec.d.ts +1 -0
  20. package/dist/cjs/__tests__/db/products-db-service.spec.js +90 -0
  21. package/dist/cjs/__tests__/db/products-db-service.spec.js.map +1 -0
  22. package/dist/cjs/__tests__/db/shared-read-db-services.spec.d.ts +1 -1
  23. package/dist/cjs/__tests__/db/shared-read-db-services.spec.js +89 -89
  24. package/dist/cjs/__tests__/db/shopify-app-installs-db-service.spec.d.ts +1 -1
  25. package/dist/cjs/__tests__/db/shopify-app-installs-db-service.spec.js +104 -104
  26. package/dist/cjs/__tests__/db/subscriptions-db-service.spec.d.ts +1 -1
  27. package/dist/cjs/__tests__/db/subscriptions-db-service.spec.js +95 -95
  28. package/dist/cjs/__tests__/db/user-accounts-db-service.spec.d.ts +1 -1
  29. package/dist/cjs/__tests__/db/user-accounts-db-service.spec.js +76 -76
  30. package/dist/cjs/__tests__/helpers/account-users-helper.spec.d.ts +1 -1
  31. package/dist/cjs/__tests__/helpers/account-users-helper.spec.js +220 -220
  32. package/dist/cjs/__tests__/helpers/acuity-helper.spec.d.ts +1 -1
  33. package/dist/cjs/__tests__/helpers/acuity-helper.spec.js +69 -69
  34. package/dist/cjs/__tests__/helpers/api-key-auth-helper.spec.d.ts +1 -1
  35. package/dist/cjs/__tests__/helpers/api-key-auth-helper.spec.js +82 -82
  36. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.d.ts +1 -1
  37. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.js +674 -674
  38. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-service.spec.d.ts +1 -1
  39. package/dist/cjs/__tests__/identity-cache/identity-cache-dynamodb-service.spec.js +1140 -1140
  40. package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.d.ts +1 -1
  41. package/dist/cjs/__tests__/identity-cache/trait-merging-and-staleness.spec.js +588 -588
  42. package/dist/cjs/__tests__/integration/sqs-bundling-roundtrip.spec.d.ts +1 -1
  43. package/dist/cjs/__tests__/integration/sqs-bundling-roundtrip.spec.js +584 -584
  44. package/dist/cjs/__tests__/libs/compress-decompress.spec.d.ts +1 -1
  45. package/dist/cjs/__tests__/libs/compress-decompress.spec.js +16 -16
  46. package/dist/cjs/__tests__/libs/contacts.spec.d.ts +1 -1
  47. package/dist/cjs/__tests__/libs/contacts.spec.js +294 -294
  48. package/dist/cjs/__tests__/libs/currency.spec.d.ts +1 -1
  49. package/dist/cjs/__tests__/libs/currency.spec.js +220 -220
  50. package/dist/cjs/__tests__/libs/dates.spec.d.ts +1 -1
  51. package/dist/cjs/__tests__/libs/dates.spec.js +130 -130
  52. package/dist/cjs/__tests__/libs/domain.spec.d.ts +1 -1
  53. package/dist/cjs/__tests__/libs/domain.spec.js +107 -107
  54. package/dist/cjs/__tests__/libs/numbers.spec.d.ts +1 -1
  55. package/dist/cjs/__tests__/libs/numbers.spec.js +261 -261
  56. package/dist/cjs/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  57. package/dist/cjs/__tests__/s3-client/s3-client.spec.js +33 -33
  58. package/dist/cjs/__tests__/services/acuity-api-service.spec.d.ts +1 -1
  59. package/dist/cjs/__tests__/services/acuity-api-service.spec.js +71 -71
  60. package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.d.ts +1 -0
  61. package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.js +24 -0
  62. package/dist/cjs/__tests__/services/cost/cost-calculation-types.spec.js.map +1 -0
  63. package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.d.ts +1 -0
  64. package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.js +3320 -0
  65. package/dist/cjs/__tests__/services/cost/cost-calculator-service.spec.js.map +1 -0
  66. package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.d.ts +1 -0
  67. package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.js +115 -0
  68. package/dist/cjs/__tests__/services/cost/cost-currency-service.spec.js.map +1 -0
  69. package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.d.ts +1 -0
  70. package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.js +469 -0
  71. package/dist/cjs/__tests__/services/cost/cost-filter-service.spec.js.map +1 -0
  72. package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.d.ts +1 -0
  73. package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js +207 -0
  74. package/dist/cjs/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js.map +1 -0
  75. package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.d.ts +1 -0
  76. package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.js +35 -0
  77. package/dist/cjs/__tests__/services/currency-exchange-rate-lookup-service.spec.js.map +1 -0
  78. package/dist/cjs/__tests__/services/email-verification/contact-email-verification-service.spec.d.ts +1 -1
  79. package/dist/cjs/__tests__/services/email-verification/contact-email-verification-service.spec.js +93 -93
  80. package/dist/cjs/__tests__/services/email-verification/email-verification-service.spec.d.ts +1 -1
  81. package/dist/cjs/__tests__/services/email-verification/email-verification-service.spec.js +57 -57
  82. package/dist/cjs/__tests__/shopify/shopify-graphql-transformer.spec.d.ts +1 -1
  83. package/dist/cjs/__tests__/shopify/shopify-graphql-transformer.spec.js +35 -35
  84. package/dist/cjs/__tests__/unit/libs/api-router/public-api-router.spec.d.ts +1 -1
  85. package/dist/cjs/__tests__/unit/libs/api-router/public-api-router.spec.js +181 -181
  86. package/dist/cjs/__tests__/unit/libs/api-router/route-matcher.spec.d.ts +1 -1
  87. package/dist/cjs/__tests__/unit/libs/api-router/route-matcher.spec.js +69 -69
  88. package/dist/cjs/__tests__/utils/custom-measure-formula-utils.spec.d.ts +1 -1
  89. package/dist/cjs/__tests__/utils/custom-measure-formula-utils.spec.js +139 -139
  90. package/dist/cjs/clients/generic/cognito-client.d.ts +23 -23
  91. package/dist/cjs/clients/generic/cognito-client.js +209 -209
  92. package/dist/cjs/clients/generic/dynamodb-client.d.ts +20 -20
  93. package/dist/cjs/clients/generic/dynamodb-client.js +235 -235
  94. package/dist/cjs/clients/generic/eventbridge-client.d.ts +14 -14
  95. package/dist/cjs/clients/generic/eventbridge-client.js +51 -51
  96. package/dist/cjs/clients/generic/http-client.d.ts +14 -14
  97. package/dist/cjs/clients/generic/http-client.js +61 -61
  98. package/dist/cjs/clients/generic/index.d.ts +13 -13
  99. package/dist/cjs/clients/generic/index.js +29 -29
  100. package/dist/cjs/clients/generic/lambda-invoke-client.d.ts +10 -10
  101. package/dist/cjs/clients/generic/lambda-invoke-client.js +39 -39
  102. package/dist/cjs/clients/generic/location-client.d.ts +8 -8
  103. package/dist/cjs/clients/generic/location-client.js +31 -31
  104. package/dist/cjs/clients/generic/redis-client.d.ts +33 -33
  105. package/dist/cjs/clients/generic/redis-client.js +191 -191
  106. package/dist/cjs/clients/generic/s3-client.d.ts +23 -23
  107. package/dist/cjs/clients/generic/s3-client.js +216 -216
  108. package/dist/cjs/clients/generic/singlestore-db-client.d.ts +14 -14
  109. package/dist/cjs/clients/generic/singlestore-db-client.js +67 -67
  110. package/dist/cjs/clients/generic/sqs-bundled-client.d.ts +15 -15
  111. package/dist/cjs/clients/generic/sqs-bundled-client.js +311 -311
  112. package/dist/cjs/clients/generic/sqs-bundled-client.types.d.ts +53 -53
  113. package/dist/cjs/clients/generic/sqs-bundled-client.types.js +17 -17
  114. package/dist/cjs/clients/generic/sqs-client.d.ts +53 -53
  115. package/dist/cjs/clients/generic/sqs-client.js +285 -285
  116. package/dist/cjs/clients/generic/sqs-unbundle.d.ts +32 -32
  117. package/dist/cjs/clients/generic/sqs-unbundle.js +144 -144
  118. package/dist/cjs/clients/index.d.ts +3 -3
  119. package/dist/cjs/clients/index.js +19 -19
  120. package/dist/cjs/clients/internal-api/accounts-client.d.ts +91 -91
  121. package/dist/cjs/clients/internal-api/accounts-client.js +129 -129
  122. package/dist/cjs/clients/internal-api/cache-lambda-client.d.ts +26 -26
  123. package/dist/cjs/clients/internal-api/cache-lambda-client.js +89 -89
  124. package/dist/cjs/clients/internal-api/db-management-client.d.ts +18 -18
  125. package/dist/cjs/clients/internal-api/db-management-client.js +36 -36
  126. package/dist/cjs/clients/internal-api/destinations-client.d.ts +34 -34
  127. package/dist/cjs/clients/internal-api/destinations-client.js +79 -79
  128. package/dist/cjs/clients/internal-api/event-collector-client.d.ts +20 -20
  129. package/dist/cjs/clients/internal-api/event-collector-client.js +36 -36
  130. package/dist/cjs/clients/internal-api/identity-client.d.ts +31 -31
  131. package/dist/cjs/clients/internal-api/identity-client.js +91 -91
  132. package/dist/cjs/clients/internal-api/index.d.ts +9 -9
  133. package/dist/cjs/clients/internal-api/index.js +25 -25
  134. package/dist/cjs/clients/internal-api/shopify-app-install-client.d.ts +37 -37
  135. package/dist/cjs/clients/internal-api/shopify-app-install-client.js +81 -81
  136. package/dist/cjs/clients/internal-api/subscriptions-client.d.ts +26 -26
  137. package/dist/cjs/clients/internal-api/subscriptions-client.js +77 -77
  138. package/dist/cjs/clients/internal-api/users-auth-client.d.ts +35 -35
  139. package/dist/cjs/clients/internal-api/users-auth-client.js +110 -110
  140. package/dist/cjs/clients/third-party/acuity-client.d.ts +10 -10
  141. package/dist/cjs/clients/third-party/acuity-client.js +40 -40
  142. package/dist/cjs/clients/third-party/emailable-client.d.ts +7 -7
  143. package/dist/cjs/clients/third-party/emailable-client.js +25 -25
  144. package/dist/cjs/clients/third-party/exchange-rate-api-client.d.ts +17 -17
  145. package/dist/cjs/clients/third-party/exchange-rate-api-client.js +19 -19
  146. package/dist/cjs/clients/third-party/index.d.ts +5 -5
  147. package/dist/cjs/clients/third-party/index.js +21 -21
  148. package/dist/cjs/clients/third-party/loops-client.d.ts +10 -10
  149. package/dist/cjs/clients/third-party/loops-client.js +30 -30
  150. package/dist/cjs/clients/third-party/shopify/graphql-order-queries.d.ts +25 -25
  151. package/dist/cjs/clients/third-party/shopify/graphql-order-queries.js +4 -4
  152. package/dist/cjs/clients/third-party/shopify/graphql-product-queries.d.ts +2 -2
  153. package/dist/cjs/clients/third-party/shopify/graphql-product-queries.js +5 -5
  154. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.d.ts +10 -10
  155. package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.js +161 -161
  156. package/dist/cjs/clients/third-party/shopify-client.d.ts +29 -29
  157. package/dist/cjs/clients/third-party/shopify-client.js +146 -146
  158. package/dist/cjs/constants/index.d.ts +1 -1
  159. package/dist/cjs/constants/index.js +17 -17
  160. package/dist/cjs/constants/sqs.d.ts +20 -20
  161. package/dist/cjs/constants/sqs.js +26 -26
  162. package/dist/cjs/helpers/account-users-helper.d.ts +2 -2
  163. package/dist/cjs/helpers/account-users-helper.js +22 -22
  164. package/dist/cjs/helpers/acuity-helper.d.ts +4 -4
  165. package/dist/cjs/helpers/acuity-helper.js +56 -56
  166. package/dist/cjs/helpers/api-key-auth-helper.d.ts +9 -9
  167. package/dist/cjs/helpers/api-key-auth-helper.js +40 -40
  168. package/dist/cjs/helpers/api-key-authorizer-helper.d.ts +36 -36
  169. package/dist/cjs/helpers/api-key-authorizer-helper.js +87 -87
  170. package/dist/cjs/helpers/identity-cache-helper.d.ts +21 -21
  171. package/dist/cjs/helpers/identity-cache-helper.js +157 -157
  172. package/dist/cjs/helpers/index.d.ts +10 -10
  173. package/dist/cjs/helpers/index.js +26 -26
  174. package/dist/cjs/helpers/input-validation-helper.d.ts +3 -3
  175. package/dist/cjs/helpers/input-validation-helper.js +22 -22
  176. package/dist/cjs/helpers/logging-helper.d.ts +16 -16
  177. package/dist/cjs/helpers/logging-helper.js +84 -84
  178. package/dist/cjs/helpers/response-helper.d.ts +18 -18
  179. package/dist/cjs/helpers/response-helper.js +43 -43
  180. package/dist/cjs/helpers/shopify-helper.d.ts +9 -9
  181. package/dist/cjs/helpers/shopify-helper.js +26 -26
  182. package/dist/cjs/helpers/sqs-utils.d.ts +6 -6
  183. package/dist/cjs/helpers/sqs-utils.js +14 -14
  184. package/dist/cjs/index.d.ts +7 -7
  185. package/dist/cjs/index.js +23 -23
  186. package/dist/cjs/libs/api-router/index.d.ts +2 -2
  187. package/dist/cjs/libs/api-router/index.js +18 -18
  188. package/dist/cjs/libs/api-router/public-api-router.d.ts +3 -3
  189. package/dist/cjs/libs/api-router/public-api-router.js +36 -36
  190. package/dist/cjs/libs/api-router/route-matcher.d.ts +21 -21
  191. package/dist/cjs/libs/api-router/route-matcher.js +36 -36
  192. package/dist/cjs/libs/click-id-parser.d.ts +23 -23
  193. package/dist/cjs/libs/click-id-parser.js +49 -49
  194. package/dist/cjs/libs/compression.d.ts +2 -2
  195. package/dist/cjs/libs/compression.js +33 -33
  196. package/dist/cjs/libs/contacts.d.ts +7 -7
  197. package/dist/cjs/libs/contacts.js +152 -152
  198. package/dist/cjs/libs/cookie.d.ts +17 -17
  199. package/dist/cjs/libs/cookie.js +76 -76
  200. package/dist/cjs/libs/crypto.d.ts +4 -4
  201. package/dist/cjs/libs/crypto.js +25 -25
  202. package/dist/cjs/libs/csv.d.ts +2 -2
  203. package/dist/cjs/libs/csv.js +35 -35
  204. package/dist/cjs/libs/currency.d.ts +1 -1
  205. package/dist/cjs/libs/currency.js +29 -29
  206. package/dist/cjs/libs/dates.d.ts +12 -12
  207. package/dist/cjs/libs/dates.js +96 -96
  208. package/dist/cjs/libs/domain.d.ts +2 -2
  209. package/dist/cjs/libs/domain.js +38 -38
  210. package/dist/cjs/libs/emails.d.ts +8 -8
  211. package/dist/cjs/libs/emails.js +154 -154
  212. package/dist/cjs/libs/http-error.d.ts +21 -21
  213. package/dist/cjs/libs/http-error.js +63 -63
  214. package/dist/cjs/libs/http-status-codes.d.ts +58 -58
  215. package/dist/cjs/libs/http-status-codes.js +62 -62
  216. package/dist/cjs/libs/index.d.ts +19 -19
  217. package/dist/cjs/libs/index.js +35 -35
  218. package/dist/cjs/libs/numbers.d.ts +1 -1
  219. package/dist/cjs/libs/numbers.js +15 -15
  220. package/dist/cjs/libs/referrer-parser/index.d.ts +2 -2
  221. package/dist/cjs/libs/referrer-parser/index.js +18 -18
  222. package/dist/cjs/libs/referrer-parser/referrer-data.d.ts +9 -9
  223. package/dist/cjs/libs/referrer-parser/referrer-data.js +3307 -3307
  224. package/dist/cjs/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  225. package/dist/cjs/libs/referrer-parser/referrer-parser-util.js +131 -131
  226. package/dist/cjs/libs/strings.d.ts +3 -3
  227. package/dist/cjs/libs/strings.js +46 -46
  228. package/dist/cjs/libs/traits.d.ts +6 -6
  229. package/dist/cjs/libs/traits.js +65 -65
  230. package/dist/cjs/libs/url.d.ts +1 -1
  231. package/dist/cjs/libs/url.js +13 -13
  232. package/dist/cjs/services/acuity-api-service.d.ts +9 -9
  233. package/dist/cjs/services/acuity-api-service.js +73 -73
  234. package/dist/cjs/services/cache/generic-cached-object.d.ts +5 -5
  235. package/dist/cjs/services/cache/generic-cached-object.js +2 -2
  236. package/dist/cjs/services/cache/index.d.ts +1 -1
  237. package/dist/cjs/services/cache/index.js +17 -17
  238. package/dist/cjs/services/cache/product-cache-service.d.ts +21 -21
  239. package/dist/cjs/services/cache/product-cache-service.js +76 -76
  240. package/dist/cjs/services/cost/cost-calculation-types.d.ts +69 -0
  241. package/dist/cjs/services/cost/cost-calculation-types.js +20 -0
  242. package/dist/cjs/services/cost/cost-calculation-types.js.map +1 -0
  243. package/dist/cjs/services/cost/cost-calculator-service.d.ts +24 -0
  244. package/dist/cjs/services/cost/cost-calculator-service.js +457 -0
  245. package/dist/cjs/services/cost/cost-calculator-service.js.map +1 -0
  246. package/dist/cjs/services/cost/cost-currency-service.d.ts +6 -0
  247. package/dist/cjs/services/cost/cost-currency-service.js +88 -0
  248. package/dist/cjs/services/cost/cost-currency-service.js.map +1 -0
  249. package/dist/cjs/services/cost/cost-filter-service.d.ts +10 -0
  250. package/dist/cjs/services/cost/cost-filter-service.js +122 -0
  251. package/dist/cjs/services/cost/cost-filter-service.js.map +1 -0
  252. package/dist/cjs/services/cost/index.d.ts +5 -0
  253. package/dist/cjs/services/cost/index.js +22 -0
  254. package/dist/cjs/services/cost/index.js.map +1 -0
  255. package/dist/cjs/services/cost/order-cost/index.d.ts +2 -0
  256. package/dist/cjs/services/cost/order-cost/index.js +19 -0
  257. package/dist/cjs/services/cost/order-cost/index.js.map +1 -0
  258. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.d.ts +23 -0
  259. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js +362 -0
  260. package/dist/cjs/services/cost/order-cost/order-cost-resolution-service.js.map +1 -0
  261. package/dist/cjs/services/cost/order-cost/order-cost-resolution-types.d.ts +37 -0
  262. package/dist/cjs/services/cost/order-cost/order-cost-resolution-types.js +3 -0
  263. package/dist/cjs/services/cost/order-cost/order-cost-resolution-types.js.map +1 -0
  264. package/dist/cjs/services/currency-exchange-rate-lookup-service.d.ts +12 -11
  265. package/dist/cjs/services/currency-exchange-rate-lookup-service.js +94 -66
  266. package/dist/cjs/services/currency-exchange-rate-lookup-service.js.map +1 -1
  267. package/dist/cjs/services/db/accounts-db-service.d.ts +9 -9
  268. package/dist/cjs/services/db/accounts-db-service.js +33 -33
  269. package/dist/cjs/services/db/api-keys-db-service.d.ts +10 -10
  270. package/dist/cjs/services/db/api-keys-db-service.js +36 -36
  271. package/dist/cjs/services/db/contact-enrichments-db-service.d.ts +15 -15
  272. package/dist/cjs/services/db/contact-enrichments-db-service.js +94 -94
  273. package/dist/cjs/services/db/currency-exchange-rates-db-service.d.ts +21 -21
  274. package/dist/cjs/services/db/currency-exchange-rates-db-service.js +39 -39
  275. package/dist/cjs/services/db/custom-measures-db-service.d.ts +14 -14
  276. package/dist/cjs/services/db/custom-measures-db-service.js +48 -48
  277. package/dist/cjs/services/db/destinations-db-service.d.ts +13 -13
  278. package/dist/cjs/services/db/destinations-db-service.js +74 -74
  279. package/dist/cjs/services/db/identity-cache-db-service.d.ts +28 -28
  280. package/dist/cjs/services/db/identity-cache-db-service.js +320 -320
  281. package/dist/cjs/services/db/identity-cache-dynamodb-service.d.ts +38 -34
  282. package/dist/cjs/services/db/identity-cache-dynamodb-service.js +439 -433
  283. package/dist/cjs/services/db/identity-cache-dynamodb-service.js.map +1 -1
  284. package/dist/cjs/services/db/index.d.ts +19 -17
  285. package/dist/cjs/services/db/index.js +35 -33
  286. package/dist/cjs/services/db/index.js.map +1 -1
  287. package/dist/cjs/services/db/log-events-db-service.d.ts +11 -11
  288. package/dist/cjs/services/db/log-events-db-service.js +181 -181
  289. package/dist/cjs/services/db/pixels-db-service.d.ts +8 -8
  290. package/dist/cjs/services/db/pixels-db-service.js +35 -35
  291. package/dist/cjs/services/db/products-db-service-types.d.ts +10 -0
  292. package/dist/cjs/services/db/products-db-service-types.js +3 -0
  293. package/dist/cjs/services/db/products-db-service-types.js.map +1 -0
  294. package/dist/cjs/services/db/products-db-service.d.ts +19 -0
  295. package/dist/cjs/services/db/products-db-service.js +282 -0
  296. package/dist/cjs/services/db/products-db-service.js.map +1 -0
  297. package/dist/cjs/services/db/purchasable-contacts-db-service.d.ts +9 -9
  298. package/dist/cjs/services/db/purchasable-contacts-db-service.js +43 -43
  299. package/dist/cjs/services/db/purchased-contacts/index.d.ts +2 -2
  300. package/dist/cjs/services/db/purchased-contacts/index.js +18 -18
  301. package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.d.ts +18 -18
  302. package/dist/cjs/services/db/purchased-contacts/purchased-contacts-db-service.js +152 -152
  303. package/dist/cjs/services/db/purchased-contacts/types.d.ts +11 -11
  304. package/dist/cjs/services/db/purchased-contacts/types.js +2 -2
  305. package/dist/cjs/services/db/shopify-app-installs-db-service.d.ts +10 -10
  306. package/dist/cjs/services/db/shopify-app-installs-db-service.js +52 -52
  307. package/dist/cjs/services/db/shopify-products-cache-db-service.d.ts +16 -16
  308. package/dist/cjs/services/db/shopify-products-cache-db-service.js +73 -73
  309. package/dist/cjs/services/db/subscriptions-db-service.d.ts +11 -11
  310. package/dist/cjs/services/db/subscriptions-db-service.js +38 -38
  311. package/dist/cjs/services/db/tracking-events-db-service.d.ts +21 -21
  312. package/dist/cjs/services/db/tracking-events-db-service.js +188 -188
  313. package/dist/cjs/services/db/user-accounts-db-service.d.ts +7 -7
  314. package/dist/cjs/services/db/user-accounts-db-service.js +17 -17
  315. package/dist/cjs/services/email-verification/contact-email-verification-service.d.ts +7 -7
  316. package/dist/cjs/services/email-verification/contact-email-verification-service.js +101 -101
  317. package/dist/cjs/services/email-verification/email-verification-service.d.ts +19 -19
  318. package/dist/cjs/services/email-verification/email-verification-service.js +131 -131
  319. package/dist/cjs/services/email-verification/index.d.ts +2 -2
  320. package/dist/cjs/services/email-verification/index.js +18 -18
  321. package/dist/cjs/services/eventbridge-integration-service.d.ts +9 -9
  322. package/dist/cjs/services/eventbridge-integration-service.js +28 -28
  323. package/dist/cjs/services/events/index.d.ts +3 -3
  324. package/dist/cjs/services/events/index.js +19 -19
  325. package/dist/cjs/services/events/log-event-service.d.ts +19 -19
  326. package/dist/cjs/services/events/log-event-service.js +77 -77
  327. package/dist/cjs/services/events/metric-event-service.d.ts +9 -9
  328. package/dist/cjs/services/events/metric-event-service.js +49 -49
  329. package/dist/cjs/services/events/tracking-event-sqs-service.d.ts +8 -8
  330. package/dist/cjs/services/events/tracking-event-sqs-service.js +34 -34
  331. package/dist/cjs/services/generic-cache-service.d.ts +7 -7
  332. package/dist/cjs/services/generic-cache-service.js +33 -33
  333. package/dist/cjs/services/index.d.ts +11 -10
  334. package/dist/cjs/services/index.js +27 -26
  335. package/dist/cjs/services/index.js.map +1 -1
  336. package/dist/cjs/services/ipdata-lookup-service.d.ts +20 -20
  337. package/dist/cjs/services/ipdata-lookup-service.js +112 -112
  338. package/dist/cjs/services/shopify/index.d.ts +2 -2
  339. package/dist/cjs/services/shopify/index.js +18 -18
  340. package/dist/cjs/services/shopify/products/index.d.ts +1 -1
  341. package/dist/cjs/services/shopify/products/index.js +17 -17
  342. package/dist/cjs/services/shopify/products/shopify-products-serviceV2.d.ts +17 -17
  343. package/dist/cjs/services/shopify/products/shopify-products-serviceV2.js +112 -112
  344. package/dist/cjs/services/shopify/shopify-graphql-transformer.d.ts +8 -8
  345. package/dist/cjs/services/shopify/shopify-graphql-transformer.js +141 -141
  346. package/dist/cjs/types/acuity-types.d.ts +74 -74
  347. package/dist/cjs/types/acuity-types.js +2 -2
  348. package/dist/cjs/types/api-response.d.ts +6 -6
  349. package/dist/cjs/types/api-response.js +2 -2
  350. package/dist/cjs/types/index.d.ts +4 -4
  351. package/dist/cjs/types/index.js +33 -33
  352. package/dist/cjs/types/internal-events/event-detail-types.d.ts +20 -20
  353. package/dist/cjs/types/internal-events/event-detail-types.js +27 -27
  354. package/dist/cjs/types/internal-events/index.d.ts +1 -1
  355. package/dist/cjs/types/internal-events/index.js +17 -17
  356. package/dist/cjs/types/shopify-graphql-types/admin.generated.d.ts +123 -123
  357. package/dist/cjs/types/shopify-graphql-types/admin.generated.js +2 -2
  358. package/dist/cjs/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  359. package/dist/cjs/types/shopify-graphql-types/admin.types.js +5311 -5311
  360. package/dist/cjs/types/shopify-graphql-types/index.d.ts +2 -2
  361. package/dist/cjs/types/shopify-graphql-types/index.js +18 -18
  362. package/dist/cjs/types/shopify-rest-types.d.ts +767 -767
  363. package/dist/cjs/types/shopify-rest-types.js +2 -2
  364. package/dist/cjs/utils/compression.d.ts +36 -36
  365. package/dist/cjs/utils/compression.js +198 -198
  366. package/dist/cjs/utils/custom-measure-formula-utils.d.ts +6 -6
  367. package/dist/cjs/utils/custom-measure-formula-utils.js +209 -209
  368. package/dist/cjs/utils/index.d.ts +4 -4
  369. package/dist/cjs/utils/index.js +20 -20
  370. package/dist/cjs/utils/retry-envelope.d.ts +12 -12
  371. package/dist/cjs/utils/retry-envelope.js +28 -28
  372. package/dist/cjs/utils/size.d.ts +2 -2
  373. package/dist/cjs/utils/size.js +49 -49
  374. package/dist/esm/__tests__/clients/acuity-client.spec.d.ts +1 -1
  375. package/dist/esm/__tests__/clients/acuity-client.spec.js +41 -41
  376. package/dist/esm/__tests__/clients/cross-platform-compression.spec.d.ts +1 -1
  377. package/dist/esm/__tests__/clients/cross-platform-compression.spec.js +329 -329
  378. package/dist/esm/__tests__/clients/dynamodb-client.spec.d.ts +1 -1
  379. package/dist/esm/__tests__/clients/dynamodb-client.spec.js +192 -192
  380. package/dist/esm/__tests__/clients/sqs-bundled-client.spec.d.ts +1 -1
  381. package/dist/esm/__tests__/clients/sqs-bundled-client.spec.js +906 -906
  382. package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.d.ts +1 -1
  383. package/dist/esm/__tests__/clients/sqs-bundling-contracts.spec.js +538 -538
  384. package/dist/esm/__tests__/clients/sqs-client.spec.d.ts +1 -1
  385. package/dist/esm/__tests__/clients/sqs-client.spec.js +189 -189
  386. package/dist/esm/__tests__/clients/sqs-unbundle.spec.d.ts +1 -1
  387. package/dist/esm/__tests__/clients/sqs-unbundle.spec.js +1355 -1355
  388. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.d.ts +1 -1
  389. package/dist/esm/__tests__/db/contact-enrichments-db-service.spec.js +66 -66
  390. package/dist/esm/__tests__/db/destinations-db-service.spec.d.ts +1 -1
  391. package/dist/esm/__tests__/db/destinations-db-service.spec.js +123 -123
  392. package/dist/esm/__tests__/db/products-db-service.spec.d.ts +1 -0
  393. package/dist/esm/__tests__/db/products-db-service.spec.js +88 -0
  394. package/dist/esm/__tests__/db/products-db-service.spec.js.map +1 -0
  395. package/dist/esm/__tests__/db/shared-read-db-services.spec.d.ts +1 -1
  396. package/dist/esm/__tests__/db/shared-read-db-services.spec.js +87 -87
  397. package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.d.ts +1 -1
  398. package/dist/esm/__tests__/db/shopify-app-installs-db-service.spec.js +102 -102
  399. package/dist/esm/__tests__/db/subscriptions-db-service.spec.d.ts +1 -1
  400. package/dist/esm/__tests__/db/subscriptions-db-service.spec.js +93 -93
  401. package/dist/esm/__tests__/db/user-accounts-db-service.spec.d.ts +1 -1
  402. package/dist/esm/__tests__/db/user-accounts-db-service.spec.js +74 -74
  403. package/dist/esm/__tests__/helpers/account-users-helper.spec.d.ts +1 -1
  404. package/dist/esm/__tests__/helpers/account-users-helper.spec.js +218 -218
  405. package/dist/esm/__tests__/helpers/acuity-helper.spec.d.ts +1 -1
  406. package/dist/esm/__tests__/helpers/acuity-helper.spec.js +67 -67
  407. package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.d.ts +1 -1
  408. package/dist/esm/__tests__/helpers/api-key-auth-helper.spec.js +80 -80
  409. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.d.ts +1 -1
  410. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js +672 -672
  411. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-service.spec.d.ts +1 -1
  412. package/dist/esm/__tests__/identity-cache/identity-cache-dynamodb-service.spec.js +1138 -1138
  413. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.d.ts +1 -1
  414. package/dist/esm/__tests__/identity-cache/trait-merging-and-staleness.spec.js +586 -586
  415. package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.d.ts +1 -1
  416. package/dist/esm/__tests__/integration/sqs-bundling-roundtrip.spec.js +582 -582
  417. package/dist/esm/__tests__/libs/compress-decompress.spec.d.ts +1 -1
  418. package/dist/esm/__tests__/libs/compress-decompress.spec.js +14 -14
  419. package/dist/esm/__tests__/libs/contacts.spec.d.ts +1 -1
  420. package/dist/esm/__tests__/libs/contacts.spec.js +292 -292
  421. package/dist/esm/__tests__/libs/currency.spec.d.ts +1 -1
  422. package/dist/esm/__tests__/libs/currency.spec.js +218 -218
  423. package/dist/esm/__tests__/libs/dates.spec.d.ts +1 -1
  424. package/dist/esm/__tests__/libs/dates.spec.js +128 -128
  425. package/dist/esm/__tests__/libs/domain.spec.d.ts +1 -1
  426. package/dist/esm/__tests__/libs/domain.spec.js +105 -105
  427. package/dist/esm/__tests__/libs/numbers.spec.d.ts +1 -1
  428. package/dist/esm/__tests__/libs/numbers.spec.js +259 -259
  429. package/dist/esm/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  430. package/dist/esm/__tests__/s3-client/s3-client.spec.js +31 -31
  431. package/dist/esm/__tests__/services/acuity-api-service.spec.d.ts +1 -1
  432. package/dist/esm/__tests__/services/acuity-api-service.spec.js +69 -69
  433. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.d.ts +1 -0
  434. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.js +22 -0
  435. package/dist/esm/__tests__/services/cost/cost-calculation-types.spec.js.map +1 -0
  436. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.d.ts +1 -0
  437. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js +3318 -0
  438. package/dist/esm/__tests__/services/cost/cost-calculator-service.spec.js.map +1 -0
  439. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.d.ts +1 -0
  440. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.js +113 -0
  441. package/dist/esm/__tests__/services/cost/cost-currency-service.spec.js.map +1 -0
  442. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.d.ts +1 -0
  443. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.js +467 -0
  444. package/dist/esm/__tests__/services/cost/cost-filter-service.spec.js.map +1 -0
  445. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.d.ts +1 -0
  446. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js +205 -0
  447. package/dist/esm/__tests__/services/cost/order-cost/order-cost-resolution-service.spec.js.map +1 -0
  448. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.d.ts +1 -0
  449. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.js +33 -0
  450. package/dist/esm/__tests__/services/currency-exchange-rate-lookup-service.spec.js.map +1 -0
  451. package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.d.ts +1 -1
  452. package/dist/esm/__tests__/services/email-verification/contact-email-verification-service.spec.js +91 -91
  453. package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.d.ts +1 -1
  454. package/dist/esm/__tests__/services/email-verification/email-verification-service.spec.js +55 -55
  455. package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.d.ts +1 -1
  456. package/dist/esm/__tests__/shopify/shopify-graphql-transformer.spec.js +33 -33
  457. package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.d.ts +1 -1
  458. package/dist/esm/__tests__/unit/libs/api-router/public-api-router.spec.js +156 -156
  459. package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.d.ts +1 -1
  460. package/dist/esm/__tests__/unit/libs/api-router/route-matcher.spec.js +67 -67
  461. package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.d.ts +1 -1
  462. package/dist/esm/__tests__/utils/custom-measure-formula-utils.spec.js +137 -137
  463. package/dist/esm/clients/generic/cognito-client.d.ts +23 -23
  464. package/dist/esm/clients/generic/cognito-client.js +204 -204
  465. package/dist/esm/clients/generic/dynamodb-client.d.ts +20 -20
  466. package/dist/esm/clients/generic/dynamodb-client.js +231 -231
  467. package/dist/esm/clients/generic/eventbridge-client.d.ts +14 -14
  468. package/dist/esm/clients/generic/eventbridge-client.js +47 -47
  469. package/dist/esm/clients/generic/http-client.d.ts +14 -14
  470. package/dist/esm/clients/generic/http-client.js +53 -53
  471. package/dist/esm/clients/generic/index.d.ts +13 -13
  472. package/dist/esm/clients/generic/index.js +13 -13
  473. package/dist/esm/clients/generic/lambda-invoke-client.d.ts +10 -10
  474. package/dist/esm/clients/generic/lambda-invoke-client.js +35 -35
  475. package/dist/esm/clients/generic/location-client.d.ts +8 -8
  476. package/dist/esm/clients/generic/location-client.js +27 -27
  477. package/dist/esm/clients/generic/redis-client.d.ts +33 -33
  478. package/dist/esm/clients/generic/redis-client.js +184 -184
  479. package/dist/esm/clients/generic/s3-client.d.ts +23 -23
  480. package/dist/esm/clients/generic/s3-client.js +209 -209
  481. package/dist/esm/clients/generic/singlestore-db-client.d.ts +14 -14
  482. package/dist/esm/clients/generic/singlestore-db-client.js +40 -40
  483. package/dist/esm/clients/generic/sqs-bundled-client.d.ts +15 -15
  484. package/dist/esm/clients/generic/sqs-bundled-client.js +307 -307
  485. package/dist/esm/clients/generic/sqs-bundled-client.types.d.ts +53 -53
  486. package/dist/esm/clients/generic/sqs-bundled-client.types.js +14 -14
  487. package/dist/esm/clients/generic/sqs-client.d.ts +53 -53
  488. package/dist/esm/clients/generic/sqs-client.js +281 -281
  489. package/dist/esm/clients/generic/sqs-unbundle.d.ts +32 -32
  490. package/dist/esm/clients/generic/sqs-unbundle.js +137 -137
  491. package/dist/esm/clients/index.d.ts +3 -3
  492. package/dist/esm/clients/index.js +3 -3
  493. package/dist/esm/clients/internal-api/accounts-client.d.ts +91 -91
  494. package/dist/esm/clients/internal-api/accounts-client.js +125 -125
  495. package/dist/esm/clients/internal-api/cache-lambda-client.d.ts +26 -26
  496. package/dist/esm/clients/internal-api/cache-lambda-client.js +85 -85
  497. package/dist/esm/clients/internal-api/db-management-client.d.ts +18 -18
  498. package/dist/esm/clients/internal-api/db-management-client.js +32 -32
  499. package/dist/esm/clients/internal-api/destinations-client.d.ts +34 -34
  500. package/dist/esm/clients/internal-api/destinations-client.js +75 -75
  501. package/dist/esm/clients/internal-api/event-collector-client.d.ts +20 -20
  502. package/dist/esm/clients/internal-api/event-collector-client.js +32 -32
  503. package/dist/esm/clients/internal-api/identity-client.d.ts +31 -31
  504. package/dist/esm/clients/internal-api/identity-client.js +87 -87
  505. package/dist/esm/clients/internal-api/index.d.ts +9 -9
  506. package/dist/esm/clients/internal-api/index.js +9 -9
  507. package/dist/esm/clients/internal-api/shopify-app-install-client.d.ts +37 -37
  508. package/dist/esm/clients/internal-api/shopify-app-install-client.js +77 -77
  509. package/dist/esm/clients/internal-api/subscriptions-client.d.ts +26 -26
  510. package/dist/esm/clients/internal-api/subscriptions-client.js +73 -73
  511. package/dist/esm/clients/internal-api/users-auth-client.d.ts +35 -35
  512. package/dist/esm/clients/internal-api/users-auth-client.js +106 -106
  513. package/dist/esm/clients/third-party/acuity-client.d.ts +10 -10
  514. package/dist/esm/clients/third-party/acuity-client.js +36 -36
  515. package/dist/esm/clients/third-party/emailable-client.d.ts +7 -7
  516. package/dist/esm/clients/third-party/emailable-client.js +21 -21
  517. package/dist/esm/clients/third-party/exchange-rate-api-client.d.ts +17 -17
  518. package/dist/esm/clients/third-party/exchange-rate-api-client.js +15 -15
  519. package/dist/esm/clients/third-party/index.d.ts +5 -5
  520. package/dist/esm/clients/third-party/index.js +5 -5
  521. package/dist/esm/clients/third-party/loops-client.d.ts +10 -10
  522. package/dist/esm/clients/third-party/loops-client.js +26 -26
  523. package/dist/esm/clients/third-party/shopify/graphql-order-queries.d.ts +25 -25
  524. package/dist/esm/clients/third-party/shopify/graphql-order-queries.js +1 -1
  525. package/dist/esm/clients/third-party/shopify/graphql-product-queries.d.ts +2 -2
  526. package/dist/esm/clients/third-party/shopify/graphql-product-queries.js +2 -2
  527. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.d.ts +10 -10
  528. package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js +157 -157
  529. package/dist/esm/clients/third-party/shopify-client.d.ts +29 -29
  530. package/dist/esm/clients/third-party/shopify-client.js +142 -142
  531. package/dist/esm/constants/index.d.ts +1 -1
  532. package/dist/esm/constants/index.js +1 -1
  533. package/dist/esm/constants/sqs.d.ts +20 -20
  534. package/dist/esm/constants/sqs.js +22 -22
  535. package/dist/esm/helpers/account-users-helper.d.ts +2 -2
  536. package/dist/esm/helpers/account-users-helper.js +18 -18
  537. package/dist/esm/helpers/acuity-helper.d.ts +4 -4
  538. package/dist/esm/helpers/acuity-helper.js +51 -51
  539. package/dist/esm/helpers/api-key-auth-helper.d.ts +9 -9
  540. package/dist/esm/helpers/api-key-auth-helper.js +35 -35
  541. package/dist/esm/helpers/api-key-authorizer-helper.d.ts +36 -36
  542. package/dist/esm/helpers/api-key-authorizer-helper.js +83 -83
  543. package/dist/esm/helpers/identity-cache-helper.d.ts +21 -21
  544. package/dist/esm/helpers/identity-cache-helper.js +152 -152
  545. package/dist/esm/helpers/index.d.ts +10 -10
  546. package/dist/esm/helpers/index.js +10 -10
  547. package/dist/esm/helpers/input-validation-helper.d.ts +3 -3
  548. package/dist/esm/helpers/input-validation-helper.js +18 -18
  549. package/dist/esm/helpers/logging-helper.d.ts +16 -16
  550. package/dist/esm/helpers/logging-helper.js +56 -56
  551. package/dist/esm/helpers/response-helper.d.ts +18 -18
  552. package/dist/esm/helpers/response-helper.js +37 -37
  553. package/dist/esm/helpers/shopify-helper.d.ts +9 -9
  554. package/dist/esm/helpers/shopify-helper.js +21 -21
  555. package/dist/esm/helpers/sqs-utils.d.ts +6 -6
  556. package/dist/esm/helpers/sqs-utils.js +9 -9
  557. package/dist/esm/index.d.ts +7 -7
  558. package/dist/esm/index.js +7 -7
  559. package/dist/esm/libs/api-router/index.d.ts +2 -2
  560. package/dist/esm/libs/api-router/index.js +2 -2
  561. package/dist/esm/libs/api-router/public-api-router.d.ts +3 -3
  562. package/dist/esm/libs/api-router/public-api-router.js +32 -32
  563. package/dist/esm/libs/api-router/route-matcher.d.ts +21 -21
  564. package/dist/esm/libs/api-router/route-matcher.js +30 -30
  565. package/dist/esm/libs/click-id-parser.d.ts +23 -23
  566. package/dist/esm/libs/click-id-parser.js +45 -45
  567. package/dist/esm/libs/compression.d.ts +2 -2
  568. package/dist/esm/libs/compression.js +25 -25
  569. package/dist/esm/libs/contacts.d.ts +7 -7
  570. package/dist/esm/libs/contacts.js +143 -143
  571. package/dist/esm/libs/cookie.d.ts +17 -17
  572. package/dist/esm/libs/cookie.js +70 -70
  573. package/dist/esm/libs/crypto.d.ts +4 -4
  574. package/dist/esm/libs/crypto.js +15 -15
  575. package/dist/esm/libs/csv.d.ts +2 -2
  576. package/dist/esm/libs/csv.js +30 -30
  577. package/dist/esm/libs/currency.d.ts +1 -1
  578. package/dist/esm/libs/currency.js +22 -22
  579. package/dist/esm/libs/dates.d.ts +12 -12
  580. package/dist/esm/libs/dates.js +83 -83
  581. package/dist/esm/libs/domain.d.ts +2 -2
  582. package/dist/esm/libs/domain.js +33 -33
  583. package/dist/esm/libs/emails.d.ts +8 -8
  584. package/dist/esm/libs/emails.js +146 -146
  585. package/dist/esm/libs/http-error.d.ts +21 -21
  586. package/dist/esm/libs/http-error.js +59 -59
  587. package/dist/esm/libs/http-status-codes.d.ts +58 -58
  588. package/dist/esm/libs/http-status-codes.js +59 -59
  589. package/dist/esm/libs/index.d.ts +19 -19
  590. package/dist/esm/libs/index.js +19 -19
  591. package/dist/esm/libs/numbers.d.ts +1 -1
  592. package/dist/esm/libs/numbers.js +11 -11
  593. package/dist/esm/libs/referrer-parser/index.d.ts +2 -2
  594. package/dist/esm/libs/referrer-parser/index.js +2 -2
  595. package/dist/esm/libs/referrer-parser/referrer-data.d.ts +9 -9
  596. package/dist/esm/libs/referrer-parser/referrer-data.js +3304 -3304
  597. package/dist/esm/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  598. package/dist/esm/libs/referrer-parser/referrer-parser-util.js +124 -124
  599. package/dist/esm/libs/strings.d.ts +3 -3
  600. package/dist/esm/libs/strings.js +40 -40
  601. package/dist/esm/libs/traits.d.ts +6 -6
  602. package/dist/esm/libs/traits.js +54 -54
  603. package/dist/esm/libs/url.d.ts +1 -1
  604. package/dist/esm/libs/url.js +9 -9
  605. package/dist/esm/services/acuity-api-service.d.ts +9 -9
  606. package/dist/esm/services/acuity-api-service.js +69 -69
  607. package/dist/esm/services/cache/generic-cached-object.d.ts +5 -5
  608. package/dist/esm/services/cache/generic-cached-object.js +1 -1
  609. package/dist/esm/services/cache/index.d.ts +1 -1
  610. package/dist/esm/services/cache/index.js +1 -1
  611. package/dist/esm/services/cache/product-cache-service.d.ts +21 -21
  612. package/dist/esm/services/cache/product-cache-service.js +68 -68
  613. package/dist/esm/services/cost/cost-calculation-types.d.ts +69 -0
  614. package/dist/esm/services/cost/cost-calculation-types.js +16 -0
  615. package/dist/esm/services/cost/cost-calculation-types.js.map +1 -0
  616. package/dist/esm/services/cost/cost-calculator-service.d.ts +24 -0
  617. package/dist/esm/services/cost/cost-calculator-service.js +451 -0
  618. package/dist/esm/services/cost/cost-calculator-service.js.map +1 -0
  619. package/dist/esm/services/cost/cost-currency-service.d.ts +6 -0
  620. package/dist/esm/services/cost/cost-currency-service.js +85 -0
  621. package/dist/esm/services/cost/cost-currency-service.js.map +1 -0
  622. package/dist/esm/services/cost/cost-filter-service.d.ts +10 -0
  623. package/dist/esm/services/cost/cost-filter-service.js +119 -0
  624. package/dist/esm/services/cost/cost-filter-service.js.map +1 -0
  625. package/dist/esm/services/cost/index.d.ts +5 -0
  626. package/dist/esm/services/cost/index.js +6 -0
  627. package/dist/esm/services/cost/index.js.map +1 -0
  628. package/dist/esm/services/cost/order-cost/index.d.ts +2 -0
  629. package/dist/esm/services/cost/order-cost/index.js +3 -0
  630. package/dist/esm/services/cost/order-cost/index.js.map +1 -0
  631. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.d.ts +23 -0
  632. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js +356 -0
  633. package/dist/esm/services/cost/order-cost/order-cost-resolution-service.js.map +1 -0
  634. package/dist/esm/services/cost/order-cost/order-cost-resolution-types.d.ts +37 -0
  635. package/dist/esm/services/cost/order-cost/order-cost-resolution-types.js +2 -0
  636. package/dist/esm/services/cost/order-cost/order-cost-resolution-types.js.map +1 -0
  637. package/dist/esm/services/currency-exchange-rate-lookup-service.d.ts +12 -11
  638. package/dist/esm/services/currency-exchange-rate-lookup-service.js +90 -62
  639. package/dist/esm/services/currency-exchange-rate-lookup-service.js.map +1 -1
  640. package/dist/esm/services/db/accounts-db-service.d.ts +9 -9
  641. package/dist/esm/services/db/accounts-db-service.js +29 -29
  642. package/dist/esm/services/db/api-keys-db-service.d.ts +10 -10
  643. package/dist/esm/services/db/api-keys-db-service.js +32 -32
  644. package/dist/esm/services/db/contact-enrichments-db-service.d.ts +15 -15
  645. package/dist/esm/services/db/contact-enrichments-db-service.js +90 -90
  646. package/dist/esm/services/db/currency-exchange-rates-db-service.d.ts +21 -21
  647. package/dist/esm/services/db/currency-exchange-rates-db-service.js +35 -35
  648. package/dist/esm/services/db/custom-measures-db-service.d.ts +14 -14
  649. package/dist/esm/services/db/custom-measures-db-service.js +44 -44
  650. package/dist/esm/services/db/destinations-db-service.d.ts +13 -13
  651. package/dist/esm/services/db/destinations-db-service.js +70 -70
  652. package/dist/esm/services/db/identity-cache-db-service.d.ts +28 -28
  653. package/dist/esm/services/db/identity-cache-db-service.js +313 -313
  654. package/dist/esm/services/db/identity-cache-dynamodb-service.d.ts +38 -34
  655. package/dist/esm/services/db/identity-cache-dynamodb-service.js +432 -426
  656. package/dist/esm/services/db/identity-cache-dynamodb-service.js.map +1 -1
  657. package/dist/esm/services/db/index.d.ts +19 -17
  658. package/dist/esm/services/db/index.js +19 -17
  659. package/dist/esm/services/db/index.js.map +1 -1
  660. package/dist/esm/services/db/log-events-db-service.d.ts +11 -11
  661. package/dist/esm/services/db/log-events-db-service.js +177 -177
  662. package/dist/esm/services/db/pixels-db-service.d.ts +8 -8
  663. package/dist/esm/services/db/pixels-db-service.js +31 -31
  664. package/dist/esm/services/db/products-db-service-types.d.ts +10 -0
  665. package/dist/esm/services/db/products-db-service-types.js +2 -0
  666. package/dist/esm/services/db/products-db-service-types.js.map +1 -0
  667. package/dist/esm/services/db/products-db-service.d.ts +19 -0
  668. package/dist/esm/services/db/products-db-service.js +278 -0
  669. package/dist/esm/services/db/products-db-service.js.map +1 -0
  670. package/dist/esm/services/db/purchasable-contacts-db-service.d.ts +9 -9
  671. package/dist/esm/services/db/purchasable-contacts-db-service.js +39 -39
  672. package/dist/esm/services/db/purchased-contacts/index.d.ts +2 -2
  673. package/dist/esm/services/db/purchased-contacts/index.js +2 -2
  674. package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.d.ts +18 -18
  675. package/dist/esm/services/db/purchased-contacts/purchased-contacts-db-service.js +148 -148
  676. package/dist/esm/services/db/purchased-contacts/types.d.ts +11 -11
  677. package/dist/esm/services/db/purchased-contacts/types.js +1 -1
  678. package/dist/esm/services/db/shopify-app-installs-db-service.d.ts +10 -10
  679. package/dist/esm/services/db/shopify-app-installs-db-service.js +48 -48
  680. package/dist/esm/services/db/shopify-products-cache-db-service.d.ts +16 -16
  681. package/dist/esm/services/db/shopify-products-cache-db-service.js +66 -66
  682. package/dist/esm/services/db/subscriptions-db-service.d.ts +11 -11
  683. package/dist/esm/services/db/subscriptions-db-service.js +34 -34
  684. package/dist/esm/services/db/tracking-events-db-service.d.ts +21 -21
  685. package/dist/esm/services/db/tracking-events-db-service.js +184 -184
  686. package/dist/esm/services/db/user-accounts-db-service.d.ts +7 -7
  687. package/dist/esm/services/db/user-accounts-db-service.js +13 -13
  688. package/dist/esm/services/email-verification/contact-email-verification-service.d.ts +7 -7
  689. package/dist/esm/services/email-verification/contact-email-verification-service.js +97 -97
  690. package/dist/esm/services/email-verification/email-verification-service.d.ts +19 -19
  691. package/dist/esm/services/email-verification/email-verification-service.js +127 -127
  692. package/dist/esm/services/email-verification/index.d.ts +2 -2
  693. package/dist/esm/services/email-verification/index.js +2 -2
  694. package/dist/esm/services/eventbridge-integration-service.d.ts +9 -9
  695. package/dist/esm/services/eventbridge-integration-service.js +24 -24
  696. package/dist/esm/services/events/index.d.ts +3 -3
  697. package/dist/esm/services/events/index.js +3 -3
  698. package/dist/esm/services/events/log-event-service.d.ts +19 -19
  699. package/dist/esm/services/events/log-event-service.js +73 -73
  700. package/dist/esm/services/events/metric-event-service.d.ts +9 -9
  701. package/dist/esm/services/events/metric-event-service.js +45 -45
  702. package/dist/esm/services/events/tracking-event-sqs-service.d.ts +8 -8
  703. package/dist/esm/services/events/tracking-event-sqs-service.js +30 -30
  704. package/dist/esm/services/generic-cache-service.d.ts +7 -7
  705. package/dist/esm/services/generic-cache-service.js +29 -29
  706. package/dist/esm/services/index.d.ts +11 -10
  707. package/dist/esm/services/index.js +11 -10
  708. package/dist/esm/services/index.js.map +1 -1
  709. package/dist/esm/services/ipdata-lookup-service.d.ts +20 -20
  710. package/dist/esm/services/ipdata-lookup-service.js +108 -108
  711. package/dist/esm/services/shopify/index.d.ts +2 -2
  712. package/dist/esm/services/shopify/index.js +2 -2
  713. package/dist/esm/services/shopify/products/index.d.ts +1 -1
  714. package/dist/esm/services/shopify/products/index.js +1 -1
  715. package/dist/esm/services/shopify/products/shopify-products-serviceV2.d.ts +17 -17
  716. package/dist/esm/services/shopify/products/shopify-products-serviceV2.js +108 -108
  717. package/dist/esm/services/shopify/shopify-graphql-transformer.d.ts +8 -8
  718. package/dist/esm/services/shopify/shopify-graphql-transformer.js +138 -138
  719. package/dist/esm/types/acuity-types.d.ts +74 -74
  720. package/dist/esm/types/acuity-types.js +1 -1
  721. package/dist/esm/types/api-response.d.ts +6 -6
  722. package/dist/esm/types/api-response.js +1 -1
  723. package/dist/esm/types/index.d.ts +4 -4
  724. package/dist/esm/types/index.js +4 -4
  725. package/dist/esm/types/internal-events/event-detail-types.d.ts +20 -20
  726. package/dist/esm/types/internal-events/event-detail-types.js +24 -24
  727. package/dist/esm/types/internal-events/index.d.ts +1 -1
  728. package/dist/esm/types/internal-events/index.js +1 -1
  729. package/dist/esm/types/shopify-graphql-types/admin.generated.d.ts +123 -123
  730. package/dist/esm/types/shopify-graphql-types/admin.generated.js +1 -1
  731. package/dist/esm/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  732. package/dist/esm/types/shopify-graphql-types/admin.types.js +5299 -5299
  733. package/dist/esm/types/shopify-graphql-types/index.d.ts +2 -2
  734. package/dist/esm/types/shopify-graphql-types/index.js +2 -2
  735. package/dist/esm/types/shopify-rest-types.d.ts +767 -767
  736. package/dist/esm/types/shopify-rest-types.js +1 -1
  737. package/dist/esm/utils/compression.d.ts +36 -36
  738. package/dist/esm/utils/compression.js +187 -187
  739. package/dist/esm/utils/custom-measure-formula-utils.d.ts +6 -6
  740. package/dist/esm/utils/custom-measure-formula-utils.js +201 -201
  741. package/dist/esm/utils/index.d.ts +4 -4
  742. package/dist/esm/utils/index.js +4 -4
  743. package/dist/esm/utils/retry-envelope.d.ts +12 -12
  744. package/dist/esm/utils/retry-envelope.js +22 -22
  745. package/dist/esm/utils/size.d.ts +2 -2
  746. package/dist/esm/utils/size.js +44 -44
  747. package/package.json +134 -134
@@ -1,330 +1,330 @@
1
- import * as zlib from 'zlib';
2
- import { promisify } from 'util';
3
- import { unbundleRecords } from '../../clients/generic/sqs-unbundle';
4
- import { decompressFromBase64 } from '../../utils/compression';
5
- import { CompressionAlgorithm } from '../../clients/generic/sqs-bundled-client.types';
6
- const gzip = promisify(zlib.gzip);
7
- const gunzip = promisify(zlib.gunzip);
8
- async function cfWorkerCompress(data) {
9
- const stream = new CompressionStream('gzip');
10
- const writer = stream.writable.getWriter();
11
- await writer.write(data);
12
- await writer.close();
13
- const chunks = [];
14
- const reader = stream.readable.getReader();
15
- for (;;) {
16
- const { done, value } = await reader.read();
17
- if (done)
18
- break;
19
- chunks.push(value);
20
- }
21
- const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
22
- const result = new Uint8Array(totalLength);
23
- let offset = 0;
24
- for (const chunk of chunks) {
25
- result.set(chunk, offset);
26
- offset += chunk.length;
27
- }
28
- return result;
29
- }
30
- function cfWorkerToBase64(bytes) {
31
- let binary = '';
32
- for (let i = 0; i < bytes.length; i++) {
33
- binary += String.fromCharCode(bytes[i]);
34
- }
35
- return btoa(binary);
36
- }
37
- async function createCfWorkerBundledMessage(messageType, items) {
38
- const json = JSON.stringify(items);
39
- const encoder = new TextEncoder();
40
- const uncompressed = encoder.encode(json);
41
- const compressed = await cfWorkerCompress(uncompressed);
42
- const base64 = cfWorkerToBase64(compressed);
43
- const envelope = {
44
- v: 1,
45
- c: 'gzip',
46
- n: items.length,
47
- p: base64,
48
- s: json.length,
49
- };
50
- return {
51
- messageId: crypto.randomUUID(),
52
- messageType,
53
- messageTime: new Date().toISOString(),
54
- messageBody: envelope,
55
- };
56
- }
57
- function createSQSRecord(body, messageId) {
58
- return {
59
- messageId: messageId ?? crypto.randomUUID(),
60
- receiptHandle: 'test-receipt-handle',
61
- body,
62
- attributes: {
63
- ApproximateReceiveCount: '1',
64
- SentTimestamp: Date.now().toString(),
65
- SenderId: 'test-sender',
66
- ApproximateFirstReceiveTimestamp: Date.now().toString(),
67
- },
68
- messageAttributes: {},
69
- md5OfBody: 'test-md5',
70
- eventSource: 'aws:sqs',
71
- eventSourceARN: 'arn:aws:sqs:us-east-1:123456789:test-queue',
72
- awsRegion: 'us-east-1',
73
- };
74
- }
75
- const GOLDEN_ITEMS = [
76
- { pixelId: 'px_golden_001', event: 'page_view', data: { url: 'https://example.com/test' } },
77
- { pixelId: 'px_golden_002', event: 'purchase', data: { amount: 99.99, currency: 'USD' } },
78
- ];
79
- const GOLDEN_GZIP_BASE64 = 'H4sIAAAAAAAACnXMvQrDIBhG4Xt5Z4lpN527dC6dShHRjyTgH0ZTS/DeS7YsXc+B57UjLY3c3UIiNTVFZymocbyAgTYK5eh6IrUt9AGD1UVD7qjZQWIuJa2Sc2raJ0eDiZ4XWgt6Z//k61mu2cx6pROsfazHE2IQgsHUnCmYLySejxt6f/8AfIEZO7MAAAA=';
80
- describe('Cross-Platform Compression Compatibility', () => {
81
- describe('CompressionStream (CF Worker) → zlib.gunzip (Lambda)', () => {
82
- it('basic payload round-trips correctly', async () => {
83
- const originalData = { pixelId: 'px_test', event: 'page_view' };
84
- const json = JSON.stringify([originalData]);
85
- const compressed = await cfWorkerCompress(new TextEncoder().encode(json));
86
- expect(compressed[0]).toBe(0x1f);
87
- expect(compressed[1]).toBe(0x8b);
88
- const decompressed = await gunzip(Buffer.from(compressed));
89
- const parsed = JSON.parse(decompressed.toString('utf8'));
90
- expect(parsed).toEqual([originalData]);
91
- });
92
- it('CompressionStream output is valid GZIP decompressible by at-service-common', async () => {
93
- const items = [{ pixelId: 'px_001' }, { pixelId: 'px_002' }];
94
- const json = JSON.stringify(items);
95
- const compressed = await cfWorkerCompress(new TextEncoder().encode(json));
96
- const base64 = cfWorkerToBase64(compressed);
97
- const result = await decompressFromBase64(base64, CompressionAlgorithm.GZIP);
98
- expect(result).toEqual(items);
99
- });
100
- it('unbundleRecords handles CF Worker compressed messages', async () => {
101
- const items = [
102
- { pixelId: 'px_cfworker_001', event: 'PageView' },
103
- { pixelId: 'px_cfworker_002', event: 'AddToCart' },
104
- ];
105
- const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
106
- const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
107
- const result = await unbundleRecords([sqsRecord]);
108
- expect(result.items).toHaveLength(2);
109
- expect(result.failedMessageIds).toHaveLength(0);
110
- expect(result.items).toEqual(items);
111
- });
112
- });
113
- describe('Node zlib.gzip → zlib.gunzip (baseline)', () => {
114
- it('Node gzip/gunzip round-trips correctly', async () => {
115
- const original = { test: 'data', number: 123 };
116
- const json = JSON.stringify(original);
117
- const compressed = await gzip(Buffer.from(json, 'utf8'));
118
- const decompressed = await gunzip(compressed);
119
- expect(JSON.parse(decompressed.toString('utf8'))).toEqual(original);
120
- });
121
- it('Node gzip output is decompressible by at-service-common', async () => {
122
- const items = [{ id: 1 }, { id: 2 }];
123
- const json = JSON.stringify(items);
124
- const compressed = await gzip(Buffer.from(json, 'utf8'));
125
- const base64 = compressed.toString('base64');
126
- const result = await decompressFromBase64(base64, CompressionAlgorithm.GZIP);
127
- expect(result).toEqual(items);
128
- });
129
- });
130
- describe('Golden Payload Compatibility', () => {
131
- it('golden payload from at-cf-tracking-api is decompressible', async () => {
132
- const result = await decompressFromBase64(GOLDEN_GZIP_BASE64, CompressionAlgorithm.GZIP);
133
- expect(result).toEqual(GOLDEN_ITEMS);
134
- });
135
- it('golden payload works through full unbundleRecords path', async () => {
136
- const envelope = {
137
- v: 1,
138
- c: 'gzip',
139
- n: GOLDEN_ITEMS.length,
140
- p: GOLDEN_GZIP_BASE64,
141
- s: 179,
142
- };
143
- const wrapped = {
144
- messageId: 'golden-test-id',
145
- messageType: 'TRACKING_EVENT_COLLECT',
146
- messageTime: new Date().toISOString(),
147
- messageBody: envelope,
148
- };
149
- const sqsRecord = createSQSRecord(JSON.stringify(wrapped));
150
- const result = await unbundleRecords([sqsRecord]);
151
- expect(result.items).toEqual(GOLDEN_ITEMS);
152
- expect(result.stats.bundledSqsRecords).toBe(1);
153
- });
154
- it('CompressionStream output matches zlib output content', async () => {
155
- const json = JSON.stringify(GOLDEN_ITEMS);
156
- const cfCompressed = await cfWorkerCompress(new TextEncoder().encode(json));
157
- const nodeCompressed = await gzip(Buffer.from(json, 'utf8'));
158
- const cfDecompressed = await gunzip(Buffer.from(cfCompressed));
159
- const nodeDecompressed = await gunzip(nodeCompressed);
160
- expect(cfDecompressed.toString('utf8')).toBe(json);
161
- expect(nodeDecompressed.toString('utf8')).toBe(json);
162
- expect(cfDecompressed.toString('utf8')).toBe(nodeDecompressed.toString('utf8'));
163
- });
164
- });
165
- describe('Unicode and Special Characters', () => {
166
- it('emoji and CJK characters survive CF Worker compression round-trip', async () => {
167
- const unicodeItems = [
168
- { pixelId: 'px_emoji', event: '🎉_celebration', data: { message: 'Success! 🚀✨' } },
169
- { pixelId: 'px_cjk', event: 'page_view', data: { title: '中文页面标题', description: '日本語の説明' } },
170
- { pixelId: 'px_rtl', event: 'page_view', data: { title: 'مرحبا بالعالم', content: 'שלום עולם' } },
171
- ];
172
- const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', unicodeItems);
173
- const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
174
- const result = await unbundleRecords([sqsRecord]);
175
- expect(result.items).toHaveLength(3);
176
- expect(result.items).toEqual(unicodeItems);
177
- const item0 = result.items[0];
178
- const item1 = result.items[1];
179
- const item2 = result.items[2];
180
- expect(item0.event).toBe('🎉_celebration');
181
- expect(item0.data.message).toBe('Success! 🚀✨');
182
- expect(item1.data.title).toBe('中文页面标题');
183
- expect(item2.data.title).toBe('مرحبا بالعالم');
184
- });
185
- it('special characters in JSON survive round-trip', async () => {
186
- const specialItems = [
187
- { pixelId: 'px_special', data: { name: 'O\'Brien & Co.', note: 'Line1\nLine2\tTabbed' } },
188
- { pixelId: 'px_quotes', data: { text: 'He said "hello"', escaped: '\\backslash' } },
189
- ];
190
- const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', specialItems);
191
- const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
192
- const result = await unbundleRecords([sqsRecord]);
193
- expect(result.items).toEqual(specialItems);
194
- });
195
- });
196
- describe('Large Payload Handling', () => {
197
- it('100 items compressed by CF Worker decompresses correctly', async () => {
198
- const items = Array.from({ length: 100 }, (_, i) => ({
199
- pixelId: `px_${i.toString().padStart(4, '0')}`,
200
- event: i % 2 === 0 ? 'page_view' : 'purchase',
201
- timestamp: new Date(Date.now() - i * 1000).toISOString(),
202
- }));
203
- const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
204
- const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
205
- const result = await unbundleRecords([sqsRecord]);
206
- expect(result.items).toHaveLength(100);
207
- expect(result.items).toEqual(items);
208
- });
209
- it('deeply nested objects survive compression', async () => {
210
- const nestedItems = [
211
- {
212
- pixelId: 'px_nested',
213
- data: {
214
- level1: {
215
- level2: {
216
- level3: {
217
- level4: {
218
- value: 'deep value',
219
- array: [1, 2, 3, { nested: true }],
220
- },
221
- },
222
- },
223
- },
224
- },
225
- },
226
- ];
227
- const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', nestedItems);
228
- const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
229
- const result = await unbundleRecords([sqsRecord]);
230
- expect(result.items).toEqual(nestedItems);
231
- const item = result.items[0];
232
- expect(item.data.level1.level2.level3.level4.value).toBe('deep value');
233
- });
234
- });
235
- describe('Edge Cases', () => {
236
- it('empty array compresses/decompresses correctly', async () => {
237
- const items = [];
238
- const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
239
- const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
240
- const result = await unbundleRecords([sqsRecord]);
241
- expect(result.items).toHaveLength(0);
242
- expect(result.failedMessageIds).toHaveLength(0);
243
- });
244
- it('single item compresses/decompresses correctly', async () => {
245
- const items = [{ pixelId: 'px_single' }];
246
- const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
247
- const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
248
- const result = await unbundleRecords([sqsRecord]);
249
- expect(result.items).toEqual(items);
250
- });
251
- it('null and undefined values in objects preserved', async () => {
252
- const items = [
253
- { pixelId: 'px_nulls', value: null, nested: { alsoNull: null } },
254
- { pixelId: 'px_zero', count: 0, price: 0.0 },
255
- { pixelId: 'px_empty', name: '', items: [] },
256
- { pixelId: 'px_bool', enabled: false, disabled: true },
257
- ];
258
- const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
259
- const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
260
- const result = await unbundleRecords([sqsRecord]);
261
- expect(result.items).toEqual(items);
262
- const item0 = result.items[0];
263
- const item1 = result.items[1];
264
- const item2 = result.items[2];
265
- const item3 = result.items[3];
266
- expect(item0.value).toBeNull();
267
- expect(item0?.nested?.alsoNull).toBeNull();
268
- expect(item1.count).toBe(0);
269
- expect(item1.price).toBe(0.0);
270
- expect(item2.name).toBe('');
271
- expect(item2.items).toEqual([]);
272
- expect(item3.enabled).toBe(false);
273
- expect(item3.disabled).toBe(true);
274
- });
275
- });
276
- describe('GZIP Header Validation', () => {
277
- it('CF Worker compression produces valid GZIP header', async () => {
278
- const data = new TextEncoder().encode('test data');
279
- const compressed = await cfWorkerCompress(data);
280
- expect(compressed[0]).toBe(0x1f);
281
- expect(compressed[1]).toBe(0x8b);
282
- expect(compressed[2]).toBe(8);
283
- });
284
- it('Node zlib compression produces valid GZIP header', async () => {
285
- const compressed = await gzip(Buffer.from('test data', 'utf8'));
286
- expect(compressed[0]).toBe(0x1f);
287
- expect(compressed[1]).toBe(0x8b);
288
- expect(compressed[2]).toBe(8);
289
- });
290
- });
291
- describe('Mixed Batch Processing', () => {
292
- it('handles mix of CF Worker compressed and Node compressed records', async () => {
293
- const cfItems = [{ pixelId: 'px_cf_001' }, { pixelId: 'px_cf_002' }];
294
- const cfMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', cfItems);
295
- const nodeItems = [{ pixelId: 'px_node_001' }];
296
- const nodeJson = JSON.stringify(nodeItems);
297
- const nodeCompressed = await gzip(Buffer.from(nodeJson, 'utf8'));
298
- const nodeEnvelope = {
299
- v: 1,
300
- c: 'gzip',
301
- n: 1,
302
- p: nodeCompressed.toString('base64'),
303
- s: nodeJson.length,
304
- };
305
- const nodeMessage = {
306
- messageId: crypto.randomUUID(),
307
- messageType: 'TRACKING_EVENT_COLLECT',
308
- messageTime: new Date().toISOString(),
309
- messageBody: nodeEnvelope,
310
- };
311
- const legacyItem = { pixelId: 'px_legacy' };
312
- const records = [
313
- createSQSRecord(JSON.stringify(cfMessage), 'msg-cf'),
314
- createSQSRecord(JSON.stringify(nodeMessage), 'msg-node'),
315
- createSQSRecord(JSON.stringify(legacyItem), 'msg-legacy'),
316
- ];
317
- const result = await unbundleRecords(records);
318
- expect(result.items).toHaveLength(4);
319
- expect(result.failedMessageIds).toHaveLength(0);
320
- expect(result.stats.bundledSqsRecords).toBe(2);
321
- expect(result.stats.legacySqsRecords).toBe(1);
322
- const pixelIds = result.items.map((item) => item.pixelId);
323
- expect(pixelIds).toContain('px_cf_001');
324
- expect(pixelIds).toContain('px_cf_002');
325
- expect(pixelIds).toContain('px_node_001');
326
- expect(pixelIds).toContain('px_legacy');
327
- });
328
- });
329
- });
1
+ import * as zlib from 'zlib';
2
+ import { promisify } from 'util';
3
+ import { unbundleRecords } from '../../clients/generic/sqs-unbundle';
4
+ import { decompressFromBase64 } from '../../utils/compression';
5
+ import { CompressionAlgorithm } from '../../clients/generic/sqs-bundled-client.types';
6
+ const gzip = promisify(zlib.gzip);
7
+ const gunzip = promisify(zlib.gunzip);
8
+ async function cfWorkerCompress(data) {
9
+ const stream = new CompressionStream('gzip');
10
+ const writer = stream.writable.getWriter();
11
+ await writer.write(data);
12
+ await writer.close();
13
+ const chunks = [];
14
+ const reader = stream.readable.getReader();
15
+ for (;;) {
16
+ const { done, value } = await reader.read();
17
+ if (done)
18
+ break;
19
+ chunks.push(value);
20
+ }
21
+ const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
22
+ const result = new Uint8Array(totalLength);
23
+ let offset = 0;
24
+ for (const chunk of chunks) {
25
+ result.set(chunk, offset);
26
+ offset += chunk.length;
27
+ }
28
+ return result;
29
+ }
30
+ function cfWorkerToBase64(bytes) {
31
+ let binary = '';
32
+ for (let i = 0; i < bytes.length; i++) {
33
+ binary += String.fromCharCode(bytes[i]);
34
+ }
35
+ return btoa(binary);
36
+ }
37
+ async function createCfWorkerBundledMessage(messageType, items) {
38
+ const json = JSON.stringify(items);
39
+ const encoder = new TextEncoder();
40
+ const uncompressed = encoder.encode(json);
41
+ const compressed = await cfWorkerCompress(uncompressed);
42
+ const base64 = cfWorkerToBase64(compressed);
43
+ const envelope = {
44
+ v: 1,
45
+ c: 'gzip',
46
+ n: items.length,
47
+ p: base64,
48
+ s: json.length,
49
+ };
50
+ return {
51
+ messageId: crypto.randomUUID(),
52
+ messageType,
53
+ messageTime: new Date().toISOString(),
54
+ messageBody: envelope,
55
+ };
56
+ }
57
+ function createSQSRecord(body, messageId) {
58
+ return {
59
+ messageId: messageId ?? crypto.randomUUID(),
60
+ receiptHandle: 'test-receipt-handle',
61
+ body,
62
+ attributes: {
63
+ ApproximateReceiveCount: '1',
64
+ SentTimestamp: Date.now().toString(),
65
+ SenderId: 'test-sender',
66
+ ApproximateFirstReceiveTimestamp: Date.now().toString(),
67
+ },
68
+ messageAttributes: {},
69
+ md5OfBody: 'test-md5',
70
+ eventSource: 'aws:sqs',
71
+ eventSourceARN: 'arn:aws:sqs:us-east-1:123456789:test-queue',
72
+ awsRegion: 'us-east-1',
73
+ };
74
+ }
75
+ const GOLDEN_ITEMS = [
76
+ { pixelId: 'px_golden_001', event: 'page_view', data: { url: 'https://example.com/test' } },
77
+ { pixelId: 'px_golden_002', event: 'purchase', data: { amount: 99.99, currency: 'USD' } },
78
+ ];
79
+ const GOLDEN_GZIP_BASE64 = 'H4sIAAAAAAAACnXMvQrDIBhG4Xt5Z4lpN527dC6dShHRjyTgH0ZTS/DeS7YsXc+B57UjLY3c3UIiNTVFZymocbyAgTYK5eh6IrUt9AGD1UVD7qjZQWIuJa2Sc2raJ0eDiZ4XWgt6Z//k61mu2cx6pROsfazHE2IQgsHUnCmYLySejxt6f/8AfIEZO7MAAAA=';
80
+ describe('Cross-Platform Compression Compatibility', () => {
81
+ describe('CompressionStream (CF Worker) → zlib.gunzip (Lambda)', () => {
82
+ it('basic payload round-trips correctly', async () => {
83
+ const originalData = { pixelId: 'px_test', event: 'page_view' };
84
+ const json = JSON.stringify([originalData]);
85
+ const compressed = await cfWorkerCompress(new TextEncoder().encode(json));
86
+ expect(compressed[0]).toBe(0x1f);
87
+ expect(compressed[1]).toBe(0x8b);
88
+ const decompressed = await gunzip(Buffer.from(compressed));
89
+ const parsed = JSON.parse(decompressed.toString('utf8'));
90
+ expect(parsed).toEqual([originalData]);
91
+ });
92
+ it('CompressionStream output is valid GZIP decompressible by at-service-common', async () => {
93
+ const items = [{ pixelId: 'px_001' }, { pixelId: 'px_002' }];
94
+ const json = JSON.stringify(items);
95
+ const compressed = await cfWorkerCompress(new TextEncoder().encode(json));
96
+ const base64 = cfWorkerToBase64(compressed);
97
+ const result = await decompressFromBase64(base64, CompressionAlgorithm.GZIP);
98
+ expect(result).toEqual(items);
99
+ });
100
+ it('unbundleRecords handles CF Worker compressed messages', async () => {
101
+ const items = [
102
+ { pixelId: 'px_cfworker_001', event: 'PageView' },
103
+ { pixelId: 'px_cfworker_002', event: 'AddToCart' },
104
+ ];
105
+ const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
106
+ const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
107
+ const result = await unbundleRecords([sqsRecord]);
108
+ expect(result.items).toHaveLength(2);
109
+ expect(result.failedMessageIds).toHaveLength(0);
110
+ expect(result.items).toEqual(items);
111
+ });
112
+ });
113
+ describe('Node zlib.gzip → zlib.gunzip (baseline)', () => {
114
+ it('Node gzip/gunzip round-trips correctly', async () => {
115
+ const original = { test: 'data', number: 123 };
116
+ const json = JSON.stringify(original);
117
+ const compressed = await gzip(Buffer.from(json, 'utf8'));
118
+ const decompressed = await gunzip(compressed);
119
+ expect(JSON.parse(decompressed.toString('utf8'))).toEqual(original);
120
+ });
121
+ it('Node gzip output is decompressible by at-service-common', async () => {
122
+ const items = [{ id: 1 }, { id: 2 }];
123
+ const json = JSON.stringify(items);
124
+ const compressed = await gzip(Buffer.from(json, 'utf8'));
125
+ const base64 = compressed.toString('base64');
126
+ const result = await decompressFromBase64(base64, CompressionAlgorithm.GZIP);
127
+ expect(result).toEqual(items);
128
+ });
129
+ });
130
+ describe('Golden Payload Compatibility', () => {
131
+ it('golden payload from at-cf-tracking-api is decompressible', async () => {
132
+ const result = await decompressFromBase64(GOLDEN_GZIP_BASE64, CompressionAlgorithm.GZIP);
133
+ expect(result).toEqual(GOLDEN_ITEMS);
134
+ });
135
+ it('golden payload works through full unbundleRecords path', async () => {
136
+ const envelope = {
137
+ v: 1,
138
+ c: 'gzip',
139
+ n: GOLDEN_ITEMS.length,
140
+ p: GOLDEN_GZIP_BASE64,
141
+ s: 179,
142
+ };
143
+ const wrapped = {
144
+ messageId: 'golden-test-id',
145
+ messageType: 'TRACKING_EVENT_COLLECT',
146
+ messageTime: new Date().toISOString(),
147
+ messageBody: envelope,
148
+ };
149
+ const sqsRecord = createSQSRecord(JSON.stringify(wrapped));
150
+ const result = await unbundleRecords([sqsRecord]);
151
+ expect(result.items).toEqual(GOLDEN_ITEMS);
152
+ expect(result.stats.bundledSqsRecords).toBe(1);
153
+ });
154
+ it('CompressionStream output matches zlib output content', async () => {
155
+ const json = JSON.stringify(GOLDEN_ITEMS);
156
+ const cfCompressed = await cfWorkerCompress(new TextEncoder().encode(json));
157
+ const nodeCompressed = await gzip(Buffer.from(json, 'utf8'));
158
+ const cfDecompressed = await gunzip(Buffer.from(cfCompressed));
159
+ const nodeDecompressed = await gunzip(nodeCompressed);
160
+ expect(cfDecompressed.toString('utf8')).toBe(json);
161
+ expect(nodeDecompressed.toString('utf8')).toBe(json);
162
+ expect(cfDecompressed.toString('utf8')).toBe(nodeDecompressed.toString('utf8'));
163
+ });
164
+ });
165
+ describe('Unicode and Special Characters', () => {
166
+ it('emoji and CJK characters survive CF Worker compression round-trip', async () => {
167
+ const unicodeItems = [
168
+ { pixelId: 'px_emoji', event: '🎉_celebration', data: { message: 'Success! 🚀✨' } },
169
+ { pixelId: 'px_cjk', event: 'page_view', data: { title: '中文页面标题', description: '日本語の説明' } },
170
+ { pixelId: 'px_rtl', event: 'page_view', data: { title: 'مرحبا بالعالم', content: 'שלום עולם' } },
171
+ ];
172
+ const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', unicodeItems);
173
+ const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
174
+ const result = await unbundleRecords([sqsRecord]);
175
+ expect(result.items).toHaveLength(3);
176
+ expect(result.items).toEqual(unicodeItems);
177
+ const item0 = result.items[0];
178
+ const item1 = result.items[1];
179
+ const item2 = result.items[2];
180
+ expect(item0.event).toBe('🎉_celebration');
181
+ expect(item0.data.message).toBe('Success! 🚀✨');
182
+ expect(item1.data.title).toBe('中文页面标题');
183
+ expect(item2.data.title).toBe('مرحبا بالعالم');
184
+ });
185
+ it('special characters in JSON survive round-trip', async () => {
186
+ const specialItems = [
187
+ { pixelId: 'px_special', data: { name: 'O\'Brien & Co.', note: 'Line1\nLine2\tTabbed' } },
188
+ { pixelId: 'px_quotes', data: { text: 'He said "hello"', escaped: '\\backslash' } },
189
+ ];
190
+ const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', specialItems);
191
+ const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
192
+ const result = await unbundleRecords([sqsRecord]);
193
+ expect(result.items).toEqual(specialItems);
194
+ });
195
+ });
196
+ describe('Large Payload Handling', () => {
197
+ it('100 items compressed by CF Worker decompresses correctly', async () => {
198
+ const items = Array.from({ length: 100 }, (_, i) => ({
199
+ pixelId: `px_${i.toString().padStart(4, '0')}`,
200
+ event: i % 2 === 0 ? 'page_view' : 'purchase',
201
+ timestamp: new Date(Date.now() - i * 1000).toISOString(),
202
+ }));
203
+ const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
204
+ const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
205
+ const result = await unbundleRecords([sqsRecord]);
206
+ expect(result.items).toHaveLength(100);
207
+ expect(result.items).toEqual(items);
208
+ });
209
+ it('deeply nested objects survive compression', async () => {
210
+ const nestedItems = [
211
+ {
212
+ pixelId: 'px_nested',
213
+ data: {
214
+ level1: {
215
+ level2: {
216
+ level3: {
217
+ level4: {
218
+ value: 'deep value',
219
+ array: [1, 2, 3, { nested: true }],
220
+ },
221
+ },
222
+ },
223
+ },
224
+ },
225
+ },
226
+ ];
227
+ const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', nestedItems);
228
+ const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
229
+ const result = await unbundleRecords([sqsRecord]);
230
+ expect(result.items).toEqual(nestedItems);
231
+ const item = result.items[0];
232
+ expect(item.data.level1.level2.level3.level4.value).toBe('deep value');
233
+ });
234
+ });
235
+ describe('Edge Cases', () => {
236
+ it('empty array compresses/decompresses correctly', async () => {
237
+ const items = [];
238
+ const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
239
+ const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
240
+ const result = await unbundleRecords([sqsRecord]);
241
+ expect(result.items).toHaveLength(0);
242
+ expect(result.failedMessageIds).toHaveLength(0);
243
+ });
244
+ it('single item compresses/decompresses correctly', async () => {
245
+ const items = [{ pixelId: 'px_single' }];
246
+ const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
247
+ const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
248
+ const result = await unbundleRecords([sqsRecord]);
249
+ expect(result.items).toEqual(items);
250
+ });
251
+ it('null and undefined values in objects preserved', async () => {
252
+ const items = [
253
+ { pixelId: 'px_nulls', value: null, nested: { alsoNull: null } },
254
+ { pixelId: 'px_zero', count: 0, price: 0.0 },
255
+ { pixelId: 'px_empty', name: '', items: [] },
256
+ { pixelId: 'px_bool', enabled: false, disabled: true },
257
+ ];
258
+ const bundledMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', items);
259
+ const sqsRecord = createSQSRecord(JSON.stringify(bundledMessage));
260
+ const result = await unbundleRecords([sqsRecord]);
261
+ expect(result.items).toEqual(items);
262
+ const item0 = result.items[0];
263
+ const item1 = result.items[1];
264
+ const item2 = result.items[2];
265
+ const item3 = result.items[3];
266
+ expect(item0.value).toBeNull();
267
+ expect(item0?.nested?.alsoNull).toBeNull();
268
+ expect(item1.count).toBe(0);
269
+ expect(item1.price).toBe(0.0);
270
+ expect(item2.name).toBe('');
271
+ expect(item2.items).toEqual([]);
272
+ expect(item3.enabled).toBe(false);
273
+ expect(item3.disabled).toBe(true);
274
+ });
275
+ });
276
+ describe('GZIP Header Validation', () => {
277
+ it('CF Worker compression produces valid GZIP header', async () => {
278
+ const data = new TextEncoder().encode('test data');
279
+ const compressed = await cfWorkerCompress(data);
280
+ expect(compressed[0]).toBe(0x1f);
281
+ expect(compressed[1]).toBe(0x8b);
282
+ expect(compressed[2]).toBe(8);
283
+ });
284
+ it('Node zlib compression produces valid GZIP header', async () => {
285
+ const compressed = await gzip(Buffer.from('test data', 'utf8'));
286
+ expect(compressed[0]).toBe(0x1f);
287
+ expect(compressed[1]).toBe(0x8b);
288
+ expect(compressed[2]).toBe(8);
289
+ });
290
+ });
291
+ describe('Mixed Batch Processing', () => {
292
+ it('handles mix of CF Worker compressed and Node compressed records', async () => {
293
+ const cfItems = [{ pixelId: 'px_cf_001' }, { pixelId: 'px_cf_002' }];
294
+ const cfMessage = await createCfWorkerBundledMessage('TRACKING_EVENT_COLLECT', cfItems);
295
+ const nodeItems = [{ pixelId: 'px_node_001' }];
296
+ const nodeJson = JSON.stringify(nodeItems);
297
+ const nodeCompressed = await gzip(Buffer.from(nodeJson, 'utf8'));
298
+ const nodeEnvelope = {
299
+ v: 1,
300
+ c: 'gzip',
301
+ n: 1,
302
+ p: nodeCompressed.toString('base64'),
303
+ s: nodeJson.length,
304
+ };
305
+ const nodeMessage = {
306
+ messageId: crypto.randomUUID(),
307
+ messageType: 'TRACKING_EVENT_COLLECT',
308
+ messageTime: new Date().toISOString(),
309
+ messageBody: nodeEnvelope,
310
+ };
311
+ const legacyItem = { pixelId: 'px_legacy' };
312
+ const records = [
313
+ createSQSRecord(JSON.stringify(cfMessage), 'msg-cf'),
314
+ createSQSRecord(JSON.stringify(nodeMessage), 'msg-node'),
315
+ createSQSRecord(JSON.stringify(legacyItem), 'msg-legacy'),
316
+ ];
317
+ const result = await unbundleRecords(records);
318
+ expect(result.items).toHaveLength(4);
319
+ expect(result.failedMessageIds).toHaveLength(0);
320
+ expect(result.stats.bundledSqsRecords).toBe(2);
321
+ expect(result.stats.legacySqsRecords).toBe(1);
322
+ const pixelIds = result.items.map((item) => item.pixelId);
323
+ expect(pixelIds).toContain('px_cf_001');
324
+ expect(pixelIds).toContain('px_cf_002');
325
+ expect(pixelIds).toContain('px_node_001');
326
+ expect(pixelIds).toContain('px_legacy');
327
+ });
328
+ });
329
+ });
330
330
  //# sourceMappingURL=cross-platform-compression.spec.js.map