التخزين السحابي
موطن السحابة موقع واحد في تخزين يملكه المستخدم بالفعل. يُقاد كل مزود عبر واجهة التخزين نفسها في coven؛ وما يختلف حسب المزود هو المصادقة وكيف يُمنح جهاز ثان وصولًا.
المزودون
رابط إلى هذا القسم| المزود | المصادقة | وصول جهاز جديد |
|---|---|---|
| متوافق مع S3 | مفتاح وصول + سر | بيانات اعتماد مضمنة في الدعوة |
| Google Drive | OAuth (PKCE) | مجلد مشارك مع حساب المنضم |
| Dropbox | OAuth (PKCE) | مجلد مشارك مع حساب المنضم |
| OneDrive | OAuth (PKCE) | مجلد مشارك مع حساب المنضم |
| iCloud (CloudKit) | Apple ID، بلا تسجيل دخول | CloudKit share يقبلها المنضم |
يشمل المتوافق مع S3 كلًا من AWS، وBackblaze B2، وCloudflare R2، وWasabi، وMinIO، وأي شيء آخر يتكلم API؛ ويمكن ضبط bucket، والمنطقة، وendpoint، وبادئة المفتاح، ويُفحص bucket قبل حفظ الإعداد حتى يفشل الخطأ المطبعي عند الإعداد لا عند أول مزامنة. لا يوجد مزودو OAuth إلا في إصدار bae الكامل؛ وتبني بُنى baeium من دونهم.
OAuth
رابط إلى هذا القسمتسجيل الدخول تدفق authorization-code مع PKCE، كعميل عام. على سطح المكتب يصل redirect إلى خادم loopback مربوط بمنفذ محلي لرد النداء الواحد؛ وعلى الهاتف يلتقط التطبيق redirect ذي custom-scheme بدل ذلك. يطلب bae أضيق نطاق يقدمه المزود للمهمة، وفي Google Drive يعني ذلك الوصول فقط إلى الملفات التي ينشئها التطبيق نفسه. تُخزن الرموز في keyring نظام التشغيل، وتُحدّث بمنحة refresh الخاصة بالمزود، ويظهر رفض refresh كمطالبة بإعادة الاتصال بدل حلقة إعادة محاولة صامتة.
لا يحتاج CloudKit إلى تدفق أصلًا: مشغل CloudKit في المنصة، المنفذ داخل التطبيق والمسلّم إلى core، يعمل بصفته Apple ID المسجل الدخول.
تخطيط الموطن
رابط إلى هذا القسمداخل الموطن، يرتب coven تدفقات changeset لكل جهاز، وأجيال snapshot، وسجلات العضوية، ونطاقات blob. يضيف bae ثلاثة نطاقات blob: release_files، وcovers، وartist_images.
تعتمد مفاتيح الكائنات على وضع تخزين الموطن، الثابت عند الإنشاء:
- Opaque: تُشفّر الكائنات وتُخزن تحت مفاتيح مشتقة من المحتوى لا تكشف شيئًا. هذا هو وضع الاعتماد الكامل على التشفير؛ انظر التشفير.
- Browsable: الكائنات نص واضح في مسارات مقروءة تُسجل لكل blob عند الرفع:
release_files/{artist}/{album}/{filename}، وcovers/{album}/{release}/cover.{ext}، وartist_images/{artist}/artist.{ext}. يصبح bucket شجرة ملفات قابلة للاستخدام؛ والمقابل هو عدم وجود تشفير ولا عضوية، لذلك لا يمكن مشاركة المواطن القابلة للتصفح مع أشخاص آخرين.
السلوك على الشبكات الحقيقية
رابط إلى هذا القسمالقراءات للتشغيل نطاقية: يبث المشغل نوافذ البايت التي يحتاجها بدل الملفات كلها. الرفوع فوق عتبة حجم تستخدم multipart حيث يدعمه المزود. قيود المعدل وأخطاء المزود العابرة تعيد المحاولة مع exponential backoff، وتحترم retry-after من المزود عندما يعطيه؛ وتُحدّث رموز OAuth المنتهية في مكانها. يبقى صندوق صادر المزامنة بعد إعادة التشغيل: الرفع الذي يقطعه إنهاء التطبيق يُستأنف بدل أن يبدأ من جديد.