@medplum/mock 2.0.20 → 2.0.21

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.cjs","sources":["../../src/mocks/accesspolicy.ts","../../src/mocks/alice.ts","../../src/mocks/bot.ts","../../src/mocks/questionnaire.ts","../../src/mocks/simpsons.ts","../../src/mocks/subscription.ts","../../src/mocks/valueset.ts","../../src/mocks/workflow.ts","../../src/mocks/project.ts","../../src/mocks/smart.ts","../../src/client.ts"],"sourcesContent":["import { AccessPolicy, UserConfiguration, ValueSet } from '@medplum/fhirtypes';\n\nexport const ExampleAccessPolicy: AccessPolicy = {\n resourceType: 'AccessPolicy',\n id: '123',\n name: 'Example Access Policy',\n};\n\nexport const ExampleStatusValueSet: ValueSet = {\n resourceType: 'ValueSet',\n id: 'example-statuses',\n compose: {\n include: [\n {\n concept: [\n { code: 'ORDERED' },\n { code: 'SENT_TO_CUSTOMER' },\n { code: 'SENT_BACK_TO_LAB' },\n { code: 'LAB_PROCESSED' },\n { code: 'LAB_COMPLETE' },\n ],\n },\n ],\n },\n};\n\nexport const ExampleUserConfiguration: UserConfiguration = {\n resourceType: 'UserConfiguration',\n id: '123',\n name: 'Example User Configuration',\n option: [\n {\n id: 'statusValueSet',\n valueString: 'ValueSet/example-statuses',\n },\n ],\n};\n","import { createReference } from '@medplum/core';\nimport { Organization, Practitioner, Schedule, Slot } from '@medplum/fhirtypes';\n\nexport const TestOrganization: Organization = {\n resourceType: 'Organization',\n id: '123',\n meta: {\n versionId: '1',\n },\n name: 'Test Organization',\n};\n\nexport const DifferentOrganization: Organization = {\n resourceType: 'Organization',\n id: '456',\n meta: {\n versionId: '1',\n },\n name: 'Different',\n};\n\nexport const DrAliceSmith: Practitioner = {\n resourceType: 'Practitioner',\n id: '123',\n meta: {\n versionId: '2',\n lastUpdated: '2021-01-02T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n name: [\n {\n given: ['Alice'],\n family: 'Smith',\n },\n ],\n photo: [\n {\n contentType: 'image/png',\n url: 'https://www.medplum.com/img/cdc-femaledoc.png',\n },\n ],\n};\n\nexport const DrAliceSmithPreviousVersion: Practitioner = {\n resourceType: 'Practitioner',\n id: '123',\n meta: {\n versionId: '1',\n lastUpdated: '2021-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n name: [{ given: ['Medplum'], family: 'Admin' }],\n};\n\nexport const DrAliceSmithSchedule: Schedule = {\n resourceType: 'Schedule',\n id: 'alice-smith-schedule',\n actor: [\n {\n reference: 'Practitioner/123',\n display: 'Dr. Alice Smith',\n },\n ],\n};\n\nexport const DrAliceSmithSlots: Slot[] = (() => {\n const schedule = createReference(DrAliceSmithSchedule);\n const result: Slot[] = [];\n const slotDate = new Date();\n for (let day = 0; day < 60; day++) {\n for (const hour of [9, 10, 11, 13, 14, 15]) {\n slotDate.setHours(hour, 0, 0, 0);\n result.push({\n resourceType: 'Slot',\n id: `slot-${day}-${hour}`,\n start: slotDate.toISOString(),\n schedule,\n });\n }\n slotDate.setDate(slotDate.getDate() + 1);\n }\n return result;\n})();\n","import { Bot, ClientApplication } from '@medplum/fhirtypes';\n\nexport const ExampleBot: Bot = {\n resourceType: 'Bot',\n id: '123',\n name: 'Test Bot',\n code: 'console.log(\"hello world\");',\n};\n\nexport const ExampleClient: ClientApplication = {\n resourceType: 'ClientApplication',\n id: '123',\n name: 'Test Client',\n};\n","import { Questionnaire, QuestionnaireResponse } from '@medplum/fhirtypes';\n\nexport const ExampleQuestionnaire: Questionnaire = {\n resourceType: 'Questionnaire',\n id: '123',\n name: 'Vitals',\n title: 'Vitals',\n subjectType: ['Patient'],\n item: [\n {\n linkId: '1',\n text: 'First question',\n type: 'string',\n },\n ],\n};\n\nexport const ExampleQuestionnaireResponse: QuestionnaireResponse = {\n resourceType: 'QuestionnaireResponse',\n id: '123',\n questionnaire: 'Questionnaire/123',\n subject: {\n reference: 'Patient/123',\n },\n source: {\n reference: 'Practitioner/123',\n },\n};\n","import { createReference } from '@medplum/core';\nimport {\n Address,\n Communication,\n DiagnosticReport,\n Encounter,\n Group,\n Media,\n Observation,\n Patient,\n RelatedPerson,\n ServiceRequest,\n Specimen,\n} from '@medplum/fhirtypes';\nimport { DrAliceSmith } from './alice';\n\nconst SIMPSONS_ADDRESS: Address = {\n use: 'home',\n line: ['742 Evergreen Terrace'],\n city: 'Springfield',\n state: 'IL',\n postalCode: '12345',\n};\n\nexport const LisaSimpson: Patient = {\n resourceType: 'Patient',\n id: 'lisa-simpson',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n birthDate: '1981-05-09',\n name: [\n {\n given: ['Lisa'],\n family: 'Simpson',\n },\n ],\n photo: [\n {\n contentType: 'image/jpeg',\n url: 'https://example.com/picture.jpg',\n },\n ],\n contact: [\n {\n name: { given: ['Homer'], family: 'Simpson' },\n address: {\n use: 'home',\n line: ['742 Evergreen Terrace'],\n city: 'Springfield',\n state: 'IL',\n postalCode: '12345',\n },\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-1239',\n },\n {\n system: 'email',\n use: 'home',\n value: 'homer@thesimpsons.com',\n },\n ],\n },\n {\n name: { given: ['Marge'], family: 'Simpson' },\n address: {\n use: 'home',\n line: ['742 Evergreen Terrace'],\n city: 'Springfield',\n state: 'IL',\n postalCode: '12345',\n },\n telecom: [\n {\n system: 'phone',\n use: 'mobile',\n value: '139-1928',\n },\n {\n system: 'email',\n use: 'home',\n value: 'marge@thesimpsons.com',\n },\n ],\n },\n ],\n\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-1239',\n },\n {\n system: 'email',\n use: 'home',\n value: 'lisa@thesimpsons.com',\n },\n ],\n};\n\nexport const BartSimpson: Patient = {\n resourceType: 'Patient',\n id: '555',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n birthDate: '1979-12-17',\n name: [\n {\n given: ['Bart'],\n family: 'Simpson',\n },\n ],\n photo: [\n {\n contentType: 'image/jpeg',\n url: 'https://example.com/picture.jpg',\n },\n ],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-1239',\n },\n {\n system: 'email',\n use: 'home',\n value: 'bart@thesimpsons.com',\n },\n ],\n};\n\nexport const HomerLisaRelatedPerson: RelatedPerson = {\n resourceType: 'RelatedPerson',\n id: 'homer-lisa-related-person',\n patient: createReference(LisaSimpson),\n address: [SIMPSONS_ADDRESS],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-7334',\n },\n {\n system: 'email',\n use: 'home',\n value: 'chunkylover53@aol.com',\n },\n ],\n relationship: [\n {\n text: 'father',\n coding: [{ system: 'http://terminology.hl7.org/CodeSystem/v3-RoleCode', code: 'FTH', display: 'father' }],\n },\n ],\n};\n\nexport const HomerBartRelatedPerson: RelatedPerson = {\n resourceType: 'RelatedPerson',\n id: 'homer-bart-related-person',\n patient: createReference(BartSimpson),\n address: [SIMPSONS_ADDRESS],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-7334',\n },\n {\n system: 'email',\n use: 'home',\n value: 'chunkylover53@aol.com',\n },\n ],\n relationship: [\n {\n text: 'father',\n coding: [{ system: 'http://terminology.hl7.org/CodeSystem/v3-RoleCode', code: 'FTH', display: 'father' }],\n },\n ],\n};\n\nexport const HomerSimpson: Patient = {\n resourceType: 'Patient',\n id: '123',\n gender: 'male',\n meta: {\n versionId: '2',\n lastUpdated: '2020-01-02T00:00:00.000Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n identifier: [\n { system: 'abc', value: '123' },\n { system: 'def', value: '456' },\n ],\n active: true,\n birthDate: '1956-05-12',\n name: [\n {\n given: ['Homer'],\n family: 'Simpson',\n },\n ],\n photo: [\n {\n contentType: 'image/png',\n url: 'https://www.medplum.com/img/homer-simpson.png',\n },\n ],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-7334',\n },\n {\n system: 'email',\n use: 'home',\n value: 'chunkylover53@aol.com',\n },\n ],\n address: [\n {\n use: 'home',\n line: ['742 Evergreen Terrace'],\n city: 'Springfield',\n state: 'IL',\n postalCode: '12345',\n },\n ],\n link: [\n { other: createReference(HomerLisaRelatedPerson), type: 'seealso' },\n { other: createReference(HomerBartRelatedPerson), type: 'seealso' },\n ],\n};\n\nexport const MargeSimpson: Patient = {\n resourceType: 'Patient',\n id: 'marge-simpson',\n gender: 'female',\n\n active: true,\n birthDate: '1961-08-23',\n name: [\n {\n given: ['Marge'],\n family: 'Simpson',\n },\n ],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-7334',\n },\n {\n system: 'email',\n use: 'home',\n value: 'margesimpson@aol.com',\n },\n ],\n address: [SIMPSONS_ADDRESS],\n};\n\nexport const HomerSimpsonPreviousVersion: Patient = {\n resourceType: 'Patient',\n id: '123',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-01T00:00:00.000Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n name: [\n {\n given: ['Homer'],\n family: 'Simpson',\n },\n ],\n photo: [\n {\n contentType: 'image/png',\n url: 'https://www.medplum.com/img/homer-simpson.png',\n },\n ],\n};\n\nexport const HomerEncounter: Encounter = {\n resourceType: 'Encounter',\n id: '123',\n meta: {\n versionId: '456',\n lastUpdated: '2020-01-01T00:00:00.000Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n};\n\nexport const HomerCommunication: Communication = {\n resourceType: 'Communication',\n id: '123',\n meta: {\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n encounter: createReference(HomerEncounter),\n payload: [\n {\n contentString: 'Hello world',\n },\n ],\n};\n\nexport const HomerMedia: Media = {\n resourceType: 'Media',\n id: '123',\n meta: {\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n encounter: createReference(HomerEncounter),\n content: {\n contentType: 'text/plain',\n url: 'https://example.com/test.txt',\n },\n};\n\nexport const HomerObservation1: Observation = {\n resourceType: 'Observation',\n id: '1',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 1',\n },\n valueString: 'test',\n};\n\nexport const HomerObservation2: Observation = {\n resourceType: 'Observation',\n id: '2',\n status: 'corrected',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 2',\n },\n valueQuantity: {\n value: 20,\n unit: 'x',\n },\n referenceRange: [\n {\n low: {\n value: 10,\n },\n },\n ],\n};\n\nexport const HomerObservation3: Observation = {\n resourceType: 'Observation',\n id: '3',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 3',\n },\n valueQuantity: {\n value: 30,\n unit: 'x',\n },\n referenceRange: [\n {\n high: {\n value: 50,\n },\n },\n ],\n};\n\nexport const HomerObservation4: Observation = {\n resourceType: 'Observation',\n id: '4',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 4',\n },\n valueQuantity: {\n value: 50,\n unit: 'x',\n comparator: '>',\n },\n referenceRange: [\n {\n low: {\n value: 10,\n unit: 'x',\n },\n high: {\n value: 50,\n unit: 'x',\n },\n },\n ],\n interpretation: [\n {\n text: 'HIGH',\n },\n ],\n};\n\nexport const HomerObservation5: Observation = {\n resourceType: 'Observation',\n id: '5',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 5',\n },\n valueQuantity: {\n value: 100,\n unit: 'x',\n },\n referenceRange: [{}],\n interpretation: [{}],\n};\n\nexport const HomerObservation6: Observation = {\n resourceType: 'Observation',\n id: '6',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 6',\n },\n component: [\n {\n valueQuantity: {\n value: 110,\n unit: 'mmHg',\n system: 'http://unitsofmeasure.org',\n },\n },\n {\n valueQuantity: {\n value: 75,\n unit: 'mmHg',\n system: 'http://unitsofmeasure.org',\n },\n },\n ],\n};\n\nexport const HomerObservation7: Observation = {\n resourceType: 'Observation',\n id: '7',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 7',\n },\n component: [\n {\n valueQuantity: {\n value: 1000,\n unit: 'mg/dL',\n system: 'http://unitsofmeasure.org',\n },\n },\n ],\n interpretation: [\n {\n coding: [\n {\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n code: 'HH',\n display: 'Critical high',\n },\n ],\n },\n ],\n};\n\nexport const HomerObservation8: Observation = {\n resourceType: 'Observation',\n id: '8',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 8',\n },\n component: [\n {\n valueString: 'REACTIVE',\n },\n ],\n referenceRange: [\n {\n text: 'NEGATIVE',\n },\n ],\n interpretation: [\n {\n coding: [\n {\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n code: 'RR',\n display: 'Reactive',\n },\n ],\n },\n ],\n};\n\nexport const HomerSimpsonSpecimen: Specimen = {\n id: '123',\n resourceType: 'Specimen',\n subject: createReference(HomerSimpson),\n collection: {\n collectedDateTime: '2020-01-01T12:00:00Z',\n },\n note: [\n { text: 'Specimen hemolyzed. Results may be affected.' },\n { text: 'Specimen lipemic. Results may be affected.' },\n ],\n};\n\nexport const HomerServiceRequest: ServiceRequest = {\n resourceType: 'ServiceRequest',\n id: '123',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n identifier: [\n {\n system: 'https://example.com',\n value: '9001',\n },\n ],\n code: {\n coding: [\n {\n system: 'http://snomed.info/sct',\n code: 'SERVICE_REQUEST_CODE',\n },\n ],\n },\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n status: 'active',\n orderDetail: [\n {\n text: 'ORDERED',\n },\n ],\n specimen: [createReference(HomerSimpsonSpecimen)],\n authoredOn: '2020-01-01T12:00:00Z',\n};\n\nexport const HomerDiagnosticReport: DiagnosticReport = {\n resourceType: 'DiagnosticReport',\n id: '123',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-02T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n subject: createReference(HomerSimpson),\n basedOn: [createReference(HomerServiceRequest)],\n specimen: [createReference(HomerSimpsonSpecimen)],\n resultsInterpreter: [createReference(DrAliceSmith)],\n result: [\n createReference(HomerObservation1),\n createReference(HomerObservation2),\n createReference(HomerObservation3),\n createReference(HomerObservation4),\n createReference(HomerObservation5),\n createReference(HomerObservation6),\n createReference(HomerObservation7),\n createReference(HomerObservation8),\n ],\n};\n\nexport const SimpsonsFamily: Group = {\n resourceType: 'Group',\n id: 'simpsons-family',\n type: 'person',\n actual: true,\n member: [\n { entity: createReference(HomerSimpson) },\n { entity: createReference(MargeSimpson) },\n { entity: createReference(BartSimpson) },\n { entity: createReference(LisaSimpson) },\n ],\n};\n","import { AuditEvent, Subscription } from '@medplum/fhirtypes';\n\nexport const ExampleSubscription: Subscription = {\n resourceType: 'Subscription',\n id: '123',\n meta: {\n versionId: '456',\n },\n};\n\nexport const ExampleAuditEvent: AuditEvent = {\n resourceType: 'AuditEvent',\n id: '123',\n meta: {\n lastUpdated: new Date().toISOString(),\n versionId: '456',\n author: {\n reference: 'Practitioner/123',\n },\n },\n};\n","import { ValueSet } from '@medplum/fhirtypes';\n\nexport const exampleValueSet: ValueSet = {\n resourceType: 'ValueSet',\n expansion: {\n contains: [\n {\n system: 'x',\n code: 'test-code',\n display: 'Test Display',\n },\n ],\n },\n};\n","import { createReference, getReferenceString } from '@medplum/core';\nimport { PlanDefinition, Questionnaire, QuestionnaireResponse, RequestGroup, Task } from '@medplum/fhirtypes';\nimport { DrAliceSmith } from './alice';\nimport { HomerSimpson } from './simpsons';\n\nexport const ExampleWorkflowQuestionnaire1: Questionnaire = {\n resourceType: 'Questionnaire',\n id: 'workflow-questionnaire-1',\n name: 'Patient Registration',\n title: 'Patient Registration',\n subjectType: ['Patient'],\n item: [\n {\n linkId: '1',\n text: 'First question',\n type: 'string',\n },\n ],\n};\n\nexport const ExampleWorkflowQuestionnaire2: Questionnaire = {\n resourceType: 'Questionnaire',\n id: 'workflow-questionnaire-2',\n name: 'Surgery History',\n title: 'Surgery History',\n subjectType: ['Patient'],\n item: [\n {\n linkId: '1',\n text: 'First question',\n type: 'string',\n },\n ],\n};\n\nexport const ExampleWorkflowQuestionnaire3: Questionnaire = {\n resourceType: 'Questionnaire',\n id: 'workflow-questionnaire-3',\n name: 'Family Health History',\n title: 'Family Health History',\n subjectType: ['Patient'],\n item: [\n {\n linkId: '1',\n text: 'First question',\n type: 'string',\n },\n ],\n};\n\nexport const ExampleWorkflowPlanDefinition: PlanDefinition = {\n resourceType: 'PlanDefinition',\n id: 'workflow-plan-definition-1',\n title: 'Example Plan Definition',\n action: [\n {\n title: ExampleWorkflowQuestionnaire1.title,\n definitionCanonical: getReferenceString(ExampleWorkflowQuestionnaire1),\n },\n {\n title: ExampleWorkflowQuestionnaire2.title,\n definitionCanonical: getReferenceString(ExampleWorkflowQuestionnaire2),\n },\n {\n title: ExampleWorkflowQuestionnaire3.title,\n definitionCanonical: getReferenceString(ExampleWorkflowQuestionnaire3),\n },\n ],\n};\n\nexport const ExampleWorkflowQuestionnaireResponse1: QuestionnaireResponse = {\n resourceType: 'QuestionnaireResponse',\n id: 'workflow-questionnaire-response-1',\n questionnaire: getReferenceString(ExampleWorkflowQuestionnaire1),\n subject: createReference(HomerSimpson),\n source: createReference(HomerSimpson),\n};\n\n// Based on: http://build.fhir.org/ig/HL7/sdc/Task-example.json.html\nexport const ExampleWorkflowTask1: Task = {\n resourceType: 'Task',\n id: 'workflow-task-1',\n status: 'completed',\n meta: { author: createReference(HomerSimpson) },\n requester: createReference(DrAliceSmith),\n input: [{ valueReference: createReference(ExampleWorkflowQuestionnaire1) }],\n output: [{ valueReference: createReference(ExampleWorkflowQuestionnaireResponse1) }],\n};\n\nexport const ExampleWorkflowTask2: Task = {\n resourceType: 'Task',\n id: 'workflow-task-2',\n status: 'requested',\n meta: { author: createReference(DrAliceSmith) },\n requester: createReference(DrAliceSmith),\n input: [{ valueReference: createReference(ExampleWorkflowQuestionnaire2) }],\n};\n\nexport const ExampleWorkflowTask3: Task = {\n resourceType: 'Task',\n id: 'workflow-task-3',\n status: 'requested',\n meta: { author: createReference(DrAliceSmith) },\n requester: createReference(DrAliceSmith),\n input: [{ valueReference: createReference(ExampleWorkflowQuestionnaire3) }],\n};\n\nexport const ExampleWorkflowRequestGroup: RequestGroup = {\n resourceType: 'RequestGroup',\n id: 'workflow-request-group-1',\n instantiatesCanonical: [getReferenceString(ExampleWorkflowPlanDefinition)],\n status: 'active',\n action: [\n {\n title: ExampleWorkflowQuestionnaire1.title,\n resource: createReference(ExampleWorkflowTask1),\n },\n {\n title: ExampleWorkflowQuestionnaire2.title,\n resource: createReference(ExampleWorkflowTask2),\n },\n {\n title: ExampleWorkflowQuestionnaire3.title,\n resource: createReference(ExampleWorkflowTask3),\n },\n ],\n};\n","import { createReference } from '@medplum/core';\nimport { Project, ProjectMembership } from '@medplum/fhirtypes';\nimport { DrAliceSmith } from './alice';\n\nexport const TestProject: Project = {\n resourceType: 'Project',\n id: '123',\n name: 'Project 123',\n};\n\nexport const TestProjectMembersihp: ProjectMembership = {\n resourceType: 'ProjectMembership',\n id: '456',\n project: createReference(TestProject),\n profile: createReference(DrAliceSmith),\n};\n","import { ClientApplication } from '@medplum/fhirtypes';\n\nexport const ExampleSmartClientApplication: ClientApplication = {\n resourceType: 'ClientApplication',\n id: 'smart-client-app',\n name: 'Inferno Client',\n description: 'Client application used for Inferno ONC compliance testing',\n redirectUri: 'https://inferno.healthit.gov/suites/custom/smart/redirect',\n launchUri: 'https://inferno.healthit.gov/suites/custom/smart/launch',\n};\n","import {\n allOk,\n badRequest,\n getStatus,\n indexStructureDefinition,\n isOk,\n LoginState,\n MedplumClient,\n MedplumClientOptions,\n OperationOutcomeError,\n ProfileResource,\n} from '@medplum/core';\nimport { FhirRequest, FhirRouter, HttpMethod, MemoryRepository } from '@medplum/fhir-router';\nimport { Binary, Resource, SearchParameter, StructureDefinition, UserConfiguration } from '@medplum/fhirtypes';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n/** @ts-ignore */\nimport type { CustomTableLayout, TDocumentDefinitions, TFontDictionary } from 'pdfmake/interfaces';\nimport {\n BartSimpson,\n DifferentOrganization,\n DrAliceSmith,\n DrAliceSmithPreviousVersion,\n DrAliceSmithSchedule,\n DrAliceSmithSlots,\n ExampleBot,\n ExampleClient,\n ExampleQuestionnaire,\n ExampleQuestionnaireResponse,\n ExampleSubscription,\n exampleValueSet,\n HomerCommunication,\n HomerDiagnosticReport,\n HomerEncounter,\n HomerMedia,\n HomerObservation1,\n HomerObservation2,\n HomerObservation3,\n HomerObservation4,\n HomerObservation5,\n HomerObservation6,\n HomerObservation7,\n HomerObservation8,\n HomerServiceRequest,\n HomerSimpson,\n HomerSimpsonPreviousVersion,\n HomerSimpsonSpecimen,\n TestOrganization,\n} from './mocks';\nimport { ExampleAccessPolicy, ExampleStatusValueSet, ExampleUserConfiguration } from './mocks/accesspolicy';\nimport { TestProject, TestProjectMembersihp } from './mocks/project';\nimport SearchParameterList from './mocks/searchparameters.json';\nimport { ExampleSmartClientApplication } from './mocks/smart';\nimport StructureDefinitionList from './mocks/structuredefinitions.json';\nimport {\n ExampleWorkflowPlanDefinition,\n ExampleWorkflowQuestionnaire1,\n ExampleWorkflowQuestionnaire2,\n ExampleWorkflowQuestionnaire3,\n ExampleWorkflowQuestionnaireResponse1,\n ExampleWorkflowRequestGroup,\n ExampleWorkflowTask1,\n ExampleWorkflowTask2,\n ExampleWorkflowTask3,\n} from './mocks/workflow';\n\nexport interface MockClientOptions extends MedplumClientOptions {\n readonly debug?: boolean;\n}\n\nexport class MockClient extends MedplumClient {\n readonly router: FhirRouter;\n readonly repo: MemoryRepository;\n readonly client: MockFetchClient;\n readonly debug: boolean;\n activeLoginOverride?: LoginState;\n\n constructor(clientOptions?: MockClientOptions) {\n const router = new FhirRouter();\n const repo = new MemoryRepository();\n const client = new MockFetchClient(router, repo, clientOptions?.debug);\n\n super({\n baseUrl: clientOptions?.baseUrl || 'https://example.com/',\n clientId: clientOptions?.clientId,\n storage: clientOptions?.storage,\n createPdf: (\n docDefinition: TDocumentDefinitions,\n tableLayouts?: { [name: string]: CustomTableLayout },\n fonts?: TFontDictionary | undefined\n ) => client.mockCreatePdf(docDefinition, tableLayouts, fonts),\n fetch: (url: string, options: any) => {\n return client.mockFetch(url, options);\n },\n });\n\n this.router = router;\n this.repo = repo;\n this.client = client;\n this.debug = !!clientOptions?.debug;\n }\n\n clear(): void {\n super.clear();\n this.activeLoginOverride = undefined;\n }\n\n getProfile(): ProfileResource {\n return DrAliceSmith;\n }\n\n getUserConfiguration(): UserConfiguration | undefined {\n return {\n resourceType: 'UserConfiguration',\n menu: [\n {\n title: 'Favorites',\n link: [\n { name: 'Patients', target: '/Patient' },\n { name: 'Active Orders', target: '/ServiceRequest?status=active' },\n { name: 'Completed Orders', target: '/ServiceRequest?status=completed' },\n ],\n },\n {\n title: 'Admin',\n link: [\n { name: 'Project', target: '/admin/project' },\n { name: 'Batch', target: '/batch' },\n ],\n },\n ],\n };\n }\n\n setActiveLoginOverride(activeLoginOverride: LoginState): void {\n this.activeLoginOverride = activeLoginOverride;\n }\n\n getActiveLogin(): LoginState | undefined {\n if (this.activeLoginOverride !== undefined) {\n return this.activeLoginOverride;\n }\n return super.getActiveLogin();\n }\n\n getLogins(): LoginState[] {\n if (this.activeLoginOverride !== undefined) {\n return [this.activeLoginOverride];\n }\n return super.getLogins();\n }\n\n async createBinary(\n data: string | File | Blob | Uint8Array,\n filename: string | undefined,\n contentType: string,\n onProgress?: (e: ProgressEvent) => void\n ): Promise<Binary> {\n if (filename?.endsWith('.exe')) {\n return Promise.reject(badRequest('Invalid file type'));\n }\n\n if (onProgress) {\n onProgress({ loaded: 0, lengthComputable: false } as ProgressEvent);\n onProgress({ loaded: 0, total: 100, lengthComputable: true } as ProgressEvent);\n onProgress({ loaded: 100, total: 100, lengthComputable: true } as ProgressEvent);\n }\n\n return {\n resourceType: 'Binary',\n contentType,\n url: 'https://example.com/binary/123',\n };\n }\n}\n\nclass MockFetchClient {\n readonly router: FhirRouter;\n readonly repo: MemoryRepository;\n initialized = false;\n initPromise?: Promise<void>;\n\n constructor(router: FhirRouter, repo: MemoryRepository, readonly debug = false) {\n this.router = router;\n this.repo = new MemoryRepository();\n }\n\n async mockFetch(url: string, options: any): Promise<any> {\n if (!this.initialized) {\n if (!this.initPromise) {\n this.initPromise = this.initMockRepo();\n }\n await this.initPromise;\n this.initialized = true;\n }\n\n const method = options.method || 'GET';\n const path = url.replace('https://example.com/', '');\n\n if (this.debug) {\n console.log('MockClient', method, path);\n }\n\n const response = await this.mockHandler(method, path, options);\n\n if (this.debug && !response) {\n console.log('MockClient: not found', method, path);\n }\n\n if (this.debug) {\n console.log('MockClient', JSON.stringify(response, null, 2));\n }\n\n if (response?.resourceType === 'OperationOutcome' && !isOk(response)) {\n return Promise.reject(response);\n }\n\n return Promise.resolve({\n ok: true,\n status: response?.resourceType === 'OperationOutcome' ? getStatus(response) : 200,\n blob: () => Promise.resolve(response),\n json: () => Promise.resolve(response),\n });\n }\n\n mockCreatePdf(\n docDefinition: TDocumentDefinitions,\n tableLayouts?: { [name: string]: CustomTableLayout },\n fonts?: TFontDictionary | undefined\n ): Promise<any> {\n if (this.debug) {\n console.log(`Mock Client: createPdf(`);\n console.log(` ${JSON.stringify(docDefinition, null, 2)},`);\n console.log(` ${JSON.stringify(tableLayouts, null, 2)},`);\n console.log(` ${JSON.stringify(fonts, null, 2)});`);\n }\n return Promise.resolve({});\n }\n\n private async mockHandler(method: HttpMethod, path: string, options: any): Promise<any> {\n if (path.startsWith('admin/')) {\n return this.mockAdminHandler(method, path);\n } else if (path.startsWith('auth/')) {\n return this.mockAuthHandler(method, path, options);\n } else if (path.startsWith('oauth2/')) {\n return this.mockOAuthHandler(method, path, options);\n } else if (path.startsWith('fhir/R4')) {\n return this.mockFhirHandler(method, path, options);\n } else {\n return null;\n }\n }\n\n private async mockAdminHandler(_method: string, path: string): Promise<any> {\n const projectMatch = path.match(/^admin\\/projects\\/([\\w-]+)$/);\n if (projectMatch) {\n return {\n project: await this.repo.readResource('Project', projectMatch[1]),\n };\n }\n\n const membershipMatch = path.match(/^admin\\/projects\\/([\\w-]+)\\/members\\/([\\w-]+)$/);\n if (membershipMatch) {\n return this.repo.readResource('ProjectMembership', membershipMatch[2]);\n }\n\n return {\n ok: true,\n };\n }\n\n private mockAuthHandler(method: HttpMethod, path: string, options: any): any {\n if (path.startsWith('auth/method')) {\n return {};\n }\n\n if (path.startsWith('auth/changepassword')) {\n return this.mockChangePasswordHandler(method, path, options);\n }\n\n if (path.startsWith('auth/login')) {\n return this.mockLoginHandler(method, path, options);\n }\n\n if (path.startsWith('auth/setpassword')) {\n return this.mockSetPasswordHandler(method, path, options);\n }\n\n if (path.startsWith('auth/newuser')) {\n return this.mockNewUserHandler(method, path, options);\n }\n\n if (path.startsWith('auth/newproject') || path.startsWith('auth/newpatient') || path.startsWith('auth/scope')) {\n return {\n login: '123',\n code: 'xyz',\n };\n }\n\n if (path.startsWith('auth/resetpassword')) {\n return this.mockResetPasswordHandler(method, path, options);\n }\n\n if (path.startsWith('auth/me')) {\n return {\n profile: DrAliceSmith,\n security: {\n mfaEnrolled: false,\n sessions: [\n {\n id: '123',\n lastUpdated: new Date().toISOString(),\n authMethod: 'password',\n remoteAddress: '5.5.5.5',\n browser: 'Chrome',\n os: 'Linux',\n },\n {\n id: '456',\n lastUpdated: new Date().toISOString(),\n authMethod: 'password',\n remoteAddress: '6.6.6.6',\n browser: 'Chrome',\n os: 'Android',\n },\n ],\n },\n };\n }\n\n if (path.startsWith('auth/mfa/status')) {\n return {\n enrolled: false,\n enrollUri: 'otpauth://totp/medplum.com:alice.smith%40example',\n };\n }\n\n if (path.startsWith('auth/mfa/enroll')) {\n return allOk;\n }\n\n return null;\n }\n\n private mockChangePasswordHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { oldPassword } = JSON.parse(body);\n if (oldPassword === 'orange') {\n return allOk;\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n expression: ['oldPassword'],\n details: {\n text: 'Incorrect password',\n },\n },\n ],\n };\n }\n }\n\n private mockLoginHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { password } = JSON.parse(body);\n if (password === 'password') {\n return {\n login: '123',\n code: 'xyz',\n };\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n expression: ['password'],\n details: {\n text: 'Invalid password',\n },\n },\n ],\n };\n }\n }\n\n private mockSetPasswordHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { password } = JSON.parse(body);\n if (password === 'orange') {\n return allOk;\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n expression: ['password'],\n details: {\n text: 'Invalid password',\n },\n },\n ],\n };\n }\n }\n\n private mockNewUserHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { email, password } = JSON.parse(body);\n if (email === 'george@example.com' && password === 'password') {\n return allOk;\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n details: {\n text: 'Invalid',\n },\n },\n ],\n };\n }\n }\n\n private mockResetPasswordHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { email } = JSON.parse(body);\n if (email === 'admin@example.com') {\n return allOk;\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n expression: ['email'],\n details: {\n text: 'Email not found',\n },\n },\n ],\n };\n }\n }\n\n private mockOAuthHandler(_method: string, path: string, options: any): any {\n if (path.startsWith('oauth2/token')) {\n const clientId = (options.body as URLSearchParams).get('client_id') || 'my-client-id';\n return {\n access_token: 'header.' + base64Encode(JSON.stringify({ client_id: clientId })) + '.signature',\n };\n }\n\n return null;\n }\n\n private async initMockRepo(): Promise<void> {\n const defaultResources = [\n HomerSimpsonPreviousVersion,\n HomerSimpson,\n ExampleAccessPolicy,\n ExampleStatusValueSet,\n ExampleUserConfiguration,\n ExampleBot,\n ExampleClient,\n HomerDiagnosticReport,\n HomerEncounter,\n HomerCommunication,\n HomerMedia,\n HomerObservation1,\n HomerObservation2,\n HomerObservation3,\n HomerObservation4,\n HomerObservation5,\n HomerObservation6,\n HomerObservation7,\n HomerObservation8,\n HomerSimpsonSpecimen,\n TestOrganization,\n DifferentOrganization,\n ExampleQuestionnaire,\n ExampleQuestionnaireResponse,\n HomerServiceRequest,\n ExampleSubscription,\n BartSimpson,\n DrAliceSmithPreviousVersion,\n DrAliceSmith,\n DrAliceSmithSchedule,\n ExampleWorkflowQuestionnaire1,\n ExampleWorkflowQuestionnaire2,\n ExampleWorkflowQuestionnaire3,\n ExampleWorkflowPlanDefinition,\n ExampleWorkflowQuestionnaireResponse1,\n ExampleWorkflowTask1,\n ExampleWorkflowTask2,\n ExampleWorkflowTask3,\n ExampleWorkflowRequestGroup,\n ExampleSmartClientApplication,\n TestProject,\n TestProjectMembersihp,\n ];\n\n for (const resource of defaultResources) {\n await this.repo.createResource(resource);\n }\n\n for (const structureDefinition of StructureDefinitionList as StructureDefinition[]) {\n indexStructureDefinition(structureDefinition);\n await this.repo.createResource(structureDefinition);\n }\n\n for (const searchParameter of SearchParameterList) {\n await this.repo.createResource(searchParameter as SearchParameter);\n }\n\n DrAliceSmithSlots.forEach((slot) => this.repo.createResource(slot));\n }\n\n private async mockFhirHandler(method: HttpMethod, url: string, options: any): Promise<Resource> {\n if (url.startsWith('fhir/R4/ValueSet/$expand')) {\n return exampleValueSet;\n }\n\n const parsedUrl = new URL(url, 'https://example.com');\n\n let pathname = parsedUrl.pathname;\n if (pathname.includes('fhir/R4')) {\n pathname = pathname.substring(pathname.indexOf('fhir/R4') + 7);\n }\n\n let body = undefined;\n if (options.body) {\n body = JSON.parse(options.body);\n }\n\n const request: FhirRequest = {\n method,\n pathname,\n body,\n params: Object.create(null),\n query: Object.fromEntries(parsedUrl.searchParams),\n };\n\n const result = await this.router.handleRequest(request, this.repo);\n if (result.length === 1) {\n if (!isOk(result[0])) {\n throw new OperationOutcomeError(result[0]);\n }\n return result[0];\n } else {\n return result[1];\n }\n }\n}\n\nfunction base64Encode(str: string): string {\n return typeof window !== 'undefined' ? window.btoa(str) : Buffer.from(str).toString('base64');\n}\n"],"names":["ExampleAccessPolicy","resourceType","id","name","ExampleStatusValueSet","compose","include","concept","code","ExampleUserConfiguration","option","valueString","TestOrganization","meta","versionId","DifferentOrganization","DrAliceSmith","lastUpdated","author","reference","given","family","photo","contentType","url","DrAliceSmithPreviousVersion","DrAliceSmithSchedule","actor","display","DrAliceSmithSlots","schedule","createReference","result","slotDate","Date","day","hour","setHours","push","start","toISOString","setDate","getDate","ExampleBot","ExampleClient","ExampleQuestionnaire","title","subjectType","item","linkId","text","type","ExampleQuestionnaireResponse","questionnaire","subject","source","SIMPSONS_ADDRESS","use","line","city","state","postalCode","LisaSimpson","birthDate","contact","address","telecom","system","value","BartSimpson","HomerLisaRelatedPerson","patient","relationship","coding","HomerBartRelatedPerson","HomerSimpson","gender","identifier","active","link","other","MargeSimpson","HomerSimpsonPreviousVersion","HomerEncounter","HomerCommunication","encounter","payload","contentString","HomerMedia","content","HomerObservation1","status","HomerObservation2","valueQuantity","unit","referenceRange","low","HomerObservation3","high","HomerObservation4","comparator","interpretation","HomerObservation5","HomerObservation6","component","HomerObservation7","HomerObservation8","HomerSimpsonSpecimen","collection","collectedDateTime","note","HomerServiceRequest","orderDetail","specimen","authoredOn","HomerDiagnosticReport","basedOn","resultsInterpreter","SimpsonsFamily","actual","member","entity","ExampleSubscription","ExampleAuditEvent","exampleValueSet","expansion","contains","ExampleWorkflowQuestionnaire1","ExampleWorkflowQuestionnaire2","ExampleWorkflowQuestionnaire3","ExampleWorkflowPlanDefinition","action","definitionCanonical","getReferenceString","ExampleWorkflowQuestionnaireResponse1","ExampleWorkflowTask1","requester","input","valueReference","output","ExampleWorkflowTask2","ExampleWorkflowTask3","ExampleWorkflowRequestGroup","instantiatesCanonical","resource","TestProject","TestProjectMembersihp","project","profile","ExampleSmartClientApplication","description","redirectUri","launchUri","MockClient","MedplumClient","constructor","clientOptions","router","FhirRouter","repo","MemoryRepository","client","MockFetchClient","debug","super","baseUrl","clientId","storage","createPdf","docDefinition","tableLayouts","fonts","mockCreatePdf","fetch","options","mockFetch","this","clear","activeLoginOverride","undefined","getProfile","getUserConfiguration","menu","target","setActiveLoginOverride","getActiveLogin","getLogins","async","data","filename","onProgress","endsWith","Promise","reject","badRequest","loaded","lengthComputable","total","initialized","initPromise","initMockRepo","method","path","replace","console","log","response","mockHandler","JSON","stringify","isOk","resolve","ok","getStatus","blob","json","startsWith","mockAdminHandler","mockAuthHandler","mockOAuthHandler","mockFhirHandler","_method","projectMatch","match","readResource","membershipMatch","mockChangePasswordHandler","mockLoginHandler","mockSetPasswordHandler","mockNewUserHandler","login","mockResetPasswordHandler","security","mfaEnrolled","sessions","authMethod","remoteAddress","browser","os","enrolled","enrollUri","allOk","_path","body","oldPassword","parse","issue","expression","details","password","email","get","access_token","str","client_id","window","btoa","Buffer","from","toString","defaultResources","createResource","structureDefinition","StructureDefinitionList","indexStructureDefinition","searchParameter","SearchParameterList","forEach","slot","parsedUrl","URL","pathname","includes","substring","indexOf","request","params","Object","create","query","fromEntries","searchParams","handleRequest","length","OperationOutcomeError"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.cjs","sources":["../../src/mocks/accesspolicy.ts","../../src/mocks/alice.ts","../../src/mocks/bot.ts","../../src/mocks/questionnaire.ts","../../src/mocks/simpsons.ts","../../src/mocks/subscription.ts","../../src/mocks/valueset.ts","../../src/mocks/workflow.ts","../../src/mocks/project.ts","../../src/mocks/smart.ts","../../src/client.ts"],"sourcesContent":["import { AccessPolicy, UserConfiguration, ValueSet } from '@medplum/fhirtypes';\n\nexport const ExampleAccessPolicy: AccessPolicy = {\n resourceType: 'AccessPolicy',\n id: '123',\n name: 'Example Access Policy',\n};\n\nexport const ExampleStatusValueSet: ValueSet = {\n resourceType: 'ValueSet',\n id: 'example-statuses',\n compose: {\n include: [\n {\n concept: [\n { code: 'ORDERED' },\n { code: 'SENT_TO_CUSTOMER' },\n { code: 'SENT_BACK_TO_LAB' },\n { code: 'LAB_PROCESSED' },\n { code: 'LAB_COMPLETE' },\n ],\n },\n ],\n },\n};\n\nexport const ExampleUserConfiguration: UserConfiguration = {\n resourceType: 'UserConfiguration',\n id: '123',\n name: 'Example User Configuration',\n option: [\n {\n id: 'statusValueSet',\n valueString: 'ValueSet/example-statuses',\n },\n ],\n};\n","import { createReference } from '@medplum/core';\nimport { Organization, Practitioner, Schedule, Slot } from '@medplum/fhirtypes';\n\nexport const TestOrganization: Organization = {\n resourceType: 'Organization',\n id: '123',\n meta: {\n versionId: '1',\n },\n name: 'Test Organization',\n};\n\nexport const DifferentOrganization: Organization = {\n resourceType: 'Organization',\n id: '456',\n meta: {\n versionId: '1',\n },\n name: 'Different',\n};\n\nexport const DrAliceSmith: Practitioner = {\n resourceType: 'Practitioner',\n id: '123',\n meta: {\n versionId: '2',\n lastUpdated: '2021-01-02T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n name: [\n {\n given: ['Alice'],\n family: 'Smith',\n },\n ],\n photo: [\n {\n contentType: 'image/png',\n url: 'https://www.medplum.com/img/cdc-femaledoc.png',\n },\n ],\n};\n\nexport const DrAliceSmithPreviousVersion: Practitioner = {\n resourceType: 'Practitioner',\n id: '123',\n meta: {\n versionId: '1',\n lastUpdated: '2021-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n name: [{ given: ['Medplum'], family: 'Admin' }],\n};\n\nexport const DrAliceSmithSchedule: Schedule = {\n resourceType: 'Schedule',\n id: 'alice-smith-schedule',\n actor: [\n {\n reference: 'Practitioner/123',\n display: 'Dr. Alice Smith',\n },\n ],\n};\n\nexport const DrAliceSmithSlots: Slot[] = (() => {\n const schedule = createReference(DrAliceSmithSchedule);\n const result: Slot[] = [];\n const slotDate = new Date();\n for (let day = 0; day < 60; day++) {\n for (const hour of [9, 10, 11, 13, 14, 15]) {\n slotDate.setHours(hour, 0, 0, 0);\n result.push({\n resourceType: 'Slot',\n id: `slot-${day}-${hour}`,\n start: slotDate.toISOString(),\n schedule,\n });\n }\n slotDate.setDate(slotDate.getDate() + 1);\n }\n return result;\n})();\n","import { Bot, ClientApplication } from '@medplum/fhirtypes';\n\nexport const ExampleBot: Bot = {\n resourceType: 'Bot',\n id: '123',\n name: 'Test Bot',\n code: 'console.log(\"hello world\");',\n};\n\nexport const ExampleClient: ClientApplication = {\n resourceType: 'ClientApplication',\n id: '123',\n name: 'Test Client',\n};\n","import { Questionnaire, QuestionnaireResponse } from '@medplum/fhirtypes';\n\nexport const ExampleQuestionnaire: Questionnaire = {\n resourceType: 'Questionnaire',\n id: '123',\n name: 'Vitals',\n title: 'Vitals',\n subjectType: ['Patient'],\n item: [\n {\n linkId: '1',\n text: 'First question',\n type: 'string',\n },\n ],\n};\n\nexport const ExampleQuestionnaireResponse: QuestionnaireResponse = {\n resourceType: 'QuestionnaireResponse',\n id: '123',\n questionnaire: 'Questionnaire/123',\n subject: {\n reference: 'Patient/123',\n },\n source: {\n reference: 'Practitioner/123',\n },\n};\n","import { createReference } from '@medplum/core';\nimport {\n Address,\n Communication,\n DiagnosticReport,\n Encounter,\n Group,\n Media,\n Observation,\n Patient,\n RelatedPerson,\n ServiceRequest,\n Specimen,\n} from '@medplum/fhirtypes';\nimport { DrAliceSmith } from './alice';\n\nconst SIMPSONS_ADDRESS: Address = {\n use: 'home',\n line: ['742 Evergreen Terrace'],\n city: 'Springfield',\n state: 'IL',\n postalCode: '12345',\n};\n\nexport const LisaSimpson: Patient = {\n resourceType: 'Patient',\n id: 'lisa-simpson',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n birthDate: '1981-05-09',\n name: [\n {\n given: ['Lisa'],\n family: 'Simpson',\n },\n ],\n photo: [\n {\n contentType: 'image/jpeg',\n url: 'https://example.com/picture.jpg',\n },\n ],\n contact: [\n {\n name: { given: ['Homer'], family: 'Simpson' },\n address: {\n use: 'home',\n line: ['742 Evergreen Terrace'],\n city: 'Springfield',\n state: 'IL',\n postalCode: '12345',\n },\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-1239',\n },\n {\n system: 'email',\n use: 'home',\n value: 'homer@thesimpsons.com',\n },\n ],\n },\n {\n name: { given: ['Marge'], family: 'Simpson' },\n address: {\n use: 'home',\n line: ['742 Evergreen Terrace'],\n city: 'Springfield',\n state: 'IL',\n postalCode: '12345',\n },\n telecom: [\n {\n system: 'phone',\n use: 'mobile',\n value: '139-1928',\n },\n {\n system: 'email',\n use: 'home',\n value: 'marge@thesimpsons.com',\n },\n ],\n },\n ],\n\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-1239',\n },\n {\n system: 'email',\n use: 'home',\n value: 'lisa@thesimpsons.com',\n },\n ],\n};\n\nexport const BartSimpson: Patient = {\n resourceType: 'Patient',\n id: '555',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n birthDate: '1979-12-17',\n name: [\n {\n given: ['Bart'],\n family: 'Simpson',\n },\n ],\n photo: [\n {\n contentType: 'image/jpeg',\n url: 'https://example.com/picture.jpg',\n },\n ],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-1239',\n },\n {\n system: 'email',\n use: 'home',\n value: 'bart@thesimpsons.com',\n },\n ],\n};\n\nexport const HomerLisaRelatedPerson: RelatedPerson = {\n resourceType: 'RelatedPerson',\n id: 'homer-lisa-related-person',\n patient: createReference(LisaSimpson),\n address: [SIMPSONS_ADDRESS],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-7334',\n },\n {\n system: 'email',\n use: 'home',\n value: 'chunkylover53@aol.com',\n },\n ],\n relationship: [\n {\n text: 'father',\n coding: [{ system: 'http://terminology.hl7.org/CodeSystem/v3-RoleCode', code: 'FTH', display: 'father' }],\n },\n ],\n};\n\nexport const HomerBartRelatedPerson: RelatedPerson = {\n resourceType: 'RelatedPerson',\n id: 'homer-bart-related-person',\n patient: createReference(BartSimpson),\n address: [SIMPSONS_ADDRESS],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-7334',\n },\n {\n system: 'email',\n use: 'home',\n value: 'chunkylover53@aol.com',\n },\n ],\n relationship: [\n {\n text: 'father',\n coding: [{ system: 'http://terminology.hl7.org/CodeSystem/v3-RoleCode', code: 'FTH', display: 'father' }],\n },\n ],\n};\n\nexport const HomerSimpson: Patient = {\n resourceType: 'Patient',\n id: '123',\n gender: 'male',\n meta: {\n versionId: '2',\n lastUpdated: '2020-01-02T00:00:00.000Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n identifier: [\n { system: 'abc', value: '123' },\n { system: 'def', value: '456' },\n ],\n active: true,\n birthDate: '1956-05-12',\n name: [\n {\n given: ['Homer'],\n family: 'Simpson',\n },\n ],\n photo: [\n {\n contentType: 'image/png',\n url: 'https://www.medplum.com/img/homer-simpson.png',\n },\n ],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-7334',\n },\n {\n system: 'email',\n use: 'home',\n value: 'chunkylover53@aol.com',\n },\n ],\n address: [\n {\n use: 'home',\n line: ['742 Evergreen Terrace'],\n city: 'Springfield',\n state: 'IL',\n postalCode: '12345',\n },\n ],\n link: [\n { other: createReference(HomerLisaRelatedPerson), type: 'seealso' },\n { other: createReference(HomerBartRelatedPerson), type: 'seealso' },\n ],\n};\n\nexport const MargeSimpson: Patient = {\n resourceType: 'Patient',\n id: 'marge-simpson',\n gender: 'female',\n\n active: true,\n birthDate: '1961-08-23',\n name: [\n {\n given: ['Marge'],\n family: 'Simpson',\n },\n ],\n telecom: [\n {\n system: 'phone',\n use: 'home',\n value: '555-7334',\n },\n {\n system: 'email',\n use: 'home',\n value: 'margesimpson@aol.com',\n },\n ],\n address: [SIMPSONS_ADDRESS],\n};\n\nexport const HomerSimpsonPreviousVersion: Patient = {\n resourceType: 'Patient',\n id: '123',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-01T00:00:00.000Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n name: [\n {\n given: ['Homer'],\n family: 'Simpson',\n },\n ],\n photo: [\n {\n contentType: 'image/png',\n url: 'https://www.medplum.com/img/homer-simpson.png',\n },\n ],\n};\n\nexport const HomerEncounter: Encounter = {\n resourceType: 'Encounter',\n id: '123',\n meta: {\n versionId: '456',\n lastUpdated: '2020-01-01T00:00:00.000Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n};\n\nexport const HomerCommunication: Communication = {\n resourceType: 'Communication',\n id: '123',\n meta: {\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n encounter: createReference(HomerEncounter),\n payload: [\n {\n contentString: 'Hello world',\n },\n ],\n};\n\nexport const HomerMedia: Media = {\n resourceType: 'Media',\n id: '123',\n meta: {\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n encounter: createReference(HomerEncounter),\n content: {\n contentType: 'text/plain',\n url: 'https://example.com/test.txt',\n },\n};\n\nexport const HomerObservation1: Observation = {\n resourceType: 'Observation',\n id: '1',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 1',\n },\n valueString: 'test',\n};\n\nexport const HomerObservation2: Observation = {\n resourceType: 'Observation',\n id: '2',\n status: 'corrected',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 2',\n },\n valueQuantity: {\n value: 20,\n unit: 'x',\n },\n referenceRange: [\n {\n low: {\n value: 10,\n },\n },\n ],\n};\n\nexport const HomerObservation3: Observation = {\n resourceType: 'Observation',\n id: '3',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 3',\n },\n valueQuantity: {\n value: 30,\n unit: 'x',\n },\n referenceRange: [\n {\n high: {\n value: 50,\n },\n },\n ],\n};\n\nexport const HomerObservation4: Observation = {\n resourceType: 'Observation',\n id: '4',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 4',\n },\n valueQuantity: {\n value: 50,\n unit: 'x',\n comparator: '>',\n },\n referenceRange: [\n {\n low: {\n value: 10,\n unit: 'x',\n },\n high: {\n value: 50,\n unit: 'x',\n },\n },\n ],\n interpretation: [\n {\n text: 'HIGH',\n },\n ],\n};\n\nexport const HomerObservation5: Observation = {\n resourceType: 'Observation',\n id: '5',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 5',\n },\n valueQuantity: {\n value: 100,\n unit: 'x',\n },\n referenceRange: [{}],\n interpretation: [{}],\n};\n\nexport const HomerObservation6: Observation = {\n resourceType: 'Observation',\n id: '6',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 6',\n },\n component: [\n {\n valueQuantity: {\n value: 110,\n unit: 'mmHg',\n system: 'http://unitsofmeasure.org',\n },\n },\n {\n valueQuantity: {\n value: 75,\n unit: 'mmHg',\n system: 'http://unitsofmeasure.org',\n },\n },\n ],\n};\n\nexport const HomerObservation7: Observation = {\n resourceType: 'Observation',\n id: '7',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 7',\n },\n component: [\n {\n valueQuantity: {\n value: 1000,\n unit: 'mg/dL',\n system: 'http://unitsofmeasure.org',\n },\n },\n ],\n interpretation: [\n {\n coding: [\n {\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n code: 'HH',\n display: 'Critical high',\n },\n ],\n },\n ],\n};\n\nexport const HomerObservation8: Observation = {\n resourceType: 'Observation',\n id: '8',\n status: 'final',\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n code: {\n text: 'Test 8',\n },\n component: [\n {\n valueString: 'REACTIVE',\n },\n ],\n referenceRange: [\n {\n text: 'NEGATIVE',\n },\n ],\n interpretation: [\n {\n coding: [\n {\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n code: 'RR',\n display: 'Reactive',\n },\n ],\n },\n ],\n};\n\nexport const HomerSimpsonSpecimen: Specimen = {\n id: '123',\n resourceType: 'Specimen',\n subject: createReference(HomerSimpson),\n collection: {\n collectedDateTime: '2020-01-01T12:00:00Z',\n },\n note: [\n { text: 'Specimen hemolyzed. Results may be affected.' },\n { text: 'Specimen lipemic. Results may be affected.' },\n ],\n};\n\nexport const HomerServiceRequest: ServiceRequest = {\n resourceType: 'ServiceRequest',\n id: '123',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-01T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n identifier: [\n {\n system: 'https://example.com',\n value: '9001',\n },\n ],\n code: {\n coding: [\n {\n system: 'http://snomed.info/sct',\n code: 'SERVICE_REQUEST_CODE',\n },\n ],\n },\n subject: {\n reference: 'Patient/123',\n display: 'Homer Simpson',\n },\n status: 'active',\n orderDetail: [\n {\n text: 'ORDERED',\n },\n ],\n specimen: [createReference(HomerSimpsonSpecimen)],\n authoredOn: '2020-01-01T12:00:00Z',\n};\n\nexport const HomerDiagnosticReport: DiagnosticReport = {\n resourceType: 'DiagnosticReport',\n id: '123',\n meta: {\n versionId: '1',\n lastUpdated: '2020-01-02T12:00:00Z',\n author: {\n reference: 'Practitioner/123',\n },\n },\n subject: createReference(HomerSimpson),\n basedOn: [createReference(HomerServiceRequest)],\n specimen: [createReference(HomerSimpsonSpecimen)],\n resultsInterpreter: [createReference(DrAliceSmith)],\n result: [\n createReference(HomerObservation1),\n createReference(HomerObservation2),\n createReference(HomerObservation3),\n createReference(HomerObservation4),\n createReference(HomerObservation5),\n createReference(HomerObservation6),\n createReference(HomerObservation7),\n createReference(HomerObservation8),\n ],\n};\n\nexport const SimpsonsFamily: Group = {\n resourceType: 'Group',\n id: 'simpsons-family',\n type: 'person',\n actual: true,\n member: [\n { entity: createReference(HomerSimpson) },\n { entity: createReference(MargeSimpson) },\n { entity: createReference(BartSimpson) },\n { entity: createReference(LisaSimpson) },\n ],\n};\n","import { AuditEvent, Subscription } from '@medplum/fhirtypes';\n\nexport const ExampleSubscription: Subscription = {\n resourceType: 'Subscription',\n id: '123',\n meta: {\n versionId: '456',\n },\n};\n\nexport const ExampleAuditEvent: AuditEvent = {\n resourceType: 'AuditEvent',\n id: '123',\n meta: {\n lastUpdated: new Date().toISOString(),\n versionId: '456',\n author: {\n reference: 'Practitioner/123',\n },\n },\n};\n","import { ValueSet } from '@medplum/fhirtypes';\n\nexport const exampleValueSet: ValueSet = {\n resourceType: 'ValueSet',\n expansion: {\n contains: [\n {\n system: 'x',\n code: 'test-code',\n display: 'Test Display',\n },\n ],\n },\n};\n","import { createReference, getReferenceString } from '@medplum/core';\nimport { PlanDefinition, Questionnaire, QuestionnaireResponse, RequestGroup, Task } from '@medplum/fhirtypes';\nimport { DrAliceSmith } from './alice';\nimport { HomerSimpson } from './simpsons';\n\nexport const ExampleWorkflowQuestionnaire1: Questionnaire = {\n resourceType: 'Questionnaire',\n id: 'workflow-questionnaire-1',\n name: 'Patient Registration',\n title: 'Patient Registration',\n subjectType: ['Patient'],\n item: [\n {\n linkId: '1',\n text: 'First question',\n type: 'string',\n },\n ],\n};\n\nexport const ExampleWorkflowQuestionnaire2: Questionnaire = {\n resourceType: 'Questionnaire',\n id: 'workflow-questionnaire-2',\n name: 'Surgery History',\n title: 'Surgery History',\n subjectType: ['Patient'],\n item: [\n {\n linkId: '1',\n text: 'First question',\n type: 'string',\n },\n ],\n};\n\nexport const ExampleWorkflowQuestionnaire3: Questionnaire = {\n resourceType: 'Questionnaire',\n id: 'workflow-questionnaire-3',\n name: 'Family Health History',\n title: 'Family Health History',\n subjectType: ['Patient'],\n item: [\n {\n linkId: '1',\n text: 'First question',\n type: 'string',\n },\n ],\n};\n\nexport const ExampleWorkflowPlanDefinition: PlanDefinition = {\n resourceType: 'PlanDefinition',\n id: 'workflow-plan-definition-1',\n title: 'Example Plan Definition',\n action: [\n {\n title: ExampleWorkflowQuestionnaire1.title,\n definitionCanonical: getReferenceString(ExampleWorkflowQuestionnaire1),\n },\n {\n title: ExampleWorkflowQuestionnaire2.title,\n definitionCanonical: getReferenceString(ExampleWorkflowQuestionnaire2),\n },\n {\n title: ExampleWorkflowQuestionnaire3.title,\n definitionCanonical: getReferenceString(ExampleWorkflowQuestionnaire3),\n },\n ],\n};\n\nexport const ExampleWorkflowQuestionnaireResponse1: QuestionnaireResponse = {\n resourceType: 'QuestionnaireResponse',\n id: 'workflow-questionnaire-response-1',\n questionnaire: getReferenceString(ExampleWorkflowQuestionnaire1),\n subject: createReference(HomerSimpson),\n source: createReference(HomerSimpson),\n};\n\n// Based on: http://build.fhir.org/ig/HL7/sdc/Task-example.json.html\nexport const ExampleWorkflowTask1: Task = {\n resourceType: 'Task',\n id: 'workflow-task-1',\n status: 'completed',\n meta: { author: createReference(HomerSimpson) },\n requester: createReference(DrAliceSmith),\n input: [{ valueReference: createReference(ExampleWorkflowQuestionnaire1) }],\n output: [{ valueReference: createReference(ExampleWorkflowQuestionnaireResponse1) }],\n};\n\nexport const ExampleWorkflowTask2: Task = {\n resourceType: 'Task',\n id: 'workflow-task-2',\n status: 'requested',\n meta: { author: createReference(DrAliceSmith) },\n requester: createReference(DrAliceSmith),\n input: [{ valueReference: createReference(ExampleWorkflowQuestionnaire2) }],\n};\n\nexport const ExampleWorkflowTask3: Task = {\n resourceType: 'Task',\n id: 'workflow-task-3',\n status: 'requested',\n meta: { author: createReference(DrAliceSmith) },\n requester: createReference(DrAliceSmith),\n input: [{ valueReference: createReference(ExampleWorkflowQuestionnaire3) }],\n};\n\nexport const ExampleWorkflowRequestGroup: RequestGroup = {\n resourceType: 'RequestGroup',\n id: 'workflow-request-group-1',\n instantiatesCanonical: [getReferenceString(ExampleWorkflowPlanDefinition)],\n status: 'active',\n action: [\n {\n title: ExampleWorkflowQuestionnaire1.title,\n resource: createReference(ExampleWorkflowTask1),\n },\n {\n title: ExampleWorkflowQuestionnaire2.title,\n resource: createReference(ExampleWorkflowTask2),\n },\n {\n title: ExampleWorkflowQuestionnaire3.title,\n resource: createReference(ExampleWorkflowTask3),\n },\n ],\n};\n","import { createReference } from '@medplum/core';\nimport { Project, ProjectMembership } from '@medplum/fhirtypes';\nimport { DrAliceSmith } from './alice';\n\nexport const TestProject: Project = {\n resourceType: 'Project',\n id: '123',\n name: 'Project 123',\n};\n\nexport const TestProjectMembersihp: ProjectMembership = {\n resourceType: 'ProjectMembership',\n id: '456',\n project: createReference(TestProject),\n profile: createReference(DrAliceSmith),\n};\n","import { ClientApplication } from '@medplum/fhirtypes';\n\nexport const ExampleSmartClientApplication: ClientApplication = {\n resourceType: 'ClientApplication',\n id: 'smart-client-app',\n name: 'Inferno Client',\n description: 'Client application used for Inferno ONC compliance testing',\n redirectUri: 'https://inferno.healthit.gov/suites/custom/smart/redirect',\n launchUri: 'https://inferno.healthit.gov/suites/custom/smart/launch',\n};\n","import {\n allOk,\n badRequest,\n getStatus,\n indexStructureDefinition,\n LoginState,\n MedplumClient,\n MedplumClientOptions,\n ProfileResource,\n} from '@medplum/core';\nimport { FhirRequest, FhirRouter, HttpMethod, MemoryRepository } from '@medplum/fhir-router';\nimport { Binary, Resource, SearchParameter, StructureDefinition, UserConfiguration } from '@medplum/fhirtypes';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n/** @ts-ignore */\nimport type { CustomTableLayout, TDocumentDefinitions, TFontDictionary } from 'pdfmake/interfaces';\nimport {\n BartSimpson,\n DifferentOrganization,\n DrAliceSmith,\n DrAliceSmithPreviousVersion,\n DrAliceSmithSchedule,\n DrAliceSmithSlots,\n ExampleBot,\n ExampleClient,\n ExampleQuestionnaire,\n ExampleQuestionnaireResponse,\n ExampleSubscription,\n exampleValueSet,\n HomerCommunication,\n HomerDiagnosticReport,\n HomerEncounter,\n HomerMedia,\n HomerObservation1,\n HomerObservation2,\n HomerObservation3,\n HomerObservation4,\n HomerObservation5,\n HomerObservation6,\n HomerObservation7,\n HomerObservation8,\n HomerServiceRequest,\n HomerSimpson,\n HomerSimpsonPreviousVersion,\n HomerSimpsonSpecimen,\n TestOrganization,\n} from './mocks';\nimport { ExampleAccessPolicy, ExampleStatusValueSet, ExampleUserConfiguration } from './mocks/accesspolicy';\nimport { TestProject, TestProjectMembersihp } from './mocks/project';\nimport SearchParameterList from './mocks/searchparameters.json';\nimport { ExampleSmartClientApplication } from './mocks/smart';\nimport StructureDefinitionList from './mocks/structuredefinitions.json';\nimport {\n ExampleWorkflowPlanDefinition,\n ExampleWorkflowQuestionnaire1,\n ExampleWorkflowQuestionnaire2,\n ExampleWorkflowQuestionnaire3,\n ExampleWorkflowQuestionnaireResponse1,\n ExampleWorkflowRequestGroup,\n ExampleWorkflowTask1,\n ExampleWorkflowTask2,\n ExampleWorkflowTask3,\n} from './mocks/workflow';\n\nexport interface MockClientOptions extends MedplumClientOptions {\n readonly debug?: boolean;\n}\n\nexport class MockClient extends MedplumClient {\n readonly router: FhirRouter;\n readonly repo: MemoryRepository;\n readonly client: MockFetchClient;\n readonly debug: boolean;\n activeLoginOverride?: LoginState;\n\n constructor(clientOptions?: MockClientOptions) {\n const router = new FhirRouter();\n const repo = new MemoryRepository();\n const client = new MockFetchClient(router, repo, clientOptions?.debug);\n\n super({\n baseUrl: clientOptions?.baseUrl || 'https://example.com/',\n clientId: clientOptions?.clientId,\n storage: clientOptions?.storage,\n createPdf: (\n docDefinition: TDocumentDefinitions,\n tableLayouts?: { [name: string]: CustomTableLayout },\n fonts?: TFontDictionary | undefined\n ) => client.mockCreatePdf(docDefinition, tableLayouts, fonts),\n fetch: (url: string, options: any) => {\n return client.mockFetch(url, options);\n },\n });\n\n this.router = router;\n this.repo = repo;\n this.client = client;\n this.debug = !!clientOptions?.debug;\n }\n\n clear(): void {\n super.clear();\n this.activeLoginOverride = undefined;\n }\n\n getProfile(): ProfileResource {\n return DrAliceSmith;\n }\n\n getUserConfiguration(): UserConfiguration | undefined {\n return {\n resourceType: 'UserConfiguration',\n menu: [\n {\n title: 'Favorites',\n link: [\n { name: 'Patients', target: '/Patient' },\n { name: 'Active Orders', target: '/ServiceRequest?status=active' },\n { name: 'Completed Orders', target: '/ServiceRequest?status=completed' },\n ],\n },\n {\n title: 'Admin',\n link: [\n { name: 'Project', target: '/admin/project' },\n { name: 'Batch', target: '/batch' },\n ],\n },\n ],\n };\n }\n\n setActiveLoginOverride(activeLoginOverride: LoginState): void {\n this.activeLoginOverride = activeLoginOverride;\n }\n\n getActiveLogin(): LoginState | undefined {\n if (this.activeLoginOverride !== undefined) {\n return this.activeLoginOverride;\n }\n return super.getActiveLogin();\n }\n\n getLogins(): LoginState[] {\n if (this.activeLoginOverride !== undefined) {\n return [this.activeLoginOverride];\n }\n return super.getLogins();\n }\n\n async createBinary(\n data: string | File | Blob | Uint8Array,\n filename: string | undefined,\n contentType: string,\n onProgress?: (e: ProgressEvent) => void\n ): Promise<Binary> {\n if (filename?.endsWith('.exe')) {\n return Promise.reject(badRequest('Invalid file type'));\n }\n\n if (onProgress) {\n onProgress({ loaded: 0, lengthComputable: false } as ProgressEvent);\n onProgress({ loaded: 0, total: 100, lengthComputable: true } as ProgressEvent);\n onProgress({ loaded: 100, total: 100, lengthComputable: true } as ProgressEvent);\n }\n\n return {\n resourceType: 'Binary',\n contentType,\n url: 'https://example.com/binary/123',\n };\n }\n}\n\nclass MockFetchClient {\n readonly router: FhirRouter;\n readonly repo: MemoryRepository;\n initialized = false;\n initPromise?: Promise<void>;\n\n constructor(router: FhirRouter, repo: MemoryRepository, readonly debug = false) {\n this.router = router;\n this.repo = new MemoryRepository();\n }\n\n async mockFetch(url: string, options: any): Promise<Partial<Response>> {\n if (!this.initialized) {\n if (!this.initPromise) {\n this.initPromise = this.initMockRepo();\n }\n await this.initPromise;\n this.initialized = true;\n }\n\n const method = options.method || 'GET';\n const path = url.replace('https://example.com/', '');\n\n if (this.debug) {\n console.log('MockClient', method, path);\n }\n\n const response = await this.mockHandler(method, path, options);\n\n if (this.debug && !response) {\n console.log('MockClient: not found', method, path);\n }\n\n if (this.debug) {\n console.log('MockClient', JSON.stringify(response, null, 2));\n }\n\n return Promise.resolve({\n ok: true,\n status: response?.resourceType === 'OperationOutcome' ? getStatus(response) : 200,\n headers: {\n get: () => 'application/fhir+json',\n } as unknown as Headers,\n blob: () => Promise.resolve(response),\n json: () => Promise.resolve(response),\n });\n }\n\n mockCreatePdf(\n docDefinition: TDocumentDefinitions,\n tableLayouts?: { [name: string]: CustomTableLayout },\n fonts?: TFontDictionary | undefined\n ): Promise<any> {\n if (this.debug) {\n console.log(`Mock Client: createPdf(`);\n console.log(` ${JSON.stringify(docDefinition, null, 2)},`);\n console.log(` ${JSON.stringify(tableLayouts, null, 2)},`);\n console.log(` ${JSON.stringify(fonts, null, 2)});`);\n }\n return Promise.resolve({});\n }\n\n private async mockHandler(method: HttpMethod, path: string, options: any): Promise<any> {\n if (path.startsWith('admin/')) {\n return this.mockAdminHandler(method, path);\n } else if (path.startsWith('auth/')) {\n return this.mockAuthHandler(method, path, options);\n } else if (path.startsWith('oauth2/')) {\n return this.mockOAuthHandler(method, path, options);\n } else if (path.startsWith('fhir/R4')) {\n return this.mockFhirHandler(method, path, options);\n } else {\n return null;\n }\n }\n\n private async mockAdminHandler(_method: string, path: string): Promise<any> {\n const projectMatch = path.match(/^admin\\/projects\\/([\\w-]+)$/);\n if (projectMatch) {\n return {\n project: await this.repo.readResource('Project', projectMatch[1]),\n };\n }\n\n const membershipMatch = path.match(/^admin\\/projects\\/([\\w-]+)\\/members\\/([\\w-]+)$/);\n if (membershipMatch) {\n return this.repo.readResource('ProjectMembership', membershipMatch[2]);\n }\n\n return {\n ok: true,\n };\n }\n\n private mockAuthHandler(method: HttpMethod, path: string, options: any): any {\n if (path.startsWith('auth/method')) {\n return {};\n }\n\n if (path.startsWith('auth/changepassword')) {\n return this.mockChangePasswordHandler(method, path, options);\n }\n\n if (path.startsWith('auth/login')) {\n return this.mockLoginHandler(method, path, options);\n }\n\n if (path.startsWith('auth/setpassword')) {\n return this.mockSetPasswordHandler(method, path, options);\n }\n\n if (path.startsWith('auth/newuser')) {\n return this.mockNewUserHandler(method, path, options);\n }\n\n if (path.startsWith('auth/newproject') || path.startsWith('auth/newpatient') || path.startsWith('auth/scope')) {\n return {\n login: '123',\n code: 'xyz',\n };\n }\n\n if (path.startsWith('auth/resetpassword')) {\n return this.mockResetPasswordHandler(method, path, options);\n }\n\n if (path.startsWith('auth/me')) {\n return {\n profile: DrAliceSmith,\n security: {\n mfaEnrolled: false,\n sessions: [\n {\n id: '123',\n lastUpdated: new Date().toISOString(),\n authMethod: 'password',\n remoteAddress: '5.5.5.5',\n browser: 'Chrome',\n os: 'Linux',\n },\n {\n id: '456',\n lastUpdated: new Date().toISOString(),\n authMethod: 'password',\n remoteAddress: '6.6.6.6',\n browser: 'Chrome',\n os: 'Android',\n },\n ],\n },\n };\n }\n\n if (path.startsWith('auth/mfa/status')) {\n return {\n enrolled: false,\n enrollUri: 'otpauth://totp/medplum.com:alice.smith%40example',\n };\n }\n\n if (path.startsWith('auth/mfa/enroll')) {\n return allOk;\n }\n\n return null;\n }\n\n private mockChangePasswordHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { oldPassword } = JSON.parse(body);\n if (oldPassword === 'orange') {\n return allOk;\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n expression: ['oldPassword'],\n details: {\n text: 'Incorrect password',\n },\n },\n ],\n };\n }\n }\n\n private mockLoginHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { password } = JSON.parse(body);\n if (password === 'password') {\n return {\n login: '123',\n code: 'xyz',\n };\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n expression: ['password'],\n details: {\n text: 'Invalid password',\n },\n },\n ],\n };\n }\n }\n\n private mockSetPasswordHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { password } = JSON.parse(body);\n if (password === 'orange') {\n return allOk;\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n expression: ['password'],\n details: {\n text: 'Invalid password',\n },\n },\n ],\n };\n }\n }\n\n private mockNewUserHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { email, password } = JSON.parse(body);\n if (email === 'george@example.com' && password === 'password') {\n return allOk;\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n details: {\n text: 'Invalid',\n },\n },\n ],\n };\n }\n }\n\n private mockResetPasswordHandler(_method: string, _path: string, options: any): any {\n const { body } = options;\n const { email } = JSON.parse(body);\n if (email === 'admin@example.com') {\n return allOk;\n } else {\n return {\n resourceType: 'OperationOutcome',\n issue: [\n {\n expression: ['email'],\n details: {\n text: 'Email not found',\n },\n },\n ],\n };\n }\n }\n\n private mockOAuthHandler(_method: string, path: string, options: any): any {\n if (path.startsWith('oauth2/token')) {\n const clientId = (options.body as URLSearchParams).get('client_id') || 'my-client-id';\n return {\n access_token: 'header.' + base64Encode(JSON.stringify({ client_id: clientId })) + '.signature',\n };\n }\n\n return null;\n }\n\n private async initMockRepo(): Promise<void> {\n const defaultResources = [\n HomerSimpsonPreviousVersion,\n HomerSimpson,\n ExampleAccessPolicy,\n ExampleStatusValueSet,\n ExampleUserConfiguration,\n ExampleBot,\n ExampleClient,\n HomerDiagnosticReport,\n HomerEncounter,\n HomerCommunication,\n HomerMedia,\n HomerObservation1,\n HomerObservation2,\n HomerObservation3,\n HomerObservation4,\n HomerObservation5,\n HomerObservation6,\n HomerObservation7,\n HomerObservation8,\n HomerSimpsonSpecimen,\n TestOrganization,\n DifferentOrganization,\n ExampleQuestionnaire,\n ExampleQuestionnaireResponse,\n HomerServiceRequest,\n ExampleSubscription,\n BartSimpson,\n DrAliceSmithPreviousVersion,\n DrAliceSmith,\n DrAliceSmithSchedule,\n ExampleWorkflowQuestionnaire1,\n ExampleWorkflowQuestionnaire2,\n ExampleWorkflowQuestionnaire3,\n ExampleWorkflowPlanDefinition,\n ExampleWorkflowQuestionnaireResponse1,\n ExampleWorkflowTask1,\n ExampleWorkflowTask2,\n ExampleWorkflowTask3,\n ExampleWorkflowRequestGroup,\n ExampleSmartClientApplication,\n TestProject,\n TestProjectMembersihp,\n ];\n\n for (const resource of defaultResources) {\n await this.repo.createResource(resource);\n }\n\n for (const structureDefinition of StructureDefinitionList as StructureDefinition[]) {\n indexStructureDefinition(structureDefinition);\n await this.repo.createResource(structureDefinition);\n }\n\n for (const searchParameter of SearchParameterList) {\n await this.repo.createResource(searchParameter as SearchParameter);\n }\n\n DrAliceSmithSlots.forEach((slot) => this.repo.createResource(slot));\n }\n\n private async mockFhirHandler(method: HttpMethod, url: string, options: any): Promise<Resource> {\n if (url.startsWith('fhir/R4/ValueSet/$expand')) {\n return exampleValueSet;\n }\n\n const parsedUrl = new URL(url, 'https://example.com');\n\n let pathname = parsedUrl.pathname;\n if (pathname.includes('fhir/R4')) {\n pathname = pathname.substring(pathname.indexOf('fhir/R4') + 7);\n }\n\n let body = undefined;\n if (options.body) {\n body = JSON.parse(options.body);\n }\n\n const request: FhirRequest = {\n method,\n pathname,\n body,\n params: Object.create(null),\n query: Object.fromEntries(parsedUrl.searchParams),\n };\n\n const result = await this.router.handleRequest(request, this.repo);\n if (result.length === 1) {\n return result[0];\n } else {\n return result[1];\n }\n }\n}\n\nfunction base64Encode(str: string): string {\n return typeof window !== 'undefined' ? window.btoa(str) : Buffer.from(str).toString('base64');\n}\n"],"names":["ExampleAccessPolicy","resourceType","id","name","ExampleStatusValueSet","compose","include","concept","code","ExampleUserConfiguration","option","valueString","TestOrganization","meta","versionId","DifferentOrganization","DrAliceSmith","lastUpdated","author","reference","given","family","photo","contentType","url","DrAliceSmithPreviousVersion","DrAliceSmithSchedule","actor","display","DrAliceSmithSlots","schedule","createReference","result","slotDate","Date","day","hour","setHours","push","start","toISOString","setDate","getDate","ExampleBot","ExampleClient","ExampleQuestionnaire","title","subjectType","item","linkId","text","type","ExampleQuestionnaireResponse","questionnaire","subject","source","SIMPSONS_ADDRESS","use","line","city","state","postalCode","LisaSimpson","birthDate","contact","address","telecom","system","value","BartSimpson","HomerLisaRelatedPerson","patient","relationship","coding","HomerBartRelatedPerson","HomerSimpson","gender","identifier","active","link","other","MargeSimpson","HomerSimpsonPreviousVersion","HomerEncounter","HomerCommunication","encounter","payload","contentString","HomerMedia","content","HomerObservation1","status","HomerObservation2","valueQuantity","unit","referenceRange","low","HomerObservation3","high","HomerObservation4","comparator","interpretation","HomerObservation5","HomerObservation6","component","HomerObservation7","HomerObservation8","HomerSimpsonSpecimen","collection","collectedDateTime","note","HomerServiceRequest","orderDetail","specimen","authoredOn","HomerDiagnosticReport","basedOn","resultsInterpreter","SimpsonsFamily","actual","member","entity","ExampleSubscription","ExampleAuditEvent","exampleValueSet","expansion","contains","ExampleWorkflowQuestionnaire1","ExampleWorkflowQuestionnaire2","ExampleWorkflowQuestionnaire3","ExampleWorkflowPlanDefinition","action","definitionCanonical","getReferenceString","ExampleWorkflowQuestionnaireResponse1","ExampleWorkflowTask1","requester","input","valueReference","output","ExampleWorkflowTask2","ExampleWorkflowTask3","ExampleWorkflowRequestGroup","instantiatesCanonical","resource","TestProject","TestProjectMembersihp","project","profile","ExampleSmartClientApplication","description","redirectUri","launchUri","MockClient","MedplumClient","constructor","clientOptions","router","FhirRouter","repo","MemoryRepository","client","MockFetchClient","debug","super","baseUrl","clientId","storage","createPdf","docDefinition","tableLayouts","fonts","mockCreatePdf","fetch","options","mockFetch","this","clear","activeLoginOverride","undefined","getProfile","getUserConfiguration","menu","target","setActiveLoginOverride","getActiveLogin","getLogins","async","data","filename","onProgress","endsWith","Promise","reject","badRequest","loaded","lengthComputable","total","initialized","initPromise","initMockRepo","method","path","replace","console","log","response","mockHandler","JSON","stringify","resolve","ok","getStatus","headers","get","blob","json","startsWith","mockAdminHandler","mockAuthHandler","mockOAuthHandler","mockFhirHandler","_method","projectMatch","match","readResource","membershipMatch","mockChangePasswordHandler","mockLoginHandler","mockSetPasswordHandler","mockNewUserHandler","login","mockResetPasswordHandler","security","mfaEnrolled","sessions","authMethod","remoteAddress","browser","os","enrolled","enrollUri","allOk","_path","body","oldPassword","parse","issue","expression","details","password","email","access_token","str","client_id","window","btoa","Buffer","from","toString","defaultResources","createResource","structureDefinition","StructureDefinitionList","indexStructureDefinition","searchParameter","SearchParameterList","forEach","slot","parsedUrl","URL","pathname","includes","substring","indexOf","request","params","Object","create","query","fromEntries","searchParams","handleRequest","length"],"mappings":"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"}