Created
February 16, 2024 07:17
-
-
Save dhavaln/9169912b6cf5d3785f55d2bf190d1441 to your computer and use it in GitHub Desktop.
AppSync NodeJS Websocket Subscription listener
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use client'; | |
import WebSocket from 'ws'; | |
let region = 'us-east-1'; | |
let appsyncID = process.env.APPSYNC_ID; | |
let apiKey = process.env.APPSYNC_API_KEY | |
let url = `wss://${appsyncID}.appsync-realtime-api.${region}.amazonaws.com/graphql` | |
const api_header = { | |
host: `${appsyncID}.appsync-api.${region}.amazonaws.com`, | |
'x-api-key': apiKey, | |
}; | |
let ws = new WebSocket(url, ['graphql-ws']); | |
// payload should be an empty JSON object | |
const payload = {}; | |
const base64_api_header = btoa(JSON.stringify(api_header)); | |
const base64_payload = btoa(JSON.stringify(payload)); | |
const appsync_url = url + '?header=' + base64_api_header + '&payload=' + base64_payload; | |
ws = new WebSocket(appsync_url, ['graphql-ws']); | |
ws.onopen = (e) => { | |
console.log('Socket opened'); | |
ws.send(JSON.stringify({ type: "connection_init" })); | |
let listen = JSON.stringify({ | |
"id": "1", // change this to UUID | |
"type": "start", | |
"payload": { | |
"variables": { | |
}, | |
"extensions": { | |
"authorization": api_header | |
}, | |
"operationName": null, | |
"data": JSON.stringify({ "query": "subscription {\n subscribe(name: \"robots\") {\n data \n }\n}\n" }) // "robots" is the channel name | |
} | |
}) | |
ws.send(listen) | |
}; | |
ws.onmessage = (e) => {console.log('Msg received', e.data);}; | |
ws.onclose = (e) => {console.log('Socket closed', e);}; | |
ws.onerror = (e) => {console.log('Socket error', e);}; | |
/** | |
* Follow this documentation for more detail | |
* https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-real-time-create-generic-api-serverless-websocket.html | |
* https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment