ข้ามไปยังเนื้อหา

เอกสารอ้างอิง SDK ฟรอนต์เอนด์ของปลั๊กอิน ​

โค้ดฟรอนต์เอนด์ของปลั๊กอินทำงานใน iframe ที่อยู่ในแซนด์บ็อกซ์ เอกสารนี้เป็นข้อมูลอ้างอิงระดับล่าง สำหรับบทนำที่อธิบายภาพรวม ดู README.md


โมเดลความปลอดภัย ​

คุณสมบัติค่า
แซนด์บ็อกซ์ iframeเฉพาะ allow-scripts (ไม่มี allow-same-origin)
CSP script-srcควบคุมด้วย nonce; โหลดเฉพาะสคริปต์จุดเริ่มต้นการทำงาน
CSP connect-src'self' - ปลั๊กอินสามารถส่ง POST ไปยัง /plugins/{id}/api/* และโพล /plugins/{id}/events/poll
CSP default-src'none'
การเข้าถึง DOM ของหน้าที่ครอบ iframeถูกปิดกั้น (ไม่มี allow-same-origin)
คุกกี้เซสชันของ Ogmaปลั๊กอินเข้าถึงไม่ได้
การสื่อสารระหว่างปลั๊กอินไม่รองรับ

การเรียกบริดจ์ข้อมูลจะได้รับการตรวจสอบสิทธิ์ฝั่งเซิร์ฟเวอร์ในทุกคำขอ ส่วนการแสดงผลและการนำทางจัดการโดย UI ของโฮสต์ แคชสิทธิ์ที่แสดงในแท็บสิทธิ์มีไว้เพื่อแสดงผลเท่านั้น ไม่ได้ใช้ควบคุมการเข้าถึงข้อมูล


โปรโตคอลบริดจ์ ​

JS ของปลั๊กอินสื่อสารกับโฮสต์ Ogma ผ่าน postMessage โฮสต์อยู่ใน PluginsView.vue และจัดการข้อความ bridge_request

โครงสร้างห่อหุ้มคำขอ ​

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
}

ขนาดรวมสูงสุดของข้อความ: 65 536 ไบต์

โครงสร้างห่อหุ้มคำตอบ ​

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

อย่าส่งคำขอบริดจ์ postMessage แบบดิบด้วยตนเอง ให้ใช้ตัวแปรโกลบอล ogmaSDK:

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

SDK จัดการการสื่อสารบริดจ์ทั้งหมด รวมถึงการจับคู่คำขอ การจัดการ sessionId และการกำหนดผลลัพธ์ของ Promise


เอกสารอ้างอิงคำสั่ง ​

ogma.meta.get ​

ไม่ต้องมีเพย์โหลด

ส่งคืน { pluginId, packageId, name, version, ogmaVersion }

ogma.requests.get ​

เพย์โหลด: { id: string }

ส่งคืนรายการ HTTP ที่มีเฉพาะฟิลด์ที่เลือก ฟิลด์ประกอบด้วย id, method, host, port, path, query, req_len, resp_status, resp_len, roundtrip_ms, created_at การแสดงข้อมูลรูปแบบนี้ไม่รวมส่วนหัวหรือไบต์ของเนื้อหา

ต้องมีสิทธิ์: read_http_history (ได้รับอนุมัติโดยอัตโนมัติ)

ogma.requests.getRaw ​

เพย์โหลด: { id: string } เรียกผ่าน sdk.requests.getRaw(id)

ส่งคืน requestBodyBase64, responseBodyBase64, ความยาวหลังถอดรหัส (requestBodyLength, responseBodyLength), requestBodyTruncated, responseBodyTruncated และ maxBodyBytes แม้ชื่อจะสื่อเป็นอย่างอื่น การดำเนินการนี้ส่งคืนไบต์ของเนื้อหา ไม่ใช่ข้อความ HTTP ดิบทั้งข้อความ การเข้ารหัสเนื้อหาที่รองรับจะถูกถอดรหัสก่อนสร้างรูปแบบข้อมูลที่ส่งคืน เนื้อหาแต่ละส่วนจำกัดที่ 256 KiB; ตรวจสอบแฟล็กการตัดทอนก่อนประมวลผลแอสเซ็ตทั้งชิ้น

ต้องมีสิทธิ์: read_http_history (ได้รับอนุมัติโดยอัตโนมัติ)

เพย์โหลด: { limit?: number, offset?: number, query?: string }

query รองรับนิพจน์ตัวกรอง HTTPQL ค่า limit สูงสุด: 20 ส่งคืน { items: [...], total: number, limit: number, offset: number }

ต้องมีสิทธิ์: read_http_history (ได้รับอนุมัติโดยอัตโนมัติ)

ogma.findings.list ​

เพย์โหลด: { limit?: number, offset?: number }

ส่งคืน { items: [...], total: number, limit: number, offset: number } โดยมีประเด็นที่ตรวจพบไม่เกิน 20 รายการต่อหน้า แต่ละรายการเป็นข้อมูลสรุป ฟิลด์ประกอบด้วย id, title, severity, status, reporter, tags และ created_at

ต้องมีสิทธิ์: read_findings (ได้รับอนุมัติโดยอัตโนมัติ)

ogma.scope.getActive ​

ไม่มีเพย์โหลด ส่งคืนค่าขอบเขตที่ตั้งไว้ล่วงหน้าซึ่งใช้งานอยู่ หรือ null

ต้องมีสิทธิ์: read_scope (ได้รับอนุมัติโดยอัตโนมัติ)

ogma.projects.getCurrent ​

ไม่มีเพย์โหลด ส่งคืน { id, name, status } หรือ null

ต้องมีสิทธิ์: read_projects (ได้รับอนุมัติโดยอัตโนมัติ)

ogma.log ​

เพย์โหลด: { message: string }

เขียนลงในบัฟเฟอร์บันทึกของปลั๊กอิน

ogma.ui.resize ​

เพย์โหลด: { height: number } (สูงสุด 2000)

ขอให้โฮสต์กำหนดความสูงของ iframe

ogma.ui.sidebar.registerItem ​

เพย์โหลด: { name: string, path: string } (ชื่อไม่เกิน 64 อักขระ พาธไม่เกิน 256 อักขระ)

ลงทะเบียนการนำทางภายในแผงปลั๊กอิน สูงสุด 20 รายการต่อปลั๊กอิน ลงทะเบียนเนื้อหาของหน้าที่ตรงกันด้วย sdk.navigation.addPage(path, { title, body }); เมื่อเลือกรายการจะแสดงหน้านั้นภายใน iframe ไม่ใช่เส้นทางระดับบนใหม่ในพื้นที่ทำงาน Ogma

ogma.backend.call ​

เพย์โหลด: { method: string, args: unknown[] }

เรียกตัวจัดการ RPC แบ็กเอนด์ที่ลงทะเบียนผ่าน sdk.api.register(method, fn) ชื่อเมธอดมีความยาวสูงสุด 64 อักขระ

ส่งคืนค่าที่ตัวจัดการแบ็กเอนด์ส่งกลับมา โดยซีเรียลไลซ์เป็น JSON

ogma.backend.onEvent ​

เพย์โหลด: ไม่จำเป็น

มีเพียงการตอบรับเท่านั้น ใช้ ogma.events.poll เพื่อดึงเหตุการณ์จริง

ogma.events.poll ​

เพย์โหลด: { since: number } (ดัชนีจากการโพลครั้งล่าสุด; เริ่มที่ 0)

ส่งคืน { events: [{ event: string, args: unknown[] }], next_since: number }

ogma.navigation.addPage ​

เพย์โหลด: { path: string, title?: string }

บริดจ์ตอบรับพาธของหน้า SDK ที่ถูกแทรกเข้ามายังรับ { body: HTMLElement } เป็นตัวเลือกของ sdk.navigation.addPage(path, options) แนบเนื้อหาภายใน iframe และสลับการแสดงหน้าเมื่อโฮสต์เลือกรายการแถบด้านข้างที่ตรงกัน โหนด DOM ยังคงอยู่ภายใน iframe ไม่ได้ซีเรียลไลซ์ส่งผ่านบริดจ์

ogma.window.showToast ​

เพย์โหลด: { message: string, variant?: "info"|"success"|"warning"|"error", duration?: number }

แสดงการแจ้งเตือนแบบโทสต์ในแผงปลั๊กอิน ระยะเวลาเป็นมิลลิวินาที (สูงสุด 10000 ค่าเริ่มต้น 3000)

ogma.commands.register ​

เพย์โหลด: { id: string, name: string }

ลงทะเบียนคำสั่งปลั๊กอินในที่เก็บคำสั่งของโฮสต์ เมื่อโฮสต์ดำเนินการ จะส่งข้อความ plugin_command ที่มี commandId และบริบทกลับไปยัง iframe; ปลั๊กอินต้องจัดเตรียมคอลแบ็กที่ตรงกัน การลงทะเบียนเพียงอย่างเดียวไม่ทำให้คำสั่งทำงาน

ogma.menu.registerItem ​

เพย์โหลด: { type?: "Request" | "RequestRow" | "Response", commandId: string, label?: string }

ลงทะเบียนรายการเมนูบริบทที่ผูกกับคำสั่งปลั๊กอิน ให้ลงทะเบียนคำสั่งก่อน ป้ายกำกับใช้ชื่อที่ลงทะเบียนของคำสั่งเป็นค่าเริ่มต้น หากไม่มีชื่อจะใช้ ID; หากไม่ระบุ type จะใช้ค่าเริ่มต้น Request บริดจ์ของโฮสต์ไม่ได้ใช้ leadingIcon

เครื่องมือช่วยเรื่องธีม ​

SDK ที่ถูกแทรกเข้ามายังมี sdk.theme.get() และ sdk.theme.onChange(callback) ซึ่งอ่านธีมของ iframe และสมัครรับการอัปเดตธีมจากโฮสต์โดยไม่ต้องมีคำสั่งบริดจ์ข้อมูลแยกต่างหาก ใช้เพื่อให้ UI ของปลั๊กอินสอดคล้องกับรูปแบบสว่าง/มืดของ Ogma


รหัสข้อผิดพลาด ​

รหัสความหมาย
PERMISSION_DENIEDปลั๊กอินไม่มีสิทธิ์ที่จำเป็น
PLUGIN_DISABLEDปลั๊กอินยังไม่ได้เปิดใช้งานในขณะนี้
UNKNOWN_COMMANDคำสั่งไม่อยู่ในรายการที่รองรับ
INVALID_PAYLOADฟิลด์ที่จำเป็นในเพย์โหลดหายไปหรือมีชนิดข้อมูลไม่ถูกต้อง
NOT_FOUNDไม่มีทรัพยากรที่ขอ
LIMIT_EXCEEDEDถึงขีดจำกัดจำนวนรายการต่อปลั๊กอินแล้ว (เช่น รายการแถบด้านข้าง)
SERVER_ERRORข้อผิดพลาดภายใน ตรวจสอบบันทึกของปลั๊กอิน

รายการคำสั่งที่รองรับ ​

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.

ซอฟต์แวร์กรรมสิทธิ์ สงวนลิขสิทธิ์