انتقل إلى المحتوى

مرجع SDK الواجهة الأمامية للإضافات ​

تعمل شيفرة الواجهة الأمامية للإضافة داخل إطار iframe معزول. هذا المستند مرجع منخفض المستوى. للحصول على مقدّمة أعلى مستوى، راجع README.md.


نموذج الأمان ​

الخاصيةالقيمة
عزل iframeallow-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 للصفحة الأممحظور (دون allow-same-origin)
ملفات تعريف الارتباط لجلسة Ogmaلا تستطيع الإضافة الوصول إليها
التواصل بين الإضافاتغير متاح

يُتحقّق من صلاحية استدعاءات جسر البيانات على جانب الخادم لكل طلب؛ وتتولّى واجهة المستخدم المضيفة إجراءات العرض والتنقّل. ذاكرة الصلاحيات المؤقتة المعروضة في علامة تبويب الصلاحيات مخصّصة للعرض فقط؛ ولا تتحكّم في الوصول إلى البيانات.


بروتوكول الجسر ​

تتواصل شيفرة 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 محلية؛ ولا تُسلسَل عبر الجسر.

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.

برنامج مملوك. جميع الحقوق محفوظة.