Ga naar de inhoud

Naslagwerk voor de frontend-SDK van plugins ​

De frontendcode van plugins wordt uitgevoerd in een afgeschermd iframe. Dit document is het naslagwerk op laag niveau. Zie README.md voor een inleiding op hoger niveau.


Beveiligingsmodel ​

EigenschapWaarde
Iframe-sandboxAlleen allow-scripts (geen allow-same-origin)
CSP script-srcAfgeschermd met een nonce; alleen het toegangspuntscript wordt geladen
CSP connect-src'self' - de plugin kan POST-verzoeken versturen naar /plugins/{id}/api/* en /plugins/{id}/events/poll pollen
CSP default-src'none'
Toegang tot de bovenliggende DOMGeblokkeerd (geen allow-same-origin)
Ogma-sessiecookiesNiet toegankelijk voor de plugin
Communicatie tussen pluginsNiet beschikbaar

Aanroepen via de gegevensbridge worden bij elk verzoek aan de serverzijde geautoriseerd; weergave- en navigatieacties worden door de hostinterface afgehandeld. De machtigingscache op het tabblad Rechten dient alleen voor weergave en wordt niet gebruikt om toegang tot gegevens te controleren.


Bridgeprotocol ​

JavaScript van plugins communiceert met de Ogma-host via postMessage. De host bevindt zich in PluginsView.vue en verwerkt bridge_request-berichten.

Verzoekenvelop ​

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
}

Maximale totale berichtgrootte: 65 536 bytes.

Responsenvelop ​

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

Verstuur geen ruwe postMessage-bridgeverzoeken handmatig. Gebruik de globale variabele ogmaSDK:

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

De SDK omvat alle bridgecommunicatie en verzorgt verzoekcorrelatie, sessionId-beheer en het afhandelen van Promises.


Naslagwerk voor opdrachten ​

ogma.meta.get ​

Geen payload vereist.

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

ogma.requests.get ​

Payload: { id: string }

Retourneert een projectie van een HTTP-item. Velden: id, method, host, port, path, query, req_len, resp_status, resp_len, roundtrip_ms, created_at. Deze projectie bevat geen headers of bodybytes.

Vereist: read_http_history (automatisch verleend).

ogma.requests.getRaw ​

Payload: { id: string }. Roep dit aan via sdk.requests.getRaw(id).

Retourneert requestBodyBase64, responseBodyBase64, hun gedecodeerde lengtes (requestBodyLength, responseBodyLength), requestBodyTruncated, responseBodyTruncated en maxBodyBytes. Ondanks de naam retourneert deze bewerking bodybytes, geen volledig ruw HTTP-bericht. Ondersteunde inhoudscoderingen worden vóór de projectie gedecodeerd. Elke body is beperkt tot 256 KiB; controleer de afkappingsindicatoren voordat je een volledige asset verwerkt.

Vereist: read_http_history (automatisch verleend).

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

query ondersteunt HTTPQL-filterexpressies. Maximale limit: 20. Retourneert { items: [...], total: number, limit: number, offset: number }.

Vereist: read_http_history (automatisch verleend).

ogma.findings.list ​

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

Retourneert { items: [...], total: number, limit: number, offset: number }, met maximaal 20 bevindingen per pagina. De items zijn samenvattingen; de velden omvatten id, title, severity, status, reporter, tags en created_at.

Vereist: read_findings (automatisch verleend).

ogma.scope.getActive ​

Geen payload. Retourneert de actieve scopevoorinstelling of null.

Vereist: read_scope (automatisch verleend).

ogma.projects.getCurrent ​

Geen payload. Retourneert { id, name, status } of null.

Vereist: read_projects (automatisch verleend).

ogma.log ​

Payload: { message: string }

Schrijft naar de logbuffer van de plugin.

ogma.ui.resize ​

Payload: { height: number } (maximaal 2000)

Verzoekt de host om de hoogte van het iframe in te stellen.

ogma.ui.sidebar.registerItem ​

Payload: { name: string, path: string } (naam maximaal 64 tekens, pad maximaal 256 tekens)

Registreert navigatie binnen het pluginpaneel. Maximaal 20 items per plugin. Registreer bijbehorende pagina-inhoud met sdk.navigation.addPage(path, { title, body }); wanneer je het item kiest, wordt die pagina binnen het iframe getoond, niet als een nieuwe Ogma-werkruimteroute op het hoogste niveau.

ogma.backend.call ​

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

Roept een backend-RPC-handler aan die is geregistreerd via sdk.api.register(method, fn). De methodenaam mag maximaal 64 tekens lang zijn.

Retourneert de waarde die de backendhandler heeft geretourneerd, geserialiseerd als JSON.

ogma.backend.onEvent ​

Payload: niet vereist.

Wordt alleen bevestigd. Gebruik ogma.events.poll om daadwerkelijk gebeurtenissen op te halen.

ogma.events.poll ​

Payload: { since: number } (index van de laatste poll; begin bij 0)

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

ogma.navigation.addPage ​

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

De bridge bevestigt het paginapad. De geïnjecteerde SDK accepteert daarnaast { body: HTMLElement } als optie voor sdk.navigation.addPage(path, options), voegt de inhoud binnen het iframe toe en schakelt de zichtbaarheid van pagina's om wanneer de host het bijbehorende zijbalkitem selecteert. De DOM-node blijft lokaal en wordt niet via de bridge geserialiseerd.

ogma.window.showToast ​

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

Toont een toastmelding in het pluginpaneel. Duur in ms (maximaal 10000, standaard 3000).

ogma.commands.register ​

Payload: { id: string, name: string }

Registreert de pluginopdracht in de opdrachtenstore van de host. Bij uitvoering door de host wordt een plugin_command-bericht met commandId en context teruggestuurd naar het iframe; de plugin moet de bijbehorende callback leveren. Registratie alleen voert de opdracht niet uit.

ogma.menu.registerItem ​

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

Registreert een contextmenu-item dat aan een pluginopdracht is gekoppeld. Registreer eerst de opdracht. Het label gebruikt standaard de geregistreerde naam van de opdracht en valt terug op de ID als er geen naam beschikbaar is; als type wordt weggelaten, is de standaardwaarde Request. leadingIcon wordt niet gebruikt door de hostbridge.

Themahulpfuncties ​

De geïnjecteerde SDK biedt ook sdk.theme.get() en sdk.theme.onChange(callback). Deze lezen het iframe-thema en abonneren zich op themawijzigingen van de host zonder een afzonderlijke gegevensbridgeopdracht. Gebruik ze om de plugininterface af te stemmen op de lichte of donkere weergave van Ogma.


Foutcodes ​

CodeBetekenis
PERMISSION_DENIEDDe plugin heeft niet de vereiste machtiging.
PLUGIN_DISABLEDDe plugin is momenteel niet ingeschakeld.
UNKNOWN_COMMANDDe opdracht staat niet in de lijst met ondersteunde opdrachten.
INVALID_PAYLOADEen verplicht payloadveld ontbreekt of heeft het verkeerde type.
NOT_FOUNDDe opgevraagde resource bestaat niet.
LIMIT_EXCEEDEDEen aantalslimiet per plugin is bereikt (bijvoorbeeld voor zijbalkitems).
SERVER_ERRORInterne fout. Controleer de pluginlogs.

Lijst met ondersteunde opdrachten ​

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.

Propriëtaire software. Alle rechten voorbehouden.