cont: fix(frontend): dont assume wss for panel pingtest as well (#6421)

* fix(frontend): dont assume wss for panel pingtest as well

* fix(frontend): wss assumptions

* chore: fix export

* chore: prettier
This commit is contained in:
François-Xavier Talbot
2026-06-17 18:54:09 -04:00
committed by GitHub
parent 336050f4df
commit 486b467af2
3 changed files with 18 additions and 5 deletions
+1
View File
@@ -43,6 +43,7 @@ export { XHRUploadClient } from './platform/xhr-upload-client'
export { clearNodeAuthState, nodeAuthState, setNodeAuthState } from './state/node-auth'
export * from './types'
export { withJWTRetry } from './utils/jwt-retry'
export { getNodeWebSocketUrl } from './utils/node-url'
export {
type ParsedSseEvent,
type ParsedSseItem,
+7 -1
View File
@@ -1,6 +1,8 @@
const NODE_FS_PATH_REGEX = /\/modrinth\/v\d+\/fs\/?$/
const HTTP_SCHEME_REGEX = /^https?:\/\//i
const WS_SCHEME_REGEX = /^wss?:\/\//i
const HTTP_SECURE_SCHEME_REGEX = /^https:\/\//i
const HTTP_INSECURE_SCHEME_REGEX = /^http:\/\//i
export function getNodeBaseUrl(url: string): string {
const baseUrl = url.replace(NODE_FS_PATH_REGEX, '')
@@ -8,5 +10,9 @@ export function getNodeBaseUrl(url: string): string {
}
export function getNodeWebSocketUrl(url: string): string {
return WS_SCHEME_REGEX.test(url) ? url : `wss://${url}`
if (WS_SCHEME_REGEX.test(url)) return url
if (HTTP_SECURE_SCHEME_REGEX.test(url)) return url.replace(HTTP_SECURE_SCHEME_REGEX, 'wss://')
if (HTTP_INSECURE_SCHEME_REGEX.test(url)) return url.replace(HTTP_INSECURE_SCHEME_REGEX, 'ws://')
return `wss://${url}`
}
@@ -344,7 +344,7 @@
<script setup lang="ts">
import type { Archon, Labrinth } from '@modrinth/api-client'
import { ModrinthApiError } from '@modrinth/api-client'
import { getNodeWebSocketUrl, ModrinthApiError } from '@modrinth/api-client'
import {
BoxesIcon,
CheckIcon,
@@ -1299,9 +1299,15 @@ async function testNodeReachability(): Promise<boolean> {
const nodeInstance = serverData.value?.node?.instance
if (!nodeInstance) return false
const wsUrl = `wss://${nodeInstance}/pingtest`
try {
const auth = await client.archon.servers_v0.getWebSocketAuth(props.serverId)
const authUrl = getNodeWebSocketUrl(auth.url)
const protocol = authUrl.toLowerCase().startsWith('ws://') ? 'ws' : 'wss'
const wsUrl = getNodeWebSocketUrl(`${nodeInstance}/pingtest`).replace(
/^wss?:\/\//i,
`${protocol}://`,
)
return await new Promise((resolve) => {
const socket = new WebSocket(wsUrl)
const timeout = setTimeout(() => {
@@ -1326,7 +1332,7 @@ async function testNodeReachability(): Promise<boolean> {
}
})
} catch (error) {
console.error(`Failed to ping node ${wsUrl}:`, error)
console.error(`Failed to ping node ${nodeInstance}:`, error)
return false
}
}