94 lines
2.0 KiB
JavaScript
94 lines
2.0 KiB
JavaScript
const { createClient, SubscribePayload } = require('graphql-ws');
|
|
const { WebSocket } = require('ws');
|
|
|
|
// const ws = new WebSocket('ws://localhost:8016/gqlapi', {
|
|
// WebSocket,
|
|
// });
|
|
|
|
// const client = createClient({
|
|
// url: 'ws://localhost:8016/gqlapi',
|
|
// webSocketImpl: ws,
|
|
// });
|
|
|
|
// const ws = new WebSocket('ws://localhost:8016/gqlapi', {
|
|
// headers: {
|
|
// Authorization: "Basic YWRtaW46YWRtaW4="
|
|
// }
|
|
// });
|
|
|
|
// const client = createClient({
|
|
// url: 'ws://localhost:8016/gqlapi',
|
|
// webSocketImpl: ws,
|
|
// });
|
|
|
|
|
|
const headers = {
|
|
'Authorization': 'Basic YWRtaW46YWRtaW4=',
|
|
'Content-Type': 'application/json',
|
|
origin: 'abcdefg',
|
|
// Other headers as needed
|
|
};
|
|
|
|
// const ws = WebSocket('ws://localhost:8016/user-graphql-basic', {
|
|
// headers: headers
|
|
// })
|
|
|
|
class MyWebSocket extends WebSocket {
|
|
constructor(address, protocols) {
|
|
super(address, protocols, {
|
|
headers: headers
|
|
});
|
|
}
|
|
}
|
|
|
|
const client = createClient({
|
|
url: 'ws://localhost:8016/gqlapi',
|
|
//url: 'wss://easyapi.ekika.app/user-graphql-apikey',
|
|
webSocketImpl: MyWebSocket,
|
|
});
|
|
|
|
|
|
|
|
const subscribeToSomething = async () => {
|
|
const payload = {
|
|
query: `
|
|
subscription MySubscription{
|
|
ResPartnerSub{
|
|
name
|
|
phone
|
|
email
|
|
}
|
|
}
|
|
`,
|
|
};
|
|
|
|
const onNext = (data) => {
|
|
console.log('Received data:', data);
|
|
// Send data to the client
|
|
if (wsClient && wsClient.readyState === WebSocket.OPEN) {
|
|
wsClient.send(JSON.stringify(data));
|
|
}
|
|
};
|
|
|
|
const onError = (error) => {
|
|
console.error('Subscription error:', error);
|
|
};
|
|
|
|
const onComplete = () => {
|
|
console.log('Subscription complete');
|
|
};
|
|
|
|
await new Promise((resolve, reject) => {
|
|
client.subscribe(payload, {
|
|
next: onNext,
|
|
error: onError,
|
|
complete: onComplete,
|
|
});
|
|
});
|
|
};
|
|
|
|
// Keep track of the connected WebSocket client
|
|
let wsClient = null;
|
|
|
|
module.exports = { subscribeToSomething, setWsClient: (client) => { wsClient = client; } };
|