altair-graphql-core
Version:
Several of the core logic for altair graphql client
47 lines • 1.68 kB
JavaScript
import { Observable } from 'rxjs';
import { SubscriptionClient } from 'subscriptions-transport-ws';
import { simpleResponseObserver } from '../utils';
export class WebsocketRequestHandler {
onConnected(subscriber, error, data) {
if (error) {
console.log('Subscription connection error', error);
subscriber.error(error);
return;
}
console.log('Connected subscription.');
}
handle(request) {
return new Observable((subscriber) => {
this.client = new SubscriptionClient(request.url, {
reconnect: true,
connectionParams: request.additionalParams,
connectionCallback: (error, result) => {
this.onConnected(subscriber, error, result);
},
});
if (!this.client) {
throw new Error('Could not create WS client!');
}
const requestStartTimestamp = Date.now();
const res = this.client
.request({
query: request.query,
variables: request.variables,
operationName: request.selectedOperation ?? undefined,
})
.subscribe(simpleResponseObserver(subscriber, request.url, requestStartTimestamp));
this.cleanup = res.unsubscribe;
return () => {
this.destroy();
};
});
}
async destroy() {
this.cleanup?.();
this.cleanup = undefined;
this.client?.unsubscribeAll();
this.client?.close();
this.client = undefined;
}
}
//# sourceMappingURL=ws.js.map