Langsung ke konten

Referensi SDK Frontend Plugin ​

Kode frontend plugin berjalan di dalam iframe sandbox. Dokumen ini adalah referensi tingkat rendah. Untuk pengantar tingkat lebih tinggi, lihat README.md.


Model keamanan ​

PropertiNilai
Sandbox iframeHanya allow-scripts (tanpa allow-same-origin)
CSP script-srcDikendalikan nonce; hanya skrip titik masuk yang dimuat
CSP connect-src'self' - plugin dapat melakukan POST ke /plugins/{id}/api/* dan polling /plugins/{id}/events/poll
CSP default-src'none'
Akses DOM indukDiblokir (tanpa allow-same-origin)
Cookie sesi OgmaTidak dapat diakses plugin
Komunikasi antarpluginTidak tersedia

Pemanggilan bridge data diotorisasi di sisi server pada setiap permintaan; tindakan tampilan dan navigasi ditangani UI host. Cache izin yang ditampilkan di tab Izin hanya untuk tampilan; cache ini tidak mengendalikan akses data.


Protokol bridge ​

JS plugin berkomunikasi dengan host Ogma melalui postMessage. Host berada di PluginsView.vue dan menangani pesan bridge_request.

Envelope permintaan ​

ts
interface BridgeRequest {
  type: 'bridge_request'
  sessionId: string     // nonce assigned when the bridge is set up; prevents stale messages
  requestId: string     // caller-generated correlation id (max 128 chars)
  command: string       // e.g. "ogma.requests.get"
  payload?: unknown     // command-specific input
}

Ukuran total pesan maksimum: 65.536 byte.

Envelope respons ​

ts
interface BridgeResponse {
  type: 'bridge_response'
  requestId: string
  ok: boolean
  result?: unknown
  error?: string
  code?: string
}

Jangan mengirim permintaan bridge postMessage dalam bentuk mentah secara manual. Gunakan global ogmaSDK:

js
ogmaSDK.ready(function(sdk) {
  sdk.meta.get().then(function(meta) {
    sdk.log.info("running as " + meta.pluginId);
  });
});

SDK membungkus seluruh komunikasi bridge dan menangani korelasi permintaan, pengelolaan sessionId, dan penyelesaian Promise.


Referensi perintah ​

ogma.meta.get ​

Tidak memerlukan payload.

Mengembalikan { pluginId, packageId, name, version, ogmaVersion }.

ogma.requests.get ​

Payload: { id: string }

Mengembalikan proyeksi entri HTTP. Kolom: id, method, host, port, path, query, req_len, resp_status, resp_len, roundtrip_ms, created_at. Proyeksi ini tidak menyertakan header atau byte isi.

Memerlukan: read_http_history (diberikan otomatis).

ogma.requests.getRaw ​

Payload: { id: string }. Panggil melalui sdk.requests.getRaw(id).

Mengembalikan requestBodyBase64, responseBodyBase64, panjang hasil dekodenya (requestBodyLength, responseBodyLength), requestBodyTruncated, responseBodyTruncated, dan maxBodyBytes. Meskipun namanya demikian, operasi ini mengembalikan byte isi, bukan pesan HTTP lengkap dalam format transmisi. Pengodean konten yang didukung didekode sebelum proyeksi. Setiap isi dibatasi hingga 256 KiB; periksa penanda pemotongan sebelum memproses aset lengkap.

Memerlukan: read_http_history (diberikan otomatis).

Payload: { limit?: number, offset?: number, query?: string }

query mendukung ekspresi filter HTTPQL. limit maksimum: 20. Mengembalikan { items: [...], total: number, limit: number, offset: number }.

Memerlukan: read_http_history (diberikan otomatis).

ogma.findings.list ​

Payload: { limit?: number, offset?: number }

Mengembalikan { items: [...], total: number, limit: number, offset: number }, dengan paling banyak 20 temuan per halaman. Item berupa ringkasan; kolom mencakup id, title, severity, status, reporter, tags, dan created_at.

Memerlukan: read_findings (diberikan otomatis).

ogma.scope.getActive ​

Tanpa payload. Mengembalikan prasetel cakupan aktif atau null.

Memerlukan: read_scope (diberikan otomatis).

ogma.projects.getCurrent ​

Tanpa payload. Mengembalikan { id, name, status } atau null.

Memerlukan: read_projects (diberikan otomatis).

ogma.log ​

Payload: { message: string }

Menulis ke buffer log plugin.

ogma.ui.resize ​

Payload: { height: number } (maksimum 2000)

Meminta host menetapkan tinggi iframe.

ogma.ui.sidebar.registerItem ​

Payload: { name: string, path: string } (nama maksimum 64 karakter, path maksimum 256 karakter)

Mendaftarkan navigasi dalam panel plugin. Maksimum 20 item per plugin. Daftarkan isi halaman yang sesuai dengan sdk.navigation.addPage(path, { title, body }); memilih item menampilkan halaman tersebut di dalam iframe, bukan rute ruang kerja Ogma tingkat teratas yang baru.

ogma.backend.call ​

Payload: { method: string, args: unknown[] }

Memanggil handler RPC backend yang didaftarkan melalui sdk.api.register(method, fn). Panjang maksimum nama metode adalah 64 karakter.

Mengembalikan apa pun yang dikembalikan handler backend, diserialisasi sebagai JSON.

ogma.backend.onEvent ​

Payload: tidak diperlukan.

Hanya dikonfirmasi. Gunakan ogma.events.poll untuk pengambilan peristiwa sebenarnya.

ogma.events.poll ​

Payload: { since: number } (indeks dari polling terakhir; mulai dari 0)

Mengembalikan { events: [{ event: string, args: unknown[] }], next_since: number }.

ogma.navigation.addPage ​

Payload: { path: string, title?: string }

Bridge mengonfirmasi path halaman. SDK yang disisipkan juga menerima { body: HTMLElement } sebagai opsi untuk sdk.navigation.addPage(path, options), melampirkan isi di dalam iframe, dan mengganti visibilitas halaman ketika host memilih item bilah sisi yang sesuai. Simpul DOM tetap lokal; tidak diserialisasi melalui bridge.

ogma.window.showToast ​

Payload: { message: string, variant?: "info"|"success"|"warning"|"error", duration?: number }

Menampilkan toast di panel plugin. Durasi dalam ms (maksimum 10000, default 3000).

ogma.commands.register ​

Payload: { id: string, name: string }

Mendaftarkan perintah plugin pada store perintah host. Eksekusi host mengirim pesan plugin_command yang berisi commandId dan konteks kembali ke iframe; plugin harus menyediakan callback yang sesuai. Pendaftaran saja tidak mengeksekusi perintah.

ogma.menu.registerItem ​

Payload: { type?: "Request" | "RequestRow" | "Response", commandId: string, label?: string }

Mendaftarkan item menu konteks yang terikat ke perintah plugin. Daftarkan perintah terlebih dahulu. Label secara default adalah nama perintah yang terdaftar, lalu ID-nya; type yang tidak disertakan secara default adalah Request. leadingIcon tidak digunakan oleh bridge host.

Helper Tema ​

SDK yang disisipkan juga menyediakan sdk.theme.get() dan sdk.theme.onChange(callback). Keduanya membaca tema iframe dan berlangganan pembaruan tema host tanpa perintah bridge data terpisah. Gunakan untuk menjaga UI plugin konsisten dengan tampilan terang/gelap Ogma.


Kode kesalahan ​

KodeMakna
PERMISSION_DENIEDPlugin tidak memiliki izin yang diperlukan.
PLUGIN_DISABLEDPlugin saat ini tidak diaktifkan.
UNKNOWN_COMMANDPerintah tidak ada dalam daftar yang didukung.
INVALID_PAYLOADKolom payload wajib tidak ada atau memiliki tipe yang salah.
NOT_FOUNDSumber daya yang diminta tidak ada.
LIMIT_EXCEEDEDBatas jumlah per plugin tercapai (misalnya item bilah sisi).
SERVER_ERRORKesalahan internal. Periksa log plugin.

Daftar perintah yang didukung ​

ogma.meta.get, ogma.log, ogma.ui.resize, ogma.ui.sidebar.registerItem, ogma.requests.get, ogma.requests.getRaw, ogma.requests.search, ogma.findings.list, ogma.scope.getActive, ogma.projects.getCurrent, ogma.backend.call, ogma.backend.onEvent, ogma.events.poll, ogma.navigation.addPage, ogma.window.showToast, ogma.commands.register, ogma.menu.registerItem.

Perangkat lunak proprietari. Seluruh hak cipta dilindungi.