@mastra/server 1.38.0-alpha.3 → 1.38.0-alpha.4
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/CHANGELOG.md +113 -0
- package/dist/{api-schema-manifest-DV7H6SLV.cjs → api-schema-manifest-JTQHOGKZ.cjs} +4 -4
- package/dist/{api-schema-manifest-DV7H6SLV.cjs.map → api-schema-manifest-JTQHOGKZ.cjs.map} +1 -1
- package/dist/{api-schema-manifest-2HZM3JT7.js → api-schema-manifest-MIQHCYPS.js} +3 -3
- package/dist/{api-schema-manifest-2HZM3JT7.js.map → api-schema-manifest-MIQHCYPS.js.map} +1 -1
- package/dist/{chunk-VJHJY3AS.js → chunk-234HJ3C3.js} +9 -30
- package/dist/chunk-234HJ3C3.js.map +1 -0
- package/dist/{chunk-YUTVYY3X.js → chunk-2DTOYQQ4.js} +3 -3
- package/dist/{chunk-YUTVYY3X.js.map → chunk-2DTOYQQ4.js.map} +1 -1
- package/dist/{chunk-FQIFYDKU.js → chunk-5SM6OBSO.js} +3 -3
- package/dist/{chunk-FQIFYDKU.js.map → chunk-5SM6OBSO.js.map} +1 -1
- package/dist/{chunk-2WUP6QIZ.cjs → chunk-65ZS7YK4.cjs} +5 -5
- package/dist/{chunk-2WUP6QIZ.cjs.map → chunk-65ZS7YK4.cjs.map} +1 -1
- package/dist/{chunk-TDAAXXUA.cjs → chunk-67X7UIDG.cjs} +9 -5
- package/dist/chunk-67X7UIDG.cjs.map +1 -0
- package/dist/chunk-6FHJAHQJ.cjs +234 -0
- package/dist/chunk-6FHJAHQJ.cjs.map +1 -0
- package/dist/{chunk-7N5OFQB3.cjs → chunk-6KPE7KSJ.cjs} +14 -14
- package/dist/{chunk-7N5OFQB3.cjs.map → chunk-6KPE7KSJ.cjs.map} +1 -1
- package/dist/{chunk-WQMMOPJQ.cjs → chunk-ANFNDHDM.cjs} +16 -16
- package/dist/{chunk-WQMMOPJQ.cjs.map → chunk-ANFNDHDM.cjs.map} +1 -1
- package/dist/{chunk-EFMN6TTT.js → chunk-APGJQAJ7.js} +3 -3
- package/dist/{chunk-EFMN6TTT.js.map → chunk-APGJQAJ7.js.map} +1 -1
- package/dist/{chunk-GII2QWIN.cjs → chunk-BO3KDJW5.cjs} +5 -5
- package/dist/{chunk-GII2QWIN.cjs.map → chunk-BO3KDJW5.cjs.map} +1 -1
- package/dist/{chunk-XHPUK2PC.cjs → chunk-CZM46CXF.cjs} +20 -20
- package/dist/{chunk-XHPUK2PC.cjs.map → chunk-CZM46CXF.cjs.map} +1 -1
- package/dist/chunk-DEYP5MF7.cjs +605 -0
- package/dist/chunk-DEYP5MF7.cjs.map +1 -0
- package/dist/{chunk-HNPFUM7G.js → chunk-EN3XZKLJ.js} +24 -16
- package/dist/chunk-EN3XZKLJ.js.map +1 -0
- package/dist/{chunk-3MCPTOLN.cjs → chunk-EQF2PRTA.cjs} +4 -4
- package/dist/{chunk-3MCPTOLN.cjs.map → chunk-EQF2PRTA.cjs.map} +1 -1
- package/dist/{chunk-PN3LDOLZ.js → chunk-FYCTKP2F.js} +9 -2
- package/dist/chunk-FYCTKP2F.js.map +1 -0
- package/dist/chunk-G7N4TLWZ.js +206 -0
- package/dist/chunk-G7N4TLWZ.js.map +1 -0
- package/dist/{chunk-TJ7OH3RN.cjs → chunk-HR5UNJF7.cjs} +3 -3
- package/dist/{chunk-TJ7OH3RN.cjs.map → chunk-HR5UNJF7.cjs.map} +1 -1
- package/dist/{chunk-HAT56AXO.cjs → chunk-JV2TL2NQ.cjs} +5 -5
- package/dist/{chunk-HAT56AXO.cjs.map → chunk-JV2TL2NQ.cjs.map} +1 -1
- package/dist/{chunk-FLBKRRNC.js → chunk-LJRCDF42.js} +3 -3
- package/dist/{chunk-FLBKRRNC.js.map → chunk-LJRCDF42.js.map} +1 -1
- package/dist/{chunk-NTXMKBCU.js → chunk-MCRZYWPS.js} +3 -3
- package/dist/{chunk-NTXMKBCU.js.map → chunk-MCRZYWPS.js.map} +1 -1
- package/dist/{chunk-QBMOXGFZ.js → chunk-MZ3EAJXG.js} +8 -4
- package/dist/chunk-MZ3EAJXG.js.map +1 -0
- package/dist/{chunk-6GNMUI4P.js → chunk-OGJFOIOH.js} +3 -3
- package/dist/{chunk-6GNMUI4P.js.map → chunk-OGJFOIOH.js.map} +1 -1
- package/dist/{chunk-C3E5C74L.cjs → chunk-OM7HESYA.cjs} +4 -4
- package/dist/{chunk-C3E5C74L.cjs.map → chunk-OM7HESYA.cjs.map} +1 -1
- package/dist/{chunk-R6CMAAEQ.js → chunk-PJI3MJPX.js} +3 -3
- package/dist/{chunk-R6CMAAEQ.js.map → chunk-PJI3MJPX.js.map} +1 -1
- package/dist/{chunk-N42WTSJL.cjs → chunk-Q5NDXAZ2.cjs} +104 -96
- package/dist/chunk-Q5NDXAZ2.cjs.map +1 -0
- package/dist/chunk-QB5CXFV7.js +592 -0
- package/dist/chunk-QB5CXFV7.js.map +1 -0
- package/dist/{chunk-3E2YDRGM.js → chunk-QCCJOLRZ.js} +3 -3
- package/dist/{chunk-3E2YDRGM.js.map → chunk-QCCJOLRZ.js.map} +1 -1
- package/dist/{chunk-X5NKEO7W.cjs → chunk-R6HOWZFY.cjs} +5 -5
- package/dist/{chunk-X5NKEO7W.cjs.map → chunk-R6HOWZFY.cjs.map} +1 -1
- package/dist/{chunk-OJ2LSGSK.js → chunk-R6SXN4ZF.js} +3 -3
- package/dist/{chunk-OJ2LSGSK.js.map → chunk-R6SXN4ZF.js.map} +1 -1
- package/dist/{chunk-MWJ6ISO7.cjs → chunk-RZ5J47R2.cjs} +4 -4
- package/dist/{chunk-MWJ6ISO7.cjs.map → chunk-RZ5J47R2.cjs.map} +1 -1
- package/dist/{chunk-QWT4ON3B.cjs → chunk-T254JS3B.cjs} +9 -2
- package/dist/chunk-T254JS3B.cjs.map +1 -0
- package/dist/{chunk-4FHOUNUN.js → chunk-TNRHBPDN.js} +3 -3
- package/dist/{chunk-4FHOUNUN.js.map → chunk-TNRHBPDN.js.map} +1 -1
- package/dist/{chunk-FYMY45UE.cjs → chunk-URLWJKB6.cjs} +15 -15
- package/dist/{chunk-FYMY45UE.cjs.map → chunk-URLWJKB6.cjs.map} +1 -1
- package/dist/{chunk-YF6SK4WY.cjs → chunk-UTBBNDFB.cjs} +22 -43
- package/dist/chunk-UTBBNDFB.cjs.map +1 -0
- package/dist/{chunk-3SSPJA4Y.js → chunk-UWETKNZ3.js} +3 -3
- package/dist/{chunk-3SSPJA4Y.js.map → chunk-UWETKNZ3.js.map} +1 -1
- package/dist/{chunk-ICYY6O53.cjs → chunk-VYDWPLTW.cjs} +4 -4
- package/dist/{chunk-ICYY6O53.cjs.map → chunk-VYDWPLTW.cjs.map} +1 -1
- package/dist/{chunk-LPB5BN2D.js → chunk-XVLL5IGQ.js} +3 -3
- package/dist/{chunk-LPB5BN2D.js.map → chunk-XVLL5IGQ.js.map} +1 -1
- package/dist/{chunk-VI7ODS36.js → chunk-ZIBWBUTB.js} +3 -3
- package/dist/{chunk-VI7ODS36.js.map → chunk-ZIBWBUTB.js.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/server/handlers/a2a.cjs +14 -14
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-versions.cjs +8 -8
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +43 -43
- package/dist/server/handlers/agents.d.ts +162 -0
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/conversations.cjs +5 -5
- package/dist/server/handlers/conversations.js +1 -1
- package/dist/server/handlers/responses.cjs +4 -4
- package/dist/server/handlers/responses.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +8 -8
- package/dist/server/handlers/scorer-versions.js +1 -1
- package/dist/server/handlers/scores.cjs +7 -7
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
- package/dist/server/handlers/stored-agent-favorites.js +1 -1
- package/dist/server/handlers/stored-agents.cjs +7 -7
- package/dist/server/handlers/stored-agents.d.ts +324 -0
- package/dist/server/handlers/stored-agents.d.ts.map +1 -1
- package/dist/server/handlers/stored-agents.js +1 -1
- package/dist/server/handlers/stored-scorers.cjs +6 -6
- package/dist/server/handlers/stored-scorers.js +1 -1
- package/dist/server/handlers/system.cjs +3 -3
- package/dist/server/handlers/system.js +1 -1
- package/dist/server/handlers/tool-providers.cjs +37 -5
- package/dist/server/handlers/tool-providers.d.ts +276 -4
- package/dist/server/handlers/tool-providers.d.ts.map +1 -1
- package/dist/server/handlers/tool-providers.js +1 -1
- package/dist/server/handlers/tools.cjs +6 -6
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers.cjs +12 -12
- package/dist/server/handlers.js +6 -6
- package/dist/server/schemas/index.cjs +174 -94
- package/dist/server/schemas/index.js +5 -5
- package/dist/server/schemas/stored-agents.d.ts +904 -0
- package/dist/server/schemas/stored-agents.d.ts.map +1 -1
- package/dist/server/schemas/tool-providers.d.ts +207 -0
- package/dist/server/schemas/tool-providers.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +13 -13
- package/dist/server/server-adapter/index.js +2 -2
- package/dist/server/server-adapter/routes/tool-providers.d.ts +232 -1
- package/dist/server/server-adapter/routes/tool-providers.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/chunk-37G66LYP.cjs +0 -65
- package/dist/chunk-37G66LYP.cjs.map +0 -1
- package/dist/chunk-ACESWSVL.cjs +0 -131
- package/dist/chunk-ACESWSVL.cjs.map +0 -1
- package/dist/chunk-HNPFUM7G.js.map +0 -1
- package/dist/chunk-MXUQJDLY.js +0 -126
- package/dist/chunk-MXUQJDLY.js.map +0 -1
- package/dist/chunk-N42WTSJL.cjs.map +0 -1
- package/dist/chunk-NIKW5NHG.js +0 -57
- package/dist/chunk-NIKW5NHG.js.map +0 -1
- package/dist/chunk-PN3LDOLZ.js.map +0 -1
- package/dist/chunk-QBMOXGFZ.js.map +0 -1
- package/dist/chunk-QWT4ON3B.cjs.map +0 -1
- package/dist/chunk-TDAAXXUA.cjs.map +0 -1
- package/dist/chunk-VJHJY3AS.js.map +0 -1
- package/dist/chunk-YF6SK4WY.cjs.map +0 -1
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkVX3MJR4P_cjs = require('./chunk-VX3MJR4P.cjs');
|
|
4
|
+
var chunk6FHJAHQJ_cjs = require('./chunk-6FHJAHQJ.cjs');
|
|
5
|
+
var chunkSTZTV4FB_cjs = require('./chunk-STZTV4FB.cjs');
|
|
6
|
+
var chunkRZR7PLFW_cjs = require('./chunk-RZR7PLFW.cjs');
|
|
7
|
+
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
|
|
8
|
+
var chunk65T6KVYX_cjs = require('./chunk-65T6KVYX.cjs');
|
|
9
|
+
var requestContext = require('@mastra/core/request-context');
|
|
10
|
+
|
|
11
|
+
var TOOL_PROVIDERS_RESOURCE = "tool-providers";
|
|
12
|
+
var SHARED_BUCKET_ID = "shared";
|
|
13
|
+
var _toolProviderModule;
|
|
14
|
+
async function loadToolProviderModule() {
|
|
15
|
+
if (!_toolProviderModule) {
|
|
16
|
+
_toolProviderModule = await import('@mastra/core/tool-provider');
|
|
17
|
+
}
|
|
18
|
+
return _toolProviderModule;
|
|
19
|
+
}
|
|
20
|
+
function requireEditor(editor) {
|
|
21
|
+
if (!editor) {
|
|
22
|
+
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Editor is not configured" });
|
|
23
|
+
}
|
|
24
|
+
return editor;
|
|
25
|
+
}
|
|
26
|
+
async function resolveProvider(editor, providerId) {
|
|
27
|
+
try {
|
|
28
|
+
return editor.getToolProviderOrThrow(providerId);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
const { UnknownToolProviderError } = await loadToolProviderModule();
|
|
31
|
+
if (error instanceof UnknownToolProviderError) {
|
|
32
|
+
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: error.message });
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
var defaultBucketWarned = false;
|
|
38
|
+
function warnDefaultBucketFallback(logger) {
|
|
39
|
+
if (defaultBucketWarned) return;
|
|
40
|
+
defaultBucketWarned = true;
|
|
41
|
+
logger?.warn(
|
|
42
|
+
'[tool-providers] caller-supplied scope falling back to shared "default" bucket \u2014 wire mapUserToResourceId or set MASTRA_USER_KEY to avoid cross-tenant OAuth sharing'
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
function resolveOwnerId(requestContext$1, logger) {
|
|
46
|
+
const resourceId = requestContext$1?.get(requestContext.MASTRA_RESOURCE_ID_KEY);
|
|
47
|
+
if (typeof resourceId === "string" && resourceId.length > 0) {
|
|
48
|
+
return resourceId;
|
|
49
|
+
}
|
|
50
|
+
const user = requestContext$1?.get(chunk65T6KVYX_cjs.MASTRA_USER_KEY);
|
|
51
|
+
if (user && typeof user === "object" && "id" in user) {
|
|
52
|
+
const id = user.id;
|
|
53
|
+
if (typeof id === "string" && id.length > 0) {
|
|
54
|
+
return id;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
warnDefaultBucketFallback(logger);
|
|
58
|
+
return "default";
|
|
59
|
+
}
|
|
60
|
+
var LIST_TOOL_PROVIDERS_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
61
|
+
method: "GET",
|
|
62
|
+
path: "/tool-providers",
|
|
63
|
+
responseType: "json",
|
|
64
|
+
responseSchema: chunk6FHJAHQJ_cjs.listToolProvidersResponseSchema,
|
|
65
|
+
summary: "List tool providers",
|
|
66
|
+
description: "Returns a list of all registered tool providers with their info and capabilities",
|
|
67
|
+
tags: ["Tool Providers"],
|
|
68
|
+
requiresAuth: true,
|
|
69
|
+
handler: async ({ mastra }) => {
|
|
70
|
+
try {
|
|
71
|
+
const editor = requireEditor(mastra.getEditor());
|
|
72
|
+
const providers = editor.getToolProviders();
|
|
73
|
+
return {
|
|
74
|
+
providers: Object.values(providers).map((provider) => ({
|
|
75
|
+
...provider.info,
|
|
76
|
+
...provider.displayName ? { displayName: provider.displayName } : {},
|
|
77
|
+
...provider.capabilities ? { capabilities: provider.capabilities } : {}
|
|
78
|
+
}))
|
|
79
|
+
};
|
|
80
|
+
} catch (error) {
|
|
81
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error listing tool providers");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
var LIST_TOOL_PROVIDER_TOOLKITS_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
86
|
+
method: "GET",
|
|
87
|
+
path: "/tool-providers/:providerId/toolkits",
|
|
88
|
+
responseType: "json",
|
|
89
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderIdPathParams,
|
|
90
|
+
responseSchema: chunk6FHJAHQJ_cjs.listToolProviderToolkitsResponseSchema,
|
|
91
|
+
summary: "List tool provider toolkits",
|
|
92
|
+
description: "Returns the toolkits available from a specific tool provider",
|
|
93
|
+
tags: ["Tool Providers"],
|
|
94
|
+
requiresAuth: true,
|
|
95
|
+
handler: async ({ mastra, providerId }) => {
|
|
96
|
+
try {
|
|
97
|
+
const editor = requireEditor(mastra.getEditor());
|
|
98
|
+
const provider = await resolveProvider(editor, providerId);
|
|
99
|
+
if (provider.listToolkitsVNext) {
|
|
100
|
+
return await provider.listToolkitsVNext();
|
|
101
|
+
}
|
|
102
|
+
if (provider.listToolkits) {
|
|
103
|
+
return await provider.listToolkits();
|
|
104
|
+
}
|
|
105
|
+
return { data: [] };
|
|
106
|
+
} catch (error) {
|
|
107
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error listing tool provider toolkits");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
var LIST_TOOL_PROVIDER_TOOLS_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
112
|
+
method: "GET",
|
|
113
|
+
path: "/tool-providers/:providerId/tools",
|
|
114
|
+
responseType: "json",
|
|
115
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderIdPathParams,
|
|
116
|
+
queryParamSchema: chunk6FHJAHQJ_cjs.listToolProviderToolsQuerySchema,
|
|
117
|
+
responseSchema: chunk6FHJAHQJ_cjs.listToolProviderToolsResponseSchema,
|
|
118
|
+
summary: "List tool provider tools",
|
|
119
|
+
description: "Returns the tools available from a specific tool provider, with optional filtering",
|
|
120
|
+
tags: ["Tool Providers"],
|
|
121
|
+
requiresAuth: true,
|
|
122
|
+
handler: async ({ mastra, providerId, toolkit, search, page, perPage }) => {
|
|
123
|
+
try {
|
|
124
|
+
const editor = requireEditor(mastra.getEditor());
|
|
125
|
+
const provider = await resolveProvider(editor, providerId);
|
|
126
|
+
const opts = {};
|
|
127
|
+
if (toolkit !== void 0) opts.toolkit = toolkit;
|
|
128
|
+
if (search !== void 0) opts.search = search;
|
|
129
|
+
if (page !== void 0) opts.page = page;
|
|
130
|
+
if (perPage !== void 0) opts.perPage = perPage;
|
|
131
|
+
if (provider.listToolsVNext) {
|
|
132
|
+
return await provider.listToolsVNext(Object.keys(opts).length > 0 ? opts : void 0);
|
|
133
|
+
}
|
|
134
|
+
return await provider.listTools(Object.keys(opts).length > 0 ? opts : void 0);
|
|
135
|
+
} catch (error) {
|
|
136
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error listing tool provider tools");
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
var GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
141
|
+
method: "GET",
|
|
142
|
+
path: "/tool-providers/:providerId/tools/:toolSlug/schema",
|
|
143
|
+
responseType: "json",
|
|
144
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolSlugPathParams,
|
|
145
|
+
responseSchema: chunk6FHJAHQJ_cjs.getToolProviderToolSchemaResponseSchema,
|
|
146
|
+
summary: "Get tool provider tool schema",
|
|
147
|
+
description: "Returns the schema for a specific tool from a tool provider",
|
|
148
|
+
tags: ["Tool Providers"],
|
|
149
|
+
requiresAuth: true,
|
|
150
|
+
handler: async ({ mastra, providerId, toolSlug }) => {
|
|
151
|
+
try {
|
|
152
|
+
const editor = requireEditor(mastra.getEditor());
|
|
153
|
+
const provider = await resolveProvider(editor, providerId);
|
|
154
|
+
if (!provider.getToolSchema) {
|
|
155
|
+
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Tool provider ${providerId} does not support getToolSchema` });
|
|
156
|
+
}
|
|
157
|
+
const schema = await provider.getToolSchema(toolSlug);
|
|
158
|
+
if (!schema) {
|
|
159
|
+
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Schema for tool ${toolSlug} not found in provider ${providerId}` });
|
|
160
|
+
}
|
|
161
|
+
return schema;
|
|
162
|
+
} catch (error) {
|
|
163
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error getting tool provider tool schema");
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
var AUTHORIZE_TOOL_PROVIDER_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
168
|
+
method: "POST",
|
|
169
|
+
path: "/tool-providers/:providerId/authorize",
|
|
170
|
+
responseType: "json",
|
|
171
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderIdPathParams,
|
|
172
|
+
bodySchema: chunk6FHJAHQJ_cjs.authorizeToolProviderBodySchema,
|
|
173
|
+
responseSchema: chunk6FHJAHQJ_cjs.authorizeToolProviderResponseSchema,
|
|
174
|
+
summary: "Authorize tool provider connection",
|
|
175
|
+
description: "Starts an OAuth flow and returns a redirect URL + opaque auth handle",
|
|
176
|
+
tags: ["Tool Providers"],
|
|
177
|
+
requiresAuth: true,
|
|
178
|
+
handler: async ({ mastra, providerId, toolkit, connectionId, toolName, config, label, scope, requestContext: requestContext$1 }) => {
|
|
179
|
+
try {
|
|
180
|
+
const editor = requireEditor(mastra.getEditor());
|
|
181
|
+
const provider = await resolveProvider(editor, providerId);
|
|
182
|
+
if (!provider.authorize) {
|
|
183
|
+
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Tool provider ${providerId} does not support authorize` });
|
|
184
|
+
}
|
|
185
|
+
const effectiveScope = scope === "shared" || scope === "caller-supplied" ? scope : "per-author";
|
|
186
|
+
const callerResourceId = requestContext$1?.get(requestContext.MASTRA_RESOURCE_ID_KEY);
|
|
187
|
+
if (effectiveScope === "caller-supplied") {
|
|
188
|
+
if (typeof callerResourceId !== "string" || callerResourceId.length === 0) {
|
|
189
|
+
throw new chunk64ITUOXI_cjs.HTTPException(400, {
|
|
190
|
+
message: `Cannot authorize caller-supplied connection: request context has no '${requestContext.MASTRA_RESOURCE_ID_KEY}'. Set requestContext.set('${requestContext.MASTRA_RESOURCE_ID_KEY}', <userId>) before calling /authorize.`
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const callerAuthorId = resolveOwnerId(requestContext$1, mastra.getLogger());
|
|
195
|
+
const ownerAuthorId = effectiveScope === "shared" ? SHARED_BUCKET_ID : effectiveScope === "caller-supplied" ? callerResourceId : callerAuthorId;
|
|
196
|
+
const bucket = connectionId && connectionId.length > 0 ? connectionId : ownerAuthorId;
|
|
197
|
+
const result = await provider.authorize({ toolkit, connectionId: bucket, toolName, config });
|
|
198
|
+
const persistedConnectionId = connectionId && connectionId.length > 0 ? connectionId : result.authId;
|
|
199
|
+
try {
|
|
200
|
+
const storage = mastra.getStorage();
|
|
201
|
+
const store = await storage?.getStore("toolProviderConnections");
|
|
202
|
+
if (store && persistedConnectionId) {
|
|
203
|
+
await store.upsertConnection({
|
|
204
|
+
authorId: ownerAuthorId,
|
|
205
|
+
providerId: provider.info.id,
|
|
206
|
+
toolkit,
|
|
207
|
+
connectionId: persistedConnectionId,
|
|
208
|
+
label: typeof label === "string" && label.length > 0 ? label : null,
|
|
209
|
+
scope: effectiveScope
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
} catch (upsertError) {
|
|
213
|
+
mastra.getLogger?.()?.warn?.("[tool-providers] failed to upsert tool_provider_connections label", {
|
|
214
|
+
error: upsertError instanceof Error ? upsertError.message : String(upsertError),
|
|
215
|
+
providerId,
|
|
216
|
+
toolkit,
|
|
217
|
+
connectionId: persistedConnectionId
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
return result;
|
|
221
|
+
} catch (error) {
|
|
222
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error authorizing tool provider");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
var GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
227
|
+
method: "GET",
|
|
228
|
+
path: "/tool-providers/:providerId/auth-status/:authId",
|
|
229
|
+
responseType: "json",
|
|
230
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderAuthStatusPathParams,
|
|
231
|
+
responseSchema: chunk6FHJAHQJ_cjs.authStatusToolProviderResponseSchema,
|
|
232
|
+
summary: "Get tool provider auth status",
|
|
233
|
+
description: "Polls the OAuth flow status for an outstanding authorize call",
|
|
234
|
+
tags: ["Tool Providers"],
|
|
235
|
+
requiresAuth: true,
|
|
236
|
+
handler: async ({ mastra, providerId, authId }) => {
|
|
237
|
+
try {
|
|
238
|
+
const editor = requireEditor(mastra.getEditor());
|
|
239
|
+
const provider = await resolveProvider(editor, providerId);
|
|
240
|
+
if (!provider.getAuthStatus) {
|
|
241
|
+
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Tool provider ${providerId} does not support getAuthStatus` });
|
|
242
|
+
}
|
|
243
|
+
const status = await provider.getAuthStatus(authId);
|
|
244
|
+
return { status };
|
|
245
|
+
} catch (error) {
|
|
246
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error getting tool provider auth status");
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
var TOOL_PROVIDER_CONNECTION_STATUS_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
251
|
+
method: "POST",
|
|
252
|
+
path: "/tool-providers/:providerId/connection-status",
|
|
253
|
+
responseType: "json",
|
|
254
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderIdPathParams,
|
|
255
|
+
bodySchema: chunk6FHJAHQJ_cjs.connectionStatusToolProviderBodySchema,
|
|
256
|
+
responseSchema: chunk6FHJAHQJ_cjs.connectionStatusToolProviderResponseSchema,
|
|
257
|
+
summary: "Get connection status for a provider",
|
|
258
|
+
description: "Batch-checks whether a set of (connectionId, toolkit) tuples are still connected",
|
|
259
|
+
tags: ["Tool Providers"],
|
|
260
|
+
requiresAuth: true,
|
|
261
|
+
handler: async ({ mastra, providerId, items }) => {
|
|
262
|
+
try {
|
|
263
|
+
const editor = requireEditor(mastra.getEditor());
|
|
264
|
+
const provider = await resolveProvider(editor, providerId);
|
|
265
|
+
if (!provider.getConnectionStatus) {
|
|
266
|
+
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Tool provider ${providerId} does not support getConnectionStatus` });
|
|
267
|
+
}
|
|
268
|
+
const result = await provider.getConnectionStatus({ items });
|
|
269
|
+
return { items: result };
|
|
270
|
+
} catch (error) {
|
|
271
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error getting connection status");
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
var LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
276
|
+
method: "GET",
|
|
277
|
+
path: "/tool-providers/:providerId/connections",
|
|
278
|
+
responseType: "json",
|
|
279
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderIdPathParams,
|
|
280
|
+
queryParamSchema: chunk6FHJAHQJ_cjs.listConnectionsQuerySchema,
|
|
281
|
+
responseSchema: chunk6FHJAHQJ_cjs.listConnectionsResponseSchema,
|
|
282
|
+
summary: "List existing connections",
|
|
283
|
+
description: "Returns existing provider connections on a toolkit, so the picker can offer them for pinning without re-running OAuth",
|
|
284
|
+
tags: ["Tool Providers"],
|
|
285
|
+
requiresAuth: true,
|
|
286
|
+
handler: async ({
|
|
287
|
+
mastra,
|
|
288
|
+
providerId,
|
|
289
|
+
toolkit,
|
|
290
|
+
authorId: queryAuthorId,
|
|
291
|
+
scope: queryScope,
|
|
292
|
+
page,
|
|
293
|
+
perPage,
|
|
294
|
+
requestContext
|
|
295
|
+
}) => {
|
|
296
|
+
try {
|
|
297
|
+
const editor = requireEditor(mastra.getEditor());
|
|
298
|
+
const provider = await resolveProvider(editor, providerId);
|
|
299
|
+
if (!provider.listConnections) {
|
|
300
|
+
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Tool provider ${providerId} does not support listConnections` });
|
|
301
|
+
}
|
|
302
|
+
const callerAuthorId = resolveOwnerId(requestContext, mastra.getLogger());
|
|
303
|
+
const isAdmin = requestContext ? chunkVX3MJR4P_cjs.hasAdminBypass(requestContext, TOOL_PROVIDERS_RESOURCE) : false;
|
|
304
|
+
const requestedAuthorId = isAdmin && typeof queryAuthorId === "string" && queryAuthorId.length > 0 ? queryAuthorId : void 0;
|
|
305
|
+
const effectiveAuthorId = isAdmin ? requestedAuthorId : callerAuthorId;
|
|
306
|
+
const storage = mastra.getStorage();
|
|
307
|
+
const store = await storage?.getStore("toolProviderConnections");
|
|
308
|
+
let labelRows = [];
|
|
309
|
+
if (store) {
|
|
310
|
+
try {
|
|
311
|
+
const rows = await store.listConnectionsByAuthor({
|
|
312
|
+
providerId: provider.info.id,
|
|
313
|
+
toolkit
|
|
314
|
+
});
|
|
315
|
+
labelRows = rows.map((r) => ({
|
|
316
|
+
authorId: r.authorId,
|
|
317
|
+
connectionId: r.connectionId,
|
|
318
|
+
label: r.label,
|
|
319
|
+
scope: r.scope ?? "per-author"
|
|
320
|
+
}));
|
|
321
|
+
} catch (joinError) {
|
|
322
|
+
mastra.getLogger?.()?.warn?.("[tool-providers] failed to join tool_provider_connections labels", {
|
|
323
|
+
error: joinError instanceof Error ? joinError.message : String(joinError),
|
|
324
|
+
providerId,
|
|
325
|
+
toolkit
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
const userIdSet = /* @__PURE__ */ new Set();
|
|
330
|
+
const wantShared = !queryScope || queryScope === "shared";
|
|
331
|
+
const wantPerAuthor = !queryScope || queryScope === "per-author";
|
|
332
|
+
const wantCallerSupplied = !queryScope || queryScope === "caller-supplied";
|
|
333
|
+
const hasSharedRow = labelRows.some((r) => r.scope === "shared");
|
|
334
|
+
if (isAdmin && effectiveAuthorId === void 0) {
|
|
335
|
+
for (const r of labelRows) {
|
|
336
|
+
if (r.scope === "shared" && wantShared) userIdSet.add(r.authorId);
|
|
337
|
+
if (r.scope === "per-author" && wantPerAuthor) userIdSet.add(r.authorId);
|
|
338
|
+
if (r.scope === "caller-supplied" && wantCallerSupplied) userIdSet.add(r.authorId);
|
|
339
|
+
}
|
|
340
|
+
} else if (isAdmin && effectiveAuthorId) {
|
|
341
|
+
if (wantPerAuthor || wantCallerSupplied) userIdSet.add(effectiveAuthorId);
|
|
342
|
+
if (wantShared && hasSharedRow) userIdSet.add(SHARED_BUCKET_ID);
|
|
343
|
+
} else {
|
|
344
|
+
if (wantPerAuthor) userIdSet.add(callerAuthorId);
|
|
345
|
+
if (wantShared && hasSharedRow) userIdSet.add(SHARED_BUCKET_ID);
|
|
346
|
+
}
|
|
347
|
+
const userIds = Array.from(userIdSet);
|
|
348
|
+
if (userIds.length === 0) {
|
|
349
|
+
return {
|
|
350
|
+
items: [],
|
|
351
|
+
pagination: { page: page ?? 1, perPage, hasMore: false }
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
const adapterResult = await provider.listConnections({
|
|
355
|
+
toolkit,
|
|
356
|
+
userIds,
|
|
357
|
+
...typeof page === "number" ? { page } : {},
|
|
358
|
+
...typeof perPage === "number" ? { perPage } : {}
|
|
359
|
+
});
|
|
360
|
+
const rowByConnId = new Map(labelRows.map((r) => [r.connectionId, r]));
|
|
361
|
+
const visibleItems = adapterResult.items.filter((item) => {
|
|
362
|
+
if (!queryScope) return true;
|
|
363
|
+
const scope = rowByConnId.get(item.connectionId)?.scope ?? "per-author";
|
|
364
|
+
return scope === queryScope;
|
|
365
|
+
});
|
|
366
|
+
return {
|
|
367
|
+
items: visibleItems.map((item) => {
|
|
368
|
+
const row = rowByConnId.get(item.connectionId);
|
|
369
|
+
return {
|
|
370
|
+
...item,
|
|
371
|
+
label: row?.label ?? null,
|
|
372
|
+
...row?.scope ? { scope: row.scope } : {}
|
|
373
|
+
};
|
|
374
|
+
}),
|
|
375
|
+
pagination: adapterResult.pagination
|
|
376
|
+
};
|
|
377
|
+
} catch (error) {
|
|
378
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error listing tool provider connections");
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
var LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
383
|
+
method: "GET",
|
|
384
|
+
path: "/tool-providers/:providerId/connection-fields",
|
|
385
|
+
responseType: "json",
|
|
386
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderIdPathParams,
|
|
387
|
+
queryParamSchema: chunk6FHJAHQJ_cjs.listConnectionFieldsQuerySchema,
|
|
388
|
+
responseSchema: chunk6FHJAHQJ_cjs.listConnectionFieldsResponseSchema,
|
|
389
|
+
summary: "List connection field schema",
|
|
390
|
+
description: "Returns a list of provider-specific fields the UI should collect before initiating an authorize call",
|
|
391
|
+
tags: ["Tool Providers"],
|
|
392
|
+
requiresAuth: true,
|
|
393
|
+
handler: async ({ mastra, providerId, toolkit }) => {
|
|
394
|
+
try {
|
|
395
|
+
const editor = requireEditor(mastra.getEditor());
|
|
396
|
+
const provider = await resolveProvider(editor, providerId);
|
|
397
|
+
if (!provider.listConnectionFields) {
|
|
398
|
+
return { fields: [] };
|
|
399
|
+
}
|
|
400
|
+
const fields = await provider.listConnectionFields({ toolkit });
|
|
401
|
+
return { fields };
|
|
402
|
+
} catch (error) {
|
|
403
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error listing tool provider connection fields");
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
var DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
408
|
+
method: "DELETE",
|
|
409
|
+
path: "/tool-providers/:providerId/connections/:connectionId",
|
|
410
|
+
responseType: "json",
|
|
411
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderConnectionPathParams,
|
|
412
|
+
queryParamSchema: chunk6FHJAHQJ_cjs.disconnectConnectionQuerySchema,
|
|
413
|
+
responseSchema: chunk6FHJAHQJ_cjs.disconnectConnectionResponseSchema,
|
|
414
|
+
summary: "Disconnect a connection",
|
|
415
|
+
description: "Revokes the provider-side connection (if supported) and removes the persisted tool_provider_connections row. Use `?force=true` to bypass usage checks.",
|
|
416
|
+
tags: ["Tool Providers"],
|
|
417
|
+
requiresAuth: true,
|
|
418
|
+
handler: async ({ mastra, providerId, connectionId, force, requestContext }) => {
|
|
419
|
+
try {
|
|
420
|
+
const editor = requireEditor(mastra.getEditor());
|
|
421
|
+
const provider = await resolveProvider(editor, providerId);
|
|
422
|
+
const callerAuthorId = resolveOwnerId(requestContext, mastra.getLogger());
|
|
423
|
+
const isAdmin = requestContext ? chunkVX3MJR4P_cjs.hasAdminBypass(requestContext, TOOL_PROVIDERS_RESOURCE) : false;
|
|
424
|
+
const isForce = force === true || force === "true";
|
|
425
|
+
const storage = mastra.getStorage();
|
|
426
|
+
const store = await storage?.getStore("toolProviderConnections");
|
|
427
|
+
let ownerAuthorId;
|
|
428
|
+
let ownerScope;
|
|
429
|
+
let matched = false;
|
|
430
|
+
if (store) {
|
|
431
|
+
const rows = await store.listConnectionsByAuthor({ providerId: provider.info.id });
|
|
432
|
+
const match = rows.find((r) => r.connectionId === connectionId);
|
|
433
|
+
if (match) {
|
|
434
|
+
matched = true;
|
|
435
|
+
ownerAuthorId = match.authorId;
|
|
436
|
+
ownerScope = match.scope;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (store && !matched && !isAdmin) {
|
|
440
|
+
throw new chunk64ITUOXI_cjs.HTTPException(403, {
|
|
441
|
+
message: "You do not have permission to disconnect this connection"
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
const effectiveOwner = ownerAuthorId ?? callerAuthorId;
|
|
445
|
+
const isShared = ownerScope === "shared";
|
|
446
|
+
if (!isShared && effectiveOwner !== callerAuthorId && !isAdmin) {
|
|
447
|
+
throw new chunk64ITUOXI_cjs.HTTPException(403, {
|
|
448
|
+
message: "You do not have permission to disconnect this connection"
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
if (!isForce) {
|
|
452
|
+
const usage = await countConnectionUsage(mastra, connectionId);
|
|
453
|
+
if (usage > 0) {
|
|
454
|
+
throw new chunk64ITUOXI_cjs.HTTPException(409, {
|
|
455
|
+
message: `Connection ${connectionId} is still pinned by ${usage} agent(s). Pass ?force=true to disconnect anyway.`
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
let revoked = false;
|
|
460
|
+
if (provider.capabilities?.supportsRevoke && typeof provider.revokeConnection === "function") {
|
|
461
|
+
await provider.revokeConnection(connectionId);
|
|
462
|
+
revoked = true;
|
|
463
|
+
}
|
|
464
|
+
if (store) {
|
|
465
|
+
await store.deleteConnection({
|
|
466
|
+
authorId: effectiveOwner,
|
|
467
|
+
providerId: provider.info.id,
|
|
468
|
+
connectionId
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
return { ok: true, revoked };
|
|
472
|
+
} catch (error) {
|
|
473
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error disconnecting tool provider connection");
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
var GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
478
|
+
method: "GET",
|
|
479
|
+
path: "/tool-providers/:providerId/connections/:connectionId/usage",
|
|
480
|
+
responseType: "json",
|
|
481
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderConnectionPathParams,
|
|
482
|
+
queryParamSchema: chunk6FHJAHQJ_cjs.connectionUsageQuerySchema,
|
|
483
|
+
responseSchema: chunk6FHJAHQJ_cjs.connectionUsageResponseSchema,
|
|
484
|
+
summary: "List agents using a connection",
|
|
485
|
+
description: "Returns the agents that pin this connection in their toolProviders config",
|
|
486
|
+
tags: ["Tool Providers"],
|
|
487
|
+
requiresAuth: true,
|
|
488
|
+
handler: async ({ mastra, providerId, connectionId, toolkit, requestContext }) => {
|
|
489
|
+
try {
|
|
490
|
+
const editor = requireEditor(mastra.getEditor());
|
|
491
|
+
const provider = await resolveProvider(editor, providerId);
|
|
492
|
+
const callerAuthorId = resolveOwnerId(requestContext, mastra.getLogger());
|
|
493
|
+
const isAdmin = requestContext ? chunkVX3MJR4P_cjs.hasAdminBypass(requestContext, TOOL_PROVIDERS_RESOURCE) : false;
|
|
494
|
+
const storage = mastra.getStorage();
|
|
495
|
+
const store = await storage?.getStore("toolProviderConnections");
|
|
496
|
+
let ownerAuthorId;
|
|
497
|
+
let ownerScope;
|
|
498
|
+
let matched = false;
|
|
499
|
+
if (store) {
|
|
500
|
+
const rows = await store.listConnectionsByAuthor({ providerId: provider.info.id });
|
|
501
|
+
const match = rows.find((r) => r.connectionId === connectionId);
|
|
502
|
+
if (match) {
|
|
503
|
+
matched = true;
|
|
504
|
+
ownerAuthorId = match.authorId;
|
|
505
|
+
ownerScope = match.scope;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
if (store && !matched && !isAdmin) {
|
|
509
|
+
throw new chunk64ITUOXI_cjs.HTTPException(403, {
|
|
510
|
+
message: "You do not have permission to view usage for this connection"
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
const effectiveOwner = ownerAuthorId ?? callerAuthorId;
|
|
514
|
+
const isShared = ownerScope === "shared";
|
|
515
|
+
if (!isShared && effectiveOwner !== callerAuthorId && !isAdmin) {
|
|
516
|
+
throw new chunk64ITUOXI_cjs.HTTPException(403, {
|
|
517
|
+
message: "You do not have permission to view usage for this connection"
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
const agents = await scanConnectionUsage(mastra, { providerId: provider.info.id, connectionId, toolkit });
|
|
521
|
+
return { agents };
|
|
522
|
+
} catch (error) {
|
|
523
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error listing tool provider connection usage");
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
});
|
|
527
|
+
var GET_TOOL_PROVIDER_HEALTH_ROUTE = chunkRZR7PLFW_cjs.createRoute({
|
|
528
|
+
method: "GET",
|
|
529
|
+
path: "/tool-providers/:providerId/health",
|
|
530
|
+
responseType: "json",
|
|
531
|
+
pathParamSchema: chunk6FHJAHQJ_cjs.toolProviderIdPathParams,
|
|
532
|
+
responseSchema: chunk6FHJAHQJ_cjs.toolProviderHealthResponseSchema,
|
|
533
|
+
summary: "Get tool provider health",
|
|
534
|
+
description: "Returns provider-level health (config, reachability, etc.)",
|
|
535
|
+
tags: ["Tool Providers"],
|
|
536
|
+
requiresAuth: true,
|
|
537
|
+
handler: async ({ mastra, providerId }) => {
|
|
538
|
+
try {
|
|
539
|
+
const editor = requireEditor(mastra.getEditor());
|
|
540
|
+
const provider = await resolveProvider(editor, providerId);
|
|
541
|
+
if (!provider.getHealth) {
|
|
542
|
+
return { ok: true };
|
|
543
|
+
}
|
|
544
|
+
return await provider.getHealth();
|
|
545
|
+
} catch (error) {
|
|
546
|
+
return chunkSTZTV4FB_cjs.handleError(error, "Error getting tool provider health");
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
});
|
|
550
|
+
async function scanConnectionUsage(mastra, args) {
|
|
551
|
+
const storage = mastra.getStorage();
|
|
552
|
+
const agentsStore = await storage?.getStore("agents");
|
|
553
|
+
if (!agentsStore) return [];
|
|
554
|
+
const { agents } = await agentsStore.listResolved({ perPage: false });
|
|
555
|
+
const out = [];
|
|
556
|
+
for (const agent of agents) {
|
|
557
|
+
const config = agent?.toolProviders?.[args.providerId];
|
|
558
|
+
if (!config?.connections) continue;
|
|
559
|
+
for (const [toolkit, connections] of Object.entries(config.connections)) {
|
|
560
|
+
if (args.toolkit && toolkit !== args.toolkit) continue;
|
|
561
|
+
const match = connections.some((c) => c.connectionId === args.connectionId);
|
|
562
|
+
if (match) {
|
|
563
|
+
out.push({ id: agent.id, name: agent.name ?? agent.id });
|
|
564
|
+
break;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
return out;
|
|
569
|
+
}
|
|
570
|
+
async function countConnectionUsage(mastra, connectionId) {
|
|
571
|
+
const storage = mastra.getStorage();
|
|
572
|
+
const agentsStore = await storage?.getStore("agents");
|
|
573
|
+
if (!agentsStore) return 0;
|
|
574
|
+
const { agents } = await agentsStore.listResolved({ perPage: false });
|
|
575
|
+
let count = 0;
|
|
576
|
+
for (const agent of agents) {
|
|
577
|
+
const tp = agent?.toolProviders;
|
|
578
|
+
if (!tp) continue;
|
|
579
|
+
for (const config of Object.values(tp)) {
|
|
580
|
+
const pinned = Object.values(config?.connections ?? {}).some(
|
|
581
|
+
(arr) => arr.some((c) => c.connectionId === connectionId)
|
|
582
|
+
);
|
|
583
|
+
if (pinned) {
|
|
584
|
+
count += 1;
|
|
585
|
+
break;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
return count;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
exports.AUTHORIZE_TOOL_PROVIDER_ROUTE = AUTHORIZE_TOOL_PROVIDER_ROUTE;
|
|
593
|
+
exports.DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE = DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE;
|
|
594
|
+
exports.GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE = GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE;
|
|
595
|
+
exports.GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE = GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE;
|
|
596
|
+
exports.GET_TOOL_PROVIDER_HEALTH_ROUTE = GET_TOOL_PROVIDER_HEALTH_ROUTE;
|
|
597
|
+
exports.GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE = GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE;
|
|
598
|
+
exports.LIST_TOOL_PROVIDERS_ROUTE = LIST_TOOL_PROVIDERS_ROUTE;
|
|
599
|
+
exports.LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE = LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE;
|
|
600
|
+
exports.LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE = LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE;
|
|
601
|
+
exports.LIST_TOOL_PROVIDER_TOOLKITS_ROUTE = LIST_TOOL_PROVIDER_TOOLKITS_ROUTE;
|
|
602
|
+
exports.LIST_TOOL_PROVIDER_TOOLS_ROUTE = LIST_TOOL_PROVIDER_TOOLS_ROUTE;
|
|
603
|
+
exports.TOOL_PROVIDER_CONNECTION_STATUS_ROUTE = TOOL_PROVIDER_CONNECTION_STATUS_ROUTE;
|
|
604
|
+
//# sourceMappingURL=chunk-DEYP5MF7.cjs.map
|
|
605
|
+
//# sourceMappingURL=chunk-DEYP5MF7.cjs.map
|