client.request(requestOptions, fhirOptions)
The request method returns a promise that will be resolved with different
values, depending on the fhirOptions
argument.
pageLimit
), the result
will be an array.
onPage
callback, the result will be null
.
const client = new FHIR.client("https://r3.smarthealthit.org"); client.request("Patient/2e27c71e-30c8-4ceb-8c1c-5641e066c0a4");
function display(data) { const output = document.getElementById("output"); output.innerText = data instanceof Error ? String(data) : JSON.stringify(data, null, 4); } const client = new FHIR.client("https://r3.smarthealthit.org"); client.request("Patient/2e27c71e-30c8-4ceb-8c1c-5641e066c0a4") .then(display) .catch(display);
Authenticated clients will have patient.id
. This example uses an open FHIR
server so we pass a patient
to manually specify which the current patient is.
const client = new FHIR.client({ serverUrl: "https://r3.smarthealthit.org", tokenResponse: { patient: "2e27c71e-30c8-4ceb-8c1c-5641e066c0a4" } }); client.request(`Patient/${client.patient.id}`);
function display(data) { const output = document.getElementById("output"); output.innerText = data instanceof Error ? String(data) : JSON.stringify(data, null, 4); } const client = new FHIR.client({ serverUrl: "https://r3.smarthealthit.org", tokenResponse: { patient: "2e27c71e-30c8-4ceb-8c1c-5641e066c0a4" } }); client.request(`Patient/${client.patient.id}`) .then(display) .catch(display);
// launch.html FHIR.oauth2.authorize({ "client_id": "my-client-id", "scope": "launch" }); // index.html FHIR.oauth2.ready(client => client.request(`Patient/${client.patient.id}`));
Properly launched and authenticated clients will have an user
property.
To get that, you need to request openid
and fhirUser
scopes. This example uses an open FHIR server so we pass an id_token
to manually specify which the current user is.
const id_token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9." + "eyJwcm9maWxlIjoiUHJhY3RpdGlvbmVyL3NtYXJ0LVByYWN0aXRpb2" + "5lci03MjA4MDQxNiIsImZoaXJVc2VyIjoiUHJhY3RpdGlvbmVyL3Nt" + "YXJ0LVByYWN0aXRpb25lci03MjA4MDQxNiIsInN1YiI6IjM2YTEwYm" + "M0ZDJhNzM1OGI0YWZkYWFhZjlhZjMyYmFjY2FjYmFhYmQxMDkxYmQ0" + "YTgwMjg0MmFkNWNhZGQxNzgiLCJpc3MiOiJodHRwOi8vbGF1bmNoLn" + "NtYXJ0aGVhbHRoaXQub3JnIiwiaWF0IjoxNTU5MzkyMjk1LCJleHAi" + "OjE1NTkzOTU4OTV9.niEs55G4AFJZtU_b9Y1Y6DQmXurUZZkh3WCud" + "ZgwvYasxVU8x3gJiX3jqONttqPhkh7418EFssCKnnaBlUDwsbhp7xd" + "WN4o1L1NvH4bp_R_zJ25F1s6jLmNm2Qp9LqU133PEdcRIqQPgBMyZB" + "WUTyxQ9ihKY1RAjlztAULQ3wKea-rfe0BXJZeUJBsQPzYCnbKY1dON" + "_NRd8N9pTImqf41MpIbEe7YEOHuirIb6HBpurhAHjTLDv1IuHpEAOx" + "pmtxVVHiVf-FYXzTFmn4cGe2PsNJfBl8R_zow2n6qaSANdvSxJDE4D" + "UgIJ6H18wiSJJHp6Plf_bapccAwxbx-zZCw"; const client = new FHIR.client({ serverUrl: "https://r3.smarthealthit.org", tokenResponse: { id_token } }); client.request(client.user.fhirUser);
const id_token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9." + "eyJwcm9maWxlIjoiUHJhY3RpdGlvbmVyL3NtYXJ0LVByYWN0aXRpb2" + "5lci03MjA4MDQxNiIsImZoaXJVc2VyIjoiUHJhY3RpdGlvbmVyL3Nt" + "YXJ0LVByYWN0aXRpb25lci03MjA4MDQxNiIsInN1YiI6IjM2YTEwYm" + "M0ZDJhNzM1OGI0YWZkYWFhZjlhZjMyYmFjY2FjYmFhYmQxMDkxYmQ0" + "YTgwMjg0MmFkNWNhZGQxNzgiLCJpc3MiOiJodHRwOi8vbGF1bmNoLn" + "NtYXJ0aGVhbHRoaXQub3JnIiwiaWF0IjoxNTU5MzkyMjk1LCJleHAi" + "OjE1NTkzOTU4OTV9.niEs55G4AFJZtU_b9Y1Y6DQmXurUZZkh3WCud" + "ZgwvYasxVU8x3gJiX3jqONttqPhkh7418EFssCKnnaBlUDwsbhp7xd" + "WN4o1L1NvH4bp_R_zJ25F1s6jLmNm2Qp9LqU133PEdcRIqQPgBMyZB" + "WUTyxQ9ihKY1RAjlztAULQ3wKea-rfe0BXJZeUJBsQPzYCnbKY1dON" + "_NRd8N9pTImqf41MpIbEe7YEOHuirIb6HBpurhAHjTLDv1IuHpEAOx" + "pmtxVVHiVf-FYXzTFmn4cGe2PsNJfBl8R_zow2n6qaSANdvSxJDE4D" + "UgIJ6H18wiSJJHp6Plf_bapccAwxbx-zZCw"; function display(data) { const output = document.getElementById("output"); output.innerText = data instanceof Error ? String(data) : JSON.stringify(data, null, 4); } const client = new FHIR.client({ serverUrl: "https://r3.smarthealthit.org", tokenResponse: { id_token } }); client.request(client.user.fhirUser).then(display).catch(display);
Properly launched and authenticated clients will have userId
.
To get that, you need to request openid
and fhirUser
scopes.
// launch.html FHIR.oauth2.authorize({ "client_id": "my-client-id", "scope": "openid fhirUser" }); // index.html FHIR.oauth2.ready(client => client.request(client.user.fhirUser));
const client = new FHIR.client("https://r3.smarthealthit.org"); const getPath = client.getPath; client.request(`/MedicationRequest?patient=smart-1642068`, { resolveReferences: "medicationReference" }).then(data => data.entry.map(item => getMedicationName( getPath(item, "resource.medicationCodeableConcept.coding") || getPath(item, "resource.medicationReference.code.coding") )));
const rxnorm = "http://www.nlm.nih.gov/research/umls/rxnorm"; const client = new FHIR.client("https://r3.smarthealthit.org"); const getPath = client.getPath; function display(data) { const output = document.getElementById("output"); output.innerText = data instanceof Error ? String(data) : JSON.stringify(data, null, 4); } function getMedicationName(medCodings = []) { var coding = medCodings.find(c => c.system === rxnorm); return coding && coding.display || "Unnamed Medication(TM)"; } client.request(`/MedicationRequest?patient=smart-1642068`, { resolveReferences: "medicationReference" }).then(data => data.entry.map(item => getMedicationName( getPath(item, "resource.medicationCodeableConcept.coding") || getPath(item, "resource.medicationReference.code.coding") ))).then(display, display);
You can pass one or more reference paths as resolveReferences
option. The final result will contain the references replaced with resolved
resources.
const client = new FHIR.client("https://r3.smarthealthit.org"); client.request("/Encounter/3d1ae6a9-b8c1-4c12-a8ba-b44d96ddfe24", { resolveReferences: ["serviceProvider", "subject"] });
const client = new FHIR.client("https://r3.smarthealthit.org"); function display(data) { const output = document.getElementById("output"); output.innerText = data instanceof Error ? String(data) : JSON.stringify(data, null, 4); } client.request("/Encounter/3d1ae6a9-b8c1-4c12-a8ba-b44d96ddfe24", { resolveReferences: ["serviceProvider", "subject"] }).then(display).catch(display);
In most cases having the resolved references mounted on the result structure
is very convenient. However, sometimes you might want to keep the original
response as is, or you may want to have a map of resolved references that can
be re-used later. To do so, you can use the same resolveReferences
option but combine it with graph: false
. Then, the result will
contain two properties - data
and references
. Example:
const client = new FHIR.client("https://r3.smarthealthit.org"); client.request("/Encounter/3d1ae6a9-b8c1-4c12-a8ba-b44d96ddfe24", { resolveReferences: ["serviceProvider", "subject"], graph: false });
function display(data) { const output = document.getElementById("output"); output.innerText = data instanceof Error ? String(data) : JSON.stringify(data, null, 4); } const client = new FHIR.client("https://r3.smarthealthit.org"); client.request("/Encounter/3d1ae6a9-b8c1-4c12-a8ba-b44d96ddfe24", { resolveReferences: ["serviceProvider", "subject"], graph: false }).then(display).catch(display);
This shows how to fetch 2 pages. Not that the result is an array of page bundles.
const client = new FHIR.client("https://r3.smarthealthit.org"); client.request("/Patient", { pageLimit: 2 });
function display(data) { const output = document.getElementById("output"); output.innerText = data instanceof Error ? String(data) : JSON.stringify(data, null, 4); } const client = new FHIR.client("https://r3.smarthealthit.org"); client.request("/Patient", { pageLimit: 2 }).then(display).catch(display);
To get all available pages use pageLimit: 0
:
const client = new FHIR.client("https://r3.smarthealthit.org"); client.request("/Claim", { pageLimit: 0 });
function display(data) { const output = document.getElementById("output"); output.innerText = data instanceof Error ? String(data) : JSON.stringify(data, null, 4); } const client = new FHIR.client("https://r3.smarthealthit.org"); client.request("/Claim", { pageLimit: 0 }) .then(display).catch(display);