dtc-mcp 0.1.0
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/LICENSE +21 -0
- package/README.md +344 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.js +71 -0
- package/dist/config.js.map +1 -0
- package/dist/cross-platform/correlator.d.ts +10 -0
- package/dist/cross-platform/correlator.js +166 -0
- package/dist/cross-platform/correlator.js.map +1 -0
- package/dist/cross-platform/tools.d.ts +2 -0
- package/dist/cross-platform/tools.js +30 -0
- package/dist/cross-platform/tools.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/platforms/klaviyo/client.d.ts +91 -0
- package/dist/platforms/klaviyo/client.js +389 -0
- package/dist/platforms/klaviyo/client.js.map +1 -0
- package/dist/platforms/klaviyo/tools.d.ts +2 -0
- package/dist/platforms/klaviyo/tools.js +368 -0
- package/dist/platforms/klaviyo/tools.js.map +1 -0
- package/dist/platforms/klaviyo/transforms.d.ts +59 -0
- package/dist/platforms/klaviyo/transforms.js +326 -0
- package/dist/platforms/klaviyo/transforms.js.map +1 -0
- package/dist/platforms/shopify/client.d.ts +51 -0
- package/dist/platforms/shopify/client.js +366 -0
- package/dist/platforms/shopify/client.js.map +1 -0
- package/dist/platforms/shopify/tools.d.ts +2 -0
- package/dist/platforms/shopify/tools.js +253 -0
- package/dist/platforms/shopify/tools.js.map +1 -0
- package/dist/platforms/shopify/transforms.d.ts +88 -0
- package/dist/platforms/shopify/transforms.js +191 -0
- package/dist/platforms/shopify/transforms.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +15 -0
- package/dist/server.js.map +1 -0
- package/dist/shared/cache.d.ts +23 -0
- package/dist/shared/cache.js +62 -0
- package/dist/shared/cache.js.map +1 -0
- package/dist/shared/errors.d.ts +25 -0
- package/dist/shared/errors.js +96 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/pagination.d.ts +21 -0
- package/dist/shared/pagination.js +36 -0
- package/dist/shared/pagination.js.map +1 -0
- package/dist/shared/types.d.ts +247 -0
- package/dist/shared/types.js +3 -0
- package/dist/shared/types.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
// ---- Campaign Transforms ----
|
|
2
|
+
export function transformCampaignSummary(campaigns, reportRows, metric, limit, channel = "email") {
|
|
3
|
+
const metricsById = new Map();
|
|
4
|
+
for (const row of reportRows) {
|
|
5
|
+
const id = row.groupings.campaign_id;
|
|
6
|
+
if (!id)
|
|
7
|
+
continue;
|
|
8
|
+
// Merge stats if grouped by message — sum them up for the campaign
|
|
9
|
+
const existing = metricsById.get(id) ?? {};
|
|
10
|
+
for (const [key, val] of Object.entries(row.statistics)) {
|
|
11
|
+
existing[key] = (existing[key] ?? 0) + val;
|
|
12
|
+
}
|
|
13
|
+
metricsById.set(id, existing);
|
|
14
|
+
}
|
|
15
|
+
const results = campaigns.map((c) => {
|
|
16
|
+
const attrs = c.attributes;
|
|
17
|
+
const stats = metricsById.get(c.id) ?? {};
|
|
18
|
+
const recipients = stats.recipients ?? 0;
|
|
19
|
+
return {
|
|
20
|
+
id: c.id,
|
|
21
|
+
name: String(attrs.name ?? ""),
|
|
22
|
+
channel,
|
|
23
|
+
status: String(attrs.status ?? "unknown"),
|
|
24
|
+
send_date: extractSendDate(attrs),
|
|
25
|
+
recipients,
|
|
26
|
+
open_rate: safeRate(stats.opens_unique ?? stats.opens, recipients),
|
|
27
|
+
click_rate: safeRate(stats.clicks_unique ?? stats.clicks, recipients),
|
|
28
|
+
revenue: stats.conversion_value ?? 0,
|
|
29
|
+
unsubscribe_rate: safeRate(stats.unsubscribes, recipients),
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
// Sort by requested metric descending
|
|
33
|
+
results.sort((a, b) => {
|
|
34
|
+
const valA = a[metric];
|
|
35
|
+
const valB = b[metric];
|
|
36
|
+
return (valB ?? 0) - (valA ?? 0);
|
|
37
|
+
});
|
|
38
|
+
return results.slice(0, limit);
|
|
39
|
+
}
|
|
40
|
+
export function transformCampaignDetail(campaign, messages, reportRows, audienceNames) {
|
|
41
|
+
const attrs = campaign.attributes;
|
|
42
|
+
// Sum all report rows for this campaign
|
|
43
|
+
const stats = {};
|
|
44
|
+
for (const row of reportRows) {
|
|
45
|
+
for (const [key, val] of Object.entries(row.statistics)) {
|
|
46
|
+
stats[key] = (stats[key] ?? 0) + val;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const recipients = stats.recipients ?? 0;
|
|
50
|
+
const opens = stats.opens_unique ?? stats.opens ?? 0;
|
|
51
|
+
return {
|
|
52
|
+
id: campaign.id,
|
|
53
|
+
name: String(attrs.name ?? ""),
|
|
54
|
+
channel: extractChannelFromMessages(messages),
|
|
55
|
+
status: String(attrs.status ?? "unknown"),
|
|
56
|
+
subject_line: extractSubjectLine(messages),
|
|
57
|
+
send_date: extractSendDate(attrs),
|
|
58
|
+
audiences: audienceNames,
|
|
59
|
+
recipients,
|
|
60
|
+
open_rate: safeRate(opens, recipients),
|
|
61
|
+
click_rate: safeRate(stats.clicks_unique ?? stats.clicks, recipients),
|
|
62
|
+
click_through_rate: safeRate(stats.clicks_unique ?? stats.clicks, opens),
|
|
63
|
+
revenue: stats.conversion_value ?? 0,
|
|
64
|
+
unsubscribe_rate: safeRate(stats.unsubscribes, recipients),
|
|
65
|
+
bounce_rate: safeRate(stats.bounced, recipients),
|
|
66
|
+
spam_rate: safeRate(stats.spam_complaints, recipients),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// ---- Flow Transforms ----
|
|
70
|
+
export function transformFlowSummary(flows, reportRows, metric, limit) {
|
|
71
|
+
// Group report rows by flow_id and sum stats
|
|
72
|
+
const metricsById = new Map();
|
|
73
|
+
for (const row of reportRows) {
|
|
74
|
+
const id = row.groupings.flow_id;
|
|
75
|
+
if (!id)
|
|
76
|
+
continue;
|
|
77
|
+
const existing = metricsById.get(id) ?? {};
|
|
78
|
+
for (const [key, val] of Object.entries(row.statistics)) {
|
|
79
|
+
existing[key] = (existing[key] ?? 0) + val;
|
|
80
|
+
}
|
|
81
|
+
metricsById.set(id, existing);
|
|
82
|
+
}
|
|
83
|
+
const results = flows.map((f) => {
|
|
84
|
+
const attrs = f.attributes;
|
|
85
|
+
const stats = metricsById.get(f.id) ?? {};
|
|
86
|
+
const recipients = stats.recipients ?? 0;
|
|
87
|
+
return {
|
|
88
|
+
id: f.id,
|
|
89
|
+
name: String(attrs.name ?? ""),
|
|
90
|
+
status: String(attrs.status ?? "unknown"),
|
|
91
|
+
trigger_type: String(attrs.trigger_type ?? "unknown"),
|
|
92
|
+
message_count: f.messageCount,
|
|
93
|
+
recipients,
|
|
94
|
+
click_rate: safeRate(stats.clicks_unique ?? stats.clicks, recipients),
|
|
95
|
+
revenue: stats.conversion_value ?? 0,
|
|
96
|
+
conversion_rate: safeRate(stats.conversions, recipients),
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
results.sort((a, b) => {
|
|
100
|
+
const valA = a[metric];
|
|
101
|
+
const valB = b[metric];
|
|
102
|
+
return (valB ?? 0) - (valA ?? 0);
|
|
103
|
+
});
|
|
104
|
+
return results.slice(0, limit);
|
|
105
|
+
}
|
|
106
|
+
export function transformFlowDetail(flow, messages, reportRows) {
|
|
107
|
+
const attrs = flow.attributes;
|
|
108
|
+
// Group report rows by flow_message_id
|
|
109
|
+
const metricsByMessageId = new Map();
|
|
110
|
+
const totalStats = {};
|
|
111
|
+
for (const row of reportRows) {
|
|
112
|
+
const msgId = row.groupings.flow_message_id;
|
|
113
|
+
for (const [key, val] of Object.entries(row.statistics)) {
|
|
114
|
+
totalStats[key] = (totalStats[key] ?? 0) + val;
|
|
115
|
+
}
|
|
116
|
+
if (msgId) {
|
|
117
|
+
const existing = metricsByMessageId.get(msgId) ?? {};
|
|
118
|
+
for (const [key, val] of Object.entries(row.statistics)) {
|
|
119
|
+
existing[key] = (existing[key] ?? 0) + val;
|
|
120
|
+
}
|
|
121
|
+
metricsByMessageId.set(msgId, existing);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const messageDetails = messages.map((m) => {
|
|
125
|
+
const mAttrs = m.attributes;
|
|
126
|
+
const stats = metricsByMessageId.get(m.id) ?? {};
|
|
127
|
+
const recipients = stats.recipients ?? 0;
|
|
128
|
+
return {
|
|
129
|
+
message_id: m.id,
|
|
130
|
+
message_name: String(mAttrs.name ?? ""),
|
|
131
|
+
subject_line: mAttrs.subject
|
|
132
|
+
? String(mAttrs.subject)
|
|
133
|
+
: mAttrs.label
|
|
134
|
+
? String(mAttrs.label)
|
|
135
|
+
: null,
|
|
136
|
+
status: String(mAttrs.status ?? "unknown"),
|
|
137
|
+
recipients,
|
|
138
|
+
open_rate: safeRate(stats.opens_unique ?? stats.opens, recipients),
|
|
139
|
+
click_rate: safeRate(stats.clicks_unique ?? stats.clicks, recipients),
|
|
140
|
+
revenue: stats.conversion_value ?? 0,
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
return {
|
|
144
|
+
id: flow.id,
|
|
145
|
+
name: String(attrs.name ?? ""),
|
|
146
|
+
status: String(attrs.status ?? "unknown"),
|
|
147
|
+
trigger_type: String(attrs.trigger_type ?? "unknown"),
|
|
148
|
+
total_revenue: totalStats.conversion_value ?? 0,
|
|
149
|
+
total_recipients: totalStats.recipients ?? 0,
|
|
150
|
+
messages: messageDetails,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// ---- Subscriber / List / Segment Transforms ----
|
|
154
|
+
export function transformSubscriberHealth(lists, segments) {
|
|
155
|
+
const transformedLists = lists.map((l) => ({
|
|
156
|
+
id: l.id,
|
|
157
|
+
name: String(l.attributes.name ?? ""),
|
|
158
|
+
size: Number(l.attributes.profile_count ?? 0),
|
|
159
|
+
}));
|
|
160
|
+
const transformedSegments = segments.map((s) => ({
|
|
161
|
+
id: s.id,
|
|
162
|
+
name: String(s.attributes.name ?? ""),
|
|
163
|
+
estimated_size: Number(s.attributes.profile_count ?? 0),
|
|
164
|
+
}));
|
|
165
|
+
const total = transformedLists.reduce((sum, l) => sum + l.size, 0);
|
|
166
|
+
return {
|
|
167
|
+
total_subscribers: total,
|
|
168
|
+
lists: transformedLists
|
|
169
|
+
.sort((a, b) => b.size - a.size)
|
|
170
|
+
.slice(0, 10),
|
|
171
|
+
segments: transformedSegments
|
|
172
|
+
.sort((a, b) => b.estimated_size - a.estimated_size)
|
|
173
|
+
.slice(0, 10),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
export function transformListSegments(lists, segments) {
|
|
177
|
+
const items = [];
|
|
178
|
+
for (const l of lists) {
|
|
179
|
+
items.push({
|
|
180
|
+
id: l.id,
|
|
181
|
+
name: String(l.attributes.name ?? ""),
|
|
182
|
+
type: "list",
|
|
183
|
+
size: Number(l.attributes.profile_count ?? 0),
|
|
184
|
+
created_at: String(l.attributes.created ?? ""),
|
|
185
|
+
updated_at: String(l.attributes.updated ?? ""),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
for (const s of segments) {
|
|
189
|
+
items.push({
|
|
190
|
+
id: s.id,
|
|
191
|
+
name: String(s.attributes.name ?? ""),
|
|
192
|
+
type: "segment",
|
|
193
|
+
size: Number(s.attributes.profile_count ?? 0),
|
|
194
|
+
created_at: String(s.attributes.created ?? ""),
|
|
195
|
+
updated_at: String(s.attributes.updated ?? ""),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
return items;
|
|
199
|
+
}
|
|
200
|
+
// ---- Profile Transforms ----
|
|
201
|
+
export function transformProfiles(profiles) {
|
|
202
|
+
return profiles.map((p) => {
|
|
203
|
+
const attrs = p.attributes;
|
|
204
|
+
const location = attrs.location;
|
|
205
|
+
return {
|
|
206
|
+
email: attrs.email ? String(attrs.email) : null,
|
|
207
|
+
first_name: attrs.first_name ? String(attrs.first_name) : null,
|
|
208
|
+
last_name: attrs.last_name ? String(attrs.last_name) : null,
|
|
209
|
+
phone_number: attrs.phone_number ? String(attrs.phone_number) : null,
|
|
210
|
+
city: location?.city ? String(location.city) : null,
|
|
211
|
+
country: location?.country ? String(location.country) : null,
|
|
212
|
+
created_at: String(attrs.created ?? ""),
|
|
213
|
+
};
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
// ---- Event Transforms ----
|
|
217
|
+
export function transformEvents(events, includedProfiles, metricName) {
|
|
218
|
+
return events.map((e) => {
|
|
219
|
+
const attrs = e.attributes;
|
|
220
|
+
const profileId = extractRelationshipId(e.relationships, "profile");
|
|
221
|
+
const profile = profileId ? includedProfiles.get(profileId) : undefined;
|
|
222
|
+
// Strip event properties to high-signal fields based on metric type
|
|
223
|
+
const rawProps = attrs.event_properties ?? {};
|
|
224
|
+
const props = stripEventProperties(rawProps, metricName);
|
|
225
|
+
return {
|
|
226
|
+
timestamp: String(attrs.datetime ?? ""),
|
|
227
|
+
profile_email: profile?.email ?? null,
|
|
228
|
+
profile_name: profile
|
|
229
|
+
? [profile.first_name, profile.last_name].filter(Boolean).join(" ") ||
|
|
230
|
+
null
|
|
231
|
+
: null,
|
|
232
|
+
event_properties: props,
|
|
233
|
+
};
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
// ---- Helpers ----
|
|
237
|
+
function safeRate(numerator, denominator) {
|
|
238
|
+
if (!denominator || !numerator)
|
|
239
|
+
return 0;
|
|
240
|
+
return Math.round((numerator / denominator) * 10000) / 10000; // 4 decimal places
|
|
241
|
+
}
|
|
242
|
+
function extractChannelFromMessages(messages) {
|
|
243
|
+
if (!messages.length)
|
|
244
|
+
return "email";
|
|
245
|
+
const first = messages[0].attributes;
|
|
246
|
+
const def = first.definition;
|
|
247
|
+
if (def?.channel)
|
|
248
|
+
return String(def.channel);
|
|
249
|
+
// Fallback for flow messages
|
|
250
|
+
if (first.channel)
|
|
251
|
+
return String(first.channel);
|
|
252
|
+
return "email";
|
|
253
|
+
}
|
|
254
|
+
function extractSendDate(attrs) {
|
|
255
|
+
return (attrs.send_time ??
|
|
256
|
+
attrs.scheduled_at ??
|
|
257
|
+
null);
|
|
258
|
+
}
|
|
259
|
+
function extractSubjectLine(messages) {
|
|
260
|
+
if (!messages.length)
|
|
261
|
+
return null;
|
|
262
|
+
const first = messages[0].attributes;
|
|
263
|
+
// Campaign messages nest fields under definition
|
|
264
|
+
const def = first.definition;
|
|
265
|
+
if (def) {
|
|
266
|
+
const content = def.content;
|
|
267
|
+
if (content?.subject)
|
|
268
|
+
return String(content.subject);
|
|
269
|
+
if (def.label)
|
|
270
|
+
return String(def.label);
|
|
271
|
+
}
|
|
272
|
+
// Fallback for flow messages (top-level fields)
|
|
273
|
+
return first.subject ? String(first.subject) : first.label ? String(first.label) : null;
|
|
274
|
+
}
|
|
275
|
+
function extractRelationshipId(relationships, name) {
|
|
276
|
+
if (!relationships)
|
|
277
|
+
return null;
|
|
278
|
+
const rel = relationships[name];
|
|
279
|
+
return rel?.data?.id ?? null;
|
|
280
|
+
}
|
|
281
|
+
function stripEventProperties(props, metricName) {
|
|
282
|
+
const normalized = metricName.toLowerCase();
|
|
283
|
+
// For "Placed Order" — keep order value, items, and currency
|
|
284
|
+
if (normalized.includes("placed order") || normalized.includes("order")) {
|
|
285
|
+
return pick(props, [
|
|
286
|
+
"$value",
|
|
287
|
+
"value",
|
|
288
|
+
"Items",
|
|
289
|
+
"ItemNames",
|
|
290
|
+
"ItemCount",
|
|
291
|
+
"Currency",
|
|
292
|
+
"OrderId",
|
|
293
|
+
]);
|
|
294
|
+
}
|
|
295
|
+
// For email events — keep campaign/flow context
|
|
296
|
+
if (normalized.includes("opened") ||
|
|
297
|
+
normalized.includes("clicked") ||
|
|
298
|
+
normalized.includes("received")) {
|
|
299
|
+
return pick(props, [
|
|
300
|
+
"Subject",
|
|
301
|
+
"CampaignName",
|
|
302
|
+
"FlowName",
|
|
303
|
+
"$flow",
|
|
304
|
+
"$message",
|
|
305
|
+
"URL",
|
|
306
|
+
]);
|
|
307
|
+
}
|
|
308
|
+
// Default: return top-level keys only, no nested objects
|
|
309
|
+
const result = {};
|
|
310
|
+
for (const [key, val] of Object.entries(props)) {
|
|
311
|
+
if (typeof val !== "object" || val === null) {
|
|
312
|
+
result[key] = val;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
function pick(obj, keys) {
|
|
318
|
+
const result = {};
|
|
319
|
+
for (const key of keys) {
|
|
320
|
+
if (key in obj) {
|
|
321
|
+
result[key] = obj[key];
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return result;
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=transforms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transforms.js","sourceRoot":"","sources":["../../../src/platforms/klaviyo/transforms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execute a GraphQL query against Shopify Admin API.
|
|
3
|
+
*/
|
|
4
|
+
export declare function shopifyQuery<T = Record<string, unknown>>(query: string, variables?: Record<string, unknown>, estimatedCost?: number): Promise<T>;
|
|
5
|
+
export interface ShopifyQLColumn {
|
|
6
|
+
name: string;
|
|
7
|
+
dataType: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ShopifyQLResult {
|
|
11
|
+
columns: ShopifyQLColumn[];
|
|
12
|
+
rows: string[][];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Execute a ShopifyQL query for pre-aggregated analytics data.
|
|
16
|
+
*/
|
|
17
|
+
export declare function shopifyqlQuery(ql: string): Promise<ShopifyQLResult>;
|
|
18
|
+
export declare function getStoreTimezone(): Promise<string>;
|
|
19
|
+
export type SalesSource = "shopifyql" | "graphql_orders";
|
|
20
|
+
export declare function getAggregatedSales(days: number): Promise<{
|
|
21
|
+
grossRevenue: number;
|
|
22
|
+
netRevenue: number;
|
|
23
|
+
orderCount: number;
|
|
24
|
+
source: SalesSource;
|
|
25
|
+
}>;
|
|
26
|
+
export interface RawSalesBucket {
|
|
27
|
+
date: string;
|
|
28
|
+
grossRevenue: number;
|
|
29
|
+
netRevenue: number;
|
|
30
|
+
orderCount: number;
|
|
31
|
+
}
|
|
32
|
+
type Granularity = "daily" | "weekly" | "monthly";
|
|
33
|
+
/**
|
|
34
|
+
* Get sales data broken down by day, week, or month.
|
|
35
|
+
*/
|
|
36
|
+
export declare function getTimeSeriesSales(days: number, granularity: Granularity): Promise<{
|
|
37
|
+
buckets: RawSalesBucket[];
|
|
38
|
+
source: SalesSource;
|
|
39
|
+
}>;
|
|
40
|
+
interface PageInfo {
|
|
41
|
+
hasNextPage: boolean;
|
|
42
|
+
endCursor?: string | null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Auto-paginate a Shopify GraphQL query.
|
|
46
|
+
*/
|
|
47
|
+
export declare function paginateGraphQL<T>(query: string, variables: Record<string, unknown>, extractPage: (data: Record<string, unknown>) => {
|
|
48
|
+
nodes: T[];
|
|
49
|
+
pageInfo: PageInfo;
|
|
50
|
+
}, maxPages?: number, estimatedCostPerPage?: number): Promise<T[]>;
|
|
51
|
+
export {};
|