@countfinancial/cli 0.1.6 → 0.1.8
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/partner-mcp/config.js +1 -1
- package/dist/partner-mcp/helpers/mcpKnowledge.helper.d.ts +19 -0
- package/dist/partner-mcp/helpers/mcpKnowledge.helper.js +293 -0
- package/dist/partner-mcp/helpers/mcpKnowledge.helper.js.map +1 -0
- package/dist/partner-mcp/helpers/mcpPayloadValidation.helper.d.ts +42 -0
- package/dist/partner-mcp/helpers/mcpPayloadValidation.helper.js +741 -0
- package/dist/partner-mcp/helpers/mcpPayloadValidation.helper.js.map +1 -0
- package/dist/partner-mcp/helpers/mcpPlaybooks.helper.d.ts +26 -0
- package/dist/partner-mcp/helpers/mcpPlaybooks.helper.js +210 -0
- package/dist/partner-mcp/helpers/mcpPlaybooks.helper.js.map +1 -0
- package/dist/partner-mcp/helpers/mcpRecoveryHint.helper.d.ts +22 -0
- package/dist/partner-mcp/helpers/mcpRecoveryHint.helper.js +203 -0
- package/dist/partner-mcp/helpers/mcpRecoveryHint.helper.js.map +1 -0
- package/dist/partner-mcp/helpers/mcpReferenceResolution.helper.d.ts +52 -0
- package/dist/partner-mcp/helpers/mcpReferenceResolution.helper.js +343 -0
- package/dist/partner-mcp/helpers/mcpReferenceResolution.helper.js.map +1 -0
- package/dist/partner-mcp/helpers/partnerErrorSanitization.helper.d.ts +18 -0
- package/dist/partner-mcp/helpers/partnerErrorSanitization.helper.js +63 -0
- package/dist/partner-mcp/helpers/partnerErrorSanitization.helper.js.map +1 -0
- package/dist/partner-mcp/partnerApiClient.d.ts +4 -0
- package/dist/partner-mcp/partnerApiClient.js +38 -1
- package/dist/partner-mcp/partnerApiClient.js.map +1 -1
- package/dist/partner-mcp/tools/definitions.js +233 -12
- package/dist/partner-mcp/tools/definitions.js.map +1 -1
- package/dist/partner-mcp/tools/registerTools.js +107 -23
- package/dist/partner-mcp/tools/registerTools.js.map +1 -1
- package/dist/partner-mcp/tools/schemas.d.ts +40 -0
- package/dist/partner-mcp/tools/schemas.js +55 -0
- package/dist/partner-mcp/tools/schemas.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
const LIST_PAGE_LIMIT = 100;
|
|
2
|
+
const REFERENCE_RESOLUTION_MAX_PAGES = 50;
|
|
3
|
+
async function fetchListRecords(params) {
|
|
4
|
+
const { client, path, search, extraQuery, recordsKey, nameField } = params;
|
|
5
|
+
const accumulatedRecords = [];
|
|
6
|
+
let page = 1;
|
|
7
|
+
while (page <= REFERENCE_RESOLUTION_MAX_PAGES) {
|
|
8
|
+
const query = {
|
|
9
|
+
...(extraQuery ?? {}),
|
|
10
|
+
search,
|
|
11
|
+
limit: LIST_PAGE_LIMIT,
|
|
12
|
+
page,
|
|
13
|
+
};
|
|
14
|
+
const response = await client.request({
|
|
15
|
+
method: 'GET',
|
|
16
|
+
path,
|
|
17
|
+
query,
|
|
18
|
+
requiresUserAuth: true,
|
|
19
|
+
});
|
|
20
|
+
const pageRecords = parseListRecordsFromResponse({ response, recordsKey, nameField });
|
|
21
|
+
accumulatedRecords.push(...pageRecords);
|
|
22
|
+
if (pageRecords.length < LIST_PAGE_LIMIT) {
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
page += 1;
|
|
26
|
+
}
|
|
27
|
+
return accumulatedRecords;
|
|
28
|
+
}
|
|
29
|
+
function parseListRecordsFromResponse(params) {
|
|
30
|
+
const { response, recordsKey, nameField } = params;
|
|
31
|
+
const rawRecords = extractRecordsArray({ response, recordsKey });
|
|
32
|
+
const listRecords = [];
|
|
33
|
+
for (const rawRecord of rawRecords) {
|
|
34
|
+
if (!rawRecord || typeof rawRecord !== 'object')
|
|
35
|
+
continue;
|
|
36
|
+
const recordObject = rawRecord;
|
|
37
|
+
const uuid = extractRecordUuid({ recordObject });
|
|
38
|
+
const nameValue = recordObject[nameField];
|
|
39
|
+
if (!uuid || typeof nameValue !== 'string' || nameValue.trim() === '')
|
|
40
|
+
continue;
|
|
41
|
+
listRecords.push({ uuid, name: nameValue.trim() });
|
|
42
|
+
}
|
|
43
|
+
return listRecords;
|
|
44
|
+
}
|
|
45
|
+
async function fetchCustomerEmailRecords(params) {
|
|
46
|
+
const { client, search } = params;
|
|
47
|
+
const accumulatedRecords = [];
|
|
48
|
+
let page = 1;
|
|
49
|
+
while (page <= REFERENCE_RESOLUTION_MAX_PAGES) {
|
|
50
|
+
const response = await client.request({
|
|
51
|
+
method: 'GET',
|
|
52
|
+
path: '/partners/customers',
|
|
53
|
+
query: {
|
|
54
|
+
search,
|
|
55
|
+
limit: LIST_PAGE_LIMIT,
|
|
56
|
+
page,
|
|
57
|
+
},
|
|
58
|
+
requiresUserAuth: true,
|
|
59
|
+
});
|
|
60
|
+
const rawRecords = extractRecordsArray({ response, recordsKey: 'customers' });
|
|
61
|
+
const pageRecords = [];
|
|
62
|
+
for (const rawRecord of rawRecords) {
|
|
63
|
+
if (!rawRecord || typeof rawRecord !== 'object')
|
|
64
|
+
continue;
|
|
65
|
+
const recordObject = rawRecord;
|
|
66
|
+
const uuid = extractRecordUuid({ recordObject });
|
|
67
|
+
const customerName = recordObject.customer;
|
|
68
|
+
if (!uuid || typeof customerName !== 'string' || customerName.trim() === '')
|
|
69
|
+
continue;
|
|
70
|
+
const emailAddresses = extractCustomerEmailAddresses({ recordObject });
|
|
71
|
+
pageRecords.push({
|
|
72
|
+
uuid,
|
|
73
|
+
name: customerName.trim(),
|
|
74
|
+
emailAddresses,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
accumulatedRecords.push(...pageRecords);
|
|
78
|
+
if (pageRecords.length < LIST_PAGE_LIMIT) {
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
page += 1;
|
|
82
|
+
}
|
|
83
|
+
return accumulatedRecords;
|
|
84
|
+
}
|
|
85
|
+
export async function resolveMcpReferences(params) {
|
|
86
|
+
const { client } = params;
|
|
87
|
+
const resolutions = [];
|
|
88
|
+
if (params.vendorName && params.vendorName.trim() !== '') {
|
|
89
|
+
const vendorRecords = await fetchListRecords({
|
|
90
|
+
client,
|
|
91
|
+
path: '/partners/vendors',
|
|
92
|
+
search: params.vendorName.trim(),
|
|
93
|
+
recordsKey: 'vendors',
|
|
94
|
+
nameField: 'name',
|
|
95
|
+
});
|
|
96
|
+
resolutions.push(buildFieldResolution({ field: 'vendorName', searchTerm: params.vendorName.trim(), records: vendorRecords }));
|
|
97
|
+
}
|
|
98
|
+
if (params.customerName && params.customerName.trim() !== '') {
|
|
99
|
+
const customerRecords = await fetchListRecords({
|
|
100
|
+
client,
|
|
101
|
+
path: '/partners/customers',
|
|
102
|
+
search: params.customerName.trim(),
|
|
103
|
+
recordsKey: 'customers',
|
|
104
|
+
nameField: 'customer',
|
|
105
|
+
});
|
|
106
|
+
resolutions.push(buildFieldResolution({ field: 'customerName', searchTerm: params.customerName.trim(), records: customerRecords }));
|
|
107
|
+
}
|
|
108
|
+
if (params.customerEmail && params.customerEmail.trim() !== '') {
|
|
109
|
+
const customerEmailRecords = await fetchCustomerEmailRecords({
|
|
110
|
+
client,
|
|
111
|
+
search: params.customerEmail.trim(),
|
|
112
|
+
});
|
|
113
|
+
resolutions.push(buildEmailFieldResolution({
|
|
114
|
+
field: 'customerEmail',
|
|
115
|
+
searchTerm: params.customerEmail.trim(),
|
|
116
|
+
records: customerEmailRecords,
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
if (params.accountName && params.accountName.trim() !== '') {
|
|
120
|
+
const accountExtraQuery = {};
|
|
121
|
+
if (params.accountType && params.accountType.trim() !== '') {
|
|
122
|
+
accountExtraQuery.type = params.accountType.trim();
|
|
123
|
+
}
|
|
124
|
+
const accountRecords = await fetchListRecords({
|
|
125
|
+
client,
|
|
126
|
+
path: '/partners/chart-of-accounts',
|
|
127
|
+
search: params.accountName.trim(),
|
|
128
|
+
extraQuery: accountExtraQuery,
|
|
129
|
+
recordsKey: 'accounts',
|
|
130
|
+
nameField: 'name',
|
|
131
|
+
});
|
|
132
|
+
resolutions.push(buildFieldResolution({ field: 'accountName', searchTerm: params.accountName.trim(), records: accountRecords }));
|
|
133
|
+
}
|
|
134
|
+
if (params.projectName && params.projectName.trim() !== '') {
|
|
135
|
+
const projectRecords = await fetchListRecords({
|
|
136
|
+
client,
|
|
137
|
+
path: '/partners/projects',
|
|
138
|
+
search: params.projectName.trim(),
|
|
139
|
+
recordsKey: 'projects',
|
|
140
|
+
nameField: 'name',
|
|
141
|
+
});
|
|
142
|
+
resolutions.push(buildFieldResolution({ field: 'projectName', searchTerm: params.projectName.trim(), records: projectRecords }));
|
|
143
|
+
}
|
|
144
|
+
if (params.tagName && params.tagName.trim() !== '') {
|
|
145
|
+
const tagRecords = await fetchListRecords({
|
|
146
|
+
client,
|
|
147
|
+
path: '/partners/tags',
|
|
148
|
+
search: params.tagName.trim(),
|
|
149
|
+
recordsKey: 'tags',
|
|
150
|
+
nameField: 'name',
|
|
151
|
+
});
|
|
152
|
+
resolutions.push(buildFieldResolution({ field: 'tagName', searchTerm: params.tagName.trim(), records: tagRecords }));
|
|
153
|
+
}
|
|
154
|
+
return { resolutions };
|
|
155
|
+
}
|
|
156
|
+
function extractCustomerEmailAddresses(params) {
|
|
157
|
+
const { recordObject } = params;
|
|
158
|
+
const emailAddresses = [];
|
|
159
|
+
if (typeof recordObject.email === 'string' && recordObject.email.trim() !== '') {
|
|
160
|
+
emailAddresses.push(recordObject.email.trim());
|
|
161
|
+
}
|
|
162
|
+
const contacts = recordObject.contacts;
|
|
163
|
+
if (Array.isArray(contacts)) {
|
|
164
|
+
for (const contact of contacts) {
|
|
165
|
+
if (!contact || typeof contact !== 'object')
|
|
166
|
+
continue;
|
|
167
|
+
const contactEmail = contact.email;
|
|
168
|
+
if (typeof contactEmail === 'string' && contactEmail.trim() !== '') {
|
|
169
|
+
emailAddresses.push(contactEmail.trim());
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return emailAddresses;
|
|
174
|
+
}
|
|
175
|
+
function extractRecordsArray(params) {
|
|
176
|
+
const { response, recordsKey } = params;
|
|
177
|
+
if (!response || typeof response !== 'object')
|
|
178
|
+
return [];
|
|
179
|
+
const responseObject = response;
|
|
180
|
+
const directArray = responseObject[recordsKey];
|
|
181
|
+
if (Array.isArray(directArray))
|
|
182
|
+
return directArray;
|
|
183
|
+
const dataObject = responseObject.data;
|
|
184
|
+
if (dataObject && typeof dataObject === 'object') {
|
|
185
|
+
const nestedArray = dataObject[recordsKey];
|
|
186
|
+
if (Array.isArray(nestedArray))
|
|
187
|
+
return nestedArray;
|
|
188
|
+
}
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
function extractRecordUuid(params) {
|
|
192
|
+
const { recordObject } = params;
|
|
193
|
+
if (typeof recordObject.id === 'string' && recordObject.id.trim() !== '') {
|
|
194
|
+
return recordObject.id.trim();
|
|
195
|
+
}
|
|
196
|
+
if (typeof recordObject.uuid === 'string' && recordObject.uuid.trim() !== '') {
|
|
197
|
+
return recordObject.uuid.trim();
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
export function scoreNameMatch(params) {
|
|
202
|
+
const normalizedSearch = params.searchTerm.trim().toLowerCase();
|
|
203
|
+
const normalizedCandidate = params.candidateName.trim().toLowerCase();
|
|
204
|
+
if (normalizedSearch === normalizedCandidate) {
|
|
205
|
+
return { score: 100, matchConfidence: 'exact' };
|
|
206
|
+
}
|
|
207
|
+
if (normalizedCandidate.startsWith(normalizedSearch)) {
|
|
208
|
+
return { score: 80, matchConfidence: 'fuzzy' };
|
|
209
|
+
}
|
|
210
|
+
if (normalizedCandidate.includes(normalizedSearch)) {
|
|
211
|
+
return { score: 60, matchConfidence: 'fuzzy' };
|
|
212
|
+
}
|
|
213
|
+
return { score: 0, matchConfidence: 'not_found' };
|
|
214
|
+
}
|
|
215
|
+
export function scoreEmailMatch(params) {
|
|
216
|
+
const normalizedSearch = params.searchTerm.trim().toLowerCase();
|
|
217
|
+
const normalizedCandidateEmail = params.candidateEmail.trim().toLowerCase();
|
|
218
|
+
if (normalizedSearch === normalizedCandidateEmail) {
|
|
219
|
+
return { score: 100, matchConfidence: 'exact' };
|
|
220
|
+
}
|
|
221
|
+
return { score: 0, matchConfidence: 'not_found' };
|
|
222
|
+
}
|
|
223
|
+
function buildFieldResolution(params) {
|
|
224
|
+
const { field, searchTerm, records } = params;
|
|
225
|
+
if (records.length === 0) {
|
|
226
|
+
return {
|
|
227
|
+
field,
|
|
228
|
+
searchTerm,
|
|
229
|
+
uuid: null,
|
|
230
|
+
name: null,
|
|
231
|
+
matchConfidence: 'not_found',
|
|
232
|
+
issue: 'not_found',
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
const scoredRecords = records
|
|
236
|
+
.map((_record) => ({
|
|
237
|
+
record: _record,
|
|
238
|
+
...scoreNameMatch({ searchTerm, candidateName: _record.name }),
|
|
239
|
+
}))
|
|
240
|
+
.filter((_scored) => _scored.score > 0)
|
|
241
|
+
.sort((_left, _right) => _right.score - _left.score);
|
|
242
|
+
if (scoredRecords.length === 0) {
|
|
243
|
+
return {
|
|
244
|
+
field,
|
|
245
|
+
searchTerm,
|
|
246
|
+
uuid: null,
|
|
247
|
+
name: null,
|
|
248
|
+
matchConfidence: 'not_found',
|
|
249
|
+
issue: 'not_found',
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
const topScore = scoredRecords[0].score;
|
|
253
|
+
const topMatches = scoredRecords.filter((_scored) => _scored.score === topScore);
|
|
254
|
+
if (topMatches.length > 1) {
|
|
255
|
+
return {
|
|
256
|
+
field,
|
|
257
|
+
searchTerm,
|
|
258
|
+
uuid: null,
|
|
259
|
+
name: null,
|
|
260
|
+
matchConfidence: 'ambiguous',
|
|
261
|
+
issue: 'ambiguous',
|
|
262
|
+
candidates: topMatches.slice(0, 5).map((_scored) => ({
|
|
263
|
+
uuid: _scored.record.uuid,
|
|
264
|
+
name: _scored.record.name,
|
|
265
|
+
})),
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
const bestMatch = topMatches[0];
|
|
269
|
+
return {
|
|
270
|
+
field,
|
|
271
|
+
searchTerm,
|
|
272
|
+
uuid: bestMatch.record.uuid,
|
|
273
|
+
name: bestMatch.record.name,
|
|
274
|
+
matchConfidence: bestMatch.matchConfidence,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function buildEmailFieldResolution(params) {
|
|
278
|
+
const { field, searchTerm, records } = params;
|
|
279
|
+
if (records.length === 0) {
|
|
280
|
+
return {
|
|
281
|
+
field,
|
|
282
|
+
searchTerm,
|
|
283
|
+
uuid: null,
|
|
284
|
+
name: null,
|
|
285
|
+
matchConfidence: 'not_found',
|
|
286
|
+
issue: 'not_found',
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
const scoredRecords = records
|
|
290
|
+
.map((_record) => {
|
|
291
|
+
let bestScore = 0;
|
|
292
|
+
let bestMatchConfidence = 'not_found';
|
|
293
|
+
for (const emailAddress of _record.emailAddresses) {
|
|
294
|
+
const emailScore = scoreEmailMatch({ searchTerm, candidateEmail: emailAddress });
|
|
295
|
+
if (emailScore.score > bestScore) {
|
|
296
|
+
bestScore = emailScore.score;
|
|
297
|
+
bestMatchConfidence = emailScore.matchConfidence;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
record: _record,
|
|
302
|
+
score: bestScore,
|
|
303
|
+
matchConfidence: bestMatchConfidence,
|
|
304
|
+
};
|
|
305
|
+
})
|
|
306
|
+
.filter((_scored) => _scored.score > 0)
|
|
307
|
+
.sort((_left, _right) => _right.score - _left.score);
|
|
308
|
+
if (scoredRecords.length === 0) {
|
|
309
|
+
return {
|
|
310
|
+
field,
|
|
311
|
+
searchTerm,
|
|
312
|
+
uuid: null,
|
|
313
|
+
name: null,
|
|
314
|
+
matchConfidence: 'not_found',
|
|
315
|
+
issue: 'not_found',
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
const topScore = scoredRecords[0].score;
|
|
319
|
+
const topMatches = scoredRecords.filter((_scored) => _scored.score === topScore);
|
|
320
|
+
if (topMatches.length > 1) {
|
|
321
|
+
return {
|
|
322
|
+
field,
|
|
323
|
+
searchTerm,
|
|
324
|
+
uuid: null,
|
|
325
|
+
name: null,
|
|
326
|
+
matchConfidence: 'ambiguous',
|
|
327
|
+
issue: 'ambiguous',
|
|
328
|
+
candidates: topMatches.slice(0, 5).map((_scored) => ({
|
|
329
|
+
uuid: _scored.record.uuid,
|
|
330
|
+
name: _scored.record.name,
|
|
331
|
+
})),
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
const bestMatch = topMatches[0];
|
|
335
|
+
return {
|
|
336
|
+
field,
|
|
337
|
+
searchTerm,
|
|
338
|
+
uuid: bestMatch.record.uuid,
|
|
339
|
+
name: bestMatch.record.name,
|
|
340
|
+
matchConfidence: bestMatch.matchConfidence,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=mcpReferenceResolution.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpReferenceResolution.helper.js","sourceRoot":"","sources":["../../../src/partner-mcp/helpers/mcpReferenceResolution.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip implementation details from partner / MCP error payloads before they
|
|
3
|
+
* reach external callers. Even on dev hosts, partner surfaces must not leak
|
|
4
|
+
* stack traces, Sequelize internals, or source file references.
|
|
5
|
+
*/
|
|
6
|
+
interface SanitizePartnerErrorMessageParams {
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function sanitizePartnerErrorMessage(params: SanitizePartnerErrorMessageParams): string;
|
|
10
|
+
interface SanitizePartnerErrorBodyParams {
|
|
11
|
+
errorBody: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export declare function sanitizePartnerErrorBody(params: SanitizePartnerErrorBodyParams): Record<string, unknown>;
|
|
14
|
+
interface SanitizeMcpToolErrorPayloadParams {
|
|
15
|
+
errorPayload: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export declare function sanitizeMcpToolErrorPayload(params: SanitizeMcpToolErrorPayloadParams): Record<string, unknown>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip implementation details from partner / MCP error payloads before they
|
|
3
|
+
* reach external callers. Even on dev hosts, partner surfaces must not leak
|
|
4
|
+
* stack traces, Sequelize internals, or source file references.
|
|
5
|
+
*/
|
|
6
|
+
const INTERNAL_ERROR_MESSAGE_PATTERN = /(\.js:\d+|\.ts:\d+|sequelize|node_modules|accountTypeId|WHERE parameter|at\s+\w+\s+\()/i;
|
|
7
|
+
const GENERIC_PARTNER_ERROR_MESSAGE = 'We could not process your request right now. Please try again in a moment.';
|
|
8
|
+
export function sanitizePartnerErrorMessage(params) {
|
|
9
|
+
const { message } = params;
|
|
10
|
+
if (!message || message.trim() === '') {
|
|
11
|
+
return GENERIC_PARTNER_ERROR_MESSAGE;
|
|
12
|
+
}
|
|
13
|
+
if (INTERNAL_ERROR_MESSAGE_PATTERN.test(message)) {
|
|
14
|
+
return GENERIC_PARTNER_ERROR_MESSAGE;
|
|
15
|
+
}
|
|
16
|
+
return message;
|
|
17
|
+
}
|
|
18
|
+
export function sanitizePartnerErrorBody(params) {
|
|
19
|
+
const { errorBody } = params;
|
|
20
|
+
const sanitizedBody = {
|
|
21
|
+
message: sanitizePartnerErrorMessage({
|
|
22
|
+
message: typeof errorBody.message === 'string' ? errorBody.message : GENERIC_PARTNER_ERROR_MESSAGE,
|
|
23
|
+
}),
|
|
24
|
+
status: errorBody.status ?? 'Error',
|
|
25
|
+
statusCode: typeof errorBody.statusCode === 'number' ? errorBody.statusCode : 500,
|
|
26
|
+
isOperational: Boolean(errorBody.isOperational),
|
|
27
|
+
};
|
|
28
|
+
if (typeof errorBody.customMsg === 'string') {
|
|
29
|
+
sanitizedBody.customMsg = sanitizePartnerErrorMessage({ message: errorBody.customMsg });
|
|
30
|
+
}
|
|
31
|
+
else if (typeof sanitizedBody.message === 'string') {
|
|
32
|
+
sanitizedBody.customMsg = sanitizedBody.message;
|
|
33
|
+
}
|
|
34
|
+
if (typeof errorBody.requestId === 'string' && errorBody.requestId.trim() !== '') {
|
|
35
|
+
sanitizedBody.requestId = errorBody.requestId;
|
|
36
|
+
}
|
|
37
|
+
if (typeof errorBody.type === 'string' && errorBody.type.trim() !== '') {
|
|
38
|
+
sanitizedBody.type = errorBody.type;
|
|
39
|
+
}
|
|
40
|
+
if (typeof errorBody.error === 'string' && errorBody.error.trim() !== '') {
|
|
41
|
+
sanitizedBody.error = errorBody.error;
|
|
42
|
+
}
|
|
43
|
+
if (typeof errorBody.error_description === 'string' && errorBody.error_description.trim() !== '') {
|
|
44
|
+
sanitizedBody.error_description = sanitizePartnerErrorMessage({ message: errorBody.error_description });
|
|
45
|
+
}
|
|
46
|
+
return sanitizedBody;
|
|
47
|
+
}
|
|
48
|
+
export function sanitizeMcpToolErrorPayload(params) {
|
|
49
|
+
const { errorPayload } = params;
|
|
50
|
+
const sanitizedPayload = { ...errorPayload };
|
|
51
|
+
delete sanitizedPayload.stack;
|
|
52
|
+
if (typeof sanitizedPayload.message === 'string') {
|
|
53
|
+
sanitizedPayload.message = sanitizePartnerErrorMessage({ message: sanitizedPayload.message });
|
|
54
|
+
}
|
|
55
|
+
const responseBody = sanitizedPayload.responseBody;
|
|
56
|
+
if (responseBody && typeof responseBody === 'object') {
|
|
57
|
+
sanitizedPayload.responseBody = sanitizePartnerErrorBody({
|
|
58
|
+
errorBody: responseBody,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return sanitizedPayload;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=partnerErrorSanitization.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partnerErrorSanitization.helper.js","sourceRoot":"","sources":["../../../src/partner-mcp/helpers/partnerErrorSanitization.helper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,8BAA8B,GAClC,yFAAyF,CAAC;AAE5F,MAAM,6BAA6B,GAAG,4EAA4E,CAAC;AAMnH,MAAM,UAAU,2BAA2B,CAAC,MAAyC;IACnF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAMD,MAAM,UAAU,wBAAwB,CAAC,MAAsC;IAC7E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAC7B,MAAM,aAAa,GAA4B;QAC7C,OAAO,EAAE,2BAA2B,CAAC;YACnC,OAAO,EAAE,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;SACnG,CAAC;QACF,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,OAAO;QACnC,UAAU,EAAE,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG;QACjF,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC;KAChD,CAAC;IAEF,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC5C,aAAa,CAAC,SAAS,GAAG,2BAA2B,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1F,CAAC;SAAM,IAAI,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrD,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjF,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvE,aAAa,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACzE,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,SAAS,CAAC,iBAAiB,KAAK,QAAQ,IAAI,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjG,aAAa,CAAC,iBAAiB,GAAG,2BAA2B,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAMD,MAAM,UAAU,2BAA2B,CAAC,MAAyC;IACnF,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAChC,MAAM,gBAAgB,GAA4B,EAAE,GAAG,YAAY,EAAE,CAAC;IAEtE,OAAO,gBAAgB,CAAC,KAAK,CAAC;IAE9B,IAAI,OAAO,gBAAgB,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjD,gBAAgB,CAAC,OAAO,GAAG,2BAA2B,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC;IACnD,IAAI,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrD,gBAAgB,CAAC,YAAY,GAAG,wBAAwB,CAAC;YACvD,SAAS,EAAE,YAAuC;SACnD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|
|
@@ -15,10 +15,12 @@ export declare class PartnerApiClient {
|
|
|
15
15
|
private readonly currentTimeMs;
|
|
16
16
|
private accessToken?;
|
|
17
17
|
private refreshToken?;
|
|
18
|
+
private inFlightRefresh;
|
|
18
19
|
constructor(params: PartnerApiClientParams);
|
|
19
20
|
getAuthState(): Record<string, boolean | string>;
|
|
20
21
|
request<TResponse = unknown>(params: RequestParams): Promise<TResponse>;
|
|
21
22
|
refreshAccessToken(): Promise<void>;
|
|
23
|
+
private performRefreshAccessToken;
|
|
22
24
|
private performRequest;
|
|
23
25
|
private buildUrl;
|
|
24
26
|
private buildHeaders;
|
|
@@ -26,6 +28,8 @@ export declare class PartnerApiClient {
|
|
|
26
28
|
private parseResponseBody;
|
|
27
29
|
private getErrorMessage;
|
|
28
30
|
private shouldRefreshAfterError;
|
|
31
|
+
/** Legacy deployments returned stale rotated tokens as 403 before protectUser emitted 401. */
|
|
32
|
+
private isStaleAccessTokenError;
|
|
29
33
|
}
|
|
30
34
|
interface ToPartnerRouterPathParams {
|
|
31
35
|
path: string;
|
|
@@ -16,6 +16,7 @@ export class PartnerApiClient {
|
|
|
16
16
|
currentTimeMs;
|
|
17
17
|
accessToken;
|
|
18
18
|
refreshToken;
|
|
19
|
+
inFlightRefresh = null;
|
|
19
20
|
constructor(params) {
|
|
20
21
|
const { config, fetchImplementation = fetch, currentTimeMs = Date.now } = params;
|
|
21
22
|
this.config = config;
|
|
@@ -67,6 +68,20 @@ export class PartnerApiClient {
|
|
|
67
68
|
throw response;
|
|
68
69
|
}
|
|
69
70
|
async refreshAccessToken() {
|
|
71
|
+
if (this.inFlightRefresh) {
|
|
72
|
+
await this.inFlightRefresh;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const refreshPromise = this.performRefreshAccessToken();
|
|
76
|
+
this.inFlightRefresh = refreshPromise;
|
|
77
|
+
try {
|
|
78
|
+
await refreshPromise;
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
this.inFlightRefresh = null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async performRefreshAccessToken() {
|
|
70
85
|
if (!this.refreshToken) {
|
|
71
86
|
throw new PartnerApiError('No refresh token is configured for this MCP server.', 401, {
|
|
72
87
|
message: 'Missing COUNT_REFRESH_TOKEN',
|
|
@@ -210,14 +225,36 @@ export class PartnerApiClient {
|
|
|
210
225
|
}
|
|
211
226
|
shouldRefreshAfterError(params) {
|
|
212
227
|
const { error } = params;
|
|
228
|
+
if (error.statusCode === 403) {
|
|
229
|
+
return this.isStaleAccessTokenError({ error });
|
|
230
|
+
}
|
|
213
231
|
if (error.statusCode !== 401) {
|
|
214
232
|
return false;
|
|
215
233
|
}
|
|
234
|
+
if (this.isStaleAccessTokenError({ error })) {
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
216
237
|
if (!error.responseBody || typeof error.responseBody !== 'object') {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
const errorBody = error.responseBody;
|
|
241
|
+
if (errorBody.error === 'missing_credentials' || errorBody.error === 'Invalid HMAC signature') {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
return (errorBody.error === 'invalid_token' ||
|
|
245
|
+
errorBody.error_description === 'The access token expired');
|
|
246
|
+
}
|
|
247
|
+
/** Legacy deployments returned stale rotated tokens as 403 before protectUser emitted 401. */
|
|
248
|
+
isStaleAccessTokenError(params) {
|
|
249
|
+
const { error } = params;
|
|
250
|
+
if (error.message === 'Invalid access token.') {
|
|
217
251
|
return true;
|
|
218
252
|
}
|
|
253
|
+
if (!error.responseBody || typeof error.responseBody !== 'object') {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
219
256
|
const errorBody = error.responseBody;
|
|
220
|
-
return errorBody.
|
|
257
|
+
return errorBody.message === 'Invalid access token.';
|
|
221
258
|
}
|
|
222
259
|
}
|
|
223
260
|
export function toPartnerRouterPath(params) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partnerApiClient.js","sourceRoot":"","sources":["../../src/partner-mcp/partnerApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAuD1D,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxB,UAAU,CAAS;IACnB,YAAY,CAAU;IAEtC,YAAY,OAAe,EAAE,UAAkB,EAAE,YAAqB;QACpE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IACV,MAAM,CAAwB;IAC9B,mBAAmB,CAAe;IAClC,aAAa,CAAe;IACrC,WAAW,CAAU;IACrB,YAAY,CAAU;
|
|
1
|
+
{"version":3,"file":"partnerApiClient.js","sourceRoot":"","sources":["../../src/partner-mcp/partnerApiClient.ts"],"names":[],"mappings":"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"}
|