Files
tkmind_go/ui/desktop/src/sessionLinks.ts
T
Douwe Osinga 45d59be201 Client settings (#7381)
Co-authored-by: Douwe Osinga <douwe@squareup.com>
2026-02-21 14:26:03 +00:00

68 lines
2.2 KiB
TypeScript

import { fetchSharedSessionDetails, SharedSessionDetails } from './sharedSessions';
import { View, ViewOptions } from './utils/navigationUtils';
import { errorMessage } from './utils/conversionUtils';
/**
* Handles opening a shared session from a deep link
* @param url The deep link URL (goose://sessions/:shareToken)
* @param setView Function to set the current view
* @param baseUrl Optional base URL for the session sharing API
* @returns Promise that resolves when the session is opened
*/
export async function openSharedSessionFromDeepLink(
url: string,
setView: (view: View, options?: ViewOptions) => void,
baseUrl?: string
): Promise<SharedSessionDetails | null> {
try {
if (!url.startsWith('goose://sessions/')) {
throw new Error('Invalid URL: URL must use the goose://sessions/ scheme');
}
// Extract the share token from the URL
const shareToken: string = url.replace('goose://sessions/', '');
if (!shareToken || shareToken.trim() === '') {
throw new Error('Invalid URL: Missing share token');
}
// If no baseUrl is provided, check if there's one in settings
if (!baseUrl) {
const config = await window.electron.getSetting('sessionSharing');
if (config.enabled && config.baseUrl) {
baseUrl = config.baseUrl;
} else {
throw new Error(
'Session sharing is not enabled or base URL is not configured. Check the settings page.'
);
}
}
// Fetch the shared session details
const sessionDetails = await fetchSharedSessionDetails(baseUrl!, shareToken);
// Navigate to the shared session view
setView('sharedSession', {
sessionDetails,
shareToken,
baseUrl,
});
return sessionDetails;
} catch (error) {
const errMsg = errorMessage(error, 'Unknown error');
const fullErrorMessage = `Failed to open shared session: ${errMsg}`;
console.error(fullErrorMessage);
// Navigate to the shared session view with the error instead of throwing
setView('sharedSession', {
sessionDetails: null,
error: errMsg,
shareToken: url.replace('goose://sessions/', ''),
baseUrl,
});
return null;
}
}