From f32c14f9396c7b32b3478eec03227cf9b1428c13 Mon Sep 17 00:00:00 2001 From: adlee-was-taken Date: Tue, 28 Apr 2026 20:12:07 -0400 Subject: [PATCH] feat(ext/sw): export_backup / restore_backup message types --- .../src/service-worker/router/popup-only.ts | 6 ++++++ extension/src/shared/messages.ts | 20 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/extension/src/service-worker/router/popup-only.ts b/extension/src/service-worker/router/popup-only.ts index 16f45b3..1f1e63a 100644 --- a/extension/src/service-worker/router/popup-only.ts +++ b/extension/src/service-worker/router/popup-only.ts @@ -382,6 +382,12 @@ export async function handle( await chrome.storage.local.set({ session_timeout: msg.config }); return { ok: true }; } + + case 'export_backup': + return { ok: false, error: 'export_backup not yet implemented' }; + + case 'restore_backup': + return { ok: false, error: 'restore_backup not yet implemented' }; } } diff --git a/extension/src/shared/messages.ts b/extension/src/shared/messages.ts index a669523..1788701 100644 --- a/extension/src/shared/messages.ts +++ b/extension/src/shared/messages.ts @@ -48,7 +48,14 @@ export type PopupMessage = | { type: 'purge_all_trash' } | { type: 'get_field_history'; id: ItemId } | { type: 'get_session_config' } - | { type: 'update_session_config'; config: SessionTimeoutConfig }; + | { type: 'update_session_config'; config: SessionTimeoutConfig } + | { type: 'export_backup'; passphrase: string; includeImage: boolean } + | { + type: 'restore_backup'; + bytes: ArrayBuffer; + passphrase: string; + newRemote: { hostType: 'gitea' | 'github'; hostUrl: string; repoPath: string; apiToken: string }; + }; // --- Messages a content script may send --- @@ -153,8 +160,19 @@ export const POPUP_ONLY_TYPES: ReadonlySet = new Set([ 'list_trashed', 'restore_item', 'purge_item', 'purge_all_trash', 'get_field_history', 'get_session_config', 'update_session_config', + 'export_backup', 'restore_backup', ] as PopupMessage['type'][]); +export interface ExportBackupResponse extends Extract { + data: { bytes: ArrayBuffer }; +} + +export interface RestoreBackupResponse extends Extract { + data: { + summary: { itemCount: number; attachmentCount: number; hasImage: boolean }; + }; +} + export const CONTENT_CALLABLE_TYPES: ReadonlySet = new Set([ 'get_autofill_candidates', 'get_credentials', 'check_credential', 'blacklist_site', 'capture_save_login',