lemonsqueezy-mcp-server 1.0.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/ENV_EXAMPLE.md +83 -0
- package/LICENSE +21 -0
- package/README.md +141 -0
- package/SETUP.md +244 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +80 -0
- package/dist/config.js.map +1 -0
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +55 -0
- package/dist/config.test.js.map +1 -0
- package/dist/connections/firebase.d.ts +3 -0
- package/dist/connections/firebase.d.ts.map +1 -0
- package/dist/connections/firebase.js +62 -0
- package/dist/connections/firebase.js.map +1 -0
- package/dist/connections/salesforce.d.ts +3 -0
- package/dist/connections/salesforce.d.ts.map +1 -0
- package/dist/connections/salesforce.js +307 -0
- package/dist/connections/salesforce.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/payment-context.d.ts +14 -0
- package/dist/resources/payment-context.d.ts.map +1 -0
- package/dist/resources/payment-context.js +111 -0
- package/dist/resources/payment-context.js.map +1 -0
- package/dist/server.d.ts +36 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +14 -0
- package/dist/server.js.map +1 -0
- package/dist/sync-last-purchase.d.ts +3 -0
- package/dist/sync-last-purchase.d.ts.map +1 -0
- package/dist/sync-last-purchase.js +113 -0
- package/dist/sync-last-purchase.js.map +1 -0
- package/dist/tools/definitions.d.ts +3768 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +753 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/handlers/analytics.d.ts +21 -0
- package/dist/tools/handlers/analytics.d.ts.map +1 -0
- package/dist/tools/handlers/analytics.js +398 -0
- package/dist/tools/handlers/analytics.js.map +1 -0
- package/dist/tools/handlers/lemonsqueezy.d.ts +436 -0
- package/dist/tools/handlers/lemonsqueezy.d.ts.map +1 -0
- package/dist/tools/handlers/lemonsqueezy.js +481 -0
- package/dist/tools/handlers/lemonsqueezy.js.map +1 -0
- package/dist/tools/handlers/salesforce.d.ts +13 -0
- package/dist/tools/handlers/salesforce.d.ts.map +1 -0
- package/dist/tools/handlers/salesforce.js +54 -0
- package/dist/tools/handlers/salesforce.js.map +1 -0
- package/dist/tools/handlers/vos.d.ts +26 -0
- package/dist/tools/handlers/vos.d.ts.map +1 -0
- package/dist/tools/handlers/vos.js +207 -0
- package/dist/tools/handlers/vos.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +202 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +24 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +8 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/response.d.ts +14 -0
- package/dist/utils/response.d.ts.map +1 -0
- package/dist/utils/response.js +17 -0
- package/dist/utils/response.js.map +1 -0
- package/dist/utils/retry.d.ts +11 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +36 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/secrets/provider.d.ts +30 -0
- package/dist/utils/secrets/provider.d.ts.map +1 -0
- package/dist/utils/secrets/provider.js +51 -0
- package/dist/utils/secrets/provider.js.map +1 -0
- package/dist/utils/secrets.d.ts +7 -0
- package/dist/utils/secrets.d.ts.map +1 -0
- package/dist/utils/secrets.js +16 -0
- package/dist/utils/secrets.js.map +1 -0
- package/dist/utils/validation.d.ts +580 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +250 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/webhooks/listener.d.ts +17 -0
- package/dist/webhooks/listener.d.ts.map +1 -0
- package/dist/webhooks/listener.js +140 -0
- package/dist/webhooks/listener.js.map +1 -0
- package/dist/webhooks/ngrok.d.ts +8 -0
- package/dist/webhooks/ngrok.d.ts.map +1 -0
- package/dist/webhooks/ngrok.js +50 -0
- package/dist/webhooks/ngrok.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import admin from "firebase-admin";
|
|
2
|
+
import { listOrders, listSubscriptions } from "@lemonsqueezy/lemonsqueezy.js";
|
|
3
|
+
import { getFirebaseApp } from "../../connections/firebase.js";
|
|
4
|
+
import { config } from "../../config.js";
|
|
5
|
+
import { createResponse, createErrorResponse } from "../../utils/response.js";
|
|
6
|
+
export async function handleSearchTransactionsNatural(args) {
|
|
7
|
+
const { query } = args;
|
|
8
|
+
try {
|
|
9
|
+
const app = await getFirebaseApp();
|
|
10
|
+
const db = app.firestore();
|
|
11
|
+
// 1. Parse query for date range and intent
|
|
12
|
+
const now = new Date();
|
|
13
|
+
let startDate = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000); // Default 30 days
|
|
14
|
+
const q = query.toLowerCase();
|
|
15
|
+
if (q.includes("yesterday")) {
|
|
16
|
+
startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);
|
|
17
|
+
}
|
|
18
|
+
else if (q.includes("today")) {
|
|
19
|
+
startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
20
|
+
}
|
|
21
|
+
else if (q.includes("week")) {
|
|
22
|
+
startDate = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
|
|
23
|
+
}
|
|
24
|
+
else if (q.includes("month")) {
|
|
25
|
+
startDate = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
26
|
+
}
|
|
27
|
+
// Keywords
|
|
28
|
+
const isRefund = q.includes("refund");
|
|
29
|
+
const isSub = q.includes("subscription");
|
|
30
|
+
const isPack = q.includes("pack");
|
|
31
|
+
const isOrder = q.includes("order") || (!isRefund && !isSub && !isPack);
|
|
32
|
+
// 2. Query Lemon Squeezy
|
|
33
|
+
const lsTransactions = [];
|
|
34
|
+
const storeId = config.lemonSqueezyStoreId;
|
|
35
|
+
if (isOrder || isRefund) {
|
|
36
|
+
const { data } = await listOrders({
|
|
37
|
+
filter: { storeId: storeId ? parseInt(storeId) : undefined },
|
|
38
|
+
});
|
|
39
|
+
if (data?.data) {
|
|
40
|
+
lsTransactions.push(...data.data.filter((o) => {
|
|
41
|
+
const created = new Date(o.attributes.created_at);
|
|
42
|
+
if (created < startDate)
|
|
43
|
+
return false;
|
|
44
|
+
if (isRefund && o.attributes.status !== "refunded")
|
|
45
|
+
return false;
|
|
46
|
+
return true;
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (isSub) {
|
|
51
|
+
const { data } = await listSubscriptions({
|
|
52
|
+
filter: { storeId: storeId ? parseInt(storeId) : undefined },
|
|
53
|
+
});
|
|
54
|
+
if (data?.data) {
|
|
55
|
+
lsTransactions.push(...data.data.filter((s) => {
|
|
56
|
+
const created = new Date(s.attributes.created_at);
|
|
57
|
+
return created >= startDate;
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// 3. Query Firestore
|
|
62
|
+
let firestoreQuery = db
|
|
63
|
+
.collection("revenue_ledger")
|
|
64
|
+
.where("createdAt", ">=", admin.firestore.Timestamp.fromDate(startDate));
|
|
65
|
+
if (isSub)
|
|
66
|
+
firestoreQuery = firestoreQuery.where("type", "==", "subscription");
|
|
67
|
+
if (isPack)
|
|
68
|
+
firestoreQuery = firestoreQuery.where("type", "==", "pack");
|
|
69
|
+
const snapshot = await firestoreQuery.get();
|
|
70
|
+
const firestoreEntries = snapshot.docs.map((doc) => ({ id: doc.id, ...doc.data() }));
|
|
71
|
+
// 4. Discrepancies
|
|
72
|
+
const discrepancies = [];
|
|
73
|
+
firestoreEntries.forEach((entry) => {
|
|
74
|
+
const lsMatch = lsTransactions.find((t) => t.id === entry.transactionId || t.attributes.identifier === entry.transactionId);
|
|
75
|
+
if (lsMatch) {
|
|
76
|
+
const lsAmount = (lsMatch.attributes.total || lsMatch.attributes.amount) / 100;
|
|
77
|
+
if (lsAmount !== entry.amountPaid) {
|
|
78
|
+
discrepancies.push({
|
|
79
|
+
transactionId: entry.transactionId,
|
|
80
|
+
lsAmount,
|
|
81
|
+
firestoreAmount: entry.amountPaid,
|
|
82
|
+
delta: lsAmount - entry.amountPaid,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return createResponse({
|
|
88
|
+
lemonSqueezy: {
|
|
89
|
+
count: lsTransactions.length,
|
|
90
|
+
totalAmount: lsTransactions.reduce((acc, t) => acc + (t.attributes.total || t.attributes.amount || 0) / 100, 0),
|
|
91
|
+
transactions: lsTransactions.map((t) => ({
|
|
92
|
+
id: t.id,
|
|
93
|
+
status: t.attributes.status,
|
|
94
|
+
amount: (t.attributes.total || t.attributes.amount) / 100,
|
|
95
|
+
})),
|
|
96
|
+
},
|
|
97
|
+
firestore: {
|
|
98
|
+
count: firestoreEntries.length,
|
|
99
|
+
totalAmount: firestoreEntries.reduce((acc, e) => acc + (e.amountPaid || 0), 0),
|
|
100
|
+
entries: firestoreEntries,
|
|
101
|
+
},
|
|
102
|
+
discrepancies,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
return createErrorResponse(error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export async function handleAnalyzeChurnRisk(args) {
|
|
110
|
+
try {
|
|
111
|
+
const app = await getFirebaseApp();
|
|
112
|
+
const db = app.firestore();
|
|
113
|
+
// 1. Fetch active subscriptions from LS
|
|
114
|
+
const storeId = config.lemonSqueezyStoreId;
|
|
115
|
+
const { data } = await listSubscriptions({
|
|
116
|
+
filter: { storeId: storeId ? parseInt(storeId) : undefined, status: "active" },
|
|
117
|
+
});
|
|
118
|
+
if (!data?.data)
|
|
119
|
+
return createResponse({ totalActiveSubscriptions: 0, atRiskUsers: [], atRiskMRR: 0 });
|
|
120
|
+
const activeSubs = data.data;
|
|
121
|
+
const atRiskUsers = [];
|
|
122
|
+
let atRiskMRR = 0;
|
|
123
|
+
const twentyEightDaysAgo = new Date(Date.now() - 28 * 24 * 60 * 60 * 1000);
|
|
124
|
+
// 2. Cross-reference with Firestore users
|
|
125
|
+
for (const sub of activeSubs) {
|
|
126
|
+
const email = sub.attributes.user_email;
|
|
127
|
+
const attrs = sub.attributes;
|
|
128
|
+
const userSnapshot = await db.collection("users").where("email", "==", email).limit(1).get();
|
|
129
|
+
if (userSnapshot.empty) {
|
|
130
|
+
// No user found in Firestore but active subscription exists? Flag it.
|
|
131
|
+
atRiskUsers.push({
|
|
132
|
+
email,
|
|
133
|
+
name: attrs.user_name || "Unknown",
|
|
134
|
+
subscriptionId: sub.id,
|
|
135
|
+
daysSinceLastLogin: -1, // Never logged in
|
|
136
|
+
monthlyValue: attrs.variant_amount / 100 || 0,
|
|
137
|
+
});
|
|
138
|
+
atRiskMRR += attrs.variant_amount / 100 || 0;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const userData = userSnapshot.docs[0].data();
|
|
142
|
+
const lastLogin = userData.lastLoginAt ? userData.lastLoginAt.toDate() : null;
|
|
143
|
+
if (!lastLogin || lastLogin < twentyEightDaysAgo) {
|
|
144
|
+
const daysSince = lastLogin
|
|
145
|
+
? Math.floor((Date.now() - lastLogin.getTime()) / (1000 * 60 * 60 * 24))
|
|
146
|
+
: 999;
|
|
147
|
+
atRiskUsers.push({
|
|
148
|
+
email: userData.email || email,
|
|
149
|
+
name: userData.name || attrs.user_name,
|
|
150
|
+
subscriptionId: sub.id,
|
|
151
|
+
daysSinceLastLogin: daysSince,
|
|
152
|
+
monthlyValue: attrs.variant_amount / 100 || 0,
|
|
153
|
+
});
|
|
154
|
+
atRiskMRR += attrs.variant_amount / 100 || 0;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return createResponse({
|
|
158
|
+
totalActiveSubscriptions: activeSubs.length,
|
|
159
|
+
atRiskUsers,
|
|
160
|
+
atRiskMRR,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
return createErrorResponse(error);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export async function handleCanonizeDecision(args) {
|
|
168
|
+
const { decision, rationale, expectedOutcome, category } = args;
|
|
169
|
+
try {
|
|
170
|
+
const app = await getFirebaseApp();
|
|
171
|
+
const db = app.firestore();
|
|
172
|
+
// 1. Calculate Snapshot Metrics
|
|
173
|
+
const activeSubscribersSnapshot = await db
|
|
174
|
+
.collection("users")
|
|
175
|
+
.where("subscriptionStatus", "==", "active")
|
|
176
|
+
.get();
|
|
177
|
+
const usersWithCreditsSnapshot = await db.collection("users").where("creditBalance", ">", 0).get();
|
|
178
|
+
// Use a Set to get unique active users
|
|
179
|
+
const activeUserIds = new Set();
|
|
180
|
+
activeSubscribersSnapshot.docs.forEach((doc) => activeUserIds.add(doc.id));
|
|
181
|
+
usersWithCreditsSnapshot.docs.forEach((doc) => activeUserIds.add(doc.id));
|
|
182
|
+
const snapshot = {
|
|
183
|
+
activeUserCount: activeUserIds.size,
|
|
184
|
+
activeSubscriberCount: activeSubscribersSnapshot.size,
|
|
185
|
+
timestamp: new Date().toISOString(),
|
|
186
|
+
};
|
|
187
|
+
// 2. Create Decision Document
|
|
188
|
+
const decisionData = {
|
|
189
|
+
decision,
|
|
190
|
+
rationale,
|
|
191
|
+
expectedOutcome,
|
|
192
|
+
category: category || "general",
|
|
193
|
+
createdAt: admin.firestore.FieldValue.serverTimestamp(),
|
|
194
|
+
snapshot,
|
|
195
|
+
};
|
|
196
|
+
const docRef = await db.collection("business_decisions").add(decisionData);
|
|
197
|
+
return createResponse({
|
|
198
|
+
success: true,
|
|
199
|
+
id: docRef.id,
|
|
200
|
+
snapshot,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
return createErrorResponse(error);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=vos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vos.js","sourceRoot":"","sources":["../../../src/tools/handlers/vos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,IAAuB;IAC3E,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,cAAc,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAE3B,2CAA2C;QAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,kBAAkB;QACtF,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAE9B,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7E,CAAC;aAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;QAExE,yBAAyB;QACzB,MAAM,cAAc,GAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAE3C,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC;gBAChC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;aAC7D,CAAC,CAAC;YACH,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;gBACf,cAAc,CAAC,IAAI,CACjB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE;oBAC7B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAClD,IAAI,OAAO,GAAG,SAAS;wBAAE,OAAO,KAAK,CAAC;oBACtC,IAAI,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,UAAU;wBAAE,OAAO,KAAK,CAAC;oBACjE,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,CAAC;gBACvC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;aAC7D,CAAC,CAAC;YACH,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;gBACf,cAAc,CAAC,IAAI,CACjB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE;oBAC7B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAClD,OAAO,OAAO,IAAI,SAAS,CAAC;gBAC9B,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,cAAc,GAA0B,EAAE;aAC3C,UAAU,CAAC,gBAAgB,CAAC;aAC5B,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3E,IAAI,KAAK;YAAE,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC/E,IAAI,MAAM;YAAE,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC;QAC5C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAErF,mBAAmB;QACnB,MAAM,aAAa,GAAU,EAAE,CAAC;QAChC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,KAAK,KAAK,CAAC,aAAa,CACvF,CAAC;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;gBAC/E,IAAI,QAAQ,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;oBAClC,aAAa,CAAC,IAAI,CAAC;wBACjB,aAAa,EAAE,KAAK,CAAC,aAAa;wBAClC,QAAQ;wBACR,eAAe,EAAE,KAAK,CAAC,UAAU;wBACjC,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC,UAAU;qBACnC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;YACpB,YAAY,EAAE;gBACZ,KAAK,EAAE,cAAc,CAAC,MAAM;gBAC5B,WAAW,EAAE,cAAc,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,EACxE,CAAC,CACF;gBACD,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM;oBAC3B,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG;iBAC1D,CAAC,CAAC;aACJ;YACD,SAAS,EAAE;gBACT,KAAK,EAAE,gBAAgB,CAAC,MAAM;gBAC9B,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnF,OAAO,EAAE,gBAAgB;aAC1B;YACD,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAQ;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,cAAc,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAE3B,wCAAwC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,CAAC;YACvC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;SAC/E,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,IAAI;YAAE,OAAO,cAAc,CAAC,EAAE,wBAAwB,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAEvG,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;QAC7B,MAAM,WAAW,GAAU,EAAE,CAAC;QAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,kBAAkB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE3E,0CAA0C;QAC1C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;YACxC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAiB,CAAC;YACpC,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YAE7F,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;gBACvB,sEAAsE;gBACtE,WAAW,CAAC,IAAI,CAAC;oBACf,KAAK;oBACL,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;oBAClC,cAAc,EAAE,GAAG,CAAC,EAAE;oBACtB,kBAAkB,EAAE,CAAC,CAAC,EAAE,kBAAkB;oBAC1C,YAAY,EAAE,KAAK,CAAC,cAAc,GAAG,GAAG,IAAI,CAAC;iBAC9C,CAAC,CAAC;gBACH,SAAS,IAAI,KAAK,CAAC,cAAc,GAAG,GAAG,IAAI,CAAC,CAAC;gBAC7C,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE9E,IAAI,CAAC,SAAS,IAAI,SAAS,GAAG,kBAAkB,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,SAAS;oBACzB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;oBACxE,CAAC,CAAC,GAAG,CAAC;gBACR,WAAW,CAAC,IAAI,CAAC;oBACf,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,KAAK;oBAC9B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS;oBACtC,cAAc,EAAE,GAAG,CAAC,EAAE;oBACtB,kBAAkB,EAAE,SAAS;oBAC7B,YAAY,EAAE,KAAK,CAAC,cAAc,GAAG,GAAG,IAAI,CAAC;iBAC9C,CAAC,CAAC;gBACH,SAAS,IAAI,KAAK,CAAC,cAAc,GAAG,GAAG,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;YACpB,wBAAwB,EAAE,UAAU,CAAC,MAAM;YAC3C,WAAW;YACX,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAK5C;IACC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,cAAc,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAE3B,gCAAgC;QAChC,MAAM,yBAAyB,GAAG,MAAM,EAAE;aACvC,UAAU,CAAC,OAAO,CAAC;aACnB,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,QAAQ,CAAC;aAC3C,GAAG,EAAE,CAAC;QACT,MAAM,wBAAwB,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAEnG,uCAAuC;QACvC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAG;YACf,eAAe,EAAE,aAAa,CAAC,IAAI;YACnC,qBAAqB,EAAE,yBAAyB,CAAC,IAAI;YACrD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,8BAA8B;QAC9B,MAAM,YAAY,GAAG;YACnB,QAAQ;YACR,SAAS;YACT,eAAe;YACf,QAAQ,EAAE,QAAQ,IAAI,SAAS;YAC/B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE;YACvD,QAAQ;SACT,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE3E,OAAO,cAAc,CAAC;YACpB,OAAO,EAAE,IAAI;YACb,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AASA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;;;;;GAwT/D"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { TOOLS } from "./definitions.js";
|
|
2
|
+
import * as lsHandlers from "./handlers/lemonsqueezy.js";
|
|
3
|
+
import * as sfHandlers from "./handlers/salesforce.js";
|
|
4
|
+
import * as vosHandlers from "./handlers/vos.js";
|
|
5
|
+
import * as analyticsHandlers from "./handlers/analytics.js";
|
|
6
|
+
import { createErrorResponse } from "../utils/response.js";
|
|
7
|
+
import { validateToolArgs } from "../utils/validation.js";
|
|
8
|
+
import { logger } from "../utils/logger.js";
|
|
9
|
+
export async function handleToolCall(name, args) {
|
|
10
|
+
try {
|
|
11
|
+
// Validate input arguments
|
|
12
|
+
let validatedArgs;
|
|
13
|
+
try {
|
|
14
|
+
validatedArgs = validateToolArgs(name, args);
|
|
15
|
+
}
|
|
16
|
+
catch (validationError) {
|
|
17
|
+
logger.warn({ tool: name, args, error: validationError }, "Input validation failed");
|
|
18
|
+
return createErrorResponse(new Error(`Invalid arguments for ${name}: ${validationError instanceof Error ? validationError.message : String(validationError)}`));
|
|
19
|
+
}
|
|
20
|
+
// Stores
|
|
21
|
+
if (name === TOOLS.GET_STORE) {
|
|
22
|
+
return await lsHandlers.handleGetStore(validatedArgs);
|
|
23
|
+
}
|
|
24
|
+
if (name === TOOLS.LIST_STORES) {
|
|
25
|
+
return await lsHandlers.handleListStores(validatedArgs);
|
|
26
|
+
}
|
|
27
|
+
// Customers
|
|
28
|
+
if (name === TOOLS.GET_CUSTOMER) {
|
|
29
|
+
return await lsHandlers.handleGetCustomer(validatedArgs);
|
|
30
|
+
}
|
|
31
|
+
if (name === TOOLS.LIST_CUSTOMERS) {
|
|
32
|
+
return await lsHandlers.handleListCustomers(validatedArgs);
|
|
33
|
+
}
|
|
34
|
+
if (name === TOOLS.CREATE_CUSTOMER) {
|
|
35
|
+
return await lsHandlers.handleCreateCustomer(validatedArgs);
|
|
36
|
+
}
|
|
37
|
+
if (name === TOOLS.UPDATE_CUSTOMER) {
|
|
38
|
+
return await lsHandlers.handleUpdateCustomer(validatedArgs);
|
|
39
|
+
}
|
|
40
|
+
if (name === TOOLS.ARCHIVE_CUSTOMER) {
|
|
41
|
+
return await lsHandlers.handleArchiveCustomer(validatedArgs);
|
|
42
|
+
}
|
|
43
|
+
// Products
|
|
44
|
+
if (name === TOOLS.GET_PRODUCT) {
|
|
45
|
+
return await lsHandlers.handleGetProduct(validatedArgs);
|
|
46
|
+
}
|
|
47
|
+
if (name === TOOLS.LIST_PRODUCTS) {
|
|
48
|
+
return await lsHandlers.handleListProducts(validatedArgs);
|
|
49
|
+
}
|
|
50
|
+
// Variants
|
|
51
|
+
if (name === TOOLS.GET_VARIANT) {
|
|
52
|
+
return await lsHandlers.handleGetVariant(validatedArgs);
|
|
53
|
+
}
|
|
54
|
+
if (name === TOOLS.LIST_VARIANTS) {
|
|
55
|
+
return await lsHandlers.handleListVariants(validatedArgs);
|
|
56
|
+
}
|
|
57
|
+
// Orders
|
|
58
|
+
if (name === TOOLS.GET_ORDER) {
|
|
59
|
+
return await lsHandlers.handleGetOrder(validatedArgs);
|
|
60
|
+
}
|
|
61
|
+
if (name === TOOLS.LIST_ORDERS) {
|
|
62
|
+
return await lsHandlers.handleListOrders(validatedArgs);
|
|
63
|
+
}
|
|
64
|
+
if (name === TOOLS.SEARCH_ORDERS) {
|
|
65
|
+
return await lsHandlers.handleSearchOrders(validatedArgs);
|
|
66
|
+
}
|
|
67
|
+
if (name === TOOLS.GET_ORDER_ITEM) {
|
|
68
|
+
return await lsHandlers.handleGetOrderItem(validatedArgs);
|
|
69
|
+
}
|
|
70
|
+
if (name === TOOLS.LIST_ORDER_ITEMS) {
|
|
71
|
+
return await lsHandlers.handleListOrderItems(validatedArgs);
|
|
72
|
+
}
|
|
73
|
+
if (name === TOOLS.GENERATE_ORDER_INVOICE) {
|
|
74
|
+
return await lsHandlers.handleGenerateOrderInvoice(validatedArgs);
|
|
75
|
+
}
|
|
76
|
+
if (name === TOOLS.ISSUE_ORDER_REFUND) {
|
|
77
|
+
return await lsHandlers.handleIssueOrderRefund(validatedArgs);
|
|
78
|
+
}
|
|
79
|
+
// Subscriptions
|
|
80
|
+
if (name === TOOLS.GET_SUBSCRIPTION) {
|
|
81
|
+
return await lsHandlers.handleGetSubscription(validatedArgs);
|
|
82
|
+
}
|
|
83
|
+
if (name === TOOLS.LIST_SUBSCRIPTIONS) {
|
|
84
|
+
return await lsHandlers.handleListSubscriptions(validatedArgs);
|
|
85
|
+
}
|
|
86
|
+
if (name === TOOLS.UPDATE_SUBSCRIPTION) {
|
|
87
|
+
return await lsHandlers.handleUpdateSubscription(validatedArgs);
|
|
88
|
+
}
|
|
89
|
+
if (name === TOOLS.CANCEL_SUBSCRIPTION) {
|
|
90
|
+
return await lsHandlers.handleCancelSubscription(validatedArgs);
|
|
91
|
+
}
|
|
92
|
+
// Subscription Items
|
|
93
|
+
if (name === TOOLS.GET_SUBSCRIPTION_ITEM) {
|
|
94
|
+
return await lsHandlers.handleGetSubscriptionItem(validatedArgs);
|
|
95
|
+
}
|
|
96
|
+
if (name === TOOLS.LIST_SUBSCRIPTION_ITEMS) {
|
|
97
|
+
return await lsHandlers.handleListSubscriptionItems(validatedArgs);
|
|
98
|
+
}
|
|
99
|
+
if (name === TOOLS.GET_SUBSCRIPTION_ITEM_USAGE) {
|
|
100
|
+
return await lsHandlers.handleGetSubscriptionItemUsage(validatedArgs);
|
|
101
|
+
}
|
|
102
|
+
// Subscription Invoices
|
|
103
|
+
if (name === TOOLS.GET_SUBSCRIPTION_INVOICE) {
|
|
104
|
+
return await lsHandlers.handleGetSubscriptionInvoice(validatedArgs);
|
|
105
|
+
}
|
|
106
|
+
if (name === TOOLS.LIST_SUBSCRIPTION_INVOICES) {
|
|
107
|
+
return await lsHandlers.handleListSubscriptionInvoices(validatedArgs);
|
|
108
|
+
}
|
|
109
|
+
if (name === TOOLS.GENERATE_SUBSCRIPTION_INVOICE) {
|
|
110
|
+
return await lsHandlers.handleGenerateSubscriptionInvoice(validatedArgs);
|
|
111
|
+
}
|
|
112
|
+
if (name === TOOLS.ISSUE_SUBSCRIPTION_INVOICE_REFUND) {
|
|
113
|
+
return await lsHandlers.handleIssueSubscriptionInvoiceRefund(validatedArgs);
|
|
114
|
+
}
|
|
115
|
+
// Discounts
|
|
116
|
+
if (name === TOOLS.GET_DISCOUNT) {
|
|
117
|
+
return await lsHandlers.handleGetDiscount(validatedArgs);
|
|
118
|
+
}
|
|
119
|
+
if (name === TOOLS.LIST_DISCOUNTS) {
|
|
120
|
+
return await lsHandlers.handleListDiscounts(validatedArgs);
|
|
121
|
+
}
|
|
122
|
+
if (name === TOOLS.CREATE_DISCOUNT) {
|
|
123
|
+
return await lsHandlers.handleCreateDiscount(validatedArgs);
|
|
124
|
+
}
|
|
125
|
+
if (name === TOOLS.DELETE_DISCOUNT) {
|
|
126
|
+
return await lsHandlers.handleDeleteDiscount(validatedArgs);
|
|
127
|
+
}
|
|
128
|
+
// License Keys
|
|
129
|
+
if (name === TOOLS.GET_LICENSE_KEY) {
|
|
130
|
+
return await lsHandlers.handleGetLicenseKey(validatedArgs);
|
|
131
|
+
}
|
|
132
|
+
if (name === TOOLS.LIST_LICENSE_KEYS) {
|
|
133
|
+
return await lsHandlers.handleListLicenseKeys(validatedArgs);
|
|
134
|
+
}
|
|
135
|
+
if (name === TOOLS.UPDATE_LICENSE_KEY) {
|
|
136
|
+
return await lsHandlers.handleUpdateLicenseKey(validatedArgs);
|
|
137
|
+
}
|
|
138
|
+
// Files
|
|
139
|
+
if (name === TOOLS.GET_FILE) {
|
|
140
|
+
return await lsHandlers.handleGetFile(validatedArgs);
|
|
141
|
+
}
|
|
142
|
+
if (name === TOOLS.LIST_FILES) {
|
|
143
|
+
return await lsHandlers.handleListFiles(validatedArgs);
|
|
144
|
+
}
|
|
145
|
+
// Usage Records
|
|
146
|
+
if (name === TOOLS.GET_USAGE_RECORD) {
|
|
147
|
+
return await lsHandlers.handleGetUsageRecord(validatedArgs);
|
|
148
|
+
}
|
|
149
|
+
if (name === TOOLS.LIST_USAGE_RECORDS) {
|
|
150
|
+
return await lsHandlers.handleListUsageRecords(validatedArgs);
|
|
151
|
+
}
|
|
152
|
+
if (name === TOOLS.CREATE_USAGE_RECORD) {
|
|
153
|
+
return await lsHandlers.handleCreateUsageRecord(validatedArgs);
|
|
154
|
+
}
|
|
155
|
+
// Checkouts
|
|
156
|
+
if (name === TOOLS.CREATE_CHECKOUT) {
|
|
157
|
+
return await lsHandlers.handleCreateCheckout(validatedArgs);
|
|
158
|
+
}
|
|
159
|
+
// Webhooks
|
|
160
|
+
if (name === TOOLS.GET_WEBHOOK) {
|
|
161
|
+
return await lsHandlers.handleGetWebhook(validatedArgs);
|
|
162
|
+
}
|
|
163
|
+
if (name === TOOLS.LIST_WEBHOOKS) {
|
|
164
|
+
return await lsHandlers.handleListWebhooks(validatedArgs);
|
|
165
|
+
}
|
|
166
|
+
if (name === TOOLS.CREATE_WEBHOOK) {
|
|
167
|
+
return await lsHandlers.handleCreateWebhook(validatedArgs);
|
|
168
|
+
}
|
|
169
|
+
if (name === TOOLS.UPDATE_WEBHOOK) {
|
|
170
|
+
return await lsHandlers.handleUpdateWebhook(validatedArgs);
|
|
171
|
+
}
|
|
172
|
+
if (name === TOOLS.DELETE_WEBHOOK) {
|
|
173
|
+
return await lsHandlers.handleDeleteWebhook(validatedArgs);
|
|
174
|
+
}
|
|
175
|
+
// Salesforce
|
|
176
|
+
if (name === TOOLS.SYNC_CUSTOMER_TO_CRM) {
|
|
177
|
+
return await sfHandlers.handleSyncCustomerToCRM(validatedArgs);
|
|
178
|
+
}
|
|
179
|
+
// VOS Tools
|
|
180
|
+
if (name === TOOLS.SEARCH_TRANSACTIONS_NATURAL) {
|
|
181
|
+
return await vosHandlers.handleSearchTransactionsNatural(validatedArgs);
|
|
182
|
+
}
|
|
183
|
+
if (name === TOOLS.ANALYZE_CHURN_RISK) {
|
|
184
|
+
return await vosHandlers.handleAnalyzeChurnRisk(validatedArgs);
|
|
185
|
+
}
|
|
186
|
+
if (name === TOOLS.CANONIZE_DECISION) {
|
|
187
|
+
return await vosHandlers.handleCanonizeDecision(validatedArgs);
|
|
188
|
+
}
|
|
189
|
+
// Analytics Tools
|
|
190
|
+
if (name === TOOLS.GET_FINANCIAL_METRICS) {
|
|
191
|
+
return await analyticsHandlers.handleGetFinancialMetrics(validatedArgs);
|
|
192
|
+
}
|
|
193
|
+
if (name === TOOLS.PREDICT_CHURN_RISK) {
|
|
194
|
+
return await analyticsHandlers.handlePredictChurnRisk(validatedArgs);
|
|
195
|
+
}
|
|
196
|
+
throw new Error(`Tool not found: ${name}`);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
return createErrorResponse(error);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Connection } from "jsforce";
|
|
2
|
+
export type SalesforceConnection = Connection;
|
|
3
|
+
export type SalesforceCredentials = {
|
|
4
|
+
type: "username_password";
|
|
5
|
+
username: string;
|
|
6
|
+
password: string;
|
|
7
|
+
securityToken: string;
|
|
8
|
+
} | {
|
|
9
|
+
type: "jwt";
|
|
10
|
+
clientId: string;
|
|
11
|
+
username: string;
|
|
12
|
+
privateKey: string;
|
|
13
|
+
loginUrl?: string;
|
|
14
|
+
};
|
|
15
|
+
export interface PaymentEvent {
|
|
16
|
+
timestamp: string;
|
|
17
|
+
type: string;
|
|
18
|
+
orderId?: number;
|
|
19
|
+
customerEmail?: string;
|
|
20
|
+
status?: string;
|
|
21
|
+
amount?: string;
|
|
22
|
+
message: string;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAE9C,MAAM,MAAM,qBAAqB,GAC7B;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEN,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAYxB,eAAO,MAAM,MAAM,6BAA2D,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import pino from "pino";
|
|
2
|
+
const logLevel = process.env.LOG_LEVEL || (process.env.NODE_ENV === "production" ? "info" : "debug");
|
|
3
|
+
const logFormat = process.env.LOG_FORMAT || (process.env.NODE_ENV === "production" ? "json" : "pretty");
|
|
4
|
+
const baseLogger = pino({
|
|
5
|
+
level: logLevel,
|
|
6
|
+
}, process.stderr);
|
|
7
|
+
export const logger = baseLogger.child({ service: "lemonsqueezy-mcp-server" });
|
|
8
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACrG,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAExG,MAAM,UAAU,GAAG,IAAI,CACrB;IACE,KAAK,EAAE,QAAQ;CAChB,EACD,OAAO,CAAC,MAAM,CACf,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function createResponse(data: unknown): {
|
|
2
|
+
content: {
|
|
3
|
+
type: "text";
|
|
4
|
+
text: string;
|
|
5
|
+
}[];
|
|
6
|
+
};
|
|
7
|
+
export declare function createErrorResponse(error: unknown): {
|
|
8
|
+
content: {
|
|
9
|
+
type: "text";
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError: boolean;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO;;;;;EAI3C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO;;;;;;EAUjD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function createResponse(data) {
|
|
2
|
+
return {
|
|
3
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
4
|
+
};
|
|
5
|
+
}
|
|
6
|
+
export function createErrorResponse(error) {
|
|
7
|
+
return {
|
|
8
|
+
content: [
|
|
9
|
+
{
|
|
10
|
+
type: "text",
|
|
11
|
+
text: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
isError: true,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aACzE;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface RetryConfig {
|
|
2
|
+
maxRetries: number;
|
|
3
|
+
initialDelayMs: number;
|
|
4
|
+
maxDelayMs: number;
|
|
5
|
+
backoffMultiplier: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function retry<T>(fn: () => Promise<T>, retryConfig?: Partial<RetryConfig>, context?: {
|
|
8
|
+
operation: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}): Promise<T>;
|
|
11
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAYD,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAClC,OAAO,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GACtD,OAAO,CAAC,CAAC,CAAC,CAsCZ"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { logger } from "./logger.js";
|
|
2
|
+
// Get retry config from environment with sensible defaults
|
|
3
|
+
function getRetryConfig() {
|
|
4
|
+
return {
|
|
5
|
+
maxRetries: parseInt(process.env.RETRY_MAX_ATTEMPTS || "3", 10),
|
|
6
|
+
initialDelayMs: parseInt(process.env.RETRY_INITIAL_DELAY_MS || "1000", 10),
|
|
7
|
+
maxDelayMs: parseInt(process.env.RETRY_MAX_DELAY_MS || "30000", 10),
|
|
8
|
+
backoffMultiplier: parseFloat(process.env.RETRY_BACKOFF_MULTIPLIER || "2"),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export async function retry(fn, retryConfig, context) {
|
|
12
|
+
const config = { ...getRetryConfig(), ...retryConfig };
|
|
13
|
+
let lastError;
|
|
14
|
+
const operation = context?.operation || "operation";
|
|
15
|
+
for (let attempt = 0; attempt <= config.maxRetries; attempt++) {
|
|
16
|
+
try {
|
|
17
|
+
return await fn();
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
lastError = error;
|
|
21
|
+
// Don't retry on last attempt
|
|
22
|
+
if (attempt === config.maxRetries) {
|
|
23
|
+
logger.warn({ attempt: attempt + 1, maxRetries: config.maxRetries, error, ...context }, `Retry failed after ${attempt + 1} attempts: ${operation}`);
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
// Calculate delay with exponential backoff
|
|
27
|
+
const delay = Math.min(config.initialDelayMs * Math.pow(config.backoffMultiplier, attempt), config.maxDelayMs);
|
|
28
|
+
logger.debug({ attempt: attempt + 1, delay, error, ...context }, `Retrying ${operation} (attempt ${attempt + 1}/${config.maxRetries})`);
|
|
29
|
+
// Wait before retrying
|
|
30
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// This should never be reached, but TypeScript needs it
|
|
34
|
+
throw lastError;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAUrC,2DAA2D;AAC3D,SAAS,cAAc;IACrB,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,GAAG,EAAE,EAAE,CAAC;QAC/D,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,EAAE,EAAE,CAAC;QAC1E,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,EAAE,EAAE,CAAC;QACnE,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,GAAG,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,WAAkC,EAClC,OAAuD;IAEvD,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;IACvD,IAAI,SAA0B,CAAC;IAC/B,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,WAAW,CAAC;IAEpD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QAC9D,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAElB,8BAA8B;YAC9B,IAAI,OAAO,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,EAC1E,sBAAsB,OAAO,GAAG,CAAC,cAAc,SAAS,EAAE,CAC3D,CAAC;gBACF,MAAM,KAAK,CAAC;YACd,CAAC;YAED,2CAA2C;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,EACnE,MAAM,CAAC,UAAU,CAClB,CAAC;YAEF,MAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,EAClD,YAAY,SAAS,aAAa,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,GAAG,CACtE,CAAC;YAEF,uBAAuB;YACvB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,MAAM,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SecretsProvider interface for pluggable secret management
|
|
3
|
+
* Allows users to use AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager, etc.
|
|
4
|
+
*/
|
|
5
|
+
export interface SecretsProvider {
|
|
6
|
+
getSecret(name: string): Promise<string>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Environment variable secrets provider (default)
|
|
10
|
+
* Reads secrets directly from environment variables
|
|
11
|
+
*/
|
|
12
|
+
export declare class EnvSecretsProvider implements SecretsProvider {
|
|
13
|
+
getSecret(name: string): Promise<string>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* AWS Secrets Manager provider
|
|
17
|
+
* Retrieves secrets from AWS Secrets Manager
|
|
18
|
+
*/
|
|
19
|
+
export declare class AwsSecretsProvider implements SecretsProvider {
|
|
20
|
+
private client;
|
|
21
|
+
private region;
|
|
22
|
+
constructor(region: string);
|
|
23
|
+
getSecret(name: string): Promise<string>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the configured secrets provider based on environment variables
|
|
27
|
+
* Defaults to EnvSecretsProvider if no provider is specified
|
|
28
|
+
*/
|
|
29
|
+
export declare function getSecretsProvider(): SecretsProvider;
|
|
30
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/utils/secrets/provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IAClD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAO/C;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,MAAM,CAAiE;IAC/E,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAMpB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAW/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAWpD"}
|