UNPKG

audioshake.js

Version:

AudioShakes groovy websocket client for receiving job status notifications

106 lines (101 loc) 4.4 kB
const AudioShake = { HOST: "", LIVE_HOST: "https://groovy.audioshake.ai", TEST_HOST: "https://staging-groovy.audioshake.ai", websocket: null, notify: function ({ live, token, onSuccess, onFailure, onStatus, debug }) { const host = live ? `${AudioShake.LIVE_HOST.split('http').join('ws')}/notes` : "ws://localhost:3002/notes"; let ws = new WebSocket(host); AudioShake.HOST = live ? AudioShake.LIVE_HOST : AudioShake.TEST_HOST; AudioShake.websocket = ws; ws.onopen = function (e) { console.log("audioshake: socket connection established"); }; ws.onclose = function (event) { if (event.wasClean) { console.log(`audioshake: socket connection closed cleanly, code=${event.code} reason=${event.reason}`); } else { console.log('audioshake: socket. connection died. reconnecting...'); AudioShake.notify({ live, token, onSuccess, onFailure, onStatus }); } }; ws.onerror = function (error) { console.log(`audioshake: socket [error] ${error.message}`); }; ws.onmessage = (msg) => { const request = JSON.parse(msg.data); if (debug) { console.log("socket message recvd: ", msg); console.log("socket method: ", request.method); console.log("socket message: ", request.message); } if (request.method === "handshake") { const d = { method: "subscribe", message: { token } }; ws.send(JSON.stringify(d)); } else if (request.method === "ping") { const d = { method: "ping", message: { keepAlive: true }, }; ws.send(JSON.stringify(d)); } else if (request.method === "subscribe") { const { message: { status } } = request; if (!status || status === 'Authentication failed') { onFailure(status); ws.close(); return; } onSuccess(`Status: Authenticated.`); const d = { method: "ping", message: { keepAlive: true }, }; ws.send(JSON.stringify(d)); } else if (request.method === "create") { const { message: { id, stemName, status } } = request; if (!status || status === 'Failed') { onFailure(status); return; } } else if (request.method === "status") { onStatus(request.message); } }; }, register: function (data, callback) { const host = `${AudioShake.HOST}/client`; var xhr = new XMLHttpRequest(); xhr.open("POST", host); xhr.setRequestHeader("Accept", "application/json"); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { console.log(xhr.status); console.log(xhr.responseText); callback(xhr.responseText); } }; xhr.send(data); }, upload: function ({ token, audioFile, stemNames, callback }) { const host = `${AudioShake.HOST}/upload/file`; let formData = new FormData(); formData.append("file", audioFile); formData.append(stemNames, [stemNames]); var xhr = new XMLHttpRequest(); xhr.open("POST", host); xhr.setRequestHeader("authorization", `Bearer ${token}`); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { console.log(xhr.status); console.log(xhr.responseText); callback({ status: xhr.status, media: xhr.responseText }); } }; xhr.send(formData); }, createJob: function ({assetId, stemName, format}) { const d = { method: "create", message: { assetId, stemName, format }, }; AudioShake.websocket.send(JSON.stringify(d)); }, disconnect: function () { if (AudioShake.websocket) { AudioShake.websocket.close() } } }; export default AudioShake;