(fix): fix connection issues
Some checks failed
/ build-web (push) Failing after 1m14s
/ build-desktop (linux) (push) Failing after 1m14s
/ build-mobile (push) Failing after 1m14s
/ release (push) Has been skipped

This commit is contained in:
Alois 2026-07-28 01:02:26 +02:00
commit a43c05f035
Signed by: alois
SSH key fingerprint: SHA256:GBzT2DXvAuGV9XIV5W3WrzVpjU54FThmxHXdbz95J24
4 changed files with 28 additions and 23 deletions

@ -1 +1 @@
Subproject commit 594646ac39d986f0787aa614a99d580035a67318 Subproject commit fee0a8fa9994b6a2d04e0966387c713c47c39b7c

View file

@ -18,7 +18,7 @@
"build:apps": "pnpm run copy-licenses && pnpm run pre-build && pnpm run build:mobile && pnpm run build:desktop && pnpm run copy-releases", "build:apps": "pnpm run copy-licenses && pnpm run pre-build && pnpm run build:mobile && pnpm run build:desktop && pnpm run copy-releases",
"build:packages": "node utils/scripts/build-packages.ts", "build:packages": "node utils/scripts/build-packages.ts",
"update:packages": "node utils/scripts/update-packages.ts", "update:packages": "node utils/scripts/update-packages.ts",
"dev:web": "cd apps/web && pnpm dev", "dev": "cd apps/web && pnpm dev",
"build:web": "cd apps/web && pnpm run build", "build:web": "cd apps/web && pnpm run build",
"preview:web": "cd apps/web && pnpm run preview", "preview:web": "cd apps/web && pnpm run preview",
"dev:mobile": "cd apps/tauri && pnpm dev:mobile", "dev:mobile": "cd apps/tauri && pnpm dev:mobile",

View file

@ -144,7 +144,7 @@ export function Provider(props: {
children: ReactNode; children: ReactNode;
blockConnection?: boolean; blockConnection?: boolean;
}) { }) {
const { load, save } = useStorage(); const { load } = useStorage();
const [readyState, setReadyState] = useState<number>( const [readyState, setReadyState] = useState<number>(
ConnectionState.Disconnected, ConnectionState.Disconnected,
@ -241,7 +241,7 @@ export function Provider(props: {
const interval = setInterval(async () => { const interval = setInterval(async () => {
try { try {
const originalNow = Date.now(); const originalNow = Date.now();
const data = await send("Ping", { LastPing: originalNow }); const data = await send("ClientPing", { LastPing: originalNow });
setOwnPing(Date.now() - originalNow); setOwnPing(Date.now() - originalNow);
const remotePing = data.data.PingIota; const remotePing = data.data.PingIota;
@ -300,19 +300,13 @@ export function Provider(props: {
await MTPClient.init(); await MTPClient.init();
const [userId, keyring, storedSessionId] = await Promise.all([ const [userId, keyring] = await Promise.all([
load("user_id"), load("user_id"),
load("mtp_keyring"), load("mtp_keyring"),
load("session_id"),
]); ]);
if (!userId || !keyring) { if (!userId || !keyring) {
throw new Error("Missing login credentials"); throw new Error("Missing login credentials");
} }
let sessionId = storedSessionId;
if (!Number.isSafeInteger(sessionId) || sessionId <= 0) {
sessionId = Date.now();
await save("session_id", sessionId);
}
const forcedOmikronUrl = await load("forced_omikron_url"); const forcedOmikronUrl = await load("forced_omikron_url");
const forcedOmikronPublicKey = await load("forced_omikron_public_key"); const forcedOmikronPublicKey = await load("forced_omikron_public_key");
@ -422,16 +416,27 @@ export function Provider(props: {
setReadyState(client.state); setReadyState(client.state);
setIdentifying(true); setIdentifying(true);
await client.auth(); const stateSync = new Promise<ProtocolMessage<"ClientStateSync">>(
const finalResponse = validateResponse( (resolve, reject) => {
"ClientStateSync", const timeout = setTimeout(() => {
await client.request("ClientConnected", { unsubscribe();
SessionId: sessionId, reject(new Error("Initial state synchronization timed out"));
VersionNumber: 0, }, 120_000);
CacheValid: false, const unsubscribe = client.subscribe(
CacheSchemaVersion: 0, "ClientStateSync",
}), (message) => {
clearTimeout(timeout);
unsubscribe();
try {
resolve(validateResponse("ClientStateSync", message));
} catch (error) {
reject(error);
}
},
);
},
); );
const [, finalResponse] = await Promise.all([client.auth(), stateSync]);
if (finalResponse.type.startsWith("Error")) { if (finalResponse.type.startsWith("Error")) {
throw new Error( throw new Error(
@ -440,7 +445,7 @@ export function Provider(props: {
} }
const acknowledgement = await client.request("ClientStateAck", { const acknowledgement = await client.request("ClientStateAck", {
SessionId: sessionId, SessionId: finalResponse.data.SessionId,
VersionNumber: finalResponse.data.VersionNumber, VersionNumber: finalResponse.data.VersionNumber,
}); });
if (acknowledgement.type.startsWith("Error")) { if (acknowledgement.type.startsWith("Error")) {
@ -541,7 +546,7 @@ export function Provider(props: {
setIdentifying(false); setIdentifying(false);
sonnerToast.dismiss("mtp-connection-toast"); sonnerToast.dismiss("mtp-connection-toast");
}; };
}, [mtpUrl, props.blockConnection, load, save]); }, [mtpUrl, props.blockConnection, load]);
// No Iota check // No Iota check
useEffect(() => { useEffect(() => {

View file

@ -225,7 +225,7 @@ export const mtp = {
request: user.partial(), request: user.partial(),
response: z.object({}), response: z.object({}),
}, },
Ping: { ClientPing: {
request: z.object({ request: z.object({
LastPing: z.number(), LastPing: z.number(),
}), }),