From 5798fcd0421912c2816f1b3500cda3ef5f11533a Mon Sep 17 00:00:00 2001 From: ProgrammerIn-wonderland <3838shah@gmail.com> Date: Wed, 15 Jan 2025 17:12:42 -0500 Subject: [PATCH 1/2] automatic reconnection on disconnect --- .../src/modules/networking/PWispHandler.js | 58 ++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/puter-js/src/modules/networking/PWispHandler.js b/src/puter-js/src/modules/networking/PWispHandler.js index 1fbd23ae2..4bffbde20 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; From 01fc301f1eee8872cba511ce0a9c34d07cbc6a69 Mon Sep 17 00:00:00 2001 From: ProgrammerIn-wonderland <3838shah@gmail.com> Date: Wed, 15 Jan 2025 17:22:11 -0500 Subject: [PATCH 2/2] replace hardcoded api.puter.com with puter.APIOrigin --- src/puter-js/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/puter-js/src/index.js b/src/puter-js/src/index.js index 09d4a3f38..0b2618ac6 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}`,