Lompat ke Konten

Perintah

Halaman ini adalah ringkasan yang terstruktur. Gunakan referensi perintah saat ini untuk flag yang tepat: app, bundle, channel, dan build.

Semua perintah harus dijalankan di folder aplikasi Anda dengan capacitor proyek dihidupkan dengan benar.

npx @capgo/cli@latest init [apikey]

Metode ini ada untuk memandu Anda secara bertahap.

Metode ini akan menambahkan aplikasi Anda ke Capgo. Selain itu, metode ini akan menambahkan code ke aplikasi Anda untuk memvalidasi update. Begitu juga, metode ini akan membangun aplikasi Anda. Selain itu, metode ini akan mengunggah aplikasi Anda ke Capgo. Dan metode ini akan membantu Anda untuk memeriksa apakah update berhasil.

npx @capgo/cli login [apikey]

Metode ini ada untuk mengingat apikey untuk Anda.

Optionally Anda dapat memberikan:

--local Ini akan menyimpan __CAPGO_KEEP_0__ apikey di repositori lokal dan mengabaikannya dalam git.

npx @capgo/cli doctor

Perintah untuk memeriksa apakah Anda sudah terupdate dengan Capgo paket.

Perintah ini juga akan berguna untuk melaporkan bug.

npx @capgo/cli app add [appId]

[appId] ID aplikasi Anda dalam format com.test.app diuraikan di sini.

💡 Semua pilihan akan ditebak dalam konfigurasi Anda jika tidak disediakan.

Pilihan, Anda dapat memberikan:

  • --icon [/path/to/my/icon] untuk menampilkan ikon kustom di aplikasi web Capgo.
  • --name [test] untuk menampilkan nama kustom di daftar.
  • --apikey [key] API kunci untuk menghubungkan ke akun Anda.
  • --retention [retention] periode penyimpanan aplikasi bundel dalam hari, 0 oleh default = tak terbatas.

Contoh untuk appId dan AppName, ikon ditebak di folder sumber daya capacitor.config.json Example of

{
"appId": "ee.forgr.capacitor_go",
"appName": "Capgo",
"webDir": "dist"
}

npx @capgo/cli app set [appId]

[appId] adalah ID aplikasi Anda, formatnya dijelaskan di sini.

Jika Anda ingin, Anda bisa memberikan:

  • --icon [/path/to/my/icon] untuk menampilkan ikon kustom di aplikasi web Capgo.
  • --name [test] untuk menampilkan nama kustom di daftar.
  • --retention [retention] periode penyimpanan bundle aplikasi dalam hari, 0 secara default = tak terbatas.
  • --expose-metadata [true|false] untuk menampilkan metadata bundle (link dan komentar) ke plugin.
  • --preview atau --no-preview untuk mengaktifkan atau menonaktifkan kode QR bundle dan saluran.
  • --allow-device-custom-id atau --no-allow-device-custom-id untuk mengontrol ID perangkat kustom.
  • --block-provider-infra-requests atau --no-block-provider-infra-requests untuk mengontrol pemblokiran permintaan datacenter Google dan Apple yang diketahui.
  • --build-timeout-minutes [5-360] untuk menetapkan waktu pembangunan native.
  • --ios-store-url [url] atau --android-store-url [url] untuk menetapkan URL toko.
  • --default-upload-channel [channel] untuk menetapkan saluran unggah default.
  • --default-download-channel [channel] untuk menetapkan saluran unduh default, atau --disable-download-channels untuk membuat semua saluran unduh tidak publik.
  • --apikey [key] API untuk menghubungkan ke akun Anda.

Daftar

Daftar

npx @capgo/cli app list [appId]

[appId] ID aplikasi dalam format com.test.app dijelaskan di sini.

Jika Anda ingin, Anda dapat memberikan:

  • --apikey [key] API kunci untuk menghubungkan ke akun Anda.

Hapus

Daftar

npx @capgo/cli app delete [appId]

[appId] ID aplikasi dalam format com.test.app dijelaskan di sini.

Jika Anda ingin, Anda dapat memberikan:

  • --apikey [key] Kunci API untuk menghubungkan ke akun Anda.
  • --bundle Hanya versi ini yang akan dihapus dengan menggunakan nomor versi.

npx @capgo/cli app debug [appId]

[appId] ID aplikasi Anda dalam format com.test.app dijelaskan di sini.

Optionally, Anda dapat memberikan:

  • --apikey [key] Kunci API untuk menghubungkan ke akun Anda.
  • --device dengan perangkat spesifik yang ingin Anda debug

npx @capgo/cli app setting [path]

Ubah konfigurasi Capacitor.

[path] - jalur pengaturan yang ingin Anda ubah. Misalnya, untuk mengubah appId, berikan appId. Jika Anda ingin menonaktifkan update otomatis di capacitor-updater, berikan plugins.CapacitorUpdater.autoUpdate dengan --string off.

Anda HARUS memberikan salah satu --string atau --bool!

Pilihan:

  • --string <string> - mengatur pengaturan menjadi string
  • --bool <true | false> - mengatur pengaturan menjadi boolean

npx @capgo/cli bundle upload [appId]

[appId] ID aplikasi Anda, formatnya dijelaskan di sini.

Jika Anda ingin, Anda dapat memberikan:

  • --apikey <apikey> Kunci API untuk menghubungkan ke akun Anda.
  • --path <path> Jalur folder untuk diunggah.
  • --channel <channel> Saluran untuk dihubungkan.
  • --external <url> Hubungkan ke URL eksternal bukan mengunggah ke Capgo Cloud.
  • --iv-session-key <key> Atur IV dan kunci sesi untuk URL bundle eksternal.
  • --s3-endpoint <s3Endpoint> URL endpoint S3. Tidak berfungsi dengan upload delta atau opsi eksternal.
  • --s3-region <region> Wilayah untuk bucket S3 Anda.
  • --s3-apikey <apikey> API kunci untuk endpoint S3 Anda.
  • --s3-apisecret <apisecret> API rahasia untuk endpoint S3 Anda.
  • --s3-bucket-name <bucketName> Nama untuk bucket S3 AWS Anda.
  • --s3-port <port> Port untuk endpoint S3 Anda.
  • --no-s3-ssl Nonaktifkan SSL untuk unggah S3.
  • --key <key> Jalur kustom untuk kunci tanda tangan publik (sistem v1).
  • --key-data <keyData> Kunci tanda tangan publik (sistem v1).
  • --key-v2 <key> Jalur kustom untuk kunci tanda tangan privat (sistem v2).
  • --key-data-v2 <keyData> Kunci tanda tangan privat (sistem v2).
  • --bundle-url Tampilkan URL bundle ke stdout.
  • --no-key Lepaskan kunci tanda tangan dan kirim update jelas.
  • --no-code-check Tidak memeriksa apakah notifyAppReady() dipanggil di sumber code dan indeks ada di folder root.
  • --display-iv-session Tampilkan di konsol kunci IV dan sesi yang digunakan untuk mengenkripsi update.
  • --bundle <bundle> Nomor versi bundle untuk diunggah.
  • --min-update-version <minUpdateVersion> Nomor versi minimal yang diperlukan untuk memperbarui ke versi ini. Digunakan hanya jika pengaturan auto update diatur ke metadata di channel.
  • --auto-min-update-version Atur versi update minimal berdasarkan paket native.
  • --ignore-metadata-check Mengabaikan periksa metadata (node_modules) ketika mengunggah.
  • --ignore-checksum-check Mengabaikan periksa cek checksum ketika mengunggah.
  • --timeout <timeout> Waktu tunggu untuk proses unggah dalam detik.
  • --delta Mengunggah file Delta (manifest) bersamaan dengan bundle penuh.
  • --delta-only Mengunggah hanya update Delta (manifest), melompati bundle penuh.
  • --no-delta Mengaktifkan unggah Delta (manifest) (bermanfaat jika mode instant apply diaktifkan tetapi Anda ingin bundle penuh). autoUpdate Mengaktifkan unggah Delta (manifest) (bermanfaat jika mode instant apply diaktifkan tetapi Anda ingin bundle penuh).
  • --tus Upload bundle menggunakan protokol tus.
  • --multipart Menggunakan protokol multipart untuk mengunggah data ke S3, Tidak Aktif, gunakan TUS sebaliknya.
  • --encrypted-checksum <encryptedChecksum> Checksum yang dienkripsi (tanda tangan). Digunakan hanya ketika mengunggah bundle eksternal.
  • --package-json <packageJson> Jalur ke file package.json. Berguna untuk monorepos.
  • --auto-set-bundle Atur bundle di capacitor.config.json.
  • --node-modules <nodeModules> Daftar jalur ke node_modules. Berguna untuk monorepos (dipisahkan koma misalnya: ../../node_modules,./node_modules)

⭐️ Opsi eksternal membantu mengaktifkan 2 kasus: perusahaan dengan kekhawatiran privasi, jangan mengirim code ke pihak ketiga dan aplikasi lebih besar dari 200 MB. Dengan pengaturan ini, Capgo hanya menyimpan tautan ke zip dan mengirimkan tautan ke semua aplikasi.

👀 Cloud Capgo tidak pernah melihat apa yang ada di tautan (untuk opsi eksternal), atau di code ketika disimpan.

🔑 Anda dapat menambahkan lapisan keamanan kedua dengan menggunakan enkripsi, kemudian Capgo tidak akan dapat melihat atau memodifikasi apa-apa, menjadi “tidak dipercaya”.

Contoh untuk versi package.json untuk versi

{
"version": "1.0.2"
}

⛔ Versi harus lebih besar dari “0.0.0”.

💡 Jangan lupa untuk memperbarui nomor versi setiap kali Anda mengirimkan satu, nomor versi tidak dapat diubah atau digunakan kembali setelah penghapusan karena alasan keamanan.

npx @capgo/cli bundle list [appId]

[appId] ID aplikasi Anda dalam format com.test.app ditjelaskan di sini.

Optionally, Anda dapat memberikan:

  • --apikey [key] API kunci untuk menghubungkan ke akun Anda.

npx @capgo/cli bundle delete [appId]

[appId] ID aplikasi Anda dalam format com.test.app dijelaskan di sini.

Secara opsional, Anda dapat memberikan:

  • --apikey [key] API key untuk menghubungkan ke akun Anda.
  • --bundle dengan nomor versi akan hanya menghapus versi ini.

di dalam rentang SemVer untuk versi mayor ke Cloud

npx @capgo/cli bundle cleanup [appId] --bundle=[majorVersion] --keep=[numberToKeep]

[appId] ID aplikasi Anda dalam format com.test.app dijelaskan di sini.

Secara opsional, Anda dapat memberikan:

  • --apikey [key] Kunci API untuk menghubungkan ke akun Anda.
  • --bundle [majorVersion] versi yang Anda inginkan untuk menghapus paket sebelumnya, maka akan menyimpan yang terakhir + numberToKeep.
  • --keep [numberToKeep] jumlah paket yang ingin Anda simpan (default 4).

Misalnya: Jika Anda memiliki 10 versi dari 10.0.1 hingga 10.0.11, dan Anda menggunakan npx @capgo/cli cleanup [appId] --bundle=10.0.0 maka akan menghapus 10.0.1 hingga 10.0.6. 10.0.7 hingga 10.0.11 akan disimpan.

Jika Anda memiliki 20 versi secara total, dan Anda tidak menyediakan nomor paket seperti ini: npx @capgo/cli cleanup [appId] --keep=2 Maka akan menghapus 18 versi, dan menyimpan 2 terakhir.

Perintah ini akan meminta konfirmasi, menampilkan tabel apa yang akan disimpan dan dihapus.

Pemberitahuan: Perintah ini sudah tidak digunakan lagi dan akan dihapus dalam rilis utama berikutnya. Silakan menggunakan sistem enkripsi baru. npx @capgo/cli bundle encrypt [path/to/zip]

Perintah ini digunakan ketika Anda menggunakan sumber eksternal untuk menyimpan code Anda atau untuk tujuan tes.

Jika Anda ingin, Anda dapat memberikan:

--key [/path/to/my/private_key] jalan ke kunci pribadi Anda. --key-data [privateKey] data kunci pribadi, jika Anda ingin menggunakan inline. Perintah akan mencetak y dan menghasilkan zip yang dienkripsi, untuk digunakan dengan perintah unggah atau perintah dekripsi. ivSessionKeyEnkripsi V2

npx @capgo/cli bundle encrypt [path/to/zip] [checksum]

This command is used when you use external source to store your code or for test purpose. The checksum is the sha256 of the bundle (generated by —key-v2), it is used to verify the integrity of the file after decryption. It will be enncrypted with the private key and sent along with the bundle. In encryption v2 the checksum is upgraded to become a “signature” of the bundle.

Jika Anda ingin, Anda dapat memberikan:

--key [/path/to/my/private_key] path dari kunci pribadi Anda. --key-data [privateKey] data kunci pribadi, jika Anda ingin menggunakan inline. --json untuk menampilkan info sebagai JSON. Perintah akan mencetak ivSessionKeyy dan menghasilkan zip terenkripsi, untuk digunakan dengan perintah unggah atau perintah dekripsi.

npx @capgo/cli bundle decrypt [path/to/zip] [ivSessionKey]

Dapat diberikan secara opsional:

--key [/path/to/my/private_key] path dari kunci pribadi Anda.

--key-data [privateKey] data kunci pribadi, jika Anda ingin menggunakan inline. Perintah ini digunakan terutama untuk tujuan tes, akan mengenkripsi zip dan mencetak kunci sesi base64 yang didekripsi di konsol.

npx @capgo/cli bundle decryptV2 [path/to/zip] [ivSessionKey]

Dapat diberikan secara opsional:

--key [/path/to/my/private_key] jalur kunci pribadi Anda. --key-data [privateKey] data kunci pribadi, jika Anda ingin menggunakan inline. Perintah ini digunakan terutama untuk tujuan tes, akan mengembalikan zip dan mencetak kunci sesi base64 yang dienkripsi di konsol. --checksum [checksum] checksum dari file, akan memverifikasi checksum setelah dekripsi.

npx @capgo/cli bundle zip [appId]

[appId] apakah ID aplikasi Anda, formatnya dijelaskan di sini.

Optionally, Anda dapat memberikan:

  • --path [/path/to/my/bundle] untuk mengunggah folder tertentu.
  • --bundle [1.0.0] untuk menetapkan versi bundle dari nama file.
  • --name [myapp] untuk mengganti nama file.
  • --json untuk menampilkan informasi sebagai JSON.
  • --no-code-check untuk mengabaikan periksa code dan mengirimkan bundle secara langsung.
  • --key-v2 untuk menggunakan sistem enkripsi baru. Ini diperlukan karena sistem enkripsi baru menggunakan cek checksum yang lebih baik untuk memverifikasi integritas file.

npx @capgo/cli bundle compatibility [appId] -c [channelName]

[appId] ID aplikasi Anda, formatnya dijelaskan di sini. [channelName] nama saluran untuk memeriksa kompatibilitas.

Optionally, Anda dapat memberikan:

  • --apikey [key] API kunci untuk menghubungkan ke akun Anda.
  • --text gunakan teks daripada emoji di tabel
  • --channel [channel] saluran untuk memeriksa kompatibilitas dengan.
  • --package-json <packageJson> Jalur ke file package.json. Berguna untuk monorepos
  • --node-modules <nodeModules> A daftar jalur ke node_modules. Berguna untuk monorepos (dipisahkan oleh koma ex: ../../node_modules,./node_modules)

npx @capgo/cli channel add [channelName] [appId]

[channelName] nama saluran baru Anda, seperti production atau beta. [appId] ID aplikasi Anda dalam format com.test.app jelaskan di sini.

npx @capgo/cli channel delete [channelName] [appId]

[channelName] nama saluran yang ingin Anda hapus. [appId] ID aplikasi Anda dengan format com.test.app dijelaskan di sini.

npx @capgo/cli channel list [appId]

[appId] ID aplikasi Anda dengan format com.test.app dijelaskan di sini.

Jika perlu, Anda dapat memberikan:

  • --apikey [key] API kunci untuk menghubungkan ke akun Anda.

npx @capgo/cli channel set [channelName] [appId]

[appId] ID aplikasi Anda, formatnya dijelaskan di sini. [channelName] nama saluran yang ingin Anda konfigurasi, seperti production atau beta.

Optionally, Anda dapat memberikan:

  • --bundle [1.2.3] aplikasi bundel Anda sudah dikirim ke cloud, untuk menghubungkannya dengan saluran.
  • --latest ambil versi bundel dari package.json:version, tidak dapat digunakan bersamaan dengan --bundle.
  • --state [ normal | default ] atur status saluran, dapat normal atau default. Satu saluran harus dipilih default.
  • --downgrade mengizinkan saluran untuk mengirimkan versi turun ke perangkat.
  • --no-downgrade melarang saluran untuk mengirimkan versi turun ke perangkat.
  • --upgrade mengizinkan saluran untuk mengirimkan versi naik (utama) ke perangkat.
  • --no-upgrade melarang saluran untuk mengirimkan versi naik (utama) ke perangkat.
  • --ios mengizinkan saluran untuk mengirimkan versi ke perangkat iOS.
  • --no-ios melarang saluran untuk mengirimkan versi ke perangkat iOS.
  • --android mengizinkan saluran untuk mengirimkan versi ke perangkat android.
  • --no-android melarang saluran untuk mengirimkan versi ke perangkat android.
  • --self-assign mengizinkan perangkat untuk menetapkan diri sendiri ke saluran ini.
  • --no-self-assign melarang perangkat untuk menetapkan diri sendiri ke saluran ini.
  • --disable-auto-update STRATEGY Menghapus strategi update otomatis untuk saluran ini. Opsi yang mungkin adalah: utama, minor, patch, metadata, tidak ada.
  • --apikey [key] kunci API untuk menghubungkan ke akun Anda.

Disable updates strategy

Strategi Non Aktifasi Perbaruan

Ada beberapa cara untuk mengatasi pengaktifan non perbaruan untuk versi yang terlalu tua.
Capgo tidak dapat memperbarui native code sehingga perbaruan dari versi dengan native code yang lama ke versi dengan native code yang diperbarui tidak boleh mungkin. Ada beberapa cara untuk mencapai itu.

Pertama, strategi ini menghalangi perbaruan dari native baseline major -> bundle target 0.0.0 . Angka utama adalah angka yang ditonjolkan ( 1.0.0.0.0 dan1Kedua adalah strategi ini menghalangi perbaruan ketika bundle target memiliki versi mayor atau minor yang berbeda dengan native baseline perangkat, seperti 0.0.0).
atau minor .0.0 dan 0.0.0 -> 1.1.0 .0.1 1.1.0 -> 1.2.0.

Ketiga, strategi. Mode ini ditambahkan ke __CAPGO_KEEP_0__ sebagai mode yang sangat ketat. Tidak disarankan untuk digunakan kecuali Anda paham sepenuhnya bagaimana cara kerjanya. Untuk dapat menerima pembaruan, kondisi-kondisi berikut harus dipenuhi: patch strategy. It was added into capgo as a very strict mode. It’s not recommended to be used unless you fully understand how it works. In order for it to accept an update, the following conditions must be met:

  • Versi minor sama antara bundle target dan version_build
  • Versi patch sama antara bundle target dan version_build
  • Hanya versi tambahan yang dapat berbeda, seperti versi pra-rilis ( version_build
  • ) atau metadata bangun (-beta.2) or build metadata (+build.2)

Berikut adalah contoh skenario mana pembaruan diperbolehkan atau ditolak

  • 1.0.0-beta.1 -> 1.0.0-beta.2 diperbolehkan
  • 1.0.0+build.1 -> 1.0.0+build.2 diperbolehkan
  • 1.0.0 -> 1.0.1 diblokir
  • 1.0.0 -> 1.1.0 diblokir
  • 1.0.0 -> 2.0.0 diblokir

Penggunaan perbandingan strategi menggunakan basis native yang dikirim sebagai version_build, bukan bundle yang diunduh saat ini yang dikirim sebagai version_name.

Terakhir, strategi yang paling rumit. Strategi. metadata Pertama-tama, Anda perlu tahu bahwa awalnya setelah Anda mengaktifkannya, pembaruan
AKAN gagal karena saluran tersebut kekurangan metadata yang diperlukan. Jika saluran tersebut kekurangan metadata, Anda akan melihat pesan seperti ini:
Tidak dapat menemukan metadata

Jika Anda melihat sesuatu seperti ini, Anda tahu bahwa Anda harus pergi ke bundle saat ini untuk saluran yang gagal dan atur metadata.

Pertama-tama, tentukan saluran yang gagal. Anda dapat melakukannya dengan melihat di bundle saat ini untuk saluran yang gagal dan atur metadata.
Pertama-tama, Anda perlu tahu bahwa awalnya setelah Anda mengaktifkannya, pembaruan misconfigured kolom

Tabel yang tidak terkonfigurasi

Lalu pergi ke saluran yang gagal dan klik pada Bundle numberHal ini harus membawa Anda ke halaman bundle.

Lokasi saluran yang gagal

Setelah itu isi Minimal update version bidang. Hal ini harus berupa semver.
Jika nilai yang Anda masukkan bukanlah semver, maka Anda akan mendapatkan kesalahan, tetapi jika semuanya berjalan dengan benar, maka Anda harus melihat sesuatu seperti ini:

Atur versi minimum

Sekarang, Anda mungkin tidak ingin mengatur data ini secara manual setiap kali Anda melakukan update. Beruntungnya, CLI akan mencegah Anda mengirimkan update tanpa metadata ini

CLI gagal tanpa metadata

Untuk mengunggah bundle dengan benar ketika menggunakan metadata anda perlu melewati --min-update-version dengan versi semver yang valid. Contoh seperti ini:

CLI unggah dengan metadata

Faktanya --min-update-version bukan satu-satunya cara untuk melakukan konsistensi. Ada juga cara lain yang bernama --auto-min-update-version. Berikut adalah cara kerjanya.

Pertama, itu meninjau versi yang saat ini diunggah ke saluran. Ia memeriksa konsistensi sama seperti bundle compatibility perintah akan melakukannya. Kedua, jika versi baru 100% kompatibel maka ia mengambil min_update_version dari versi terbaru di saluran. Jika tidak, maka ia mengatur sebagai min_update_version ke bundle nomor versi yang baru saja diunggah.

Kamu akan selalu mendapatkan informasi apa itu min_update_version ketika menggunakan opsi ini. Ini akan terlihat seperti ini:

Versi update minimal

Jika versi baru tidak kompatibel maka harus terlihat seperti ini

Versi update minimal tidak kompatibel

Enkripsi Akhir ke Akhir (Tidak Dipercaya)

Bab berjudul “Enkripsi Akhir ke Akhir (Tidak Dipercaya)”

Capgo mendukung enkripsi akhir ke akhir, ini berarti bahwa bundle Anda (code) dienkripsi sebelum dikirim ke cloud dan dienkripsi kembali pada perangkat. Untuk itu, Anda perlu mengenerate pasang kunci RSA, Anda bisa menggunakan perintah berikut untuk menggenerate-nya.

Sistem enkripsi adalah kombinasi dari RSA dan AES, kunci RSA digunakan untuk mengenkripsi kunci AES, dan kunci AES digunakan untuk mengenkripsi file.

Lihat di bawah untuk informasi lebih lanjut tentang sistem enkripsi.

Cara kerja kriptografi

Skema enkripsi

npx @capgo/cli key create

Jika Anda ingin, Anda dapat memberikan: --force untuk mengganti kunci yang sudah ada. Perintah ini akan membuat pasang kunci untuk Anda di aplikasi, dan akan meminta Anda untuk menyimpan kunci pribadi di tempat yang aman. Dianjurkan untuk tidak mengkomit kunci pribadi ke repository Git, dan tidak berbagi dengan siapa pun.

Setelah melakukan tes lokal, hapus kunci dari file konfigurasi dan tambahkan di langkah CI dengan key save

npx @capgo/cli key save

Jika Anda ingin, Anda dapat memberikan:

--key [/path/to/my/public_key] alamat file kunci publik Anda.

--key-data [publicKey] data kunci publik, jika Anda ingin menggunakan inline. Perintah ini berguna jika Anda mengikuti rekomendasi dan tidak mengkomit kunci di konfigurasi aplikasi Anda.

Pengintegrasian CI

Integrasi CI

Untuk menghemat waktu Anda, saya merekomendasikan Anda membuat GitHub melakukan pekerjaan mengirim ke server kami

GitHub tutorial aksi

GitHub - Cap-go/demo-app

Jangan lupa untuk mengonfigurasi variabel lingkungan CI dengan kunci API Anda

Jika Anda menggunakan Perintah untuk merencanakan dashboard dan operasi API, hubungkannya Ringkasan API untuk detail implementasi di Ringkasan API Pendahuluan untuk detail implementasi di Pendahuluan Kunci API untuk detail implementasi di Kunci API Perangkat untuk detail implementasi di Perangkat, dan Paket untuk detail implementasi di Paket.