@adtrackify/at-service-common 3.1.1 → 3.1.3

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 (261) hide show
  1. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.d.ts +1 -1
  2. package/dist/cjs/__tests__/identity-cache/identity-cache-db-service.spec.js +527 -527
  3. package/dist/cjs/__tests__/libs/compress-decompress.spec.d.ts +1 -1
  4. package/dist/cjs/__tests__/libs/compress-decompress.spec.js +16 -16
  5. package/dist/cjs/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  6. package/dist/cjs/__tests__/s3-client/s3-client.spec.js +26 -26
  7. package/dist/cjs/clients/generic/cognito-client.d.ts +20 -20
  8. package/dist/cjs/clients/generic/cognito-client.js +164 -164
  9. package/dist/cjs/clients/generic/dynamodb-client.d.ts +17 -17
  10. package/dist/cjs/clients/generic/dynamodb-client.js +167 -167
  11. package/dist/cjs/clients/generic/eventbridge-client.d.ts +14 -14
  12. package/dist/cjs/clients/generic/eventbridge-client.js +49 -49
  13. package/dist/cjs/clients/generic/http-client.d.ts +88 -88
  14. package/dist/cjs/clients/generic/http-client.js +60 -60
  15. package/dist/cjs/clients/generic/index.d.ts +10 -10
  16. package/dist/cjs/clients/generic/index.js +26 -26
  17. package/dist/cjs/clients/generic/lambda-invoke-client.d.ts +10 -10
  18. package/dist/cjs/clients/generic/lambda-invoke-client.js +35 -35
  19. package/dist/cjs/clients/generic/location-client.d.ts +8 -8
  20. package/dist/cjs/clients/generic/location-client.js +31 -31
  21. package/dist/cjs/clients/generic/redis-client.d.ts +17 -17
  22. package/dist/cjs/clients/generic/redis-client.js +117 -117
  23. package/dist/cjs/clients/generic/s3-client.d.ts +16 -16
  24. package/dist/cjs/clients/generic/s3-client.js +110 -110
  25. package/dist/cjs/clients/generic/singlestore-db-client.d.ts +14 -14
  26. package/dist/cjs/clients/generic/singlestore-db-client.js +67 -67
  27. package/dist/cjs/clients/generic/sqs-client.d.ts +20 -20
  28. package/dist/cjs/clients/generic/sqs-client.js +36 -36
  29. package/dist/cjs/clients/index.d.ts +3 -3
  30. package/dist/cjs/clients/index.js +19 -19
  31. package/dist/cjs/clients/internal-api/accounts-client.d.ts +112 -112
  32. package/dist/cjs/clients/internal-api/accounts-client.js +117 -117
  33. package/dist/cjs/clients/internal-api/cache-lambda-client.d.ts +23 -23
  34. package/dist/cjs/clients/internal-api/cache-lambda-client.js +59 -59
  35. package/dist/cjs/clients/internal-api/db-management-client.d.ts +18 -18
  36. package/dist/cjs/clients/internal-api/db-management-client.js +39 -39
  37. package/dist/cjs/clients/internal-api/destinations-client.d.ts +29 -29
  38. package/dist/cjs/clients/internal-api/destinations-client.js +54 -54
  39. package/dist/cjs/clients/internal-api/event-collector-client.d.ts +20 -20
  40. package/dist/cjs/clients/internal-api/event-collector-client.js +39 -39
  41. package/dist/cjs/clients/internal-api/identity-client.d.ts +25 -25
  42. package/dist/cjs/clients/internal-api/identity-client.js +92 -92
  43. package/dist/cjs/clients/internal-api/index.d.ts +8 -8
  44. package/dist/cjs/clients/internal-api/index.js +24 -24
  45. package/dist/cjs/clients/internal-api/shopify-app-install-client.d.ts +34 -34
  46. package/dist/cjs/clients/internal-api/shopify-app-install-client.js +63 -63
  47. package/dist/cjs/clients/internal-api/users-auth-client.d.ts +31 -31
  48. package/dist/cjs/clients/internal-api/users-auth-client.js +92 -92
  49. package/dist/cjs/clients/third-party/index.d.ts +1 -1
  50. package/dist/cjs/clients/third-party/index.js +17 -17
  51. package/dist/cjs/clients/third-party/shopify-client.d.ts +200 -197
  52. package/dist/cjs/clients/third-party/shopify-client.js +169 -161
  53. package/dist/cjs/clients/third-party/shopify-client.js.map +1 -1
  54. package/dist/cjs/helpers/identity-cache-helper.d.ts +4 -4
  55. package/dist/cjs/helpers/identity-cache-helper.js +150 -150
  56. package/dist/cjs/helpers/index.d.ts +5 -5
  57. package/dist/cjs/helpers/index.js +21 -21
  58. package/dist/cjs/helpers/input-validation-helper.d.ts +3 -3
  59. package/dist/cjs/helpers/input-validation-helper.js +22 -22
  60. package/dist/cjs/helpers/logging-helper.d.ts +16 -16
  61. package/dist/cjs/helpers/logging-helper.js +84 -84
  62. package/dist/cjs/helpers/response-helper.d.ts +15 -15
  63. package/dist/cjs/helpers/response-helper.js +42 -42
  64. package/dist/cjs/helpers/shopify-helper.d.ts +9 -9
  65. package/dist/cjs/helpers/shopify-helper.js +28 -28
  66. package/dist/cjs/index.d.ts +5 -5
  67. package/dist/cjs/index.js +21 -21
  68. package/dist/cjs/libs/clickId-parser.d.ts +23 -23
  69. package/dist/cjs/libs/clickId-parser.js +49 -49
  70. package/dist/cjs/libs/compression.d.ts +2 -2
  71. package/dist/cjs/libs/compression.js +33 -33
  72. package/dist/cjs/libs/crypto.d.ts +1 -1
  73. package/dist/cjs/libs/crypto.js +12 -12
  74. package/dist/cjs/libs/dates.d.ts +6 -6
  75. package/dist/cjs/libs/dates.js +31 -31
  76. package/dist/cjs/libs/http-error.d.ts +21 -21
  77. package/dist/cjs/libs/http-error.js +59 -59
  78. package/dist/cjs/libs/http-status-codes.d.ts +58 -58
  79. package/dist/cjs/libs/http-status-codes.js +62 -62
  80. package/dist/cjs/libs/index.d.ts +9 -9
  81. package/dist/cjs/libs/index.js +25 -25
  82. package/dist/cjs/libs/referrer-parser/index.d.ts +2 -2
  83. package/dist/cjs/libs/referrer-parser/index.js +18 -18
  84. package/dist/cjs/libs/referrer-parser/referrer-data.d.ts +9 -9
  85. package/dist/cjs/libs/referrer-parser/referrer-data.js +4712 -4712
  86. package/dist/cjs/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  87. package/dist/cjs/libs/referrer-parser/referrer-parser-util.js +128 -128
  88. package/dist/cjs/libs/url.d.ts +1 -1
  89. package/dist/cjs/libs/url.js +13 -13
  90. package/dist/cjs/services/db/destinations-db-service.d.ts +8 -8
  91. package/dist/cjs/services/db/destinations-db-service.js +47 -47
  92. package/dist/cjs/services/db/identity-cache-db-service.d.ts +24 -24
  93. package/dist/cjs/services/db/identity-cache-db-service.js +233 -233
  94. package/dist/cjs/services/db/index.d.ts +7 -7
  95. package/dist/cjs/services/db/index.js +23 -23
  96. package/dist/cjs/services/db/log-events-db-service.d.ts +11 -11
  97. package/dist/cjs/services/db/log-events-db-service.js +172 -172
  98. package/dist/cjs/services/db/purchased-contacts-db-service.d.ts +9 -9
  99. package/dist/cjs/services/db/purchased-contacts-db-service.js +38 -38
  100. package/dist/cjs/services/db/shopify-app-installs-db-service.d.ts +7 -7
  101. package/dist/cjs/services/db/shopify-app-installs-db-service.js +47 -47
  102. package/dist/cjs/services/db/shopify-products-cache-db-service.d.ts +13 -9
  103. package/dist/cjs/services/db/shopify-products-cache-db-service.js +112 -64
  104. package/dist/cjs/services/db/shopify-products-cache-db-service.js.map +1 -1
  105. package/dist/cjs/services/db/tracking-events-db-service.d.ts +20 -20
  106. package/dist/cjs/services/db/tracking-events-db-service.js +162 -162
  107. package/dist/cjs/services/eventbridge-integration-service.d.ts +9 -9
  108. package/dist/cjs/services/eventbridge-integration-service.js +28 -28
  109. package/dist/cjs/services/index.d.ts +5 -5
  110. package/dist/cjs/services/index.js +21 -21
  111. package/dist/cjs/services/ipdata-lookup-service.d.ts +17 -17
  112. package/dist/cjs/services/ipdata-lookup-service.js +71 -71
  113. package/dist/cjs/services/log-event-service.d.ts +9 -9
  114. package/dist/cjs/services/log-event-service.js +56 -56
  115. package/dist/cjs/services/metric-event-service.d.ts +9 -9
  116. package/dist/cjs/services/metric-event-service.js +49 -49
  117. package/dist/cjs/types/api-response.d.ts +6 -6
  118. package/dist/cjs/types/api-response.js +2 -2
  119. package/dist/cjs/types/index.d.ts +2 -2
  120. package/dist/cjs/types/index.js +18 -18
  121. package/dist/cjs/types/internal-events/event-detail-types.d.ts +20 -20
  122. package/dist/cjs/types/internal-events/event-detail-types.js +27 -27
  123. package/dist/cjs/types/internal-events/index.d.ts +1 -1
  124. package/dist/cjs/types/internal-events/index.js +17 -17
  125. package/dist/cjs/types/shopify-graphql-types/admin.generated.d.ts +47 -47
  126. package/dist/cjs/types/shopify-graphql-types/admin.generated.js +2 -2
  127. package/dist/cjs/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  128. package/dist/cjs/types/shopify-graphql-types/admin.types.js +5311 -5311
  129. package/dist/cjs/types/shopify-graphql-types/index.d.ts +2 -2
  130. package/dist/cjs/types/shopify-graphql-types/index.js +18 -18
  131. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.d.ts +1 -1
  132. package/dist/esm/__tests__/identity-cache/identity-cache-db-service.spec.js +525 -525
  133. package/dist/esm/__tests__/libs/compress-decompress.spec.d.ts +1 -1
  134. package/dist/esm/__tests__/libs/compress-decompress.spec.js +14 -14
  135. package/dist/esm/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  136. package/dist/esm/__tests__/s3-client/s3-client.spec.js +24 -24
  137. package/dist/esm/clients/generic/cognito-client.d.ts +20 -20
  138. package/dist/esm/clients/generic/cognito-client.js +159 -159
  139. package/dist/esm/clients/generic/dynamodb-client.d.ts +17 -17
  140. package/dist/esm/clients/generic/dynamodb-client.js +163 -163
  141. package/dist/esm/clients/generic/eventbridge-client.d.ts +14 -14
  142. package/dist/esm/clients/generic/eventbridge-client.js +45 -45
  143. package/dist/esm/clients/generic/http-client.d.ts +88 -88
  144. package/dist/esm/clients/generic/http-client.js +52 -52
  145. package/dist/esm/clients/generic/index.d.ts +10 -10
  146. package/dist/esm/clients/generic/index.js +10 -10
  147. package/dist/esm/clients/generic/lambda-invoke-client.d.ts +10 -10
  148. package/dist/esm/clients/generic/lambda-invoke-client.js +31 -31
  149. package/dist/esm/clients/generic/location-client.d.ts +8 -8
  150. package/dist/esm/clients/generic/location-client.js +27 -27
  151. package/dist/esm/clients/generic/redis-client.d.ts +17 -17
  152. package/dist/esm/clients/generic/redis-client.js +110 -110
  153. package/dist/esm/clients/generic/s3-client.d.ts +16 -16
  154. package/dist/esm/clients/generic/s3-client.js +106 -106
  155. package/dist/esm/clients/generic/singlestore-db-client.d.ts +14 -14
  156. package/dist/esm/clients/generic/singlestore-db-client.js +40 -40
  157. package/dist/esm/clients/generic/sqs-client.d.ts +20 -20
  158. package/dist/esm/clients/generic/sqs-client.js +32 -32
  159. package/dist/esm/clients/index.d.ts +3 -3
  160. package/dist/esm/clients/index.js +3 -3
  161. package/dist/esm/clients/internal-api/accounts-client.d.ts +112 -112
  162. package/dist/esm/clients/internal-api/accounts-client.js +113 -113
  163. package/dist/esm/clients/internal-api/cache-lambda-client.d.ts +23 -23
  164. package/dist/esm/clients/internal-api/cache-lambda-client.js +55 -55
  165. package/dist/esm/clients/internal-api/db-management-client.d.ts +18 -18
  166. package/dist/esm/clients/internal-api/db-management-client.js +32 -32
  167. package/dist/esm/clients/internal-api/destinations-client.d.ts +29 -29
  168. package/dist/esm/clients/internal-api/destinations-client.js +50 -50
  169. package/dist/esm/clients/internal-api/event-collector-client.d.ts +20 -20
  170. package/dist/esm/clients/internal-api/event-collector-client.js +32 -32
  171. package/dist/esm/clients/internal-api/identity-client.d.ts +25 -25
  172. package/dist/esm/clients/internal-api/identity-client.js +88 -88
  173. package/dist/esm/clients/internal-api/index.d.ts +8 -8
  174. package/dist/esm/clients/internal-api/index.js +8 -8
  175. package/dist/esm/clients/internal-api/shopify-app-install-client.d.ts +34 -34
  176. package/dist/esm/clients/internal-api/shopify-app-install-client.js +56 -56
  177. package/dist/esm/clients/internal-api/users-auth-client.d.ts +31 -31
  178. package/dist/esm/clients/internal-api/users-auth-client.js +88 -88
  179. package/dist/esm/clients/third-party/index.d.ts +1 -1
  180. package/dist/esm/clients/third-party/index.js +1 -1
  181. package/dist/esm/clients/third-party/shopify-client.d.ts +200 -197
  182. package/dist/esm/clients/third-party/shopify-client.js +165 -157
  183. package/dist/esm/clients/third-party/shopify-client.js.map +1 -1
  184. package/dist/esm/helpers/identity-cache-helper.d.ts +4 -4
  185. package/dist/esm/helpers/identity-cache-helper.js +145 -145
  186. package/dist/esm/helpers/index.d.ts +5 -5
  187. package/dist/esm/helpers/index.js +5 -5
  188. package/dist/esm/helpers/input-validation-helper.d.ts +3 -3
  189. package/dist/esm/helpers/input-validation-helper.js +18 -18
  190. package/dist/esm/helpers/logging-helper.d.ts +16 -16
  191. package/dist/esm/helpers/logging-helper.js +56 -56
  192. package/dist/esm/helpers/response-helper.d.ts +15 -15
  193. package/dist/esm/helpers/response-helper.js +36 -36
  194. package/dist/esm/helpers/shopify-helper.d.ts +9 -9
  195. package/dist/esm/helpers/shopify-helper.js +23 -23
  196. package/dist/esm/index.d.ts +5 -5
  197. package/dist/esm/index.js +5 -5
  198. package/dist/esm/libs/clickId-parser.d.ts +23 -23
  199. package/dist/esm/libs/clickId-parser.js +45 -45
  200. package/dist/esm/libs/compression.d.ts +2 -2
  201. package/dist/esm/libs/compression.js +25 -25
  202. package/dist/esm/libs/crypto.d.ts +1 -1
  203. package/dist/esm/libs/crypto.js +5 -5
  204. package/dist/esm/libs/dates.d.ts +6 -6
  205. package/dist/esm/libs/dates.js +22 -22
  206. package/dist/esm/libs/http-error.d.ts +21 -21
  207. package/dist/esm/libs/http-error.js +55 -55
  208. package/dist/esm/libs/http-status-codes.d.ts +58 -58
  209. package/dist/esm/libs/http-status-codes.js +59 -59
  210. package/dist/esm/libs/index.d.ts +9 -9
  211. package/dist/esm/libs/index.js +9 -9
  212. package/dist/esm/libs/referrer-parser/index.d.ts +2 -2
  213. package/dist/esm/libs/referrer-parser/index.js +2 -2
  214. package/dist/esm/libs/referrer-parser/referrer-data.d.ts +9 -9
  215. package/dist/esm/libs/referrer-parser/referrer-data.js +4709 -4709
  216. package/dist/esm/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  217. package/dist/esm/libs/referrer-parser/referrer-parser-util.js +121 -121
  218. package/dist/esm/libs/url.d.ts +1 -1
  219. package/dist/esm/libs/url.js +9 -9
  220. package/dist/esm/services/db/destinations-db-service.d.ts +8 -8
  221. package/dist/esm/services/db/destinations-db-service.js +43 -43
  222. package/dist/esm/services/db/identity-cache-db-service.d.ts +24 -24
  223. package/dist/esm/services/db/identity-cache-db-service.js +229 -229
  224. package/dist/esm/services/db/index.d.ts +7 -7
  225. package/dist/esm/services/db/index.js +7 -7
  226. package/dist/esm/services/db/log-events-db-service.d.ts +11 -11
  227. package/dist/esm/services/db/log-events-db-service.js +168 -168
  228. package/dist/esm/services/db/purchased-contacts-db-service.d.ts +9 -9
  229. package/dist/esm/services/db/purchased-contacts-db-service.js +34 -34
  230. package/dist/esm/services/db/shopify-app-installs-db-service.d.ts +7 -7
  231. package/dist/esm/services/db/shopify-app-installs-db-service.js +43 -43
  232. package/dist/esm/services/db/shopify-products-cache-db-service.d.ts +13 -9
  233. package/dist/esm/services/db/shopify-products-cache-db-service.js +108 -60
  234. package/dist/esm/services/db/shopify-products-cache-db-service.js.map +1 -1
  235. package/dist/esm/services/db/tracking-events-db-service.d.ts +20 -20
  236. package/dist/esm/services/db/tracking-events-db-service.js +158 -158
  237. package/dist/esm/services/eventbridge-integration-service.d.ts +9 -9
  238. package/dist/esm/services/eventbridge-integration-service.js +24 -24
  239. package/dist/esm/services/index.d.ts +5 -5
  240. package/dist/esm/services/index.js +5 -5
  241. package/dist/esm/services/ipdata-lookup-service.d.ts +17 -17
  242. package/dist/esm/services/ipdata-lookup-service.js +67 -67
  243. package/dist/esm/services/log-event-service.d.ts +9 -9
  244. package/dist/esm/services/log-event-service.js +52 -52
  245. package/dist/esm/services/metric-event-service.d.ts +9 -9
  246. package/dist/esm/services/metric-event-service.js +45 -45
  247. package/dist/esm/types/api-response.d.ts +6 -6
  248. package/dist/esm/types/api-response.js +1 -1
  249. package/dist/esm/types/index.d.ts +2 -2
  250. package/dist/esm/types/index.js +2 -2
  251. package/dist/esm/types/internal-events/event-detail-types.d.ts +20 -20
  252. package/dist/esm/types/internal-events/event-detail-types.js +24 -24
  253. package/dist/esm/types/internal-events/index.d.ts +1 -1
  254. package/dist/esm/types/internal-events/index.js +1 -1
  255. package/dist/esm/types/shopify-graphql-types/admin.generated.d.ts +47 -47
  256. package/dist/esm/types/shopify-graphql-types/admin.generated.js +1 -1
  257. package/dist/esm/types/shopify-graphql-types/admin.types.d.ts +26289 -26289
  258. package/dist/esm/types/shopify-graphql-types/admin.types.js +5299 -5299
  259. package/dist/esm/types/shopify-graphql-types/index.d.ts +2 -2
  260. package/dist/esm/types/shopify-graphql-types/index.js +2 -2
  261. package/package.json +1 -1
@@ -1,65 +1,113 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ShopifyProductsCacheDbService = void 0;
4
- const clients_1 = require("../../clients");
5
- const libs_1 = require("../../libs");
6
- const luxon_1 = require("luxon");
7
- const helpers_1 = require("../../helpers");
8
- class ShopifyProductsCacheDbService {
9
- TABLE_NAME;
10
- KEY_NAME;
11
- constructor(tableName, keyName) {
12
- this.TABLE_NAME = tableName;
13
- this.KEY_NAME = keyName;
14
- }
15
- getShopifyProductCache = async (pixelId, productId) => {
16
- try {
17
- const cachedProduct = await clients_1.DynamoDbClient.safeGet(this.TABLE_NAME, this.KEY_NAME, `${pixelId}_${productId}`);
18
- if (cachedProduct) {
19
- cachedProduct.product = (0, libs_1.decompressJSON)(cachedProduct.productCompressed);
20
- return cachedProduct;
21
- }
22
- return null;
23
- }
24
- catch (error) {
25
- helpers_1.Logger.error('Failed to get shopify product from cache', { keyName: this.KEY_NAME, pixelId, productId, error });
26
- return null;
27
- }
28
- };
29
- putShopifyProductCache = async (pixelId, productId, product, ttlInDays) => {
30
- const ttl = ttlInDays || 7;
31
- const expiresAt = luxon_1.DateTime.now().plus({ days: ttl }).toSeconds();
32
- const shopifyProductCache = {
33
- pixelId_productId: `${pixelId}_${productId}`,
34
- pixelId,
35
- productId,
36
- productCompressed: (0, libs_1.compressJSON)(product),
37
- createdAt: (0, libs_1.getCurrentTimestamp)(),
38
- expiresAt
39
- };
40
- return await clients_1.DynamoDbClient.safePut(this.TABLE_NAME, shopifyProductCache);
41
- };
42
- lookupShopifyProductCache = async (pixelId, shop, accessToken, productId) => {
43
- try {
44
- const cachedShopifyProduct = await this.getShopifyProductCache(pixelId, productId);
45
- if (cachedShopifyProduct) {
46
- return cachedShopifyProduct.product;
47
- }
48
- else {
49
- const productRes = await clients_1.ShopifyClient.getProduct(shop, accessToken, productId);
50
- if (productRes?.product) {
51
- const product = productRes.product;
52
- await this.putShopifyProductCache(pixelId, productId, product);
53
- return product;
54
- }
55
- }
56
- return null;
57
- }
58
- catch (error) {
59
- helpers_1.Logger.error('Failed to lookup shopify product cache', { error });
60
- return null;
61
- }
62
- };
63
- }
64
- exports.ShopifyProductsCacheDbService = ShopifyProductsCacheDbService;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShopifyProductsCacheDbService = void 0;
4
+ const clients_1 = require("../../clients");
5
+ const libs_1 = require("../../libs");
6
+ const luxon_1 = require("luxon");
7
+ const helpers_1 = require("../../helpers");
8
+ class ShopifyProductsCacheDbService {
9
+ TABLE_NAME;
10
+ KEY_NAME;
11
+ constructor(tableName, keyName) {
12
+ this.TABLE_NAME = tableName;
13
+ this.KEY_NAME = keyName;
14
+ }
15
+ getShopifyProductCacheREST = async (pixelId, productId) => {
16
+ try {
17
+ const cachedProduct = await clients_1.DynamoDbClient.safeGet(this.TABLE_NAME, this.KEY_NAME, `${pixelId}_${productId}`);
18
+ if (cachedProduct) {
19
+ cachedProduct.product = (0, libs_1.decompressJSON)(cachedProduct.productCompressed);
20
+ return cachedProduct;
21
+ }
22
+ return null;
23
+ }
24
+ catch (error) {
25
+ helpers_1.Logger.error('Failed getShopifyProductCacheREST', { keyName: this.KEY_NAME, pixelId, productId, error });
26
+ return null;
27
+ }
28
+ };
29
+ putShopifyProductCacheREST = async (pixelId, productId, product, ttlInDays) => {
30
+ const ttl = ttlInDays || 7;
31
+ const expiresAt = luxon_1.DateTime.now().plus({ days: ttl }).toSeconds();
32
+ const shopifyProductCache = {
33
+ pixelId_productId: `${pixelId}_${productId}`,
34
+ pixelId,
35
+ productId,
36
+ productCompressed: (0, libs_1.compressJSON)(product),
37
+ createdAt: (0, libs_1.getCurrentTimestamp)(),
38
+ expiresAt
39
+ };
40
+ return await clients_1.DynamoDbClient.safePut(this.TABLE_NAME, shopifyProductCache);
41
+ };
42
+ lookupShopifyProductCacheREST = async (pixelId, shop, accessToken, productId) => {
43
+ try {
44
+ const cachedShopifyProduct = await this.getShopifyProductCacheREST(pixelId, productId);
45
+ if (cachedShopifyProduct) {
46
+ return cachedShopifyProduct.product;
47
+ }
48
+ else {
49
+ const productRes = await clients_1.ShopifyClient.getProductREST(shop, accessToken, productId);
50
+ if (productRes.status === 200 && productRes?.data?.product) {
51
+ const product = productRes.data.product;
52
+ await this.putShopifyProductCacheREST(pixelId, productId, product);
53
+ return product;
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ catch (error) {
59
+ helpers_1.Logger.error('Failed lookupShopifyProductCacheREST', { error });
60
+ return null;
61
+ }
62
+ };
63
+ putShopifyProductCacheGraphQL = async (pixelId, productId, product, ttlInDays) => {
64
+ const ttl = ttlInDays || 7;
65
+ const expiresAt = luxon_1.DateTime.now().plus({ days: ttl }).toSeconds();
66
+ const shopifyProductCache = {
67
+ pixelId_productId: `${pixelId}_${productId}`,
68
+ pixelId,
69
+ productId,
70
+ productCompressed: (0, libs_1.compressJSON)(product),
71
+ createdAt: (0, libs_1.getCurrentTimestamp)(),
72
+ expiresAt
73
+ };
74
+ return await clients_1.DynamoDbClient.safePut(this.TABLE_NAME, shopifyProductCache);
75
+ };
76
+ getShopifyProductCacheGraphQL = async (pixelId, productId) => {
77
+ try {
78
+ const cachedProduct = await clients_1.DynamoDbClient.safeGet(this.TABLE_NAME, this.KEY_NAME, `${pixelId}_${productId}`);
79
+ if (cachedProduct) {
80
+ cachedProduct.product = (0, libs_1.decompressJSON)(cachedProduct.productCompressed);
81
+ return cachedProduct;
82
+ }
83
+ return null;
84
+ }
85
+ catch (error) {
86
+ helpers_1.Logger.error('Failed getShopifyProductCacheGraphQL', { keyName: this.KEY_NAME, pixelId, productId, error });
87
+ return null;
88
+ }
89
+ };
90
+ lookupShopifyProductCacheGraphQL = async (pixelId, shop, accessToken, productId) => {
91
+ try {
92
+ const cachedShopifyProduct = await this.getShopifyProductCacheGraphQL(pixelId, productId);
93
+ if (cachedShopifyProduct) {
94
+ return cachedShopifyProduct.product;
95
+ }
96
+ else {
97
+ const productRes = await clients_1.ShopifyClient.getProductGraphQL(shop, accessToken, productId);
98
+ if (productRes?.product) {
99
+ const product = productRes.product;
100
+ await this.putShopifyProductCacheGraphQL(pixelId, productId, product);
101
+ return product;
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+ catch (error) {
107
+ helpers_1.Logger.error('Failed lookupShopifyProductCacheGraphQL', { error });
108
+ return null;
109
+ }
110
+ };
111
+ }
112
+ exports.ShopifyProductsCacheDbService = ShopifyProductsCacheDbService;
65
113
  //# sourceMappingURL=shopify-products-cache-db-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shopify-products-cache-db-service.js","sourceRoot":"","sources":["../../../../src/services/db/shopify-products-cache-db-service.ts"],"names":[],"mappings":";;;AAAA,2CAA8D;AAC9D,qCAA+E;AAC/E,iCAAiC;AACjC,2CAAuC;AAGvC,MAAa,6BAA6B;IACjC,UAAU,CAAS;IACnB,QAAQ,CAAS;IAExB,YAAY,SAAiB,EAAE,OAAe;QAC5C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAEM,sBAAsB,GAAG,KAAK,EAAE,OAAe,EAAE,SAAiB,EAAE,EAAE;QAC3E,IAAI;YACF,MAAM,aAAa,GAAG,MAAM,wBAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;YAC9G,IAAI,aAAa,EAAE;gBACjB,aAAa,CAAC,OAAO,GAAG,IAAA,qBAAc,EAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;gBACxE,OAAO,aAAa,CAAC;aACtB;YACD,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,KAAK,EAAE;YACd,gBAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAChH,OAAO,IAAI,CAAC;SACb;IACH,CAAC,CAAC;IAEK,sBAAsB,GAAG,KAAK,EAAE,OAAe,EAAE,SAAiB,EAAE,OAAyB,EAAE,SAAkB,EAAE,EAAE;QAC1H,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEjE,MAAM,mBAAmB,GAAG;YAC1B,iBAAiB,EAAE,GAAG,OAAO,IAAI,SAAS,EAAE;YAC5C,OAAO;YACP,SAAS;YACT,iBAAiB,EAAE,IAAA,mBAAY,EAAC,OAAO,CAAC;YACxC,SAAS,EAAE,IAAA,0BAAmB,GAAE;YAChC,SAAS;SACV,CAAC;QACF,OAAO,MAAM,wBAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAC5E,CAAC,CAAC;IAEK,yBAAyB,GAAG,KAAK,EAAE,OAAe,EAAE,IAAY,EAAE,WAAmB,EAAE,SAAiB,EAAoC,EAAE;QACnJ,IAAI;YACF,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACnF,IAAI,oBAAoB,EAAE;gBACxB,OAAO,oBAAoB,CAAC,OAA2B,CAAC;aACzD;iBAAM;gBACL,MAAM,UAAU,GAAG,MAAM,uBAAa,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;gBAChF,IAAI,UAAU,EAAE,OAAO,EAAE;oBACvB,MAAM,OAAO,GAAG,UAAU,CAAC,OAA2B,CAAC;oBACvD,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC/D,OAAO,OAAO,CAAC;iBAChB;aACF;YAED,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,KAAK,EAAE;YACd,gBAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;SACb;IACH,CAAC,CAAC;CACH;AA1DD,sEA0DC"}
1
+ {"version":3,"file":"shopify-products-cache-db-service.js","sourceRoot":"","sources":["../../../../src/services/db/shopify-products-cache-db-service.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,20 @@
1
- import { AdClickInfo, TrackingEvent, TrackingEventRecord } from '@adtrackify/at-tracking-event-types';
2
- export interface LatestSessionResponseData {
3
- pixelId?: string;
4
- identityId?: string;
5
- sessionId?: string;
6
- click?: AdClickInfo;
7
- }
8
- export declare class TrackingEventsDbService {
9
- TABLE_NAME: string;
10
- KEY_NAME: string;
11
- constructor(tableName: string);
12
- private processResult;
13
- private processResults;
14
- getLatestSessionByIpAddressUserAgent: (indexName: string, ipAddressUserAgent: string, hostname?: string) => Promise<LatestSessionResponseData>;
15
- getTrackingEventsByPixelIdEventName: (indexName: string, pixelId: string, eventName: string, limit?: number, afterCollectedAt?: string) => Promise<TrackingEventRecord[]>;
16
- getTrackingEventCountByPixelId: (indexName: string, pixelId: string, offsetInMinutes?: number) => Promise<number>;
17
- getTrackingEvent: (eventId: string) => Promise<TrackingEventRecord | null>;
18
- buildTrackingEventRecord: (trackingEvent: TrackingEvent, ttlInDays?: number) => TrackingEventRecord;
19
- putTrackingEvent: (trackingEvent: TrackingEvent, ttlInDays?: number) => Promise<import("@aws-sdk/lib-dynamodb").PutCommandOutput | null | undefined>;
20
- }
1
+ import { AdClickInfo, TrackingEvent, TrackingEventRecord } from '@adtrackify/at-tracking-event-types';
2
+ export interface LatestSessionResponseData {
3
+ pixelId?: string;
4
+ identityId?: string;
5
+ sessionId?: string;
6
+ click?: AdClickInfo;
7
+ }
8
+ export declare class TrackingEventsDbService {
9
+ TABLE_NAME: string;
10
+ KEY_NAME: string;
11
+ constructor(tableName: string);
12
+ private processResult;
13
+ private processResults;
14
+ getLatestSessionByIpAddressUserAgent: (indexName: string, ipAddressUserAgent: string, hostname?: string) => Promise<LatestSessionResponseData>;
15
+ getTrackingEventsByPixelIdEventName: (indexName: string, pixelId: string, eventName: string, limit?: number, afterCollectedAt?: string) => Promise<TrackingEventRecord[]>;
16
+ getTrackingEventCountByPixelId: (indexName: string, pixelId: string, offsetInMinutes?: number) => Promise<number>;
17
+ getTrackingEvent: (eventId: string) => Promise<TrackingEventRecord | null>;
18
+ buildTrackingEventRecord: (trackingEvent: TrackingEvent, ttlInDays?: number) => TrackingEventRecord;
19
+ putTrackingEvent: (trackingEvent: TrackingEvent, ttlInDays?: number) => Promise<import("@aws-sdk/lib-dynamodb").PutCommandOutput | null | undefined>;
20
+ }
@@ -1,163 +1,163 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TrackingEventsDbService = void 0;
4
- const clients_1 = require("../../clients");
5
- const helpers_1 = require("../../helpers");
6
- const luxon_1 = require("luxon");
7
- const libs_1 = require("../../libs");
8
- class TrackingEventsDbService {
9
- TABLE_NAME;
10
- KEY_NAME = 'eventId';
11
- constructor(tableName) {
12
- this.TABLE_NAME = tableName;
13
- }
14
- processResult = (trackingEventRecord) => {
15
- if (trackingEventRecord?.trackingEventCompressed) {
16
- const trackingEventDecompressed = (0, libs_1.decompressJSON)(trackingEventRecord.trackingEventCompressed);
17
- if (trackingEventDecompressed) {
18
- trackingEventRecord.trackingEvent = trackingEventDecompressed;
19
- delete trackingEventRecord?.trackingEventCompressed;
20
- }
21
- }
22
- return trackingEventRecord;
23
- };
24
- processResults = (trackingEventRecords) => {
25
- return trackingEventRecords.map((trackingEventRecord) => this.processResult(trackingEventRecord));
26
- };
27
- getLatestSessionByIpAddressUserAgent = async (indexName, ipAddressUserAgent, hostname) => {
28
- try {
29
- const params = {
30
- TableName: this.TABLE_NAME,
31
- IndexName: indexName,
32
- KeyConditionExpression: 'ipAddressUserAgent = :ipAddressUserAgent',
33
- ExpressionAttributeValues: {
34
- ':ipAddressUserAgent': ipAddressUserAgent,
35
- },
36
- ScanIndexForward: false
37
- };
38
- const results = await clients_1.DynamoDbClient.query(params);
39
- let trackingEventRecord;
40
- if (results?.Items && results.Items.length > 0) {
41
- trackingEventRecord = results.Items.find((item) => {
42
- const _trackingEvent = item.trackingEvent;
43
- const _hostname = item?.hostname;
44
- if (hostname && _hostname === hostname && _trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
45
- return true;
46
- }
47
- else if (_trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
48
- return true;
49
- }
50
- else {
51
- return false;
52
- }
53
- });
54
- }
55
- if (trackingEventRecord) {
56
- trackingEventRecord = this.processResult(trackingEventRecord);
57
- const trackingEvent = trackingEventRecord.trackingEvent;
58
- return {
59
- pixelId: trackingEvent?.pixelId,
60
- identityId: trackingEvent.context?.identity?.identityId,
61
- sessionId: trackingEvent.context?.properties?.sessionId,
62
- click: trackingEvent.context?.properties?.click
63
- };
64
- }
65
- else {
66
- return {};
67
- }
68
- }
69
- catch (e) {
70
- helpers_1.Logger.error('Failed to getLastTrackingEventByIpAddressUserAgent', { e });
71
- return {};
72
- }
73
- };
74
- getTrackingEventsByPixelIdEventName = async (indexName, pixelId, eventName, limit, afterCollectedAt) => {
75
- const query = {
76
- TableName: this.TABLE_NAME,
77
- IndexName: indexName,
78
- KeyConditionExpression: 'pixelIdEventName = :pixelIdEventName',
79
- ExpressionAttributeValues: {
80
- ':pixelIdEventName': `${pixelId}_${eventName}`,
81
- },
82
- ScanIndexForward: false,
83
- };
84
- if (limit) {
85
- query.Limit = limit;
86
- }
87
- if (afterCollectedAt) {
88
- query.KeyConditionExpression += ' and collectedAt > :collectedAt';
89
- query.ExpressionAttributeValues[':collectedAt'] = afterCollectedAt;
90
- }
91
- const result = await clients_1.DynamoDbClient.query(query);
92
- const trackingEventRecords = (result?.Items ?? []);
93
- return this.processResults(trackingEventRecords);
94
- };
95
- getTrackingEventCountByPixelId = async (indexName, pixelId, offsetInMinutes = 30) => {
96
- try {
97
- const pastDateTime = luxon_1.DateTime.now().minus({ minutes: offsetInMinutes }).toISO();
98
- const params = {
99
- TableName: this.TABLE_NAME,
100
- IndexName: indexName,
101
- KeyConditionExpression: 'pixelId = :pixelId and collectedAt > :collectedAt',
102
- ExpressionAttributeValues: {
103
- ':pixelId': pixelId,
104
- ':collectedAt': pastDateTime
105
- }
106
- };
107
- const results = await clients_1.DynamoDbClient.query(params);
108
- return results?.Items?.length ?? 0;
109
- }
110
- catch (e) {
111
- helpers_1.Logger.error('Failed to getTrackingEventCountByPixelId', { e });
112
- return 0;
113
- }
114
- };
115
- getTrackingEvent = async (eventId) => {
116
- try {
117
- let trackingEventRecord = await clients_1.DynamoDbClient.safeGet(this.TABLE_NAME, this.KEY_NAME, eventId);
118
- trackingEventRecord = this.processResult(trackingEventRecord);
119
- return trackingEventRecord;
120
- }
121
- catch (e) {
122
- helpers_1.Logger.error('Failed to getTrackingEvent', { e });
123
- return null;
124
- }
125
- };
126
- buildTrackingEventRecord = (trackingEvent, ttlInDays) => {
127
- const trackingEventCopy = JSON.parse(JSON.stringify(trackingEvent));
128
- delete trackingEventCopy?.context?.properties?.enrichment?.ipLookupResponse;
129
- const pageURL = trackingEventCopy?.context?.properties?.page?.url;
130
- const parsedPageURL = new URL(pageURL);
131
- const hostname = parsedPageURL?.hostname;
132
- const trackingEventsTableTTLDays = ttlInDays || 15;
133
- const expiredAt = luxon_1.DateTime.now().plus({ days: trackingEventsTableTTLDays }).toSeconds();
134
- const trackingEventRecord = {
135
- eventId: trackingEventCopy.id,
136
- eventName: trackingEventCopy.name,
137
- pixelId: trackingEventCopy?.pixelId,
138
- pixelIdEventName: `${trackingEventCopy.pixelId}_${trackingEventCopy.name}`,
139
- ipAddressUserAgent: `${trackingEventCopy.context?.properties?.ipAddress}_${trackingEventCopy.context?.properties?.userAgent}`,
140
- hostname,
141
- identityId: trackingEventCopy?.context?.identity?.identityId,
142
- sessionId: trackingEventCopy?.context?.properties?.sessionId,
143
- collectedAt: trackingEventCopy.collectedAt,
144
- expiredAt,
145
- };
146
- const trackingEventCompressed = (0, libs_1.compressJSON)(trackingEventCopy);
147
- if (trackingEventCompressed) {
148
- trackingEventRecord.trackingEventCompressed = trackingEventCompressed;
149
- }
150
- else {
151
- trackingEventRecord.trackingEvent = trackingEventCopy;
152
- }
153
- return trackingEventRecord;
154
- };
155
- putTrackingEvent = async (trackingEvent, ttlInDays) => {
156
- if (!trackingEvent.context?.properties?.ipAddress || !trackingEvent.context?.properties?.userAgent)
157
- return;
158
- const trackingEventRecord = this.buildTrackingEventRecord(trackingEvent, ttlInDays);
159
- return await clients_1.DynamoDbClient.safePut(this.TABLE_NAME, trackingEventRecord);
160
- };
161
- }
162
- exports.TrackingEventsDbService = TrackingEventsDbService;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrackingEventsDbService = void 0;
4
+ const clients_1 = require("../../clients");
5
+ const helpers_1 = require("../../helpers");
6
+ const luxon_1 = require("luxon");
7
+ const libs_1 = require("../../libs");
8
+ class TrackingEventsDbService {
9
+ TABLE_NAME;
10
+ KEY_NAME = 'eventId';
11
+ constructor(tableName) {
12
+ this.TABLE_NAME = tableName;
13
+ }
14
+ processResult = (trackingEventRecord) => {
15
+ if (trackingEventRecord?.trackingEventCompressed) {
16
+ const trackingEventDecompressed = (0, libs_1.decompressJSON)(trackingEventRecord.trackingEventCompressed);
17
+ if (trackingEventDecompressed) {
18
+ trackingEventRecord.trackingEvent = trackingEventDecompressed;
19
+ delete trackingEventRecord?.trackingEventCompressed;
20
+ }
21
+ }
22
+ return trackingEventRecord;
23
+ };
24
+ processResults = (trackingEventRecords) => {
25
+ return trackingEventRecords.map((trackingEventRecord) => this.processResult(trackingEventRecord));
26
+ };
27
+ getLatestSessionByIpAddressUserAgent = async (indexName, ipAddressUserAgent, hostname) => {
28
+ try {
29
+ const params = {
30
+ TableName: this.TABLE_NAME,
31
+ IndexName: indexName,
32
+ KeyConditionExpression: 'ipAddressUserAgent = :ipAddressUserAgent',
33
+ ExpressionAttributeValues: {
34
+ ':ipAddressUserAgent': ipAddressUserAgent,
35
+ },
36
+ ScanIndexForward: false
37
+ };
38
+ const results = await clients_1.DynamoDbClient.query(params);
39
+ let trackingEventRecord;
40
+ if (results?.Items && results.Items.length > 0) {
41
+ trackingEventRecord = results.Items.find((item) => {
42
+ const _trackingEvent = item.trackingEvent;
43
+ const _hostname = item?.hostname;
44
+ if (hostname && _hostname === hostname && _trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
45
+ return true;
46
+ }
47
+ else if (_trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
48
+ return true;
49
+ }
50
+ else {
51
+ return false;
52
+ }
53
+ });
54
+ }
55
+ if (trackingEventRecord) {
56
+ trackingEventRecord = this.processResult(trackingEventRecord);
57
+ const trackingEvent = trackingEventRecord.trackingEvent;
58
+ return {
59
+ pixelId: trackingEvent?.pixelId,
60
+ identityId: trackingEvent.context?.identity?.identityId,
61
+ sessionId: trackingEvent.context?.properties?.sessionId,
62
+ click: trackingEvent.context?.properties?.click
63
+ };
64
+ }
65
+ else {
66
+ return {};
67
+ }
68
+ }
69
+ catch (e) {
70
+ helpers_1.Logger.error('Failed to getLastTrackingEventByIpAddressUserAgent', { e });
71
+ return {};
72
+ }
73
+ };
74
+ getTrackingEventsByPixelIdEventName = async (indexName, pixelId, eventName, limit, afterCollectedAt) => {
75
+ const query = {
76
+ TableName: this.TABLE_NAME,
77
+ IndexName: indexName,
78
+ KeyConditionExpression: 'pixelIdEventName = :pixelIdEventName',
79
+ ExpressionAttributeValues: {
80
+ ':pixelIdEventName': `${pixelId}_${eventName}`,
81
+ },
82
+ ScanIndexForward: false,
83
+ };
84
+ if (limit) {
85
+ query.Limit = limit;
86
+ }
87
+ if (afterCollectedAt) {
88
+ query.KeyConditionExpression += ' and collectedAt > :collectedAt';
89
+ query.ExpressionAttributeValues[':collectedAt'] = afterCollectedAt;
90
+ }
91
+ const result = await clients_1.DynamoDbClient.query(query);
92
+ const trackingEventRecords = (result?.Items ?? []);
93
+ return this.processResults(trackingEventRecords);
94
+ };
95
+ getTrackingEventCountByPixelId = async (indexName, pixelId, offsetInMinutes = 30) => {
96
+ try {
97
+ const pastDateTime = luxon_1.DateTime.now().minus({ minutes: offsetInMinutes }).toISO();
98
+ const params = {
99
+ TableName: this.TABLE_NAME,
100
+ IndexName: indexName,
101
+ KeyConditionExpression: 'pixelId = :pixelId and collectedAt > :collectedAt',
102
+ ExpressionAttributeValues: {
103
+ ':pixelId': pixelId,
104
+ ':collectedAt': pastDateTime
105
+ }
106
+ };
107
+ const results = await clients_1.DynamoDbClient.query(params);
108
+ return results?.Items?.length ?? 0;
109
+ }
110
+ catch (e) {
111
+ helpers_1.Logger.error('Failed to getTrackingEventCountByPixelId', { e });
112
+ return 0;
113
+ }
114
+ };
115
+ getTrackingEvent = async (eventId) => {
116
+ try {
117
+ let trackingEventRecord = await clients_1.DynamoDbClient.safeGet(this.TABLE_NAME, this.KEY_NAME, eventId);
118
+ trackingEventRecord = this.processResult(trackingEventRecord);
119
+ return trackingEventRecord;
120
+ }
121
+ catch (e) {
122
+ helpers_1.Logger.error('Failed to getTrackingEvent', { e });
123
+ return null;
124
+ }
125
+ };
126
+ buildTrackingEventRecord = (trackingEvent, ttlInDays) => {
127
+ const trackingEventCopy = JSON.parse(JSON.stringify(trackingEvent));
128
+ delete trackingEventCopy?.context?.properties?.enrichment?.ipLookupResponse;
129
+ const pageURL = trackingEventCopy?.context?.properties?.page?.url;
130
+ const parsedPageURL = new URL(pageURL);
131
+ const hostname = parsedPageURL?.hostname;
132
+ const trackingEventsTableTTLDays = ttlInDays || 15;
133
+ const expiredAt = luxon_1.DateTime.now().plus({ days: trackingEventsTableTTLDays }).toSeconds();
134
+ const trackingEventRecord = {
135
+ eventId: trackingEventCopy.id,
136
+ eventName: trackingEventCopy.name,
137
+ pixelId: trackingEventCopy?.pixelId,
138
+ pixelIdEventName: `${trackingEventCopy.pixelId}_${trackingEventCopy.name}`,
139
+ ipAddressUserAgent: `${trackingEventCopy.context?.properties?.ipAddress}_${trackingEventCopy.context?.properties?.userAgent}`,
140
+ hostname,
141
+ identityId: trackingEventCopy?.context?.identity?.identityId,
142
+ sessionId: trackingEventCopy?.context?.properties?.sessionId,
143
+ collectedAt: trackingEventCopy.collectedAt,
144
+ expiredAt,
145
+ };
146
+ const trackingEventCompressed = (0, libs_1.compressJSON)(trackingEventCopy);
147
+ if (trackingEventCompressed) {
148
+ trackingEventRecord.trackingEventCompressed = trackingEventCompressed;
149
+ }
150
+ else {
151
+ trackingEventRecord.trackingEvent = trackingEventCopy;
152
+ }
153
+ return trackingEventRecord;
154
+ };
155
+ putTrackingEvent = async (trackingEvent, ttlInDays) => {
156
+ if (!trackingEvent.context?.properties?.ipAddress || !trackingEvent.context?.properties?.userAgent)
157
+ return;
158
+ const trackingEventRecord = this.buildTrackingEventRecord(trackingEvent, ttlInDays);
159
+ return await clients_1.DynamoDbClient.safePut(this.TABLE_NAME, trackingEventRecord);
160
+ };
161
+ }
162
+ exports.TrackingEventsDbService = TrackingEventsDbService;
163
163
  //# sourceMappingURL=tracking-events-db-service.js.map
@@ -1,9 +1,9 @@
1
- import { EventBridgeClient } from '../clients/generic/eventbridge-client.js';
2
- import { Message, TemplatedMessage } from 'postmark';
3
- export declare class EventBridgeIntegrationService {
4
- eventBridgeClient: EventBridgeClient;
5
- EVENT_BUS_NAME: string;
6
- constructor(eventBusName: string);
7
- sendPostmarkEmailEvent: (eventSource: string, postmarkMessage: Message, postmarkServerToken: string) => Promise<import("@aws-sdk/client-eventbridge").PutEventsCommandOutput>;
8
- sendPostmarkTemplatedEmailEvent: (eventSource: string, postmarkMessage: TemplatedMessage, postmarkServerToken: string) => Promise<import("@aws-sdk/client-eventbridge").PutEventsCommandOutput>;
9
- }
1
+ import { EventBridgeClient } from '../clients/generic/eventbridge-client.js';
2
+ import { Message, TemplatedMessage } from 'postmark';
3
+ export declare class EventBridgeIntegrationService {
4
+ eventBridgeClient: EventBridgeClient;
5
+ EVENT_BUS_NAME: string;
6
+ constructor(eventBusName: string);
7
+ sendPostmarkEmailEvent: (eventSource: string, postmarkMessage: Message, postmarkServerToken: string) => Promise<import("@aws-sdk/client-eventbridge").PutEventsCommandOutput>;
8
+ sendPostmarkTemplatedEmailEvent: (eventSource: string, postmarkMessage: TemplatedMessage, postmarkServerToken: string) => Promise<import("@aws-sdk/client-eventbridge").PutEventsCommandOutput>;
9
+ }
@@ -1,29 +1,29 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EventBridgeIntegrationService = void 0;
4
- const eventbridge_client_js_1 = require("../clients/generic/eventbridge-client.js");
5
- const event_detail_types_js_1 = require("../types/internal-events/event-detail-types.js");
6
- class EventBridgeIntegrationService {
7
- eventBridgeClient;
8
- EVENT_BUS_NAME;
9
- constructor(eventBusName) {
10
- this.eventBridgeClient = new eventbridge_client_js_1.EventBridgeClient(eventBusName);
11
- this.EVENT_BUS_NAME = eventBusName;
12
- }
13
- sendPostmarkEmailEvent = async (eventSource, postmarkMessage, postmarkServerToken) => {
14
- return await this.eventBridgeClient.buildAndSendEvent(eventSource, event_detail_types_js_1.ADTRACKIFY_EVENT_BRIDGE_EVENTS.SEND_POSTMARK_EMAIL, {
15
- postmarkMessage,
16
- postmarkRequestType: event_detail_types_js_1.PostmarkRequestType.SINGLE_EMAIL,
17
- postmarkServerToken
18
- });
19
- };
20
- sendPostmarkTemplatedEmailEvent = async (eventSource, postmarkMessage, postmarkServerToken) => {
21
- return await this.eventBridgeClient.buildAndSendEvent(eventSource, event_detail_types_js_1.ADTRACKIFY_EVENT_BRIDGE_EVENTS.SEND_POSTMARK_EMAIL, {
22
- postmarkMessage,
23
- postmarkRequestType: event_detail_types_js_1.PostmarkRequestType.TEMPLATE_EMAIL,
24
- postmarkServerToken
25
- });
26
- };
27
- }
28
- exports.EventBridgeIntegrationService = EventBridgeIntegrationService;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventBridgeIntegrationService = void 0;
4
+ const eventbridge_client_js_1 = require("../clients/generic/eventbridge-client.js");
5
+ const event_detail_types_js_1 = require("../types/internal-events/event-detail-types.js");
6
+ class EventBridgeIntegrationService {
7
+ eventBridgeClient;
8
+ EVENT_BUS_NAME;
9
+ constructor(eventBusName) {
10
+ this.eventBridgeClient = new eventbridge_client_js_1.EventBridgeClient(eventBusName);
11
+ this.EVENT_BUS_NAME = eventBusName;
12
+ }
13
+ sendPostmarkEmailEvent = async (eventSource, postmarkMessage, postmarkServerToken) => {
14
+ return await this.eventBridgeClient.buildAndSendEvent(eventSource, event_detail_types_js_1.ADTRACKIFY_EVENT_BRIDGE_EVENTS.SEND_POSTMARK_EMAIL, {
15
+ postmarkMessage,
16
+ postmarkRequestType: event_detail_types_js_1.PostmarkRequestType.SINGLE_EMAIL,
17
+ postmarkServerToken
18
+ });
19
+ };
20
+ sendPostmarkTemplatedEmailEvent = async (eventSource, postmarkMessage, postmarkServerToken) => {
21
+ return await this.eventBridgeClient.buildAndSendEvent(eventSource, event_detail_types_js_1.ADTRACKIFY_EVENT_BRIDGE_EVENTS.SEND_POSTMARK_EMAIL, {
22
+ postmarkMessage,
23
+ postmarkRequestType: event_detail_types_js_1.PostmarkRequestType.TEMPLATE_EMAIL,
24
+ postmarkServerToken
25
+ });
26
+ };
27
+ }
28
+ exports.EventBridgeIntegrationService = EventBridgeIntegrationService;
29
29
  //# sourceMappingURL=eventbridge-integration-service.js.map