@adtrackify/at-service-common 4.0.28 → 4.0.31
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.
- package/dist/cjs/__tests__/services/events/collect-queue-tracking-service.spec.js +56 -4
- package/dist/cjs/__tests__/services/events/collect-queue-tracking-service.spec.js.map +1 -1
- package/dist/cjs/__tests__/services/events/tracking-event-sqs-service.spec.js +32 -12
- package/dist/cjs/__tests__/services/events/tracking-event-sqs-service.spec.js.map +1 -1
- package/dist/cjs/clients/third-party/shopify/graphql-analytics-queries.d.ts +18 -0
- package/dist/cjs/clients/third-party/shopify/graphql-analytics-queries.js +23 -0
- package/dist/cjs/clients/third-party/shopify/graphql-analytics-queries.js.map +1 -0
- package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.d.ts +32 -0
- package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.js +191 -0
- package/dist/cjs/clients/third-party/shopify/shopify-graphql-client.js.map +1 -1
- package/dist/cjs/services/events/build-collect-queue-tracking-event.d.ts +0 -3
- package/dist/cjs/services/events/build-collect-queue-tracking-event.js +1 -3
- package/dist/cjs/services/events/build-collect-queue-tracking-event.js.map +1 -1
- package/dist/cjs/services/events/collect-queue-tracking-service.d.ts +5 -2
- package/dist/cjs/services/events/collect-queue-tracking-service.js +4 -4
- package/dist/cjs/services/events/collect-queue-tracking-service.js.map +1 -1
- package/dist/cjs/services/events/tracking-event-sqs-service.d.ts +1 -1
- package/dist/cjs/services/events/tracking-event-sqs-service.js +3 -3
- package/dist/cjs/services/events/tracking-event-sqs-service.js.map +1 -1
- package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.js +56 -4
- package/dist/esm/__tests__/services/events/collect-queue-tracking-service.spec.js.map +1 -1
- package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.js +33 -13
- package/dist/esm/__tests__/services/events/tracking-event-sqs-service.spec.js.map +1 -1
- package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.d.ts +18 -0
- package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.js +20 -0
- package/dist/esm/clients/third-party/shopify/graphql-analytics-queries.js.map +1 -0
- package/dist/esm/clients/third-party/shopify/shopify-graphql-client.d.ts +32 -0
- package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js +191 -0
- package/dist/esm/clients/third-party/shopify/shopify-graphql-client.js.map +1 -1
- package/dist/esm/services/events/build-collect-queue-tracking-event.d.ts +0 -3
- package/dist/esm/services/events/build-collect-queue-tracking-event.js +0 -2
- package/dist/esm/services/events/build-collect-queue-tracking-event.js.map +1 -1
- package/dist/esm/services/events/collect-queue-tracking-service.d.ts +5 -2
- package/dist/esm/services/events/collect-queue-tracking-service.js +4 -4
- package/dist/esm/services/events/collect-queue-tracking-service.js.map +1 -1
- package/dist/esm/services/events/tracking-event-sqs-service.d.ts +1 -1
- package/dist/esm/services/events/tracking-event-sqs-service.js +3 -3
- package/dist/esm/services/events/tracking-event-sqs-service.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { TrackingEvent, TrackingEventData } from '@adtrackify/at-tracking-event-types';
|
|
2
2
|
import { BuildTrackingEventParams } from './build-collect-queue-tracking-event.js';
|
|
3
|
+
export interface CollectQueueEmitOptions {
|
|
4
|
+
delaySeconds?: number;
|
|
5
|
+
}
|
|
3
6
|
export declare class CollectQueueTrackingService {
|
|
4
7
|
private readonly trackingEventSqsService;
|
|
5
8
|
constructor(region: string, awsAccountId: string, queueName: string);
|
|
6
9
|
buildEvent<TData extends TrackingEventData = TrackingEventData>(params: BuildTrackingEventParams<TData>): TrackingEvent;
|
|
7
|
-
send(trackingEvent: TrackingEvent): Promise<boolean>;
|
|
8
|
-
emit<TData extends TrackingEventData = TrackingEventData>(params: BuildTrackingEventParams<TData
|
|
10
|
+
send(trackingEvent: TrackingEvent, options?: CollectQueueEmitOptions): Promise<boolean>;
|
|
11
|
+
emit<TData extends TrackingEventData = TrackingEventData>(params: BuildTrackingEventParams<TData>, options?: CollectQueueEmitOptions): Promise<boolean>;
|
|
9
12
|
}
|
|
@@ -11,12 +11,12 @@ class CollectQueueTrackingService {
|
|
|
11
11
|
buildEvent(params) {
|
|
12
12
|
return (0, build_collect_queue_tracking_event_js_1.buildTrackingEvent)(params);
|
|
13
13
|
}
|
|
14
|
-
async send(trackingEvent) {
|
|
15
|
-
return this.trackingEventSqsService.sendTrackingEventSqsMessage(trackingEvent);
|
|
14
|
+
async send(trackingEvent, options) {
|
|
15
|
+
return this.trackingEventSqsService.sendTrackingEventSqsMessage(trackingEvent, options?.delaySeconds ?? 0);
|
|
16
16
|
}
|
|
17
|
-
async emit(params) {
|
|
17
|
+
async emit(params, options) {
|
|
18
18
|
const trackingEvent = this.buildEvent(params);
|
|
19
|
-
return this.send(trackingEvent);
|
|
19
|
+
return this.send(trackingEvent, options);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
exports.CollectQueueTrackingService = CollectQueueTrackingService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect-queue-tracking-service.js","sourceRoot":"","sources":["../../../../src/services/events/collect-queue-tracking-service.ts"],"names":[],"mappings":";;;AACA,mGAGiD;AACjD,mFAA0E;
|
|
1
|
+
{"version":3,"file":"collect-queue-tracking-service.js","sourceRoot":"","sources":["../../../../src/services/events/collect-queue-tracking-service.ts"],"names":[],"mappings":";;;AACA,mGAGiD;AACjD,mFAA0E;AAW1E,MAAa,2BAA2B;IACrB,uBAAuB,CAA0B;IAElE,YAAY,MAAc,EAAE,YAAoB,EAAE,SAAiB;QACjE,IAAI,CAAC,uBAAuB,GAAG,IAAI,uDAAuB,CACxD,MAAM,EACN,YAAY,EACZ,SAAS,CACV,CAAC;IACJ,CAAC;IAGD,UAAU,CACR,MAAuC;QAEvC,OAAO,IAAA,0DAAkB,EAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAGD,KAAK,CAAC,IAAI,CACR,aAA4B,EAC5B,OAAiC;QAEjC,OAAO,IAAI,CAAC,uBAAuB,CAAC,2BAA2B,CAC7D,aAAa,EACb,OAAO,EAAE,YAAY,IAAI,CAAC,CAC3B,CAAC;IACJ,CAAC;IAGD,KAAK,CAAC,IAAI,CACR,MAAuC,EACvC,OAAiC;QAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;CACF;AArCD,kEAqCC"}
|
|
@@ -4,5 +4,5 @@ export declare class TrackingEventSqsService {
|
|
|
4
4
|
private awsAccountId;
|
|
5
5
|
private sqsClient;
|
|
6
6
|
constructor(region: string, awsAccountId: string, trackEventCollectQueueName: string);
|
|
7
|
-
sendTrackingEventSqsMessage: (trackingEvent: TrackingEvent) => Promise<boolean>;
|
|
7
|
+
sendTrackingEventSqsMessage: (trackingEvent: TrackingEvent, delaySeconds?: number) => Promise<boolean>;
|
|
8
8
|
}
|
|
@@ -12,12 +12,12 @@ class TrackingEventSqsService {
|
|
|
12
12
|
this.awsAccountId = awsAccountId;
|
|
13
13
|
this.sqsClient = new clients_1.SQSClient(region, awsAccountId, trackEventCollectQueueName);
|
|
14
14
|
}
|
|
15
|
-
sendTrackingEventSqsMessage = async (trackingEvent) => {
|
|
15
|
+
sendTrackingEventSqsMessage = async (trackingEvent, delaySeconds = 0) => {
|
|
16
16
|
try {
|
|
17
17
|
const pixelId = trackingEvent.pixelId;
|
|
18
18
|
const eventPayload = { pixelId, trackingEvent };
|
|
19
|
-
helpers_1.Logger.debug('Sending tracking event to sqs', { eventPayload });
|
|
20
|
-
await this.sqsClient.sendMessage(eventPayload);
|
|
19
|
+
helpers_1.Logger.debug('Sending tracking event to sqs', { eventPayload, delaySeconds });
|
|
20
|
+
await this.sqsClient.sendMessage(eventPayload, delaySeconds);
|
|
21
21
|
return true;
|
|
22
22
|
}
|
|
23
23
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracking-event-sqs-service.js","sourceRoot":"","sources":["../../../../src/services/events/tracking-event-sqs-service.ts"],"names":[],"mappings":";;;AACA,2CAA0C;AAC1C,2CAAuC;AAEvC,MAAa,uBAAuB;IAC1B,MAAM,CAAS;IACf,YAAY,CAAS;IACrB,SAAS,CAAY;IAE7B,YAAY,MAAc,EAAE,YAAoB,EAAE,0BAAkC;QAClF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAS,CAAC,MAAM,EAAE,YAAY,EAAE,0BAA0B,CAAC,CAAC;IACnF,CAAC;IAEM,2BAA2B,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"tracking-event-sqs-service.js","sourceRoot":"","sources":["../../../../src/services/events/tracking-event-sqs-service.ts"],"names":[],"mappings":";;;AACA,2CAA0C;AAC1C,2CAAuC;AAEvC,MAAa,uBAAuB;IAC1B,MAAM,CAAS;IACf,YAAY,CAAS;IACrB,SAAS,CAAY;IAE7B,YAAY,MAAc,EAAE,YAAoB,EAAE,0BAAkC;QAClF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAS,CAAC,MAAM,EAAE,YAAY,EAAE,0BAA0B,CAAC,CAAC;IACnF,CAAC;IAEM,2BAA2B,GAAG,KAAK,EACxC,aAA4B,EAC5B,YAAY,GAAG,CAAC,EAChB,EAAE;QACF,IAAI;YACF,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;YACtC,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YAChD,gBAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;YAC9E,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,KAAK,EAAE;YACd,gBAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE;gBACnD,KAAK;gBACL,YAAY,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACpE,OAAO,EAAE,aAAa,EAAE,OAAO;gBAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,aAAa;aACd,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;SACd;IACH,CAAC,CAAC;CACH;AAjCD,0DAiCC"}
|
|
@@ -89,7 +89,7 @@ describe('CollectQueueTrackingService', () => {
|
|
|
89
89
|
});
|
|
90
90
|
const result = await service.send(event);
|
|
91
91
|
expect(result).toBe(true);
|
|
92
|
-
expect(mockSendTrackingEventSqsMessage).toHaveBeenCalledWith(event);
|
|
92
|
+
expect(mockSendTrackingEventSqsMessage).toHaveBeenCalledWith(event, 0);
|
|
93
93
|
});
|
|
94
94
|
it('returns false when SQS fails', async () => {
|
|
95
95
|
mockSendTrackingEventSqsMessage.mockResolvedValue(false);
|
|
@@ -101,6 +101,28 @@ describe('CollectQueueTrackingService', () => {
|
|
|
101
101
|
const result = await service.send(event);
|
|
102
102
|
expect(result).toBe(false);
|
|
103
103
|
});
|
|
104
|
+
it('passes delaySeconds to SQS service', async () => {
|
|
105
|
+
mockSendTrackingEventSqsMessage.mockResolvedValue(true);
|
|
106
|
+
const service = createService();
|
|
107
|
+
const event = service.buildEvent({
|
|
108
|
+
...baseEventParams,
|
|
109
|
+
context: { identity: { traits: { emails: ['user@example.com'] } } },
|
|
110
|
+
});
|
|
111
|
+
const result = await service.send(event, { delaySeconds: 600 });
|
|
112
|
+
expect(result).toBe(true);
|
|
113
|
+
expect(mockSendTrackingEventSqsMessage).toHaveBeenCalledWith(event, 600);
|
|
114
|
+
});
|
|
115
|
+
it('passes 900 second delay to SQS service', async () => {
|
|
116
|
+
mockSendTrackingEventSqsMessage.mockResolvedValue(true);
|
|
117
|
+
const service = createService();
|
|
118
|
+
const event = service.buildEvent({
|
|
119
|
+
...baseEventParams,
|
|
120
|
+
context: { identity: { traits: { emails: ['user@example.com'] } } },
|
|
121
|
+
});
|
|
122
|
+
const result = await service.send(event, { delaySeconds: 900 });
|
|
123
|
+
expect(result).toBe(true);
|
|
124
|
+
expect(mockSendTrackingEventSqsMessage).toHaveBeenCalledWith(event, 900);
|
|
125
|
+
});
|
|
104
126
|
});
|
|
105
127
|
describe('emit', () => {
|
|
106
128
|
it('builds and sends in one call', async () => {
|
|
@@ -119,7 +141,7 @@ describe('CollectQueueTrackingService', () => {
|
|
|
119
141
|
id: 'evt_1',
|
|
120
142
|
pixelId: 'pixel-1',
|
|
121
143
|
context: { identity: { traits: { emails: ['test@example.com'] } } },
|
|
122
|
-
}));
|
|
144
|
+
}), 0);
|
|
123
145
|
});
|
|
124
146
|
it('returns true when emit succeeds without context', async () => {
|
|
125
147
|
mockSendTrackingEventSqsMessage.mockResolvedValue(true);
|
|
@@ -136,7 +158,7 @@ describe('CollectQueueTrackingService', () => {
|
|
|
136
158
|
id: 'evt_2',
|
|
137
159
|
name: TRACKING_EVENT_NAME.SUBSCRIPTION_CREATED,
|
|
138
160
|
data: { plan: 'enterprise' },
|
|
139
|
-
}));
|
|
161
|
+
}), 0);
|
|
140
162
|
});
|
|
141
163
|
it('returns false when SQS send fails', async () => {
|
|
142
164
|
mockSendTrackingEventSqsMessage.mockResolvedValue(false);
|
|
@@ -169,7 +191,37 @@ describe('CollectQueueTrackingService', () => {
|
|
|
169
191
|
expect(result).toBe(true);
|
|
170
192
|
expect(mockSendTrackingEventSqsMessage).toHaveBeenCalledWith(expect.objectContaining({
|
|
171
193
|
context,
|
|
172
|
-
}));
|
|
194
|
+
}), 0);
|
|
195
|
+
});
|
|
196
|
+
it('emit with no delay passes 0 to SQS (existing behavior)', async () => {
|
|
197
|
+
mockSendTrackingEventSqsMessage.mockResolvedValue(true);
|
|
198
|
+
const service = createService();
|
|
199
|
+
const result = await service.emit({
|
|
200
|
+
...baseEventParams,
|
|
201
|
+
context: { identity: { traits: { emails: ['test@example.com'] } } },
|
|
202
|
+
});
|
|
203
|
+
expect(result).toBe(true);
|
|
204
|
+
expect(mockSendTrackingEventSqsMessage).toHaveBeenCalledWith(expect.objectContaining({ id: 'evt_1' }), 0);
|
|
205
|
+
});
|
|
206
|
+
it('emit with 600 second delay passes delay to SQS', async () => {
|
|
207
|
+
mockSendTrackingEventSqsMessage.mockResolvedValue(true);
|
|
208
|
+
const service = createService();
|
|
209
|
+
const result = await service.emit({
|
|
210
|
+
...baseEventParams,
|
|
211
|
+
context: { identity: { traits: { emails: ['test@example.com'] } } },
|
|
212
|
+
}, { delaySeconds: 600 });
|
|
213
|
+
expect(result).toBe(true);
|
|
214
|
+
expect(mockSendTrackingEventSqsMessage).toHaveBeenCalledWith(expect.objectContaining({ id: 'evt_1' }), 600);
|
|
215
|
+
});
|
|
216
|
+
it('emit with 900 second delay passes delay to SQS', async () => {
|
|
217
|
+
mockSendTrackingEventSqsMessage.mockResolvedValue(true);
|
|
218
|
+
const service = createService();
|
|
219
|
+
const result = await service.emit({
|
|
220
|
+
...baseEventParams,
|
|
221
|
+
context: { identity: { traits: { emails: ['test@example.com'] } } },
|
|
222
|
+
}, { delaySeconds: 900 });
|
|
223
|
+
expect(result).toBe(true);
|
|
224
|
+
expect(mockSendTrackingEventSqsMessage).toHaveBeenCalledWith(expect.objectContaining({ id: 'evt_1' }), 900);
|
|
173
225
|
});
|
|
174
226
|
});
|
|
175
227
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect-queue-tracking-service.spec.js","sourceRoot":"","sources":["../../../../../src/__tests__/services/events/collect-queue-tracking-service.spec.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"collect-queue-tracking-service.spec.js","sourceRoot":"","sources":["../../../../../src/__tests__/services/events/collect-queue-tracking-service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,20 +14,20 @@ jest.mock('../../../helpers/logging-helper', () => ({
|
|
|
14
14
|
error: jest.fn(),
|
|
15
15
|
},
|
|
16
16
|
}));
|
|
17
|
-
import { buildTrackingEvent,
|
|
17
|
+
import { buildTrackingEvent, TRACKING_EVENT_VERSION, TrackingEventSqsService, } from '../../../services/events';
|
|
18
18
|
const createTrackingEvent = () => ({
|
|
19
19
|
id: 'evt_1',
|
|
20
20
|
type: INTERNAL_EVENT_TYPE.TRACKING,
|
|
21
21
|
name: TRACKING_EVENT_NAME.ACCOUNT_CREATED,
|
|
22
22
|
pixelId: 'pixel-1',
|
|
23
|
-
version:
|
|
23
|
+
version: TRACKING_EVENT_VERSION,
|
|
24
24
|
source: 'lifecycle',
|
|
25
25
|
collectedAt: '2026-07-14T00:00:00.000Z',
|
|
26
26
|
collectedAtEpoch: 1,
|
|
27
27
|
sentAtEpoch: 1,
|
|
28
28
|
data: { plan: 'pro' },
|
|
29
29
|
});
|
|
30
|
-
describe('
|
|
30
|
+
describe('buildTrackingEvent', () => {
|
|
31
31
|
beforeEach(() => {
|
|
32
32
|
jest.spyOn(Date, 'now').mockReturnValue(1700000000000);
|
|
33
33
|
});
|
|
@@ -43,7 +43,7 @@ describe('buildCollectQueueTrackingEvent', () => {
|
|
|
43
43
|
},
|
|
44
44
|
},
|
|
45
45
|
};
|
|
46
|
-
const event =
|
|
46
|
+
const event = buildTrackingEvent({
|
|
47
47
|
eventId: 'evt_1',
|
|
48
48
|
name: TRACKING_EVENT_NAME.ACCOUNT_CREATED,
|
|
49
49
|
pixelId: 'pixel-1',
|
|
@@ -56,7 +56,7 @@ describe('buildCollectQueueTrackingEvent', () => {
|
|
|
56
56
|
type: INTERNAL_EVENT_TYPE.TRACKING,
|
|
57
57
|
name: TRACKING_EVENT_NAME.ACCOUNT_CREATED,
|
|
58
58
|
pixelId: 'pixel-1',
|
|
59
|
-
version:
|
|
59
|
+
version: TRACKING_EVENT_VERSION,
|
|
60
60
|
source: 'lifecycle',
|
|
61
61
|
collectedAtEpoch: 1700000000000,
|
|
62
62
|
sentAtEpoch: 1700000000000,
|
|
@@ -66,7 +66,7 @@ describe('buildCollectQueueTrackingEvent', () => {
|
|
|
66
66
|
expect(event.collectedAt).toEqual(expect.any(String));
|
|
67
67
|
});
|
|
68
68
|
it('builds envelope without context when not provided', () => {
|
|
69
|
-
const event =
|
|
69
|
+
const event = buildTrackingEvent({
|
|
70
70
|
eventId: 'evt_2',
|
|
71
71
|
name: TRACKING_EVENT_NAME.ACCOUNT_CREATED,
|
|
72
72
|
pixelId: 'pixel-1',
|
|
@@ -78,7 +78,7 @@ describe('buildCollectQueueTrackingEvent', () => {
|
|
|
78
78
|
expect(event.data).toEqual({ plan: 'pro' });
|
|
79
79
|
});
|
|
80
80
|
it('builds envelope with identity only (no properties)', () => {
|
|
81
|
-
const event =
|
|
81
|
+
const event = buildTrackingEvent({
|
|
82
82
|
eventId: 'evt_3',
|
|
83
83
|
name: TRACKING_EVENT_NAME.ACCOUNT_CREATED,
|
|
84
84
|
pixelId: 'pixel-1',
|
|
@@ -92,7 +92,7 @@ describe('buildCollectQueueTrackingEvent', () => {
|
|
|
92
92
|
expect(event.context?.properties).toBeUndefined();
|
|
93
93
|
});
|
|
94
94
|
it('builds envelope with context properties only (no identity)', () => {
|
|
95
|
-
const event =
|
|
95
|
+
const event = buildTrackingEvent({
|
|
96
96
|
eventId: 'evt_4',
|
|
97
97
|
name: TRACKING_EVENT_NAME.ACCOUNT_CREATED,
|
|
98
98
|
pixelId: 'pixel-1',
|
|
@@ -118,7 +118,7 @@ describe('buildCollectQueueTrackingEvent', () => {
|
|
|
118
118
|
sessionId: 'sess_456',
|
|
119
119
|
},
|
|
120
120
|
};
|
|
121
|
-
const event =
|
|
121
|
+
const event = buildTrackingEvent({
|
|
122
122
|
eventId: 'evt_5',
|
|
123
123
|
name: TRACKING_EVENT_NAME.SUBSCRIPTION_CREATED,
|
|
124
124
|
pixelId: 'pixel-1',
|
|
@@ -129,9 +129,7 @@ describe('buildCollectQueueTrackingEvent', () => {
|
|
|
129
129
|
expect(event.context).toEqual(context);
|
|
130
130
|
expect(event.name).toBe(TRACKING_EVENT_NAME.SUBSCRIPTION_CREATED);
|
|
131
131
|
});
|
|
132
|
-
it('exports
|
|
133
|
-
expect(buildCollectQueueTrackingEvent).toBe(buildTrackingEvent);
|
|
134
|
-
expect(COLLECT_QUEUE_TRACKING_EVENT_VERSION).toBe(TRACKING_EVENT_VERSION);
|
|
132
|
+
it('exports correct version constant', () => {
|
|
135
133
|
expect(TRACKING_EVENT_VERSION).toBe('1.1.6');
|
|
136
134
|
});
|
|
137
135
|
});
|
|
@@ -148,7 +146,29 @@ describe('TrackingEventSqsService', () => {
|
|
|
148
146
|
expect(mockSendMessage).toHaveBeenCalledWith({
|
|
149
147
|
pixelId: 'pixel-1',
|
|
150
148
|
trackingEvent,
|
|
151
|
-
});
|
|
149
|
+
}, 0);
|
|
150
|
+
});
|
|
151
|
+
it('passes delaySeconds to SQS sendMessage', async () => {
|
|
152
|
+
mockSendMessage.mockResolvedValue(undefined);
|
|
153
|
+
const service = new TrackingEventSqsService('us-east-2', '123456789012', 'collect-queue');
|
|
154
|
+
const trackingEvent = createTrackingEvent();
|
|
155
|
+
const result = await service.sendTrackingEventSqsMessage(trackingEvent, 600);
|
|
156
|
+
expect(result).toBe(true);
|
|
157
|
+
expect(mockSendMessage).toHaveBeenCalledWith({
|
|
158
|
+
pixelId: 'pixel-1',
|
|
159
|
+
trackingEvent,
|
|
160
|
+
}, 600);
|
|
161
|
+
});
|
|
162
|
+
it('passes 900 second delay to SQS sendMessage', async () => {
|
|
163
|
+
mockSendMessage.mockResolvedValue(undefined);
|
|
164
|
+
const service = new TrackingEventSqsService('us-east-2', '123456789012', 'collect-queue');
|
|
165
|
+
const trackingEvent = createTrackingEvent();
|
|
166
|
+
const result = await service.sendTrackingEventSqsMessage(trackingEvent, 900);
|
|
167
|
+
expect(result).toBe(true);
|
|
168
|
+
expect(mockSendMessage).toHaveBeenCalledWith({
|
|
169
|
+
pixelId: 'pixel-1',
|
|
170
|
+
trackingEvent,
|
|
171
|
+
}, 900);
|
|
152
172
|
});
|
|
153
173
|
it('returns false and logs pixelId and errorMessage when SQS send fails', async () => {
|
|
154
174
|
const sendError = new Error('SQS unavailable');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracking-event-sqs-service.spec.js","sourceRoot":"","sources":["../../../../../src/__tests__/services/events/tracking-event-sqs-service.spec.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GAGpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzD,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAElC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,WAAW,EAAE,eAAe;KAC7B,CAAC,CAAC;CACJ,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC,CAAC;IAClD,MAAM,EAAE;QACN,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;QAChB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACf,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;KACjB;CACF,CAAC,CAAC,CAAC;AAEJ,OAAO,EACL,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"tracking-event-sqs-service.spec.js","sourceRoot":"","sources":["../../../../../src/__tests__/services/events/tracking-event-sqs-service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const graphqlShopifyQLQuery = "\nquery ExecuteShopifyQL($query: String!) {\n shopifyqlQuery(query: $query) {\n tableData {\n columns {\n name\n dataType\n }\n rowData\n rows\n }\n parseErrors\n }\n}\n";
|
|
2
|
+
export interface ShopifyQLQueryResult {
|
|
3
|
+
shopifyqlQuery?: {
|
|
4
|
+
tableData?: {
|
|
5
|
+
columns?: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
dataType: string;
|
|
8
|
+
}>;
|
|
9
|
+
rowData?: string[][];
|
|
10
|
+
rows?: Array<Record<string, string>>;
|
|
11
|
+
};
|
|
12
|
+
parseErrors?: string[];
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare const SHOPIFYQL_QUERIES: {
|
|
16
|
+
SALES_MONTHLY: (monthsBack: number) => string;
|
|
17
|
+
SESSIONS_MONTHLY: (monthsBack: number) => string;
|
|
18
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const graphqlShopifyQLQuery = `
|
|
2
|
+
query ExecuteShopifyQL($query: String!) {
|
|
3
|
+
shopifyqlQuery(query: $query) {
|
|
4
|
+
tableData {
|
|
5
|
+
columns {
|
|
6
|
+
name
|
|
7
|
+
dataType
|
|
8
|
+
}
|
|
9
|
+
rowData
|
|
10
|
+
rows
|
|
11
|
+
}
|
|
12
|
+
parseErrors
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
export const SHOPIFYQL_QUERIES = {
|
|
17
|
+
SALES_MONTHLY: (monthsBack) => `FROM sales SHOW total_sales, orders, average_order_value GROUP BY month SINCE -${monthsBack}m ORDER BY month ASC`,
|
|
18
|
+
SESSIONS_MONTHLY: (monthsBack) => `FROM sessions SHOW sessions, online_store_visitors WHERE human_or_bot_session = 'human' GROUP BY month SINCE -${monthsBack}m ORDER BY month ASC`,
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=graphql-analytics-queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-analytics-queries.js","sourceRoot":"","sources":["../../../../../src/clients/third-party/shopify/graphql-analytics-queries.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;CAcpC,CAAC;AAsBF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAK/B,aAAa,EAAE,CAAC,UAAkB,EAAE,EAAE,CACpC,kFAAkF,UAAU,sBAAsB;IAMpH,gBAAgB,EAAE,CAAC,UAAkB,EAAE,EAAE,CACvC,iHAAiH,UAAU,sBAAsB;CACpJ,CAAC"}
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import { AdminApiClient, ClientResponse } from '@shopify/admin-api-client';
|
|
2
2
|
import type { GetProductQuery } from '../../../types/shopify-graphql-types/admin.generated';
|
|
3
|
+
declare enum SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS {
|
|
4
|
+
SUCCESS = "success",
|
|
5
|
+
PARTIAL = "partial",
|
|
6
|
+
FAILED = "failed"
|
|
7
|
+
}
|
|
8
|
+
interface ShopifyMonthlyMetrics {
|
|
9
|
+
month: string;
|
|
10
|
+
totalSales?: number;
|
|
11
|
+
orderCount?: number;
|
|
12
|
+
averageOrderValue?: number;
|
|
13
|
+
visitorCount?: number;
|
|
14
|
+
sessionCount?: number;
|
|
15
|
+
}
|
|
16
|
+
interface ShopifyHistoricalMetrics {
|
|
17
|
+
fetchedAt: string;
|
|
18
|
+
currency?: string;
|
|
19
|
+
months: ShopifyMonthlyMetrics[];
|
|
20
|
+
fetchStatus?: SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS;
|
|
21
|
+
}
|
|
3
22
|
export declare class ShopifyGraphQLClient {
|
|
4
23
|
static _shopify_api_version: string;
|
|
5
24
|
static getClient: (shop: string, accessToken: string) => AdminApiClient;
|
|
@@ -7,4 +26,17 @@ export declare class ShopifyGraphQLClient {
|
|
|
7
26
|
private static executePagedProductQuery;
|
|
8
27
|
private static executeProductQuery;
|
|
9
28
|
static getOrderLineItemsSellingPlan: (shop: string, accessToken: string, orderId: string) => Promise<Map<string, string> | null>;
|
|
29
|
+
static safeGetHistoricalMetrics: (shop: string, accessToken: string, monthsBack?: number) => Promise<ShopifyHistoricalMetrics>;
|
|
30
|
+
private static executeSafeShopifyQLQuery;
|
|
31
|
+
private static parseSalesMetrics;
|
|
32
|
+
private static parseSessionsMetrics;
|
|
33
|
+
private static extractRowData;
|
|
34
|
+
private static mergeMonthlyMetrics;
|
|
35
|
+
private static determineFetchStatus;
|
|
36
|
+
private static extractCurrency;
|
|
37
|
+
private static formatMonthKey;
|
|
38
|
+
private static safeParseFloat;
|
|
39
|
+
private static safeParseInt;
|
|
40
|
+
private static buildEmptyMetrics;
|
|
10
41
|
}
|
|
42
|
+
export {};
|
|
@@ -2,6 +2,13 @@ import { createAdminApiClient } from '@shopify/admin-api-client';
|
|
|
2
2
|
import { Logger } from '../../../helpers';
|
|
3
3
|
import { graphqlProductQueryByProductId } from './graphql-product-queries';
|
|
4
4
|
import { graphqlOrderLineItemsSellingPlanQuery } from './graphql-order-queries';
|
|
5
|
+
import { graphqlShopifyQLQuery, SHOPIFYQL_QUERIES, } from './graphql-analytics-queries';
|
|
6
|
+
var SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS;
|
|
7
|
+
(function (SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS) {
|
|
8
|
+
SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS["SUCCESS"] = "success";
|
|
9
|
+
SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS["PARTIAL"] = "partial";
|
|
10
|
+
SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS["FAILED"] = "failed";
|
|
11
|
+
})(SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS || (SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS = {}));
|
|
5
12
|
export class ShopifyGraphQLClient {
|
|
6
13
|
static _shopify_api_version = process.env.SHOPIFY_API_VERSION;
|
|
7
14
|
static getClient = (shop, accessToken) => {
|
|
@@ -154,5 +161,189 @@ export class ShopifyGraphQLClient {
|
|
|
154
161
|
return null;
|
|
155
162
|
}
|
|
156
163
|
};
|
|
164
|
+
static safeGetHistoricalMetrics = async (shop, accessToken, monthsBack = 12) => {
|
|
165
|
+
const logMeta = { shop, monthsBack };
|
|
166
|
+
try {
|
|
167
|
+
if (!shop || !accessToken) {
|
|
168
|
+
Logger.warn('safeGetHistoricalMetrics: missing shop or accessToken', logMeta);
|
|
169
|
+
return this.buildEmptyMetrics();
|
|
170
|
+
}
|
|
171
|
+
const client = this.getClient(shop, accessToken);
|
|
172
|
+
const [salesResult, sessionsResult] = await Promise.all([
|
|
173
|
+
this.executeSafeShopifyQLQuery(client, SHOPIFYQL_QUERIES.SALES_MONTHLY(monthsBack), shop, 'sales'),
|
|
174
|
+
this.executeSafeShopifyQLQuery(client, SHOPIFYQL_QUERIES.SESSIONS_MONTHLY(monthsBack), shop, 'sessions'),
|
|
175
|
+
]);
|
|
176
|
+
const salesByMonth = this.parseSalesMetrics(salesResult);
|
|
177
|
+
const sessionsByMonth = this.parseSessionsMetrics(sessionsResult);
|
|
178
|
+
const months = this.mergeMonthlyMetrics(salesByMonth, sessionsByMonth);
|
|
179
|
+
const fetchStatus = this.determineFetchStatus(salesResult, sessionsResult);
|
|
180
|
+
const currency = this.extractCurrency();
|
|
181
|
+
const metrics = {
|
|
182
|
+
fetchedAt: new Date().toISOString(),
|
|
183
|
+
currency,
|
|
184
|
+
months,
|
|
185
|
+
fetchStatus,
|
|
186
|
+
};
|
|
187
|
+
Logger.info('safeGetHistoricalMetrics: completed', {
|
|
188
|
+
...logMeta,
|
|
189
|
+
fetchStatus,
|
|
190
|
+
monthsCount: months.length,
|
|
191
|
+
hasSalesData: salesByMonth.size > 0,
|
|
192
|
+
hasSessionsData: sessionsByMonth.size > 0,
|
|
193
|
+
});
|
|
194
|
+
return metrics;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
Logger.warn('safeGetHistoricalMetrics: failed, returning empty metrics', {
|
|
198
|
+
error,
|
|
199
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
200
|
+
...logMeta,
|
|
201
|
+
});
|
|
202
|
+
return this.buildEmptyMetrics();
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
static executeSafeShopifyQLQuery = async (client, query, shop, queryType) => {
|
|
206
|
+
try {
|
|
207
|
+
const result = await client.request(graphqlShopifyQLQuery, {
|
|
208
|
+
variables: { query },
|
|
209
|
+
});
|
|
210
|
+
if (result?.errors) {
|
|
211
|
+
Logger.warn('executeSafeShopifyQLQuery: GraphQL errors', {
|
|
212
|
+
errors: result.errors,
|
|
213
|
+
shop,
|
|
214
|
+
queryType,
|
|
215
|
+
});
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
const parseErrors = result?.data?.shopifyqlQuery?.parseErrors;
|
|
219
|
+
if (parseErrors && parseErrors.length > 0) {
|
|
220
|
+
Logger.warn('executeSafeShopifyQLQuery: ShopifyQL parse errors', {
|
|
221
|
+
parseErrors,
|
|
222
|
+
shop,
|
|
223
|
+
queryType,
|
|
224
|
+
});
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
return result?.data ?? null;
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
Logger.warn('executeSafeShopifyQLQuery: failed', {
|
|
231
|
+
error,
|
|
232
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
233
|
+
shop,
|
|
234
|
+
queryType,
|
|
235
|
+
});
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
static parseSalesMetrics = (result) => {
|
|
240
|
+
const metricsMap = new Map();
|
|
241
|
+
const tableData = result?.shopifyqlQuery?.tableData;
|
|
242
|
+
if (!tableData)
|
|
243
|
+
return metricsMap;
|
|
244
|
+
const columns = tableData.columns ?? [];
|
|
245
|
+
const rows = tableData.rowData ?? tableData.rows ?? [];
|
|
246
|
+
const monthIdx = columns.findIndex((c) => c.name === 'month');
|
|
247
|
+
const totalSalesIdx = columns.findIndex((c) => c.name === 'total_sales');
|
|
248
|
+
const ordersIdx = columns.findIndex((c) => c.name === 'orders');
|
|
249
|
+
const aovIdx = columns.findIndex((c) => c.name === 'average_order_value');
|
|
250
|
+
for (const row of rows) {
|
|
251
|
+
const rowData = this.extractRowData(row, columns);
|
|
252
|
+
const month = this.formatMonthKey(rowData[monthIdx]);
|
|
253
|
+
if (!month)
|
|
254
|
+
continue;
|
|
255
|
+
metricsMap.set(month, {
|
|
256
|
+
month,
|
|
257
|
+
totalSales: this.safeParseFloat(rowData[totalSalesIdx]),
|
|
258
|
+
orderCount: this.safeParseInt(rowData[ordersIdx]),
|
|
259
|
+
averageOrderValue: this.safeParseFloat(rowData[aovIdx]),
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
return metricsMap;
|
|
263
|
+
};
|
|
264
|
+
static parseSessionsMetrics = (result) => {
|
|
265
|
+
const metricsMap = new Map();
|
|
266
|
+
const tableData = result?.shopifyqlQuery?.tableData;
|
|
267
|
+
if (!tableData)
|
|
268
|
+
return metricsMap;
|
|
269
|
+
const columns = tableData.columns ?? [];
|
|
270
|
+
const rows = tableData.rowData ?? tableData.rows ?? [];
|
|
271
|
+
const monthIdx = columns.findIndex((c) => c.name === 'month');
|
|
272
|
+
const sessionsIdx = columns.findIndex((c) => c.name === 'sessions');
|
|
273
|
+
const visitorsIdx = columns.findIndex((c) => c.name === 'online_store_visitors');
|
|
274
|
+
for (const row of rows) {
|
|
275
|
+
const rowData = this.extractRowData(row, columns);
|
|
276
|
+
const month = this.formatMonthKey(rowData[monthIdx]);
|
|
277
|
+
if (!month)
|
|
278
|
+
continue;
|
|
279
|
+
metricsMap.set(month, {
|
|
280
|
+
month,
|
|
281
|
+
sessionCount: this.safeParseInt(rowData[sessionsIdx]),
|
|
282
|
+
visitorCount: this.safeParseInt(rowData[visitorsIdx]),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
return metricsMap;
|
|
286
|
+
};
|
|
287
|
+
static extractRowData = (row, columns) => {
|
|
288
|
+
if (Array.isArray(row)) {
|
|
289
|
+
return row;
|
|
290
|
+
}
|
|
291
|
+
return columns.map((col) => row[col.name] ?? '');
|
|
292
|
+
};
|
|
293
|
+
static mergeMonthlyMetrics = (salesByMonth, sessionsByMonth) => {
|
|
294
|
+
const allMonths = new Set([...salesByMonth.keys(), ...sessionsByMonth.keys()]);
|
|
295
|
+
return Array.from(allMonths)
|
|
296
|
+
.sort()
|
|
297
|
+
.map((month) => {
|
|
298
|
+
const sales = salesByMonth.get(month) ?? {};
|
|
299
|
+
const sessions = sessionsByMonth.get(month) ?? {};
|
|
300
|
+
return {
|
|
301
|
+
month,
|
|
302
|
+
totalSales: sales.totalSales,
|
|
303
|
+
orderCount: sales.orderCount,
|
|
304
|
+
averageOrderValue: sales.averageOrderValue,
|
|
305
|
+
sessionCount: sessions.sessionCount,
|
|
306
|
+
visitorCount: sessions.visitorCount,
|
|
307
|
+
};
|
|
308
|
+
});
|
|
309
|
+
};
|
|
310
|
+
static determineFetchStatus = (salesResult, sessionsResult) => {
|
|
311
|
+
const hasSales = !!salesResult?.shopifyqlQuery?.tableData;
|
|
312
|
+
const hasSessions = !!sessionsResult?.shopifyqlQuery?.tableData;
|
|
313
|
+
if (hasSales && hasSessions) {
|
|
314
|
+
return SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS.SUCCESS;
|
|
315
|
+
}
|
|
316
|
+
if (hasSales || hasSessions) {
|
|
317
|
+
return SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS.PARTIAL;
|
|
318
|
+
}
|
|
319
|
+
return SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS.FAILED;
|
|
320
|
+
};
|
|
321
|
+
static extractCurrency = () => {
|
|
322
|
+
return undefined;
|
|
323
|
+
};
|
|
324
|
+
static formatMonthKey = (value) => {
|
|
325
|
+
if (!value)
|
|
326
|
+
return undefined;
|
|
327
|
+
const match = value.match(/^(\d{4}-\d{2})/);
|
|
328
|
+
return match?.[1];
|
|
329
|
+
};
|
|
330
|
+
static safeParseFloat = (value) => {
|
|
331
|
+
if (!value)
|
|
332
|
+
return undefined;
|
|
333
|
+
const parsed = parseFloat(value);
|
|
334
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
335
|
+
};
|
|
336
|
+
static safeParseInt = (value) => {
|
|
337
|
+
if (!value)
|
|
338
|
+
return undefined;
|
|
339
|
+
const parsed = parseInt(value, 10);
|
|
340
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
341
|
+
};
|
|
342
|
+
static buildEmptyMetrics = () => ({
|
|
343
|
+
fetchedAt: new Date().toISOString(),
|
|
344
|
+
currency: undefined,
|
|
345
|
+
months: [],
|
|
346
|
+
fetchStatus: SHOPIFY_HISTORICAL_METRICS_FETCH_STATUS.FAILED,
|
|
347
|
+
});
|
|
157
348
|
}
|
|
158
349
|
//# sourceMappingURL=shopify-graphql-client.js.map
|