You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.0 KiB
93 lines
2.0 KiB
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; } };
|
|
|