Перейти до змісту

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 сервер:

  1. Натисни Connect на панелі Connect to Orca Cloud
  2. BamDude покаже короткий user-код і посилання для підтвердження
  3. Відкрий посилання (будь-який пристрій, будь-який браузер), увійди у свій Orca-акаунт і підтверди код у налаштуваннях свого Orca Cloud — картка показує BamDude, URL твого інстанса і запитані дозволи
  4. 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 віддає повний список, тож спільне ім'я видно в обох групах — джерело обираєш ти.