클라우드 저장소
클라우드 홈은 사용자가 이미 소유한 저장소 안 한 위치입니다. 모든 제공자는 coven의 같은 저장소 interface를 통해 구동됩니다. 제공자별 차이는 로그인, 설정, 그리고 다른 사람과 기기가 그곳에 닿는 방식입니다.
제공자
이 섹션으로 연결| 제공자 | 로그인 | 내 새 기기 | 초대하는 사람 |
|---|---|---|---|
| S3 호환 | 액세스 키 + 시크릿 | 복원 코드, 그리고 QR 코드에 그 옆에 담긴 내 액세스 키 | 그 사람을 위해 만든 액세스 키 |
| Dropbox | OAuth, coven이 보관 | 복원 코드, 그다음 내 Dropbox에 로그인 | 라이브러리의 공유 폴더를 그 사람의 계정과 공유 |
| OneDrive | OAuth, coven이 보관 | 복원 코드, 그다음 내 OneDrive에 로그인 | 라이브러리 폴더를 그 사람의 계정과 공유 |
| iCloud (CloudKit) | Apple Account, 로그인 없음 | 복원 코드, iCloud 키체인에서도 제공 | 라이브러리의 CloudKit 영역을 그 사람의 Apple Account와 공유 |
S3 호환은 AWS, Backblaze B2, Cloudflare R2, Wasabi, 그리고 API를 말하는 다른 모든 것을 포함합니다. 설정 양식은 버킷, 리전, 엔드포인트, 액세스 키만 묻습니다. coven은 엔드포인트의 호스트로 알려진 서비스를 알아보고 통신 방식을 채웁니다. 고급에는 선택 사항인 키 접두사와 기본값이 자동인 서비스 프로필 선택이 있습니다. coven이 모르는 서비스라면 설정 감지가 키로 버킷을 검사하고 찾은 내용을 보여줍니다. 설정은 무엇이든 저장하기 전에 제공자를 확인하므로 오타는 첫 동기화가 아니라 설정 때 실패하며, bae는 coven이 밝힌 이유를 쉬운 말로 전합니다. Dropbox, OneDrive, iCloud는 전체 bae 에디션에만 있습니다. baeium 빌드는 이를 컴파일에서 제외합니다.
로그인과 폴더
이 섹션으로 연결coven이 Dropbox와 OneDrive 로그인을 직접 처리하므로 어떤 토큰도 bae를 거치지 않습니다. 데스크톱에서는 브라우저가 제공자 페이지를 열고 로컬 리스너가 한 번의 redirect를 받습니다. 모바일에서는 플랫폼의 로그인 시트가 그 역할을 합니다. coven은 토큰을 OS keyring에 보관하고, 제공자가 거부하면 한 번 갱신합니다. 갱신이 실패하면 조용한 재시도 loop가 아니라 동기화 상태에 로그인 작업으로 표시됩니다.
로그인한 뒤 사용자는 라이브러리를 둘 곳을 고릅니다. Dropbox에서는 공유 폴더입니다. 가족 라이브러리는 다른 사람들의 계정과 공유되기 때문이며, bae는 이를 위해 앱 폴더가 아닌 Dropbox 전체 접근 권한을 씁니다. 아직 공유 폴더가 없으면 bae는 Dropbox에서 폴더를 공유한 뒤 다시 찾으라고 안내합니다. OneDrive에서는 아무 폴더나 되며, 맨 위부터 둘러볼 수 있고 그곳에 새 폴더를 만들 수 있습니다.
CloudKit은 flow가 전혀 필요 없습니다. coven이 Apple 플랫폼에서 로그인된 Apple Account로 이를 구동합니다.
홈의 배치
이 섹션으로 연결홈 안에서 모든 객체 경로는 라이브러리의 store id로 시작합니다. coven의 번호 매겨진 변경 순서, 그 snapshot, 참가 요청, 저장된 파일입니다. 여러 라이브러리가 서로의 객체를 건드리지 않고 하나의 Dropbox나 OneDrive 폴더를 공유할 수 있습니다.
모든 객체는 암호화되어 무작위 이름으로 저장되며, 평문 모드는 없습니다. bae의 파일은 네 개의 동기화 table의 row가 참조하는 coven 파일입니다. release_files, covers, artist_images, 그리고 각 people row의 아바타입니다. 파일 경로는 스테이징될 때 고정되므로 앨범 이름을 바꿔도 파일은 이동하지 않습니다. 암호화를 보세요.
실제 네트워크에서의 동작
이 섹션으로 연결재생 읽기는 range 단위입니다. 플레이어는 전체 파일이 아니라 필요한 암호화 조각을 가져오고, 파일을 순서대로 재생하는 동안 미리 가져옵니다. Rate limiting과 일시적 제공자 오류는 하나의 backoff 일정으로 재시도하며, retry-after가 있으면 따릅니다. 업로드 대기열은 재시작을 견딥니다. 앱 종료로 중단된 업로드는 처음부터가 아니라 이어서 진행되고, 일시 정지한 업로드는 일시 정지 상태로 남습니다.