emuhealth 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -1
- package/dist/api.d.ts +1 -1
- package/dist/api.js +471 -24
- package/dist/api.js.map +1 -1
- package/dist/{chunk-5PAJ6LLN.js → chunk-5CZOPZI6.js} +475 -24
- package/dist/chunk-5CZOPZI6.js.map +1 -0
- package/dist/{dist-UKXOY2NR.js → dist-2EW6JQLR.js} +3 -1
- package/dist/dist-2EW6JQLR.js.map +1 -0
- package/dist/dist-2J7ORJF2.js +2469 -0
- package/dist/dist-2J7ORJF2.js.map +1 -0
- package/dist/dist-7ZKCZXHQ.js +2480 -0
- package/dist/dist-7ZKCZXHQ.js.map +1 -0
- package/dist/dist-BSFGA454.js +5786 -0
- package/dist/dist-BSFGA454.js.map +1 -0
- package/dist/dist-CO7RIA5H.js +6856 -0
- package/dist/dist-CO7RIA5H.js.map +1 -0
- package/dist/{dist-IJ7LRDHX.js → dist-CUGOQPIQ.js} +3 -1
- package/dist/{dist-IJ7LRDHX.js.map → dist-CUGOQPIQ.js.map} +1 -1
- package/dist/{dist-WRDU25DF.js → dist-DGVBWEYK.js} +3 -1
- package/dist/dist-DGVBWEYK.js.map +1 -0
- package/dist/dist-E5YUT2ET.js +2724 -0
- package/dist/dist-E5YUT2ET.js.map +1 -0
- package/dist/dist-EYL5YC23.js +2901 -0
- package/dist/dist-EYL5YC23.js.map +1 -0
- package/dist/dist-HFJIIILH.js +2978 -0
- package/dist/dist-HFJIIILH.js.map +1 -0
- package/dist/{dist-6TPEFTAK.js → dist-HR2HAQAU.js} +3 -1
- package/dist/dist-HR2HAQAU.js.map +1 -0
- package/dist/dist-IIYEXRQ4.js +2850 -0
- package/dist/dist-IIYEXRQ4.js.map +1 -0
- package/dist/dist-K6DWZN23.js +6658 -0
- package/dist/dist-K6DWZN23.js.map +1 -0
- package/dist/dist-KAXCYBBO.js +7180 -0
- package/dist/dist-KAXCYBBO.js.map +1 -0
- package/dist/{dist-KQGIGONJ.js → dist-LIZK46HR.js} +3 -1
- package/dist/dist-LIZK46HR.js.map +1 -0
- package/dist/{dist-WDXPM6L6.js → dist-LZGD67E4.js} +3 -1
- package/dist/dist-LZGD67E4.js.map +1 -0
- package/dist/{dist-6OM56NLC.js → dist-M67TDUXQ.js} +3 -1
- package/dist/dist-M67TDUXQ.js.map +1 -0
- package/dist/{dist-4CPLP2NQ.js → dist-MZT7NDSQ.js} +3 -1
- package/dist/dist-MZT7NDSQ.js.map +1 -0
- package/dist/dist-NRPKESVU.js +1571 -0
- package/dist/dist-NRPKESVU.js.map +1 -0
- package/dist/dist-OC4HAYAN.js +2415 -0
- package/dist/dist-OC4HAYAN.js.map +1 -0
- package/dist/{dist-CLJBPXNS.js → dist-P6AKEZX2.js} +3 -1
- package/dist/dist-P6AKEZX2.js.map +1 -0
- package/dist/dist-PNIIJGYO.js +1327 -0
- package/dist/dist-PNIIJGYO.js.map +1 -0
- package/dist/dist-QG46WNU5.js +2871 -0
- package/dist/dist-QG46WNU5.js.map +1 -0
- package/dist/{dist-QUEHZ2IC.js → dist-R5KFITO6.js} +3 -1
- package/dist/dist-R5KFITO6.js.map +1 -0
- package/dist/{dist-TOCHFEDO.js → dist-RQOZSYQG.js} +9 -2
- package/dist/dist-RQOZSYQG.js.map +1 -0
- package/dist/{dist-MRCWT2JC.js → dist-RSDUQY6D.js} +3 -1
- package/dist/dist-RSDUQY6D.js.map +1 -0
- package/dist/{dist-RWIGUWMG.js → dist-S5QMZUHL.js} +3 -1
- package/dist/dist-S5QMZUHL.js.map +1 -0
- package/dist/{dist-AZA2TRAN.js → dist-SYNUHPGD.js} +3 -1
- package/dist/dist-SYNUHPGD.js.map +1 -0
- package/dist/dist-TBCWBCG3.js +6180 -0
- package/dist/dist-TBCWBCG3.js.map +1 -0
- package/dist/dist-THKXRTNS.js +6689 -0
- package/dist/dist-THKXRTNS.js.map +1 -0
- package/dist/{dist-HUDK42DK.js → dist-U4GQRGQO.js} +3 -1
- package/dist/dist-U4GQRGQO.js.map +1 -0
- package/dist/dist-UDWI7IO6.js +1108 -0
- package/dist/dist-UDWI7IO6.js.map +1 -0
- package/dist/dist-UXGG2BLX.js +1217 -0
- package/dist/dist-UXGG2BLX.js.map +1 -0
- package/dist/{dist-DWUKLYZG.js → dist-VWE6VC5Q.js} +3 -1
- package/dist/dist-VWE6VC5Q.js.map +1 -0
- package/dist/{dist-UFXXFP3R.js → dist-WQ3WATIG.js} +3 -1
- package/dist/dist-WQ3WATIG.js.map +1 -0
- package/dist/{dist-JJIQYFJ4.js → dist-X65VP455.js} +452 -105
- package/dist/dist-X65VP455.js.map +1 -0
- package/dist/{dist-65JH5Z2J.js → dist-X7XRD6G3.js} +376 -45
- package/dist/dist-X7XRD6G3.js.map +1 -0
- package/dist/dist-XFS53WXQ.js +5929 -0
- package/dist/dist-XFS53WXQ.js.map +1 -0
- package/dist/{dist-DVBHDPLP.js → dist-YUXZ2AZV.js} +3 -1
- package/dist/dist-YUXZ2AZV.js.map +1 -0
- package/dist/{dist-JAQBQLBJ.js → dist-YYYAIE7M.js} +3 -1
- package/dist/dist-YYYAIE7M.js.map +1 -0
- package/dist/{dist-MD4P4BXL.js → dist-ZTZM5RRL.js} +3 -1
- package/dist/dist-ZTZM5RRL.js.map +1 -0
- package/dist/index.js +141 -3
- package/dist/index.js.map +1 -1
- package/dist/project-worker.js +2 -2
- package/dist/project-worker.js.map +1 -1
- package/package.json +35 -16
- package/dist/chunk-5PAJ6LLN.js.map +0 -1
- package/dist/dist-4CPLP2NQ.js.map +0 -1
- package/dist/dist-65JH5Z2J.js.map +0 -1
- package/dist/dist-6OM56NLC.js.map +0 -1
- package/dist/dist-6TPEFTAK.js.map +0 -1
- package/dist/dist-AZA2TRAN.js.map +0 -1
- package/dist/dist-CLJBPXNS.js.map +0 -1
- package/dist/dist-DVBHDPLP.js.map +0 -1
- package/dist/dist-DWUKLYZG.js.map +0 -1
- package/dist/dist-HUDK42DK.js.map +0 -1
- package/dist/dist-JAQBQLBJ.js.map +0 -1
- package/dist/dist-JJIQYFJ4.js.map +0 -1
- package/dist/dist-KQGIGONJ.js.map +0 -1
- package/dist/dist-MD4P4BXL.js.map +0 -1
- package/dist/dist-MRCWT2JC.js.map +0 -1
- package/dist/dist-QUEHZ2IC.js.map +0 -1
- package/dist/dist-RWIGUWMG.js.map +0 -1
- package/dist/dist-TOCHFEDO.js.map +0 -1
- package/dist/dist-UFXXFP3R.js.map +0 -1
- package/dist/dist-UKXOY2NR.js.map +0 -1
- package/dist/dist-WDXPM6L6.js.map +0 -1
- package/dist/dist-WRDU25DF.js.map +0 -1
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ All services listen on IPv4 loopback (`127.0.0.1`) by default. No config file ne
|
|
|
37
37
|
|
|
38
38
|
Health and life science services use a fixed range starting at `http://localhost:4100`. Each health service keeps its port no matter which other services run or how many upstream services exist.
|
|
39
39
|
|
|
40
|
-
- **FHIR R4** on `http://localhost:4100` (create, read, update, JSON Patch, delete, versioning, `_history`, search, batch and transaction Bundles, and a CapabilityStatement at `/metadata`, `Patient/$everything`, Bulk Data `$export` with NDJSON output; starts with 5 generated synthetic patients; SMART App Launch with patient and practitioner pickers, an EHR launch simulator, PKCE, SMART Backend Services with `private_key_jwt`, and scope and patient enforcement for presented tokens; terminology fixtures with `CodeSystem/$lookup` and `$validate-code`; browse it at `/_inspector`)
|
|
40
|
+
- **FHIR R4** on `http://localhost:4100` (create, read, update, JSON Patch, delete, versioning, `_history`, search, batch and transaction Bundles, and a CapabilityStatement at `/metadata`, `Patient/$everything`, Bulk Data `$export` with NDJSON output; starts with 5 generated synthetic patients; SMART App Launch with patient and practitioner pickers, an EHR launch simulator, PKCE, SMART Backend Services with `private_key_jwt`, and scope and patient enforcement for presented tokens; terminology fixtures with `CodeSystem/$lookup` and `$validate-code`; R4B or R5 instead of R4 with `fhir.fhirVersion`, including `$versions` and `fhirVersion` media type negotiation; browse it at `/_inspector`)
|
|
41
41
|
- **Epic** on `http://localhost:4101` (the FHIR R4 server under Epic's `/api/FHIR/R4` base, OAuth 2.0 at `/oauth2/authorize` and `/oauth2/token` with SMART App Launch and Backend Services, `__epic.dstu2.patient` in token responses, Epic's informational OperationOutcome on empty searches, and Schedules and Slots with `Appointment/$find` and `Appointment/$book`)
|
|
42
42
|
- **openFDA** on `http://localhost:4102` (`/drug/label.json`, `/drug/event.json`, and `/drug/enforcement.json`, `/device/enforcement.json`, `/food/enforcement.json` recalls with the openFDA query language: `search` with fields, phrases, `.exact`, ranges, `AND`/`OR`/`NOT`, plus `sort`, `count`, `limit`, and `skip`; synthetic labels, adverse event reports, and recalls; browse them at `/_inspector`)
|
|
43
43
|
- **RxNav** on `http://localhost:4103` (the RxNorm REST API under `/REST`: `rxcui`, `drugs`, `properties`, `related`, `allrelated`, `ndcs`, `approximateTerm`, `spellingsuggestions`, and `displaynames`, with or without `.json`, over a verified RxNorm subset plus concepts you add; browse it at `/_inspector`)
|
|
@@ -46,6 +46,25 @@ Health and life science services use a fixed range starting at `http://localhost
|
|
|
46
46
|
- **NPPES NPI Registry** on `http://localhost:4106` (`/api/?version=2.1` with `number`, `enumeration_type`, names and organization names with `*` wildcards, `taxonomy_description`, `city`, `state`, `postal_code`, `limit`, and `skip`, and the registry's `Errors` responses; synthetic providers whose NPIs have valid check digits but start with 0, so they never match a real provider; browse them at `/_inspector`)
|
|
47
47
|
- **Benchling** on `http://localhost:4107` (API v2 under `/api/v2` with an API key as the Basic auth username or a client credentials token: DNA and AA sequences with filters, `nextToken` paging, create, update, archive, and registration through `registries/{id}:register-entities` and `tasks`, notebook `entries`, `assay-results` with schemas, `events`, and Svix-signed webhooks; a synthetic tenant; browse it at `/_inspector`)
|
|
48
48
|
- **REDCap** on `http://localhost:4108` (`POST /api/` with a token and `content`: `version`, `project`, `metadata`, `instrument`, `exportFieldNames`, and `record` export with `records`, `fields`, `forms`, `filterLogic`, labels, and flat or EAV output, import with validation against the data dictionary, and delete, in JSON, CSV, or XML; a synthetic project; browse it at `/_inspector`)
|
|
49
|
+
- **Oracle Health (Cerner)** on `http://localhost:4109` (the FHIR R4 server under the Millennium tenant path `/r4/5e7e0000-0000-4000-8000-000000000001`, provider and patient persona OAuth endpoints under `/tenants/{tenant}/protocols/oauth2/profiles/smart-v1`, system accounts with `client_credentials` and a client secret, `tenant` and `username` in token responses, and Millennium's required search parameters)
|
|
50
|
+
- **athenahealth** on `http://localhost:4110` (OAuth client credentials at `/oauth2/v1/token`, the proprietary REST API under `/v1/{practiceid}` for departments, providers, patients, chart problems, allergies, medications, and vitals, and open and booked appointments with booking and cancellation, plus FHIR R4 under `/fhir/r4` with `ah-practice`, all over the same synthetic records)
|
|
51
|
+
- **CMS Blue Button 2.0** on `http://localhost:4111` (patient access OAuth at `/v2/o/authorize/` and `/v2/o/token/` with a beneficiary picker, `/v2/connect/userinfo`, and the read-only FHIR R4 API at `/v2/fhir` with Patient, Coverage for Parts A, B, and D, and ExplanationOfBenefit claims for synthetic Medicare beneficiaries)
|
|
52
|
+
- **CDS Hooks** on `http://localhost:4112` (a simulated EHR that reads your CDS service's discovery document and fires `patient-view`, `order-sign`, `order-select`, or `encounter-start` with a signed JWT, context, prefetch, and a FHIR token from its own synthetic FHIR server, then checks the cards against the CDS Hooks rules; plus sample CDS services at `/cds-services`; fire hooks from `/_inspector`)
|
|
53
|
+
- **Redox** on `http://localhost:4113` (API key and OAuth authentication, `POST /endpoint` for Redox JSON data models such as PatientSearch, ClinicalSummary, PatientAdmin, Scheduling, and Results with Redox's `Meta.Errors`, and EHR events delivered to your destinations with the `verification-token` header and Redox's challenge handshake, over synthetic records)
|
|
54
|
+
- **AWS HealthLake** on `http://localhost:4114` (the HealthLake control plane for FHIR datastores and import and export jobs, and a FHIR R4 data plane per datastore at `/datastore/{id}/r4`, with real SigV4 signature checks so the AWS SDKs and CLI work against it; starts with one datastore preloaded with synthetic data)
|
|
55
|
+
- **Google Cloud Healthcare API** on `http://localhost:4115` (datasets and FHIR stores under `/v1/projects/{project}/locations/{location}`, with long-running operations and Google error shapes, and a FHIR R4 API per store that honors `enableUpdateCreate`; starts with a preloaded synthetic FHIR store)
|
|
56
|
+
- **Azure Health Data Services** on `http://localhost:4116` (FHIR services per workspace at `/{workspace}-{fhirservice}`, each a full FHIR R4 server, behind Entra ID Bearer tokens that are verified against the emuhealth Microsoft emulator, or any issuer, when `azurehealth.entra` is set; starts with `synthetic-fhir`, preloaded)
|
|
57
|
+
- **Stedi** on `http://localhost:4117` (the 2024-04-01 JSON clearinghouse APIs: eligibility (270/271) with 271-style benefits, professional claims (837P) that are adjudicated at once, claim status (276/277), 835 ERA reports, transactions, and payers, with synthetic payers and members)
|
|
58
|
+
- **Availity** on `http://localhost:4118` (OAuth client credentials, the payer list and configurations, asynchronous Coverages (270/271) and Claim Statuses (276/277) that you poll until `statusCode` 4, Service Reviews (278), and the Demo plan's `X-Api-Mock-Scenario-ID` scenarios, with synthetic payers, members, and claims)
|
|
59
|
+
- **Dexcom** on `http://localhost:4119` (OAuth 2.0 at `/v2/oauth2/login` and `/v2/oauth2/token`, and API v3 estimated glucose values every 5 minutes, events, devices, alerts, calibrations, and data range for synthetic G7 users)
|
|
60
|
+
- **Fitbit** on `http://localhost:4120` (OAuth 2.0 with a consent page, and the Web API for profile, daily activity and time series, heart rate with intraday data, sleep stages, and weight, with Fitbit's scopes, error envelope, and rate limit headers, for synthetic users)
|
|
61
|
+
- **Oura** on `http://localhost:4121` (OAuth 2.0 with a consent page, and API v2 `/v2/usercollection` documents: personal info, daily sleep, activity, readiness, and SpO2 with contributors and scores, sleep periods, and heart rate, with `next_token` paging and scope checks, for synthetic users)
|
|
62
|
+
- **Withings** on `http://localhost:4122` (OAuth 2.0 with a consent page and `requesttoken`, Measure `getmeas` for weight, blood pressure, heart pulse, and SpO2, `getactivity`, Sleep `getsummary`, `getdevice`, and Notify subscriptions that call your callback URL, with Withings' status codes in HTTP 200 responses, for synthetic users)
|
|
63
|
+
- **Terra** on `http://localhost:4123` (widget sessions and a connect page that link synthetic users to providers such as Fitbit, Oura, Withings, and Dexcom, normalized daily, sleep, activity, and body data returned inline or sent to your webhook, and `terra-signature` signed auth, deauth, and data events)
|
|
64
|
+
- **DICOMweb** on `http://localhost:4124` (QIDO-RS search of studies, series, and instances; WADO-RS retrieve of Part 10 instances, `application/dicom+json` metadata, frames, bulk data, and rendered PNGs; STOW-RS store with the standard response; synthetic 64x64 CT and MR phantoms with `2.25` UIDs; browse them at `/_inspector`)
|
|
65
|
+
- **HL7 v2** on `http://localhost:4125` with an MLLP listener on `localhost:2575` (original mode ACKs for any message; ADT admits, transfers, discharges, updates, and merges, ORU results, and ORM and OML orders applied to a synthetic patient registry; `POST /messages` to send over HTTP, `/samples/adt-a01` and others for synthetic messages, and `POST /send` to test your own MLLP receiver; browse messages and patients at `/_inspector`)
|
|
66
|
+
- **Veeva Vault** on `http://localhost:4126` (REST API under `/api/{version}`: `POST /auth` sessions, Vault object records with create, upsert, update, and delete in JSON or CSV, documents with versions and files, object and document metadata, and VQL queries with relationship fields and paging; synthetic products, studies, sites, countries, and trial documents; browse them at `/_inspector`)
|
|
67
|
+
- **Medidata Rave** on `http://localhost:4127` (Rave Web Services under `/RaveWebServices` with HTTP Basic auth: study lists, CRF metadata as ODM, subjects with status and links, ODM clinical data datasets by study, subject, and form, `ClinicalAuditRecords` paging, and `PostODMClinicalData` imports with Rave's `Response` format; synthetic studies with demographics, vital signs, and adverse events; browse subjects at `/_inspector`)
|
|
49
68
|
|
|
50
69
|
Stripe webhooks configured with a secret include a `Stripe-Signature` header signed over the timestamp and raw request body.
|
|
51
70
|
|
package/dist/api.d.ts
CHANGED
|
@@ -249,7 +249,7 @@ declare function defineConfig<Definitions extends Record<string, EmulatorDefinit
|
|
|
249
249
|
tokens?: EmulateConfig["tokens"];
|
|
250
250
|
}): typeof config;
|
|
251
251
|
|
|
252
|
-
declare const HEALTH_SERVICE_NAME_LIST: readonly ["fhir", "epic", "openfda", "rxnav", "clinicaltrials", "ncbi", "nppes", "benchling", "redcap"];
|
|
252
|
+
declare const HEALTH_SERVICE_NAME_LIST: readonly ["fhir", "epic", "openfda", "rxnav", "clinicaltrials", "ncbi", "nppes", "benchling", "redcap", "cerner", "athena", "bluebutton", "cdshooks", "redox", "healthlake", "gcphealthcare", "azurehealth", "stedi", "availity", "dexcom", "fitbit", "oura", "withings", "terra", "dicomweb", "hl7v2", "veeva", "rave"];
|
|
253
253
|
type HealthServiceName = (typeof HEALTH_SERVICE_NAME_LIST)[number];
|
|
254
254
|
|
|
255
255
|
declare const SERVICE_NAME_LIST: readonly ["vercel", "github", "google", "slack", "apple", "microsoft", "okta", "aws", "resend", "stripe", "mongoatlas", "clerk", "linear", "twilio"];
|