53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
import { writable } from 'svelte/store';
|
|
import { browser } from '$app/environment'
|
|
|
|
let authKey = undefined;
|
|
let controlUrl = undefined;
|
|
if(browser)
|
|
{
|
|
let params = new URLSearchParams("?"+window.location.hash.substr(1));
|
|
authKey = params.get("authKey");
|
|
controlUrl = params.get("controlUrl");
|
|
}
|
|
let dashboardUrl = controlUrl ? null : "https://login.tailscale.com/admin/machines";
|
|
let resolveLogin = null;
|
|
let loginPromise = new Promise((f,r) => {
|
|
resolveLogin = f;
|
|
});
|
|
let connectionState = writable("DISCONNECTED");
|
|
|
|
function loginUrlCb(url)
|
|
{
|
|
resolveLogin(url);
|
|
}
|
|
|
|
function stateUpdateCb(state)
|
|
{
|
|
switch(state)
|
|
{
|
|
case 6 /*Running*/:
|
|
{
|
|
connectionState.set("CONNECTED");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function netmapUpdateCb(map)
|
|
{
|
|
networkData.currentIp = map.self.addresses[0];
|
|
}
|
|
|
|
export async function startLogin()
|
|
{
|
|
connectionState.set("LOGINSTARTING");
|
|
const url = await loginPromise;
|
|
networkData.loginUrl = url;
|
|
connectionState.set("LOGINREADY");
|
|
return url;
|
|
}
|
|
|
|
export const networkInterface = { authKey: authKey, controlUrl: controlUrl, loginUrlCb: loginUrlCb, stateUpdateCb: stateUpdateCb, netmapUpdateCb: netmapUpdateCb };
|
|
|
|
export const networkData = { currentIp: null, connectionState: connectionState, loginUrl: null, dashboardUrl: dashboardUrl }
|