Socket
Socket
Sign inDemoInstall

@medplum/core

Package Overview
Dependencies
Maintainers
1
Versions
186
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@medplum/core - npm Package Compare versions

Comparing version 0.4.0 to 0.4.1

2

dist/cjs/index.min.js

@@ -15,3 +15,3 @@ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).medplum=e.medplum||{},e.medplum.core={}))}(this,(function(e){"use strict";

PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */function t(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))}class r{constructor(e=10){this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){const t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}}function n(e,t){const r=[];return e.prefix&&((null==t?void 0:t.all)||(null==t?void 0:t.prefix))&&r.push(...e.prefix),e.given&&r.push(...e.given),e.family&&r.push(e.family),e.suffix&&((null==t?void 0:t.all)||(null==t?void 0:t.suffix))&&r.push(...e.suffix),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&r.push("["+e.use+"]"),r.join(" ").trim()}function i(e){return e.resourceType+"/"+e.id}function o(e){return"Patient"===e.resourceType||"Practitioner"===e.resourceType||"RelatedPerson"===e.resourceType}function s(e){if(o(e)){const t=function(e){const t=e.name;if(t&&t.length>0)return n(t[0]);return}(e);if(t)return t}if("Device"===e.resourceType){const t=function(e){const t=e.deviceName;if(t&&t.length>0)return t[0].name;return}(e);if(t)return t}return"User"===e.resourceType&&e.email?e.email:"name"in e&&e.name&&"string"==typeof e.name?e.name:i(e)}function a(e,t){return JSON.stringify(e,c,t?2:void 0)}function c(e,t){return function(e){if(null==e)return!0;const t=typeof e;return"string"===t&&""===e||"object"===t&&0===Object.keys(e).length}(t)?void 0:t}function u(e){return null!==e&&"object"==typeof e}const h=[];for(let e=0;e<256;e++)h.push(e.toString(16).padStart(2,"0"));function l(e){const t=new Uint8Array(e),r=new Array(t.length);for(let e=0;e<t.length;e++)r[e]=h[t[e]];return r.join("")}function d(e){const t=new Uint8Array(e),r=[];for(let e=0;e<t.length;e++)r[e]=String.fromCharCode(t[e]);return window.btoa(r.join(""))}function p(e){return e.charAt(0).toUpperCase()+e.substr(1)}function f(){const e=new Uint32Array(28);return crypto.getRandomValues(e),l(e.buffer)}function g(e){const[t,r,n]=e.split(".");return function(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),r=window.atob(t),n=Array.from(r).reduce(((e,t)=>`${e}%${("00"+t.charCodeAt(0).toString(16)).slice(-2)}`),""),i=decodeURIComponent(n);return JSON.parse(i)}(r)}const m="ok",v="created",y="gone",T="not-modified",E="not-found",S="access-denied",O={resourceType:"OperationOutcome",id:m,issue:[{severity:"information",code:"information",details:{text:"All OK"}}]},P={resourceType:"OperationOutcome",id:v,issue:[{severity:"information",code:"information",details:{text:"Created"}}]},U={resourceType:"OperationOutcome",id:T,issue:[{severity:"information",code:"information",details:{text:"Not Modified"}}]},R={resourceType:"OperationOutcome",id:E,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},A={resourceType:"OperationOutcome",id:y,issue:[{severity:"error",code:"gone",details:{text:"Gone"}}]},C={resourceType:"OperationOutcome",id:S,issue:[{severity:"error",code:"access-denied",details:{text:"Access Denied"}}]};function b(e){return e.id===m||e.id===v||e.id===T}class w extends Error{constructor(e){var t,r;super(null===(r=null===(t=null==e?void 0:e.issue)||void 0===t?void 0:t[0].details)||void 0===r?void 0:r.text),this.outcome=e}}var I;e.Operator=void 0,(I=e.Operator||(e.Operator={})).EQUALS="eq",I.NOT_EQUALS="ne",I.GREATER_THAN="gt",I.LESS_THAN="lt",I.GREATER_THAN_OR_EQUALS="ge",I.LESS_THAN_OR_EQUALS="le",I.STARTS_AFTER="sa",I.ENDS_BEFORE="eb",I.APPROXIMATELY="ap",I.CONTAINS="contains",I.EXACT="exact",I.TEXT="text",I.ABOVE="above",I.BELOW="below",I.IN="in",I.NOT_IN="not-in",I.OF_TYPE="of-type";const _=[e.Operator.CONTAINS,e.Operator.EXACT,e.Operator.TEXT,e.Operator.ABOVE,e.Operator.BELOW,e.Operator.IN,e.Operator.NOT_IN,e.Operator.OF_TYPE],k=[e.Operator.NOT_EQUALS,e.Operator.GREATER_THAN,e.Operator.LESS_THAN,e.Operator.GREATER_THAN_OR_EQUALS,e.Operator.LESS_THAN_OR_EQUALS,e.Operator.STARTS_AFTER,e.Operator.ENDS_BEFORE,e.Operator.APPROXIMATELY];function L(e){const t=[];return e.fields&&t.push("_fields="+e.fields.join(",")),e.filters&&e.filters.forEach((e=>{const r=_.includes(e.operator)?":"+e.operator:"",n=k.includes(e.operator)?e.operator:"";t.push(`${e.code}${r}=${n}${encodeURIComponent(e.value)}`)})),e.sortRules&&t.push(function(e){if(!e||0===e.length)return"";return"_sort="+e.map((e=>e.descending?"-"+e.code:e.code)).join(",")}(e.sortRules)),e.page&&e.page>0&&t.push("_page="+e.page),e.count&&e.count>0&&t.push("_count="+e.count),0===t.length?"":(t.sort(),"?"+t.join("&"))}class N{constructor(){this.storage="undefined"!=typeof localStorage?localStorage:new x}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)||void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){const t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?a(t):void 0)}}class x{constructor(){this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){var t;return null!==(t=this.data.get(e))&&void 0!==t?t:null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}}var j;function D(){return{types:{}}}function M(e,t){var r;const n=t.name;if(!n)return;e.types[n]={display:n,description:t.description,properties:{}};const i=null===(r=t.snapshot)||void 0===r?void 0:r.element;if(i){const t=i.filter((e=>e.path!==n&&e.path));t.forEach((t=>function(e,t){var r,n;const i=t.path,o=null===(n=null===(r=t.type)||void 0===r?void 0:r[0])||void 0===n?void 0:n.code;if("Element"!==o&&"BackboneElement"!==o)return;const s=i.split("."),a=q(s);a in e.types||(e.types[a]={display:a,description:t.definition,parentType:q(s.slice(0,s.length-1)),properties:{}})}(e,t))),t.forEach((t=>function(e,t){const r=t.path.split(".");if(1===r.length)return;const n=q(r.slice(0,r.length-1)),i=e.types[n],o=r[r.length-1];i.properties[o]=t}(e,t)))}}function B(e,t){if(t.base)for(const r of t.base){const n=e.types[r];n&&(n.searchParams||(n.searchParams={}),n.searchParams[t.code]=t)}}function q(e){return e.map(p).join("")}e.PropertyType=void 0,(j=e.PropertyType||(e.PropertyType={})).Address="Address",j.Age="Age",j.Annotation="Annotation",j.Attachment="Attachment",j.BackboneElement="BackboneElement",j.CodeableConcept="CodeableConcept",j.Coding="Coding",j.ContactDetail="ContactDetail",j.ContactPoint="ContactPoint",j.Contributor="Contributor",j.Count="Count",j.DataRequirement="DataRequirement",j.Distance="Distance",j.Dosage="Dosage",j.Duration="Duration",j.Expression="Expression",j.Extension="Extension",j.HumanName="HumanName",j.Identifier="Identifier",j.MarketingStatus="MarketingStatus",j.Meta="Meta",j.Money="Money",j.Narrative="Narrative",j.ParameterDefinition="ParameterDefinition",j.Period="Period",j.Population="Population",j.ProdCharacteristic="ProdCharacteristic",j.ProductShelfLife="ProductShelfLife",j.Quantity="Quantity",j.Range="Range",j.Ratio="Ratio",j.Reference="Reference",j.RelatedArtifact="RelatedArtifact",j.Resource="Resource",j.SampledData="SampledData",j.Signature="Signature",j.SubstanceAmount="SubstanceAmount",j.SystemString="http://hl7.org/fhirpath/System.String",j.Timing="Timing",j.TriggerDefinition="TriggerDefinition",j.UsageContext="UsageContext",j.base64Binary="base64Binary",j.boolean="boolean",j.canonical="canonical",j.code="code",j.date="date",j.dateTime="dateTime",j.decimal="decimal",j.id="id",j.instant="instant",j.integer="integer",j.markdown="markdown",j.oid="oid",j.positiveInt="positiveInt",j.string="string",j.time="time",j.unsignedInt="unsignedInt",j.uri="uri",j.url="url",j.uuid="uuid";const F="launch/patient openid fhirUser offline_access user/*.*";function H(){return window.location.protocol+"//"+window.location.host+"/"}var z;function Q(e,t){const r=t.split(" | ");for(const t of r){const r=$(t);if(r.startsWith(e+"."))return r}}function $(e){let t=e.trim();return t.startsWith("(")&&t.endsWith(")")&&(t=t.substring(1,t.length-1)),t.includes(" as ")&&(t=t.substring(0,t.indexOf(" as "))),t.includes(".where(")&&(t=t.substring(0,t.indexOf(".where("))),t}e.SearchParameterType=void 0,(z=e.SearchParameterType||(e.SearchParameterType={})).BOOLEAN="BOOLEAN",z.NUMBER="NUMBER",z.QUANTITY="QUANTITY",z.TEXT="TEXT",z.REFERENCE="REFERENCE",z.DATE="DATE",z.DATETIME="DATETIME",z.PERIOD="PERIOD",e.MedplumClient=class extends class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListeneer(e,t){const r=this.listeners[e];if(r)for(let e=0;e<r.length;e++)if(r[e]===t)return void r.splice(e,1)}dispatchEvent(e){const t=this.listeners[e.type];return t&&t.forEach((t=>t.call(this,e))),!e.defaultPrevented}}{constructor(e){var t;if(super(),null==e?void 0:e.baseUrl){if(!e.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");if(!e.baseUrl.endsWith("/"))throw new Error("Base URL must end with a trailing slash")}this.fetch=(null==e?void 0:e.fetch)||window.fetch.bind(window),this.storage=new N,this.schema={types:{}},this.resourceCache=new r(null!==(t=null==e?void 0:e.resourceCacheSize)&&void 0!==t?t:1e3),this.baseUrl=(null==e?void 0:e.baseUrl)||"https://api.medplum.com/",this.clientId=(null==e?void 0:e.clientId)||"",this.authorizeUrl=(null==e?void 0:e.authorizeUrl)||this.baseUrl+"oauth2/authorize",this.tokenUrl=(null==e?void 0:e.tokenUrl)||this.baseUrl+"oauth2/token",this.logoutUrl=(null==e?void 0:e.logoutUrl)||this.baseUrl+"oauth2/logout",this.onUnauthenticated=null==e?void 0:e.onUnauthenticated,this.loading=!1,this.refreshProfile().catch(console.log),this.setupStorageListener()}clear(){this.storage.clear(),this.resourceCache.clear(),this.dispatchEvent({type:"change"})}get(e){return this.request("GET",e)}post(e,t,r){return this.request("POST",e,r,t)}put(e,t,r){return this.request("PUT",e,r,t)}delete(e){return this.request("DELETE",e)}register(e){return t(this,void 0,void 0,(function*(){const t=yield this.post("auth/register",e);yield this.setActiveLogin(t)}))}startLogin(e,r,n){return t(this,void 0,void 0,(function*(){return yield this.startPkce(),this.post("auth/login",{clientId:this.clientId,scope:F,codeChallengeMethod:"S256",codeChallenge:this.storage.getString("codeChallenge"),email:e,password:r,remember:!!n})}))}startGoogleLogin(e){return t(this,void 0,void 0,(function*(){return yield this.startPkce(),this.post("auth/google",e)}))}signOut(){return this.clear(),Promise.resolve()}signInWithRedirect(){const e=new URLSearchParams(window.location.search).get("code");return e?this.processCode(e):void this.requestAuthorization()}signOutWithRedirect(){window.location.assign(this.logoutUrl)}fhirUrl(...e){const t=[this.baseUrl,"fhir/R4"];return e.forEach((e=>t.push("/",encodeURIComponent(e)))),t.join("")}search(e){return this.get(this.fhirUrl(e.resourceType)+L(e))}searchValueSet(e,t){return this.get(this.fhirUrl("ValueSet","$expand")+`?url=${encodeURIComponent(e)}`+`&filter=${encodeURIComponent(t)}`)}getCached(e,t){const r=this.resourceCache.get(e+"/"+t);if(r&&!("then"in r))return r}getCachedReference(e){const t=this.resourceCache.get(e.reference);if(t&&!("then"in t))return t}read(e,t){const r=e+"/"+t,n=this.get(this.fhirUrl(e,t)).then((e=>(this.resourceCache.set(r,e),e)));return this.resourceCache.set(r,n),n}readCached(e,t){const r=this.resourceCache.get(e+"/"+t);return r?Promise.resolve(r):this.read(e,t)}readReference(e){const t=null==e?void 0:e.reference;if(!t)return Promise.reject("Missing reference");const[r,n]=t.split("/");return this.read(r,n)}readCachedReference(e){const t=null==e?void 0:e.reference;if(!t)return Promise.reject("Missing reference");const[r,n]=t.split("/");return this.readCached(r,n)}getSchema(){return this.schema}requestSchema(e){return t(this,void 0,void 0,(function*(){if(e in this.schema.types)return Promise.resolve(this.schema);const t=`{\n StructureDefinitionList(name: "${encodeURIComponent(e)}") {\n name,\n description,\n snapshot {\n element {\n id,\n path,\n min,\n max,\n type {\n code,\n targetProfile\n },\n binding {\n valueSet\n },\n definition\n }\n }\n }\n SearchParameterList(base: "${encodeURIComponent(e)}") {\n base,\n code,\n type\n }\n }`.replace(/\s+/g," "),r=yield this.graphql(t);for(const e of r.data.StructureDefinitionList)M(this.schema,e);for(const e of r.data.SearchParameterList)B(this.schema,e);return this.schema}))}readHistory(e,t){return this.get(this.fhirUrl(e,t,"_history"))}readPatientEverything(e){return this.get(this.fhirUrl("Patient",e,"$everything"))}create(e){if(!e.resourceType)throw new Error("Missing resourceType");return this.post(this.fhirUrl(e.resourceType),e)}createBinary(e,t,r){return this.post(this.fhirUrl("Binary")+"?_filename="+encodeURIComponent(t),e,r)}update(e){if(!e.resourceType)throw new Error("Missing resourceType");if(!e.id)throw new Error("Missing id");return this.put(this.fhirUrl(e.resourceType,e.id),e)}patch(e,t,r){return this.request("PATCH",this.fhirUrl(e,t),"application/json-patch+json",r)}deleteResource(e,t){return this.delete(this.fhirUrl(e,t))}graphql(e){return this.post(this.fhirUrl("$graphql"),{query:e},"application/json")}getActiveLogin(){return this.storage.getObject("activeLogin")}setActiveLogin(e){return t(this,void 0,void 0,(function*(){this.storage.setObject("activeLogin",e),this.addLogin(e),this.resourceCache.clear(),this.refreshPromise=void 0,yield this.refreshProfile()}))}getLogins(){var e;return null!==(e=this.storage.getObject("logins"))&&void 0!==e?e:[]}addLogin(e){const t=this.getLogins().filter((t=>{var r,n;return(null===(r=t.profile)||void 0===r?void 0:r.reference)!==(null===(n=e.profile)||void 0===n?void 0:n.reference)}));t.push(e),this.storage.setObject("logins",t)}refreshProfile(){var e;return t(this,void 0,void 0,(function*(){const t=null===(e=this.getActiveLogin())||void 0===e?void 0:e.profile;return(null==t?void 0:t.reference)&&(this.loading=!0,this.storage.setObject("profile",yield this.readCachedReference(t)),this.loading=!1,this.dispatchEvent({type:"change"})),this.getProfile()}))}getProfile(){return this.storage.getObject("profile")}isLoading(){return this.loading}request(e,r,n,i){var o;return t(this,void 0,void 0,(function*(){this.refreshPromise&&(yield this.refreshPromise),r.startsWith("http")||(r=this.baseUrl+r);const t={"Content-Type":n||"application/fhir+json"},s=null===(o=this.getActiveLogin())||void 0===o?void 0:o.accessToken;s&&(t.Authorization="Bearer "+s);const c={method:e,cache:"no-cache",credentials:"include",headers:t};i&&("string"==typeof i||"undefined"!=typeof File&&i instanceof File?c.body=i:c.body=a(i));const u=yield this.fetch(r,c);if(401===u.status)return this.handleUnauthenticated(e,r,n,i);if(204===u.status||304===u.status)return;const h=yield u.json();return"OperationOutcome"!==h.resourceType||b(h)?h:Promise.reject(h)}))}handleUnauthenticated(e,r,n,i){return t(this,void 0,void 0,(function*(){return this.refresh().then((()=>this.request(e,r,n,i))).catch((e=>(this.clear(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(e))))}))}startPkce(){return t(this,void 0,void 0,(function*(){const e=f();this.storage.setString("pkceState",e);const r=f();this.storage.setString("codeVerifier",r);const n=d(yield function(e){return t(this,void 0,void 0,(function*(){return crypto.subtle.digest("SHA-256",(new TextEncoder).encode(e))}))}(r)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");this.storage.setString("codeChallenge",n)}))}requestAuthorization(){return t(this,void 0,void 0,(function*(){if(!this.authorizeUrl)throw new Error("Missing authorize URL");this.startPkce(),window.location.assign(this.authorizeUrl+"?response_type=code&state="+encodeURIComponent(this.storage.getString("pkceState"))+"&client_id="+encodeURIComponent(this.clientId)+"&redirect_uri="+encodeURIComponent(H())+"&scope="+encodeURIComponent(F)+"&code_challenge_method=S256&code_challenge="+encodeURIComponent(this.storage.getString("codeChallenge")))}))}processCode(e){if(!this.storage.getString("pkceState"))throw this.clear(),new Error("Invalid PCKE state");const t=this.storage.getString("codeVerifier");if(!t)throw this.clear(),new Error("Invalid PCKE code verifier");return this.fetchTokens("grant_type=authorization_code"+(this.clientId?"&client_id="+encodeURIComponent(this.clientId):"")+"&code_verifier="+encodeURIComponent(t)+"&redirect_uri="+encodeURIComponent(H())+"&code="+encodeURIComponent(e))}refresh(){var e;return t(this,void 0,void 0,(function*(){if(this.refreshPromise)return this.refreshPromise;const t=null===(e=this.getActiveLogin())||void 0===e?void 0:e.refreshToken;if(!t)return this.clear(),Promise.reject("Invalid refresh token");this.refreshPromise=this.fetchTokens("grant_type=refresh_token&client_id="+encodeURIComponent(this.clientId)+"&refresh_token="+encodeURIComponent(t)),yield this.refreshPromise}))}fetchTokens(e){return t(this,void 0,void 0,(function*(){return this.tokenUrl?this.fetch(this.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:e}).then((e=>e.ok?e.json():Promise.reject("Failed to fetch tokens"))).then((e=>this.verifyTokens(e))).then((()=>this.getProfile())):Promise.reject("Missing token URL")}))}verifyTokens(e){return t(this,void 0,void 0,(function*(){const t=e.access_token,r=g(t);return Date.now()>=1e3*r.exp?(this.clear(),Promise.reject("Token expired")):this.clientId&&r.client_id!==this.clientId?(this.clear(),Promise.reject("Token was not issued for this audience")):void(yield this.setActiveLogin({accessToken:t,refreshToken:e.refresh_token,project:e.project,profile:e.profile}))}))}setupStorageListener(){try{window.addEventListener("storage",(e=>{null!==e.key&&"activeLogin"!==e.key||window.location.reload()}))}catch(e){}}},e.OperationOutcomeError=w,e.accessDenied=C,e.allOk=O,e.arrayBufferToBase64=d,e.arrayBufferToHex=l,e.assertOk=function(e,t){if(!b(e)||void 0===t)throw new w(e)},e.badRequest=function(e,t){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:e},expression:t?[t]:void 0}]}},e.buildTypeName=q,e.capitalize=p,e.createReference=function(e){const t=i(e),r=s(e);return r===t?{reference:t}:{reference:t,display:r}},e.createSchema=D,e.created=P,e.deepEquals=function e(t,r,n){let i=Object.keys(t),o=Object.keys(r);if("meta"===n&&(i=i.filter((e=>"versionId"!==e&&"lastUpdated"!==e&&"author"!==e)),o=o.filter((e=>"versionId"!==e&&"lastUpdated"!==e&&"author"!==e))),i.length!==o.length)return!1;for(const n of i){const i=t[n],o=r[n];if(u(i)&&u(o)){if(!e(i,o,n))return!1}else if(i!==o)return!1}return!0},e.formatAddress=function(e,t){const r=[];return e.line&&r.push(...e.line),e.city&&r.push(e.city),e.state&&r.push(e.state),e.postalCode&&r.push(e.postalCode),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&r.push("["+e.use+"]"),r.join(", ").trim()},e.formatFamilyName=function(e){return e.family||""},e.formatGivenName=function(e){const t=[];return e.given&&t.push(...e.given),t.join(" ").trim()},e.formatHumanName=n,e.formatSearchQuery=L,e.getDateProperty=function(e){return e?new Date(e):void 0},e.getDisplayString=s,e.getExpressionForResourceType=Q,e.getImageSrc=function(e){if(o(e)){const t=e.photo;if(t)for(const e of t)if(e.url&&e.contentType&&e.contentType.startsWith("image/"))return e.url}},e.getPropertyDisplayName=function(e){return e.path.replaceAll("[x]","").split(".").pop().split(/(?=[A-Z])/).map(p).join(" ").replace("_"," ").replace(/\s+/g," ")},e.getReferenceString=i,e.getSearchParameterDetails=function(t,r,n){var i,o,s,a;const c=n.code.split("-").reduce(((e,t,r)=>e+(r?p(t):t)),""),u=null===(i=Q(r,n.expression))||void 0===i?void 0:i.split(".");if(!u)return{columnName:c,type:e.SearchParameterType.TEXT};let h,l=r,d=!1;for(let r=1;r<u.length;r++){const n=u[r],i=null===(s=null===(o=t.types[l])||void 0===o?void 0:o.properties)||void 0===s?void 0:s[n];if(!i)return{columnName:c,type:e.SearchParameterType.TEXT,array:d};if("*"===i.max&&(d=!0),h=null===(a=i.type)||void 0===a?void 0:a[0].code,!h)return{columnName:c,type:e.SearchParameterType.TEXT,array:d};r<u.length-1&&("Element"===h||"BackboneElement"===h?l+=p(n):l=h)}const f=function(t,r){let n=e.SearchParameterType.TEXT;switch(t.type){case"date":n=e.SearchParameterType.DATE;break;case"number":n=e.SearchParameterType.NUMBER;break;case"quantity":n=e.SearchParameterType.QUANTITY;break;case"reference":n=e.SearchParameterType.REFERENCE;break;case"token":"boolean"===r&&(n=e.SearchParameterType.BOOLEAN)}return n}(n,h);return{columnName:c,type:f,array:d}},e.getStatus=function(e){return e.id===m?200:e.id===v?201:e.id===T?304:e.id===S?403:e.id===E?404:e.id===y?410:400},e.gone=A,e.indexSearchParameter=B,e.indexStructureDefinition=M,e.isGone=function(e){return e.id===y},e.isLowerCase=function(e){return e===e.toLowerCase()},e.isNotFound=function(e){return e.id===E},e.isOk=b,e.isProfileResource=o,e.notFound=R,e.notModified=U,e.parseSearchDefinition=function(t){const r=t.pathname.split("/").pop(),n=new URLSearchParams(t.search),i=[],o=[];let s,a=0,c=10;return n.forEach(((t,r)=>{"_fields"===r?s=t.split(","):"_page"===r?a=parseInt(t):"_count"===r?c=parseInt(t):"_sort"===r?o.push(function(e){return e.startsWith("-")?{code:e.substring(1),descending:!0}:{code:e}}(t)):i.push(function(t,r){let n=t,i=e.Operator.EQUALS;for(const e of _){const t=n.indexOf(":"+e);-1!==t&&(i=e,n=n.substring(0,t))}for(const e of k)r.match(new RegExp("^"+e+"\\d"))&&(i=e,r=r.substring(e.length));return{code:n,operator:i,value:r}}(r,t))})),{resourceType:r,filters:i,fields:s,page:a,count:c,sortRules:o}},e.stringify=a,Object.defineProperty(e,"__esModule",{value:!0})}));
***************************************************************************** */function t(e,t,i,n){return new(i||(i=Promise))((function(r,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))}function i(e,t,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(e):n?n.value:t.get(e)}function n(e,t,i,n,r){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?r.call(e,i):r?r.value=i:t.set(e,i),i}var r,o,s,a;class c{constructor(e=10){r.add(this),o.set(this,void 0),s.set(this,void 0),n(this,o,e,"f"),n(this,s,new Map,"f")}clear(){i(this,s,"f").clear()}get(e){const t=i(this,s,"f").get(e);return t&&(i(this,s,"f").delete(e),i(this,s,"f").set(e,t)),t}set(e,t){i(this,s,"f").has(e)?i(this,s,"f").delete(e):i(this,s,"f").size>=i(this,o,"f")&&i(this,s,"f").delete(i(this,r,"m",a).call(this)),i(this,s,"f").set(e,t)}}function h(e,t){const i=[];return e.prefix&&((null==t?void 0:t.all)||(null==t?void 0:t.prefix))&&i.push(...e.prefix),e.given&&i.push(...e.given),e.family&&i.push(e.family),e.suffix&&((null==t?void 0:t.all)||(null==t?void 0:t.suffix))&&i.push(...e.suffix),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&i.push("["+e.use+"]"),i.join(" ").trim()}function u(e){return e.resourceType+"/"+e.id}function l(e){return"Patient"===e.resourceType||"Practitioner"===e.resourceType||"RelatedPerson"===e.resourceType}function d(e){if(l(e)){const t=function(e){const t=e.name;if(t&&t.length>0)return h(t[0]);return}(e);if(t)return t}if("Device"===e.resourceType){const t=function(e){const t=e.deviceName;if(t&&t.length>0)return t[0].name;return}(e);if(t)return t}return"User"===e.resourceType&&e.email?e.email:"name"in e&&e.name&&"string"==typeof e.name?e.name:u(e)}function f(e,t){return JSON.stringify(e,p,t?2:void 0)}function p(e,t){return function(e){if(null==e)return!0;const t=typeof e;return"string"===t&&""===e||"object"===t&&0===Object.keys(e).length}(t)?void 0:t}function m(e){return null!==e&&"object"==typeof e}o=new WeakMap,s=new WeakMap,r=new WeakSet,a=function(){return i(this,s,"f").keys().next().value};const g=[];for(let e=0;e<256;e++)g.push(e.toString(16).padStart(2,"0"));function v(e){const t=new Uint8Array(e),i=new Array(t.length);for(let e=0;e<t.length;e++)i[e]=g[t[e]];return i.join("")}function y(e){const t=new Uint8Array(e),i=[];for(let e=0;e<t.length;e++)i[e]=String.fromCharCode(t[e]);return window.btoa(i.join(""))}function T(e){return e.charAt(0).toUpperCase()+e.substr(1)}function E(){const e=new Uint32Array(28);return crypto.getRandomValues(e),v(e.buffer)}var w;function S(e){const[t,i,n]=e.split(".");return function(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),i=window.atob(t),n=Array.from(i).reduce(((e,t)=>`${e}%${("00"+t.charCodeAt(0).toString(16)).slice(-2)}`),""),r=decodeURIComponent(n);return JSON.parse(r)}(i)}w=new WeakMap;const O="ok",R="created",P="gone",A="not-modified",C="not-found",b="access-denied",U={resourceType:"OperationOutcome",id:O,issue:[{severity:"information",code:"information",details:{text:"All OK"}}]},k={resourceType:"OperationOutcome",id:R,issue:[{severity:"information",code:"information",details:{text:"Created"}}]},_={resourceType:"OperationOutcome",id:A,issue:[{severity:"information",code:"information",details:{text:"Not Modified"}}]},I={resourceType:"OperationOutcome",id:C,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},N={resourceType:"OperationOutcome",id:P,issue:[{severity:"error",code:"gone",details:{text:"Gone"}}]},L={resourceType:"OperationOutcome",id:b,issue:[{severity:"error",code:"access-denied",details:{text:"Access Denied"}}]};function x(e){return e.id===O||e.id===R||e.id===A}class M extends Error{constructor(e){var t,i;super(null===(i=null===(t=null==e?void 0:e.issue)||void 0===t?void 0:t[0].details)||void 0===i?void 0:i.text),this.outcome=e}}var j;e.Operator=void 0,(j=e.Operator||(e.Operator={})).EQUALS="eq",j.NOT_EQUALS="ne",j.GREATER_THAN="gt",j.LESS_THAN="lt",j.GREATER_THAN_OR_EQUALS="ge",j.LESS_THAN_OR_EQUALS="le",j.STARTS_AFTER="sa",j.ENDS_BEFORE="eb",j.APPROXIMATELY="ap",j.CONTAINS="contains",j.EXACT="exact",j.TEXT="text",j.ABOVE="above",j.BELOW="below",j.IN="in",j.NOT_IN="not-in",j.OF_TYPE="of-type";const D=[e.Operator.CONTAINS,e.Operator.EXACT,e.Operator.TEXT,e.Operator.ABOVE,e.Operator.BELOW,e.Operator.IN,e.Operator.NOT_IN,e.Operator.OF_TYPE],W=[e.Operator.NOT_EQUALS,e.Operator.GREATER_THAN,e.Operator.LESS_THAN,e.Operator.GREATER_THAN_OR_EQUALS,e.Operator.LESS_THAN_OR_EQUALS,e.Operator.STARTS_AFTER,e.Operator.ENDS_BEFORE,e.Operator.APPROXIMATELY];function B(e){const t=[];return e.fields&&t.push("_fields="+e.fields.join(",")),e.filters&&e.filters.forEach((e=>{const i=D.includes(e.operator)?":"+e.operator:"",n=W.includes(e.operator)?e.operator:"";t.push(`${e.code}${i}=${n}${encodeURIComponent(e.value)}`)})),e.sortRules&&t.push(function(e){if(!e||0===e.length)return"";return"_sort="+e.map((e=>e.descending?"-"+e.code:e.code)).join(",")}(e.sortRules)),e.page&&e.page>0&&t.push("_page="+e.page),e.count&&e.count>0&&t.push("_count="+e.count),e.total&&t.push("_total="+encodeURIComponent(e.total)),0===t.length?"":(t.sort(),"?"+t.join("&"))}var F,H,Q,$,X,q,G,z,V,Y,J,K,Z,ee,te,ie,ne,re,oe,se,ae,ce,he,ue,le,de,fe,pe,me,ge,ve;class ye{constructor(){F.set(this,void 0),n(this,F,"undefined"!=typeof localStorage?localStorage:new Te,"f")}clear(){i(this,F,"f").clear()}getString(e){return i(this,F,"f").getItem(e)||void 0}setString(e,t){t?i(this,F,"f").setItem(e,t):i(this,F,"f").removeItem(e)}getObject(e){const t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?f(t):void 0)}}F=new WeakMap;class Te{constructor(){H.set(this,void 0),n(this,H,new Map,"f")}get length(){return i(this,H,"f").size}clear(){i(this,H,"f").clear()}getItem(e){var t;return null!==(t=i(this,H,"f").get(e))&&void 0!==t?t:null}setItem(e,t){t?i(this,H,"f").set(e,t):i(this,H,"f").delete(e)}removeItem(e){i(this,H,"f").delete(e)}key(e){return Array.from(i(this,H,"f").keys())[e]}}function Ee(){return{types:{}}}function we(e,t){var i;const n=t.name;if(!n)return;e.types[n]={display:n,description:t.description,properties:{}};const r=null===(i=t.snapshot)||void 0===i?void 0:i.element;if(r){const t=r.filter((e=>e.path!==n&&e.path));t.forEach((t=>function(e,t){var i,n;const r=t.path,o=null===(n=null===(i=t.type)||void 0===i?void 0:i[0])||void 0===n?void 0:n.code;if("Element"!==o&&"BackboneElement"!==o)return;const s=r.split("."),a=Oe(s);a in e.types||(e.types[a]={display:a,description:t.definition,parentType:Oe(s.slice(0,s.length-1)),properties:{}})}(e,t))),t.forEach((t=>function(e,t){const i=t.path.split(".");if(1===i.length)return;const n=Oe(i.slice(0,i.length-1)),r=e.types[n],o=i[i.length-1];r.properties[o]=t}(e,t)))}}function Se(e,t){if(t.base)for(const i of t.base){const n=e.types[i];n&&(n.searchParams||(n.searchParams={}),n.searchParams[t.code]=t)}}function Oe(e){return e.map(T).join("")}H=new WeakMap,e.PropertyType=void 0,(Q=e.PropertyType||(e.PropertyType={})).Address="Address",Q.Age="Age",Q.Annotation="Annotation",Q.Attachment="Attachment",Q.BackboneElement="BackboneElement",Q.CodeableConcept="CodeableConcept",Q.Coding="Coding",Q.ContactDetail="ContactDetail",Q.ContactPoint="ContactPoint",Q.Contributor="Contributor",Q.Count="Count",Q.DataRequirement="DataRequirement",Q.Distance="Distance",Q.Dosage="Dosage",Q.Duration="Duration",Q.Expression="Expression",Q.Extension="Extension",Q.HumanName="HumanName",Q.Identifier="Identifier",Q.MarketingStatus="MarketingStatus",Q.Meta="Meta",Q.Money="Money",Q.Narrative="Narrative",Q.ParameterDefinition="ParameterDefinition",Q.Period="Period",Q.Population="Population",Q.ProdCharacteristic="ProdCharacteristic",Q.ProductShelfLife="ProductShelfLife",Q.Quantity="Quantity",Q.Range="Range",Q.Ratio="Ratio",Q.Reference="Reference",Q.RelatedArtifact="RelatedArtifact",Q.Resource="Resource",Q.SampledData="SampledData",Q.Signature="Signature",Q.SubstanceAmount="SubstanceAmount",Q.SystemString="http://hl7.org/fhirpath/System.String",Q.Timing="Timing",Q.TriggerDefinition="TriggerDefinition",Q.UsageContext="UsageContext",Q.base64Binary="base64Binary",Q.boolean="boolean",Q.canonical="canonical",Q.code="code",Q.date="date",Q.dateTime="dateTime",Q.decimal="decimal",Q.id="id",Q.instant="instant",Q.integer="integer",Q.markdown="markdown",Q.oid="oid",Q.positiveInt="positiveInt",Q.string="string",Q.time="time",Q.unsignedInt="unsignedInt",Q.uri="uri",Q.url="url",Q.uuid="uuid";const Re="launch/patient openid fhirUser offline_access user/*.*";function Pe(){return window.location.protocol+"//"+window.location.host+"/"}var Ae;function Ce(e,t){const i=t.split(" | ");for(const t of i){const i=be(t);if(i.startsWith(e+"."))return i}}function be(e){let t=e.trim();return t.startsWith("(")&&t.endsWith(")")&&(t=t.substring(1,t.length-1)),t.includes(" as ")&&(t=t.substring(0,t.indexOf(" as "))),t.includes(".where(")&&(t=t.substring(0,t.indexOf(".where("))),t}X=new WeakMap,q=new WeakMap,G=new WeakMap,z=new WeakMap,V=new WeakMap,Y=new WeakMap,J=new WeakMap,K=new WeakMap,Z=new WeakMap,ee=new WeakMap,te=new WeakMap,ie=new WeakMap,ne=new WeakMap,re=new WeakMap,oe=new WeakMap,se=new WeakMap,$=new WeakSet,ae=function(e){const t=this.getLogins().filter((t=>{var i,n;return(null===(i=t.profile)||void 0===i?void 0:i.reference)!==(null===(n=e.profile)||void 0===n?void 0:n.reference)}));t.push(e),i(this,q,"f").setObject("logins",t)},ce=function(){return t(this,void 0,void 0,(function*(){return n(this,re,new Promise(((e,t)=>{this.get("auth/me").then((t=>{n(this,re,void 0,"f"),n(this,oe,t.profile,"f"),n(this,se,t.config,"f"),this.dispatchEvent({type:"change"}),e(i(this,oe,"f"))})).catch(t)})),"f"),i(this,re,"f")}))},he=function(e,n,r,o){return t(this,void 0,void 0,(function*(){i(this,ne,"f")&&(yield i(this,ne,"f")),n.startsWith("http")||(n=i(this,V,"f")+n);const t=i(this,$,"m",ue).call(this,e,r,o),s=yield i(this,X,"f").call(this,n,t);if(401===s.status)return i(this,$,"m",le).call(this,e,n,r,o);if(204===s.status||304===s.status)return;const a=yield s.json();return"OperationOutcome"!==a.resourceType||x(a)?a:Promise.reject(a)}))},ue=function(e,t,n){const r={"Content-Type":t||"application/fhir+json"};i(this,te,"f")&&(r.Authorization="Bearer "+i(this,te,"f"));const o={method:e,cache:"no-cache",credentials:"include",headers:r};return n&&("string"==typeof n||"undefined"!=typeof File&&n instanceof File?o.body=n:o.body=f(n)),o},le=function(e,n,r,o){return t(this,void 0,void 0,(function*(){return i(this,$,"m",pe).call(this).then((()=>i(this,$,"m",he).call(this,e,n,r,o))).catch((e=>(this.clear(),i(this,ee,"f")&&i(this,ee,"f").call(this),Promise.reject(e))))}))},de=function(){return t(this,void 0,void 0,(function*(){const e=E();i(this,q,"f").setString("pkceState",e);const n=E();i(this,q,"f").setString("codeVerifier",n);const r=y(yield function(e){return t(this,void 0,void 0,(function*(){return crypto.subtle.digest("SHA-256",(new TextEncoder).encode(e))}))}(n)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");i(this,q,"f").setString("codeChallenge",r)}))},fe=function(){return t(this,void 0,void 0,(function*(){if(!i(this,J,"f"))throw new Error("Missing authorize URL");i(this,$,"m",de).call(this),window.location.assign(i(this,J,"f")+"?response_type=code&state="+encodeURIComponent(i(this,q,"f").getString("pkceState"))+"&client_id="+encodeURIComponent(i(this,Y,"f"))+"&redirect_uri="+encodeURIComponent(Pe())+"&scope="+encodeURIComponent(Re)+"&code_challenge_method=S256&code_challenge="+encodeURIComponent(i(this,q,"f").getString("codeChallenge")))}))},pe=function(){return t(this,void 0,void 0,(function*(){return i(this,ne,"f")?i(this,ne,"f"):i(this,ie,"f")?(n(this,ne,i(this,$,"m",me).call(this,"grant_type=refresh_token&client_id="+encodeURIComponent(i(this,Y,"f"))+"&refresh_token="+encodeURIComponent(i(this,ie,"f"))),"f"),void(yield i(this,ne,"f"))):(this.clear(),Promise.reject("Invalid refresh token"))}))},me=function(e){return t(this,void 0,void 0,(function*(){return i(this,K,"f")?i(this,X,"f").call(this,i(this,K,"f"),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:e}).then((e=>e.ok?e.json():Promise.reject("Failed to fetch tokens"))).then((e=>i(this,$,"m",ge).call(this,e))).then((()=>this.getProfile())):Promise.reject("Missing token URL")}))},ge=function(e){return t(this,void 0,void 0,(function*(){const t=e.access_token,n=S(t);return Date.now()>=1e3*n.exp?(this.clear(),Promise.reject("Token expired")):i(this,Y,"f")&&n.client_id!==i(this,Y,"f")?(this.clear(),Promise.reject("Token was not issued for this audience")):void(yield this.setActiveLogin({accessToken:t,refreshToken:e.refresh_token,project:e.project,profile:e.profile}))}))},ve=function(){try{window.addEventListener("storage",(e=>{null!==e.key&&"activeLogin"!==e.key||window.location.reload()}))}catch(e){}},e.SearchParameterType=void 0,(Ae=e.SearchParameterType||(e.SearchParameterType={})).BOOLEAN="BOOLEAN",Ae.NUMBER="NUMBER",Ae.QUANTITY="QUANTITY",Ae.TEXT="TEXT",Ae.REFERENCE="REFERENCE",Ae.DATE="DATE",Ae.DATETIME="DATETIME",Ae.PERIOD="PERIOD",e.MedplumClient=class extends class{constructor(){w.set(this,void 0),n(this,w,{},"f")}addEventListener(e,t){i(this,w,"f")[e]||(i(this,w,"f")[e]=[]),i(this,w,"f")[e].push(t)}removeEventListeneer(e,t){const n=i(this,w,"f")[e];if(n)for(let e=0;e<n.length;e++)if(n[e]===t)return void n.splice(e,1)}dispatchEvent(e){const t=i(this,w,"f")[e.type];return t&&t.forEach((t=>t.call(this,e))),!e.defaultPrevented}}{constructor(e){var t;if(super(),$.add(this),X.set(this,void 0),q.set(this,void 0),G.set(this,void 0),z.set(this,void 0),V.set(this,void 0),Y.set(this,void 0),J.set(this,void 0),K.set(this,void 0),Z.set(this,void 0),ee.set(this,void 0),te.set(this,void 0),ie.set(this,void 0),ne.set(this,void 0),re.set(this,void 0),oe.set(this,void 0),se.set(this,void 0),null==e?void 0:e.baseUrl){if(!e.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");if(!e.baseUrl.endsWith("/"))throw new Error("Base URL must end with a trailing slash")}n(this,X,(null==e?void 0:e.fetch)||window.fetch.bind(window),"f"),n(this,q,new ye,"f"),n(this,G,{types:{}},"f"),n(this,z,new c(null!==(t=null==e?void 0:e.resourceCacheSize)&&void 0!==t?t:1e3),"f"),n(this,V,(null==e?void 0:e.baseUrl)||"https://api.medplum.com/","f"),n(this,Y,(null==e?void 0:e.clientId)||"","f"),n(this,J,(null==e?void 0:e.authorizeUrl)||i(this,V,"f")+"oauth2/authorize","f"),n(this,K,(null==e?void 0:e.tokenUrl)||i(this,V,"f")+"oauth2/token","f"),n(this,Z,(null==e?void 0:e.logoutUrl)||i(this,V,"f")+"oauth2/logout","f"),n(this,ee,null==e?void 0:e.onUnauthenticated,"f");const r=this.getActiveLogin();r&&(n(this,te,r.accessToken,"f"),n(this,ie,r.refreshToken,"f"),i(this,$,"m",ce).call(this).catch(console.log)),i(this,$,"m",ve).call(this)}clear(){i(this,q,"f").clear(),i(this,z,"f").clear(),n(this,te,void 0,"f"),n(this,ie,void 0,"f"),n(this,oe,void 0,"f"),n(this,se,void 0,"f"),this.dispatchEvent({type:"change"})}get(e){return i(this,$,"m",he).call(this,"GET",e)}post(e,t,n){return i(this,$,"m",he).call(this,"POST",e,n,t)}put(e,t,n){return i(this,$,"m",he).call(this,"PUT",e,n,t)}delete(e){return i(this,$,"m",he).call(this,"DELETE",e)}register(e){return t(this,void 0,void 0,(function*(){const t=yield this.post("auth/register",e);yield this.setActiveLogin(t)}))}startLogin(e,n,r){return t(this,void 0,void 0,(function*(){return yield i(this,$,"m",de).call(this),this.post("auth/login",{clientId:i(this,Y,"f"),scope:Re,codeChallengeMethod:"S256",codeChallenge:i(this,q,"f").getString("codeChallenge"),email:e,password:n,remember:!!r})}))}startGoogleLogin(e){return t(this,void 0,void 0,(function*(){return yield i(this,$,"m",de).call(this),this.post("auth/google",e)}))}signOut(){return this.clear(),Promise.resolve()}signInWithRedirect(){const e=new URLSearchParams(window.location.search).get("code");return e?this.processCode(e):void i(this,$,"m",fe).call(this)}signOutWithRedirect(){window.location.assign(i(this,Z,"f"))}fhirUrl(...e){const t=[i(this,V,"f"),"fhir/R4"];return e.forEach((e=>t.push("/",encodeURIComponent(e)))),t.join("")}search(e){return this.get(this.fhirUrl(e.resourceType)+B(e))}searchValueSet(e,t){return this.get(this.fhirUrl("ValueSet","$expand")+`?url=${encodeURIComponent(e)}`+`&filter=${encodeURIComponent(t)}`)}getCached(e,t){const n=i(this,z,"f").get(e+"/"+t);if(n&&!("then"in n))return n}getCachedReference(e){const t=i(this,z,"f").get(e.reference);if(t&&!("then"in t))return t}read(e,t){const n=e+"/"+t,r=this.get(this.fhirUrl(e,t)).then((e=>(i(this,z,"f").set(n,e),e)));return i(this,z,"f").set(n,r),r}readCached(e,t){const n=i(this,z,"f").get(e+"/"+t);return n?Promise.resolve(n):this.read(e,t)}readReference(e){const t=null==e?void 0:e.reference;if(!t)return Promise.reject("Missing reference");const[i,n]=t.split("/");return this.read(i,n)}readCachedReference(e){const t=null==e?void 0:e.reference;if(!t)return Promise.reject("Missing reference");const[i,n]=t.split("/");return this.readCached(i,n)}getSchema(){return i(this,G,"f")}requestSchema(e){return t(this,void 0,void 0,(function*(){if(e in i(this,G,"f").types)return Promise.resolve(i(this,G,"f"));const t=`{\n StructureDefinitionList(name: "${encodeURIComponent(e)}") {\n name,\n description,\n snapshot {\n element {\n id,\n path,\n min,\n max,\n type {\n code,\n targetProfile\n },\n binding {\n valueSet\n },\n definition\n }\n }\n }\n SearchParameterList(base: "${encodeURIComponent(e)}") {\n base,\n code,\n type\n }\n }`.replace(/\s+/g," "),n=yield this.graphql(t);for(const e of n.data.StructureDefinitionList)we(i(this,G,"f"),e);for(const e of n.data.SearchParameterList)Se(i(this,G,"f"),e);return i(this,G,"f")}))}readHistory(e,t){return this.get(this.fhirUrl(e,t,"_history"))}readPatientEverything(e){return this.get(this.fhirUrl("Patient",e,"$everything"))}create(e){if(!e.resourceType)throw new Error("Missing resourceType");return this.post(this.fhirUrl(e.resourceType),e)}createBinary(e,t,i){return this.post(this.fhirUrl("Binary")+"?_filename="+encodeURIComponent(t),e,i)}update(e){if(!e.resourceType)throw new Error("Missing resourceType");if(!e.id)throw new Error("Missing id");return this.put(this.fhirUrl(e.resourceType,e.id),e)}patch(e,t,n){return i(this,$,"m",he).call(this,"PATCH",this.fhirUrl(e,t),"application/json-patch+json",n)}deleteResource(e,t){return this.delete(this.fhirUrl(e,t))}graphql(e){return this.post(this.fhirUrl("$graphql"),{query:e},"application/json")}getActiveLogin(){return i(this,q,"f").getObject("activeLogin")}setActiveLogin(e){return t(this,void 0,void 0,(function*(){n(this,te,e.accessToken,"f"),n(this,ie,e.refreshToken,"f"),n(this,oe,void 0,"f"),n(this,se,void 0,"f"),i(this,q,"f").setObject("activeLogin",e),i(this,$,"m",ae).call(this,e),i(this,z,"f").clear(),n(this,ne,void 0,"f"),yield i(this,$,"m",ce).call(this)}))}getLogins(){var e;return null!==(e=i(this,q,"f").getObject("logins"))&&void 0!==e?e:[]}isLoading(){return!!i(this,re,"f")}getProfile(){return i(this,oe,"f")}getProfileAsync(){return t(this,void 0,void 0,(function*(){return i(this,re,"f")&&(yield i(this,re,"f")),this.getProfile()}))}getUserConfiguration(){return i(this,se,"f")}download(e){return t(this,void 0,void 0,(function*(){i(this,ne,"f")&&(yield i(this,ne,"f"));const t=i(this,$,"m",ue).call(this,"GET");return(yield i(this,X,"f").call(this,e,t)).blob()}))}processCode(e){if(!i(this,q,"f").getString("pkceState"))throw this.clear(),new Error("Invalid PCKE state");const t=i(this,q,"f").getString("codeVerifier");if(!t)throw this.clear(),new Error("Invalid PCKE code verifier");return i(this,$,"m",me).call(this,"grant_type=authorization_code"+(i(this,Y,"f")?"&client_id="+encodeURIComponent(i(this,Y,"f")):"")+"&code_verifier="+encodeURIComponent(t)+"&redirect_uri="+encodeURIComponent(Pe())+"&code="+encodeURIComponent(e))}},e.OperationOutcomeError=M,e.accessDenied=L,e.allOk=U,e.arrayBufferToBase64=y,e.arrayBufferToHex=v,e.assertOk=function(e,t){if(!x(e)||void 0===t)throw new M(e)},e.badRequest=function(e,t){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:e},expression:t?[t]:void 0}]}},e.buildTypeName=Oe,e.capitalize=T,e.createReference=function(e){const t=u(e),i=d(e);return i===t?{reference:t}:{reference:t,display:i}},e.createSchema=Ee,e.created=k,e.deepEquals=function e(t,i,n){let r=Object.keys(t),o=Object.keys(i);if("meta"===n&&(r=r.filter((e=>"versionId"!==e&&"lastUpdated"!==e&&"author"!==e)),o=o.filter((e=>"versionId"!==e&&"lastUpdated"!==e&&"author"!==e))),r.length!==o.length)return!1;for(const n of r){const r=t[n],o=i[n];if(m(r)&&m(o)){if(!e(r,o,n))return!1}else if(r!==o)return!1}return!0},e.formatAddress=function(e,t){const i=[];return e.line&&i.push(...e.line),e.city&&i.push(e.city),e.state&&i.push(e.state),e.postalCode&&i.push(e.postalCode),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&i.push("["+e.use+"]"),i.join(", ").trim()},e.formatFamilyName=function(e){return e.family||""},e.formatGivenName=function(e){const t=[];return e.given&&t.push(...e.given),t.join(" ").trim()},e.formatHumanName=h,e.formatSearchQuery=B,e.getDateProperty=function(e){return e?new Date(e):void 0},e.getDisplayString=d,e.getExpressionForResourceType=Ce,e.getImageSrc=function(e){if(l(e)){const t=e.photo;if(t)for(const e of t)if(e.url&&e.contentType&&e.contentType.startsWith("image/"))return e.url}},e.getPropertyDisplayName=function(e){return e.path.replaceAll("[x]","").split(".").pop().split(/(?=[A-Z])/).map(T).join(" ").replace("_"," ").replace(/\s+/g," ")},e.getReferenceString=u,e.getSearchParameterDetails=function(t,i,n){var r,o,s,a;const c=n.code.split("-").reduce(((e,t,i)=>e+(i?T(t):t)),""),h=null===(r=Ce(i,n.expression))||void 0===r?void 0:r.split(".");if(!h)return{columnName:c,type:e.SearchParameterType.TEXT};let u,l=i,d=!1;for(let i=1;i<h.length;i++){const n=h[i],r=null===(s=null===(o=t.types[l])||void 0===o?void 0:o.properties)||void 0===s?void 0:s[n];if(!r)return{columnName:c,type:e.SearchParameterType.TEXT,array:d};if("*"===r.max&&(d=!0),u=null===(a=r.type)||void 0===a?void 0:a[0].code,!u)return{columnName:c,type:e.SearchParameterType.TEXT,array:d};i<h.length-1&&("Element"===u||"BackboneElement"===u?l+=T(n):l=u)}const f=function(t,i){let n=e.SearchParameterType.TEXT;switch(t.type){case"date":n=e.SearchParameterType.DATE;break;case"number":n=e.SearchParameterType.NUMBER;break;case"quantity":n=e.SearchParameterType.QUANTITY;break;case"reference":n=e.SearchParameterType.REFERENCE;break;case"token":"boolean"===i&&(n=e.SearchParameterType.BOOLEAN)}return n}(n,u);return{columnName:c,type:f,array:d}},e.getStatus=function(e){return e.id===O?200:e.id===R?201:e.id===A?304:e.id===b?403:e.id===C?404:e.id===P?410:400},e.gone=N,e.indexSearchParameter=Se,e.indexStructureDefinition=we,e.isGone=function(e){return e.id===P},e.isLowerCase=function(e){return e===e.toLowerCase()},e.isNotFound=function(e){return e.id===C},e.isOk=x,e.isProfileResource=l,e.notFound=I,e.notModified=_,e.parseSearchDefinition=function(t){const i=t.pathname.split("/").pop(),n=new URLSearchParams(t.search),r=[],o=[];let s,a,c=0,h=10;return n.forEach(((t,i)=>{"_fields"===i?s=t.split(","):"_page"===i?c=parseInt(t):"_count"===i?h=parseInt(t):"_total"===i?a=t:"_sort"===i?o.push(function(e){return e.startsWith("-")?{code:e.substring(1),descending:!0}:{code:e}}(t)):r.push(function(t,i){let n=t,r=e.Operator.EQUALS;for(const e of D){const t=n.indexOf(":"+e);-1!==t&&(r=e,n=n.substring(0,t))}for(const e of W)i.match(new RegExp("^"+e+"\\d"))&&(r=e,i=i.substring(e.length));return{code:n,operator:r,value:i}}(i,t))})),{resourceType:i,filters:r,fields:s,page:c,count:h,total:a,sortRules:o}},e.resolveId=function(e){var t;return null===(t=null==e?void 0:e.reference)||void 0===t?void 0:t.split("/")[1]},e.stringify=f,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=index.min.js.map

@@ -15,3 +15,3 @@ /*! *****************************************************************************

***************************************************************************** */
function e(e,t,n,i){return new(n||(n=Promise))((function(r,o){function s(e){try{a(i.next(e))}catch(e){o(e)}}function c(e){try{a(i.throw(e))}catch(e){o(e)}}function a(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,c)}a((i=i.apply(e,t||[])).next())}))}class t{constructor(e=10){this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){const t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}}function n(e,t){const n=[];return e.line&&n.push(...e.line),e.city&&n.push(e.city),e.state&&n.push(e.state),e.postalCode&&n.push(e.postalCode),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&n.push("["+e.use+"]"),n.join(", ").trim()}function i(e,t){const n=[];return e.prefix&&((null==t?void 0:t.all)||(null==t?void 0:t.prefix))&&n.push(...e.prefix),e.given&&n.push(...e.given),e.family&&n.push(e.family),e.suffix&&((null==t?void 0:t.all)||(null==t?void 0:t.suffix))&&n.push(...e.suffix),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&n.push("["+e.use+"]"),n.join(" ").trim()}function r(e){const t=[];return e.given&&t.push(...e.given),t.join(" ").trim()}function o(e){return e.family||""}function s(e){const t=c(e),n=u(e);return n===t?{reference:t}:{reference:t,display:n}}function c(e){return e.resourceType+"/"+e.id}function a(e){return"Patient"===e.resourceType||"Practitioner"===e.resourceType||"RelatedPerson"===e.resourceType}function u(e){if(a(e)){const t=function(e){const t=e.name;if(t&&t.length>0)return i(t[0]);return}(e);if(t)return t}if("Device"===e.resourceType){const t=function(e){const t=e.deviceName;if(t&&t.length>0)return t[0].name;return}(e);if(t)return t}return"User"===e.resourceType&&e.email?e.email:"name"in e&&e.name&&"string"==typeof e.name?e.name:c(e)}function h(e){if(a(e)){const t=e.photo;if(t)for(const e of t)if(e.url&&e.contentType&&e.contentType.startsWith("image/"))return e.url}}function l(e){return e?new Date(e):void 0}function d(e,t){return JSON.stringify(e,f,t?2:void 0)}function f(e,t){return function(e){if(null==e)return!0;const t=typeof e;return"string"===t&&""===e||"object"===t&&0===Object.keys(e).length}(t)?void 0:t}function p(e,t,n){let i=Object.keys(e),r=Object.keys(t);if("meta"===n&&(i=i.filter((e=>"versionId"!==e&&"lastUpdated"!==e&&"author"!==e)),r=r.filter((e=>"versionId"!==e&&"lastUpdated"!==e&&"author"!==e))),i.length!==r.length)return!1;for(const n of i){const i=e[n],r=t[n];if(g(i)&&g(r)){if(!p(i,r,n))return!1}else if(i!==r)return!1}return!0}function g(e){return null!==e&&"object"==typeof e}const m=[];for(let e=0;e<256;e++)m.push(e.toString(16).padStart(2,"0"));function v(e){const t=new Uint8Array(e),n=new Array(t.length);for(let e=0;e<t.length;e++)n[e]=m[t[e]];return n.join("")}function y(e){const t=new Uint8Array(e),n=[];for(let e=0;e<t.length;e++)n[e]=String.fromCharCode(t[e]);return window.btoa(n.join(""))}function E(e){return e.charAt(0).toUpperCase()+e.substr(1)}function T(e){return e===e.toLowerCase()}function U(){const e=new Uint32Array(28);return crypto.getRandomValues(e),v(e.buffer)}function R(e){const[t,n,i]=e.split(".");return function(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),n=window.atob(t),i=Array.from(n).reduce(((e,t)=>`${e}%${("00"+t.charCodeAt(0).toString(16)).slice(-2)}`),""),r=decodeURIComponent(i);return JSON.parse(r)}(n)}const A={resourceType:"OperationOutcome",id:"ok",issue:[{severity:"information",code:"information",details:{text:"All OK"}}]},S={resourceType:"OperationOutcome",id:"created",issue:[{severity:"information",code:"information",details:{text:"Created"}}]},C={resourceType:"OperationOutcome",id:"not-modified",issue:[{severity:"information",code:"information",details:{text:"Not Modified"}}]},w={resourceType:"OperationOutcome",id:"not-found",issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},P={resourceType:"OperationOutcome",id:"gone",issue:[{severity:"error",code:"gone",details:{text:"Gone"}}]},b={resourceType:"OperationOutcome",id:"access-denied",issue:[{severity:"error",code:"access-denied",details:{text:"Access Denied"}}]};function O(e,t){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:e},expression:t?[t]:void 0}]}}function I(e){return"ok"===e.id||"created"===e.id||"not-modified"===e.id}function _(e){return"not-found"===e.id}function k(e){return"gone"===e.id}function L(e){return"ok"===e.id?200:"created"===e.id?201:"not-modified"===e.id?304:"access-denied"===e.id?403:"not-found"===e.id?404:"gone"===e.id?410:400}function N(e,t){if(!I(e)||void 0===t)throw new x(e)}class x extends Error{constructor(e){var t,n;super(null===(n=null===(t=null==e?void 0:e.issue)||void 0===t?void 0:t[0].details)||void 0===n?void 0:n.text),this.outcome=e}}var j;!function(e){e.EQUALS="eq",e.NOT_EQUALS="ne",e.GREATER_THAN="gt",e.LESS_THAN="lt",e.GREATER_THAN_OR_EQUALS="ge",e.LESS_THAN_OR_EQUALS="le",e.STARTS_AFTER="sa",e.ENDS_BEFORE="eb",e.APPROXIMATELY="ap",e.CONTAINS="contains",e.EXACT="exact",e.TEXT="text",e.ABOVE="above",e.BELOW="below",e.IN="in",e.NOT_IN="not-in",e.OF_TYPE="of-type"}(j||(j={}));const D=[j.CONTAINS,j.EXACT,j.TEXT,j.ABOVE,j.BELOW,j.IN,j.NOT_IN,j.OF_TYPE],M=[j.NOT_EQUALS,j.GREATER_THAN,j.LESS_THAN,j.GREATER_THAN_OR_EQUALS,j.LESS_THAN_OR_EQUALS,j.STARTS_AFTER,j.ENDS_BEFORE,j.APPROXIMATELY];function B(e){const t=e.pathname.split("/").pop(),n=new URLSearchParams(e.search),i=[],r=[];let o,s=0,c=10;return n.forEach(((e,t)=>{"_fields"===t?o=e.split(","):"_page"===t?s=parseInt(e):"_count"===t?c=parseInt(e):"_sort"===t?r.push(function(e){return e.startsWith("-")?{code:e.substring(1),descending:!0}:{code:e}}(e)):i.push(function(e,t){let n=e,i=j.EQUALS;for(const e of D){const t=n.indexOf(":"+e);-1!==t&&(i=e,n=n.substring(0,t))}for(const e of M)t.match(new RegExp("^"+e+"\\d"))&&(i=e,t=t.substring(e.length));return{code:n,operator:i,value:t}}(t,e))})),{resourceType:t,filters:i,fields:o,page:s,count:c,sortRules:r}}function q(e){const t=[];return e.fields&&t.push("_fields="+e.fields.join(",")),e.filters&&e.filters.forEach((e=>{const n=D.includes(e.operator)?":"+e.operator:"",i=M.includes(e.operator)?e.operator:"";t.push(`${e.code}${n}=${i}${encodeURIComponent(e.value)}`)})),e.sortRules&&t.push(function(e){if(!e||0===e.length)return"";return"_sort="+e.map((e=>e.descending?"-"+e.code:e.code)).join(",")}(e.sortRules)),e.page&&e.page>0&&t.push("_page="+e.page),e.count&&e.count>0&&t.push("_count="+e.count),0===t.length?"":(t.sort(),"?"+t.join("&"))}class z{constructor(){this.storage="undefined"!=typeof localStorage?localStorage:new H}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)||void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){const t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?d(t):void 0)}}class H{constructor(){this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){var t;return null!==(t=this.data.get(e))&&void 0!==t?t:null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}}var Q;function $(){return{types:{}}}function F(e,t){var n;const i=t.name;if(!i)return;e.types[i]={display:i,description:t.description,properties:{}};const r=null===(n=t.snapshot)||void 0===n?void 0:n.element;if(r){const t=r.filter((e=>e.path!==i&&e.path));t.forEach((t=>function(e,t){var n,i;const r=t.path,o=null===(i=null===(n=t.type)||void 0===n?void 0:n[0])||void 0===i?void 0:i.code;if("Element"!==o&&"BackboneElement"!==o)return;const s=r.split("."),c=X(s);c in e.types||(e.types[c]={display:c,description:t.definition,parentType:X(s.slice(0,s.length-1)),properties:{}})}(e,t))),t.forEach((t=>function(e,t){const n=t.path.split(".");if(1===n.length)return;const i=X(n.slice(0,n.length-1)),r=e.types[i],o=n[n.length-1];r.properties[o]=t}(e,t)))}}function W(e,t){if(t.base)for(const n of t.base){const i=e.types[n];i&&(i.searchParams||(i.searchParams={}),i.searchParams[t.code]=t)}}function X(e){return e.map(E).join("")}function G(e){return e.path.replaceAll("[x]","").split(".").pop().split(/(?=[A-Z])/).map(E).join(" ").replace("_"," ").replace(/\s+/g," ")}!function(e){e.Address="Address",e.Age="Age",e.Annotation="Annotation",e.Attachment="Attachment",e.BackboneElement="BackboneElement",e.CodeableConcept="CodeableConcept",e.Coding="Coding",e.ContactDetail="ContactDetail",e.ContactPoint="ContactPoint",e.Contributor="Contributor",e.Count="Count",e.DataRequirement="DataRequirement",e.Distance="Distance",e.Dosage="Dosage",e.Duration="Duration",e.Expression="Expression",e.Extension="Extension",e.HumanName="HumanName",e.Identifier="Identifier",e.MarketingStatus="MarketingStatus",e.Meta="Meta",e.Money="Money",e.Narrative="Narrative",e.ParameterDefinition="ParameterDefinition",e.Period="Period",e.Population="Population",e.ProdCharacteristic="ProdCharacteristic",e.ProductShelfLife="ProductShelfLife",e.Quantity="Quantity",e.Range="Range",e.Ratio="Ratio",e.Reference="Reference",e.RelatedArtifact="RelatedArtifact",e.Resource="Resource",e.SampledData="SampledData",e.Signature="Signature",e.SubstanceAmount="SubstanceAmount",e.SystemString="http://hl7.org/fhirpath/System.String",e.Timing="Timing",e.TriggerDefinition="TriggerDefinition",e.UsageContext="UsageContext",e.base64Binary="base64Binary",e.boolean="boolean",e.canonical="canonical",e.code="code",e.date="date",e.dateTime="dateTime",e.decimal="decimal",e.id="id",e.instant="instant",e.integer="integer",e.markdown="markdown",e.oid="oid",e.positiveInt="positiveInt",e.string="string",e.time="time",e.unsignedInt="unsignedInt",e.uri="uri",e.url="url",e.uuid="uuid"}(Q||(Q={}));const V="launch/patient openid fhirUser offline_access user/*.*";class Y extends class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListeneer(e,t){const n=this.listeners[e];if(n)for(let e=0;e<n.length;e++)if(n[e]===t)return void n.splice(e,1)}dispatchEvent(e){const t=this.listeners[e.type];return t&&t.forEach((t=>t.call(this,e))),!e.defaultPrevented}}{constructor(e){var n;if(super(),null==e?void 0:e.baseUrl){if(!e.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");if(!e.baseUrl.endsWith("/"))throw new Error("Base URL must end with a trailing slash")}this.fetch=(null==e?void 0:e.fetch)||window.fetch.bind(window),this.storage=new z,this.schema={types:{}},this.resourceCache=new t(null!==(n=null==e?void 0:e.resourceCacheSize)&&void 0!==n?n:1e3),this.baseUrl=(null==e?void 0:e.baseUrl)||"https://api.medplum.com/",this.clientId=(null==e?void 0:e.clientId)||"",this.authorizeUrl=(null==e?void 0:e.authorizeUrl)||this.baseUrl+"oauth2/authorize",this.tokenUrl=(null==e?void 0:e.tokenUrl)||this.baseUrl+"oauth2/token",this.logoutUrl=(null==e?void 0:e.logoutUrl)||this.baseUrl+"oauth2/logout",this.onUnauthenticated=null==e?void 0:e.onUnauthenticated,this.loading=!1,this.refreshProfile().catch(console.log),this.setupStorageListener()}clear(){this.storage.clear(),this.resourceCache.clear(),this.dispatchEvent({type:"change"})}get(e){return this.request("GET",e)}post(e,t,n){return this.request("POST",e,n,t)}put(e,t,n){return this.request("PUT",e,n,t)}delete(e){return this.request("DELETE",e)}register(t){return e(this,void 0,void 0,(function*(){const e=yield this.post("auth/register",t);yield this.setActiveLogin(e)}))}startLogin(t,n,i){return e(this,void 0,void 0,(function*(){return yield this.startPkce(),this.post("auth/login",{clientId:this.clientId,scope:V,codeChallengeMethod:"S256",codeChallenge:this.storage.getString("codeChallenge"),email:t,password:n,remember:!!i})}))}startGoogleLogin(t){return e(this,void 0,void 0,(function*(){return yield this.startPkce(),this.post("auth/google",t)}))}signOut(){return this.clear(),Promise.resolve()}signInWithRedirect(){const e=new URLSearchParams(window.location.search).get("code");return e?this.processCode(e):void this.requestAuthorization()}signOutWithRedirect(){window.location.assign(this.logoutUrl)}fhirUrl(...e){const t=[this.baseUrl,"fhir/R4"];return e.forEach((e=>t.push("/",encodeURIComponent(e)))),t.join("")}search(e){return this.get(this.fhirUrl(e.resourceType)+q(e))}searchValueSet(e,t){return this.get(this.fhirUrl("ValueSet","$expand")+`?url=${encodeURIComponent(e)}`+`&filter=${encodeURIComponent(t)}`)}getCached(e,t){const n=this.resourceCache.get(e+"/"+t);if(n&&!("then"in n))return n}getCachedReference(e){const t=this.resourceCache.get(e.reference);if(t&&!("then"in t))return t}read(e,t){const n=e+"/"+t,i=this.get(this.fhirUrl(e,t)).then((e=>(this.resourceCache.set(n,e),e)));return this.resourceCache.set(n,i),i}readCached(e,t){const n=this.resourceCache.get(e+"/"+t);return n?Promise.resolve(n):this.read(e,t)}readReference(e){const t=null==e?void 0:e.reference;if(!t)return Promise.reject("Missing reference");const[n,i]=t.split("/");return this.read(n,i)}readCachedReference(e){const t=null==e?void 0:e.reference;if(!t)return Promise.reject("Missing reference");const[n,i]=t.split("/");return this.readCached(n,i)}getSchema(){return this.schema}requestSchema(t){return e(this,void 0,void 0,(function*(){if(t in this.schema.types)return Promise.resolve(this.schema);const e=`{\n StructureDefinitionList(name: "${encodeURIComponent(t)}") {\n name,\n description,\n snapshot {\n element {\n id,\n path,\n min,\n max,\n type {\n code,\n targetProfile\n },\n binding {\n valueSet\n },\n definition\n }\n }\n }\n SearchParameterList(base: "${encodeURIComponent(t)}") {\n base,\n code,\n type\n }\n }`.replace(/\s+/g," "),n=yield this.graphql(e);for(const e of n.data.StructureDefinitionList)F(this.schema,e);for(const e of n.data.SearchParameterList)W(this.schema,e);return this.schema}))}readHistory(e,t){return this.get(this.fhirUrl(e,t,"_history"))}readPatientEverything(e){return this.get(this.fhirUrl("Patient",e,"$everything"))}create(e){if(!e.resourceType)throw new Error("Missing resourceType");return this.post(this.fhirUrl(e.resourceType),e)}createBinary(e,t,n){return this.post(this.fhirUrl("Binary")+"?_filename="+encodeURIComponent(t),e,n)}update(e){if(!e.resourceType)throw new Error("Missing resourceType");if(!e.id)throw new Error("Missing id");return this.put(this.fhirUrl(e.resourceType,e.id),e)}patch(e,t,n){return this.request("PATCH",this.fhirUrl(e,t),"application/json-patch+json",n)}deleteResource(e,t){return this.delete(this.fhirUrl(e,t))}graphql(e){return this.post(this.fhirUrl("$graphql"),{query:e},"application/json")}getActiveLogin(){return this.storage.getObject("activeLogin")}setActiveLogin(t){return e(this,void 0,void 0,(function*(){this.storage.setObject("activeLogin",t),this.addLogin(t),this.resourceCache.clear(),this.refreshPromise=void 0,yield this.refreshProfile()}))}getLogins(){var e;return null!==(e=this.storage.getObject("logins"))&&void 0!==e?e:[]}addLogin(e){const t=this.getLogins().filter((t=>{var n,i;return(null===(n=t.profile)||void 0===n?void 0:n.reference)!==(null===(i=e.profile)||void 0===i?void 0:i.reference)}));t.push(e),this.storage.setObject("logins",t)}refreshProfile(){var t;return e(this,void 0,void 0,(function*(){const e=null===(t=this.getActiveLogin())||void 0===t?void 0:t.profile;return(null==e?void 0:e.reference)&&(this.loading=!0,this.storage.setObject("profile",yield this.readCachedReference(e)),this.loading=!1,this.dispatchEvent({type:"change"})),this.getProfile()}))}getProfile(){return this.storage.getObject("profile")}isLoading(){return this.loading}request(t,n,i,r){var o;return e(this,void 0,void 0,(function*(){this.refreshPromise&&(yield this.refreshPromise),n.startsWith("http")||(n=this.baseUrl+n);const e={"Content-Type":i||"application/fhir+json"},s=null===(o=this.getActiveLogin())||void 0===o?void 0:o.accessToken;s&&(e.Authorization="Bearer "+s);const c={method:t,cache:"no-cache",credentials:"include",headers:e};r&&("string"==typeof r||"undefined"!=typeof File&&r instanceof File?c.body=r:c.body=d(r));const a=yield this.fetch(n,c);if(401===a.status)return this.handleUnauthenticated(t,n,i,r);if(204===a.status||304===a.status)return;const u=yield a.json();return"OperationOutcome"!==u.resourceType||I(u)?u:Promise.reject(u)}))}handleUnauthenticated(t,n,i,r){return e(this,void 0,void 0,(function*(){return this.refresh().then((()=>this.request(t,n,i,r))).catch((e=>(this.clear(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(e))))}))}startPkce(){return e(this,void 0,void 0,(function*(){const t=U();this.storage.setString("pkceState",t);const n=U();this.storage.setString("codeVerifier",n);const i=y(yield function(t){return e(this,void 0,void 0,(function*(){return crypto.subtle.digest("SHA-256",(new TextEncoder).encode(t))}))}(n)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");this.storage.setString("codeChallenge",i)}))}requestAuthorization(){return e(this,void 0,void 0,(function*(){if(!this.authorizeUrl)throw new Error("Missing authorize URL");this.startPkce(),window.location.assign(this.authorizeUrl+"?response_type=code&state="+encodeURIComponent(this.storage.getString("pkceState"))+"&client_id="+encodeURIComponent(this.clientId)+"&redirect_uri="+encodeURIComponent(J())+"&scope="+encodeURIComponent(V)+"&code_challenge_method=S256&code_challenge="+encodeURIComponent(this.storage.getString("codeChallenge")))}))}processCode(e){if(!this.storage.getString("pkceState"))throw this.clear(),new Error("Invalid PCKE state");const t=this.storage.getString("codeVerifier");if(!t)throw this.clear(),new Error("Invalid PCKE code verifier");return this.fetchTokens("grant_type=authorization_code"+(this.clientId?"&client_id="+encodeURIComponent(this.clientId):"")+"&code_verifier="+encodeURIComponent(t)+"&redirect_uri="+encodeURIComponent(J())+"&code="+encodeURIComponent(e))}refresh(){var t;return e(this,void 0,void 0,(function*(){if(this.refreshPromise)return this.refreshPromise;const e=null===(t=this.getActiveLogin())||void 0===t?void 0:t.refreshToken;if(!e)return this.clear(),Promise.reject("Invalid refresh token");this.refreshPromise=this.fetchTokens("grant_type=refresh_token&client_id="+encodeURIComponent(this.clientId)+"&refresh_token="+encodeURIComponent(e)),yield this.refreshPromise}))}fetchTokens(t){return e(this,void 0,void 0,(function*(){return this.tokenUrl?this.fetch(this.tokenUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:t}).then((e=>e.ok?e.json():Promise.reject("Failed to fetch tokens"))).then((e=>this.verifyTokens(e))).then((()=>this.getProfile())):Promise.reject("Missing token URL")}))}verifyTokens(t){return e(this,void 0,void 0,(function*(){const e=t.access_token,n=R(e);return Date.now()>=1e3*n.exp?(this.clear(),Promise.reject("Token expired")):this.clientId&&n.client_id!==this.clientId?(this.clear(),Promise.reject("Token was not issued for this audience")):void(yield this.setActiveLogin({accessToken:e,refreshToken:t.refresh_token,project:t.project,profile:t.profile}))}))}setupStorageListener(){try{window.addEventListener("storage",(e=>{null!==e.key&&"activeLogin"!==e.key||window.location.reload()}))}catch(e){}}}function J(){return window.location.protocol+"//"+window.location.host+"/"}var K;function Z(e,t,n){var i,r,o,s;const c=n.code.split("-").reduce(((e,t,n)=>e+(n?E(t):t)),"");const a=null===(i=ee(t,n.expression))||void 0===i?void 0:i.split(".");if(!a)return{columnName:c,type:K.TEXT};let u,h=t,l=!1;for(let t=1;t<a.length;t++){const n=a[t],i=null===(o=null===(r=e.types[h])||void 0===r?void 0:r.properties)||void 0===o?void 0:o[n];if(!i)return{columnName:c,type:K.TEXT,array:l};if("*"===i.max&&(l=!0),u=null===(s=i.type)||void 0===s?void 0:s[0].code,!u)return{columnName:c,type:K.TEXT,array:l};t<a.length-1&&("Element"===u||"BackboneElement"===u?h+=E(n):h=u)}const d=function(e,t){let n=K.TEXT;switch(e.type){case"date":n=K.DATE;break;case"number":n=K.NUMBER;break;case"quantity":n=K.QUANTITY;break;case"reference":n=K.REFERENCE;break;case"token":"boolean"===t&&(n=K.BOOLEAN)}return n}(n,u);return{columnName:c,type:d,array:l}}function ee(e,t){const n=t.split(" | ");for(const t of n){const n=te(t);if(n.startsWith(e+"."))return n}}function te(e){let t=e.trim();return t.startsWith("(")&&t.endsWith(")")&&(t=t.substring(1,t.length-1)),t.includes(" as ")&&(t=t.substring(0,t.indexOf(" as "))),t.includes(".where(")&&(t=t.substring(0,t.indexOf(".where("))),t}!function(e){e.BOOLEAN="BOOLEAN",e.NUMBER="NUMBER",e.QUANTITY="QUANTITY",e.TEXT="TEXT",e.REFERENCE="REFERENCE",e.DATE="DATE",e.DATETIME="DATETIME",e.PERIOD="PERIOD"}(K||(K={}));export{Y as MedplumClient,x as OperationOutcomeError,j as Operator,Q as PropertyType,K as SearchParameterType,b as accessDenied,A as allOk,y as arrayBufferToBase64,v as arrayBufferToHex,N as assertOk,O as badRequest,X as buildTypeName,E as capitalize,s as createReference,$ as createSchema,S as created,p as deepEquals,n as formatAddress,o as formatFamilyName,r as formatGivenName,i as formatHumanName,q as formatSearchQuery,l as getDateProperty,u as getDisplayString,ee as getExpressionForResourceType,h as getImageSrc,G as getPropertyDisplayName,c as getReferenceString,Z as getSearchParameterDetails,L as getStatus,P as gone,W as indexSearchParameter,F as indexStructureDefinition,k as isGone,T as isLowerCase,_ as isNotFound,I as isOk,a as isProfileResource,w as notFound,C as notModified,B as parseSearchDefinition,d as stringify};
function e(e,t,i,n){return new(i||(i=Promise))((function(r,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))}function t(e,t,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(e):n?n.value:t.get(e)}function i(e,t,i,n,r){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?r.call(e,i):r?r.value=i:t.set(e,i),i}var n,r,o,s;class a{constructor(e=10){n.add(this),r.set(this,void 0),o.set(this,void 0),i(this,r,e,"f"),i(this,o,new Map,"f")}clear(){t(this,o,"f").clear()}get(e){const i=t(this,o,"f").get(e);return i&&(t(this,o,"f").delete(e),t(this,o,"f").set(e,i)),i}set(e,i){t(this,o,"f").has(e)?t(this,o,"f").delete(e):t(this,o,"f").size>=t(this,r,"f")&&t(this,o,"f").delete(t(this,n,"m",s).call(this)),t(this,o,"f").set(e,i)}}function c(e,t){const i=[];return e.line&&i.push(...e.line),e.city&&i.push(e.city),e.state&&i.push(e.state),e.postalCode&&i.push(e.postalCode),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&i.push("["+e.use+"]"),i.join(", ").trim()}function h(e,t){const i=[];return e.prefix&&((null==t?void 0:t.all)||(null==t?void 0:t.prefix))&&i.push(...e.prefix),e.given&&i.push(...e.given),e.family&&i.push(e.family),e.suffix&&((null==t?void 0:t.all)||(null==t?void 0:t.suffix))&&i.push(...e.suffix),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&i.push("["+e.use+"]"),i.join(" ").trim()}function u(e){const t=[];return e.given&&t.push(...e.given),t.join(" ").trim()}function l(e){return e.family||""}function d(e){const t=f(e),i=v(e);return i===t?{reference:t}:{reference:t,display:i}}function f(e){return e.resourceType+"/"+e.id}function p(e){var t;return null===(t=null==e?void 0:e.reference)||void 0===t?void 0:t.split("/")[1]}function g(e){return"Patient"===e.resourceType||"Practitioner"===e.resourceType||"RelatedPerson"===e.resourceType}function v(e){if(g(e)){const t=function(e){const t=e.name;if(t&&t.length>0)return h(t[0]);return}(e);if(t)return t}if("Device"===e.resourceType){const t=function(e){const t=e.deviceName;if(t&&t.length>0)return t[0].name;return}(e);if(t)return t}return"User"===e.resourceType&&e.email?e.email:"name"in e&&e.name&&"string"==typeof e.name?e.name:f(e)}function m(e){if(g(e)){const t=e.photo;if(t)for(const e of t)if(e.url&&e.contentType&&e.contentType.startsWith("image/"))return e.url}}function y(e){return e?new Date(e):void 0}function E(e,t){return JSON.stringify(e,w,t?2:void 0)}function w(e,t){return function(e){if(null==e)return!0;const t=typeof e;return"string"===t&&""===e||"object"===t&&0===Object.keys(e).length}(t)?void 0:t}function T(e,t,i){let n=Object.keys(e),r=Object.keys(t);if("meta"===i&&(n=n.filter((e=>"versionId"!==e&&"lastUpdated"!==e&&"author"!==e)),r=r.filter((e=>"versionId"!==e&&"lastUpdated"!==e&&"author"!==e))),n.length!==r.length)return!1;for(const i of n){const n=e[i],r=t[i];if(R(n)&&R(r)){if(!T(n,r,i))return!1}else if(n!==r)return!1}return!0}function R(e){return null!==e&&"object"==typeof e}r=new WeakMap,o=new WeakMap,n=new WeakSet,s=function(){return t(this,o,"f").keys().next().value};const S=[];for(let e=0;e<256;e++)S.push(e.toString(16).padStart(2,"0"));function A(e){const t=new Uint8Array(e),i=new Array(t.length);for(let e=0;e<t.length;e++)i[e]=S[t[e]];return i.join("")}function C(e){const t=new Uint8Array(e),i=[];for(let e=0;e<t.length;e++)i[e]=String.fromCharCode(t[e]);return window.btoa(i.join(""))}function U(e){return e.charAt(0).toUpperCase()+e.substr(1)}function k(e){return e===e.toLowerCase()}function b(){const e=new Uint32Array(28);return crypto.getRandomValues(e),A(e.buffer)}var O;function P(e){const[t,i,n]=e.split(".");return function(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),i=window.atob(t),n=Array.from(i).reduce(((e,t)=>`${e}%${("00"+t.charCodeAt(0).toString(16)).slice(-2)}`),""),r=decodeURIComponent(n);return JSON.parse(r)}(i)}O=new WeakMap;const _={resourceType:"OperationOutcome",id:"ok",issue:[{severity:"information",code:"information",details:{text:"All OK"}}]},I={resourceType:"OperationOutcome",id:"created",issue:[{severity:"information",code:"information",details:{text:"Created"}}]},L={resourceType:"OperationOutcome",id:"not-modified",issue:[{severity:"information",code:"information",details:{text:"Not Modified"}}]},N={resourceType:"OperationOutcome",id:"not-found",issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},M={resourceType:"OperationOutcome",id:"gone",issue:[{severity:"error",code:"gone",details:{text:"Gone"}}]},x={resourceType:"OperationOutcome",id:"access-denied",issue:[{severity:"error",code:"access-denied",details:{text:"Access Denied"}}]};function j(e,t){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:e},expression:t?[t]:void 0}]}}function W(e){return"ok"===e.id||"created"===e.id||"not-modified"===e.id}function D(e){return"not-found"===e.id}function B(e){return"gone"===e.id}function H(e){return"ok"===e.id?200:"created"===e.id?201:"not-modified"===e.id?304:"access-denied"===e.id?403:"not-found"===e.id?404:"gone"===e.id?410:400}function Q(e,t){if(!W(e)||void 0===t)throw new $(e)}class $ extends Error{constructor(e){var t,i;super(null===(i=null===(t=null==e?void 0:e.issue)||void 0===t?void 0:t[0].details)||void 0===i?void 0:i.text),this.outcome=e}}var F;!function(e){e.EQUALS="eq",e.NOT_EQUALS="ne",e.GREATER_THAN="gt",e.LESS_THAN="lt",e.GREATER_THAN_OR_EQUALS="ge",e.LESS_THAN_OR_EQUALS="le",e.STARTS_AFTER="sa",e.ENDS_BEFORE="eb",e.APPROXIMATELY="ap",e.CONTAINS="contains",e.EXACT="exact",e.TEXT="text",e.ABOVE="above",e.BELOW="below",e.IN="in",e.NOT_IN="not-in",e.OF_TYPE="of-type"}(F||(F={}));const X=[F.CONTAINS,F.EXACT,F.TEXT,F.ABOVE,F.BELOW,F.IN,F.NOT_IN,F.OF_TYPE],q=[F.NOT_EQUALS,F.GREATER_THAN,F.LESS_THAN,F.GREATER_THAN_OR_EQUALS,F.LESS_THAN_OR_EQUALS,F.STARTS_AFTER,F.ENDS_BEFORE,F.APPROXIMATELY];function z(e){const t=e.pathname.split("/").pop(),i=new URLSearchParams(e.search),n=[],r=[];let o,s,a=0,c=10;return i.forEach(((e,t)=>{"_fields"===t?o=e.split(","):"_page"===t?a=parseInt(e):"_count"===t?c=parseInt(e):"_total"===t?s=e:"_sort"===t?r.push(function(e){return e.startsWith("-")?{code:e.substring(1),descending:!0}:{code:e}}(e)):n.push(function(e,t){let i=e,n=F.EQUALS;for(const e of X){const t=i.indexOf(":"+e);-1!==t&&(n=e,i=i.substring(0,t))}for(const e of q)t.match(new RegExp("^"+e+"\\d"))&&(n=e,t=t.substring(e.length));return{code:i,operator:n,value:t}}(t,e))})),{resourceType:t,filters:n,fields:o,page:a,count:c,total:s,sortRules:r}}function G(e){const t=[];return e.fields&&t.push("_fields="+e.fields.join(",")),e.filters&&e.filters.forEach((e=>{const i=X.includes(e.operator)?":"+e.operator:"",n=q.includes(e.operator)?e.operator:"";t.push(`${e.code}${i}=${n}${encodeURIComponent(e.value)}`)})),e.sortRules&&t.push(function(e){if(!e||0===e.length)return"";return"_sort="+e.map((e=>e.descending?"-"+e.code:e.code)).join(",")}(e.sortRules)),e.page&&e.page>0&&t.push("_page="+e.page),e.count&&e.count>0&&t.push("_count="+e.count),e.total&&t.push("_total="+encodeURIComponent(e.total)),0===t.length?"":(t.sort(),"?"+t.join("&"))}var V,Y,J,K,Z,ee,te,ie,ne,re,oe,se,ae,ce,he,ue,le,de,fe,pe,ge,ve,me,ye,Ee,we,Te,Re,Se,Ae,Ce;class Ue{constructor(){V.set(this,void 0),i(this,V,"undefined"!=typeof localStorage?localStorage:new ke,"f")}clear(){t(this,V,"f").clear()}getString(e){return t(this,V,"f").getItem(e)||void 0}setString(e,i){i?t(this,V,"f").setItem(e,i):t(this,V,"f").removeItem(e)}getObject(e){const t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?E(t):void 0)}}V=new WeakMap;class ke{constructor(){Y.set(this,void 0),i(this,Y,new Map,"f")}get length(){return t(this,Y,"f").size}clear(){t(this,Y,"f").clear()}getItem(e){var i;return null!==(i=t(this,Y,"f").get(e))&&void 0!==i?i:null}setItem(e,i){i?t(this,Y,"f").set(e,i):t(this,Y,"f").delete(e)}removeItem(e){t(this,Y,"f").delete(e)}key(e){return Array.from(t(this,Y,"f").keys())[e]}}function be(){return{types:{}}}function Oe(e,t){var i;const n=t.name;if(!n)return;e.types[n]={display:n,description:t.description,properties:{}};const r=null===(i=t.snapshot)||void 0===i?void 0:i.element;if(r){const t=r.filter((e=>e.path!==n&&e.path));t.forEach((t=>function(e,t){var i,n;const r=t.path,o=null===(n=null===(i=t.type)||void 0===i?void 0:i[0])||void 0===n?void 0:n.code;if("Element"!==o&&"BackboneElement"!==o)return;const s=r.split("."),a=_e(s);a in e.types||(e.types[a]={display:a,description:t.definition,parentType:_e(s.slice(0,s.length-1)),properties:{}})}(e,t))),t.forEach((t=>function(e,t){const i=t.path.split(".");if(1===i.length)return;const n=_e(i.slice(0,i.length-1)),r=e.types[n],o=i[i.length-1];r.properties[o]=t}(e,t)))}}function Pe(e,t){if(t.base)for(const i of t.base){const n=e.types[i];n&&(n.searchParams||(n.searchParams={}),n.searchParams[t.code]=t)}}function _e(e){return e.map(U).join("")}function Ie(e){return e.path.replaceAll("[x]","").split(".").pop().split(/(?=[A-Z])/).map(U).join(" ").replace("_"," ").replace(/\s+/g," ")}Y=new WeakMap,function(e){e.Address="Address",e.Age="Age",e.Annotation="Annotation",e.Attachment="Attachment",e.BackboneElement="BackboneElement",e.CodeableConcept="CodeableConcept",e.Coding="Coding",e.ContactDetail="ContactDetail",e.ContactPoint="ContactPoint",e.Contributor="Contributor",e.Count="Count",e.DataRequirement="DataRequirement",e.Distance="Distance",e.Dosage="Dosage",e.Duration="Duration",e.Expression="Expression",e.Extension="Extension",e.HumanName="HumanName",e.Identifier="Identifier",e.MarketingStatus="MarketingStatus",e.Meta="Meta",e.Money="Money",e.Narrative="Narrative",e.ParameterDefinition="ParameterDefinition",e.Period="Period",e.Population="Population",e.ProdCharacteristic="ProdCharacteristic",e.ProductShelfLife="ProductShelfLife",e.Quantity="Quantity",e.Range="Range",e.Ratio="Ratio",e.Reference="Reference",e.RelatedArtifact="RelatedArtifact",e.Resource="Resource",e.SampledData="SampledData",e.Signature="Signature",e.SubstanceAmount="SubstanceAmount",e.SystemString="http://hl7.org/fhirpath/System.String",e.Timing="Timing",e.TriggerDefinition="TriggerDefinition",e.UsageContext="UsageContext",e.base64Binary="base64Binary",e.boolean="boolean",e.canonical="canonical",e.code="code",e.date="date",e.dateTime="dateTime",e.decimal="decimal",e.id="id",e.instant="instant",e.integer="integer",e.markdown="markdown",e.oid="oid",e.positiveInt="positiveInt",e.string="string",e.time="time",e.unsignedInt="unsignedInt",e.uri="uri",e.url="url",e.uuid="uuid"}(J||(J={}));const Le="launch/patient openid fhirUser offline_access user/*.*";class Ne extends class{constructor(){O.set(this,void 0),i(this,O,{},"f")}addEventListener(e,i){t(this,O,"f")[e]||(t(this,O,"f")[e]=[]),t(this,O,"f")[e].push(i)}removeEventListeneer(e,i){const n=t(this,O,"f")[e];if(n)for(let e=0;e<n.length;e++)if(n[e]===i)return void n.splice(e,1)}dispatchEvent(e){const i=t(this,O,"f")[e.type];return i&&i.forEach((t=>t.call(this,e))),!e.defaultPrevented}}{constructor(e){var n;if(super(),K.add(this),Z.set(this,void 0),ee.set(this,void 0),te.set(this,void 0),ie.set(this,void 0),ne.set(this,void 0),re.set(this,void 0),oe.set(this,void 0),se.set(this,void 0),ae.set(this,void 0),ce.set(this,void 0),he.set(this,void 0),ue.set(this,void 0),le.set(this,void 0),de.set(this,void 0),fe.set(this,void 0),pe.set(this,void 0),null==e?void 0:e.baseUrl){if(!e.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");if(!e.baseUrl.endsWith("/"))throw new Error("Base URL must end with a trailing slash")}i(this,Z,(null==e?void 0:e.fetch)||window.fetch.bind(window),"f"),i(this,ee,new Ue,"f"),i(this,te,{types:{}},"f"),i(this,ie,new a(null!==(n=null==e?void 0:e.resourceCacheSize)&&void 0!==n?n:1e3),"f"),i(this,ne,(null==e?void 0:e.baseUrl)||"https://api.medplum.com/","f"),i(this,re,(null==e?void 0:e.clientId)||"","f"),i(this,oe,(null==e?void 0:e.authorizeUrl)||t(this,ne,"f")+"oauth2/authorize","f"),i(this,se,(null==e?void 0:e.tokenUrl)||t(this,ne,"f")+"oauth2/token","f"),i(this,ae,(null==e?void 0:e.logoutUrl)||t(this,ne,"f")+"oauth2/logout","f"),i(this,ce,null==e?void 0:e.onUnauthenticated,"f");const r=this.getActiveLogin();r&&(i(this,he,r.accessToken,"f"),i(this,ue,r.refreshToken,"f"),t(this,K,"m",ve).call(this).catch(console.log)),t(this,K,"m",Ce).call(this)}clear(){t(this,ee,"f").clear(),t(this,ie,"f").clear(),i(this,he,void 0,"f"),i(this,ue,void 0,"f"),i(this,fe,void 0,"f"),i(this,pe,void 0,"f"),this.dispatchEvent({type:"change"})}get(e){return t(this,K,"m",me).call(this,"GET",e)}post(e,i,n){return t(this,K,"m",me).call(this,"POST",e,n,i)}put(e,i,n){return t(this,K,"m",me).call(this,"PUT",e,n,i)}delete(e){return t(this,K,"m",me).call(this,"DELETE",e)}register(t){return e(this,void 0,void 0,(function*(){const e=yield this.post("auth/register",t);yield this.setActiveLogin(e)}))}startLogin(i,n,r){return e(this,void 0,void 0,(function*(){return yield t(this,K,"m",we).call(this),this.post("auth/login",{clientId:t(this,re,"f"),scope:Le,codeChallengeMethod:"S256",codeChallenge:t(this,ee,"f").getString("codeChallenge"),email:i,password:n,remember:!!r})}))}startGoogleLogin(i){return e(this,void 0,void 0,(function*(){return yield t(this,K,"m",we).call(this),this.post("auth/google",i)}))}signOut(){return this.clear(),Promise.resolve()}signInWithRedirect(){const e=new URLSearchParams(window.location.search).get("code");return e?this.processCode(e):void t(this,K,"m",Te).call(this)}signOutWithRedirect(){window.location.assign(t(this,ae,"f"))}fhirUrl(...e){const i=[t(this,ne,"f"),"fhir/R4"];return e.forEach((e=>i.push("/",encodeURIComponent(e)))),i.join("")}search(e){return this.get(this.fhirUrl(e.resourceType)+G(e))}searchValueSet(e,t){return this.get(this.fhirUrl("ValueSet","$expand")+`?url=${encodeURIComponent(e)}`+`&filter=${encodeURIComponent(t)}`)}getCached(e,i){const n=t(this,ie,"f").get(e+"/"+i);if(n&&!("then"in n))return n}getCachedReference(e){const i=t(this,ie,"f").get(e.reference);if(i&&!("then"in i))return i}read(e,i){const n=e+"/"+i,r=this.get(this.fhirUrl(e,i)).then((e=>(t(this,ie,"f").set(n,e),e)));return t(this,ie,"f").set(n,r),r}readCached(e,i){const n=t(this,ie,"f").get(e+"/"+i);return n?Promise.resolve(n):this.read(e,i)}readReference(e){const t=null==e?void 0:e.reference;if(!t)return Promise.reject("Missing reference");const[i,n]=t.split("/");return this.read(i,n)}readCachedReference(e){const t=null==e?void 0:e.reference;if(!t)return Promise.reject("Missing reference");const[i,n]=t.split("/");return this.readCached(i,n)}getSchema(){return t(this,te,"f")}requestSchema(i){return e(this,void 0,void 0,(function*(){if(i in t(this,te,"f").types)return Promise.resolve(t(this,te,"f"));const e=`{\n StructureDefinitionList(name: "${encodeURIComponent(i)}") {\n name,\n description,\n snapshot {\n element {\n id,\n path,\n min,\n max,\n type {\n code,\n targetProfile\n },\n binding {\n valueSet\n },\n definition\n }\n }\n }\n SearchParameterList(base: "${encodeURIComponent(i)}") {\n base,\n code,\n type\n }\n }`.replace(/\s+/g," "),n=yield this.graphql(e);for(const e of n.data.StructureDefinitionList)Oe(t(this,te,"f"),e);for(const e of n.data.SearchParameterList)Pe(t(this,te,"f"),e);return t(this,te,"f")}))}readHistory(e,t){return this.get(this.fhirUrl(e,t,"_history"))}readPatientEverything(e){return this.get(this.fhirUrl("Patient",e,"$everything"))}create(e){if(!e.resourceType)throw new Error("Missing resourceType");return this.post(this.fhirUrl(e.resourceType),e)}createBinary(e,t,i){return this.post(this.fhirUrl("Binary")+"?_filename="+encodeURIComponent(t),e,i)}update(e){if(!e.resourceType)throw new Error("Missing resourceType");if(!e.id)throw new Error("Missing id");return this.put(this.fhirUrl(e.resourceType,e.id),e)}patch(e,i,n){return t(this,K,"m",me).call(this,"PATCH",this.fhirUrl(e,i),"application/json-patch+json",n)}deleteResource(e,t){return this.delete(this.fhirUrl(e,t))}graphql(e){return this.post(this.fhirUrl("$graphql"),{query:e},"application/json")}getActiveLogin(){return t(this,ee,"f").getObject("activeLogin")}setActiveLogin(n){return e(this,void 0,void 0,(function*(){i(this,he,n.accessToken,"f"),i(this,ue,n.refreshToken,"f"),i(this,fe,void 0,"f"),i(this,pe,void 0,"f"),t(this,ee,"f").setObject("activeLogin",n),t(this,K,"m",ge).call(this,n),t(this,ie,"f").clear(),i(this,le,void 0,"f"),yield t(this,K,"m",ve).call(this)}))}getLogins(){var e;return null!==(e=t(this,ee,"f").getObject("logins"))&&void 0!==e?e:[]}isLoading(){return!!t(this,de,"f")}getProfile(){return t(this,fe,"f")}getProfileAsync(){return e(this,void 0,void 0,(function*(){return t(this,de,"f")&&(yield t(this,de,"f")),this.getProfile()}))}getUserConfiguration(){return t(this,pe,"f")}download(i){return e(this,void 0,void 0,(function*(){t(this,le,"f")&&(yield t(this,le,"f"));const e=t(this,K,"m",ye).call(this,"GET");return(yield t(this,Z,"f").call(this,i,e)).blob()}))}processCode(e){if(!t(this,ee,"f").getString("pkceState"))throw this.clear(),new Error("Invalid PCKE state");const i=t(this,ee,"f").getString("codeVerifier");if(!i)throw this.clear(),new Error("Invalid PCKE code verifier");return t(this,K,"m",Se).call(this,"grant_type=authorization_code"+(t(this,re,"f")?"&client_id="+encodeURIComponent(t(this,re,"f")):"")+"&code_verifier="+encodeURIComponent(i)+"&redirect_uri="+encodeURIComponent(Me())+"&code="+encodeURIComponent(e))}}function Me(){return window.location.protocol+"//"+window.location.host+"/"}var xe;function je(e,t,i){var n,r,o,s;const a=i.code.split("-").reduce(((e,t,i)=>e+(i?U(t):t)),"");const c=null===(n=We(t,i.expression))||void 0===n?void 0:n.split(".");if(!c)return{columnName:a,type:xe.TEXT};let h,u=t,l=!1;for(let t=1;t<c.length;t++){const i=c[t],n=null===(o=null===(r=e.types[u])||void 0===r?void 0:r.properties)||void 0===o?void 0:o[i];if(!n)return{columnName:a,type:xe.TEXT,array:l};if("*"===n.max&&(l=!0),h=null===(s=n.type)||void 0===s?void 0:s[0].code,!h)return{columnName:a,type:xe.TEXT,array:l};t<c.length-1&&("Element"===h||"BackboneElement"===h?u+=U(i):u=h)}const d=function(e,t){let i=xe.TEXT;switch(e.type){case"date":i=xe.DATE;break;case"number":i=xe.NUMBER;break;case"quantity":i=xe.QUANTITY;break;case"reference":i=xe.REFERENCE;break;case"token":"boolean"===t&&(i=xe.BOOLEAN)}return i}(i,h);return{columnName:a,type:d,array:l}}function We(e,t){const i=t.split(" | ");for(const t of i){const i=De(t);if(i.startsWith(e+"."))return i}}function De(e){let t=e.trim();return t.startsWith("(")&&t.endsWith(")")&&(t=t.substring(1,t.length-1)),t.includes(" as ")&&(t=t.substring(0,t.indexOf(" as "))),t.includes(".where(")&&(t=t.substring(0,t.indexOf(".where("))),t}Z=new WeakMap,ee=new WeakMap,te=new WeakMap,ie=new WeakMap,ne=new WeakMap,re=new WeakMap,oe=new WeakMap,se=new WeakMap,ae=new WeakMap,ce=new WeakMap,he=new WeakMap,ue=new WeakMap,le=new WeakMap,de=new WeakMap,fe=new WeakMap,pe=new WeakMap,K=new WeakSet,ge=function(e){const i=this.getLogins().filter((t=>{var i,n;return(null===(i=t.profile)||void 0===i?void 0:i.reference)!==(null===(n=e.profile)||void 0===n?void 0:n.reference)}));i.push(e),t(this,ee,"f").setObject("logins",i)},ve=function(){return e(this,void 0,void 0,(function*(){return i(this,de,new Promise(((e,n)=>{this.get("auth/me").then((n=>{i(this,de,void 0,"f"),i(this,fe,n.profile,"f"),i(this,pe,n.config,"f"),this.dispatchEvent({type:"change"}),e(t(this,fe,"f"))})).catch(n)})),"f"),t(this,de,"f")}))},me=function(i,n,r,o){return e(this,void 0,void 0,(function*(){t(this,le,"f")&&(yield t(this,le,"f")),n.startsWith("http")||(n=t(this,ne,"f")+n);const e=t(this,K,"m",ye).call(this,i,r,o),s=yield t(this,Z,"f").call(this,n,e);if(401===s.status)return t(this,K,"m",Ee).call(this,i,n,r,o);if(204===s.status||304===s.status)return;const a=yield s.json();return"OperationOutcome"!==a.resourceType||W(a)?a:Promise.reject(a)}))},ye=function(e,i,n){const r={"Content-Type":i||"application/fhir+json"};t(this,he,"f")&&(r.Authorization="Bearer "+t(this,he,"f"));const o={method:e,cache:"no-cache",credentials:"include",headers:r};return n&&("string"==typeof n||"undefined"!=typeof File&&n instanceof File?o.body=n:o.body=E(n)),o},Ee=function(i,n,r,o){return e(this,void 0,void 0,(function*(){return t(this,K,"m",Re).call(this).then((()=>t(this,K,"m",me).call(this,i,n,r,o))).catch((e=>(this.clear(),t(this,ce,"f")&&t(this,ce,"f").call(this),Promise.reject(e))))}))},we=function(){return e(this,void 0,void 0,(function*(){const i=b();t(this,ee,"f").setString("pkceState",i);const n=b();t(this,ee,"f").setString("codeVerifier",n);const r=C(yield function(t){return e(this,void 0,void 0,(function*(){return crypto.subtle.digest("SHA-256",(new TextEncoder).encode(t))}))}(n)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");t(this,ee,"f").setString("codeChallenge",r)}))},Te=function(){return e(this,void 0,void 0,(function*(){if(!t(this,oe,"f"))throw new Error("Missing authorize URL");t(this,K,"m",we).call(this),window.location.assign(t(this,oe,"f")+"?response_type=code&state="+encodeURIComponent(t(this,ee,"f").getString("pkceState"))+"&client_id="+encodeURIComponent(t(this,re,"f"))+"&redirect_uri="+encodeURIComponent(Me())+"&scope="+encodeURIComponent(Le)+"&code_challenge_method=S256&code_challenge="+encodeURIComponent(t(this,ee,"f").getString("codeChallenge")))}))},Re=function(){return e(this,void 0,void 0,(function*(){return t(this,le,"f")?t(this,le,"f"):t(this,ue,"f")?(i(this,le,t(this,K,"m",Se).call(this,"grant_type=refresh_token&client_id="+encodeURIComponent(t(this,re,"f"))+"&refresh_token="+encodeURIComponent(t(this,ue,"f"))),"f"),void(yield t(this,le,"f"))):(this.clear(),Promise.reject("Invalid refresh token"))}))},Se=function(i){return e(this,void 0,void 0,(function*(){return t(this,se,"f")?t(this,Z,"f").call(this,t(this,se,"f"),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i}).then((e=>e.ok?e.json():Promise.reject("Failed to fetch tokens"))).then((e=>t(this,K,"m",Ae).call(this,e))).then((()=>this.getProfile())):Promise.reject("Missing token URL")}))},Ae=function(i){return e(this,void 0,void 0,(function*(){const e=i.access_token,n=P(e);return Date.now()>=1e3*n.exp?(this.clear(),Promise.reject("Token expired")):t(this,re,"f")&&n.client_id!==t(this,re,"f")?(this.clear(),Promise.reject("Token was not issued for this audience")):void(yield this.setActiveLogin({accessToken:e,refreshToken:i.refresh_token,project:i.project,profile:i.profile}))}))},Ce=function(){try{window.addEventListener("storage",(e=>{null!==e.key&&"activeLogin"!==e.key||window.location.reload()}))}catch(e){}},function(e){e.BOOLEAN="BOOLEAN",e.NUMBER="NUMBER",e.QUANTITY="QUANTITY",e.TEXT="TEXT",e.REFERENCE="REFERENCE",e.DATE="DATE",e.DATETIME="DATETIME",e.PERIOD="PERIOD"}(xe||(xe={}));export{Ne as MedplumClient,$ as OperationOutcomeError,F as Operator,J as PropertyType,xe as SearchParameterType,x as accessDenied,_ as allOk,C as arrayBufferToBase64,A as arrayBufferToHex,Q as assertOk,j as badRequest,_e as buildTypeName,U as capitalize,d as createReference,be as createSchema,I as created,T as deepEquals,c as formatAddress,l as formatFamilyName,u as formatGivenName,h as formatHumanName,G as formatSearchQuery,y as getDateProperty,v as getDisplayString,We as getExpressionForResourceType,m as getImageSrc,Ie as getPropertyDisplayName,f as getReferenceString,je as getSearchParameterDetails,H as getStatus,M as gone,Pe as indexSearchParameter,Oe as indexStructureDefinition,B as isGone,k as isLowerCase,D as isNotFound,W as isOk,g as isProfileResource,N as notFound,L as notModified,z as parseSearchDefinition,p as resolveId,E as stringify};
//# sourceMappingURL=index.min.js.map

@@ -6,4 +6,3 @@ /**

export declare class LRUCache<T> {
private readonly max;
private readonly cache;
#private;
constructor(max?: number);

@@ -13,3 +12,2 @@ clear(): void;

set(key: string, val: T): void;
private first;
}

@@ -1,2 +0,2 @@

import { Binary, Bundle, Project, ProjectMembership, Reference, Resource, ValueSet } from '@medplum/fhirtypes';
import { Binary, Bundle, Project, ProjectMembership, Reference, Resource, UserConfiguration, ValueSet } from '@medplum/fhirtypes';
import { EventTarget } from './eventtarget';

@@ -101,14 +101,3 @@ import { SearchRequest } from './search';

export declare class MedplumClient extends EventTarget {
private readonly fetch;
private readonly storage;
private readonly schema;
private readonly resourceCache;
private readonly baseUrl;
private readonly clientId;
private readonly authorizeUrl;
private readonly tokenUrl;
private readonly logoutUrl;
private readonly onUnauthenticated?;
private refreshPromise?;
private loading;
#private;
constructor(options?: MedplumClientOptions);

@@ -226,36 +215,13 @@ /**

getLogins(): LoginState[];
private addLogin;
private refreshProfile;
isLoading(): boolean;
getProfile(): ProfileResource | undefined;
isLoading(): boolean;
getProfileAsync(): Promise<ProfileResource | undefined>;
getUserConfiguration(): UserConfiguration | undefined;
/**
* Makes an HTTP request.
* @param {string} method
* @param {string} url
* @param {string=} contentType
* @param {Object=} body
* Downloads the URL as a blob.
* @param url The URL to request.
* @returns Promise to the response body as a blob.
*/
private request;
download(url: string): Promise<Blob>;
/**
* Handles an unauthenticated response from the server.
* First, tries to refresh the access token and retry the request.
* Otherwise, calls unauthenticated callbacks and rejects.
* @param method The HTTP method of the original request.
* @param url The URL of the original request.
* @param contentType The content type of the original request.
* @param body The body of the original request.
*/
private handleUnauthenticated;
/**
* Starts a new PKCE flow.
* These PKCE values are stateful, and must survive redirects and page refreshes.
*/
private startPkce;
/**
* Redirects the user to the login screen for authorization.
* Clears all auth state including local storage and session storage.
* See: https://openid.net/specs/openid-connect-core-1_0.html#AuthorizationEndpoint
*/
private requestAuthorization;
/**
* Processes an OAuth authorization code.

@@ -266,25 +232,2 @@ * See: https://openid.net/specs/openid-connect-core-1_0.html#TokenRequest

processCode(code: string): Promise<ProfileResource>;
/**
* Tries to refresh the auth tokens.
* See: https://openid.net/specs/openid-connect-core-1_0.html#RefreshTokens
*/
private refresh;
/**
* Makes a POST request to the tokens endpoint.
* See: https://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint
* @param formBody Token parameters in URL encoded format.
*/
private fetchTokens;
/**
* Verifies the tokens received from the auth server.
* Validates the JWT against the JWKS.
* See: https://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint
* @param tokens
*/
private verifyTokens;
/**
* Sets up a listener for window storage events.
* This synchronizes state across browser windows and browser tabs.
*/
private setupStorageListener;
}
interface Event {
type: string;
defaultPrevented?: boolean;
readonly type: string;
readonly defaultPrevented?: boolean;
}
declare type EventListener = (e: Event) => void;
export declare class EventTarget {
private readonly listeners;
#private;
constructor();

@@ -9,0 +9,0 @@ addEventListener(type: string, callback: EventListener): void;

@@ -9,2 +9,3 @@ export interface SearchRequest {

readonly name?: string;
readonly total?: 'none' | 'estimate' | 'accurate';
}

@@ -11,0 +12,0 @@ export interface Filter {

@@ -9,3 +9,3 @@ /**

export declare class ClientStorage {
private readonly storage;
#private;
constructor();

@@ -22,3 +22,3 @@ clear(): void;

export declare class MemoryStorage implements Storage {
private data;
#private;
constructor();

@@ -25,0 +25,0 @@ /**

@@ -16,2 +16,8 @@ import { Patient, Practitioner, Reference, RelatedPerson, Resource } from '@medplum/fhirtypes';

/**
* Returns the ID portion of a reference.
* @param reference A FHIR reference.
* @returns The ID portion of a reference.
*/
export declare function resolveId(reference: Reference | undefined): string | undefined;
/**
* Returns true if the resource is a "ProfileResource".

@@ -18,0 +24,0 @@ * @param resource The FHIR resource.

{
"name": "@medplum/core",
"version": "0.4.0",
"version": "0.4.1",
"description": "Medplum TS/JS Library",

@@ -20,3 +20,3 @@ "author": "Medplum <hello@medplum.com>",

"devDependencies": {
"@medplum/fhirtypes": "0.4.0"
"@medplum/fhirtypes": "0.4.1"
},

@@ -23,0 +23,0 @@ "main": "dist/cjs/index.js",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc