مرجع SDK فرانتاند افزونهها
کد فرانتاند افزونه در یک iframe ایزوله اجرا میشود. این سند مرجع سطح پایین است. برای مقدمهای در سطح بالاتر، به README.md مراجعه کنید.
مدل امنیتی
| ویژگی | مقدار |
|---|---|
| محیط ایزولهٔ iframe | فقط allow-scripts (بدون allow-same-origin) |
دستور CSP script-src | محدودشده با nonce؛ فقط اسکریپت نقطهٔ ورود بارگذاری میشود |
دستور CSP connect-src | 'self' - افزونه میتواند به /plugins/{id}/api/* درخواست POST بفرستد و /plugins/{id}/events/poll را پایش کند |
دستور CSP default-src | 'none' |
| دسترسی به DOM والد | مسدود است (بدون allow-same-origin) |
| کوکیهای نشست Ogma | افزونه به آنها دسترسی ندارد |
| ارتباط بین افزونهها | در دسترس نیست |
مجوز فراخوانیهای پل داده در هر درخواست در سمت سرور بررسی میشود؛ اقدامات نمایش و پیمایش را رابط کاربری میزبان مدیریت میکند. حافظهٔ نهان مجوزها که در زبانهٔ مجوزها نمایش داده میشود فقط برای نمایش است و دسترسی به داده را کنترل نمیکند.
پروتکل پل
کد JS افزونه از طریق postMessage با میزبان Ogma ارتباط برقرار میکند. میزبان در 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
}استفاده از SDK (توصیهشده)
درخواستهای خام پل 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 (بهطور خودکار اعطا میشود).
ogma.requests.search
دادهٔ ورودی: { 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 محلی میماند و از طریق پل سریالسازی نمیشود.
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 }
یک مورد منوی زمینهای مرتبط با فرمان افزونه ثبت میکند. ابتدا فرمان را ثبت کنید. برچسب بهطور پیشفرض نام ثبتشدهٔ فرمان است و اگر نام موجود نباشد، شناسهٔ آن استفاده میشود؛ اگر type حذف شود، مقدار پیشفرض Request است. پل میزبان از leadingIcon استفاده نمیکند.
ابزارهای کمکی پوسته
SDK تزریقشده همچنین sdk.theme.get() و sdk.theme.onChange(callback) را فراهم میکند. این توابع پوستهٔ iframe را میخوانند و بدون فرمان جداگانهٔ پل داده، بهروزرسانیهای پوستهٔ میزبان را دریافت میکنند. از آنها برای هماهنگ نگه داشتن رابط کاربری افزونه با ظاهر روشن/تیرهٔ 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.