feat(V2-4): 데스크톱 ↔ Supabase 동기화 (push only MVP)
CloudSyncService (싱글톤 + EventEmitter): - Supabase 클라이언트 lazy init (configGet으로 url/key) - safeStorage 기반 refresh token 영속화 (cloud-sync.token) - startSignIn(provider): OAuth URL 발급 후 shell.openExternal로 외부 브라우저 - handleAuthCallback(code): code -> session 교환 - pushAll(): history/dictionary/meetings/meeting_memos/meeting_documents 를 last_sync_at 이후 변경분만 upsert (onConflict: id) - 이벤트: auth-changed / sync-progress / sync-complete / sync-error Deep link (d3ro-voice://auth-callback): - main/index.ts에 setAsDefaultProtocolClient - macOS open-url 핸들러 - Windows second-instance argv 검사 - handleDeepLink로 URL 파싱 후 CloudSyncService로 전달 IPC: - @d3ro/core/ipc-channels에 CLOUD_SYNC 채널 추가 - ipc/cloud-sync-handlers.ts (configure/signIn/signOut/pushAll/state) - preload index.ts에 cloudSync 노출 - bootstrap의 cloud-sync 단계 추가 Renderer: - CloudSyncSection 컴포넌트 신규 - 미설정: Supabase URL/Key 입력 폼 - 미로그인: Google/GitHub OAuth 버튼 - 로그인: 사용자 이메일 + Sync Now + 진행 바 + 로그아웃 - d3roPalette/typoSx로 SSOT 준수, useI18n 사용 ConfigService 키 5종 추가: - hfToken, diarizationEnabled (Phase 15.5 누락분 보충) - supabaseUrl, supabaseAnonKey, cloudSyncLastAt (V2-4) - packages/core types.ts AppConfig에도 동일하게 추가 검증: - desktop typecheck OK - desktop build OK - 실제 Supabase 동기화는 사용자가 V2-2 배포 + 설정 입력 후 검증
This commit is contained in:
parent
d0c33ca259
commit
5c0f4a2b98
13 changed files with 1069 additions and 1 deletions
|
|
@ -369,6 +369,20 @@ export const IPC_CHANNELS = {
|
|||
UPGRADE_PROMPT: 'license:upgradePrompt',
|
||||
TIER_CHANGED: 'license:tierChanged',
|
||||
},
|
||||
|
||||
CLOUD_SYNC: {
|
||||
GET_STATE: 'cloudSync:getState',
|
||||
SIGN_IN: 'cloudSync:signIn',
|
||||
SIGN_OUT: 'cloudSync:signOut',
|
||||
PUSH_ALL: 'cloudSync:pushAll',
|
||||
HANDLE_CALLBACK: 'cloudSync:handleCallback',
|
||||
CONFIGURE: 'cloudSync:configure',
|
||||
// events
|
||||
AUTH_CHANGED: 'cloudSync:authChanged',
|
||||
SYNC_PROGRESS: 'cloudSync:syncProgress',
|
||||
SYNC_COMPLETE: 'cloudSync:syncComplete',
|
||||
SYNC_ERROR: 'cloudSync:syncError',
|
||||
},
|
||||
} as const
|
||||
|
||||
// 타입 유틸리티: 채널명 유니온 추출
|
||||
|
|
|
|||
|
|
@ -388,6 +388,12 @@ export interface AppConfig {
|
|||
hfToken: string
|
||||
/** Phase 15.5: 화자 구분 활성화 */
|
||||
diarizationEnabled: boolean
|
||||
/** V2-4: Supabase 프로젝트 URL */
|
||||
supabaseUrl: string
|
||||
/** V2-4: Supabase anon public key */
|
||||
supabaseAnonKey: string
|
||||
/** V2-4: 마지막 동기화 epoch ms */
|
||||
cloudSyncLastAt: number | null
|
||||
}
|
||||
|
||||
export interface ConfigGetParams {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue