Page History
Navitabs | ||||
---|---|---|---|---|
| ||||
Anvendere af NAP sdk er primært gæstesystemudviklere, derfor er denne guide målrettet disse.
Nap-typescript-sdk
Nap-typescript-sdk exporterer en række metoder og interfaces som beskrevet i følgende:
NAP interfacet
En wrapper af konteksbroen.
exportinterfaceNAP {
fromHost$: Observable<NAPMessage>;
toHost$: Subject<NAPMessage>;
errors$: Observable<NAPError>;
subscribe: (subscriber: NAPHostSubscriber) =>void;
unsubscribe: (subscriber: NAPHostSubscriber) =>void;
send: (message: NAPMessage) =>void;
}
fromHost$: Besked stream af NapMessages fra værtssystemet. Udstillet som en rxjs Observable.
toHost$: Send en NapMessage til hosten. Denne er udstillet som et rxjs subject kan skubbe beskeder til med next().
errors$: SDK error stream. Udstillet som en rxjs Observable.
subscribe: Subscriber til NAPMessages fra værtsystemet. Ækvivalent med `fromHost$` bare uden observable.
unsubscribe: Unsubscribe af NAPMessages værtssystemet.
send: Send NAPMessage - equavialent to `toHost$`, just without using observables.
NAPMessage
Består af følgende felter, som er meget inspireret af FHIR / FHIRcast (https://fhircast.org/specification/Feb2020Ballot/),
exportinterfaceNAPMessage {
date: string;
id: string;
event: NAPEvent;
}
Eventkatalog
Eventkatalog definerer de events der kan sendes over NAP i en givende version.
Dette eventkatalog lægger sig også op af FHIR / FHIRcast , hvilket betyder at eventet har følgende struktur:
exportinterfaceNAPEvent {
type: NAPEventType;
context?: FHIR.Context[];
}
Eventkatalog version 1 | |
NAPEventType | Funktionelle beskrivelse |
---|---|
SessionOpen | Start en trusted session hvor brugerens SAMLassertion overføres. |
SessionClose | Hvis en bruger ønskes lukkes ud. Alt state skal slettes på web-applikationen |
PatientOpen | Den brugervalgte patient journal. |
PatientClose | Den brugervalgte patient journal lukkes. |
SessionError | Hvis der sker en uventet fejl i gæstesystemet skal dette sendes til værtssystemet og vice versa. |
Følgende er et eksempel på at anvende eventkatalog version 1:
import { NAPEventCatalogue } from'nap-typescript-sdk';
const sessionCloseEvent = NAPEventCatalogue.v1.SessionClose;
Nap-typescript-sdk indeholder derudover en række utility funktioner, som kan være brugbare.
Følgende er et eksempel på anvendelse af mapping funktioner, der mapper nap-events.
import { FHIRValueGetter, NAPMessage, NAPPatientInfo } from'nap-typescript-sdk';
constsessionToken = FHIRValueGetter.getSessionValue(napMessage);
const patientData: NAPPatientInfo = FHIRValueGetter.getSessionValue(napMessage);
Nap-angular-sdk
Da nap-angular-sdk er en angular specifik wrapper af nap-typescript-sdk har den en peer dependency til nap-typescript-sdk. Et eksempel for implementing af nap-angular-sdk til at få SAMLassertion kunne se således ud :
import { NapAngularService } from'nap-angular-sdk';
import { filterEvents, NAPEventCatalogue, NAPMessage } from'nap-typescript-sdk';
import { v4asUUID } from'uuid';
import { NapAngularService } from'nap-angular-sdk';
import { filterEvents, NAPEventCatalogue, NAPMessage } from'nap-typescript-sdk';
import { shareReplay } from'rxjs/operators';
import { v4asUUID } from'uuid';
exportclass MyComponent {
publicsession$: Observable<NAPMessage | undefined> =
this.napSDK.incomming$.pipe(
filterEvents([NAPEventCatalogue.v1.SessionOpen, NAPEventCatalogue.v1.SessionClose]),
);
constructor(privatenapSK: NapAngularService) {
constnapMsg: NAPMessage = {
date:newDate().toISOString(),
id:UUID(),
event: { type:NAPEventCatalogue.v1.SessionOpen },
};
// Ask for the SAMLassertion in host
this.napSDK.sendMessage(napMsg);
}
}
Fuld implementation af eventkataloget ses i nap-reference-web her Mangler link til kode.
Nap-react-sdk
Da nap-react-sdk er en react specifik wrapper af nap-typescript-sdk har den en peer dependency til nap-typescript-sdket. Et eksempel for implementing af nap-react-sdk til at vise og sende beskeder kunne se således ud:
import { NapContextProvider, NAPEventType, useNap } from'nap-react-sdk';
importReactfrom'react';
import { v4asUUID } from'uuid';
constIncommingMessageComponent: React.FC = () => {
constnapContext = useNap()
const samlSession = napContext.latestIncomming.event.eventType === NAPEventCatalogue.v1.SessionOpen ? napContext.lastestIncomming as : undefined;
return<div>{JSON.stringify(samlSession)}</div>
}
constPostMessageComponent: React.FC = () => {
constnapContext = useNap()
return (
<button
onClick={() => {
napContext.postMessage({
date:newDate().toString(),
id: UUID(),
event: { type:NAPEventType.SessionOpen }
})
}}
>
Send message
</button>
)
}
constApp = () => {
return (
<>
<NapContextProvider>
<IncommingMessageComponent></IncommingMessageComponent>
<PostMessageComponent></PostMessageComponent>
</NapContextProvider>
</>
)
}
exportdefaultApp