budibase/packages/client/src/websocket.js

42 lines
1.2 KiB
JavaScript
Raw Normal View History

import {
builderStore,
environmentStore,
notificationStore,
} from "./stores/index.js"
2022-08-19 12:09:20 +02:00
import { get } from "svelte/store"
import { io } from "socket.io-client"
let socket
2022-08-19 12:09:20 +02:00
export const initWebsocket = () => {
const { inBuilder, location } = get(builderStore)
const { cloud } = get(environmentStore)
2022-08-22 19:24:34 +02:00
// Only connect when we're inside the builder preview, for now
if (!inBuilder || !location || cloud || socket) {
2022-08-19 12:09:20 +02:00
return
}
2022-08-22 19:24:34 +02:00
// Initialise connection
2022-08-19 12:09:20 +02:00
const tls = location.protocol === "https:"
const proto = tls ? "wss:" : "ws:"
const host = location.hostname
2022-08-23 09:48:16 +02:00
const port = location.port || (tls ? 443 : 80)
socket = io(`${proto}//${host}:${port}`, {
2022-08-22 19:24:34 +02:00
path: "/socket/client",
// Cap reconnection attempts to 3 (total of 15 seconds before giving up)
reconnectionAttempts: 3,
// Delay reconnection attempt by 5 seconds
reconnectionDelay: 5000,
reconnectionDelayMax: 5000,
// Timeout after 4 seconds so we never stack requests
timeout: 4000,
2022-08-19 12:09:20 +02:00
})
2022-08-22 19:24:34 +02:00
// Event handlers
2022-08-19 12:09:20 +02:00
socket.on("plugin-update", data => {
builderStore.actions.updateUsedPlugin(data.name, data.hash)
notificationStore.actions.info(`"${data.name}" plugin reloaded`)
2022-08-19 12:09:20 +02:00
})
}