feat(ext/setup): hand off completion to fullscreen vault tab (P2)
After successful device registration (state.configPushed = true), the wizard now opens vault.html in a new tab and closes the setup tab. Both create-new and attach-existing flows funnel through the same finishSetup() handler. Closing the setup tab is best-effort -- chrome.tabs.remove failures don't block the vault open. Add src/__stubs__/relicario_wasm.stub.ts + vitest.config alias so setup.ts can be imported in unit tests without the runtime WASM file. Exclude the stubs dir from the webpack/tsc build in tsconfig.json.
This commit is contained in:
@@ -1101,6 +1101,7 @@ function attachStep5(): void {
|
||||
|
||||
state.configPushed = true;
|
||||
render();
|
||||
void finishSetup();
|
||||
} catch (err: unknown) {
|
||||
console.error('[relicario setup] register device failed:', err);
|
||||
state.error = `Failed to register device: ${err instanceof Error ? err.message : String(err)}`;
|
||||
@@ -1131,6 +1132,23 @@ function attachStep5(): void {
|
||||
});
|
||||
}
|
||||
|
||||
// --- Completion handoff ---
|
||||
|
||||
/// Open the fullscreen vault tab and best-effort close the setup tab.
|
||||
export async function finishSetup(): Promise<void> {
|
||||
const vaultUrl = chrome.runtime.getURL('vault.html');
|
||||
await chrome.tabs.create({ url: vaultUrl });
|
||||
try {
|
||||
const current = await chrome.tabs.getCurrent();
|
||||
if (current?.id !== undefined) {
|
||||
await chrome.tabs.remove(current.id);
|
||||
}
|
||||
} catch {
|
||||
// Setup tab may not be closeable (e.g., opened as popup rather than a tab).
|
||||
// The vault tab is open — that's the user-visible success.
|
||||
}
|
||||
}
|
||||
|
||||
// --- Boot ---
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
Reference in New Issue
Block a user