@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.
Files changed (2) hide show
  1. package/dist/index.js +43 -16
  2. 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
- const httpTransport = new StreamableHTTPClientTransport(
187
- new URL(`${serverUrl}/mcp`),
188
- {
189
- fetch: async (input, init) => {
190
- const token = await tokenManager.getAccessToken();
191
- const headers = new Headers(init?.headers);
192
- headers.set("Authorization", `Bearer ${token}`);
193
- return globalThis.fetch(input, { ...init, headers });
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
- const client = new Client({ name: "savio", version: "1.0.0" });
198
- await client.connect(httpTransport);
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ellery/savio",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Savio MCP server — browser auth and local stdio proxy",
5
5
  "type": "module",
6
6
  "bin": {