Odoo GraphQL Subscription using Node, Express JS for Sample
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

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; } };