@ellery/savio 0.3.0 → 0.4.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/dist/index.js +43 -16
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -183,19 +183,46 @@ async function startProxy(refreshToken, serverUrl) {
|
|
|
183
183
|
}
|
|
184
184
|
throw err;
|
|
185
185
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
186
|
+
let client;
|
|
187
|
+
function createTransport() {
|
|
188
|
+
return new StreamableHTTPClientTransport(
|
|
189
|
+
new URL(`${serverUrl}/mcp`),
|
|
190
|
+
{
|
|
191
|
+
fetch: async (input, init) => {
|
|
192
|
+
const token = await tokenManager.getAccessToken();
|
|
193
|
+
const headers = new Headers(init?.headers);
|
|
194
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
195
|
+
return globalThis.fetch(input, { ...init, headers });
|
|
196
|
+
}
|
|
194
197
|
}
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
async function connect() {
|
|
201
|
+
client = new Client({ name: "savio", version: "1.0.0" });
|
|
202
|
+
await client.connect(createTransport());
|
|
203
|
+
}
|
|
204
|
+
async function reconnect() {
|
|
205
|
+
try {
|
|
206
|
+
await client.close();
|
|
207
|
+
} catch {
|
|
195
208
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
209
|
+
await connect();
|
|
210
|
+
process.stderr.write(`Reconnected to ${serverUrl}
|
|
211
|
+
`);
|
|
212
|
+
}
|
|
213
|
+
async function withReconnect(fn) {
|
|
214
|
+
try {
|
|
215
|
+
return await fn();
|
|
216
|
+
} catch (err) {
|
|
217
|
+
try {
|
|
218
|
+
await reconnect();
|
|
219
|
+
return await fn();
|
|
220
|
+
} catch (retryErr) {
|
|
221
|
+
throw retryErr;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
await connect();
|
|
199
226
|
process.stderr.write(`Connected to ${serverUrl}
|
|
200
227
|
`);
|
|
201
228
|
const server = new Server(
|
|
@@ -203,19 +230,19 @@ async function startProxy(refreshToken, serverUrl) {
|
|
|
203
230
|
{ capabilities: { tools: {}, resources: {} } }
|
|
204
231
|
);
|
|
205
232
|
server.setRequestHandler(ListToolsRequestSchema, async (req) => {
|
|
206
|
-
return client.listTools(req.params);
|
|
233
|
+
return withReconnect(() => client.listTools(req.params));
|
|
207
234
|
});
|
|
208
235
|
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
209
|
-
return client.callTool(req.params);
|
|
236
|
+
return withReconnect(() => client.callTool(req.params));
|
|
210
237
|
});
|
|
211
238
|
server.setRequestHandler(ListResourcesRequestSchema, async (req) => {
|
|
212
|
-
return client.listResources(req.params);
|
|
239
|
+
return withReconnect(() => client.listResources(req.params));
|
|
213
240
|
});
|
|
214
241
|
server.setRequestHandler(ReadResourceRequestSchema, async (req) => {
|
|
215
|
-
return client.readResource(req.params);
|
|
242
|
+
return withReconnect(() => client.readResource(req.params));
|
|
216
243
|
});
|
|
217
244
|
server.setRequestHandler(ListResourceTemplatesRequestSchema, async (req) => {
|
|
218
|
-
return client.listResourceTemplates(req.params);
|
|
245
|
+
return withReconnect(() => client.listResourceTemplates(req.params));
|
|
219
246
|
});
|
|
220
247
|
const stdioTransport = new StdioServerTransport();
|
|
221
248
|
await server.connect(stdioTransport);
|