mirror of
https://github.com/wisplite/tether-ts.git
synced 2026-05-01 06:22:41 -05:00
tons of bugfixes and additional logging
This commit is contained in:
Vendored
+1
@@ -1,6 +1,7 @@
|
||||
export declare class TetherClient {
|
||||
private websocketHandler;
|
||||
private subscribedQueries;
|
||||
private pendingMutations;
|
||||
connect: (url: string) => void;
|
||||
disconnect: () => void;
|
||||
subscribe: (queryName: string, params: any, callback: (data: any) => void) => void;
|
||||
|
||||
Vendored
+18
-11
@@ -2,6 +2,7 @@ import { WebSocketHandler } from './utils/websocket.js';
|
||||
export class TetherClient {
|
||||
websocketHandler = new WebSocketHandler();
|
||||
subscribedQueries = new Map();
|
||||
pendingMutations = new Map();
|
||||
connect = (url) => {
|
||||
this.websocketHandler.startConnection(url);
|
||||
this.websocketHandler.onQuery = (location, data) => {
|
||||
@@ -10,6 +11,15 @@ export class TetherClient {
|
||||
callback?.(data);
|
||||
}
|
||||
};
|
||||
this.websocketHandler.onMutation = (incoming_id, data) => {
|
||||
const pending = this.pendingMutations.get(incoming_id);
|
||||
if (!pending) {
|
||||
return;
|
||||
}
|
||||
clearTimeout(pending.timeoutId);
|
||||
this.pendingMutations.delete(incoming_id);
|
||||
pending.resolve(data);
|
||||
};
|
||||
this.websocketHandler.onOpen = () => {
|
||||
this.subscribedQueries.forEach(({ params }, queryName) => {
|
||||
this.websocketHandler.send(JSON.stringify({
|
||||
@@ -40,22 +50,19 @@ export class TetherClient {
|
||||
};
|
||||
sendMutation = (mutationName, params) => {
|
||||
const mutation_id = crypto.randomUUID();
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
const timeoutId = setTimeout(() => {
|
||||
this.pendingMutations.delete(mutation_id);
|
||||
reject(new Error('Mutation timeout'));
|
||||
}, 10000);
|
||||
this.pendingMutations.set(mutation_id, { resolve, reject, timeoutId });
|
||||
});
|
||||
this.websocketHandler.send(JSON.stringify({
|
||||
type: 'mutation',
|
||||
location: mutationName,
|
||||
params: params,
|
||||
mutation_id: mutation_id
|
||||
}));
|
||||
return new Promise((resolve, reject) => {
|
||||
const timeoutId = setTimeout(() => {
|
||||
reject(new Error('Mutation timeout'));
|
||||
}, 10000);
|
||||
this.websocketHandler.onMutation = (incoming_id, data) => {
|
||||
if (incoming_id === mutation_id) {
|
||||
clearTimeout(timeoutId);
|
||||
resolve(data);
|
||||
}
|
||||
};
|
||||
});
|
||||
return promise;
|
||||
};
|
||||
}
|
||||
|
||||
Vendored
+10
-3
@@ -23,7 +23,14 @@ export class WebSocketHandler {
|
||||
this.reconnectAttempts = 0;
|
||||
};
|
||||
ws.onmessage = (event) => {
|
||||
const data = JSON.parse(String(event.data));
|
||||
let data;
|
||||
try {
|
||||
data = JSON.parse(String(event.data));
|
||||
}
|
||||
catch (e) {
|
||||
console.error('Tether: invalid JSON message', event.data, e);
|
||||
return;
|
||||
}
|
||||
if (data.type === 'query') {
|
||||
this.onQuery(data.location, data.data);
|
||||
}
|
||||
@@ -34,8 +41,8 @@ export class WebSocketHandler {
|
||||
console.error(data.error);
|
||||
}
|
||||
};
|
||||
ws.onclose = () => {
|
||||
console.log('Disconnected from Tether');
|
||||
ws.onclose = (event) => {
|
||||
console.log('Disconnected from Tether', 'code:', event.code, 'reason:', event.reason || '(none)', 'wasClean:', event.wasClean);
|
||||
this.attemptReconnect();
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user