diff --git a/src/puter-js/src/index.js b/src/puter-js/src/index.js index 09d4a3f386..0b2618ac64 100644 --- a/src/puter-js/src/index.js +++ b/src/puter-js/src/index.js @@ -321,7 +321,7 @@ window.puter = (function() { this.p_can_request_rao_.resolve(); })(); (async () => { - const wispToken = (await (await fetch('https://api.puter.com/wisp/relay-token/create', { + const wispToken = (await (await fetch(this.APIOrigin + '/wisp/relay-token/create', { method: 'POST', headers: { Authorization: `Bearer ${this.authToken}`, diff --git a/src/puter-js/src/modules/networking/PWispHandler.js b/src/puter-js/src/modules/networking/PWispHandler.js index 1fbd23ae2a..4bffbde202 100644 --- a/src/puter-js/src/modules/networking/PWispHandler.js +++ b/src/puter-js/src/modules/networking/PWispHandler.js @@ -6,34 +6,40 @@ export class PWispHandler { _bufferMax; streamMap = new Map(); constructor(wispURL, puterAuth) { - this._ws = new WebSocket(wispURL); - this._ws.binaryType = "arraybuffer" - this._ws.onmessage = (event) => { - const parsed = parseIncomingPacket(new Uint8Array(event.data)); - switch (parsed.packetType) { - case DATA: - this.streamMap.get(parsed.streamID).dataCallBack(parsed.payload.slice(0)) // return a copy for the user to do as they please - break; - case CONTINUE: - if (parsed.streamID === 0) { - this._bufferMax = parsed.remainingBuffer; - return; - } - this.streamMap.get(parsed.streamID).buffer = parsed.remainingBuffer; - this._continue() - break; - case CLOSE: - this.streamMap.get(parsed.streamID).closeCallBack(parsed.reason); - break; - case INFO: - puterAuth && this._ws.send(createWispPacket({ - packetType: INFO, - streamID: 0, - puterAuth - })) - break; + const setup = () => { + this._ws = new WebSocket(wispURL); + this._ws.binaryType = "arraybuffer" + this._ws.onmessage = (event) => { + const parsed = parseIncomingPacket(new Uint8Array(event.data)); + switch (parsed.packetType) { + case DATA: + this.streamMap.get(parsed.streamID).dataCallBack(parsed.payload.slice(0)) // return a copy for the user to do as they please + break; + case CONTINUE: + if (parsed.streamID === 0) { + this._bufferMax = parsed.remainingBuffer; + this._ws.onclose = () => { + setTimeout(setup(), 1000); + } + return; + } + this.streamMap.get(parsed.streamID).buffer = parsed.remainingBuffer; + this._continue() + break; + case CLOSE: + this.streamMap.get(parsed.streamID).closeCallBack(parsed.reason); + break; + case INFO: + puterAuth && this._ws.send(createWispPacket({ + packetType: INFO, + streamID: 0, + puterAuth + })) + break; + } } } + setup(); } _continue(streamID) { const queue = this.streamMap.get(streamID).queue;