()
| 297 | } |
| 298 | |
| 299 | async function restartLocalService() { |
| 300 | console.error( |
| 301 | `[simdeck-provider-bridge] local SimDeck HTTP has been unavailable for ${Date.now() - localUnavailableSince}ms; restarting local service.`, |
| 302 | ); |
| 303 | printRecentServiceLog(); |
| 304 | await execFileAsync(localServiceCommand, localServiceRestartArgs, { |
| 305 | timeout: 90_000, |
| 306 | windowsHide: true, |
| 307 | }); |
| 308 | const { stdout } = await execFileAsync( |
| 309 | localServiceCommand, |
| 310 | localServiceStatusArgs, |
| 311 | { |
| 312 | timeout: 15_000, |
| 313 | windowsHide: true, |
| 314 | }, |
| 315 | ); |
| 316 | const status = JSON.parse(stdout); |
| 317 | const service = status.service ?? status; |
| 318 | if (service.httpUrl) { |
| 319 | localUrl = String(service.httpUrl).replace(/\/$/, ""); |
| 320 | } |
| 321 | if (service.accessToken) { |
| 322 | localToken = String(service.accessToken); |
| 323 | } |
| 324 | if (service.pid) { |
| 325 | localServicePid = Number(service.pid); |
| 326 | } |
| 327 | if (service.logPath) { |
| 328 | localServiceLog = String(service.logPath); |
| 329 | } |
| 330 | responseCache.clear(); |
| 331 | inFlightCache.clear(); |
| 332 | localUnavailableSince = 0; |
| 333 | lastLocalUnavailableLogAt = 0; |
| 334 | console.error( |
| 335 | `[simdeck-provider-bridge] local SimDeck service restarted at ${localUrl}.`, |
| 336 | ); |
| 337 | } |
| 338 | |
| 339 | async function createLocalProviderSession() { |
| 340 | const response = await fetchJson(`${cloudUrl}/api/local-provider-sessions`, { |
no test coverage detected