Orca Cloud¶
Orca Cloud — міст між твоїм OrcaSlicer cloud-аккаунтом і BamDude. Він стоїть поряд з Cloud Profiles (Bambu Cloud) — можеш підключити один, обидва або жоден. Після входу твої OrcaSlicer filament / process / printer профілі з'являються у slice modal і в AMS-slot filament picker, вище за локальні імпорти та Bambu Cloud presets.
OrcaSlicer 2.4.0-alpha додав Supabase-backed cloud sync (sync_pull). BamDude читає той самий store, тому профілі, які ти налаштував в OrcaSlicer, з'являються тут без повторного імпорту.
Інтеграція per-user. Кожен BamDude-аккаунт тримає власний Orca Cloud токен — вхід не чіпає чужі аккаунти.
З 0.5.5 BamDude парується під власною зареєстрованою ідентичністю застосунку, виданою командою Orca Cloud — картка підтвердження називає BamDude (і URL твого інстанса), а у списку підключених застосунків Orca Cloud його видно й відключається під справжнім іменем. Парування просить право запису (sync:write, включає читання) — воно живить пуш профілів нижче.
Оновлення до 0.5.5: одне повторне парування
Ідентичність застосунку і виданий scope запечені у токени, і обидва змінились разом у 0.5.5 — кожне існуюче парування Orca Cloud після оновлення перестає працювати і просить перепідключення. Одне повторне парування покриває обидві зміни; більше нічого не втрачається.
Де це живе¶
Profiles → Orca Cloud — вкладка поряд з Bambu Cloud, Local Profiles і K-Profiles. Вкладка показує стан підключення, панель входу коли не підключено, і той самий rich-layout, що й Bambu Cloud view (пошук + фільтри + згрупована сітка + read-only detail modal) після підключення.
Вхід — парування device-кодом¶
Парування використовує OAuth 2.0 Device Authorization Grant (RFC 8628) — флоу, створений для застосунку, що не може прийняти browser-redirect, а це рівно те, чим є self-hosted сервер:
- Натисни Connect на панелі Connect to Orca Cloud
- BamDude покаже короткий user-код і посилання для підтвердження
- Відкрий посилання (будь-який пристрій, будь-який браузер), увійди у свій Orca-акаунт і підтверди код у налаштуваннях свого Orca Cloud — картка показує BamDude, URL твого інстанса і запитані дозволи
- BamDude опитує у фоні та стає Connected у мить, коли підтвердження долетіло
Спроба парування протухає сама за кілька хвилин — натисни Connect ще раз для нової. Жодного вставляння URL і жодного localhost-callback: старий paste-based PKCE-флоу, який це замінило, пішов.
Час життя токена та refresh¶
На відміну від довгоживучого bearer Bambu Cloud, токени парування Orca короткі й ротуються:
| Токен | Час життя | Примітки |
|---|---|---|
| Access-токен | ~24 години | Використовується для кожного API-виклику |
| Refresh-токен | ~90 днів, ротаційний, одноразовий | Кожен refresh повертає новий refresh-токен і поновлює 90 днів; старий витрачається |
BamDude оновлює access-токен just-in-time — коли виклик от-от запуститься на токені, що протухає, він спершу ротує і зберігає нову пару перед API-викликом, тому краш посеред refresh не залишить тебе з витраченим токеном. Якщо сам refresh відхилено (revoked на сервері), стан стає Disconnected і ти паруєшся знову.
Що підтягується¶
Після підключення Orca Cloud профілі живлять ті самі поверхні, що й Bambu Cloud:
| Поверхня | Як з'являються Orca-профілі |
|---|---|
| Slice modal | Четвертий tier presets, orca_cloud, вище за local / Bambu Cloud / standard |
| Пікер сімей у слоті AMS | Кастомні Orca-філаменти — повноцінні сім'ї, віддзеркалені на сервер у каталог сімей поряд із Bambu Cloud, з бейджем; принтер отримує ідентифікатор сім'ї, або генерик-сім'ю матеріалу на принтерах без підтримки користувацьких пресетів |
| Profiles → Orca Cloud tab | Згрупована printer / process / filament сітка з пошуком + фільтрами + read-only detail modal |
Orca sync_pull повертає повний content кожного профілю inline, тому — на відміну від Bambu Cloud, де filament type/колір потребують окремого per-preset fetch, який впирається в rate limit — Orca-філаменти несуть filament_type і колір безкоштовно. Metadata-aware pre-pick у slice modal використовує це, щоб точно ранжувати Orca-філаменти без зайвих round-trip.
Пріоритет tier'ів у slicing
local > orca_cloud > cloud (Bambu) > standard. Крос-tier дедуплікації свідомо немає: кожен tier віддає повний список, тож одне ім'я може з'явитись у кількох групах — джерело обираєш ти. Кожен cloud-tier також має власний status-банер у slice modal — Bambu і Orca можуть бути signed-out / expired / unreachable незалежно.
Пуш профілів¶
З write-scoped паруванням авторські сімʼї філаменту можна пушити в Orca Cloud — так само, як у Bambu Cloud, і з тих самих місць:
- створення сімʼї з чекбоксом «Також пушнути в Orca Cloud» (або створення одразу в хмарі: Профілі → Orca Cloud → Create filament);
- блок «Авторські сімʼї» у Профілі → Local: пуш/ре-пуш сімʼї в будь-яку хмару, стан по кожній хмарі (запушено / змінено після пушу / не пушено), видалення сімʼї разом із запушеними хмарними копіями.
Редагування в BamDude ніколи не перезаписує хмару мовчки — пресет позначається зміненим і чекає явного ре-пушу. І повага двостороння: якщо профіль відредагували в Orca Cloud (скажімо, з OrcaSlicer) після твого останнього пушу, BamDude помічає це до будь-якого запису і питає, по-пресетно:
- Перезаписати хмарну копію — виграє твоя локальна версія;
- Прийняти хмарну версію — хмарний вміст лягає у твій локальний пресет.
Парування без права запису (env-пін sync:read, або до-0.5.5 парування, що якось вижило) показує push-контроли вимкненими з поясненням — перепідключись, щоб надати запис.
Дозволи¶
| Дозвіл | Дає |
|---|---|
orca_cloud:auth |
Вхід/вихід з Orca Cloud, список / перегляд профілів, читання стану підключення, і slicing з Orca-presets |
Дефолтні групи дають orca_cloud:auth Administrators і Operators; Viewers — ні.
Для API-ключів orca_cloud:auth зливається в той самий Use Bambu Cloud (can_access_cloud) scope, що й cloud:auth — це той самий вимір довіри (доступ до third-party cloud від імені власника), тому ключ, уже допущений до cloud, покриває й Orca.
Пуш сімʼї філаменту (в будь-яку хмару) їде на дозволі cloud:auth — кнопка пушу і чекбокси create-діалогу слідують за ним.
Шифрування at-rest¶
Як і Bambu Cloud токен, Orca access + refresh токени зберігаються як plain-рядки в рядку users (міграція m090 додає orca_cloud_token, orca_cloud_refresh_token, orca_cloud_expires_at, orca_cloud_email, orca_cloud_user_id + три тимчасові PKCE-колонки). Міграція m154 додає orca_cloud_scope — фактично виданий при паруванні scope, який і гейтить push-контроли. Вони сьогодні не Fernet-шифровані — запусти BamDude на зашифрованому томі БД, якщо потрібне encryption-at-rest. Токени ніколи не витікають через API-відповіді (наверх виходять лише connected-флаг, email, user id і виданий scope).
Вирішення проблем¶
Код парування протух, поки я його підтверджував
Спроба парування коротка за задумом. Натисни Connect ще раз — свіжий код нічого не коштує, і від старої спроби нічого не лишається.
Підключено, але профілі не показуються
Можливо, ти ще не синхронізував жодного профілю з OrcaSlicer — Orca Cloud дзеркалить лише те, що ти запушив зі слайсера. Налаштуй профіль в OrcaSlicer, дай йому синхронізуватись, тоді натисни Refresh на вкладці Orca Cloud (5-хвилинний listing-кеш).
Стан сам перескочив на Disconnected
Ротацію refresh-токена відхилено на сервері (revoked, або одноразовий токен відтворили повторно). Спаруйся знову з вкладки Orca Cloud.
Після оновлення BamDude попросив перепідключити Orca Cloud
Очікувано, один раз: 0.5.5 перейшов на власну ідентичність застосунку і write-scope, а обидва запечені в токени. Спаруйся знову — і все триматиметься.
Кнопки пушу вимкнені й кажуть, що парування read-only
Виданий scope фіксується в момент парування. Відключись і спаруйся знову —
нове парування просить право запису (якщо тільки твій деплой не пінить
ORCA_CLOUD_SCOPE=sync:read — тоді причина саме в цьому).
Orca і Bambu presets мають однакове ім'я — хто виграє?
Ніхто мовчки: кожен tier віддає повний список, тож спільне ім'я видно в обох групах — джерело обираєш ти.