LIVE · AUDIT-KÆDE · EU-HOSTET
SYSTEM · 99,99 % OPPETID
v 1.0 ↗ FREMSTILLET I EU

@nexbasira/embed

En browser-widget, der gengiver NexBasiras feltside-oplevelse i din egen app. Indsæt en <div>, peg den mod en præget session-URL, lyt efter lifecycle-events. Ingen iframe-boilerplate, du selv skal skrive.

Installation

npm install @nexbasira/embed

Eller via <script>-tag til ikke-bundlet brug — se Script-tag nedenfor.

Grundlæggende brug

import { embed } from "@nexbasira/embed";

const widget = embed({
  container: "#nb-host",          // selector or HTMLElement
  sessionUrl: invite.url,          // minted by your backend via the Node/Python SDK
  width: "100%",
  height: "720px",
  onReady: () => console.log("iframe loaded"),
  onSessionJoined: (id) => console.log("field user joined", id),
  onEvidenceAdded: (ev) => console.log("evidence", ev),
  onSessionComplete: (id) => router.push(`/inspections/${id}`),
});

sessionUrl er den engangs-signerede URL, din backend får tilbage fra sessions.invite(). Indlejr aldrig en API-secret i URL'en — kun feltsession-tokenet, som er engangsbrug + IP/UA-pinnet.

Imperative metoder

Det returnerede widget-handle lader værtssiden styre feltside-oplevelsen programmatisk — typisk brugt af en værktøjslinje uden for iframen:

widget.requestSnapshot();    // operator-side trigger; field captures a frame
widget.openWhiteboard();
widget.closeWhiteboard();
widget.switchCamera();        // toggle front / rear on supported devices
widget.mute();
widget.unmute();
widget.endSession();
widget.destroy();             // tear down the iframe + remove listeners

Hver metode poster en besked til iframens vindue via postMessage med den konfigurerede expectedOrigin; iframens interne dispatcher router dem til den relevante kontrol.

Lifecycle-events

Hvert callback, du sender til embed({ on... }), kaldes, når den matchende postMessage fra iframen ankommer. Origin-tjekket håndhæves — beskeder fra enhver anden origin ignoreres, så du kan stole på payloadens form.

CallbackUdløses nårPayload
onReadyiframe færdig med indlæsning + handshake
onSessionJoinedFeltbruger tilsluttede rummetsessionId
onSessionCompleteSession lukket (operatør afsluttede, eller auto-udløbet)sessionId
onEvidenceAddedNyt snapshot / annotation / whiteboard / klip{ id, kind }
onWhiteboardOpenedWhiteboard-panel åbnet
onWhiteboardSavedWhiteboard eksporteret til beviser{ id }
onParticipantJoined / onParticipantLeftÆndring af deltagerstatus{ id, role }
onErrorEnhver fejl på iframe-siden{ message, code }

Script-tag

Til forbrugere uden en bundler:

<script src="https://unpkg.com/@nexbasira/embed@latest/dist/index.umd.js"></script>
<div id="nb-host" style="width: 100%; height: 720px"></div>
<script>
  const widget = NexBasira.embed({
    container: "#nb-host",
    sessionUrl: "<minted-by-your-backend>",
    onSessionComplete: (id) => alert("done: " + id),
  });
</script>

Bundtet vedhæfter NexBasira.embedwindow til dette mønster.

Origin-pinning

Som standard udleder widgetten den forventede iframe-origin fra den URL, du gav (sessionUrl), og afviser beskeder fra enhver anden origin. Hvis du hoster feltside-oplevelsen på et eget domæne (Pro-niveau), skal du sende expectedOrigin eksplicit:

embed({
  container: "#nb-host",
  sessionUrl: "https://inspect.yourco.com/r/abc",
  expectedOrigin: "https://inspect.yourco.com",
  // ...
});

React-app?

Brug @nexbasira/react i stedet — samme widget under motorhjelmen, idiomatisk React-API (<NexBasiraSession>-komponent + useNexBasiraSession()-hook), fresh-closure-callbacks på tværs af re-renders.

Hvad er det næste