Temel model: T1 = tam Node process
Önemli olan tek fikir: evoX, T1 plugininizi ayrı bir tam Node.js process’i olarak çalıştırır. Yani:- İstediğiniz npm kütüphanesini kullanabilirsiniz (
npm install obs-websocket-js ws node-fetch…). - Dış servislere doğrudan bağlanabilirsiniz — WebSocket, HTTPS API, yerel port. evoX araya girmez.
- SDK yalnız host tarafını yönetir: hangi event geldi (tuşa basıldı, kadran döndü), tuşta ne görünüyor (başlık/görsel/durum), ayarlar ve loglar.
Proje kurulumu
manifest.json’da aksiyonu ve ayarlarını bildirin. Ayar tipleri zengindir — secret, oauth, select, color, number, toggle, hotkey, url, path desteklenir:
Örüntü 1 — WebSocket entegrasyonu (OBS)
runtime.mjs: bağlantıyı ilk willAppear’da kur, keyDown’da komut gönder, willDisappear’da temizle.
ws://127.0.0.1 bağlantısı doğrudan kuruluyor — T1 tam Node olduğu için bir SDK “network capability”si gerekmez. (Bu, public T2 sandbox’ta böyle değildir; orada host-brokered network.fetch kullanılır.)
Örüntü 2 — API + OAuth (Twitch/Spotify tarzı)
İki yol var:- Kendi token yönetiminiz: T1 tam Node olduğu için tokeni
secretayarından okuyup doğrudanfetchile kullanabilirsiniz. - Host-brokered OAuth: SDK
beginOAuth(provider)/getOAuthStatus(provider)ile evoX’in credential vault’unu kullanırsınız; ham token plugininize dönmez, host isteğe enjekte eder.
Tuş görseli — setImage (albüm kapağı gibi dinamik görsel)
Başlık dışında tuşa dinamik görsel basabilirsiniz. İki biçim:
setState(id, n) ile durum (0’dan başlar) değiştirilir.
Kadran (Knob) desteği
Aksiyonu"controllers": ["Knob"] ile bildirin ve action.dialRotate / action.dialDown dinleyin — ses/parlaklık gibi sürekli değerler için idealdir.
Yaşam döngüsü ve temizlik
- Bağlantıyı
willAppear’da tembel (lazy) kur;plugin.stop’ta kapat. - Polling gerekiyorsa
willAppear’da başlat,willDisappear’da durdur; hata halinde exponential backoff. - Her handler’ı
try/catchile sar; hatayıconsole.errorile logla (Geliştirici penceresinde görünür) veshowErrorile kullanıcıya bildir. - Kimliği host atar:
event.context.bindingInstanceIddışında bir context’e yazma; tanımadığınactionId’yi yok say.
Sonraki adım
Kendi evoX'inde test et
Projeyi Geliştirici penceresinden yükle, tuşa ata, yeniden yükle ve logları gör.
