@adtrackify/at-service-common 3.0.28 → 3.0.29

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 (199) 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/identity-client.js.map +1 -1
  30. package/dist/cjs/clients/internal-api/index.d.ts +7 -7
  31. package/dist/cjs/clients/internal-api/index.js +23 -23
  32. package/dist/cjs/clients/internal-api/shopify-app-install-client.d.ts +34 -34
  33. package/dist/cjs/clients/internal-api/shopify-app-install-client.js +63 -63
  34. package/dist/cjs/clients/internal-api/users-auth-client.d.ts +31 -31
  35. package/dist/cjs/clients/internal-api/users-auth-client.js +92 -92
  36. package/dist/cjs/clients/third-party/index.d.ts +1 -1
  37. package/dist/cjs/clients/third-party/index.js +17 -17
  38. package/dist/cjs/clients/third-party/shopify-client.d.ts +198 -198
  39. package/dist/cjs/clients/third-party/shopify-client.js +150 -150
  40. package/dist/cjs/helpers/index.d.ts +4 -4
  41. package/dist/cjs/helpers/index.js +20 -20
  42. package/dist/cjs/helpers/input-validation-helper.d.ts +3 -3
  43. package/dist/cjs/helpers/input-validation-helper.js +23 -23
  44. package/dist/cjs/helpers/logging-helper.d.ts +15 -15
  45. package/dist/cjs/helpers/logging-helper.js +80 -80
  46. package/dist/cjs/helpers/response-helper.d.ts +15 -15
  47. package/dist/cjs/helpers/response-helper.js +42 -42
  48. package/dist/cjs/helpers/shopify-helper.d.ts +9 -9
  49. package/dist/cjs/helpers/shopify-helper.js +28 -28
  50. package/dist/cjs/index.d.ts +5 -5
  51. package/dist/cjs/index.js +21 -21
  52. package/dist/cjs/libs/clickId-parser.d.ts +23 -23
  53. package/dist/cjs/libs/clickId-parser.js +49 -49
  54. package/dist/cjs/libs/crypto.d.ts +1 -1
  55. package/dist/cjs/libs/crypto.js +12 -12
  56. package/dist/cjs/libs/dates.d.ts +6 -6
  57. package/dist/cjs/libs/dates.js +31 -31
  58. package/dist/cjs/libs/http-error.d.ts +21 -21
  59. package/dist/cjs/libs/http-error.js +59 -59
  60. package/dist/cjs/libs/http-status-codes.d.ts +58 -58
  61. package/dist/cjs/libs/http-status-codes.js +62 -62
  62. package/dist/cjs/libs/index.d.ts +8 -8
  63. package/dist/cjs/libs/index.js +24 -24
  64. package/dist/cjs/libs/referrer-parser/index.d.ts +2 -2
  65. package/dist/cjs/libs/referrer-parser/index.js +18 -18
  66. package/dist/cjs/libs/referrer-parser/referrer-data.d.ts +9 -9
  67. package/dist/cjs/libs/referrer-parser/referrer-data.js +4712 -4712
  68. package/dist/cjs/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  69. package/dist/cjs/libs/referrer-parser/referrer-parser-util.js +128 -128
  70. package/dist/cjs/libs/url.d.ts +1 -1
  71. package/dist/cjs/libs/url.js +13 -13
  72. package/dist/cjs/services/db/destinations-service.d.ts +7 -7
  73. package/dist/cjs/services/db/destinations-service.js +35 -35
  74. package/dist/cjs/services/db/index.d.ts +4 -4
  75. package/dist/cjs/services/db/index.js +20 -20
  76. package/dist/cjs/services/db/log-events-data-service.d.ts +6 -6
  77. package/dist/cjs/services/db/log-events-data-service.js +31 -31
  78. package/dist/cjs/services/db/purchased-contacts-db-service.d.ts +9 -9
  79. package/dist/cjs/services/db/purchased-contacts-db-service.js +38 -38
  80. package/dist/cjs/services/db/tracking-events-db-service.d.ts +17 -17
  81. package/dist/cjs/services/db/tracking-events-db-service.js +134 -134
  82. package/dist/cjs/services/eventbridge-integration-service.d.ts +9 -9
  83. package/dist/cjs/services/eventbridge-integration-service.js +28 -28
  84. package/dist/cjs/services/index.d.ts +5 -5
  85. package/dist/cjs/services/index.js +21 -21
  86. package/dist/cjs/services/ipdata-lookup-service.d.ts +8 -8
  87. package/dist/cjs/services/ipdata-lookup-service.js +59 -59
  88. package/dist/cjs/services/log-event-service.d.ts +9 -9
  89. package/dist/cjs/services/log-event-service.js +56 -56
  90. package/dist/cjs/services/metric-event-service.d.ts +9 -9
  91. package/dist/cjs/services/metric-event-service.js +49 -49
  92. package/dist/cjs/types/api-response.d.ts +6 -6
  93. package/dist/cjs/types/api-response.js +2 -2
  94. package/dist/cjs/types/index.d.ts +1 -1
  95. package/dist/cjs/types/index.js +17 -17
  96. package/dist/cjs/types/internal-events/event-detail-types.d.ts +20 -20
  97. package/dist/cjs/types/internal-events/event-detail-types.js +27 -27
  98. package/dist/cjs/types/internal-events/index.d.ts +1 -1
  99. package/dist/cjs/types/internal-events/index.js +17 -17
  100. package/dist/esm/__tests__/s3-client/s3-client.spec.d.ts +1 -1
  101. package/dist/esm/__tests__/s3-client/s3-client.spec.js +24 -24
  102. package/dist/esm/clients/generic/cognito-client.d.ts +20 -20
  103. package/dist/esm/clients/generic/cognito-client.js +159 -159
  104. package/dist/esm/clients/generic/dynamodb-client.d.ts +16 -16
  105. package/dist/esm/clients/generic/dynamodb-client.js +140 -140
  106. package/dist/esm/clients/generic/eventbridge-client.d.ts +14 -14
  107. package/dist/esm/clients/generic/eventbridge-client.js +45 -45
  108. package/dist/esm/clients/generic/http-client.d.ts +88 -88
  109. package/dist/esm/clients/generic/http-client.js +48 -48
  110. package/dist/esm/clients/generic/index.d.ts +6 -6
  111. package/dist/esm/clients/generic/index.js +6 -6
  112. package/dist/esm/clients/generic/s3-client.d.ts +16 -16
  113. package/dist/esm/clients/generic/s3-client.js +106 -106
  114. package/dist/esm/clients/generic/sqs-client.d.ts +14 -14
  115. package/dist/esm/clients/generic/sqs-client.js +34 -34
  116. package/dist/esm/clients/index.d.ts +3 -3
  117. package/dist/esm/clients/index.js +3 -3
  118. package/dist/esm/clients/internal-api/accounts-client.d.ts +112 -112
  119. package/dist/esm/clients/internal-api/accounts-client.js +113 -113
  120. package/dist/esm/clients/internal-api/db-management-client.d.ts +18 -18
  121. package/dist/esm/clients/internal-api/db-management-client.js +32 -32
  122. package/dist/esm/clients/internal-api/destinations-client.d.ts +29 -29
  123. package/dist/esm/clients/internal-api/destinations-client.js +50 -50
  124. package/dist/esm/clients/internal-api/event-collector-client.d.ts +20 -20
  125. package/dist/esm/clients/internal-api/event-collector-client.js +32 -32
  126. package/dist/esm/clients/internal-api/identity-client.d.ts +17 -17
  127. package/dist/esm/clients/internal-api/identity-client.js +71 -71
  128. package/dist/esm/clients/internal-api/identity-client.js.map +1 -1
  129. package/dist/esm/clients/internal-api/index.d.ts +7 -7
  130. package/dist/esm/clients/internal-api/index.js +7 -7
  131. package/dist/esm/clients/internal-api/shopify-app-install-client.d.ts +34 -34
  132. package/dist/esm/clients/internal-api/shopify-app-install-client.js +56 -56
  133. package/dist/esm/clients/internal-api/users-auth-client.d.ts +31 -31
  134. package/dist/esm/clients/internal-api/users-auth-client.js +88 -88
  135. package/dist/esm/clients/third-party/index.d.ts +1 -1
  136. package/dist/esm/clients/third-party/index.js +1 -1
  137. package/dist/esm/clients/third-party/shopify-client.d.ts +198 -198
  138. package/dist/esm/clients/third-party/shopify-client.js +146 -146
  139. package/dist/esm/helpers/index.d.ts +4 -4
  140. package/dist/esm/helpers/index.js +4 -4
  141. package/dist/esm/helpers/input-validation-helper.d.ts +3 -3
  142. package/dist/esm/helpers/input-validation-helper.js +19 -19
  143. package/dist/esm/helpers/logging-helper.d.ts +15 -15
  144. package/dist/esm/helpers/logging-helper.js +53 -53
  145. package/dist/esm/helpers/response-helper.d.ts +15 -15
  146. package/dist/esm/helpers/response-helper.js +36 -36
  147. package/dist/esm/helpers/shopify-helper.d.ts +9 -9
  148. package/dist/esm/helpers/shopify-helper.js +23 -23
  149. package/dist/esm/index.d.ts +5 -5
  150. package/dist/esm/index.js +5 -5
  151. package/dist/esm/libs/clickId-parser.d.ts +23 -23
  152. package/dist/esm/libs/clickId-parser.js +45 -45
  153. package/dist/esm/libs/crypto.d.ts +1 -1
  154. package/dist/esm/libs/crypto.js +5 -5
  155. package/dist/esm/libs/dates.d.ts +6 -6
  156. package/dist/esm/libs/dates.js +22 -22
  157. package/dist/esm/libs/http-error.d.ts +21 -21
  158. package/dist/esm/libs/http-error.js +55 -55
  159. package/dist/esm/libs/http-status-codes.d.ts +58 -58
  160. package/dist/esm/libs/http-status-codes.js +59 -59
  161. package/dist/esm/libs/index.d.ts +8 -8
  162. package/dist/esm/libs/index.js +8 -8
  163. package/dist/esm/libs/referrer-parser/index.d.ts +2 -2
  164. package/dist/esm/libs/referrer-parser/index.js +2 -2
  165. package/dist/esm/libs/referrer-parser/referrer-data.d.ts +9 -9
  166. package/dist/esm/libs/referrer-parser/referrer-data.js +4709 -4709
  167. package/dist/esm/libs/referrer-parser/referrer-parser-util.d.ts +20 -20
  168. package/dist/esm/libs/referrer-parser/referrer-parser-util.js +121 -121
  169. package/dist/esm/libs/url.d.ts +1 -1
  170. package/dist/esm/libs/url.js +9 -9
  171. package/dist/esm/services/db/destinations-service.d.ts +7 -7
  172. package/dist/esm/services/db/destinations-service.js +31 -31
  173. package/dist/esm/services/db/index.d.ts +4 -4
  174. package/dist/esm/services/db/index.js +4 -4
  175. package/dist/esm/services/db/log-events-data-service.d.ts +6 -6
  176. package/dist/esm/services/db/log-events-data-service.js +27 -27
  177. package/dist/esm/services/db/purchased-contacts-db-service.d.ts +9 -9
  178. package/dist/esm/services/db/purchased-contacts-db-service.js +34 -34
  179. package/dist/esm/services/db/tracking-events-db-service.d.ts +17 -17
  180. package/dist/esm/services/db/tracking-events-db-service.js +130 -130
  181. package/dist/esm/services/eventbridge-integration-service.d.ts +9 -9
  182. package/dist/esm/services/eventbridge-integration-service.js +24 -24
  183. package/dist/esm/services/index.d.ts +5 -5
  184. package/dist/esm/services/index.js +5 -5
  185. package/dist/esm/services/ipdata-lookup-service.d.ts +8 -8
  186. package/dist/esm/services/ipdata-lookup-service.js +55 -55
  187. package/dist/esm/services/log-event-service.d.ts +9 -9
  188. package/dist/esm/services/log-event-service.js +52 -52
  189. package/dist/esm/services/metric-event-service.d.ts +9 -9
  190. package/dist/esm/services/metric-event-service.js +45 -45
  191. package/dist/esm/types/api-response.d.ts +6 -6
  192. package/dist/esm/types/api-response.js +1 -1
  193. package/dist/esm/types/index.d.ts +1 -1
  194. package/dist/esm/types/index.js +1 -1
  195. package/dist/esm/types/internal-events/event-detail-types.d.ts +20 -20
  196. package/dist/esm/types/internal-events/event-detail-types.js +24 -24
  197. package/dist/esm/types/internal-events/index.d.ts +1 -1
  198. package/dist/esm/types/internal-events/index.js +1 -1
  199. package/package.json +3 -3
@@ -1,17 +1,17 @@
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
- getLatestSessionByIpAddressUserAgent: (indexName: string, ipAddressUserAgent: string, hostname?: string) => Promise<LatestSessionResponseData>;
13
- getTrackingEventsByPixelIdEventName: (indexName: string, pixelId: string, eventName: string, limit?: number, afterCollectedAt?: string) => Promise<TrackingEventRecord[]>;
14
- getTrackingEventCountByPixelId: (indexName: string, pixelId: string, offsetInMinutes?: number) => Promise<number>;
15
- getTrackingEvent: (eventId: string) => Promise<TrackingEventRecord | null>;
16
- putTrackingEvent: (trackingEvent: TrackingEvent, ttlInDays?: number) => Promise<import("@aws-sdk/lib-dynamodb").PutCommandOutput | null | undefined>;
17
- }
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
+ getLatestSessionByIpAddressUserAgent: (indexName: string, ipAddressUserAgent: string, hostname?: string) => Promise<LatestSessionResponseData>;
13
+ getTrackingEventsByPixelIdEventName: (indexName: string, pixelId: string, eventName: string, limit?: number, afterCollectedAt?: string) => Promise<TrackingEventRecord[]>;
14
+ getTrackingEventCountByPixelId: (indexName: string, pixelId: string, offsetInMinutes?: number) => Promise<number>;
15
+ getTrackingEvent: (eventId: string) => Promise<TrackingEventRecord | null>;
16
+ putTrackingEvent: (trackingEvent: TrackingEvent, ttlInDays?: number) => Promise<import("@aws-sdk/lib-dynamodb").PutCommandOutput | null | undefined>;
17
+ }
@@ -1,135 +1,135 @@
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
- class TrackingEventsDbService {
8
- TABLE_NAME;
9
- KEY_NAME = 'eventId';
10
- constructor(tableName) {
11
- this.TABLE_NAME = tableName;
12
- }
13
- getLatestSessionByIpAddressUserAgent = async (indexName, ipAddressUserAgent, hostname) => {
14
- try {
15
- const params = {
16
- TableName: this.TABLE_NAME,
17
- IndexName: indexName,
18
- KeyConditionExpression: 'ipAddressUserAgent = :ipAddressUserAgent',
19
- ExpressionAttributeValues: {
20
- ':ipAddressUserAgent': ipAddressUserAgent,
21
- },
22
- ScanIndexForward: false
23
- };
24
- const results = await clients_1.DynamoDbClient.query(params);
25
- let trackingEventRecord;
26
- if (results?.Items && results.Items.length > 0) {
27
- trackingEventRecord = results.Items.find((item) => {
28
- const _trackingEvent = item.trackingEvent;
29
- const _hostname = item?.hostname;
30
- if (hostname && _hostname === hostname && _trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
31
- return true;
32
- }
33
- else if (_trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
34
- return true;
35
- }
36
- else {
37
- return false;
38
- }
39
- });
40
- }
41
- if (trackingEventRecord) {
42
- const trackingEvent = trackingEventRecord.trackingEvent;
43
- return {
44
- pixelId: trackingEvent?.pixelId,
45
- identityId: trackingEvent.context?.identity?.identityId,
46
- sessionId: trackingEvent.context?.properties?.sessionId,
47
- click: trackingEvent.context?.properties?.click
48
- };
49
- }
50
- else {
51
- return {};
52
- }
53
- }
54
- catch (e) {
55
- helpers_1.Logger.error('Failed to getLastTrackingEventByIpAddressUserAgent', { e });
56
- return {};
57
- }
58
- };
59
- getTrackingEventsByPixelIdEventName = async (indexName, pixelId, eventName, limit, afterCollectedAt) => {
60
- const query = {
61
- TableName: this.TABLE_NAME,
62
- IndexName: indexName,
63
- KeyConditionExpression: 'pixelIdEventName = :pixelIdEventName',
64
- ExpressionAttributeValues: {
65
- ':pixelIdEventName': `${pixelId}_${eventName}`,
66
- },
67
- ScanIndexForward: false,
68
- };
69
- if (limit) {
70
- query.Limit = limit;
71
- }
72
- if (afterCollectedAt) {
73
- query.KeyConditionExpression += ' and collectedAt > :collectedAt';
74
- query.ExpressionAttributeValues[':collectedAt'] = afterCollectedAt;
75
- }
76
- const trackingEventsResponse = await clients_1.DynamoDbClient.query(query);
77
- return trackingEventsResponse?.Items ?? [];
78
- };
79
- getTrackingEventCountByPixelId = async (indexName, pixelId, offsetInMinutes = 30) => {
80
- try {
81
- const pastDateTime = luxon_1.DateTime.now().minus({ minutes: offsetInMinutes }).toISO();
82
- const params = {
83
- TableName: this.TABLE_NAME,
84
- IndexName: indexName,
85
- KeyConditionExpression: 'pixelId = :pixelId and collectedAt > :collectedAt',
86
- ExpressionAttributeValues: {
87
- ':pixelId': pixelId,
88
- ':collectedAt': pastDateTime
89
- }
90
- };
91
- const results = await clients_1.DynamoDbClient.query(params);
92
- return results?.Items?.length ?? 0;
93
- }
94
- catch (e) {
95
- helpers_1.Logger.error('Failed to getTrackingEventCountByPixelId', { e });
96
- return 0;
97
- }
98
- };
99
- getTrackingEvent = async (eventId) => {
100
- try {
101
- const eventRecord = await clients_1.DynamoDbClient.safeGet(this.TABLE_NAME, this.KEY_NAME, eventId);
102
- return eventRecord;
103
- }
104
- catch (e) {
105
- helpers_1.Logger.error('Failed to getTrackingEvent', { e });
106
- return null;
107
- }
108
- };
109
- putTrackingEvent = async (trackingEvent, ttlInDays) => {
110
- if (!trackingEvent.context?.properties?.ipAddress || !trackingEvent.context?.properties?.userAgent)
111
- return;
112
- const pageURL = trackingEvent?.context?.properties?.page?.url;
113
- const parsedPageURL = new URL(pageURL);
114
- const hostname = parsedPageURL?.hostname;
115
- const trackingEventsTableTTLDays = ttlInDays || 15;
116
- const expiredAt = luxon_1.DateTime.now().plus({ days: trackingEventsTableTTLDays }).toSeconds();
117
- const trackingEventRecord = {
118
- eventId: trackingEvent.id,
119
- eventName: trackingEvent.name,
120
- trackingEvent,
121
- pixelId: trackingEvent?.pixelId,
122
- pixelIdEventName: `${trackingEvent.pixelId}_${trackingEvent.name}`,
123
- ipAddressUserAgent: `${trackingEvent.context?.properties?.ipAddress}_${trackingEvent.context?.properties?.userAgent}`,
124
- hostname,
125
- identityId: trackingEvent?.context?.identity?.identityId,
126
- sessionId: trackingEvent?.context?.properties?.sessionId,
127
- collectedAt: trackingEvent.collectedAt,
128
- expiredAt,
129
- };
130
- helpers_1.Logger.debug('Put tracking event', { trackingEventRecord, expiredAtType: typeof expiredAt });
131
- return await clients_1.DynamoDbClient.safePut(this.TABLE_NAME, trackingEventRecord);
132
- };
133
- }
134
- 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
+ class TrackingEventsDbService {
8
+ TABLE_NAME;
9
+ KEY_NAME = 'eventId';
10
+ constructor(tableName) {
11
+ this.TABLE_NAME = tableName;
12
+ }
13
+ getLatestSessionByIpAddressUserAgent = async (indexName, ipAddressUserAgent, hostname) => {
14
+ try {
15
+ const params = {
16
+ TableName: this.TABLE_NAME,
17
+ IndexName: indexName,
18
+ KeyConditionExpression: 'ipAddressUserAgent = :ipAddressUserAgent',
19
+ ExpressionAttributeValues: {
20
+ ':ipAddressUserAgent': ipAddressUserAgent,
21
+ },
22
+ ScanIndexForward: false
23
+ };
24
+ const results = await clients_1.DynamoDbClient.query(params);
25
+ let trackingEventRecord;
26
+ if (results?.Items && results.Items.length > 0) {
27
+ trackingEventRecord = results.Items.find((item) => {
28
+ const _trackingEvent = item.trackingEvent;
29
+ const _hostname = item?.hostname;
30
+ if (hostname && _hostname === hostname && _trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
31
+ return true;
32
+ }
33
+ else if (_trackingEvent.context?.identity?.identityId && _trackingEvent.context.properties?.sessionId) {
34
+ return true;
35
+ }
36
+ else {
37
+ return false;
38
+ }
39
+ });
40
+ }
41
+ if (trackingEventRecord) {
42
+ const trackingEvent = trackingEventRecord.trackingEvent;
43
+ return {
44
+ pixelId: trackingEvent?.pixelId,
45
+ identityId: trackingEvent.context?.identity?.identityId,
46
+ sessionId: trackingEvent.context?.properties?.sessionId,
47
+ click: trackingEvent.context?.properties?.click
48
+ };
49
+ }
50
+ else {
51
+ return {};
52
+ }
53
+ }
54
+ catch (e) {
55
+ helpers_1.Logger.error('Failed to getLastTrackingEventByIpAddressUserAgent', { e });
56
+ return {};
57
+ }
58
+ };
59
+ getTrackingEventsByPixelIdEventName = async (indexName, pixelId, eventName, limit, afterCollectedAt) => {
60
+ const query = {
61
+ TableName: this.TABLE_NAME,
62
+ IndexName: indexName,
63
+ KeyConditionExpression: 'pixelIdEventName = :pixelIdEventName',
64
+ ExpressionAttributeValues: {
65
+ ':pixelIdEventName': `${pixelId}_${eventName}`,
66
+ },
67
+ ScanIndexForward: false,
68
+ };
69
+ if (limit) {
70
+ query.Limit = limit;
71
+ }
72
+ if (afterCollectedAt) {
73
+ query.KeyConditionExpression += ' and collectedAt > :collectedAt';
74
+ query.ExpressionAttributeValues[':collectedAt'] = afterCollectedAt;
75
+ }
76
+ const trackingEventsResponse = await clients_1.DynamoDbClient.query(query);
77
+ return trackingEventsResponse?.Items ?? [];
78
+ };
79
+ getTrackingEventCountByPixelId = async (indexName, pixelId, offsetInMinutes = 30) => {
80
+ try {
81
+ const pastDateTime = luxon_1.DateTime.now().minus({ minutes: offsetInMinutes }).toISO();
82
+ const params = {
83
+ TableName: this.TABLE_NAME,
84
+ IndexName: indexName,
85
+ KeyConditionExpression: 'pixelId = :pixelId and collectedAt > :collectedAt',
86
+ ExpressionAttributeValues: {
87
+ ':pixelId': pixelId,
88
+ ':collectedAt': pastDateTime
89
+ }
90
+ };
91
+ const results = await clients_1.DynamoDbClient.query(params);
92
+ return results?.Items?.length ?? 0;
93
+ }
94
+ catch (e) {
95
+ helpers_1.Logger.error('Failed to getTrackingEventCountByPixelId', { e });
96
+ return 0;
97
+ }
98
+ };
99
+ getTrackingEvent = async (eventId) => {
100
+ try {
101
+ const eventRecord = await clients_1.DynamoDbClient.safeGet(this.TABLE_NAME, this.KEY_NAME, eventId);
102
+ return eventRecord;
103
+ }
104
+ catch (e) {
105
+ helpers_1.Logger.error('Failed to getTrackingEvent', { e });
106
+ return null;
107
+ }
108
+ };
109
+ putTrackingEvent = async (trackingEvent, ttlInDays) => {
110
+ if (!trackingEvent.context?.properties?.ipAddress || !trackingEvent.context?.properties?.userAgent)
111
+ return;
112
+ const pageURL = trackingEvent?.context?.properties?.page?.url;
113
+ const parsedPageURL = new URL(pageURL);
114
+ const hostname = parsedPageURL?.hostname;
115
+ const trackingEventsTableTTLDays = ttlInDays || 15;
116
+ const expiredAt = luxon_1.DateTime.now().plus({ days: trackingEventsTableTTLDays }).toSeconds();
117
+ const trackingEventRecord = {
118
+ eventId: trackingEvent.id,
119
+ eventName: trackingEvent.name,
120
+ trackingEvent,
121
+ pixelId: trackingEvent?.pixelId,
122
+ pixelIdEventName: `${trackingEvent.pixelId}_${trackingEvent.name}`,
123
+ ipAddressUserAgent: `${trackingEvent.context?.properties?.ipAddress}_${trackingEvent.context?.properties?.userAgent}`,
124
+ hostname,
125
+ identityId: trackingEvent?.context?.identity?.identityId,
126
+ sessionId: trackingEvent?.context?.properties?.sessionId,
127
+ collectedAt: trackingEvent.collectedAt,
128
+ expiredAt,
129
+ };
130
+ helpers_1.Logger.debug('Put tracking event', { trackingEventRecord, expiredAtType: typeof expiredAt });
131
+ return await clients_1.DynamoDbClient.safePut(this.TABLE_NAME, trackingEventRecord);
132
+ };
133
+ }
134
+ exports.TrackingEventsDbService = TrackingEventsDbService;
135
135
  //# 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
@@ -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,22 +1,22 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./eventbridge-integration-service.js"), exports);
18
- __exportStar(require("./ipdata-lookup-service.js"), exports);
19
- __exportStar(require("./log-event-service.js"), exports);
20
- __exportStar(require("./metric-event-service.js"), exports);
21
- __exportStar(require("./db"), exports);
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./eventbridge-integration-service.js"), exports);
18
+ __exportStar(require("./ipdata-lookup-service.js"), exports);
19
+ __exportStar(require("./log-event-service.js"), exports);
20
+ __exportStar(require("./metric-event-service.js"), exports);
21
+ __exportStar(require("./db"), exports);
22
22
  //# 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,60 +1,60 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.lookupIP = void 0;
4
- const luxon_1 = require("luxon");
5
- const clients_1 = require("../clients");
6
- const helpers_1 = require("../helpers");
7
- const libs_1 = require("../libs");
8
- const net_1 = require("net");
9
- const API_KEY = 'aae45f1e1f97ecf79bdc2bef3e96ef71961c4cb977c3085429b421bc';
10
- const IP_LOOKUP_TABLE_NAME = process.env.IP_LOOKUP_TABLE_NAME;
11
- const getLookupApi = async (ipAddress) => {
12
- try {
13
- const client = (0, clients_1.axiosHttpService)();
14
- const url = `https://api.ipdata.co/${ipAddress}?api-key=${API_KEY}`;
15
- const res = await client.get(url);
16
- return res?.data;
17
- }
18
- catch (error) {
19
- helpers_1.Logger.error('IPData Lookup API Failed', { error });
20
- return null;
21
- }
22
- };
23
- const lookupIP = async (ipAddress) => {
24
- try {
25
- if (!ipAddress || (0, net_1.isIP)(ipAddress) === 0) {
26
- helpers_1.Logger.warn('Unable to lookup IP. Invalid Ip Address', { ipAddress });
27
- return null;
28
- }
29
- const cachedResult = await clients_1.DynamoDbClient.safeGet(IP_LOOKUP_TABLE_NAME, 'ipAddress', ipAddress);
30
- const cacheExpirationDate = luxon_1.DateTime.utc().minus({ days: 2 }).toJSDate().toISOString();
31
- if (cachedResult && cachedResult?.updatedAt > cacheExpirationDate) {
32
- return cachedResult.lookupResponse;
33
- }
34
- const lookupResponse = await getLookupApi(ipAddress);
35
- let lookupTableRecord;
36
- if (cachedResult) {
37
- lookupTableRecord = {
38
- ...cachedResult,
39
- lookupResponse,
40
- updatedAt: (0, libs_1.getCurrentTimestamp)(),
41
- };
42
- }
43
- else {
44
- lookupTableRecord = {
45
- ipAddress,
46
- lookupResponse,
47
- createdAt: (0, libs_1.getCurrentTimestamp)(),
48
- updatedAt: (0, libs_1.getCurrentTimestamp)()
49
- };
50
- }
51
- await clients_1.DynamoDbClient.safePut(IP_LOOKUP_TABLE_NAME, lookupTableRecord);
52
- return lookupResponse;
53
- }
54
- catch (e) {
55
- helpers_1.Logger.error('Failed to lookup IP', { error: e });
56
- return null;
57
- }
58
- };
59
- exports.lookupIP = lookupIP;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lookupIP = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const clients_1 = require("../clients");
6
+ const helpers_1 = require("../helpers");
7
+ const libs_1 = require("../libs");
8
+ const net_1 = require("net");
9
+ const API_KEY = 'aae45f1e1f97ecf79bdc2bef3e96ef71961c4cb977c3085429b421bc';
10
+ const IP_LOOKUP_TABLE_NAME = process.env.IP_LOOKUP_TABLE_NAME;
11
+ const getLookupApi = async (ipAddress) => {
12
+ try {
13
+ const client = (0, clients_1.axiosHttpService)();
14
+ const url = `https://api.ipdata.co/${ipAddress}?api-key=${API_KEY}`;
15
+ const res = await client.get(url);
16
+ return res?.data;
17
+ }
18
+ catch (error) {
19
+ helpers_1.Logger.error('IPData Lookup API Failed', { error });
20
+ return null;
21
+ }
22
+ };
23
+ const lookupIP = async (ipAddress) => {
24
+ try {
25
+ if (!ipAddress || (0, net_1.isIP)(ipAddress) === 0) {
26
+ helpers_1.Logger.warn('Unable to lookup IP. Invalid Ip Address', { ipAddress });
27
+ return null;
28
+ }
29
+ const cachedResult = await clients_1.DynamoDbClient.safeGet(IP_LOOKUP_TABLE_NAME, 'ipAddress', ipAddress);
30
+ const cacheExpirationDate = luxon_1.DateTime.utc().minus({ days: 2 }).toJSDate().toISOString();
31
+ if (cachedResult && cachedResult?.updatedAt > cacheExpirationDate) {
32
+ return cachedResult.lookupResponse;
33
+ }
34
+ const lookupResponse = await getLookupApi(ipAddress);
35
+ let lookupTableRecord;
36
+ if (cachedResult) {
37
+ lookupTableRecord = {
38
+ ...cachedResult,
39
+ lookupResponse,
40
+ updatedAt: (0, libs_1.getCurrentTimestamp)(),
41
+ };
42
+ }
43
+ else {
44
+ lookupTableRecord = {
45
+ ipAddress,
46
+ lookupResponse,
47
+ createdAt: (0, libs_1.getCurrentTimestamp)(),
48
+ updatedAt: (0, libs_1.getCurrentTimestamp)()
49
+ };
50
+ }
51
+ await clients_1.DynamoDbClient.safePut(IP_LOOKUP_TABLE_NAME, lookupTableRecord);
52
+ return lookupResponse;
53
+ }
54
+ catch (e) {
55
+ helpers_1.Logger.error('Failed to lookup IP', { error: e });
56
+ return null;
57
+ }
58
+ };
59
+ exports.lookupIP = lookupIP;
60
60
  //# 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
+ }