@adtrackify/at-service-common 3.0.29 → 3.0.30

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 (197) hide show
  1. package/dist/cjs/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  2. package/dist/cjs/__tests__/s3-client/s3-client.spec.js +26 -26
  3. package/dist/cjs/clients/generic/cognito-client.d.ts +20 -20
  4. package/dist/cjs/clients/generic/cognito-client.js +164 -164
  5. package/dist/cjs/clients/generic/dynamodb-client.d.ts +16 -16
  6. package/dist/cjs/clients/generic/dynamodb-client.js +144 -144
  7. package/dist/cjs/clients/generic/eventbridge-client.d.ts +14 -14
  8. package/dist/cjs/clients/generic/eventbridge-client.js +49 -49
  9. package/dist/cjs/clients/generic/http-client.d.ts +88 -88
  10. package/dist/cjs/clients/generic/http-client.js +56 -56
  11. package/dist/cjs/clients/generic/index.d.ts +6 -6
  12. package/dist/cjs/clients/generic/index.js +22 -22
  13. package/dist/cjs/clients/generic/s3-client.d.ts +16 -16
  14. package/dist/cjs/clients/generic/s3-client.js +110 -110
  15. package/dist/cjs/clients/generic/sqs-client.d.ts +14 -14
  16. package/dist/cjs/clients/generic/sqs-client.js +38 -38
  17. package/dist/cjs/clients/index.d.ts +3 -3
  18. package/dist/cjs/clients/index.js +19 -19
  19. package/dist/cjs/clients/internal-api/accounts-client.d.ts +112 -112
  20. package/dist/cjs/clients/internal-api/accounts-client.js +117 -117
  21. package/dist/cjs/clients/internal-api/db-management-client.d.ts +18 -18
  22. package/dist/cjs/clients/internal-api/db-management-client.js +39 -39
  23. package/dist/cjs/clients/internal-api/destinations-client.d.ts +29 -29
  24. package/dist/cjs/clients/internal-api/destinations-client.js +54 -54
  25. package/dist/cjs/clients/internal-api/event-collector-client.d.ts +20 -20
  26. package/dist/cjs/clients/internal-api/event-collector-client.js +39 -39
  27. package/dist/cjs/clients/internal-api/identity-client.d.ts +17 -17
  28. package/dist/cjs/clients/internal-api/identity-client.js +75 -75
  29. package/dist/cjs/clients/internal-api/index.d.ts +7 -7
  30. package/dist/cjs/clients/internal-api/index.js +23 -23
  31. package/dist/cjs/clients/internal-api/shopify-app-install-client.d.ts +34 -34
  32. package/dist/cjs/clients/internal-api/shopify-app-install-client.js +63 -63
  33. package/dist/cjs/clients/internal-api/users-auth-client.d.ts +31 -31
  34. package/dist/cjs/clients/internal-api/users-auth-client.js +92 -92
  35. package/dist/cjs/clients/third-party/index.d.ts +1 -1
  36. package/dist/cjs/clients/third-party/index.js +17 -17
  37. package/dist/cjs/clients/third-party/shopify-client.d.ts +198 -198
  38. package/dist/cjs/clients/third-party/shopify-client.js +150 -150
  39. package/dist/cjs/helpers/index.d.ts +4 -4
  40. package/dist/cjs/helpers/index.js +20 -20
  41. package/dist/cjs/helpers/input-validation-helper.d.ts +3 -3
  42. package/dist/cjs/helpers/input-validation-helper.js +23 -23
  43. package/dist/cjs/helpers/logging-helper.d.ts +15 -15
  44. package/dist/cjs/helpers/logging-helper.js +80 -80
  45. package/dist/cjs/helpers/response-helper.d.ts +15 -15
  46. package/dist/cjs/helpers/response-helper.js +42 -42
  47. package/dist/cjs/helpers/shopify-helper.d.ts +9 -9
  48. package/dist/cjs/helpers/shopify-helper.js +28 -28
  49. package/dist/cjs/index.d.ts +5 -5
  50. package/dist/cjs/index.js +21 -21
  51. package/dist/cjs/libs/clickId-parser.d.ts +23 -23
  52. package/dist/cjs/libs/clickId-parser.js +49 -49
  53. package/dist/cjs/libs/crypto.d.ts +1 -1
  54. package/dist/cjs/libs/crypto.js +12 -12
  55. package/dist/cjs/libs/dates.d.ts +6 -6
  56. package/dist/cjs/libs/dates.js +31 -31
  57. package/dist/cjs/libs/http-error.d.ts +21 -21
  58. package/dist/cjs/libs/http-error.js +59 -59
  59. package/dist/cjs/libs/http-status-codes.d.ts +58 -58
  60. package/dist/cjs/libs/http-status-codes.js +62 -62
  61. package/dist/cjs/libs/index.d.ts +8 -8
  62. package/dist/cjs/libs/index.js +24 -24
  63. package/dist/cjs/libs/referrer-parser/index.d.ts +2 -2
  64. package/dist/cjs/libs/referrer-parser/index.js +18 -18
  65. package/dist/cjs/libs/referrer-parser/referrer-data.d.ts +9 -9
  66. package/dist/cjs/libs/referrer-parser/referrer-data.js +4712 -4712
  67. package/dist/cjs/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  68. package/dist/cjs/libs/referrer-parser/referrer-parser-util.js +128 -128
  69. package/dist/cjs/libs/url.d.ts +1 -1
  70. package/dist/cjs/libs/url.js +13 -13
  71. package/dist/cjs/services/db/destinations-service.d.ts +7 -7
  72. package/dist/cjs/services/db/destinations-service.js +35 -35
  73. package/dist/cjs/services/db/index.d.ts +4 -4
  74. package/dist/cjs/services/db/index.js +20 -20
  75. package/dist/cjs/services/db/log-events-data-service.d.ts +6 -6
  76. package/dist/cjs/services/db/log-events-data-service.js +31 -31
  77. package/dist/cjs/services/db/purchased-contacts-db-service.d.ts +9 -9
  78. package/dist/cjs/services/db/purchased-contacts-db-service.js +38 -38
  79. package/dist/cjs/services/db/tracking-events-db-service.d.ts +17 -17
  80. package/dist/cjs/services/db/tracking-events-db-service.js +134 -134
  81. package/dist/cjs/services/eventbridge-integration-service.d.ts +9 -9
  82. package/dist/cjs/services/eventbridge-integration-service.js +28 -28
  83. package/dist/cjs/services/index.d.ts +5 -5
  84. package/dist/cjs/services/index.js +21 -21
  85. package/dist/cjs/services/ipdata-lookup-service.d.ts +8 -8
  86. package/dist/cjs/services/ipdata-lookup-service.js +59 -59
  87. package/dist/cjs/services/log-event-service.d.ts +9 -9
  88. package/dist/cjs/services/log-event-service.js +56 -56
  89. package/dist/cjs/services/metric-event-service.d.ts +9 -9
  90. package/dist/cjs/services/metric-event-service.js +49 -49
  91. package/dist/cjs/types/api-response.d.ts +6 -6
  92. package/dist/cjs/types/api-response.js +2 -2
  93. package/dist/cjs/types/index.d.ts +1 -1
  94. package/dist/cjs/types/index.js +17 -17
  95. package/dist/cjs/types/internal-events/event-detail-types.d.ts +20 -20
  96. package/dist/cjs/types/internal-events/event-detail-types.js +27 -27
  97. package/dist/cjs/types/internal-events/index.d.ts +1 -1
  98. package/dist/cjs/types/internal-events/index.js +17 -17
  99. package/dist/esm/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  100. package/dist/esm/__tests__/s3-client/s3-client.spec.js +24 -24
  101. package/dist/esm/clients/generic/cognito-client.d.ts +20 -20
  102. package/dist/esm/clients/generic/cognito-client.js +159 -159
  103. package/dist/esm/clients/generic/dynamodb-client.d.ts +16 -16
  104. package/dist/esm/clients/generic/dynamodb-client.js +140 -140
  105. package/dist/esm/clients/generic/eventbridge-client.d.ts +14 -14
  106. package/dist/esm/clients/generic/eventbridge-client.js +45 -45
  107. package/dist/esm/clients/generic/http-client.d.ts +88 -88
  108. package/dist/esm/clients/generic/http-client.js +48 -48
  109. package/dist/esm/clients/generic/index.d.ts +6 -6
  110. package/dist/esm/clients/generic/index.js +6 -6
  111. package/dist/esm/clients/generic/s3-client.d.ts +16 -16
  112. package/dist/esm/clients/generic/s3-client.js +106 -106
  113. package/dist/esm/clients/generic/sqs-client.d.ts +14 -14
  114. package/dist/esm/clients/generic/sqs-client.js +34 -34
  115. package/dist/esm/clients/index.d.ts +3 -3
  116. package/dist/esm/clients/index.js +3 -3
  117. package/dist/esm/clients/internal-api/accounts-client.d.ts +112 -112
  118. package/dist/esm/clients/internal-api/accounts-client.js +113 -113
  119. package/dist/esm/clients/internal-api/db-management-client.d.ts +18 -18
  120. package/dist/esm/clients/internal-api/db-management-client.js +32 -32
  121. package/dist/esm/clients/internal-api/destinations-client.d.ts +29 -29
  122. package/dist/esm/clients/internal-api/destinations-client.js +50 -50
  123. package/dist/esm/clients/internal-api/event-collector-client.d.ts +20 -20
  124. package/dist/esm/clients/internal-api/event-collector-client.js +32 -32
  125. package/dist/esm/clients/internal-api/identity-client.d.ts +17 -17
  126. package/dist/esm/clients/internal-api/identity-client.js +71 -71
  127. package/dist/esm/clients/internal-api/index.d.ts +7 -7
  128. package/dist/esm/clients/internal-api/index.js +7 -7
  129. package/dist/esm/clients/internal-api/shopify-app-install-client.d.ts +34 -34
  130. package/dist/esm/clients/internal-api/shopify-app-install-client.js +56 -56
  131. package/dist/esm/clients/internal-api/users-auth-client.d.ts +31 -31
  132. package/dist/esm/clients/internal-api/users-auth-client.js +88 -88
  133. package/dist/esm/clients/third-party/index.d.ts +1 -1
  134. package/dist/esm/clients/third-party/index.js +1 -1
  135. package/dist/esm/clients/third-party/shopify-client.d.ts +198 -198
  136. package/dist/esm/clients/third-party/shopify-client.js +146 -146
  137. package/dist/esm/helpers/index.d.ts +4 -4
  138. package/dist/esm/helpers/index.js +4 -4
  139. package/dist/esm/helpers/input-validation-helper.d.ts +3 -3
  140. package/dist/esm/helpers/input-validation-helper.js +19 -19
  141. package/dist/esm/helpers/logging-helper.d.ts +15 -15
  142. package/dist/esm/helpers/logging-helper.js +53 -53
  143. package/dist/esm/helpers/response-helper.d.ts +15 -15
  144. package/dist/esm/helpers/response-helper.js +36 -36
  145. package/dist/esm/helpers/shopify-helper.d.ts +9 -9
  146. package/dist/esm/helpers/shopify-helper.js +23 -23
  147. package/dist/esm/index.d.ts +5 -5
  148. package/dist/esm/index.js +5 -5
  149. package/dist/esm/libs/clickId-parser.d.ts +23 -23
  150. package/dist/esm/libs/clickId-parser.js +45 -45
  151. package/dist/esm/libs/crypto.d.ts +1 -1
  152. package/dist/esm/libs/crypto.js +5 -5
  153. package/dist/esm/libs/dates.d.ts +6 -6
  154. package/dist/esm/libs/dates.js +22 -22
  155. package/dist/esm/libs/http-error.d.ts +21 -21
  156. package/dist/esm/libs/http-error.js +55 -55
  157. package/dist/esm/libs/http-status-codes.d.ts +58 -58
  158. package/dist/esm/libs/http-status-codes.js +59 -59
  159. package/dist/esm/libs/index.d.ts +8 -8
  160. package/dist/esm/libs/index.js +8 -8
  161. package/dist/esm/libs/referrer-parser/index.d.ts +2 -2
  162. package/dist/esm/libs/referrer-parser/index.js +2 -2
  163. package/dist/esm/libs/referrer-parser/referrer-data.d.ts +9 -9
  164. package/dist/esm/libs/referrer-parser/referrer-data.js +4709 -4709
  165. package/dist/esm/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  166. package/dist/esm/libs/referrer-parser/referrer-parser-util.js +121 -121
  167. package/dist/esm/libs/url.d.ts +1 -1
  168. package/dist/esm/libs/url.js +9 -9
  169. package/dist/esm/services/db/destinations-service.d.ts +7 -7
  170. package/dist/esm/services/db/destinations-service.js +31 -31
  171. package/dist/esm/services/db/index.d.ts +4 -4
  172. package/dist/esm/services/db/index.js +4 -4
  173. package/dist/esm/services/db/log-events-data-service.d.ts +6 -6
  174. package/dist/esm/services/db/log-events-data-service.js +27 -27
  175. package/dist/esm/services/db/purchased-contacts-db-service.d.ts +9 -9
  176. package/dist/esm/services/db/purchased-contacts-db-service.js +34 -34
  177. package/dist/esm/services/db/tracking-events-db-service.d.ts +17 -17
  178. package/dist/esm/services/db/tracking-events-db-service.js +130 -130
  179. package/dist/esm/services/eventbridge-integration-service.d.ts +9 -9
  180. package/dist/esm/services/eventbridge-integration-service.js +24 -24
  181. package/dist/esm/services/index.d.ts +5 -5
  182. package/dist/esm/services/index.js +5 -5
  183. package/dist/esm/services/ipdata-lookup-service.d.ts +8 -8
  184. package/dist/esm/services/ipdata-lookup-service.js +55 -55
  185. package/dist/esm/services/log-event-service.d.ts +9 -9
  186. package/dist/esm/services/log-event-service.js +52 -52
  187. package/dist/esm/services/metric-event-service.d.ts +9 -9
  188. package/dist/esm/services/metric-event-service.js +45 -45
  189. package/dist/esm/types/api-response.d.ts +6 -6
  190. package/dist/esm/types/api-response.js +1 -1
  191. package/dist/esm/types/index.d.ts +1 -1
  192. package/dist/esm/types/index.js +1 -1
  193. package/dist/esm/types/internal-events/event-detail-types.d.ts +20 -20
  194. package/dist/esm/types/internal-events/event-detail-types.js +24 -24
  195. package/dist/esm/types/internal-events/index.d.ts +1 -1
  196. package/dist/esm/types/internal-events/index.js +1 -1
  197. package/package.json +1 -1
@@ -1,131 +1,131 @@
1
- import { DynamoDbClient } from '../../clients';
2
- import { Logger } from '../../helpers';
3
- import { DateTime } from 'luxon';
4
- export class TrackingEventsDbService {
5
- TABLE_NAME;
6
- KEY_NAME = 'eventId';
7
- constructor(tableName) {
8
- this.TABLE_NAME = tableName;
9
- }
10
- getLatestSessionByIpAddressUserAgent = async (indexName, ipAddressUserAgent, hostname) => {
11
- try {
12
- const params = {
13
- TableName: this.TABLE_NAME,
14
- IndexName: indexName,
15
- KeyConditionExpression: 'ipAddressUserAgent = :ipAddressUserAgent',
16
- ExpressionAttributeValues: {
17
- ':ipAddressUserAgent': ipAddressUserAgent,
18
- },
19
- ScanIndexForward: false
20
- };
21
- const results = await DynamoDbClient.query(params);
22
- let trackingEventRecord;
23
- if (results?.Items && results.Items.length > 0) {
24
- trackingEventRecord = results.Items.find((item) => {
25
- const _trackingEvent = item.trackingEvent;
26
- const _hostname = item?.hostname;
27
- if (hostname && _hostname === hostname && _trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
28
- return true;
29
- }
30
- else if (_trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
31
- return true;
32
- }
33
- else {
34
- return false;
35
- }
36
- });
37
- }
38
- if (trackingEventRecord) {
39
- const trackingEvent = trackingEventRecord.trackingEvent;
40
- return {
41
- pixelId: trackingEvent?.pixelId,
42
- identityId: trackingEvent.context?.identity?.identityId,
43
- sessionId: trackingEvent.context?.properties?.sessionId,
44
- click: trackingEvent.context?.properties?.click
45
- };
46
- }
47
- else {
48
- return {};
49
- }
50
- }
51
- catch (e) {
52
- Logger.error('Failed to getLastTrackingEventByIpAddressUserAgent', { e });
53
- return {};
54
- }
55
- };
56
- getTrackingEventsByPixelIdEventName = async (indexName, pixelId, eventName, limit, afterCollectedAt) => {
57
- const query = {
58
- TableName: this.TABLE_NAME,
59
- IndexName: indexName,
60
- KeyConditionExpression: 'pixelIdEventName = :pixelIdEventName',
61
- ExpressionAttributeValues: {
62
- ':pixelIdEventName': `${pixelId}_${eventName}`,
63
- },
64
- ScanIndexForward: false,
65
- };
66
- if (limit) {
67
- query.Limit = limit;
68
- }
69
- if (afterCollectedAt) {
70
- query.KeyConditionExpression += ' and collectedAt > :collectedAt';
71
- query.ExpressionAttributeValues[':collectedAt'] = afterCollectedAt;
72
- }
73
- const trackingEventsResponse = await DynamoDbClient.query(query);
74
- return trackingEventsResponse?.Items ?? [];
75
- };
76
- getTrackingEventCountByPixelId = async (indexName, pixelId, offsetInMinutes = 30) => {
77
- try {
78
- const pastDateTime = DateTime.now().minus({ minutes: offsetInMinutes }).toISO();
79
- const params = {
80
- TableName: this.TABLE_NAME,
81
- IndexName: indexName,
82
- KeyConditionExpression: 'pixelId = :pixelId and collectedAt > :collectedAt',
83
- ExpressionAttributeValues: {
84
- ':pixelId': pixelId,
85
- ':collectedAt': pastDateTime
86
- }
87
- };
88
- const results = await DynamoDbClient.query(params);
89
- return results?.Items?.length ?? 0;
90
- }
91
- catch (e) {
92
- Logger.error('Failed to getTrackingEventCountByPixelId', { e });
93
- return 0;
94
- }
95
- };
96
- getTrackingEvent = async (eventId) => {
97
- try {
98
- const eventRecord = await DynamoDbClient.safeGet(this.TABLE_NAME, this.KEY_NAME, eventId);
99
- return eventRecord;
100
- }
101
- catch (e) {
102
- Logger.error('Failed to getTrackingEvent', { e });
103
- return null;
104
- }
105
- };
106
- putTrackingEvent = async (trackingEvent, ttlInDays) => {
107
- if (!trackingEvent.context?.properties?.ipAddress || !trackingEvent.context?.properties?.userAgent)
108
- return;
109
- const pageURL = trackingEvent?.context?.properties?.page?.url;
110
- const parsedPageURL = new URL(pageURL);
111
- const hostname = parsedPageURL?.hostname;
112
- const trackingEventsTableTTLDays = ttlInDays || 15;
113
- const expiredAt = DateTime.now().plus({ days: trackingEventsTableTTLDays }).toSeconds();
114
- const trackingEventRecord = {
115
- eventId: trackingEvent.id,
116
- eventName: trackingEvent.name,
117
- trackingEvent,
118
- pixelId: trackingEvent?.pixelId,
119
- pixelIdEventName: `${trackingEvent.pixelId}_${trackingEvent.name}`,
120
- ipAddressUserAgent: `${trackingEvent.context?.properties?.ipAddress}_${trackingEvent.context?.properties?.userAgent}`,
121
- hostname,
122
- identityId: trackingEvent?.context?.identity?.identityId,
123
- sessionId: trackingEvent?.context?.properties?.sessionId,
124
- collectedAt: trackingEvent.collectedAt,
125
- expiredAt,
126
- };
127
- Logger.debug('Put tracking event', { trackingEventRecord, expiredAtType: typeof expiredAt });
128
- return await DynamoDbClient.safePut(this.TABLE_NAME, trackingEventRecord);
129
- };
130
- }
1
+ import { DynamoDbClient } from '../../clients';
2
+ import { Logger } from '../../helpers';
3
+ import { DateTime } from 'luxon';
4
+ export class TrackingEventsDbService {
5
+ TABLE_NAME;
6
+ KEY_NAME = 'eventId';
7
+ constructor(tableName) {
8
+ this.TABLE_NAME = tableName;
9
+ }
10
+ getLatestSessionByIpAddressUserAgent = async (indexName, ipAddressUserAgent, hostname) => {
11
+ try {
12
+ const params = {
13
+ TableName: this.TABLE_NAME,
14
+ IndexName: indexName,
15
+ KeyConditionExpression: 'ipAddressUserAgent = :ipAddressUserAgent',
16
+ ExpressionAttributeValues: {
17
+ ':ipAddressUserAgent': ipAddressUserAgent,
18
+ },
19
+ ScanIndexForward: false
20
+ };
21
+ const results = await DynamoDbClient.query(params);
22
+ let trackingEventRecord;
23
+ if (results?.Items && results.Items.length > 0) {
24
+ trackingEventRecord = results.Items.find((item) => {
25
+ const _trackingEvent = item.trackingEvent;
26
+ const _hostname = item?.hostname;
27
+ if (hostname && _hostname === hostname && _trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
28
+ return true;
29
+ }
30
+ else if (_trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
31
+ return true;
32
+ }
33
+ else {
34
+ return false;
35
+ }
36
+ });
37
+ }
38
+ if (trackingEventRecord) {
39
+ const trackingEvent = trackingEventRecord.trackingEvent;
40
+ return {
41
+ pixelId: trackingEvent?.pixelId,
42
+ identityId: trackingEvent.context?.identity?.identityId,
43
+ sessionId: trackingEvent.context?.properties?.sessionId,
44
+ click: trackingEvent.context?.properties?.click
45
+ };
46
+ }
47
+ else {
48
+ return {};
49
+ }
50
+ }
51
+ catch (e) {
52
+ Logger.error('Failed to getLastTrackingEventByIpAddressUserAgent', { e });
53
+ return {};
54
+ }
55
+ };
56
+ getTrackingEventsByPixelIdEventName = async (indexName, pixelId, eventName, limit, afterCollectedAt) => {
57
+ const query = {
58
+ TableName: this.TABLE_NAME,
59
+ IndexName: indexName,
60
+ KeyConditionExpression: 'pixelIdEventName = :pixelIdEventName',
61
+ ExpressionAttributeValues: {
62
+ ':pixelIdEventName': `${pixelId}_${eventName}`,
63
+ },
64
+ ScanIndexForward: false,
65
+ };
66
+ if (limit) {
67
+ query.Limit = limit;
68
+ }
69
+ if (afterCollectedAt) {
70
+ query.KeyConditionExpression += ' and collectedAt > :collectedAt';
71
+ query.ExpressionAttributeValues[':collectedAt'] = afterCollectedAt;
72
+ }
73
+ const trackingEventsResponse = await DynamoDbClient.query(query);
74
+ return trackingEventsResponse?.Items ?? [];
75
+ };
76
+ getTrackingEventCountByPixelId = async (indexName, pixelId, offsetInMinutes = 30) => {
77
+ try {
78
+ const pastDateTime = DateTime.now().minus({ minutes: offsetInMinutes }).toISO();
79
+ const params = {
80
+ TableName: this.TABLE_NAME,
81
+ IndexName: indexName,
82
+ KeyConditionExpression: 'pixelId = :pixelId and collectedAt > :collectedAt',
83
+ ExpressionAttributeValues: {
84
+ ':pixelId': pixelId,
85
+ ':collectedAt': pastDateTime
86
+ }
87
+ };
88
+ const results = await DynamoDbClient.query(params);
89
+ return results?.Items?.length ?? 0;
90
+ }
91
+ catch (e) {
92
+ Logger.error('Failed to getTrackingEventCountByPixelId', { e });
93
+ return 0;
94
+ }
95
+ };
96
+ getTrackingEvent = async (eventId) => {
97
+ try {
98
+ const eventRecord = await DynamoDbClient.safeGet(this.TABLE_NAME, this.KEY_NAME, eventId);
99
+ return eventRecord;
100
+ }
101
+ catch (e) {
102
+ Logger.error('Failed to getTrackingEvent', { e });
103
+ return null;
104
+ }
105
+ };
106
+ putTrackingEvent = async (trackingEvent, ttlInDays) => {
107
+ if (!trackingEvent.context?.properties?.ipAddress || !trackingEvent.context?.properties?.userAgent)
108
+ return;
109
+ const pageURL = trackingEvent?.context?.properties?.page?.url;
110
+ const parsedPageURL = new URL(pageURL);
111
+ const hostname = parsedPageURL?.hostname;
112
+ const trackingEventsTableTTLDays = ttlInDays || 15;
113
+ const expiredAt = DateTime.now().plus({ days: trackingEventsTableTTLDays }).toSeconds();
114
+ const trackingEventRecord = {
115
+ eventId: trackingEvent.id,
116
+ eventName: trackingEvent.name,
117
+ trackingEvent,
118
+ pixelId: trackingEvent?.pixelId,
119
+ pixelIdEventName: `${trackingEvent.pixelId}_${trackingEvent.name}`,
120
+ ipAddressUserAgent: `${trackingEvent.context?.properties?.ipAddress}_${trackingEvent.context?.properties?.userAgent}`,
121
+ hostname,
122
+ identityId: trackingEvent?.context?.identity?.identityId,
123
+ sessionId: trackingEvent?.context?.properties?.sessionId,
124
+ collectedAt: trackingEvent.collectedAt,
125
+ expiredAt,
126
+ };
127
+ Logger.debug('Put tracking event', { trackingEventRecord, expiredAtType: typeof expiredAt });
128
+ return await DynamoDbClient.safePut(this.TABLE_NAME, trackingEventRecord);
129
+ };
130
+ }
131
131
  //# 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,25 +1,25 @@
1
- import { EventBridgeClient } from '../clients/generic/eventbridge-client.js';
2
- import { ADTRACKIFY_EVENT_BRIDGE_EVENTS, PostmarkRequestType } from '../types/internal-events/event-detail-types.js';
3
- export class EventBridgeIntegrationService {
4
- eventBridgeClient;
5
- EVENT_BUS_NAME;
6
- constructor(eventBusName) {
7
- this.eventBridgeClient = new EventBridgeClient(eventBusName);
8
- this.EVENT_BUS_NAME = eventBusName;
9
- }
10
- sendPostmarkEmailEvent = async (eventSource, postmarkMessage, postmarkServerToken) => {
11
- return await this.eventBridgeClient.buildAndSendEvent(eventSource, ADTRACKIFY_EVENT_BRIDGE_EVENTS.SEND_POSTMARK_EMAIL, {
12
- postmarkMessage,
13
- postmarkRequestType: PostmarkRequestType.SINGLE_EMAIL,
14
- postmarkServerToken
15
- });
16
- };
17
- sendPostmarkTemplatedEmailEvent = async (eventSource, postmarkMessage, postmarkServerToken) => {
18
- return await this.eventBridgeClient.buildAndSendEvent(eventSource, ADTRACKIFY_EVENT_BRIDGE_EVENTS.SEND_POSTMARK_EMAIL, {
19
- postmarkMessage,
20
- postmarkRequestType: PostmarkRequestType.TEMPLATE_EMAIL,
21
- postmarkServerToken
22
- });
23
- };
24
- }
1
+ import { EventBridgeClient } from '../clients/generic/eventbridge-client.js';
2
+ import { ADTRACKIFY_EVENT_BRIDGE_EVENTS, PostmarkRequestType } from '../types/internal-events/event-detail-types.js';
3
+ export class EventBridgeIntegrationService {
4
+ eventBridgeClient;
5
+ EVENT_BUS_NAME;
6
+ constructor(eventBusName) {
7
+ this.eventBridgeClient = new EventBridgeClient(eventBusName);
8
+ this.EVENT_BUS_NAME = eventBusName;
9
+ }
10
+ sendPostmarkEmailEvent = async (eventSource, postmarkMessage, postmarkServerToken) => {
11
+ return await this.eventBridgeClient.buildAndSendEvent(eventSource, ADTRACKIFY_EVENT_BRIDGE_EVENTS.SEND_POSTMARK_EMAIL, {
12
+ postmarkMessage,
13
+ postmarkRequestType: PostmarkRequestType.SINGLE_EMAIL,
14
+ postmarkServerToken
15
+ });
16
+ };
17
+ sendPostmarkTemplatedEmailEvent = async (eventSource, postmarkMessage, postmarkServerToken) => {
18
+ return await this.eventBridgeClient.buildAndSendEvent(eventSource, ADTRACKIFY_EVENT_BRIDGE_EVENTS.SEND_POSTMARK_EMAIL, {
19
+ postmarkMessage,
20
+ postmarkRequestType: PostmarkRequestType.TEMPLATE_EMAIL,
21
+ postmarkServerToken
22
+ });
23
+ };
24
+ }
25
25
  //# sourceMappingURL=eventbridge-integration-service.js.map
@@ -1,5 +1,5 @@
1
- export * from './eventbridge-integration-service.js';
2
- export * from './ipdata-lookup-service.js';
3
- export * from './log-event-service.js';
4
- export * from './metric-event-service.js';
5
- export * from './db';
1
+ export * from './eventbridge-integration-service.js';
2
+ export * from './ipdata-lookup-service.js';
3
+ export * from './log-event-service.js';
4
+ export * from './metric-event-service.js';
5
+ export * from './db';
@@ -1,6 +1,6 @@
1
- export * from './eventbridge-integration-service.js';
2
- export * from './ipdata-lookup-service.js';
3
- export * from './log-event-service.js';
4
- export * from './metric-event-service.js';
5
- export * from './db';
1
+ export * from './eventbridge-integration-service.js';
2
+ export * from './ipdata-lookup-service.js';
3
+ export * from './log-event-service.js';
4
+ export * from './metric-event-service.js';
5
+ export * from './db';
6
6
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
- import { IPDataResponse } from '@adtrackify/at-tracking-event-types';
2
- export interface IPLookupTableRecord {
3
- ipAddress: string;
4
- lookupResponse: IPDataResponse | null;
5
- createdAt: string;
6
- updatedAt: string;
7
- }
8
- export declare const lookupIP: (ipAddress: string) => Promise<IPDataResponse | null>;
1
+ import { IPDataResponse } from '@adtrackify/at-tracking-event-types';
2
+ export interface IPLookupTableRecord {
3
+ ipAddress: string;
4
+ lookupResponse: IPDataResponse | null;
5
+ createdAt: string;
6
+ updatedAt: string;
7
+ }
8
+ export declare const lookupIP: (ipAddress: string) => Promise<IPDataResponse | null>;
@@ -1,56 +1,56 @@
1
- import { DateTime } from 'luxon';
2
- import { axiosHttpService, DynamoDbClient } from '../clients';
3
- import { Logger } from '../helpers';
4
- import { getCurrentTimestamp } from '../libs';
5
- import { isIP } from 'net';
6
- const API_KEY = 'aae45f1e1f97ecf79bdc2bef3e96ef71961c4cb977c3085429b421bc';
7
- const IP_LOOKUP_TABLE_NAME = process.env.IP_LOOKUP_TABLE_NAME;
8
- const getLookupApi = async (ipAddress) => {
9
- try {
10
- const client = axiosHttpService();
11
- const url = `https://api.ipdata.co/${ipAddress}?api-key=${API_KEY}`;
12
- const res = await client.get(url);
13
- return res?.data;
14
- }
15
- catch (error) {
16
- Logger.error('IPData Lookup API Failed', { error });
17
- return null;
18
- }
19
- };
20
- export const lookupIP = async (ipAddress) => {
21
- try {
22
- if (!ipAddress || isIP(ipAddress) === 0) {
23
- Logger.warn('Unable to lookup IP. Invalid Ip Address', { ipAddress });
24
- return null;
25
- }
26
- const cachedResult = await DynamoDbClient.safeGet(IP_LOOKUP_TABLE_NAME, 'ipAddress', ipAddress);
27
- const cacheExpirationDate = DateTime.utc().minus({ days: 2 }).toJSDate().toISOString();
28
- if (cachedResult && cachedResult?.updatedAt > cacheExpirationDate) {
29
- return cachedResult.lookupResponse;
30
- }
31
- const lookupResponse = await getLookupApi(ipAddress);
32
- let lookupTableRecord;
33
- if (cachedResult) {
34
- lookupTableRecord = {
35
- ...cachedResult,
36
- lookupResponse,
37
- updatedAt: getCurrentTimestamp(),
38
- };
39
- }
40
- else {
41
- lookupTableRecord = {
42
- ipAddress,
43
- lookupResponse,
44
- createdAt: getCurrentTimestamp(),
45
- updatedAt: getCurrentTimestamp()
46
- };
47
- }
48
- await DynamoDbClient.safePut(IP_LOOKUP_TABLE_NAME, lookupTableRecord);
49
- return lookupResponse;
50
- }
51
- catch (e) {
52
- Logger.error('Failed to lookup IP', { error: e });
53
- return null;
54
- }
55
- };
1
+ import { DateTime } from 'luxon';
2
+ import { axiosHttpService, DynamoDbClient } from '../clients';
3
+ import { Logger } from '../helpers';
4
+ import { getCurrentTimestamp } from '../libs';
5
+ import { isIP } from 'net';
6
+ const API_KEY = 'aae45f1e1f97ecf79bdc2bef3e96ef71961c4cb977c3085429b421bc';
7
+ const IP_LOOKUP_TABLE_NAME = process.env.IP_LOOKUP_TABLE_NAME;
8
+ const getLookupApi = async (ipAddress) => {
9
+ try {
10
+ const client = axiosHttpService();
11
+ const url = `https://api.ipdata.co/${ipAddress}?api-key=${API_KEY}`;
12
+ const res = await client.get(url);
13
+ return res?.data;
14
+ }
15
+ catch (error) {
16
+ Logger.error('IPData Lookup API Failed', { error });
17
+ return null;
18
+ }
19
+ };
20
+ export const lookupIP = async (ipAddress) => {
21
+ try {
22
+ if (!ipAddress || isIP(ipAddress) === 0) {
23
+ Logger.warn('Unable to lookup IP. Invalid Ip Address', { ipAddress });
24
+ return null;
25
+ }
26
+ const cachedResult = await DynamoDbClient.safeGet(IP_LOOKUP_TABLE_NAME, 'ipAddress', ipAddress);
27
+ const cacheExpirationDate = DateTime.utc().minus({ days: 6 }).toJSDate().toISOString();
28
+ if (cachedResult && cachedResult?.updatedAt > cacheExpirationDate) {
29
+ return cachedResult.lookupResponse;
30
+ }
31
+ const lookupResponse = await getLookupApi(ipAddress);
32
+ let lookupTableRecord;
33
+ if (cachedResult) {
34
+ lookupTableRecord = {
35
+ ...cachedResult,
36
+ lookupResponse,
37
+ updatedAt: getCurrentTimestamp(),
38
+ };
39
+ }
40
+ else {
41
+ lookupTableRecord = {
42
+ ipAddress,
43
+ lookupResponse,
44
+ createdAt: getCurrentTimestamp(),
45
+ updatedAt: getCurrentTimestamp()
46
+ };
47
+ }
48
+ await DynamoDbClient.safePut(IP_LOOKUP_TABLE_NAME, lookupTableRecord);
49
+ return lookupResponse;
50
+ }
51
+ catch (e) {
52
+ Logger.error('Failed to lookup IP', { error: e });
53
+ return null;
54
+ }
55
+ };
56
56
  //# sourceMappingURL=ipdata-lookup-service.js.map
@@ -1,9 +1,9 @@
1
- import { EventContext, LOG_EVENT_NAME, LogEvent, LogEventData, LogLevel, LogStorage } from '@adtrackify/at-tracking-event-types';
2
- export declare class LogEventService {
3
- private eventBridgeClient;
4
- private eventDetail;
5
- constructor(eventBusName: string);
6
- log: (source: string, pixelId: string, context: EventContext, logEventName: LOG_EVENT_NAME, logEventData: LogEventData, logId?: string) => Promise<void>;
7
- buildLogEvent: (pixelId: string, context: EventContext, logEventName: LOG_EVENT_NAME, logEventData: LogEventData, logId?: string) => LogEvent;
8
- buildLogEventData: (source: string, service: string, logLevel: LogLevel, message: string, logData?: any, logStorage?: LogStorage) => LogEventData;
9
- }
1
+ import { EventContext, LOG_EVENT_NAME, LogEvent, LogEventData, LogLevel, LogStorage } from '@adtrackify/at-tracking-event-types';
2
+ export declare class LogEventService {
3
+ private eventBridgeClient;
4
+ private eventDetail;
5
+ constructor(eventBusName: string);
6
+ log: (source: string, pixelId: string, context: EventContext, logEventName: LOG_EVENT_NAME, logEventData: LogEventData, logId?: string) => Promise<void>;
7
+ buildLogEvent: (pixelId: string, context: EventContext, logEventName: LOG_EVENT_NAME, logEventData: LogEventData, logId?: string) => LogEvent;
8
+ buildLogEventData: (source: string, service: string, logLevel: LogLevel, message: string, logData?: any, logStorage?: LogStorage) => LogEventData;
9
+ }
@@ -1,53 +1,53 @@
1
- import { INTERNAL_EVENT_TYPE } from '@adtrackify/at-tracking-event-types';
2
- import { EventBridgeClient } from '../clients';
3
- import { v4 as uuidv4 } from 'uuid';
4
- import { getCurrentTimestamp } from '../libs';
5
- const DEFAULT_LOG_STORAGE = {
6
- sendToDatadog: true,
7
- sendToEventDebugger: false,
8
- sendToSingleStore: false,
9
- };
10
- export class LogEventService {
11
- eventBridgeClient;
12
- eventDetail;
13
- constructor(eventBusName) {
14
- this.eventBridgeClient = new EventBridgeClient(eventBusName);
15
- this.eventDetail = 'incomingLogEvent';
16
- }
17
- log = async (source, pixelId, context, logEventName, logEventData, logId = uuidv4()) => {
18
- const logEvent = this.buildLogEvent(pixelId, context, logEventName, logEventData, logId);
19
- const eventData = {
20
- pixelId,
21
- logEvent
22
- };
23
- await this.eventBridgeClient.buildAndSendEvent(source, this.eventDetail, eventData);
24
- };
25
- buildLogEvent = (pixelId, context, logEventName, logEventData, logId = uuidv4()) => {
26
- const unixMsUtcTime = Date.now();
27
- const logEvent = {
28
- id: logId,
29
- pixelId,
30
- type: INTERNAL_EVENT_TYPE.LOG,
31
- name: logEventName,
32
- data: logEventData,
33
- version: '1.1.6',
34
- sentAtEpoch: unixMsUtcTime,
35
- collectedAt: getCurrentTimestamp(),
36
- source: 'server'
37
- };
38
- if (context)
39
- logEvent.context = context;
40
- return logEvent;
41
- };
42
- buildLogEventData = (source, service, logLevel, message, logData, logStorage = DEFAULT_LOG_STORAGE) => {
43
- return {
44
- source,
45
- service,
46
- logLevel,
47
- logMessage: message,
48
- ...logData,
49
- logStorage
50
- };
51
- };
52
- }
1
+ import { INTERNAL_EVENT_TYPE } from '@adtrackify/at-tracking-event-types';
2
+ import { EventBridgeClient } from '../clients';
3
+ import { v4 as uuidv4 } from 'uuid';
4
+ import { getCurrentTimestamp } from '../libs';
5
+ const DEFAULT_LOG_STORAGE = {
6
+ sendToDatadog: true,
7
+ sendToEventDebugger: false,
8
+ sendToSingleStore: false,
9
+ };
10
+ export class LogEventService {
11
+ eventBridgeClient;
12
+ eventDetail;
13
+ constructor(eventBusName) {
14
+ this.eventBridgeClient = new EventBridgeClient(eventBusName);
15
+ this.eventDetail = 'incomingLogEvent';
16
+ }
17
+ log = async (source, pixelId, context, logEventName, logEventData, logId = uuidv4()) => {
18
+ const logEvent = this.buildLogEvent(pixelId, context, logEventName, logEventData, logId);
19
+ const eventData = {
20
+ pixelId,
21
+ logEvent
22
+ };
23
+ await this.eventBridgeClient.buildAndSendEvent(source, this.eventDetail, eventData);
24
+ };
25
+ buildLogEvent = (pixelId, context, logEventName, logEventData, logId = uuidv4()) => {
26
+ const unixMsUtcTime = Date.now();
27
+ const logEvent = {
28
+ id: logId,
29
+ pixelId,
30
+ type: INTERNAL_EVENT_TYPE.LOG,
31
+ name: logEventName,
32
+ data: logEventData,
33
+ version: '1.1.6',
34
+ sentAtEpoch: unixMsUtcTime,
35
+ collectedAt: getCurrentTimestamp(),
36
+ source: 'server'
37
+ };
38
+ if (context)
39
+ logEvent.context = context;
40
+ return logEvent;
41
+ };
42
+ buildLogEventData = (source, service, logLevel, message, logData, logStorage = DEFAULT_LOG_STORAGE) => {
43
+ return {
44
+ source,
45
+ service,
46
+ logLevel,
47
+ logMessage: message,
48
+ ...logData,
49
+ logStorage
50
+ };
51
+ };
52
+ }
53
53
  //# sourceMappingURL=log-event-service.js.map
@@ -1,9 +1,9 @@
1
- import { EventContext, METRIC_EVENT_NAME, MetricEvent, MetricEventData } from '@adtrackify/at-tracking-event-types';
2
- export declare class MetricEventService {
3
- private eventBridgeClient;
4
- private eventDetail;
5
- constructor(eventBusName: string);
6
- metric: (source: string, pixelId: string, context: EventContext, metricName: METRIC_EVENT_NAME, metricData: MetricEventData[], metricId?: string) => Promise<void>;
7
- buildMetricEvent: (pixelId: string, context: EventContext, metricName: METRIC_EVENT_NAME, metricData: MetricEventData[], metricId?: string) => MetricEvent;
8
- buildMetricEventData: (recordName: string, recordValue: number, displayName: string, additionalMetricData?: {}) => MetricEventData;
9
- }
1
+ import { EventContext, METRIC_EVENT_NAME, MetricEvent, MetricEventData } from '@adtrackify/at-tracking-event-types';
2
+ export declare class MetricEventService {
3
+ private eventBridgeClient;
4
+ private eventDetail;
5
+ constructor(eventBusName: string);
6
+ metric: (source: string, pixelId: string, context: EventContext, metricName: METRIC_EVENT_NAME, metricData: MetricEventData[], metricId?: string) => Promise<void>;
7
+ buildMetricEvent: (pixelId: string, context: EventContext, metricName: METRIC_EVENT_NAME, metricData: MetricEventData[], metricId?: string) => MetricEvent;
8
+ buildMetricEventData: (recordName: string, recordValue: number, displayName: string, additionalMetricData?: {}) => MetricEventData;
9
+ }