Nuvaka › Geliştirici belgeleri › Uygulama içi mağaza
Uygulama içi mağaza: eklentiler
Bir uzantı kendi eklenti mağazasını açabilir: kod düzenleyiciye dil ve tema paketi, bir oyuna seviye paketi, bir araca komut. Eklentiyi başka geliştiriciler yayınlar; kullanıcı ana uygulamanın içinden kurar. Nuvaka mağazasının güvenliği (imza, tarama, inceleme, geri çekme) eklentiler için de aynen geçerlidir.
Not: SDK tarafı (nuvaka.addons) Nuvaka 0.3.1 ile gelir. Mağaza ve yayın kuralları şimdiden geçerlidir.
Terimler
- Ana uygulama (host): eklenti kabul eden uzantı. Manifestinde
addonsalanı vardır. - Eklenti (addon): manifestinde
addonOfolan bir Nuvaka paketi. İki türü vardır:- Veri eklentisi (
"addonKind": "data"): kod çalıştırmaz. JSON, metin ve görsellerden oluşur; ana uygulama okur ve yorumlar. - Kod eklentisi (
"addonKind": "code"): kendi sayfası ya da arka plan betiği olan normal bir uzantıdır. Ana uygulama,exposeettiği işlevleri çağırır.
- Veri eklentisi (
Ana uygulamanın manifesti
"addons": {
"kinds": ["data", "code"],
"open": true,
"schema": "codeeditor.addon/1",
"maxSizeMB": 5
}
| Alan | Kural |
|---|---|
kinds | zorunlu; kabul edilen türler: "data", "code" ya da ikisi |
open | zorunlu; true ise herkes eklenti yayınlayabilir, false ise yalnız ana uygulamanın yayıncısı |
schema | isteğe bağlı; veri eklentilerinin uyacağı biçimin adı (ör. codeeditor.addon/1). Belgelemek ana uygulamanın işidir. |
maxSizeMB | isteğe bağlı; 1–20. Eklenti paketinin en büyük boyutu (varsayılan 20). |
addons alanı kaldırılırsa ya da open kapatılırsa yayındaki eklentiler kalır; yenileri kabul edilmez (addons_not_accepted / addons_closed).
Eklentinin manifesti
{
"id": "rust-lang-pack",
"name": { "tr": "Rust dil paketi", "en": "Rust language pack" },
"version": "1.0.0",
"addonOf": "code-editor",
"addonKind": "data",
"minAppVersion": "0.3.1"
}
addonOf: ana uygulamanın kimliği. İlk yayından sonra değiştirilemez. Yayında olan normal bir uzantı sonradan eklentiye dönüştürülemez.addonKind:dataya dacode; ana uygulamanınkindslistesinde olmalı (yoksaaddon_kind_not_accepted).
Veri eklentisi kuralları
- Bu alanlar yasaktır:
entry,pages,permissions,storage,shared,triggers,settings,contributes,workers,addons,dependencies. - Yalnız bu dosya türleri:
json,txt,md,png,jpg,jpeg,webp,svg. SVG'de<script>,on*=öznitelikleri,foreignObject,javascript:,iframe/embed/objectolamaz. - En çok 20 MB (ya da ana uygulamanın
maxSizeMBdeğeri; aşarsaaddon_too_large) ve 500 dosya.
Kod eklentisi kuralları
- Ana uygulamaya zorunlu bir
extendsbağımlılığı olmalı (Bağımlılıklar):{ "id": "<ana>", "version": "^x.y.z", "kind": "extends" }. - İzin devralınmaz: kod eklentisi kendi izinlerini ister, kullanıcı onlara ayrıca onay verir.
- Normal uzantıların tüm kuralları (lint, tarama, inceleme) geçerlidir.
Platform
Eklentinin platforms kümesi ana uygulamanınkinin içinde olmalı (Platform uyumluluğu); değilse platform_exceeds_dependency.
CLI ile başlamak
nuvaka-ext init rust-lang-pack --addon-of code-editor --kind data
nuvaka-ext init my-formatter --addon-of code-editor --kind code
Yayın her zamanki gibi nuvaka-ext publish ile yapılır.
Mağazada eklentiler
- Eklentiler Nuvaka mağazasının ana listelerinde görünmez. Ana uygulamanın kendi mağaza sekmesinde ve yayıncı sayfalarında görünür.
GET /api/ext/v1/store?addonOf=<host>: bir ana uygulamanın eklentileri. Arama, sıralama ve sayfalama aynıdır.- Ana uygulamanın detayı
addons: { kinds, open, schema, maxSizeMB, count }döner.
Kurulum ve kaldırma
- Eklenti yalnız ana uygulama kuruluysa kurulur; değilse sunucu
409 host_requiredve{ host }döner. - Kurulumu her zaman kullanıcı onaylar: ana uygulama
nuvaka.addons.installçağırsa bile Nuvaka kendi onay penceresini gösterir. - Ana uygulama kaldırılınca Nuvaka eklentilerini de kaldırmayı önerir. Eklentinin verisi 30 gün saklanır.
Ana uygulama API'si: nuvaka.addons
Bu çağrıları yalnız ana uygulama (addons alanı olan uzantı) yapabilir. store her zaman çağıranın kendi iç mağazasını listeler; bir uygulama başkasının iç mağazasını göremez. call ana uygulamanın izinlerini eklentiye vermez.
| Çağrı | Açıklama |
|---|---|
list() | Kurulu eklentiler: [{ id, version, kind, name, files }] |
read(id, path) | Veri eklentisinden bir dosya; Uint8Array |
readText(id, path) / readJson(id, path) | Aynısı, metin ya da ayrıştırılmış JSON olarak |
call(id, method, arg) | Kod eklentisinin expose ettiği bir işlevi çağırır |
store(query) | Bu ana uygulamanın eklenti mağazası listesini döner |
install(id) | Kurulumu başlatır; Nuvaka onay penceresini gösterir. Vazgeçilirse cancelled. |
uninstall(id) | Kaldırmayı başlatır (onaylı) |
onChanged(cb) | Eklenti kurulunca, güncellenince ya da kaldırılınca çağrılır |
for (const a of await nuvaka.addons.list()) {
if (a.kind !== 'data') continue
const meta = await nuvaka.addons.readJson(a.id, 'addon.json')
registerLanguages(meta.languages)
}
nuvaka.addons.onChanged(() => location.reload())
Örnek şema: codeeditor.addon/1
Nuvaka'nın kod düzenleyicisi dil, tema ve kod parçacığı eklentisi kabul eder. Veri eklentisinin kökünde addon.json bulunur:
{
"schema": "codeeditor.addon/1",
"languages": [
{ "id": "rust", "extensions": [".rs"], "aliases": ["Rust"],
"monarch": "rust.monarch.json", "configuration": "rust.config.json" }
],
"themes": [
{ "id": "ember", "label": { "tr": "Kor", "en": "Ember" }, "base": "vs-dark", "file": "ember.theme.json" }
],
"snippets": [{ "language": "rust", "file": "rust.snippets.json" }]
}
- Tema dosyası:
{ "inherit": true, "rules": [...], "colors": { ... } }. - Kod parçacıkları VS Code biçimindedir (
prefix,body,description). - Kod eklentisi komut ekler:
nuvaka.expose('codeeditor.commands', () => [{ id: 'sort-lines', title: 'Satırları sırala' }])
nuvaka.expose('codeeditor.run', ({ command, text, selection, language, fileName }) => {
const sorted = text.split('\n').sort().join('\n')
return { text: sorted, replace: 'selection', message: 'Sıralandı' }
})
replace: 'selection' ya da 'document'. message isteğe bağlıdır ve durum çubuğunda görünür.
Hata kodları
| Kod | Anlamı |
|---|---|
addons_not_accepted | Hedef uzantı eklenti kabul etmiyor |
addon_kind_not_accepted | Bu tür (data/code) kabul edilmiyor |
addons_closed | open: false; yalnız ana uygulamanın yayıncısı yayınlayabilir |
addon_too_large | Paket maxSizeMB sınırını aşıyor |
platform_exceeds_dependency | Eklentinin platformları ana uygulamanınkini aşıyor |
host_required | (409) Önce ana uygulama kurulmalı |
| "addonOf değiştirilemez" | Yayındaki bir eklentinin ana uygulaması değiştirilemez |
| "yayındaki uzantı eklentiye dönüştürülemez" | Normal uzantı sonradan eklenti yapılamaz; yeni kimlikle yayınla |
Nuvaka Apps API v1 · son güncelleme 2026-09-28