oro-sdk 7.1.1-dev → 7.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"oro-sdk.cjs.development.js","sources":["../src/helpers/client.ts","../src/models/error.ts","../src/helpers/workflow.ts","../src/helpers/consult.ts","../src/helpers/patient-registration.ts","../src/helpers/vault-grants.ts","../src/helpers/prescription-refill.ts","../src/sdk-revision/client.ts","../src/client.ts","../src/services/external/clinia.ts","../src/index.ts"],"sourcesContent":["import {\n PopulatedWorkflowData,\n MetadataCategory,\n SelectedAnswersData,\n} from 'oro-sdk-apis'\nimport { PersonalInformations } from '../models/client'\n\nconst personalMetaToPrefix = {\n [MetadataCategory.Personal]: 'you',\n [MetadataCategory.ChildPersonal]: 'child',\n [MetadataCategory.OtherPersonal]: 'other',\n}\n\n/**\n * This function extract PersonalInformations from data input object coming from workflow\n * @param data extracted from WorkflowData\n * @returns PersonalInformations of a patient\n */\nexport function identificationToPersonalInformations(\n data: any,\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n): PersonalInformations {\n const prefix = personalMetaToPrefix[category]\n\n return {\n birthday: data[`${prefix}Birthday`],\n firstname: data[`${prefix}Firstname`],\n gender: data[`${prefix}Gender`],\n name: data[`${prefix}Name`],\n phone: data[`${prefix}Phone`],\n zip: data[`${prefix}Zip`],\n hid: data[`${prefix}HID`] ?? data[`${prefix}ID`], // This is done for backward compatibility (historically youID was used)\n pharmacy: data[`${prefix}Pharmacy`],\n address: data[`${prefix}Address`],\n }\n}\n\nexport function toActualObject(data: PopulatedWorkflowData) {\n const ret: any = {}\n\n Object.entries(data.fields).forEach(([key, field]) => {\n ret[key] = field.displayedAnswer ? field.displayedAnswer : field.answer\n })\n\n return ret\n}\n\n/**\n * This function update a PopulatedWorkflowData with PersonalInformations\n * @param infos the personal informations\n * @param data the PopulatedWorkflowData\n * @returns an updated PopulatedWorkflowData\n */\nexport function updatePersonalIntoPopulatedWorkflowData(\n infos: PersonalInformations,\n data: PopulatedWorkflowData,\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n) {\n const prefix = personalMetaToPrefix[category]\n\n const ret = JSON.parse(JSON.stringify(data)) // deep copy PopulatedWorkflowData\n\n if (infos.birthday && ret.fields[`${prefix}Birthday`])\n ret.fields[`${prefix}Birthday`].answer = infos.birthday\n if (infos.firstname && ret.fields[`${prefix}Firstname`])\n ret.fields[`${prefix}Firstname`].answer = infos.firstname\n if (infos.gender && ret.fields[`${prefix}Gender`])\n ret.fields[`${prefix}Gender`].answer = infos.gender\n if (infos.name && ret.fields[`${prefix}Name`])\n ret.fields[`${prefix}Name`].answer = infos.name\n if (infos.phone && ret.fields[`${prefix}Phone`])\n ret.fields[`${prefix}Phone`].answer = infos.phone\n if (infos.zip && ret.fields[`${prefix}Zip`])\n ret.fields[`${prefix}Zip`].answer = infos.zip\n if (infos.hid) {\n if (ret.fields[`${prefix}HID`]) {\n ret.fields[`${prefix}HID`].answer = infos.hid\n } else if (ret.fields[`${prefix}ID`]) {\n // This is done for backward compatibility (historically youID was used)\n ret.fields[`${prefix}ID`].answer = infos.hid\n } else {\n // If does not exist create it\n ret.fields[`${prefix}HID`] = { kind: 'text', answer: infos.hid }\n }\n }\n\n return ret\n}\n\n/**\n * This function extract an ISO 3166-1 alpha-2 country and subdivision code from data input object coming from workflow\n * @param answers answers from the WorkflowData\n * @returns an ISO 3166 alpha-2 code or undefined\n */\nexport function extractISOLocalityForConsult(\n answers?: SelectedAnswersData\n): string | undefined {\n if (!answers) {\n return undefined\n }\n\n const arrAnswersWithLocality = answers\n .flatMap((currentAnswerPage) => {\n const arrCountryFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Country') !== -1\n )\n .flat()\n const arrProvinceFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Province') !== -1\n )\n .flat()\n const arrConsultLocalFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Locality') !== -1\n )\n .flat()\n //returning the actual selected values, skipping if their IDs are more complex than a string\n return [\n ...arrCountryFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ...arrProvinceFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ...arrConsultLocalFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ]\n })\n .filter((item) => item !== undefined)\n\n const arrSelectedLocality = arrAnswersWithLocality.filter(\n (currentSelectedLocality) =>\n currentSelectedLocality.startsWith('isoLocalityConsult')\n )\n if (!arrSelectedLocality || arrSelectedLocality.length === 0) {\n console.log('no locality found in ' + arrSelectedLocality)\n return undefined\n }\n //to allow enforcing of an order, we will allow the following pattern in the isoLocalityConsult field name\n // isoLocalityConsult-QC-CA and isoLocalityConsult_1-QC-CA\n // or generally: isoLocalityConsult-<isoValue> or isoLocalityConsult_<priority>-<isoValue>\n const allowedLocalityPatterns = /isoLocalityConsult(?:_(?<indexPriority>\\d*))?-(?<isoValue>[a-zA-Z0-9]{2}-[a-zA-Z0-9]{1,3})/\n const finalLocality = arrSelectedLocality.reduce<string | undefined>(\n (finalLocality, currentSelectedLocality) => {\n const extractedSelected = allowedLocalityPatterns.exec(\n currentSelectedLocality\n )\n const [, indexSelectedPriority, isoSelectedValue] =\n extractedSelected ?? []\n if (!finalLocality) {\n return isoSelectedValue\n }\n\n const extractedFinal = allowedLocalityPatterns.exec(finalLocality)\n const [, indexFinalPriority, isoFinalValue] = extractedFinal ?? []\n //we only keep the old value if there's priority used\n // and the new value is of lower priority\n if (\n !indexSelectedPriority ||\n (indexFinalPriority &&\n indexFinalPriority > indexSelectedPriority)\n ) {\n return isoFinalValue\n }\n\n return isoSelectedValue\n },\n undefined\n )\n\n console.log('Picking locality ' + finalLocality)\n return finalLocality\n}\n\nconst sessionPrivateKeyPrefix = 'sess-pkey'\nexport function sessionStorePrivateKeyName(id: string): string {\n return sessionPrivateKeyPrefix + id\n}\n","export class IncompleteAuthentication extends Error { }\nexport class MissingGrant extends Error { }\nexport class MissingGrantFilter extends Error { }\nexport class MissingLockbox extends Error { }\nexport class MissingLockboxOwner extends Error { }\nexport class AssociatedLockboxNotFound extends Error { }\nexport class WorkflowAnswersMissingError extends Error { }\n","import { getMany } from 'idb-keyval'\nimport { WorkflowAnswersMissingError } from '../models'\nimport {\n MetadataCategory,\n PopulatedWorkflowData,\n PopulatedWorkflowField,\n PreviousAnswerData,\n QuestionData,\n SelectedAnswerData,\n SelectedAnswersData,\n WorkflowData,\n WorkflowPageData,\n WorkflowUploadedImage,\n} from 'oro-sdk-apis'\n\nexport async function filterTriggeredAnsweredWithKind(\n workflowData: WorkflowData,\n kind:\n | 'text'\n | 'text-area'\n | 'text-select-group'\n | 'date'\n | 'number'\n | 'images'\n | 'images-alias'\n | 'body-parts'\n | 'pharmacy-picker'\n | 'online-pharmacy-picker'\n | 'hair-selector-women'\n | 'hair-selector-men'\n | 'hair-loss-stage'\n | 'hair-loss-frontal'\n): Promise<SelectedAnswerData[]> {\n if (!workflowData.selectedAnswers) throw WorkflowAnswersMissingError\n // Flattens the list of answered questions\n let flattenedAnswers = flattenSelectedAnswers(workflowData.selectedAnswers)\n // Generates a list of applicable questions\n let triggeredQuestionsWithKind = Object.fromEntries(\n workflowData.pages\n .map((a) => {\n return Object.entries(a.questions).filter(\n ([_, question]) => isTriggered(question.triggers || [], flattenedAnswers) && question.kind === kind\n )\n })\n .flat()\n )\n\n const samePageAnswers = workflowData.selectedAnswers.reduce((prev, cur) => {\n return { ...prev, ...cur }\n }, {})\n\n const res = Object.keys(triggeredQuestionsWithKind).map((questionFieldName) => {\n return samePageAnswers[questionFieldName]\n })\n\n return res\n}\n\n/**\n * Filters and Populates the `selectedAnswers` from the workflow by\n * Cross-referencing the `MetaCategory` of the answer's respective question\n * Populates the fields labels and values that are of radio, dropdown and checkbox types\n *\n * @param workflowData\n * @param category\n * @returns An array of record key, value pairs\n */\nexport async function getWorkflowDataByCategory(\n workflowData: WorkflowData,\n category: MetadataCategory\n): Promise<PopulatedWorkflowData> {\n if (!workflowData.selectedAnswers) throw WorkflowAnswersMissingError\n\n // Flattens the list of answered questions\n let flattenedAnswers = flattenSelectedAnswers(workflowData.selectedAnswers)\n // Generates a list of applicable questions\n let triggeredQuestions = Object.fromEntries(\n workflowData.pages\n .map((a) => {\n return Object.entries(a.questions).filter(([_, question]) =>\n isTriggered(question.triggers || [], flattenedAnswers)\n )\n })\n .flat()\n )\n\n const fields: Record<string, PopulatedWorkflowField> = {}\n\n let answersPerPage = (workflowData.selectedAnswers ?? [])\n .map((pageAnswers, _) =>\n Object.entries(pageAnswers)\n .map(([k, v]) => [k, v, undefined]) as [string, SelectedAnswerData, PreviousAnswerData | undefined][])\n\n if (workflowData.previousAnswers) {\n // Since the selectedAnswers and previousAnswers should be a 1-1, we can map them together\n answersPerPage = answersPerPage\n .map((pageAnswers, pageIndex) => pageAnswers\n .map(([questionId, v]): [string, SelectedAnswerData, PreviousAnswerData | undefined] => {\n if (workflowData.previousAnswers && workflowData.previousAnswers[pageIndex][questionId])\n return [questionId, v, workflowData.previousAnswers[pageIndex][questionId]]\n return [questionId, v, undefined]\n }\n ))\n }\n\n // Generates the answers of the specified category and adds the appropriate values if any are missing\n return Promise.all(\n answersPerPage\n .flat(1) // remove the pages, we want the answers all together\n .filter(([k]) => triggeredQuestions[k] && triggeredQuestions[k]['metaCategory'] === category)\n .map(([k, v, p]) => {\n return populateWorkflowField(triggeredQuestions[k], v, p).then((populatedValue) => {\n fields[k] = populatedValue\n })\n })\n )\n .then(() => {\n const ret: PopulatedWorkflowData = {\n workflowCreatedAt: workflowData.createdAt,\n workflowId: workflowData.id,\n locale: workflowData.locale,\n fields,\n }\n return ret\n })\n .catch((err) => {\n console.error(`Error while extracting ${category} data from workflow`, err)\n throw err\n })\n}\n\nexport async function getImagesFromIndexDb(answer: SelectedAnswerData): Promise<WorkflowUploadedImage[]> {\n return await getMany<WorkflowUploadedImage>((answer as any[]).map((v) => v.id ?? v) as string[])\n}\n\n/**\n * (If applicable) Based on the question kind, and the answer type this function will add and replace the appropriate fields to the\n * field values if they are radio, dropdown and checkbox fields\n *\n *\n * @param question\n * @param answerValue\n * @returns\n */\nasync function populateWorkflowField(\n question: QuestionData,\n answerValue: SelectedAnswerData,\n previousAnswer?: PreviousAnswerData\n): Promise<PopulatedWorkflowField> {\n let answer: any\n let displayedAnswer: string | string[] | undefined = undefined\n switch (question.kind) {\n case 'text-select-group':\n if (question.answers) {\n displayedAnswer = `${answerValue[0]} ${question.answers[answerValue[1] as string].text}`\n }\n answer = answerValue\n break\n case 'radio':\n case 'radio-card':\n case 'select':\n if (question.answers) {\n displayedAnswer = question.answers[answerValue as string].text\n }\n\n answer = answerValue\n break\n case 'multiple':\n case 'checkbox-group':\n displayedAnswer = (answerValue as string[]).map((value) => {\n if (question.answers) {\n return question.answers[value].text\n }\n\n throw new WorkflowAnswersMissingError()\n })\n\n answer = answerValue\n break\n case 'images':\n answer = await getImagesFromIndexDb(answerValue).then((images) =>\n images.map((image) => {\n const { name, imageData } = image\n\n return { name, imageData }\n })\n )\n break\n default:\n answer = answerValue\n }\n\n return Promise.resolve({\n answer,\n displayedAnswer,\n previousAnswer,\n kind: question.kind,\n })\n}\n\n/**\n * Determine if a question is triggered by some answers\n *\n * We use the following logical combinations of rules:\n *\n * #### Single string\n *\n * ```\n * // Required: rule1\n * rules: rule1\n * ```\n *\n * #### Array of strings (AND is applied between statements):\n *\n * ```\n * // Required: rule1 AND rule2\n * rules: [ rule1, rule2 ]\n * ```\n *\n * #### Array of arrays of strings (OR is applied between inner arrays. AND is applied between inner arrays statements)\n *\n * ```\n * // Required: rule1 OR rule2\n * rules: [\n * [ rule1 ],\n * [ rule2 ]\n * ]\n *\n * // Required: rule1 OR (rule2 AND rule3)\n * rules: [\n * [ rule1 ],\n * [ rule2, rule3 ]\n * ]\n *\n * // THIS IS FORBIDDEN\n * rules: [\n * rule1, // <-- THIS IS FORBIDDEN. Instead use [ rule1 ]\n * [ rule2, rule3 ]\n * ]\n * ```\n *\n * @param triggers the triggering rules\n * @param answers the answers to check againts triggering rules\n * @returns `true` if triggers are verified against ansers. Otherwise, returns `false`.\n * @throws an Error if triggers typing is wrong\n */\nexport function isTriggered(triggers: string[][] | string[] | string, answers: string[]): boolean {\n // is triggers contained in answers\n if (typeof triggers === 'string') {\n return answers.includes(triggers)\n }\n\n if (Array.isArray(triggers)) {\n // rule combination kind: rule1 OR (rule2 AND rule3)\n if (Array.isArray(triggers[0])) {\n return (triggers as string[][]).some((subSetTriggers) =>\n subSetTriggers.every((trigger) => answers.includes(trigger))\n )\n } else {\n // rule combination kind: rule1 AND rule2\n return (triggers as string[]).every((trigger) => answers.includes(trigger))\n }\n }\n\n throw Error('[isTriggered] triggers is not typed well')\n}\n\nexport function flattenSelectedAnswers(answers: SelectedAnswersData) {\n const linearAnswers: SelectedAnswerData[] = []\n\n for (const answer of answers) {\n linearAnswers.push(...Object.values(answer))\n }\n\n return linearAnswers.flat(1)\n}\n\n/**\n * This function helps you to get a valid workflow selectedAnswers structure\n * @param workflow the workflow data to use to initialize selectedAnswers\n * @param useDefault use workflow default values or not (this is used to avoid having unset values to appear in summaries)\n * @returns a valid selectedAnswers structure\n */\nexport function getInitialisedSelectedAnswers(workflow: WorkflowData, useDefault: boolean = true) {\n return workflow.pages.map((page) => {\n const ret: any = {}\n for (const [id, question] of Object.entries(page.questions)) {\n if (question.kind === 'body-parts') {\n ret[id] = useDefault ? [] : undefined\n } else {\n ret[id] = useDefault && question.defaultValue ? question.defaultValue : undefined\n }\n }\n return ret\n })\n}\n\nexport function fillWorkflowFromPopulatedWorkflow(workflow: WorkflowData, populatedWorkflow: PopulatedWorkflowData): WorkflowData {\n const filledWorkflow: WorkflowData = JSON.parse(JSON.stringify(workflow))\n\n if (!filledWorkflow.selectedAnswers) {\n filledWorkflow.selectedAnswers = getInitialisedSelectedAnswers(filledWorkflow, false)\n }\n\n if (!filledWorkflow.previousAnswers && !!Object.values(populatedWorkflow.fields).find(answers => !!answers.previousAnswer))\n filledWorkflow.previousAnswers = filledWorkflow.selectedAnswers\n .map(pageAnswers => Object\n .fromEntries(Object\n .entries(pageAnswers)\n .map(([questionId, answer]) => ([questionId, { previousAnswer: answer, changed: false }])))\n )\n\n filledWorkflow.pages.forEach((page: WorkflowPageData, pageIdx: number) => {\n for (const [id] of Object.entries(page.questions)) {\n if (populatedWorkflow.fields[id]) {\n if (filledWorkflow.selectedAnswers)\n filledWorkflow.selectedAnswers[pageIdx][id] = populatedWorkflow.fields[id].answer as\n | string\n | string[]\n if (filledWorkflow.previousAnswers && populatedWorkflow.fields[id]?.previousAnswer)\n filledWorkflow.previousAnswers[pageIdx][id] = populatedWorkflow.fields[id].previousAnswer!\n }\n }\n })\n\n return filledWorkflow\n}\n\n/**\n * Checks and toggles the changed status for every answer in the workflow\n * by comparing the previous answer with the selected answer of the same question\n * \n * @param workflow \n * @returns the workflow with the updated `changed` statuses\n */\nexport function detectChangesInWorkflowAnswers(workflow: WorkflowData): WorkflowData {\n return {\n ...workflow,\n previousAnswers: workflow.previousAnswers ?\n workflow.previousAnswers\n .map((pageAnswers, pageId) => Object.fromEntries(Object.entries(pageAnswers).map(([question, answer]) => {\n let selectedAnswer = undefined\n if (workflow.selectedAnswers && workflow.selectedAnswers[pageId][question])\n selectedAnswer = workflow.selectedAnswers[pageId][question]\n let changed = !!selectedAnswer && !equalsAnswer(selectedAnswer, answer.previousAnswer)\n return [question, { ...answer, changed }]\n }))) : undefined\n }\n}\n\nfunction equalsAnswer<T = SelectedAnswerData | WorkflowUploadedImage[]>(answer1: T, answer2: T): boolean {\n return JSON.stringify(answer1) === JSON.stringify(answer2)\n}","import { Consult, ConsultRequest } from 'oro-sdk-apis'\nimport { OroClient } from '..'\n\n/**\n * Creates a consultation if one has not been created and fails to be retrieved by the payment intent\n * @param consult\n * @param oroClient\n * @returns the consult Uuid\n */\nexport async function getOrCreatePatientConsultationUuid(\n consult: ConsultRequest,\n oroClient: OroClient\n): Promise<Consult> {\n let payment = await oroClient.practiceClient.practiceGetPayment(\n consult.uuidPractice,\n consult.idStripeInvoiceOrPaymentIntent\n )\n if (payment && payment.uuidConsult) {\n return oroClient.consultClient.getConsultByUUID(payment.uuidConsult).catch((err) => {\n console.error('Error while retrieving consult from linked payment infos', err)\n throw err\n })\n } else {\n return await oroClient.consultClient.consultCreate(consult).catch((err) => {\n console.error('Error while creating consult after a payment found with no consult linked', err)\n throw err\n })\n }\n}\n","import {\n Consult,\n ConsultationImageMeta,\n ConsultationMeta,\n ConsultRequest,\n ConsultType,\n DocumentType,\n IdentityResponse,\n IndexKey,\n MedicalMeta,\n MedicalStatus,\n MetadataCategory,\n PersonalMeta,\n PopulatedWorkflowData,\n Practitioner,\n PreferenceMeta,\n RawConsultationMeta,\n Term,\n Terms,\n Uuid,\n VaultIndex,\n WorkflowData,\n} from 'oro-sdk-apis'\nimport {\n detectChangesInWorkflowAnswers,\n filterTriggeredAnsweredWithKind,\n getImagesFromIndexDb,\n getWorkflowDataByCategory,\n identificationToPersonalInformations,\n OroClient,\n RegisterPatientOutput,\n toActualObject,\n} from '..'\nimport { getOrCreatePatientConsultationUuid } from './consult'\n\nconst MAX_RETRIES = 15\n\n/**\n * Completes a registration for a user retrying the complete flow a maximum of 15 times\n *\n * @description The order of importance when registering:\n * Creates a consultation if none exist\n * Retrieves or create's a lockbox if none exist\n * Grants the lockbox (if new) to all practitioners in the practice\n * Stores or fetches the patient data (without images)\n * Indexes the lockbox to the consult for all practitioners (done after inserting since index can be rebuilt from grants)\n * Stores the image data - done last since the majority of failure cases occur here\n * Creates the recovery payloads if they don't exist\n *\n * @param patientUuid\n * @param consultRequest\n * @param workflow\n * @param oroClient\n * @param masterKey\n * @param recoveryQA\n * @param indexSearch create search index for the consultation if true\n * @param onProgress callback that is called whenever a new step of patient registration is executed. Note: progress ranges from 0 to 1, and descriptionKey is a description of the progress as a key so the app would use it to translate the description\n * @returns the successful registration\n */\nexport async function registerPatient(\n patientUuid: Uuid,\n consultRequest: ConsultRequest,\n workflow: WorkflowData,\n oroClient: OroClient,\n masterKey?: Uuid,\n recoveryQA?: {\n recoverySecurityQuestions: string[]\n recoverySecurityAnswers: string[]\n },\n indexSearch: boolean = true,\n onProgress?: (\n progress: number,\n descriptionKey: string,\n extraInfo?: { storedImagesNum?: number; totalImagesNum?: number }\n ) => void\n): Promise<RegisterPatientOutput> {\n let consult: Consult | undefined = undefined\n let lockboxUuid: Uuid | undefined = undefined\n let practitionerAdmin: Uuid | undefined = undefined\n let retry = MAX_RETRIES\n let identity: IdentityResponse | undefined = undefined\n let errorsThrown: Error[] = []\n const stepsTotalNum = 9\n let currentStep: number\n\n // toggle all changed statuses if this workflow has previous/revision data \n workflow = detectChangesInWorkflowAnswers(workflow)\n\n for (; retry > 0; retry--) {\n try {\n currentStep = 0\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'retrieve_practitioners')\n\n // Wait a bit each retry (we also want the first one to wait)\n await new Promise((resolve) => setTimeout(resolve, 2000))\n\n // Retrieving practitioners\n if (!practitionerAdmin)\n practitionerAdmin = (await oroClient.practiceClient.practiceGetFromUuid(consultRequest.uuidPractice))\n .uuidAdmin\n\n let practitioners: Practitioner[] = await oroClient.practiceClient\n .practiceGetPractitioners(consultRequest.uuidPractice)\n .catch((err) => {\n console.log(`Error retrieving practitioners`, err)\n return []\n })\n\n // Creating consult\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'create_consult')\n\n if (!consult) {\n consult = await getOrCreatePatientConsultationUuid(consultRequest, oroClient)\n }\n\n // Creating lockbox\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'create_lockbox')\n\n if (!lockboxUuid) lockboxUuid = await getOrCreatePatientLockbox(oroClient)\n\n if (!identity) identity = await oroClient.guardClient.identityGet(patientUuid)\n\n await oroClient.grantLockbox(practitionerAdmin, lockboxUuid).catch((err) => {\n console.error(`Error while granting lockbox to practitioner admin ${practitionerAdmin}`, err)\n // if we cannot grant to the admin, then the registration will fail\n errorsThrown.push(err)\n })\n\n // Patient Grant to practice\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'grant_patient')\n\n let grantPromises = practitioners\n .filter((practitioner) => practitioner.uuid !== practitionerAdmin)\n .map(async (practitioner) => {\n return oroClient.grantLockbox(practitioner.uuid, lockboxUuid!).catch((err) => {\n console.error(`Error while granting lockbox to practitioner`, err)\n // Acceptable to continue as admin has already been granted, but we should still retry until the last retry remains\n if (retry <= 1) return\n errorsThrown.push(err)\n })\n })\n\n const consultIndex: VaultIndex = {\n [IndexKey.ConsultationLockbox]: [\n {\n grant: {\n lockboxUuid,\n lockboxOwnerUuid: patientUuid,\n },\n consultationId: consult.uuid,\n },\n ],\n }\n\n // the index will identify in which lockbox a consultation resides\n let consultIndexPromises = practitioners.map(async (practitioner) => {\n return oroClient.vaultIndexAdd(consultIndex, practitioner.uuid).catch((err) => {\n console.error(\n `[SDK: registration] Error while adding to the practitioner's index ${practitioner.uuid}`,\n err\n )\n // Acceptable to continue as the index can be rebuilt, but we should still retry until the last retry remains\n if (retry <= 1) return\n else errorsThrown.push(err)\n })\n })\n\n await storeImageAliases(\n consult.uuid,\n lockboxUuid,\n workflow,\n oroClient,\n onProgress\n ? {\n onProgress,\n currentStep,\n stepsTotalNum,\n }\n : undefined\n ).catch((err) => {\n console.error('[SDK: registration] Some errors happened during image upload', err)\n // Acceptable to continue as images can be requested during the consultation, but we should still retry until the last retry remains\n if (retry <= 1) return\n else errorsThrown.push(err)\n })\n ++currentStep\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'store_patient_data')\n\n await storePatientData(\n consult.uuid,\n consultRequest.isoLanguageRequired,\n lockboxUuid,\n workflow,\n oroClient,\n consult.consultType\n ).catch((err) => {\n console.error('[SDK: registration] Some errors happened during patient data upload', err)\n errorsThrown.push(err)\n })\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'set_masterkey')\n\n if (masterKey && !identity?.recoveryMasterKey) {\n // generate and store recovery payload and updates the identity\n identity = await oroClient.updateMasterKey(patientUuid, masterKey, lockboxUuid).catch((err) => {\n console.error(`[SDK: registration] Error while updating master key`, err)\n /// it's acceptable to continue registration (return old identity)\n if (retry <= 1) return\n errorsThrown.push(err)\n return identity\n })\n } else {\n // we did not set the master key so we do not return it\n masterKey = undefined\n }\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'set_security_questions')\n\n if (recoveryQA && !identity?.recoverySecurityQuestions)\n // Patient security question recovery threshold is 2 answers and updates the identity\n identity = await oroClient\n .updateSecurityQuestions(\n patientUuid,\n recoveryQA.recoverySecurityQuestions,\n recoveryQA.recoverySecurityAnswers,\n 2\n )\n .catch((err) => {\n console.error(`[SDK: registration] Error while updating security questions`, err)\n /// it's acceptable to continue registration (return old identity)\n if (retry <= 1) return\n errorsThrown.push(err)\n return identity\n })\n\n await Promise.all([...grantPromises, ...consultIndexPromises])\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'search_indexing')\n\n if (indexSearch) {\n await buildConsultSearchIndex(consult, workflow, oroClient).catch((err) => {\n console.error(\n '[SDK: registration] personal information not found or another error occured during search indexing',\n err\n )\n if (retry <= 1) return // this statement is to avoid failing the registration due to the failure in search indexing the consult, this practically implements a soft retry\n errorsThrown.push(err)\n })\n }\n\n if (errorsThrown.length > 0) throw errorsThrown\n\n if (consult.statusMedical === MedicalStatus.Assigning) {\n //hopefully svelte query received all updates\n console.warn('Consult assignation took too much time, moving to new anyway')\n }\n // Deem the consultation as ready\n await oroClient.consultClient.updateConsultByUUID(consult.uuid, {\n statusMedical: MedicalStatus.New,\n })\n\n // if we got through the complete flow, the registration succeeded\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'success')\n\n break\n } catch (err) {\n console.error(`[SDK] Error occured during registration: ${err}, retrying... Retries remaining: ${retry}`)\n errorsThrown = []\n continue\n }\n }\n\n if (retry <= 0) {\n console.error('[SDK] registration failed: MAX_RETRIES reached')\n throw 'RegistrationFailed'\n }\n\n console.log('Successfully Registered')\n await oroClient.cleanIndex()\n return {\n masterKey,\n consultationId: consult!.uuid,\n lockboxUuid: lockboxUuid!,\n }\n}\n\n/**\n * Creates a new lockbox for the patient if they do not have any, otherwise, use the first (and only one)\n * @param oroClient\n * @returns the lockbox Uuid\n */\nasync function getOrCreatePatientLockbox(oroClient: OroClient): Promise<Uuid> {\n let grants = await oroClient.getGrants()\n if (grants.length > 0) {\n console.log('The grant has already been created, skipping lockbox create step')\n return grants[0].lockboxUuid!\n } else {\n let lockboxResponse = await oroClient.vaultClient.lockboxCreate().catch((err) => {\n console.error('Error while creating lockbox', err)\n throw err\n })\n // Since the creation of a lockbox will change the scope of a user, we will force refresh the tokens\n let tokens = await oroClient.guardClient.authRefresh()\n await oroClient.guardClient.setTokens({ accessToken: tokens.accessToken, refreshToken: tokens.refreshToken })\n await oroClient.guardClient.whoAmI(true)\n\n return lockboxResponse.lockboxUuid\n }\n}\n\n/**\n * Store all patient related information into his/her lockbox\n * @param consultationId The consultation id\n * @param isoLanguage the prefered language of communication (ISO 639-3 https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes)\n * @param lockboxUuid the lockbox uuid to store data in\n * @param workflow the workflow used to extract informations\n * @param oroClient an oroClient instance\n * @returns\n */\nasync function storePatientData(\n consultationId: Uuid,\n isoLanguage: string,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient,\n consultType: ConsultType\n): Promise<(Uuid | void)[]> {\n // Create and store registration data\n let patientDataPromises = [\n // Storing Raw data first\n oroClient.getOrInsertJsonData<RawConsultationMeta>(\n lockboxUuid,\n workflow,\n {\n category: MetadataCategory.Raw,\n contentType: 'application/json',\n consultationId,\n },\n {}\n ),\n getWorkflowDataByCategory(workflow, MetadataCategory.Consultation).then((data) =>\n oroClient.getOrInsertJsonData<ConsultationMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId, // TODO: deprecated. Will finally only be in privateMetadata\n },\n { consultationId },\n { withNotification: true, forceReplace: false, updateMedicalStatus: false }\n // the only data that needs to include an email notification\n )\n ),\n getWorkflowDataByCategory(workflow, MetadataCategory.Medical).then((data) =>\n oroClient.getOrInsertJsonData<MedicalMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Medical,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId!],\n },\n {}\n )\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.Personal,\n oroClient\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.ChildPersonal,\n oroClient\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.OtherPersonal,\n oroClient\n ),\n oroClient.getOrInsertJsonData<PreferenceMeta>(\n lockboxUuid,\n { isoLanguage },\n {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n },\n {}\n ),\n ]\n\n switch (consultType) {\n case ConsultType.FollowUp:\n patientDataPromises.push(\n getWorkflowDataByCategory(workflow, MetadataCategory.Followup).then((data) =>\n oroClient.getOrInsertJsonData(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Followup,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId,\n },\n { consultationId },\n { withNotification: false, forceReplace: false, updateMedicalStatus: false }\n // the only data that needs to include an email notification\n ))\n )\n break\n case ConsultType.Onboard:\n case ConsultType.Refill:\n default:\n break;\n }\n return Promise\n .all(patientDataPromises)\n .then((dataUuids) => dataUuids.flat())\n}\n\nasync function storeImageAliases(\n consultationId: Uuid,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient,\n progress?: {\n currentStep: number\n stepsTotalNum: number\n onProgress: (\n progress: number,\n descriptionKey: string,\n extraInfo?: { storedImagesNum?: number; totalImagesNum?: number }\n ) => void\n }\n): Promise<(Uuid | void)[]> {\n const images = await getImagesFromIndexDb((await filterTriggeredAnsweredWithKind(workflow, 'images-alias')).flat())\n\n const nonNullImages = images.filter((img) => !!img)\n\n if (images.length !== nonNullImages.length) {\n console.error('[SDK] Some images have not been found, they have been skipped.')\n }\n\n let storedImagesNum = 0\n let totalImagesNum = nonNullImages.length\n if (progress)\n progress.onProgress(progress.currentStep / progress.stepsTotalNum, 'store_images', {\n storedImagesNum,\n totalImagesNum,\n })\n\n let promises = nonNullImages.map((image) => {\n return oroClient\n .getOrInsertJsonData<ConsultationImageMeta>(\n lockboxUuid,\n image,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.ImageAlias,\n consultationId,\n idbId: image.idbId as string,\n },\n {}\n )\n .then(() => {\n if (progress) {\n ++storedImagesNum\n let progressStepValue =\n Math.round(\n ((progress.currentStep + 1) / progress.stepsTotalNum -\n progress.currentStep / progress.stepsTotalNum) *\n 100\n ) / 100\n progress.onProgress(\n progress.currentStep / progress.stepsTotalNum +\n progressStepValue * (storedImagesNum / totalImagesNum),\n 'store_images',\n {\n storedImagesNum,\n totalImagesNum,\n }\n )\n }\n })\n })\n return Promise.all(promises)\n}\n\n/**\n * Extracts the workflow MetadataCategory for Personal, ChildPersonal and OtherPersonal\n * then stores it in the vault\n *\n * @param workflow\n * @param lockboxUuid\n * @param category\n * @returns The data uuid\n */\nexport async function extractAndStorePersonalWorkflowData(\n workflow: WorkflowData,\n lockboxUuid: Uuid,\n consultationId: Uuid,\n category: MetadataCategory.Personal | MetadataCategory.ChildPersonal | MetadataCategory.OtherPersonal,\n oroClient: OroClient\n): Promise<Uuid | void> {\n return getWorkflowDataByCategory(workflow, category as unknown as MetadataCategory).then((data) => {\n if (Object.keys(data.fields).length === 0) return\n return oroClient.getOrInsertJsonData<PersonalMeta>(\n lockboxUuid,\n data,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId],\n },\n {}\n )\n })\n}\n\n/**\n * Given workflow data, it populates it with Personal, ChildPersonal, and OtherPersonal workflow data\n * @param workflow\n */\nexport async function extractPersonalInfoFromWorkflowData(workflow: WorkflowData): Promise<{\n personalInfoPopulatedWfData: PopulatedWorkflowData\n childPersonalInfoPopulatedWfData: PopulatedWorkflowData\n otherPersonalInfoPopulatedWfData: PopulatedWorkflowData\n}> {\n return Promise.all([\n getWorkflowDataByCategory(workflow, MetadataCategory.Personal),\n getWorkflowDataByCategory(workflow, MetadataCategory.ChildPersonal),\n getWorkflowDataByCategory(workflow, MetadataCategory.OtherPersonal),\n ]).then(([personalInfoPopulatedWfData, childPersonalInfoPopulatedWfData, otherPersonalInfoPopulatedWfData]) => {\n return {\n personalInfoPopulatedWfData,\n childPersonalInfoPopulatedWfData,\n otherPersonalInfoPopulatedWfData,\n }\n })\n}\n\n/**\n * Creates the search index for the first name, last name, and the short id of the given consultation\n * @param consult the consultation to be search indexed\n * @param workflow the workflow data\n * @param oroClient\n */\nexport async function buildConsultSearchIndex(consult: Consult, workflow: WorkflowData, oroClient: OroClient) {\n let terms: Terms = [\n <Term>{\n kind: 'consult-shortid',\n value: consult.shortId,\n },\n ]\n\n const { personalInfoPopulatedWfData, childPersonalInfoPopulatedWfData, otherPersonalInfoPopulatedWfData } =\n await extractPersonalInfoFromWorkflowData(workflow)\n\n const personalInfo = identificationToPersonalInformations(\n toActualObject(personalInfoPopulatedWfData),\n MetadataCategory.Personal\n )\n const childPersonalInfo = identificationToPersonalInformations(\n toActualObject(childPersonalInfoPopulatedWfData),\n MetadataCategory.ChildPersonal\n )\n const otherPersonalInfo = identificationToPersonalInformations(\n toActualObject(otherPersonalInfoPopulatedWfData),\n MetadataCategory.OtherPersonal\n )\n\n terms.push(\n <Term>{\n kind: 'first-name',\n value: personalInfo.firstname,\n },\n <Term>{\n kind: 'last-name',\n value: personalInfo.name,\n }\n )\n\n if (childPersonalInfo.firstname && childPersonalInfo.name) {\n terms.push(\n <Term>{\n kind: 'first-name',\n value: childPersonalInfo.firstname,\n },\n <Term>{\n kind: 'last-name',\n value: childPersonalInfo.name,\n }\n )\n }\n\n if (otherPersonalInfo.firstname && otherPersonalInfo.name) {\n terms.push(\n <Term>{\n kind: 'first-name',\n value: otherPersonalInfo.firstname,\n },\n <Term>{\n kind: 'last-name',\n value: otherPersonalInfo.name,\n }\n )\n }\n\n await oroClient.searchClient.index(consult.uuid, terms)\n}\n","import { CryptoRSA, uuidParse} from \"oro-toolbox\"\nimport { EncryptedIndexEntry, Grant, IndexConsultLockbox } from \"oro-sdk-apis\"\n\n/**\n * Decrypts and returns the encrypted grants\n * If something went wrong during decryption, that grant will be removed from the list\n *\n * @param encryptedGrants: an array of encrypted grants\n * @param rsaKey: the rsa key used to decrypt the encrypted grants\n * @returns an array of grants\n */\nexport function decryptGrants(encryptedGrants: Grant[], rsaKey: CryptoRSA): Grant[] {\n return encryptedGrants\n .map(grant => {\n if (grant.encryptedLockbox && !grant.lockboxUuid) {\n try {\n grant.lockboxUuid = uuidParse(\n rsaKey.base64DecryptToBytes(grant.encryptedLockbox)\n )\n } catch (e) {\n console.error('[sdk:index] The grant could not be decrypted or was not a valid UUID: ', e)\n }\n }\n return grant\n })\n .filter(grant => grant.lockboxUuid)\n}\n\n/**\n * Decrypts the encrypted consult lockboxes and returns their grants\n * If something went wrong during decryption, that grant will be removed from the list\n *\n * @param encryptedConsultLockboxes: an array of encrypted entries\n * @param rsaKey: the rsa key used to decrypt the encrypted entries\n * @returns an array of grants\n */\nexport function decryptConsultLockboxGrants(encryptedConsultLockboxes: EncryptedIndexEntry[], rsaKey: CryptoRSA): Grant[] {\n return encryptedConsultLockboxes\n .map(encryptedConsultLockboxes => {\n try {\n return [true, (rsaKey.base64DecryptToJson(\n encryptedConsultLockboxes.encryptedIndexEntry\n ) as IndexConsultLockbox).grant]\n } catch(e) {\n console.error('[sdk:index] The consult lockbox grant could not be decrypted: ', e)\n return [false, undefined] // if decryption fails, we want to ignore the grant but not fail the call\n }\n })\n .filter(grantsTuple => grantsTuple[0])\n .map(grantTuples => grantTuples[1] as Grant)\n}","import {\n Consult,\n ConsultRequest,\n DocumentType,\n MedicalStatus,\n MetadataCategory,\n PlaceData,\n SelectedAnswersData,\n Uuid,\n WorkflowData,\n} from 'oro-sdk-apis'\nimport { buildConsultSearchIndex, OroClient } from '..'\nimport { getOrCreatePatientConsultationUuid } from './consult'\n\nconst MAX_RETRIES = 15\n/**\n * Placeholder while the workflow interpreter for the refill flows is complete\n *\n * Creates a fake workflow in which the workflow data will reside\n *\n * @todo deprecate this function when using workflows and populating them from the app\n *\n * @param isTreatmentWorking the value from the `is treatment working` question\n * @param hasSideEffects the value from the `does the treatment have side effects` question\n * @param deliveryAddress the provided delivery address\n * @param pharmacy\n * @returns a workflow\n */\nexport function getRefillAnswersAsWorkflow(\n isTreatmentWorking: string,\n hasSideEffects: string,\n deliveryAddress?: string,\n pharmacy?: PlaceData\n): WorkflowData {\n let selectedAnswers: SelectedAnswersData = [\n {\n ['isTreatmentWorking']: isTreatmentWorking,\n ['hasSideEffects']: hasSideEffects,\n },\n ]\n\n // appends the delivery address to the first page of the answers if provided\n if (deliveryAddress) selectedAnswers[0] = { ...selectedAnswers[0], ['deliveryAddress']: deliveryAddress }\n\n // appends the pharmacy to the first page of the answers if provided\n if (pharmacy) selectedAnswers[0] = { ...selectedAnswers[0], ['pharmacy']: JSON.stringify(pharmacy) }\n\n return {\n id: '32573a20-6f1d-49be-9ad3-b87c58074979',\n createdAt: '2022-10-03T00:00:00.000Z',\n culDeSacs: [],\n hidePlanRules: [],\n startingPlanIds: [],\n pages: [\n {\n title: 'Prescription Refill',\n groups: [\n {\n type: 'field-group',\n fieldsAndGroups: [\n {\n type: 'field',\n id: 'isTreatmentWorking',\n },\n {\n type: 'field',\n id: 'hasSideEffects',\n },\n {\n type: 'field',\n id: 'youPharmacy',\n },\n {\n type: 'field',\n id: 'youAddress',\n },\n ],\n },\n ],\n questions: {\n isTreatmentWorking: {\n label: 'Is the treatment working for you?',\n kind: 'radio',\n inline: true,\n inlineLabel: false,\n metaCategory: MetadataCategory.Refill,\n answers: {\n '73bec6eb-0310-4787-af3c-ac9c291737b2': {\n text: 'Yes',\n },\n 'e193951f-986f-4db3-bede-903045a1804a': {\n text: 'No',\n },\n },\n },\n hasSideEffects: {\n label: 'Are there any side effects',\n kind: 'radio',\n inline: true,\n inlineLabel: false,\n metaCategory: MetadataCategory.Refill,\n answers: {\n '1b87ad22-d316-4fac-9c7f-8f4ccb841aed': {\n text: 'Yes',\n },\n 'ab7f5a41-c351-4f5d-a568-e38f9f200e9a': {\n text: 'No',\n },\n },\n },\n youPharmacy: {\n kind: 'online-pharmacy-picker',\n label: 'Which pharmacy do you want the prescription sent to?',\n metaCategory: MetadataCategory.Refill,\n summaryLabel: 'Your pharmacy',\n },\n youAddress: {\n kind: 'place-address',\n label: 'Address',\n metaCategory: MetadataCategory.Refill,\n },\n },\n },\n ],\n locale: 'en',\n selectedAnswers,\n }\n}\n\n/**\n * Complete refill flow, creates a consult, stores refill data and updates consultation status\n * @param consultRequest\n * @param populatedRefillWorkflow the refill workflow data\n * @param oroClient\n */\nexport async function createRefill(\n consultRequest: ConsultRequest,\n populatedRefillWorkflow: WorkflowData,\n oroClient: OroClient,\n indexSearch: boolean = true,\n onProgress?: (\n progress: number,\n descriptionKey: string,\n extraInfo?: { storedImagesNum?: number; totalImagesNum?: number }\n ) => void\n): Promise<Consult> {\n let retry = MAX_RETRIES\n let errorsThrown: Error[] = []\n let newConsult: Consult | undefined = undefined\n let lockboxUuid: Uuid | undefined\n const stepsTotalNum = 6\n let currentStep: number\n\n for (; retry > 0; retry--) {\n try {\n currentStep = 0\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'create_consult')\n // Creating refill consult\n newConsult = await getOrCreatePatientConsultationUuid(consultRequest, oroClient)\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'get_patient_grant')\n if (!lockboxUuid) lockboxUuid = (await oroClient.getGrants())[0].lockboxUuid\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'store_patient_data')\n await oroClient\n .getOrInsertJsonData(\n lockboxUuid!,\n populatedRefillWorkflow,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId: newConsult.uuid,\n },\n {},\n { withNotification: true, forceReplace: false, updateMedicalStatus: true }\n )\n .catch((err) => {\n console.error(\n '[SDK: prescription refill request] Some errors happened during refill data upload',\n err\n )\n errorsThrown.push(err)\n })\n\n if (indexSearch) {\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'fetching_parent_workflow_data')\n // raw workflow from parent consultation (contains first and last name of patient)\n let rawConsultationManifest = await oroClient.getLockboxManifest(\n lockboxUuid!,\n { category: MetadataCategory.Raw, consultationId: consultRequest.uuidParent },\n false\n )\n if (rawConsultationManifest && rawConsultationManifest.length > 0) {\n let rawConsultation = await oroClient.getJsonData<WorkflowData>(\n lockboxUuid!,\n rawConsultationManifest[0].dataUuid\n )\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'search_indexing')\n await buildConsultSearchIndex(newConsult, rawConsultation, oroClient).catch((err) => {\n console.error(\n '[SDK: prescription refill request] personal information not found or another error occured during search indexing',\n err\n )\n if (retry <= 1) return // this statement is to avoid failing the registration due to the failure in search indexing the consult, this practically implements a soft retry\n errorsThrown.push(err)\n })\n } else {\n console.error(\"[SDK: prescription refill request] parent consultation's raw data not found\")\n errorsThrown.push(Error('RawData Not Found'))\n }\n }\n\n if (errorsThrown.length > 0) throw errorsThrown\n\n if (newConsult.statusMedical === MedicalStatus.Assigning) {\n //hopefully svelte query received all updates\n console.warn('Consult Refill assignation took too much time, moving to new anyway')\n }\n\n // Deem the consultation as ready\n await oroClient.consultClient.updateConsultByUUID(newConsult.uuid, {\n statusMedical: MedicalStatus.New,\n })\n\n // if we got through the complete flow, the registration succeeded\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'success')\n\n await oroClient.cleanIndex()\n break\n } catch (err) {\n console.error(\n `[SDK] Error occured during prescription refill request: ${err}, retrying... Retries remaining: ${retry}`\n )\n errorsThrown = []\n continue\n }\n }\n if (retry <= 0) {\n console.error('[SDK] prescription refill request failed: MAX_RETRIES reached')\n throw 'RegistrationFailed'\n }\n\n if (!newConsult) {\n console.error('[SDK] prescription refill request failed: MAX_RETRIES reached')\n throw 'RegistrationFailed'\n }\n\n console.log('Successfully Created refill')\n return newConsult\n}\n","import { IndexKey, Grant, IndexConsultLockbox, MetadataCategory, VaultIndex } from 'oro-sdk-apis'\nimport { OroClient, Uuid } from '..'\n\n/**\n * @name filterGrantsWithLockboxMetadata\n * @description searches for the existance of a consult uuid in each granted lockbox\n * @param oroClient\n * @param filter: the consult uuid\n * @returns the grants containing the consult uuid\n */\nexport async function filterGrantsWithLockboxMetadata(\n oroClient: OroClient,\n filter: { consultationId: Uuid },\n): Promise<Grant[]> {\n let grants = await oroClient.getGrants()\n let filteredGrants = []\n for (let grant of grants) {\n // Fetches in each lockbox the existance of a given consult id\n let consultationIdExistsInMetadata = await oroClient.vaultClient.lockboxMetadataGet(grant.lockboxUuid!, ['consultationId'], [], {\n category: MetadataCategory.Consultation,\n consultationId: filter.consultationId\n })\n // If there are entries in the metadata, it means that the consult exists in the lockbox\n if (consultationIdExistsInMetadata[0].length >= 0)\n filteredGrants.push(grant)\n }\n\n return filteredGrants\n}\n","import {\n AllRoleType,\n AuthTokenRequest,\n Consult,\n ConsultRequest,\n ConsultService,\n DataCreateResponse,\n DiagnosisService,\n Document,\n DocumentType,\n EncryptedIndexEntry,\n EncryptedVaultIndex,\n Grant,\n GuardService,\n IdentityCreateRequest,\n IdentityResponse,\n IndexConsultLockbox,\n IndexKey,\n LocalizedData,\n LockboxDataRequest,\n LockboxGrantRequest,\n LockboxManifest,\n ManifestEntry,\n Meta,\n Metadata,\n MetadataCategory,\n OtherRoleType,\n PersonalMeta,\n PopulatedWorkflowData,\n Practice,\n PracticeService,\n PractitionnerRoleType,\n PreferenceMeta,\n RecoveryMeta,\n RoleBasedScopes,\n SearchService,\n SecretShard,\n SubscriptionAcceptanceRequest,\n TellerService,\n TokenData,\n TosAndCpAcceptanceRequest,\n Uuid,\n VaultIndex,\n VaultService,\n WorkflowData,\n WorkflowService,\n} from 'oro-sdk-apis'\nimport * as OroToolbox from 'oro-toolbox'\nimport { CryptoRSA } from 'oro-toolbox'\nimport {\n createRefill,\n decryptConsultLockboxGrants,\n decryptGrants,\n registerPatient,\n sessionStorePrivateKeyName,\n} from './helpers'\nimport {\n AssociatedLockboxNotFound,\n IncompleteAuthentication,\n LocalEncryptedData,\n MissingGrant,\n MissingGrantFilter,\n MissingLockbox,\n MissingLockboxOwner,\n RecoveryData,\n RegisterPatientOutput,\n UserPreference,\n} from './models'\nimport { filterGrantsWithLockboxMetadata } from './sdk-revision'\n\nexport class OroClient {\n private rsa?: CryptoRSA\n private secrets: {\n lockboxUuid: string\n cryptor: OroToolbox.CryptoChaCha\n }[] = []\n private cachedMetadataGrants: {\n [filter: string]: Grant[]\n } = {}\n\n private cachedManifest: {\n [filter: string]: ManifestEntry[]\n } = {}\n\n private vaultIndex?: VaultIndex\n\n constructor(\n private toolbox: typeof OroToolbox,\n public tellerClient: TellerService,\n public vaultClient: VaultService,\n public guardClient: GuardService,\n public searchClient: SearchService,\n public practiceClient: PracticeService,\n public consultClient: ConsultService,\n public workflowClient: WorkflowService,\n public diagnosisClient: DiagnosisService,\n private authenticationCallback?: (err: Error) => void\n ) { }\n\n /**\n * clears the vaultIndex and cached metadata grants\n */\n public async cleanIndex() {\n this.cachedMetadataGrants = {}\n this.cachedManifest = {}\n }\n\n /**\n * Generates an RSA key pair and password payload (rsa private key encrypted with the password)\n * Calls Guard to sign up with the email address, password, practice, legal and token data\n *\n * @param email\n * @param password\n * @param practice\n * @param legal\n * @param tokenData\n * @returns\n */\n public async signUp(\n email: string,\n password: string,\n practice: Practice,\n tosAndCpAcceptance: TosAndCpAcceptanceRequest,\n tokenData?: TokenData,\n subscription?: boolean,\n skipEmailValidation?: boolean\n ): Promise<IdentityResponse> {\n this.rsa = new CryptoRSA()\n const privateKey = this.rsa.private()\n\n const symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(password)\n const recoveryPassword = symmetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n\n const hashedPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(password))\n\n email = email.toLowerCase()\n const emailConfirmed = !!skipEmailValidation\n const subscriptionAcceptance = subscription ? ({ email } as SubscriptionAcceptanceRequest) : undefined\n\n const signupRequest: IdentityCreateRequest = {\n practiceUuid: practice.uuid,\n email,\n emailConfirmed,\n password: hashedPassword,\n publicKey: this.toolbox.encodeToBase64(this.rsa.public()),\n recoveryPassword,\n tosAndCpAcceptance,\n tokenData,\n subscriptionAcceptance,\n }\n\n const identity = await this.guardClient.identityCreate(signupRequest)\n\n if (identity.recoveryLogin) {\n //Ensure we can recover from a page reload\n let symetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(identity.recoveryLogin)\n sessionStorage.setItem(\n sessionStorePrivateKeyName(identity.id),\n symetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n )\n }\n\n return identity\n }\n\n /**\n * Parse the given accessToken claims by calling guard whoami and update theidentity to set it's emailConfirmed flag\n * @param accessToken\n * @returns The identity related to confirmedEmail\n */\n public async confirmEmail(accessToken: string): Promise<IdentityResponse> {\n this.guardClient.setTokens({ accessToken })\n const claims = await this.guardClient.whoAmI()\n return this.guardClient.identityUpdate(claims.sub, {\n emailConfirmed: true,\n })\n }\n\n /**\n * Calls Guard to sign in with the email address, password and one time password (if MFA is enabled)\n * Then recover's the rsa private key from the recovery payload\n *\n * @param practiceUuid\n * @param email\n * @param password\n * @param otp\n * @returns the user identity\n */\n public async signIn(practiceUuid: Uuid, email: string, password: string, otp?: string): Promise<IdentityResponse> {\n const hashedPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(password))\n const tokenRequest: AuthTokenRequest = {\n practiceUuid,\n email: email.toLowerCase(),\n password: hashedPassword,\n otp,\n }\n\n await this.guardClient.authToken(tokenRequest)\n const userUuid = (await this.guardClient.whoAmI()).sub\n\n // Updates the rsa key to the one generated on the backend\n await this.recoverPrivateKeyFromPassword(userUuid, password)\n return await this.guardClient.identityGet(userUuid)\n }\n\n /**\n * Will attempt to recover an existing login session and set back\n * the private key in scope\n */\n public async resumeSession() {\n const id = (await this.guardClient.whoAmI()).sub\n const recoveryPayload = sessionStorage.getItem(sessionStorePrivateKeyName(id))\n const recoveryKey = (await this.guardClient.identityGet(id)).recoveryLogin\n\n if (!recoveryKey || !recoveryPayload) throw IncompleteAuthentication\n\n const symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(recoveryKey)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * This function let's you encrypt locally an Object\n * @param value the Object to encrypt\n * @returns a LocalEncryptedData Object\n * @throws IncompleteAuthentication if rsa is not set\n * @calls authenticationCallback if rsa is not set\n */\n public localEncryptToJsonPayload(value: any): LocalEncryptedData {\n if (!this.rsa) {\n if (this.authenticationCallback) {\n this.authenticationCallback(new IncompleteAuthentication())\n }\n\n throw new IncompleteAuthentication()\n }\n\n const chaChaKey = new this.toolbox.CryptoChaCha()\n\n const encryptedData = chaChaKey.jsonEncryptToBase64Payload(value)\n const encryptedKey = this.toolbox.encodeToBase64(this.rsa.encryptToBytes(chaChaKey.key()))\n\n return { encryptedData, encryptedKey }\n }\n\n /**\n * This function let's you decrypt a LocalEncryptedData object\n * @param value a LocalEncryptedData object\n * @returns a decrypted Object\n * @throws IncompleteAuthentication if rsa is not set\n * @calls authenticationCallback if rsa is not set\n */\n public localDecryptJsonPayload({ encryptedKey, encryptedData }: LocalEncryptedData): any {\n if (!this.rsa) {\n if (this.authenticationCallback) {\n this.authenticationCallback(new IncompleteAuthentication())\n }\n\n throw new IncompleteAuthentication()\n }\n\n const chaChaKey = this.rsa.base64DecryptToBytes(encryptedKey)\n const decryptedData = this.toolbox.CryptoChaCha.fromKey(chaChaKey).base64PayloadDecryptToJson(encryptedData)\n\n return decryptedData\n }\n\n /**\n * Effectively kills your \"session\"\n */\n public async signOut() {\n this.rsa = undefined\n this.secrets = []\n this.guardClient.setTokens({\n accessToken: undefined,\n refreshToken: undefined,\n })\n await this.guardClient.authLogout()\n }\n\n /**\n * @name registerPatient\n * @description The complete flow to register a patient\n *\n * Steps:\n * 1. Create a consult (checks if payment has been done)\n * 2. Creates a lockbox\n * 3. Grants lockbox access to all practice personnel\n * 4. Creates secure identification, medical, onboarding data\n * 5. Generates and stores the rsa key pair and recovery payloads\n *\n * @param patientUuid\n * @param consult\n * @param workflow\n * @param recoveryQA\n * @param indexSearch create search index for the consultation if true\n * @param onProgress callback that is called whenever a new step of patient registration is executed. Note: progress ranges from 0 to 1, and descriptionKey is a description of the progress as a key so the app would use it to translate the description\n * @returns\n */\n public async registerPatient(\n patientUuid: Uuid,\n consult: ConsultRequest,\n workflow: WorkflowData,\n recoveryQA?: {\n recoverySecurityQuestions: string[]\n recoverySecurityAnswers: string[]\n },\n indexSearch: boolean = true,\n onProgress?: (progress: number, descriptionKey: string) => void\n ): Promise<RegisterPatientOutput> {\n if (!this.rsa) throw IncompleteAuthentication\n return registerPatient(\n patientUuid,\n consult,\n workflow,\n this,\n this.toolbox.uuid(),\n recoveryQA,\n indexSearch,\n onProgress\n )\n }\n\n /**\n * Creates and stores all relevant refill data\n * - New consultation is created\n * - Stores refill workflow data in the lockbox\n * - Updates the consult to new\n *\n * @param consult\n * @param populatedRefillWorkflow\n * @returns\n */\n public async createRefill(\n consult: ConsultRequest,\n populatedRefillWorkflow: WorkflowData,\n indexSearch: boolean = true,\n onProgress?: (progress: number, descriptionKey: string) => void\n ): Promise<Consult> {\n if (!this.rsa) throw IncompleteAuthentication\n return createRefill(consult, populatedRefillWorkflow, this, indexSearch, onProgress)\n }\n\n /**\n * Fetches all grants, and consultations that exist in each lockbox\n * Then updates the index for the current user with the lockbox consult relationship\n */\n public async forceUpdateIndexEntries() {\n let grants = await this.getGrants()\n\n let indexConsultLockbox: IndexConsultLockbox[] = await Promise.all(\n grants.map(\n async (grant: Grant) =>\n await this.vaultClient\n .lockboxMetadataGet(\n grant.lockboxUuid!,\n ['consultationId'],\n [],\n { category: MetadataCategory.Consultation },\n grant.lockboxOwnerUuid\n )\n .then((consults) => {\n try {\n return consults[0].map((consult: any) => {\n return {\n ...consult,\n grant: {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid,\n },\n }\n })\n } catch (e) {\n // No consultations in lockbox or index could not be created\n return []\n }\n })\n .catch(() => [])\n )\n ).then((consults) => consults.flat())\n this.vaultIndexAdd({\n [IndexKey.Consultation]: indexConsultLockbox,\n })\n .then(() => alert('The Index was successfully updated!'))\n .catch(() => console.error('The index failed to update!'))\n }\n\n /**\n * Generates, encrypts and adds entries to vault index for a given index owner\n *\n * @param entries\n * @param indexOwnerUuid\n */\n public async vaultIndexAdd(entries: VaultIndex, indexOwnerUuid?: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let rsaPub: Uint8Array\n if (indexOwnerUuid) {\n let base64IndexOwnerPubKey = (await this.guardClient.identityGet(indexOwnerUuid)).publicKey\n rsaPub = this.toolbox.decodeFromBase64(base64IndexOwnerPubKey)\n } else {\n rsaPub = this.rsa.public()\n }\n\n let encryptedIndex: EncryptedVaultIndex = {}\n\n for (let keyString of Object.keys(entries)) {\n let key = keyString as keyof VaultIndex\n switch (key) {\n case IndexKey.ConsultationLockbox:\n encryptedIndex[key] = (entries[key] as IndexConsultLockbox[])\n .map((e) => ({\n ...e,\n uniqueHash: e.consultationId,\n }))\n .map(\n (e: IndexConsultLockbox) =>\n ({\n uuid: e.uuid,\n timestamp: e.timestamp,\n uniqueHash: e.uniqueHash,\n encryptedIndexEntry: CryptoRSA.jsonWithPubEncryptToBase64(\n {\n consultationId: e.consultationId,\n grant: e.grant,\n },\n rsaPub\n ),\n } as EncryptedIndexEntry)\n )\n break\n }\n }\n await this.vaultClient.vaultIndexPut(encryptedIndex, indexOwnerUuid)\n }\n\n /**\n * @name grantLockbox\n * @description Grants a lockbox by retrieving the shared secret of the lockbox and encrypting it with the grantees public key\n * @param granteeUuid\n * @param lockboxUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n */\n public async grantLockbox(granteeUuid: Uuid, lockboxUuid: Uuid, lockboxOwnerUuid?: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let secret = (await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)).key()\n let base64GranteePublicKey = (await this.guardClient.identityGet(granteeUuid)).publicKey\n let granteePublicKey = this.toolbox.decodeFromBase64(base64GranteePublicKey)\n\n let granteeEncryptedSecret = CryptoRSA.bytesWithPubEncryptToBase64(secret, granteePublicKey)\n let request: LockboxGrantRequest = {\n encryptedSecret: granteeEncryptedSecret,\n granteeUuid: granteeUuid,\n }\n await this.vaultClient.lockboxGrant(lockboxUuid, request, lockboxOwnerUuid)\n }\n\n /**\n * @name createMessageData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a message string\n * @param lockboxUuid\n * @param message\n * @param consultationId the consultation for which this message is sent\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createMessageData(\n lockboxUuid: Uuid,\n message: string,\n consultationId: string,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { updateMedicalStatus: boolean } = { updateMedicalStatus: true }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n\n let encryptedData = symmetricEncryptor.jsonEncryptToBase64Payload(message)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload({\n author: (await this.guardClient.whoAmI()).sub,\n })\n\n let meta = {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Message,\n contentType: 'text/plain',\n }\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid, options)\n }\n\n /**\n * @name createMessageAttachmentData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a file\n * @param lockboxUuid\n * @param data the file stored\n * @param consultationId the consultation for which this message is sent\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createMessageAttachmentData(\n lockboxUuid: Uuid,\n data: File,\n consultationId: string,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { updateMedicalStatus: boolean } = { updateMedicalStatus: true }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.bytesEncryptToBase64Payload(new Uint8Array(await data.arrayBuffer()))\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload({\n author: (await this.guardClient.whoAmI()).sub,\n fileName: data.name,\n lastModified: data.lastModified,\n size: data.size,\n })\n\n let meta = {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Message,\n contentType: data.type,\n }\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid, options)\n }\n\n /**\n * @name createAttachmentData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a file\n * @param lockboxUuid\n * @param data the file stored\n * @param consultationId the consultation for which this message is sent\n * @param category the category for the attachment data\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @param withNotification if the insertion of data requires notification\n * @returns the data uuid\n */\n public async createConsultationAttachmentData(\n lockboxUuid: Uuid,\n data: File,\n consultationId: string,\n documentType: DocumentType,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { withNotification: boolean; updateMedicalStatus: boolean } = {\n withNotification: false,\n updateMedicalStatus: false,\n }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n return this.createBytesData<Meta | any>(\n lockboxUuid,\n new Uint8Array(await data.arrayBuffer()),\n {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType,\n contentType: data.type,\n },\n {\n author: (await this.guardClient.whoAmI()).sub,\n fileName: data.name,\n },\n lockboxOwnerUuid,\n previousDataUuid,\n options\n )\n }\n\n /**\n * @name createJsonData\n * @description Creates a Base64 encrypted Payload to send and store in the vault. With the data input as a JSON\n * @param lockboxUuid\n * @param data\n * @param meta\n * @param privateMeta the metadata that will be secured in the vault\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing data, specify the previous data uuid\n * @param options if the insertion of data requires email notification\n * @returns the data uuid\n */\n public async createJsonData<T extends Metadata>(\n lockboxUuid: Uuid,\n data: any,\n meta?: T,\n privateMeta?: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { withNotification: boolean; updateMedicalStatus: boolean } = {\n withNotification: false,\n updateMedicalStatus: false,\n }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.jsonEncryptToBase64Payload(data)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload(privateMeta)\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n if (options.withNotification)\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid, options)\n else return this.vaultClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * Get or upsert a data in lockbox\n * @param lockboxUuid the lockbox uuid\n * @param data the data to insert\n * @param publicMetadata the public Metadata\n * @param privateMetadata the private Metadata\n * @param forceReplace set true when the insertion of data requires to replace the data when it exists already\n * @param options if the insertion of data requires email notification\n * @returns the data uuid\n */\n public async getOrInsertJsonData<M extends Metadata>(\n lockboxUuid: Uuid,\n data: any,\n publicMetadata: M,\n privateMetadata: Metadata,\n options: { withNotification: boolean; forceReplace: boolean; updateMedicalStatus: boolean } = {\n withNotification: false,\n forceReplace: false,\n updateMedicalStatus: false,\n }\n ): Promise<Uuid> {\n let manifest = await this.vaultClient.lockboxManifestGet(lockboxUuid, publicMetadata)\n if (!options.forceReplace && manifest.length > 0) {\n console.log(`The data for ${JSON.stringify(publicMetadata)} already exist`)\n return manifest[0].dataUuid\n } else\n return (\n await this.createJsonData<M>(\n lockboxUuid,\n data,\n publicMetadata,\n privateMetadata,\n undefined,\n // if forceReplace and data already exist, then replace data. Otherwise insert it\n options.forceReplace && manifest.length > 0 ? manifest[0].dataUuid : undefined,\n options\n ).catch((err) => {\n console.error(`Error while upserting data ${JSON.stringify(publicMetadata)} data`, err)\n throw err\n })\n ).dataUuid\n }\n\n /**\n * @name createBytesData\n * @description Creates a Base64 encrypted Payload to send and store in the vault. With the data input as a Bytes\n * @param lockboxUuid\n * @param data\n * @param meta\n * @param privateMeta the metadata that will be secured in the vault\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing data, specify the previous data uuid\n * @param withNotification if the insertion of data requires notification\n * @returns the data uuid\n */\n public async createBytesData<T extends Metadata>(\n lockboxUuid: Uuid,\n data: Uint8Array,\n meta: T,\n privateMeta: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { withNotification: boolean; updateMedicalStatus: boolean } = {\n withNotification: false,\n updateMedicalStatus: false,\n }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.bytesEncryptToBase64Payload(data)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload(privateMeta)\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n if (options.withNotification)\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid, options)\n else return this.vaultClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * @name getJsonData\n * @description Fetches and decrypts the lockbox data with the cached shared secret.\n * Decrypts the data to a valid JSON object. If this is impossible, the call to the WASM binary will fail\n *\n * @type T is the generic type specifying the return type object of the function\n * @param lockboxUuid\n * @param dataUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns the data specified by the generic type <T>\n */\n public async getJsonData<T = any>(lockboxUuid: Uuid, dataUuid: Uuid, lockboxOwnerUuid?: Uuid): Promise<T> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let [encryptedPayload, symmetricDecryptor] = await Promise.all([\n this.vaultClient.lockboxDataGet(lockboxUuid, dataUuid, lockboxOwnerUuid),\n this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid),\n ])\n\n return symmetricDecryptor.base64PayloadDecryptToJson(encryptedPayload.data)\n }\n /**\n * @description Fetches and decrypts the lockbox data with the cached shared secret.\n * @param lockboxUuid\n * @param dataUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns the bytes data\n */\n public async getBytesData(lockboxUuid: Uuid, dataUuid: Uuid, lockboxOwnerUuid?: Uuid): Promise<Uint8Array> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let [encryptedPayload, symmetricDecryptor] = await Promise.all([\n this.vaultClient.lockboxDataGet(lockboxUuid, dataUuid, lockboxOwnerUuid),\n this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid),\n ])\n\n return symmetricDecryptor.base64PayloadDecryptToBytes(encryptedPayload.data)\n }\n\n /**\n * @name getGrants\n * @description Get all lockboxes granted to user with the applied filter\n * @note this function returns cached grants and will not update unless the page is refreshed\n * @todo some versions of lockboxes do not make use of lockbox metadata\n * in this case, all lockboxes need to be filtered one-by-one to find the correct one\n * Remove if this is no longer the case\n * @param filter: the consultationId in which the grant exists\n * @returns decrypted lockboxes granted to user\n */\n public async getGrants(filter?: { consultationId: Uuid }): Promise<Grant[]> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let filterString = JSON.stringify(filter)\n // retrieves cached grants\n if (this.cachedMetadataGrants[filterString]) return this.cachedMetadataGrants[filterString]\n\n // We're using the account role to determine the way a grant is accessed\n let currentAccountRole = await this.getAccountRole()\n if (currentAccountRole.length === 1 && currentAccountRole[0] === OtherRoleType.User) return []\n\n if (\n [OtherRoleType.Patient, OtherRoleType.User].every((requiredRole) =>\n currentAccountRole.includes(requiredRole)\n )\n ) {\n let encryptedGrants\n // if there are no grants with the applied filter from index, attempt for naive filter with backwards compatibility\n if (filter) {\n encryptedGrants = await filterGrantsWithLockboxMetadata(this, filter)\n } else {\n encryptedGrants = (await this.vaultClient.grantsGet()).grants\n }\n const decryptedGrants = await decryptGrants(encryptedGrants, this.rsa)\n // sets the cached grant\n this.cachedMetadataGrants[filterString] = decryptedGrants\n console.info('[sdk:grant] Found grant for patient')\n return decryptedGrants\n }\n // if not a patient, then a practitioner is trying to retrieve a grant, it **Must** contain a filter, otherwise too many grants are possible\n if (!filter) throw MissingGrantFilter\n // Note: will work only if the filter being applied is exclusively a consult id\n const grantsByConsultLockbox = await this.vaultClient\n .vaultIndexGet([IndexKey.ConsultationLockbox], [filter.consultationId])\n .then((res) => res[IndexKey.ConsultationLockbox])\n .catch((e) => {\n console.error(e)\n return []\n })\n\n const decryptedConsults = decryptConsultLockboxGrants(grantsByConsultLockbox ?? [], this.rsa)\n if (decryptedConsults.length > 0) {\n console.info('[sdk:index] Grants found in user`s constant time secure index')\n this.cachedMetadataGrants[filterString] = decryptedConsults\n return this.cachedMetadataGrants[filterString]\n }\n\n // if we have no valid grants, then return nothing\n return []\n }\n\n /**\n * Fetches the role of the account that is logged in\n *\n * @returns the role based scopes defined by the whoami\n */\n async getAccountRole(): Promise<RoleBasedScopes[]> {\n return (await this.guardClient.whoAmI()).scope.split(' ') as RoleBasedScopes[]\n }\n\n /**\n * @name getCachedSecretCryptor\n * @description Retrieves the cached lockbox secret or fetches the secret from vault, then creates the symmetric cryptor and stores it in memory\n * @param lockboxUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns\n */\n async getCachedSecretCryptor(lockboxUuid: string, lockboxOwnerUuid?: string): Promise<OroToolbox.CryptoChaCha> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let index = this.secrets.findIndex((secret) => secret.lockboxUuid === lockboxUuid)\n if (index === -1) {\n let encryptedSecret = (await this.vaultClient.lockboxSecretGet(lockboxUuid, lockboxOwnerUuid)).sharedSecret\n\n let secret = this.rsa.base64DecryptToBytes(encryptedSecret)\n let cryptor = this.toolbox.CryptoChaCha.fromKey(secret)\n this.secrets.push({ lockboxUuid, cryptor })\n return cryptor\n } else {\n return this.secrets[index].cryptor\n }\n }\n\n /**\n * Retrieves the patient personal information associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several personal informations data\n * @param consultationId The consultation Id\n * @param category The personal MetadataCategory to fetch\n * @param forceRefresh force data refresh (default to false)\n * @returns the personal data\n */\n public async getPersonalInformationsFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory.Personal | MetadataCategory.ChildPersonal | MetadataCategory.OtherPersonal,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, category, options)\n }\n\n /**\n * Retrieves the patient medical data associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several medical data\n * @param consultationId The consultation Id\n * @param forceRefresh force data refresh (default to false)\n * @returns the medical data\n */\n public async getMedicalDataFromConsultId(\n consultationId: Uuid,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, MetadataCategory.Medical, options)\n }\n\n /**\n * Retrieves the patient follow up data associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several follow up data\n * @param consultationId The consultation Id\n * @param forceRefresh force data refresh (default to false)\n * @returns the medical data\n */\n public async getFollowupDataFromConsultId(\n consultationId: Uuid,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, MetadataCategory.Followup, options)\n }\n\n private async getMetaCategoryFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n let grants = await this.getGrants({ consultationId })\n let workflowData: LocalizedData<PopulatedWorkflowData>[] = []\n for (let grant of grants) {\n let manifest = await this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId],\n },\n true,\n grant.lockboxOwnerUuid,\n options\n )\n\n // TODO: find another solution for backwards compatibility (those without the metadata consultationIds)\n if (manifest.length === 0) {\n manifest = (\n await this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n // backward compatiblility with TonTest\n },\n true,\n grant.lockboxOwnerUuid,\n options\n )\n ).filter((entry) => !entry.metadata.consultationIds) // Keep only entries without associated consultationIds\n }\n let data = await Promise.all(\n manifest.map(async (entry) => {\n return {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid!,\n dataUuid: entry.dataUuid,\n data: await this.getJsonData<PopulatedWorkflowData>(grant.lockboxUuid!, entry.dataUuid),\n }\n })\n )\n workflowData = { ...workflowData, ...data }\n }\n return workflowData\n }\n\n /**\n * @description retrieves the personal information stored in the first owned lockbox\n * @param userId The user Id\n * @returns the personal data\n */\n public async getPersonalInformations(userId: Uuid): Promise<LocalizedData<PopulatedWorkflowData>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === userId)\n\n if (!grant) {\n throw MissingGrant\n }\n\n const { lockboxUuid, lockboxOwnerUuid } = grant\n\n if (!lockboxUuid) throw MissingLockbox\n\n if (!lockboxOwnerUuid) throw MissingLockboxOwner\n\n const identificationDataUuid = (\n await this.getLockboxManifest(\n lockboxUuid,\n {\n category: MetadataCategory.Personal,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n false,\n userId\n )\n )[0].dataUuid\n\n return {\n lockboxOwnerUuid,\n lockboxUuid,\n dataUuid: identificationDataUuid,\n data: await this.getJsonData<PopulatedWorkflowData>(lockboxUuid, identificationDataUuid),\n }\n }\n\n /**\n * Retrieves the grant associated to a consultationId\n * @note returns the first grant only\n * @param consultationId The consultationId\n * @returns the grant\n */\n public async getGrantFromConsultId(consultationId: Uuid): Promise<Grant | undefined> {\n let grants = await this.getGrants({ consultationId })\n\n if (grants.length === 0) {\n throw AssociatedLockboxNotFound\n }\n\n return grants[0]\n }\n\n /**\n * retrieves the identity associated to the `consultationId`\n * @param consultationId The consultation Id\n * @returns the identity\n */\n public async getIdentityFromConsultId(consultationId: Uuid): Promise<IdentityResponse | undefined> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (grant && grant.lockboxOwnerUuid) {\n return await this.guardClient.identityGet(grant.lockboxOwnerUuid)\n } else {\n return undefined\n }\n }\n\n /**\n * retrieves the lockbox manifest for a given lockbox and add's its private metadata\n * @note the lockbox manifest will retrieved the cached manifest first unless force refresh is enabled\n * @param lockboxUuid\n * @param filter\n * @param expandPrivateMetadata\n * @param lockboxOwnerUuid\n * @param forceRefresh\n * @returns the lockbox manifest\n */\n public async getLockboxManifest(\n lockboxUuid: Uuid,\n filter: Metadata,\n expandPrivateMetadata: boolean,\n lockboxOwnerUuid?: Uuid,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LockboxManifest> {\n let manifestKey = JSON.stringify({\n lockboxUuid,\n filter,\n expandPrivateMetadata,\n lockboxOwnerUuid,\n })\n if (!options.forceRefresh && this.cachedManifest[manifestKey]) return this.cachedManifest[manifestKey]\n\n return this.vaultClient.lockboxManifestGet(lockboxUuid, filter, lockboxOwnerUuid).then((manifest) => {\n return Promise.all(\n manifest.map(async (entry) => {\n if (expandPrivateMetadata && entry.metadata.privateMetadata) {\n let privateMeta = await this.getJsonData<Metadata>(\n lockboxUuid!,\n entry.metadata.privateMetadata,\n lockboxOwnerUuid\n )\n entry.metadata = {\n ...entry.metadata,\n ...privateMeta,\n }\n }\n return entry\n })\n ).then((manifest) => (this.cachedManifest[manifestKey] = manifest))\n })\n }\n\n /**\n * @description Create or update the personal information and store it in the first owned lockbox\n * @param identity The identity to use\n * @param data The personal data to store\n * @param dataUuid (optional) The dataUuid to update\n * @returns\n */\n public async createPersonalInformations(\n identity: IdentityResponse,\n data: PopulatedWorkflowData,\n dataUuid?: string\n ): Promise<DataCreateResponse> {\n const lockboxUuid = (await this.getGrants()).find(\n (lockbox) => lockbox.lockboxOwnerUuid === identity.id\n )?.lockboxUuid\n\n if (lockboxUuid) {\n return this.createJsonData<PersonalMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Personal,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n {},\n undefined,\n dataUuid\n )\n } else {\n throw MissingLockbox\n }\n }\n\n /**\n * Create or update user Preference\n * @param identity\n * @param preference\n * @param dataUuid\n * @returns\n */\n public async createUserPreference(\n identity: IdentityResponse,\n preference: UserPreference,\n dataUuid?: string\n ): Promise<DataCreateResponse> {\n const lockboxUuid = (await this.getGrants()).find(\n (lockbox) => lockbox.lockboxOwnerUuid === identity.id\n )?.lockboxUuid\n\n if (lockboxUuid) {\n return this.createJsonData<PreferenceMeta>(\n lockboxUuid,\n preference,\n {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n },\n {},\n undefined,\n dataUuid\n )\n } else {\n throw MissingLockbox\n }\n }\n\n /**\n * retrieves the user preference from a grant\n * @param grant The grant\n * @returns the user preference\n */\n public async getDataFromGrant<T = any>(grant: Grant, filter: Metadata): Promise<LocalizedData<T>> {\n const { lockboxUuid, lockboxOwnerUuid } = grant\n\n if (!lockboxUuid) throw MissingLockbox\n if (!lockboxOwnerUuid) throw MissingLockboxOwner\n const identificationDataUuid = (\n await this.getLockboxManifest(lockboxUuid, filter, false, grant.lockboxOwnerUuid, { forceRefresh: true })\n )[0].dataUuid\n\n return {\n lockboxOwnerUuid,\n lockboxUuid,\n dataUuid: identificationDataUuid,\n data: await this.getJsonData<T>(lockboxUuid, identificationDataUuid),\n }\n }\n\n /**\n * retrieves the user preference from a consultation id\n * @param consultationId The related consultationId\n * @returns the user preference\n */\n public async getUserPreferenceFromConsultId(consultationId: string): Promise<LocalizedData<UserPreference>> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<UserPreference>(grant, {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference stored in the first owned lockbox from identity\n * @param identity The identity to use\n * @returns the user preference\n */\n public async getUserPreference(identity: IdentityResponse): Promise<LocalizedData<UserPreference>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === identity.id)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<UserPreference>(grant, {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference from a consultation id\n * @param consultationId The related consultationId\n * @returns the user preference\n */\n public async getRecoveryDataFromConsultId(consultationId: string): Promise<LocalizedData<RecoveryData>> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<RecoveryData>(grant, {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference stored in the first owned lockbox from identity\n * @param identity The identity to use\n * @returns the user preference\n */\n public async getRecoveryData(identity: IdentityResponse): Promise<LocalizedData<RecoveryData>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === identity.id)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant(grant, {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n })\n }\n\n /**\n * @name getAssignedConsultations\n * @description finds all assigned or owned consultations for the logged user\n * Steps:\n * - Retrieves all granted lockboxes given to the logged user\n * - for each lockbox, find all consultation ids\n * - for each consultation id, retrieve the consult information\n * @param practiceUuid the uuid of the practice to look consult into\n * @returns the list of consults\n */\n public async getAssignedConsultations(practiceUuid: Uuid): Promise<Consult[]> {\n return Promise.all(\n (await this.getGrants()).map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n true,\n undefined\n ).then((manifest) =>\n Promise.all(\n manifest.map(\n async (entry) =>\n await this.consultClient.getConsultByUUID(entry.metadata.consultationId, practiceUuid)\n )\n ).then((promise) => promise.flat())\n )\n )\n ).then((consults) => consults.flat())\n }\n\n /**\n * Gets the past consultations of the patient as well as his relatives if any\n * @param consultationId any consultation uuid from which we will fetch all the other consultations of the same patient as the owner of this consultation id\n * @param practiceUuid\n */\n public async getPastConsultationsFromConsultId(\n consultationId: string,\n practiceUuid: string\n ): Promise<Consult[] | undefined> {\n const grant = await this.getGrantFromConsultId(consultationId)\n if (!grant) return undefined\n\n let consultationsInLockbox: string[] = (\n await this.vaultClient.lockboxMetadataGet(\n grant.lockboxUuid!,\n ['consultationId'],\n ['consultationId'],\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n grant.lockboxOwnerUuid\n )\n )\n .flat()\n .map((metadata: { consultationId: string }) => metadata.consultationId)\n\n if (consultationsInLockbox.length == 0) return []\n\n return await Promise.all(\n consultationsInLockbox.map(async (consultId: string) => {\n return await this.consultClient.getConsultByUUID(consultId, practiceUuid)\n })\n )\n }\n\n /**\n * @name getPatientConsultationData\n * @description retrieves the consultation data\n * @param consultationId\n * @returns\n */\n public async getPatientConsultationData(\n consultationId: Uuid,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<PopulatedWorkflowData[]> {\n //TODO: make use of getPatientDocumentsList instead of doing it manually here\n return Promise.all(\n (await this.getGrants({ consultationId }))\n .map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId, //since we want to update the cached manifest (if another consult data exists)\n },\n true,\n grant.lockboxOwnerUuid,\n options\n ).then((manifest) =>\n Promise.all(\n manifest.map((e) =>\n this.getJsonData<PopulatedWorkflowData>(\n grant.lockboxUuid!,\n e.dataUuid,\n grant.lockboxOwnerUuid\n )\n )\n )\n )\n )\n .flat()\n ).then((data) => data.flat())\n }\n\n /**\n * This function returns the patient prescriptions\n * @param consultationId\n * @returns\n */\n public async getPatientPrescriptionsList(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Prescription,\n },\n true,\n consultationId\n )\n }\n\n /**\n * This function returns the patient results\n * @param consultationId\n * @returns\n */\n public async getPatientResultsList(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Result,\n },\n true,\n consultationId\n )\n }\n\n /**\n * returns the patient treatment plan options\n * @param consultationId\n * @returns Document[] corresponding to the patient treatment plan options\n */\n public async getPatientTreatmentPlans(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.TreatmentPlan,\n },\n true,\n consultationId\n )\n }\n\n /**\n * returns a specific patient treatment plan option\n * @param consultationId\n * @param treatmentPlanId\n * @returns\n */\n public async getPatientTreatmentPlanByUuid(consultationId: Uuid, treatmentPlanId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.TreatmentPlan,\n treatmentPlanId,\n },\n true,\n consultationId\n )\n }\n\n /**\n * @name getPatientDocumentsList\n * @description applies the provided filter to the vault to only find those documents\n * @param filters the applied filters (e.g. type of documents)\n * @param expandPrivateMetadata whether or not, the private metadata needs to be retrieved\n * (more computationally expensive)\n * @param consultationId\n * @returns the filtered document list\n */\n public async getPatientDocumentsList(\n filters: Object,\n expandPrivateMetadata: boolean,\n consultationId: Uuid\n ): Promise<Document[]> {\n return Promise.all(\n (await this.getGrants({ consultationId }))\n .map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n { ...filters, consultationId },\n expandPrivateMetadata,\n grant.lockboxOwnerUuid,\n { forceRefresh: true }\n ).then((manifest) =>\n Promise.all(\n manifest.map(async (entry): Promise<Document> => {\n return {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid!,\n ...entry,\n }\n })\n )\n )\n )\n .flat()\n ).then((data) => data.flat())\n }\n\n /****************************************************************************************************************\n * RECOVERY *\n ****************************************************************************************************************/\n\n /**\n * @name recoverPrivateKeyFromSecurityQuestions\n * @description Recovers and sets the rsa private key from the answered security questions\n * @param id\n * @param recoverySecurityQuestions\n * @param recoverySecurityAnswers\n * @param threshold the number of answers needed to recover the key\n */\n public async recoverPrivateKeyFromSecurityQuestions(\n id: Uuid,\n recoverySecurityQuestions: string[],\n recoverySecurityAnswers: string[],\n threshold: number\n ) {\n let shards: SecretShard[] = (await this.guardClient.identityGet(id)).recoverySecurityQuestions!\n let answeredShards = shards\n .filter((shard: any) => {\n // filters all answered security questions\n let indexOfQuestion = recoverySecurityQuestions.indexOf(shard.securityQuestion)\n if (indexOfQuestion === -1) return false\n return recoverySecurityAnswers[indexOfQuestion] && recoverySecurityAnswers[indexOfQuestion] != ''\n })\n .map((item: any) => {\n // appends the security answer to the answered shards\n let index = recoverySecurityQuestions.indexOf(item.securityQuestion)\n item.securityAnswer = recoverySecurityAnswers[index]\n return item\n })\n try {\n // reconstructs the key from the answered security answers\n let privateKey = this.toolbox.reconstructSecret(answeredShards, threshold)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n } catch (e) {\n console.error(e)\n }\n }\n\n /**\n * @name recoverPrivateKeyFromPassword\n * @description Recovers and sets the rsa private key from the password\n * @param id\n * @param password\n */\n public async recoverPrivateKeyFromPassword(id: Uuid, password: string) {\n let identity = await this.guardClient.identityGet(id)\n\n let recoveryPayload = identity.recoveryPassword\n let symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(password)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n\n if (identity.recoveryLogin) {\n //Ensure we can recover from a page reload\n let symetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(identity.recoveryLogin)\n sessionStorage.setItem(\n sessionStorePrivateKeyName(id),\n symetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n )\n }\n\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * @name recoverPrivateKeyFromMasterKey\n * @description Recovers and sets the rsa private key from the master key\n * @param id\n * @param masterKey\n */\n public async recoverPrivateKeyFromMasterKey(id: Uuid, masterKey: string) {\n let recoveryPayload = (await this.guardClient.identityGet(id)).recoveryMasterKey!\n let symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(masterKey)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * @description Generates and updates the security questions and answers payload using new recovery questions and answers\n * Important: Since the security questions generate a payload for the private key, they will never be stored on the device as they must remain secret!!!\n * @param id\n * @param recoverySecurityQuestions\n * @param recoverySecurityAnswers\n * @param threshold the number of answers needed to rebuild the secret\n */\n public async updateSecurityQuestions(\n id: Uuid,\n recoverySecurityQuestions: string[],\n recoverySecurityAnswers: string[],\n threshold: number\n ) {\n if (!this.rsa) throw IncompleteAuthentication\n let securityQuestionPayload = this.toolbox.breakSecretIntoShards(\n recoverySecurityQuestions,\n recoverySecurityAnswers,\n this.rsa.private(),\n threshold\n )\n let updateRequest = {\n recoverySecurityQuestions: securityQuestionPayload,\n }\n\n return await this.guardClient.identityUpdate(id, updateRequest)\n }\n\n /**\n * @description Generates and stores the payload encrypted payload and updates the password itself (double hash)\n * @important\n * the recovery payload uses a singly hashed password and the password stored is doubly hashed so\n * the stored password cannot derive the decryption key in the payload\n * @note\n * the old password must be provided when not performing an account recovery\n * @param id\n * @param newPassword\n * @param oldPassword\n */\n public async updatePassword(id: Uuid, newPassword: string, oldPassword?: string) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(newPassword)\n let passwordPayload = symmetricEncryptor.bytesEncryptToBase64Payload(this.rsa.private())\n if (oldPassword) {\n oldPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(oldPassword))\n }\n\n newPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(newPassword))\n\n let updateRequest = {\n password: {\n oldPassword,\n newPassword,\n },\n recoveryPassword: passwordPayload,\n }\n\n return await this.guardClient.identityUpdate(id, updateRequest)\n }\n\n /**\n * @description Generates and stores the master key encrypted payload\n * Important\n * Since the master key is used to generate a payload for the private key, it will never be stored on the device as it must remain secret!\n * @param id\n * @param masterKey\n * @param lockboxUuid\n */\n async updateMasterKey(id: Uuid, masterKey: string, lockboxUuid: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(masterKey)\n let masterKeyPayload = symmetricEncryptor.bytesEncryptToBase64Payload(this.rsa.private())\n let updateRequest = { recoveryMasterKey: masterKeyPayload }\n const updatedIdentity = await this.guardClient.identityUpdate(id, updateRequest)\n\n await this.getOrInsertJsonData<RecoveryMeta>(\n lockboxUuid,\n { masterKey },\n {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n },\n {},\n { forceReplace: true, withNotification: false, updateMedicalStatus: false }\n )\n\n return updatedIdentity\n }\n}\n","import { AxiosService, CliniaResponse, FacetFilter, PlaceData } from \"oro-sdk-apis\"\n\nexport class CliniaService {\n private api: AxiosService\n\n constructor(private url: string, apiKey: string, private locale?: string) {\n this.api = new AxiosService({ headers: { 'X-Clinia-API-Key': apiKey } })\n }\n\n public placeSearch(searchOptions: {\n locale?: string\n query?: string\n facetFilters?: FacetFilter[]\n location?: string\n aroundLatLng?: string\n page?: number\n }) {\n const { locale, ...data } = searchOptions\n\n return this.api.post<CliniaResponse<PlaceData>>(\n `${this.url}/search/v1/indexes/health_facility/query`,\n data,\n {\n params: { locale: locale ?? this.locale },\n }\n )\n }\n\n public placeMatch(\n searchOptions: {\n locale?: string\n name?: string\n address?: string\n postalCode?: string\n place?: string\n region?: string\n country?: string\n },\n type?: string\n ) {\n const { locale, ...data } = searchOptions\n\n let request = this.api.post<PlaceData[]>(\n `${this.url}/search/v1/matches`,\n data,\n {\n params: { locale: locale ?? this.locale },\n }\n )\n\n if (type) {\n request = request.then((places) =>\n places.filter((place) => place.type === type)\n )\n }\n\n return request\n }\n}\n","import initApis from 'oro-sdk-apis'\nimport { OroClient } from './client'\nimport * as OroToolboxNamespace from 'oro-toolbox'\n\nexport type OroToolbox = typeof OroToolboxNamespace\n\nexport let wasmPath = 'node_modules/oro-toolbox'\n\n/**\n * This function helps you to initialize and OroClient instance\n * @param toolbox the OroToolbox object\n * @param tellerBaseURL the teller service base URL \n * @param vaultBaseURL the vault service base URL \n * @param guardBaseURL the guard service base URL \n * @param searchbaseURL the search service base URL\n * @param practiceBaseURL the practice service base URL \n * @param consultBaseURL the consult service base URL \n * @param workflowBaseURL the workflow service base URL \n * @param diagnosisBaseURL the diagnosis service base URL \n * @param authenticationCallback (optional) authenticationCallback the authentification callback \n * @returns an instance of OroClient\n */\nconst init = (\n toolbox: OroToolbox,\n tellerBaseURL: string,\n vaultBaseURL: string,\n guardBaseURL: string,\n searchBaseURL: string,\n practiceBaseURL: string,\n consultBaseURL: string,\n workflowBaseURL: string,\n diagnosisBaseURL: string,\n authenticationCallback?: (err: Error) => void\n) => {\n const {\n tellerService,\n practiceService,\n consultService,\n vaultService,\n guardService,\n searchService,\n workflowService,\n diagnosisService,\n } = initApis(\n {\n tellerBaseURL,\n vaultBaseURL,\n guardBaseURL,\n searchBaseURL,\n practiceBaseURL,\n consultBaseURL,\n workflowBaseURL,\n diagnosisBaseURL,\n },\n authenticationCallback\n )\n\n const client = new OroClient(\n toolbox,\n tellerService!,\n vaultService!,\n guardService!,\n searchService!,\n practiceService!,\n consultService!,\n workflowService!,\n diagnosisService!,\n authenticationCallback\n )\n\n return client\n}\n\nexport { OroClient } from './client'\nexport * from 'oro-sdk-apis'\nexport * from './models'\nexport * from './helpers'\nexport * from './services'\nexport { OroToolboxNamespace }\nexport default init\n"],"names":["personalMetaToPrefix","_personalMetaToPrefix","MetadataCategory","Personal","ChildPersonal","OtherPersonal","identificationToPersonalInformations","data","category","prefix","birthday","firstname","gender","name","phone","zip","hid","_data","pharmacy","address","toActualObject","ret","Object","entries","fields","forEach","_ref","key","field","displayedAnswer","answer","updatePersonalIntoPopulatedWorkflowData","infos","JSON","parse","stringify","kind","extractISOLocalityForConsult","answers","undefined","arrAnswersWithLocality","flatMap","currentAnswerPage","arrCountryFields","keys","filter","workflowFieldName","indexOf","flat","arrProvinceFields","arrConsultLocalFields","concat","map","currentFieldName","item","arrSelectedLocality","currentSelectedLocality","startsWith","length","console","log","allowedLocalityPatterns","_wrapRegExp","indexPriority","isoValue","finalLocality","reduce","extractedSelected","exec","_ref2","indexSelectedPriority","isoSelectedValue","extractedFinal","_ref3","indexFinalPriority","isoFinalValue","sessionPrivateKeyPrefix","sessionStorePrivateKeyName","id","IncompleteAuthentication","_Error","_inheritsLoose","apply","arguments","_wrapNativeSuper","Error","MissingGrant","_Error2","MissingGrantFilter","_Error3","MissingLockbox","_Error4","MissingLockboxOwner","_Error5","AssociatedLockboxNotFound","_Error6","WorkflowAnswersMissingError","_Error7","filterTriggeredAnsweredWithKind","_x","_x2","_filterTriggeredAnsweredWithKind","_asyncToGenerator","_regeneratorRuntime","mark","_callee","workflowData","flattenedAnswers","triggeredQuestionsWithKind","samePageAnswers","res","wrap","_callee$","_context","prev","next","selectedAnswers","flattenSelectedAnswers","fromEntries","pages","a","questions","question","isTriggered","triggers","cur","_extends","questionFieldName","abrupt","stop","getWorkflowDataByCategory","_x3","_x4","_getWorkflowDataByCategory","_callee2","_workflowData$selecte","triggeredQuestions","answersPerPage","_callee2$","_context2","_ref4","pageAnswers","_","_ref5","k","v","previousAnswers","pageIndex","_ref6","questionId","Promise","all","_ref7","_ref8","p","populateWorkflowField","then","populatedValue","workflowCreatedAt","createdAt","workflowId","locale","err","error","getImagesFromIndexDb","_x5","_getImagesFromIndexDb","_callee3","_callee3$","_context3","getMany","_v$id","sent","_x6","_x7","_x8","_populateWorkflowField","_callee4","answerValue","previousAnswer","_callee4$","_context4","t0","text","value","images","image","imageData","resolve","includes","Array","isArray","some","subSetTriggers","every","trigger","linearAnswers","_iterator","_createForOfIteratorHelperLoose","_step","done","push","values","getInitialisedSelectedAnswers","workflow","useDefault","page","_i","_Object$entries","_Object$entries$_i","defaultValue","fillWorkflowFromPopulatedWorkflow","populatedWorkflow","filledWorkflow","find","changed","pageIdx","_i2","_Object$entries2","_Object$entries2$_i","_populatedWorkflow$fi","detectChangesInWorkflowAnswers","pageId","selectedAnswer","equalsAnswer","answer1","answer2","getOrCreatePatientConsultationUuid","_getOrCreatePatientConsultationUuid","consult","oroClient","payment","practiceClient","practiceGetPayment","uuidPractice","idStripeInvoiceOrPaymentIntent","uuidConsult","consultClient","getConsultByUUID","consultCreate","MAX_RETRIES","registerPatient","_registerPatient","patientUuid","consultRequest","masterKey","recoveryQA","indexSearch","onProgress","lockboxUuid","practitionerAdmin","retry","identity","errorsThrown","stepsTotalNum","currentStep","_loop","_ret","_consultIndex","_identity","_identity2","practitioners","grantPromises","consultIndex","consultIndexPromises","_loop$","setTimeout","practiceGetFromUuid","uuidAdmin","practiceGetPractitioners","getOrCreatePatientLockbox","guardClient","identityGet","grantLockbox","practitioner","uuid","_x30","IndexKey","ConsultationLockbox","grant","lockboxOwnerUuid","consultationId","vaultIndexAdd","_x31","storeImageAliases","storePatientData","isoLanguageRequired","consultType","recoveryMasterKey","updateMasterKey","recoverySecurityQuestions","updateSecurityQuestions","recoverySecurityAnswers","buildConsultSearchIndex","statusMedical","MedicalStatus","Assigning","warn","updateConsultByUUID","New","delegateYield","cleanIndex","_x9","_getOrCreatePatientLockbox","grants","lockboxResponse","tokens","_context5","getGrants","vaultClient","lockboxCreate","authRefresh","setTokens","accessToken","refreshToken","whoAmI","_x10","_x11","_x12","_x13","_x14","_x15","_storePatientData","_callee5","isoLanguage","patientDataPromises","_callee5$","_context6","getOrInsertJsonData","Raw","contentType","Consultation","documentType","DocumentType","PopulatedWorkflowData","withNotification","forceReplace","updateMedicalStatus","Medical","consultationIds","extractAndStorePersonalWorkflowData","Preference","ConsultType","FollowUp","Onboard","Refill","Followup","dataUuids","_x16","_x17","_x18","_x19","_x20","_storeImageAliases","_callee6","progress","nonNullImages","storedImagesNum","totalImagesNum","promises","_callee6$","_context7","t1","img","ImageAlias","idbId","progressStepValue","Math","round","_x21","_x22","_x23","_x24","_x25","_extractAndStorePersonalWorkflowData","_callee7","_callee7$","_context8","extractPersonalInfoFromWorkflowData","_x26","_extractPersonalInfoFromWorkflowData","_callee8","_callee8$","_context9","personalInfoPopulatedWfData","childPersonalInfoPopulatedWfData","otherPersonalInfoPopulatedWfData","_x27","_x28","_x29","_buildConsultSearchIndex","_callee9","terms","_yield$extractPersona","personalInfo","childPersonalInfo","otherPersonalInfo","_callee9$","_context10","shortId","searchClient","index","decryptGrants","encryptedGrants","rsaKey","encryptedLockbox","uuidParse","base64DecryptToBytes","e","decryptConsultLockboxGrants","encryptedConsultLockboxes","base64DecryptToJson","encryptedIndexEntry","grantsTuple","grantTuples","getRefillAnswersAsWorkflow","isTreatmentWorking","hasSideEffects","deliveryAddress","_extends2","_extends3","culDeSacs","hidePlanRules","startingPlanIds","title","groups","type","fieldsAndGroups","label","inline","inlineLabel","metaCategory","youPharmacy","summaryLabel","youAddress","createRefill","_createRefill","populatedRefillWorkflow","newConsult","rawConsultationManifest","rawConsultation","getLockboxManifest","uuidParent","getJsonData","dataUuid","filterGrantsWithLockboxMetadata","_filterGrantsWithLockboxMetadata","filteredGrants","consultationIdExistsInMetadata","lockboxMetadataGet","OroClient","toolbox","tellerClient","workflowClient","diagnosisClient","authenticationCallback","_proto","prototype","_cleanIndex","cachedMetadataGrants","cachedManifest","signUp","_signUp","email","password","practice","tosAndCpAcceptance","tokenData","subscription","skipEmailValidation","privateKey","symmetricEncryptor","recoveryPassword","hashedPassword","emailConfirmed","subscriptionAcceptance","signupRequest","symetricEncryptor","rsa","CryptoRSA","CryptoChaCha","fromPassphrase","bytesEncryptToBase64Payload","hashStringToBase64","toLowerCase","practiceUuid","publicKey","encodeToBase64","identityCreate","recoveryLogin","sessionStorage","setItem","confirmEmail","_confirmEmail","claims","identityUpdate","sub","signIn","_signIn","otp","tokenRequest","userUuid","authToken","recoverPrivateKeyFromPassword","resumeSession","_resumeSession","recoveryPayload","recoveryKey","symmetricDecryptor","getItem","base64PayloadDecryptToBytes","fromKey","localEncryptToJsonPayload","chaChaKey","encryptedData","jsonEncryptToBase64Payload","encryptedKey","encryptToBytes","localDecryptJsonPayload","decryptedData","base64PayloadDecryptToJson","signOut","_signOut","secrets","authLogout","_registerPatient2","_createRefill2","forceUpdateIndexEntries","_forceUpdateIndexEntries","_callee10","_this","_this$vaultIndexAdd","indexConsultLockbox","_callee10$","consults","alert","_vaultIndexAdd","_callee11","indexOwnerUuid","rsaPub","base64IndexOwnerPubKey","encryptedIndex","_Object$keys","keyString","_callee11$","_context11","decodeFromBase64","uniqueHash","timestamp","jsonWithPubEncryptToBase64","vaultIndexPut","_grantLockbox","_callee12","granteeUuid","secret","base64GranteePublicKey","granteePublicKey","granteeEncryptedSecret","request","_callee12$","_context12","getCachedSecretCryptor","bytesWithPubEncryptToBase64","encryptedSecret","lockboxGrant","createMessageData","_createMessageData","_callee13","message","previousDataUuid","options","_context13","t2","author","encryptedPrivateMeta","call","meta","Message","publicMetadata","privateMetadata","lockboxDataStore","_x32","_x33","_x34","createMessageAttachmentData","_createMessageAttachmentData","_callee14","_context14","Uint8Array","arrayBuffer","t3","t4","t5","t6","t7","lastModified","t8","size","t9","fileName","_x35","_x36","_x37","_x38","_x39","_x40","createConsultationAttachmentData","_createConsultationAttachmentData","_callee15","_context15","t10","t11","createBytesData","_x41","_x42","_x43","_x44","_x45","_x46","_x47","createJsonData","_createJsonData","_callee16","privateMeta","_context16","_x48","_x49","_x50","_x51","_x52","_x53","_x54","_getOrInsertJsonData","_callee17","_context17","lockboxManifestGet","manifest","_x55","_x56","_x57","_x58","_x59","_createBytesData","_callee18","_context18","_x60","_x61","_x62","_x63","_x64","_x65","_x66","_getJsonData","_callee19","_yield$Promise$all","encryptedPayload","_callee19$","_context19","lockboxDataGet","_x67","_x68","_x69","getBytesData","_getBytesData","_callee20","_yield$Promise$all2","_callee20$","_context20","_x70","_x71","_x72","_getGrants","_callee21","filterString","currentAccountRole","decryptedGrants","grantsByConsultLockbox","decryptedConsults","_callee21$","_context21","getAccountRole","OtherRoleType","User","Patient","requiredRole","grantsGet","info","vaultIndexGet","_x73","_getAccountRole","_callee22","_callee22$","_context22","scope","split","_getCachedSecretCryptor","_callee23","cryptor","_callee23$","_context23","findIndex","lockboxSecretGet","sharedSecret","_x74","_x75","getPersonalInformationsFromConsultId","_getPersonalInformationsFromConsultId","_callee24","forceRefresh","_context24","getMetaCategoryFromConsultId","_x76","_x77","_x78","getMedicalDataFromConsultId","_getMedicalDataFromConsultId","_callee25","_context25","_x79","_x80","getFollowupDataFromConsultId","_getFollowupDataFromConsultId","_callee26","_context26","_x81","_x82","_getMetaCategoryFromConsultId","_callee28","_context29","_context28","_this2","entry","metadata","_callee27","_callee27$","_context27","_x86","_x83","_x84","_x85","getPersonalInformations","_getPersonalInformations","_callee29","userId","identificationDataUuid","_callee29$","_context30","lockbox","_x87","getGrantFromConsultId","_getGrantFromConsultId","_callee30","_callee30$","_context31","_x88","getIdentityFromConsultId","_getIdentityFromConsultId","_callee31","_callee31$","_context32","_x89","_getLockboxManifest","_callee33","expandPrivateMetadata","manifestKey","_context34","_callee32","_callee32$","_context33","_this3","_x95","_x90","_x91","_x92","_x93","_x94","createPersonalInformations","_createPersonalInformations","_callee34","_yield$this$getGrants","_callee34$","_context35","_x96","_x97","_x98","createUserPreference","_createUserPreference","_callee35","preference","_yield$this$getGrants2","_callee35$","_context36","_x99","_x100","_x101","getDataFromGrant","_getDataFromGrant","_callee36","_callee36$","_context37","_x102","_x103","getUserPreferenceFromConsultId","_getUserPreferenceFromConsultId","_callee37","_callee37$","_context38","_x104","getUserPreference","_getUserPreference","_callee38","_callee38$","_context39","_x105","getRecoveryDataFromConsultId","_getRecoveryDataFromConsultId","_callee39","_callee39$","_context40","Recovery","_x106","getRecoveryData","_getRecoveryData","_callee40","_callee40$","_context41","_x107","getAssignedConsultations","_getAssignedConsultations","_callee42","_this4","_callee42$","_context43","_callee41","_callee41$","_context42","_x109","promise","_x108","getPastConsultationsFromConsultId","_getPastConsultationsFromConsultId","_callee44","_this5","consultationsInLockbox","_callee44$","_context45","_callee43","consultId","_callee43$","_context44","_x112","_x110","_x111","getPatientConsultationData","_getPatientConsultationData","_callee45","_context46","_this6","_x113","_x114","getPatientPrescriptionsList","_getPatientPrescriptionsList","_callee46","_callee46$","_context47","getPatientDocumentsList","Prescription","_x115","getPatientResultsList","_getPatientResultsList","_callee47","_callee47$","_context48","Result","_x116","getPatientTreatmentPlans","_getPatientTreatmentPlans","_callee48","_callee48$","_context49","TreatmentPlan","_x117","getPatientTreatmentPlanByUuid","_getPatientTreatmentPlanByUuid","_callee49","treatmentPlanId","_callee49$","_context50","_x118","_x119","_getPatientDocumentsList","_callee51","filters","_this7","_callee51$","_context52","_callee50","_callee50$","_context51","_x123","_x120","_x121","_x122","recoverPrivateKeyFromSecurityQuestions","_recoverPrivateKeyFromSecurityQuestions","_callee52","threshold","shards","answeredShards","_callee52$","_context53","shard","indexOfQuestion","securityQuestion","securityAnswer","reconstructSecret","_x124","_x125","_x126","_x127","_recoverPrivateKeyFromPassword","_callee53","_callee53$","_context54","_x128","_x129","recoverPrivateKeyFromMasterKey","_recoverPrivateKeyFromMasterKey","_callee54","_callee54$","_context55","_x130","_x131","_updateSecurityQuestions","_callee55","securityQuestionPayload","updateRequest","_callee55$","_context56","breakSecretIntoShards","_x132","_x133","_x134","_x135","updatePassword","_updatePassword","_callee56","newPassword","oldPassword","passwordPayload","_callee56$","_context57","_x136","_x137","_x138","_updateMasterKey","_callee57","masterKeyPayload","updatedIdentity","_callee57$","_context58","_x139","_x140","_x141","CliniaService","url","apiKey","api","AxiosService","headers","placeSearch","searchOptions","_objectWithoutPropertiesLoose","_excluded","post","params","placeMatch","_excluded2","places","place","wasmPath","init","tellerBaseURL","vaultBaseURL","guardBaseURL","searchBaseURL","practiceBaseURL","consultBaseURL","workflowBaseURL","diagnosisBaseURL","_initApis","initApis","tellerService","practiceService","consultService","vaultService","guardService","searchService","workflowService","diagnosisService","client"],"mappings":"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"}
1
+ {"version":3,"file":"oro-sdk.cjs.development.js","sources":["../src/helpers/client.ts","../src/models/error.ts","../src/helpers/workflow.ts","../src/helpers/consult.ts","../src/helpers/patient-registration.ts","../src/helpers/vault-grants.ts","../src/helpers/prescription-refill.ts","../src/sdk-revision/client.ts","../src/client.ts","../src/services/external/clinia.ts","../src/index.ts"],"sourcesContent":["import {\n PopulatedWorkflowData,\n MetadataCategory,\n SelectedAnswersData,\n} from 'oro-sdk-apis'\nimport { PersonalInformations } from '../models/client'\n\nconst personalMetaToPrefix = {\n [MetadataCategory.Personal]: 'you',\n [MetadataCategory.ChildPersonal]: 'child',\n [MetadataCategory.OtherPersonal]: 'other',\n}\n\n/**\n * This function extract PersonalInformations from data input object coming from workflow\n * @param data extracted from WorkflowData\n * @returns PersonalInformations of a patient\n */\nexport function identificationToPersonalInformations(\n data: any,\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n): PersonalInformations {\n const prefix = personalMetaToPrefix[category]\n\n return {\n birthday: data[`${prefix}Birthday`],\n firstname: data[`${prefix}Firstname`],\n gender: data[`${prefix}Gender`],\n name: data[`${prefix}Name`],\n phone: data[`${prefix}Phone`],\n zip: data[`${prefix}Zip`],\n hid: data[`${prefix}HID`] ?? data[`${prefix}ID`], // This is done for backward compatibility (historically youID was used)\n pharmacy: data[`${prefix}Pharmacy`],\n address: data[`${prefix}Address`],\n }\n}\n\nexport function toActualObject(data: PopulatedWorkflowData) {\n const ret: any = {}\n\n Object.entries(data.fields).forEach(([key, field]) => {\n ret[key] = field.displayedAnswer ? field.displayedAnswer : field.answer\n })\n\n return ret\n}\n\n/**\n * This function update a PopulatedWorkflowData with PersonalInformations\n * @param infos the personal informations\n * @param data the PopulatedWorkflowData\n * @returns an updated PopulatedWorkflowData\n */\nexport function updatePersonalIntoPopulatedWorkflowData(\n infos: PersonalInformations,\n data: PopulatedWorkflowData,\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n) {\n const prefix = personalMetaToPrefix[category]\n\n const ret = JSON.parse(JSON.stringify(data)) // deep copy PopulatedWorkflowData\n\n if (infos.birthday && ret.fields[`${prefix}Birthday`])\n ret.fields[`${prefix}Birthday`].answer = infos.birthday\n if (infos.firstname && ret.fields[`${prefix}Firstname`])\n ret.fields[`${prefix}Firstname`].answer = infos.firstname\n if (infos.gender && ret.fields[`${prefix}Gender`])\n ret.fields[`${prefix}Gender`].answer = infos.gender\n if (infos.name && ret.fields[`${prefix}Name`])\n ret.fields[`${prefix}Name`].answer = infos.name\n if (infos.phone && ret.fields[`${prefix}Phone`])\n ret.fields[`${prefix}Phone`].answer = infos.phone\n if (infos.zip && ret.fields[`${prefix}Zip`])\n ret.fields[`${prefix}Zip`].answer = infos.zip\n if (infos.hid) {\n if (ret.fields[`${prefix}HID`]) {\n ret.fields[`${prefix}HID`].answer = infos.hid\n } else if (ret.fields[`${prefix}ID`]) {\n // This is done for backward compatibility (historically youID was used)\n ret.fields[`${prefix}ID`].answer = infos.hid\n } else {\n // If does not exist create it\n ret.fields[`${prefix}HID`] = { kind: 'text', answer: infos.hid }\n }\n }\n\n return ret\n}\n\n/**\n * This function extract an ISO 3166-1 alpha-2 country and subdivision code from data input object coming from workflow\n * @param answers answers from the WorkflowData\n * @returns an ISO 3166 alpha-2 code or undefined\n */\nexport function extractISOLocalityForConsult(\n answers?: SelectedAnswersData\n): string | undefined {\n if (!answers) {\n return undefined\n }\n\n const arrAnswersWithLocality = answers\n .flatMap((currentAnswerPage) => {\n const arrCountryFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Country') !== -1\n )\n .flat()\n const arrProvinceFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Province') !== -1\n )\n .flat()\n const arrConsultLocalFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Locality') !== -1\n )\n .flat()\n //returning the actual selected values, skipping if their IDs are more complex than a string\n return [\n ...arrCountryFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ...arrProvinceFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ...arrConsultLocalFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ]\n })\n .filter((item) => item !== undefined)\n\n const arrSelectedLocality = arrAnswersWithLocality.filter(\n (currentSelectedLocality) =>\n currentSelectedLocality.startsWith('isoLocalityConsult')\n )\n if (!arrSelectedLocality || arrSelectedLocality.length === 0) {\n console.log('no locality found in ' + arrSelectedLocality)\n return undefined\n }\n //to allow enforcing of an order, we will allow the following pattern in the isoLocalityConsult field name\n // isoLocalityConsult-QC-CA and isoLocalityConsult_1-QC-CA\n // or generally: isoLocalityConsult-<isoValue> or isoLocalityConsult_<priority>-<isoValue>\n const allowedLocalityPatterns = /isoLocalityConsult(?:_(?<indexPriority>\\d*))?-(?<isoValue>[a-zA-Z0-9]{2}-[a-zA-Z0-9]{1,3})/\n const finalLocality = arrSelectedLocality.reduce<string | undefined>(\n (finalLocality, currentSelectedLocality) => {\n const extractedSelected = allowedLocalityPatterns.exec(\n currentSelectedLocality\n )\n const [, indexSelectedPriority, isoSelectedValue] =\n extractedSelected ?? []\n if (!finalLocality) {\n return isoSelectedValue\n }\n\n const extractedFinal = allowedLocalityPatterns.exec(finalLocality)\n const [, indexFinalPriority, isoFinalValue] = extractedFinal ?? []\n //we only keep the old value if there's priority used\n // and the new value is of lower priority\n if (\n !indexSelectedPriority ||\n (indexFinalPriority &&\n indexFinalPriority > indexSelectedPriority)\n ) {\n return isoFinalValue\n }\n\n return isoSelectedValue\n },\n undefined\n )\n\n console.log('Picking locality ' + finalLocality)\n return finalLocality\n}\n\nconst sessionPrivateKeyPrefix = 'sess-pkey'\nexport function sessionStorePrivateKeyName(id: string): string {\n return sessionPrivateKeyPrefix + id\n}\n","export class IncompleteAuthentication extends Error { }\nexport class MissingGrant extends Error { }\nexport class MissingGrantFilter extends Error { }\nexport class MissingLockbox extends Error { }\nexport class MissingLockboxOwner extends Error { }\nexport class AssociatedLockboxNotFound extends Error { }\nexport class WorkflowAnswersMissingError extends Error { }\n","import { getMany } from 'idb-keyval'\nimport { WorkflowAnswersMissingError } from '../models'\nimport {\n MetadataCategory,\n PopulatedWorkflowData,\n PopulatedWorkflowField,\n PreviousAnswerData,\n QuestionData,\n SelectedAnswerData,\n SelectedAnswersData,\n WorkflowData,\n WorkflowPageData,\n WorkflowUploadedImage,\n} from 'oro-sdk-apis'\n\nexport async function filterTriggeredAnsweredWithKind(\n workflowData: WorkflowData,\n kind:\n | 'text'\n | 'text-area'\n | 'text-select-group'\n | 'date'\n | 'number'\n | 'images'\n | 'images-alias'\n | 'body-parts'\n | 'pharmacy-picker'\n | 'online-pharmacy-picker'\n | 'hair-selector-women'\n | 'hair-selector-men'\n | 'hair-loss-stage'\n | 'hair-loss-frontal'\n): Promise<SelectedAnswerData[]> {\n if (!workflowData.selectedAnswers) throw WorkflowAnswersMissingError\n // Flattens the list of answered questions\n let flattenedAnswers = flattenSelectedAnswers(workflowData.selectedAnswers)\n // Generates a list of applicable questions\n let triggeredQuestionsWithKind = Object.fromEntries(\n workflowData.pages\n .map((a) => {\n return Object.entries(a.questions).filter(\n ([_, question]) => isTriggered(question.triggers || [], flattenedAnswers) && question.kind === kind\n )\n })\n .flat()\n )\n\n const samePageAnswers = workflowData.selectedAnswers.reduce((prev, cur) => {\n return { ...prev, ...cur }\n }, {})\n\n const res = Object.keys(triggeredQuestionsWithKind).map((questionFieldName) => {\n return samePageAnswers[questionFieldName]\n })\n\n return res\n}\n\n/**\n * Filters and Populates the `selectedAnswers` from the workflow by\n * Cross-referencing the `MetaCategory` of the answer's respective question\n * Populates the fields labels and values that are of radio, dropdown and checkbox types\n *\n * @param workflowData\n * @param category\n * @returns An array of record key, value pairs\n */\nexport async function getWorkflowDataByCategory(\n workflowData: WorkflowData,\n category: MetadataCategory\n): Promise<PopulatedWorkflowData> {\n if (!workflowData.selectedAnswers) throw WorkflowAnswersMissingError\n\n // Flattens the list of answered questions\n let flattenedAnswers = flattenSelectedAnswers(workflowData.selectedAnswers)\n // Generates a list of applicable questions\n let triggeredQuestions = Object.fromEntries(\n workflowData.pages\n .map((a) => {\n return Object.entries(a.questions).filter(([_, question]) =>\n isTriggered(question.triggers || [], flattenedAnswers)\n )\n })\n .flat()\n )\n\n const fields: Record<string, PopulatedWorkflowField> = {}\n\n let answersPerPage = (workflowData.selectedAnswers ?? [])\n .map((pageAnswers, _) =>\n Object.entries(pageAnswers)\n .map(([k, v]) => [k, v, undefined]) as [string, SelectedAnswerData, PreviousAnswerData | undefined][])\n\n if (workflowData.previousAnswers) {\n // Since the selectedAnswers and previousAnswers should be a 1-1, we can map them together\n answersPerPage = answersPerPage\n .map((pageAnswers, pageIndex) => pageAnswers\n .map(([questionId, v]): [string, SelectedAnswerData, PreviousAnswerData | undefined] => {\n if (workflowData.previousAnswers && workflowData.previousAnswers[pageIndex][questionId])\n return [questionId, v, workflowData.previousAnswers[pageIndex][questionId]]\n return [questionId, v, undefined]\n }\n ))\n }\n\n // Generates the answers of the specified category and adds the appropriate values if any are missing\n return Promise.all(\n answersPerPage\n .flat(1) // remove the pages, we want the answers all together\n .filter(([k]) => triggeredQuestions[k] && triggeredQuestions[k]['metaCategory'] === category)\n .map(([k, v, p]) => {\n return populateWorkflowField(triggeredQuestions[k], v, p).then((populatedValue) => {\n fields[k] = populatedValue\n })\n })\n )\n .then(() => {\n const ret: PopulatedWorkflowData = {\n workflowCreatedAt: workflowData.createdAt,\n workflowId: workflowData.id,\n locale: workflowData.locale,\n fields,\n }\n return ret\n })\n .catch((err) => {\n console.error(`Error while extracting ${category} data from workflow`, err)\n throw err\n })\n}\n\nexport async function getImagesFromIndexDb(answer: SelectedAnswerData): Promise<WorkflowUploadedImage[]> {\n return await getMany<WorkflowUploadedImage>((answer as any[]).map((v) => v.id ?? v) as string[])\n}\n\n/**\n * (If applicable) Based on the question kind, and the answer type this function will add and replace the appropriate fields to the\n * field values if they are radio, dropdown and checkbox fields\n *\n *\n * @param question\n * @param answerValue\n * @returns\n */\nasync function populateWorkflowField(\n question: QuestionData,\n answerValue: SelectedAnswerData,\n previousAnswer?: PreviousAnswerData\n): Promise<PopulatedWorkflowField> {\n let answer: any\n let displayedAnswer: string | string[] | undefined = undefined\n switch (question.kind) {\n case 'text-select-group':\n if (question.answers) {\n displayedAnswer = `${answerValue[0]} ${question.answers[answerValue[1] as string].text}`\n }\n answer = answerValue\n break\n case 'radio':\n case 'radio-card':\n case 'select':\n if (question.answers) {\n displayedAnswer = question.answers[answerValue as string].text\n }\n\n answer = answerValue\n break\n case 'multiple':\n case 'checkbox-group':\n displayedAnswer = (answerValue as string[]).map((value) => {\n if (question.answers) {\n return question.answers[value].text\n }\n\n throw new WorkflowAnswersMissingError()\n })\n\n answer = answerValue\n break\n case 'images':\n answer = await getImagesFromIndexDb(answerValue).then((images) =>\n images.map((image) => {\n const { name, imageData } = image\n\n return { name, imageData }\n })\n )\n break\n default:\n answer = answerValue\n }\n\n return Promise.resolve({\n answer,\n displayedAnswer,\n previousAnswer,\n kind: question.kind,\n })\n}\n\n/**\n * Determine if a question is triggered by some answers\n *\n * We use the following logical combinations of rules:\n *\n * #### Single string\n *\n * ```\n * // Required: rule1\n * rules: rule1\n * ```\n *\n * #### Array of strings (AND is applied between statements):\n *\n * ```\n * // Required: rule1 AND rule2\n * rules: [ rule1, rule2 ]\n * ```\n *\n * #### Array of arrays of strings (OR is applied between inner arrays. AND is applied between inner arrays statements)\n *\n * ```\n * // Required: rule1 OR rule2\n * rules: [\n * [ rule1 ],\n * [ rule2 ]\n * ]\n *\n * // Required: rule1 OR (rule2 AND rule3)\n * rules: [\n * [ rule1 ],\n * [ rule2, rule3 ]\n * ]\n *\n * // THIS IS FORBIDDEN\n * rules: [\n * rule1, // <-- THIS IS FORBIDDEN. Instead use [ rule1 ]\n * [ rule2, rule3 ]\n * ]\n * ```\n *\n * @param triggers the triggering rules\n * @param answers the answers to check againts triggering rules\n * @returns `true` if triggers are verified against ansers. Otherwise, returns `false`.\n * @throws an Error if triggers typing is wrong\n */\nexport function isTriggered(triggers: string[][] | string[] | string, answers: string[]): boolean {\n // is triggers contained in answers\n if (typeof triggers === 'string') {\n return answers.includes(triggers)\n }\n\n if (Array.isArray(triggers)) {\n // rule combination kind: rule1 OR (rule2 AND rule3)\n if (Array.isArray(triggers[0])) {\n return (triggers as string[][]).some((subSetTriggers) =>\n subSetTriggers.every((trigger) => answers.includes(trigger))\n )\n } else {\n // rule combination kind: rule1 AND rule2\n return (triggers as string[]).every((trigger) => answers.includes(trigger))\n }\n }\n\n throw Error('[isTriggered] triggers is not typed well')\n}\n\nexport function flattenSelectedAnswers(answers: SelectedAnswersData) {\n const linearAnswers: SelectedAnswerData[] = []\n\n for (const answer of answers) {\n linearAnswers.push(...Object.values(answer))\n }\n\n return linearAnswers.flat(1)\n}\n\n/**\n * This function helps you to get a valid workflow selectedAnswers structure\n * @param workflow the workflow data to use to initialize selectedAnswers\n * @param useDefault use workflow default values or not (this is used to avoid having unset values to appear in summaries)\n * @returns a valid selectedAnswers structure\n */\nexport function getInitialisedSelectedAnswers(workflow: WorkflowData, useDefault: boolean = true) {\n return workflow.pages.map((page) => {\n const ret: any = {}\n for (const [id, question] of Object.entries(page.questions)) {\n if (question.kind === 'body-parts') {\n ret[id] = useDefault ? [] : undefined\n } else {\n ret[id] = useDefault && question.defaultValue ? question.defaultValue : undefined\n }\n }\n return ret\n })\n}\n\nexport function fillWorkflowFromPopulatedWorkflow(workflow: WorkflowData, populatedWorkflow: PopulatedWorkflowData): WorkflowData {\n const filledWorkflow: WorkflowData = JSON.parse(JSON.stringify(workflow))\n\n if (!filledWorkflow.selectedAnswers) {\n filledWorkflow.selectedAnswers = getInitialisedSelectedAnswers(filledWorkflow, false)\n }\n\n if (!filledWorkflow.previousAnswers && !!Object.values(populatedWorkflow.fields).find(answers => !!answers.previousAnswer))\n filledWorkflow.previousAnswers = filledWorkflow.selectedAnswers\n .map(pageAnswers => Object\n .fromEntries(Object\n .entries(pageAnswers)\n .map(([questionId, answer]) => ([questionId, { previousAnswer: answer, changed: false }])))\n )\n\n filledWorkflow.pages.forEach((page: WorkflowPageData, pageIdx: number) => {\n for (const [id] of Object.entries(page.questions)) {\n if (populatedWorkflow.fields[id]) {\n if (filledWorkflow.selectedAnswers)\n filledWorkflow.selectedAnswers[pageIdx][id] = populatedWorkflow.fields[id].answer as\n | string\n | string[]\n if (filledWorkflow.previousAnswers && populatedWorkflow.fields[id]?.previousAnswer)\n filledWorkflow.previousAnswers[pageIdx][id] = populatedWorkflow.fields[id].previousAnswer!\n }\n }\n })\n\n return filledWorkflow\n}\n\n/**\n * Checks and toggles the changed status for every answer in the workflow\n * by comparing the previous answer with the selected answer of the same question\n * \n * @param workflow \n * @returns the workflow with the updated `changed` statuses\n */\nexport function detectChangesInWorkflowAnswers(workflow: WorkflowData): WorkflowData {\n return {\n ...workflow,\n previousAnswers: workflow.previousAnswers ?\n workflow.previousAnswers\n .map((pageAnswers, pageId) => Object.fromEntries(Object.entries(pageAnswers).map(([question, answer]) => {\n let selectedAnswer = undefined\n if (workflow.selectedAnswers && workflow.selectedAnswers[pageId][question])\n selectedAnswer = workflow.selectedAnswers[pageId][question]\n let changed = !!selectedAnswer && !equalsAnswer(selectedAnswer, answer.previousAnswer)\n return [question, { ...answer, changed }]\n }))) : undefined\n }\n}\n\nfunction equalsAnswer<T = SelectedAnswerData | WorkflowUploadedImage[]>(answer1: T, answer2: T): boolean {\n return JSON.stringify(answer1) === JSON.stringify(answer2)\n}","import { Consult, ConsultRequest } from 'oro-sdk-apis'\nimport { OroClient } from '..'\n\n/**\n * Creates a consultation if one has not been created and fails to be retrieved by the payment intent\n * @param consult\n * @param oroClient\n * @returns the consult Uuid\n */\nexport async function getOrCreatePatientConsultationUuid(\n consult: ConsultRequest,\n oroClient: OroClient\n): Promise<Consult> {\n let payment = await oroClient.practiceClient.practiceGetPayment(\n consult.uuidPractice,\n consult.idStripeInvoiceOrPaymentIntent\n )\n if (payment && payment.uuidConsult) {\n return oroClient.consultClient.getConsultByUUID(payment.uuidConsult).catch((err) => {\n console.error('Error while retrieving consult from linked payment infos', err)\n throw err\n })\n } else {\n return await oroClient.consultClient.consultCreate(consult).catch((err) => {\n console.error('Error while creating consult after a payment found with no consult linked', err)\n throw err\n })\n }\n}\n","import {\n Consult,\n ConsultationImageMeta,\n ConsultationMeta,\n ConsultRequest,\n ConsultType,\n DocumentType,\n IdentityResponse,\n IndexKey,\n MedicalMeta,\n MedicalStatus,\n MetadataCategory,\n PersonalMeta,\n PopulatedWorkflowData,\n Practitioner,\n PreferenceMeta,\n RawConsultationMeta,\n Term,\n Terms,\n Uuid,\n VaultIndex,\n WorkflowData,\n} from 'oro-sdk-apis'\nimport {\n detectChangesInWorkflowAnswers,\n filterTriggeredAnsweredWithKind,\n getImagesFromIndexDb,\n getWorkflowDataByCategory,\n identificationToPersonalInformations,\n OroClient,\n RegisterPatientOutput,\n toActualObject,\n} from '..'\nimport { getOrCreatePatientConsultationUuid } from './consult'\n\nconst MAX_RETRIES = 15\n\n/**\n * Completes a registration for a user retrying the complete flow a maximum of 15 times\n *\n * @description The order of importance when registering:\n * Creates a consultation if none exist\n * Retrieves or create's a lockbox if none exist\n * Grants the lockbox (if new) to all practitioners in the practice\n * Stores or fetches the patient data (without images)\n * Indexes the lockbox to the consult for all practitioners (done after inserting since index can be rebuilt from grants)\n * Stores the image data - done last since the majority of failure cases occur here\n * Creates the recovery payloads if they don't exist\n *\n * @param patientUuid\n * @param consultRequest\n * @param workflow\n * @param oroClient\n * @param masterKey\n * @param recoveryQA\n * @param indexSearch create search index for the consultation if true\n * @param onProgress callback that is called whenever a new step of patient registration is executed. Note: progress ranges from 0 to 1, and descriptionKey is a description of the progress as a key so the app would use it to translate the description\n * @returns the successful registration\n */\nexport async function registerPatient(\n patientUuid: Uuid,\n consultRequest: ConsultRequest,\n workflow: WorkflowData,\n oroClient: OroClient,\n masterKey?: Uuid,\n recoveryQA?: {\n recoverySecurityQuestions: string[]\n recoverySecurityAnswers: string[]\n },\n indexSearch: boolean = true,\n onProgress?: (\n progress: number,\n descriptionKey: string,\n extraInfo?: { storedImagesNum?: number; totalImagesNum?: number }\n ) => void\n): Promise<RegisterPatientOutput> {\n let consult: Consult | undefined = undefined\n let lockboxUuid: Uuid | undefined = undefined\n let practitionerAdmin: Uuid | undefined = undefined\n let retry = MAX_RETRIES\n let identity: IdentityResponse | undefined = undefined\n let errorsThrown: Error[] = []\n const stepsTotalNum = 9\n let currentStep: number\n\n // toggle all changed statuses if this workflow has previous/revision data \n workflow = detectChangesInWorkflowAnswers(workflow)\n\n for (; retry > 0; retry--) {\n try {\n currentStep = 0\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'retrieve_practitioners')\n\n // Wait a bit each retry (we also want the first one to wait)\n await new Promise((resolve) => setTimeout(resolve, 2000))\n\n // Retrieving practitioners\n if (!practitionerAdmin)\n practitionerAdmin = (await oroClient.practiceClient.practiceGetFromUuid(consultRequest.uuidPractice))\n .uuidAdmin\n\n let practitioners: Practitioner[] = await oroClient.practiceClient\n .practiceGetPractitioners(consultRequest.uuidPractice)\n .catch((err) => {\n console.log(`Error retrieving practitioners`, err)\n return []\n })\n\n // Creating consult\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'create_consult')\n\n if (!consult) {\n consult = await getOrCreatePatientConsultationUuid(consultRequest, oroClient)\n }\n\n // Creating lockbox\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'create_lockbox')\n\n if (!lockboxUuid) lockboxUuid = await getOrCreatePatientLockbox(oroClient)\n\n if (!identity) identity = await oroClient.guardClient.identityGet(patientUuid)\n\n await oroClient.grantLockbox(practitionerAdmin, lockboxUuid).catch((err) => {\n console.error(`Error while granting lockbox to practitioner admin ${practitionerAdmin}`, err)\n // if we cannot grant to the admin, then the registration will fail\n errorsThrown.push(err)\n })\n\n // Patient Grant to practice\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'grant_patient')\n\n let grantPromises = practitioners\n .filter((practitioner) => practitioner.uuid !== practitionerAdmin)\n .map(async (practitioner) => {\n return oroClient.grantLockbox(practitioner.uuid, lockboxUuid!).catch((err) => {\n console.error(`Error while granting lockbox to practitioner`, err)\n // Acceptable to continue as admin has already been granted, but we should still retry until the last retry remains\n if (retry <= 1) return\n errorsThrown.push(err)\n })\n })\n\n const consultIndex: VaultIndex = {\n [IndexKey.ConsultationLockbox]: [\n {\n grant: {\n lockboxUuid,\n lockboxOwnerUuid: patientUuid,\n },\n consultationId: consult.uuid,\n },\n ],\n }\n\n // the index will identify in which lockbox a consultation resides\n let consultIndexPromises = practitioners.map(async (practitioner) => {\n return oroClient.vaultIndexAdd(consultIndex, practitioner.uuid).catch((err) => {\n console.error(\n `[SDK: registration] Error while adding to the practitioner's index ${practitioner.uuid}`,\n err\n )\n // Acceptable to continue as the index can be rebuilt, but we should still retry until the last retry remains\n if (retry <= 1) return\n else errorsThrown.push(err)\n })\n })\n\n await storeImageAliases(\n consult.uuid,\n lockboxUuid,\n workflow,\n oroClient,\n onProgress\n ? {\n onProgress,\n currentStep,\n stepsTotalNum,\n }\n : undefined\n ).catch((err) => {\n console.error('[SDK: registration] Some errors happened during image upload', err)\n // Acceptable to continue as images can be requested during the consultation, but we should still retry until the last retry remains\n if (retry <= 1) return\n else errorsThrown.push(err)\n })\n ++currentStep\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'store_patient_data')\n\n await storePatientData(\n consult.uuid,\n consultRequest.isoLanguageRequired,\n lockboxUuid,\n workflow,\n oroClient,\n consult.consultType\n ).catch((err) => {\n console.error('[SDK: registration] Some errors happened during patient data upload', err)\n errorsThrown.push(err)\n })\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'set_masterkey')\n\n if (masterKey && !identity?.recoveryMasterKey) {\n // generate and store recovery payload and updates the identity\n identity = await oroClient.updateMasterKey(patientUuid, masterKey, lockboxUuid).catch((err) => {\n console.error(`[SDK: registration] Error while updating master key`, err)\n /// it's acceptable to continue registration (return old identity)\n if (retry <= 1) return\n errorsThrown.push(err)\n return identity\n })\n } else {\n // we did not set the master key so we do not return it\n masterKey = undefined\n }\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'set_security_questions')\n\n if (recoveryQA && !identity?.recoverySecurityQuestions)\n // Patient security question recovery threshold is 2 answers and updates the identity\n identity = await oroClient\n .updateSecurityQuestions(\n patientUuid,\n recoveryQA.recoverySecurityQuestions,\n recoveryQA.recoverySecurityAnswers,\n 2\n )\n .catch((err) => {\n console.error(`[SDK: registration] Error while updating security questions`, err)\n /// it's acceptable to continue registration (return old identity)\n if (retry <= 1) return\n errorsThrown.push(err)\n return identity\n })\n\n await Promise.all([...grantPromises, ...consultIndexPromises])\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'search_indexing')\n\n if (indexSearch) {\n await buildConsultSearchIndex(consult, workflow, oroClient).catch((err) => {\n console.error(\n '[SDK: registration] personal information not found or another error occured during search indexing',\n err\n )\n if (retry <= 1) return // this statement is to avoid failing the registration due to the failure in search indexing the consult, this practically implements a soft retry\n errorsThrown.push(err)\n })\n }\n\n if (errorsThrown.length > 0) throw errorsThrown\n\n if (consult.statusMedical === MedicalStatus.Assigning) {\n //hopefully svelte query received all updates\n console.warn('Consult assignation took too much time, moving to new anyway')\n }\n // Deem the consultation as ready\n await oroClient.consultClient.updateConsultByUUID(consult.uuid, {\n statusMedical: MedicalStatus.New,\n })\n\n // if we got through the complete flow, the registration succeeded\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'success')\n\n break\n } catch (err) {\n console.error(`[SDK] Error occured during registration: ${err}, retrying... Retries remaining: ${retry}`)\n errorsThrown = []\n continue\n }\n }\n\n if (retry <= 0) {\n console.error('[SDK] registration failed: MAX_RETRIES reached')\n throw 'RegistrationFailed'\n }\n\n console.log('Successfully Registered')\n await oroClient.cleanIndex()\n return {\n masterKey,\n consultationId: consult!.uuid,\n lockboxUuid: lockboxUuid!,\n }\n}\n\n/**\n * Creates a new lockbox for the patient if they do not have any, otherwise, use the first (and only one)\n * @param oroClient\n * @returns the lockbox Uuid\n */\nasync function getOrCreatePatientLockbox(oroClient: OroClient): Promise<Uuid> {\n let grants = await oroClient.getGrants()\n if (grants.length > 0) {\n console.log('The grant has already been created, skipping lockbox create step')\n return grants[0].lockboxUuid!\n } else {\n let lockboxResponse = await oroClient.vaultClient.lockboxCreate().catch((err) => {\n console.error('Error while creating lockbox', err)\n throw err\n })\n // Since the creation of a lockbox will change the scope of a user, we will force refresh the tokens\n let tokens = await oroClient.guardClient.authRefresh()\n await oroClient.guardClient.setTokens({ accessToken: tokens.accessToken, refreshToken: tokens.refreshToken })\n await oroClient.guardClient.whoAmI(true)\n\n return lockboxResponse.lockboxUuid\n }\n}\n\n/**\n * Store all patient related information into his/her lockbox\n * @param consultationId The consultation id\n * @param isoLanguage the prefered language of communication (ISO 639-3 https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes)\n * @param lockboxUuid the lockbox uuid to store data in\n * @param workflow the workflow used to extract informations\n * @param oroClient an oroClient instance\n * @returns\n */\nasync function storePatientData(\n consultationId: Uuid,\n isoLanguage: string,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient,\n consultType: ConsultType\n): Promise<(Uuid | void)[]> {\n // Create and store registration data\n let patientDataPromises = [\n // Storing Raw data first\n oroClient.getOrInsertJsonData<RawConsultationMeta>(\n lockboxUuid,\n workflow,\n {\n category: MetadataCategory.Raw,\n contentType: 'application/json',\n consultationId,\n },\n {}\n ),\n getWorkflowDataByCategory(workflow, MetadataCategory.Consultation).then((data) =>\n oroClient.getOrInsertJsonData<ConsultationMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId, // TODO: deprecated. Will finally only be in privateMetadata\n },\n { consultationId },\n { withNotification: true, forceReplace: false, updateMedicalStatus: false }\n // the only data that needs to include an email notification\n )\n ),\n getWorkflowDataByCategory(workflow, MetadataCategory.Medical).then((data) =>\n oroClient.getOrInsertJsonData<MedicalMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Medical,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId!],\n },\n {}\n )\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.Personal,\n oroClient\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.ChildPersonal,\n oroClient\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.OtherPersonal,\n oroClient\n ),\n oroClient.getOrInsertJsonData<PreferenceMeta>(\n lockboxUuid,\n { isoLanguage },\n {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n },\n {}\n ),\n ]\n\n switch (consultType) {\n case ConsultType.FollowUp:\n patientDataPromises.push(\n getWorkflowDataByCategory(workflow, MetadataCategory.Followup).then((data) =>\n oroClient.getOrInsertJsonData(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Followup,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId,\n },\n { consultationId },\n { withNotification: false, forceReplace: false, updateMedicalStatus: false }\n // the only data that needs to include an email notification\n ))\n )\n break\n case ConsultType.Onboard:\n case ConsultType.Refill:\n default:\n break;\n }\n return Promise\n .all(patientDataPromises)\n .then((dataUuids) => dataUuids.flat())\n}\n\nasync function storeImageAliases(\n consultationId: Uuid,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient,\n progress?: {\n currentStep: number\n stepsTotalNum: number\n onProgress: (\n progress: number,\n descriptionKey: string,\n extraInfo?: { storedImagesNum?: number; totalImagesNum?: number }\n ) => void\n }\n): Promise<(Uuid | void)[]> {\n const images = await getImagesFromIndexDb((await filterTriggeredAnsweredWithKind(workflow, 'images-alias')).flat())\n\n const nonNullImages = images.filter((img) => !!img)\n\n if (images.length !== nonNullImages.length) {\n console.error('[SDK] Some images have not been found, they have been skipped.')\n }\n\n let storedImagesNum = 0\n let totalImagesNum = nonNullImages.length\n if (progress)\n progress.onProgress(progress.currentStep / progress.stepsTotalNum, 'store_images', {\n storedImagesNum,\n totalImagesNum,\n })\n\n let promises = nonNullImages.map((image) => {\n return oroClient\n .getOrInsertJsonData<ConsultationImageMeta>(\n lockboxUuid,\n image,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.ImageAlias,\n consultationId,\n idbId: image.idbId as string,\n },\n {}\n )\n .then(() => {\n if (progress) {\n ++storedImagesNum\n let progressStepValue =\n Math.round(\n ((progress.currentStep + 1) / progress.stepsTotalNum -\n progress.currentStep / progress.stepsTotalNum) *\n 100\n ) / 100\n progress.onProgress(\n progress.currentStep / progress.stepsTotalNum +\n progressStepValue * (storedImagesNum / totalImagesNum),\n 'store_images',\n {\n storedImagesNum,\n totalImagesNum,\n }\n )\n }\n })\n })\n return Promise.all(promises)\n}\n\n/**\n * Extracts the workflow MetadataCategory for Personal, ChildPersonal and OtherPersonal\n * then stores it in the vault\n *\n * @param workflow\n * @param lockboxUuid\n * @param category\n * @returns The data uuid\n */\nexport async function extractAndStorePersonalWorkflowData(\n workflow: WorkflowData,\n lockboxUuid: Uuid,\n consultationId: Uuid,\n category: MetadataCategory.Personal | MetadataCategory.ChildPersonal | MetadataCategory.OtherPersonal,\n oroClient: OroClient\n): Promise<Uuid | void> {\n return getWorkflowDataByCategory(workflow, category as unknown as MetadataCategory).then((data) => {\n if (Object.keys(data.fields).length === 0) return\n return oroClient.getOrInsertJsonData<PersonalMeta>(\n lockboxUuid,\n data,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId],\n },\n {}\n )\n })\n}\n\n/**\n * Given workflow data, it populates it with Personal, ChildPersonal, and OtherPersonal workflow data\n * @param workflow\n */\nexport async function extractPersonalInfoFromWorkflowData(workflow: WorkflowData): Promise<{\n personalInfoPopulatedWfData: PopulatedWorkflowData\n childPersonalInfoPopulatedWfData: PopulatedWorkflowData\n otherPersonalInfoPopulatedWfData: PopulatedWorkflowData\n}> {\n return Promise.all([\n getWorkflowDataByCategory(workflow, MetadataCategory.Personal),\n getWorkflowDataByCategory(workflow, MetadataCategory.ChildPersonal),\n getWorkflowDataByCategory(workflow, MetadataCategory.OtherPersonal),\n ]).then(([personalInfoPopulatedWfData, childPersonalInfoPopulatedWfData, otherPersonalInfoPopulatedWfData]) => {\n return {\n personalInfoPopulatedWfData,\n childPersonalInfoPopulatedWfData,\n otherPersonalInfoPopulatedWfData,\n }\n })\n}\n\n/**\n * Creates the search index for the first name, last name, and the short id of the given consultation\n * @param consult the consultation to be search indexed\n * @param workflow the workflow data\n * @param oroClient\n */\nexport async function buildConsultSearchIndex(consult: Consult, workflow: WorkflowData, oroClient: OroClient) {\n let terms: Terms = [\n <Term>{\n kind: 'consult-shortid',\n value: consult.shortId,\n },\n ]\n\n const { personalInfoPopulatedWfData, childPersonalInfoPopulatedWfData, otherPersonalInfoPopulatedWfData } =\n await extractPersonalInfoFromWorkflowData(workflow)\n\n const personalInfo = identificationToPersonalInformations(\n toActualObject(personalInfoPopulatedWfData),\n MetadataCategory.Personal\n )\n const childPersonalInfo = identificationToPersonalInformations(\n toActualObject(childPersonalInfoPopulatedWfData),\n MetadataCategory.ChildPersonal\n )\n const otherPersonalInfo = identificationToPersonalInformations(\n toActualObject(otherPersonalInfoPopulatedWfData),\n MetadataCategory.OtherPersonal\n )\n\n terms.push(\n <Term>{\n kind: 'first-name',\n value: personalInfo.firstname,\n },\n <Term>{\n kind: 'last-name',\n value: personalInfo.name,\n }\n )\n\n if (childPersonalInfo.firstname && childPersonalInfo.name) {\n terms.push(\n <Term>{\n kind: 'first-name',\n value: childPersonalInfo.firstname,\n },\n <Term>{\n kind: 'last-name',\n value: childPersonalInfo.name,\n }\n )\n }\n\n if (otherPersonalInfo.firstname && otherPersonalInfo.name) {\n terms.push(\n <Term>{\n kind: 'first-name',\n value: otherPersonalInfo.firstname,\n },\n <Term>{\n kind: 'last-name',\n value: otherPersonalInfo.name,\n }\n )\n }\n\n await oroClient.searchClient.index(consult.uuid, terms)\n}\n","import { CryptoRSA, uuidParse} from \"oro-toolbox\"\nimport { EncryptedIndexEntry, Grant, IndexConsultLockbox } from \"oro-sdk-apis\"\n\n/**\n * Decrypts and returns the encrypted grants\n * If something went wrong during decryption, that grant will be removed from the list\n *\n * @param encryptedGrants: an array of encrypted grants\n * @param rsaKey: the rsa key used to decrypt the encrypted grants\n * @returns an array of grants\n */\nexport function decryptGrants(encryptedGrants: Grant[], rsaKey: CryptoRSA): Grant[] {\n return encryptedGrants\n .map(grant => {\n if (grant.encryptedLockbox && !grant.lockboxUuid) {\n try {\n grant.lockboxUuid = uuidParse(\n rsaKey.base64DecryptToBytes(grant.encryptedLockbox)\n )\n } catch (e) {\n console.error('[sdk:index] The grant could not be decrypted or was not a valid UUID: ', e)\n }\n }\n return grant\n })\n .filter(grant => grant.lockboxUuid)\n}\n\n/**\n * Decrypts the encrypted consult lockboxes and returns their grants\n * If something went wrong during decryption, that grant will be removed from the list\n *\n * @param encryptedConsultLockboxes: an array of encrypted entries\n * @param rsaKey: the rsa key used to decrypt the encrypted entries\n * @returns an array of grants\n */\nexport function decryptConsultLockboxGrants(encryptedConsultLockboxes: EncryptedIndexEntry[], rsaKey: CryptoRSA): Grant[] {\n return encryptedConsultLockboxes\n .map(encryptedConsultLockboxes => {\n try {\n return [true, (rsaKey.base64DecryptToJson(\n encryptedConsultLockboxes.encryptedIndexEntry\n ) as IndexConsultLockbox).grant]\n } catch(e) {\n console.error('[sdk:index] The consult lockbox grant could not be decrypted: ', e)\n return [false, undefined] // if decryption fails, we want to ignore the grant but not fail the call\n }\n })\n .filter(grantsTuple => grantsTuple[0])\n .map(grantTuples => grantTuples[1] as Grant)\n}","import {\n Consult,\n ConsultRequest,\n DocumentType,\n MedicalStatus,\n MetadataCategory,\n PlaceData,\n SelectedAnswersData,\n Uuid,\n WorkflowData,\n} from 'oro-sdk-apis'\nimport { buildConsultSearchIndex, OroClient } from '..'\nimport { getOrCreatePatientConsultationUuid } from './consult'\n\nconst MAX_RETRIES = 15\n/**\n * Placeholder while the workflow interpreter for the refill flows is complete\n *\n * Creates a fake workflow in which the workflow data will reside\n *\n * @todo deprecate this function when using workflows and populating them from the app\n *\n * @param isTreatmentWorking the value from the `is treatment working` question\n * @param hasSideEffects the value from the `does the treatment have side effects` question\n * @param deliveryAddress the provided delivery address\n * @param pharmacy\n * @returns a workflow\n */\nexport function getRefillAnswersAsWorkflow(\n isTreatmentWorking: string,\n hasSideEffects: string,\n deliveryAddress?: string,\n pharmacy?: PlaceData\n): WorkflowData {\n let selectedAnswers: SelectedAnswersData = [\n {\n ['isTreatmentWorking']: isTreatmentWorking,\n ['hasSideEffects']: hasSideEffects,\n },\n ]\n\n // appends the delivery address to the first page of the answers if provided\n if (deliveryAddress) selectedAnswers[0] = { ...selectedAnswers[0], ['deliveryAddress']: deliveryAddress }\n\n // appends the pharmacy to the first page of the answers if provided\n if (pharmacy) selectedAnswers[0] = { ...selectedAnswers[0], ['pharmacy']: JSON.stringify(pharmacy) }\n\n return {\n id: '32573a20-6f1d-49be-9ad3-b87c58074979',\n createdAt: '2022-10-03T00:00:00.000Z',\n culDeSacs: [],\n hidePlanRules: [],\n startingPlanIds: [],\n pages: [\n {\n title: 'Prescription Refill',\n groups: [\n {\n type: 'field-group',\n fieldsAndGroups: [\n {\n type: 'field',\n id: 'isTreatmentWorking',\n },\n {\n type: 'field',\n id: 'hasSideEffects',\n },\n {\n type: 'field',\n id: 'youPharmacy',\n },\n {\n type: 'field',\n id: 'youAddress',\n },\n ],\n },\n ],\n questions: {\n isTreatmentWorking: {\n label: 'Is the treatment working for you?',\n kind: 'radio',\n inline: true,\n inlineLabel: false,\n metaCategory: MetadataCategory.Refill,\n answers: {\n '73bec6eb-0310-4787-af3c-ac9c291737b2': {\n text: 'Yes',\n },\n 'e193951f-986f-4db3-bede-903045a1804a': {\n text: 'No',\n },\n },\n },\n hasSideEffects: {\n label: 'Are there any side effects',\n kind: 'radio',\n inline: true,\n inlineLabel: false,\n metaCategory: MetadataCategory.Refill,\n answers: {\n '1b87ad22-d316-4fac-9c7f-8f4ccb841aed': {\n text: 'Yes',\n },\n 'ab7f5a41-c351-4f5d-a568-e38f9f200e9a': {\n text: 'No',\n },\n },\n },\n youPharmacy: {\n kind: 'online-pharmacy-picker',\n label: 'Which pharmacy do you want the prescription sent to?',\n metaCategory: MetadataCategory.Refill,\n summaryLabel: 'Your pharmacy',\n },\n youAddress: {\n kind: 'place-address',\n label: 'Address',\n metaCategory: MetadataCategory.Refill,\n },\n },\n },\n ],\n locale: 'en',\n selectedAnswers,\n }\n}\n\n/**\n * Complete refill flow, creates a consult, stores refill data and updates consultation status\n * @param consultRequest\n * @param populatedRefillWorkflow the refill workflow data\n * @param oroClient\n */\nexport async function createRefill(\n consultRequest: ConsultRequest,\n populatedRefillWorkflow: WorkflowData,\n oroClient: OroClient,\n indexSearch: boolean = true,\n onProgress?: (\n progress: number,\n descriptionKey: string,\n extraInfo?: { storedImagesNum?: number; totalImagesNum?: number }\n ) => void\n): Promise<Consult> {\n let retry = MAX_RETRIES\n let errorsThrown: Error[] = []\n let newConsult: Consult | undefined = undefined\n let lockboxUuid: Uuid | undefined\n const stepsTotalNum = 6\n let currentStep: number\n\n for (; retry > 0; retry--) {\n try {\n currentStep = 0\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'create_consult')\n // Creating refill consult\n newConsult = await getOrCreatePatientConsultationUuid(consultRequest, oroClient)\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'get_patient_grant')\n if (!lockboxUuid) lockboxUuid = (await oroClient.getGrants())[0].lockboxUuid\n\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'store_patient_data')\n await oroClient\n .getOrInsertJsonData(\n lockboxUuid!,\n populatedRefillWorkflow,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId: newConsult.uuid,\n },\n {},\n { withNotification: true, forceReplace: false, updateMedicalStatus: true }\n )\n .catch((err) => {\n console.error(\n '[SDK: prescription refill request] Some errors happened during refill data upload',\n err\n )\n errorsThrown.push(err)\n })\n\n if (indexSearch) {\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'fetching_parent_workflow_data')\n // raw workflow from parent consultation (contains first and last name of patient)\n let rawConsultationManifest = await oroClient.getLockboxManifest(\n lockboxUuid!,\n { category: MetadataCategory.Raw, consultationId: consultRequest.uuidParent },\n false\n )\n if (rawConsultationManifest && rawConsultationManifest.length > 0) {\n let rawConsultation = await oroClient.getJsonData<WorkflowData>(\n lockboxUuid!,\n rawConsultationManifest[0].dataUuid\n )\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'search_indexing')\n await buildConsultSearchIndex(newConsult, rawConsultation, oroClient).catch((err) => {\n console.error(\n '[SDK: prescription refill request] personal information not found or another error occured during search indexing',\n err\n )\n if (retry <= 1) return // this statement is to avoid failing the registration due to the failure in search indexing the consult, this practically implements a soft retry\n errorsThrown.push(err)\n })\n } else {\n console.error(\"[SDK: prescription refill request] parent consultation's raw data not found\")\n errorsThrown.push(Error('RawData Not Found'))\n }\n }\n\n if (errorsThrown.length > 0) throw errorsThrown\n\n if (newConsult.statusMedical === MedicalStatus.Assigning) {\n //hopefully svelte query received all updates\n console.warn('Consult Refill assignation took too much time, moving to new anyway')\n }\n\n // Deem the consultation as ready\n await oroClient.consultClient.updateConsultByUUID(newConsult.uuid, {\n statusMedical: MedicalStatus.New,\n })\n\n // if we got through the complete flow, the registration succeeded\n if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'success')\n\n await oroClient.cleanIndex()\n break\n } catch (err) {\n console.error(\n `[SDK] Error occured during prescription refill request: ${err}, retrying... Retries remaining: ${retry}`\n )\n errorsThrown = []\n continue\n }\n }\n if (retry <= 0) {\n console.error('[SDK] prescription refill request failed: MAX_RETRIES reached')\n throw 'RegistrationFailed'\n }\n\n if (!newConsult) {\n console.error('[SDK] prescription refill request failed: MAX_RETRIES reached')\n throw 'RegistrationFailed'\n }\n\n console.log('Successfully Created refill')\n return newConsult\n}\n","import { IndexKey, Grant, IndexConsultLockbox, MetadataCategory, VaultIndex } from 'oro-sdk-apis'\nimport { OroClient, Uuid } from '..'\n\n/**\n * @name filterGrantsWithLockboxMetadata\n * @description searches for the existance of a consult uuid in each granted lockbox\n * @param oroClient\n * @param filter: the consult uuid\n * @returns the grants containing the consult uuid\n */\nexport async function filterGrantsWithLockboxMetadata(\n oroClient: OroClient,\n filter: { consultationId: Uuid },\n): Promise<Grant[]> {\n let grants = await oroClient.getGrants()\n let filteredGrants = []\n for (let grant of grants) {\n // Fetches in each lockbox the existance of a given consult id\n let consultationIdExistsInMetadata = await oroClient.vaultClient.lockboxMetadataGet(grant.lockboxUuid!, ['consultationId'], [], {\n category: MetadataCategory.Consultation,\n consultationId: filter.consultationId\n })\n // If there are entries in the metadata, it means that the consult exists in the lockbox\n if (consultationIdExistsInMetadata[0].length >= 0)\n filteredGrants.push(grant)\n }\n\n return filteredGrants\n}\n","import {\n AllRoleType,\n AuthTokenRequest,\n Consult,\n ConsultRequest,\n ConsultService,\n DataCreateResponse,\n DiagnosisService,\n Document,\n DocumentType,\n EncryptedIndexEntry,\n EncryptedVaultIndex,\n Grant,\n GuardService,\n IdentityCreateRequest,\n IdentityResponse,\n IndexConsultLockbox,\n IndexKey,\n LocalizedData,\n LockboxDataRequest,\n LockboxGrantRequest,\n LockboxManifest,\n ManifestEntry,\n Meta,\n Metadata,\n MetadataCategory,\n OtherRoleType,\n PersonalMeta,\n PopulatedWorkflowData,\n Practice,\n PracticeService,\n PractitionnerRoleType,\n PreferenceMeta,\n RecoveryMeta,\n RoleBasedScopes,\n SearchService,\n SecretShard,\n SubscriptionAcceptanceRequest,\n TellerService,\n TokenData,\n TosAndCpAcceptanceRequest,\n Uuid,\n VaultIndex,\n VaultService,\n WorkflowData,\n WorkflowService,\n} from 'oro-sdk-apis'\nimport * as OroToolbox from 'oro-toolbox'\nimport { CryptoRSA } from 'oro-toolbox'\nimport {\n createRefill,\n decryptConsultLockboxGrants,\n decryptGrants,\n registerPatient,\n sessionStorePrivateKeyName,\n} from './helpers'\nimport {\n AssociatedLockboxNotFound,\n IncompleteAuthentication,\n LocalEncryptedData,\n MissingGrant,\n MissingGrantFilter,\n MissingLockbox,\n MissingLockboxOwner,\n RecoveryData,\n RegisterPatientOutput,\n UserPreference,\n} from './models'\nimport { filterGrantsWithLockboxMetadata } from './sdk-revision'\n\nexport class OroClient {\n private rsa?: CryptoRSA\n private secrets: {\n lockboxUuid: string\n cryptor: OroToolbox.CryptoChaCha\n }[] = []\n private cachedMetadataGrants: {\n [filter: string]: Grant[]\n } = {}\n\n private cachedManifest: {\n [filter: string]: ManifestEntry[]\n } = {}\n\n private vaultIndex?: VaultIndex\n\n constructor(\n private toolbox: typeof OroToolbox,\n public tellerClient: TellerService,\n public vaultClient: VaultService,\n public guardClient: GuardService,\n public searchClient: SearchService,\n public practiceClient: PracticeService,\n public consultClient: ConsultService,\n public workflowClient: WorkflowService,\n public diagnosisClient: DiagnosisService,\n private authenticationCallback?: (err: Error) => void\n ) { }\n\n /**\n * clears the vaultIndex and cached metadata grants\n */\n public async cleanIndex() {\n this.cachedMetadataGrants = {}\n this.cachedManifest = {}\n }\n\n /**\n * Generates an RSA key pair and password payload (rsa private key encrypted with the password)\n * Calls Guard to sign up with the email address, password, practice, legal and token data\n *\n * @param email\n * @param password\n * @param practice\n * @param legal\n * @param tokenData\n * @returns\n */\n public async signUp(\n email: string,\n password: string,\n practice: Practice,\n tosAndCpAcceptance: TosAndCpAcceptanceRequest,\n tokenData?: TokenData,\n subscription?: boolean,\n skipEmailValidation?: boolean\n ): Promise<IdentityResponse> {\n this.rsa = new CryptoRSA()\n const privateKey = this.rsa.private()\n\n const symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(password)\n const recoveryPassword = symmetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n\n const hashedPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(password))\n\n email = email.toLowerCase()\n const emailConfirmed = !!skipEmailValidation\n const subscriptionAcceptance = subscription ? ({ email } as SubscriptionAcceptanceRequest) : undefined\n\n const signupRequest: IdentityCreateRequest = {\n practiceUuid: practice.uuid,\n email,\n emailConfirmed,\n password: hashedPassword,\n publicKey: this.toolbox.encodeToBase64(this.rsa.public()),\n recoveryPassword,\n tosAndCpAcceptance,\n tokenData,\n subscriptionAcceptance,\n }\n\n const identity = await this.guardClient.identityCreate(signupRequest)\n\n if (identity.recoveryLogin) {\n //Ensure we can recover from a page reload\n let symetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(identity.recoveryLogin)\n sessionStorage.setItem(\n sessionStorePrivateKeyName(identity.id),\n symetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n )\n }\n\n return identity\n }\n\n /**\n * Parse the given accessToken claims by calling guard whoami and update theidentity to set it's emailConfirmed flag\n * @param accessToken\n * @returns The identity related to confirmedEmail\n */\n public async confirmEmail(accessToken: string): Promise<IdentityResponse> {\n this.guardClient.setTokens({ accessToken })\n const claims = await this.guardClient.whoAmI()\n return this.guardClient.identityUpdate(claims.sub, {\n emailConfirmed: true,\n })\n }\n\n /**\n * Calls Guard to sign in with the email address, password and one time password (if MFA is enabled)\n * Then recover's the rsa private key from the recovery payload\n *\n * @param practiceUuid\n * @param email\n * @param password\n * @param otp\n * @returns the user identity\n */\n public async signIn(practiceUuid: Uuid, email: string, password: string, otp?: string): Promise<IdentityResponse> {\n const hashedPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(password))\n const tokenRequest: AuthTokenRequest = {\n practiceUuid,\n email: email.toLowerCase(),\n password: hashedPassword,\n otp,\n }\n\n await this.guardClient.authToken(tokenRequest)\n const userUuid = (await this.guardClient.whoAmI()).sub\n\n // Updates the rsa key to the one generated on the backend\n await this.recoverPrivateKeyFromPassword(userUuid, password)\n return await this.guardClient.identityGet(userUuid)\n }\n\n /**\n * Will attempt to recover an existing login session and set back\n * the private key in scope\n */\n public async resumeSession() {\n const id = (await this.guardClient.whoAmI()).sub\n const recoveryPayload = sessionStorage.getItem(sessionStorePrivateKeyName(id))\n const recoveryKey = (await this.guardClient.identityGet(id)).recoveryLogin\n\n if (!recoveryKey || !recoveryPayload) throw IncompleteAuthentication\n\n const symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(recoveryKey)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * This function let's you encrypt locally an Object\n * @param value the Object to encrypt\n * @returns a LocalEncryptedData Object\n * @throws IncompleteAuthentication if rsa is not set\n * @calls authenticationCallback if rsa is not set\n */\n public localEncryptToJsonPayload(value: any): LocalEncryptedData {\n if (!this.rsa) {\n if (this.authenticationCallback) {\n this.authenticationCallback(new IncompleteAuthentication())\n }\n\n throw new IncompleteAuthentication()\n }\n\n const chaChaKey = new this.toolbox.CryptoChaCha()\n\n const encryptedData = chaChaKey.jsonEncryptToBase64Payload(value)\n const encryptedKey = this.toolbox.encodeToBase64(this.rsa.encryptToBytes(chaChaKey.key()))\n\n return { encryptedData, encryptedKey }\n }\n\n /**\n * This function let's you decrypt a LocalEncryptedData object\n * @param value a LocalEncryptedData object\n * @returns a decrypted Object\n * @throws IncompleteAuthentication if rsa is not set\n * @calls authenticationCallback if rsa is not set\n */\n public localDecryptJsonPayload({ encryptedKey, encryptedData }: LocalEncryptedData): any {\n if (!this.rsa) {\n if (this.authenticationCallback) {\n this.authenticationCallback(new IncompleteAuthentication())\n }\n\n throw new IncompleteAuthentication()\n }\n\n const chaChaKey = this.rsa.base64DecryptToBytes(encryptedKey)\n const decryptedData = this.toolbox.CryptoChaCha.fromKey(chaChaKey).base64PayloadDecryptToJson(encryptedData)\n\n return decryptedData\n }\n\n /**\n * Effectively kills your \"session\"\n */\n public async signOut() {\n this.rsa = undefined\n this.secrets = []\n this.guardClient.setTokens({\n accessToken: undefined,\n refreshToken: undefined,\n })\n await this.guardClient.authLogout()\n }\n\n /**\n * @name registerPatient\n * @description The complete flow to register a patient\n *\n * Steps:\n * 1. Create a consult (checks if payment has been done)\n * 2. Creates a lockbox\n * 3. Grants lockbox access to all practice personnel\n * 4. Creates secure identification, medical, onboarding data\n * 5. Generates and stores the rsa key pair and recovery payloads\n *\n * @param patientUuid\n * @param consult\n * @param workflow\n * @param recoveryQA\n * @param indexSearch create search index for the consultation if true\n * @param onProgress callback that is called whenever a new step of patient registration is executed. Note: progress ranges from 0 to 1, and descriptionKey is a description of the progress as a key so the app would use it to translate the description\n * @returns\n */\n public async registerPatient(\n patientUuid: Uuid,\n consult: ConsultRequest,\n workflow: WorkflowData,\n recoveryQA?: {\n recoverySecurityQuestions: string[]\n recoverySecurityAnswers: string[]\n },\n indexSearch: boolean = true,\n onProgress?: (progress: number, descriptionKey: string) => void\n ): Promise<RegisterPatientOutput> {\n if (!this.rsa) throw IncompleteAuthentication\n return registerPatient(\n patientUuid,\n consult,\n workflow,\n this,\n this.toolbox.uuid(),\n recoveryQA,\n indexSearch,\n onProgress\n )\n }\n\n /**\n * Creates and stores all relevant refill data\n * - New consultation is created\n * - Stores refill workflow data in the lockbox\n * - Updates the consult to new\n *\n * @param consult\n * @param populatedRefillWorkflow\n * @returns\n */\n public async createRefill(\n consult: ConsultRequest,\n populatedRefillWorkflow: WorkflowData,\n indexSearch: boolean = true,\n onProgress?: (progress: number, descriptionKey: string) => void\n ): Promise<Consult> {\n if (!this.rsa) throw IncompleteAuthentication\n return createRefill(consult, populatedRefillWorkflow, this, indexSearch, onProgress)\n }\n\n /**\n * Fetches all grants, and consultations that exist in each lockbox\n * Then updates the index for the current user with the lockbox consult relationship\n */\n public async forceUpdateIndexEntries() {\n let grants = await this.getGrants()\n\n let indexConsultLockbox: IndexConsultLockbox[] = await Promise.all(\n grants.map(\n async (grant: Grant) =>\n await this.vaultClient\n .lockboxMetadataGet(\n grant.lockboxUuid!,\n ['consultationId'],\n [],\n { category: MetadataCategory.Consultation },\n grant.lockboxOwnerUuid\n )\n .then((consults) => {\n try {\n return consults[0].map((consult: any) => {\n return {\n ...consult,\n grant: {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid,\n },\n }\n })\n } catch (e) {\n // No consultations in lockbox or index could not be created\n return []\n }\n })\n .catch(() => [])\n )\n ).then((consults) => consults.flat())\n this.vaultIndexAdd({\n [IndexKey.Consultation]: indexConsultLockbox,\n })\n .then(() => alert('The Index was successfully updated!'))\n .catch(() => console.error('The index failed to update!'))\n }\n\n /**\n * Generates, encrypts and adds entries to vault index for a given index owner\n *\n * @param entries\n * @param indexOwnerUuid\n */\n public async vaultIndexAdd(entries: VaultIndex, indexOwnerUuid?: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let rsaPub: Uint8Array\n if (indexOwnerUuid) {\n let base64IndexOwnerPubKey = (await this.guardClient.identityGet(indexOwnerUuid)).publicKey\n rsaPub = this.toolbox.decodeFromBase64(base64IndexOwnerPubKey)\n } else {\n rsaPub = this.rsa.public()\n }\n\n let encryptedIndex: EncryptedVaultIndex = {}\n\n for (let keyString of Object.keys(entries)) {\n let key = keyString as keyof VaultIndex\n switch (key) {\n case IndexKey.ConsultationLockbox:\n encryptedIndex[key] = (entries[key] as IndexConsultLockbox[])\n .map((e) => ({\n ...e,\n uniqueHash: e.consultationId,\n }))\n .map(\n (e: IndexConsultLockbox) =>\n ({\n uuid: e.uuid,\n timestamp: e.timestamp,\n uniqueHash: e.uniqueHash,\n encryptedIndexEntry: CryptoRSA.jsonWithPubEncryptToBase64(\n {\n consultationId: e.consultationId,\n grant: e.grant,\n },\n rsaPub\n ),\n } as EncryptedIndexEntry)\n )\n break\n }\n }\n await this.vaultClient.vaultIndexPut(encryptedIndex, indexOwnerUuid)\n }\n\n /**\n * @name grantLockbox\n * @description Grants a lockbox by retrieving the shared secret of the lockbox and encrypting it with the grantees public key\n * @param granteeUuid\n * @param lockboxUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n */\n public async grantLockbox(granteeUuid: Uuid, lockboxUuid: Uuid, lockboxOwnerUuid?: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let secret = (await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)).key()\n let base64GranteePublicKey = (await this.guardClient.identityGet(granteeUuid)).publicKey\n let granteePublicKey = this.toolbox.decodeFromBase64(base64GranteePublicKey)\n\n let granteeEncryptedSecret = CryptoRSA.bytesWithPubEncryptToBase64(secret, granteePublicKey)\n let request: LockboxGrantRequest = {\n encryptedSecret: granteeEncryptedSecret,\n granteeUuid: granteeUuid,\n }\n await this.vaultClient.lockboxGrant(lockboxUuid, request, lockboxOwnerUuid)\n }\n\n /**\n * @name createMessageData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a message string\n * @param lockboxUuid\n * @param message\n * @param consultationId the consultation for which this message is sent\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createMessageData(\n lockboxUuid: Uuid,\n message: string,\n consultationId: string,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { updateMedicalStatus: boolean } = { updateMedicalStatus: true }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n\n let encryptedData = symmetricEncryptor.jsonEncryptToBase64Payload(message)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload({\n author: (await this.guardClient.whoAmI()).sub,\n })\n\n let meta = {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Message,\n contentType: 'text/plain',\n }\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid, options)\n }\n\n /**\n * @name createMessageAttachmentData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a file\n * @param lockboxUuid\n * @param data the file stored\n * @param consultationId the consultation for which this message is sent\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createMessageAttachmentData(\n lockboxUuid: Uuid,\n data: File,\n consultationId: string,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { updateMedicalStatus: boolean } = { updateMedicalStatus: true }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.bytesEncryptToBase64Payload(new Uint8Array(await data.arrayBuffer()))\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload({\n author: (await this.guardClient.whoAmI()).sub,\n fileName: data.name,\n lastModified: data.lastModified,\n size: data.size,\n })\n\n let meta = {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Message,\n contentType: data.type,\n }\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid, options)\n }\n\n /**\n * @name createAttachmentData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a file\n * @param lockboxUuid\n * @param data the file stored\n * @param consultationId the consultation for which this message is sent\n * @param category the category for the attachment data\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @param withNotification if the insertion of data requires notification\n * @returns the data uuid\n */\n public async createConsultationAttachmentData(\n lockboxUuid: Uuid,\n data: File,\n consultationId: string,\n documentType: DocumentType,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { withNotification: boolean; updateMedicalStatus: boolean } = {\n withNotification: false,\n updateMedicalStatus: false,\n }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n return this.createBytesData<Meta | any>(\n lockboxUuid,\n new Uint8Array(await data.arrayBuffer()),\n {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType,\n contentType: data.type,\n },\n {\n author: (await this.guardClient.whoAmI()).sub,\n fileName: data.name,\n },\n lockboxOwnerUuid,\n previousDataUuid,\n options\n )\n }\n\n /**\n * @name createJsonData\n * @description Creates a Base64 encrypted Payload to send and store in the vault. With the data input as a JSON\n * @param lockboxUuid\n * @param data\n * @param meta\n * @param privateMeta the metadata that will be secured in the vault\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing data, specify the previous data uuid\n * @param options if the insertion of data requires email notification\n * @returns the data uuid\n */\n public async createJsonData<T extends Metadata>(\n lockboxUuid: Uuid,\n data: any,\n meta?: T,\n privateMeta?: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { withNotification: boolean; updateMedicalStatus: boolean } = {\n withNotification: false,\n updateMedicalStatus: false,\n }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.jsonEncryptToBase64Payload(data)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload(privateMeta)\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n if (options.withNotification)\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid, options)\n else return this.vaultClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * Get or upsert a data in lockbox\n * @param lockboxUuid the lockbox uuid\n * @param data the data to insert\n * @param publicMetadata the public Metadata\n * @param privateMetadata the private Metadata\n * @param forceReplace set true when the insertion of data requires to replace the data when it exists already\n * @param options if the insertion of data requires email notification\n * @returns the data uuid\n */\n public async getOrInsertJsonData<M extends Metadata>(\n lockboxUuid: Uuid,\n data: any,\n publicMetadata: M,\n privateMetadata: Metadata,\n options: { withNotification: boolean; forceReplace: boolean; updateMedicalStatus: boolean } = {\n withNotification: false,\n forceReplace: false,\n updateMedicalStatus: false,\n }\n ): Promise<Uuid> {\n let manifest = await this.vaultClient.lockboxManifestGet(lockboxUuid, publicMetadata)\n if (!options.forceReplace && manifest.length > 0) {\n console.log(`The data for ${JSON.stringify(publicMetadata)} already exist`)\n return manifest[0].dataUuid\n } else\n return (\n await this.createJsonData<M>(\n lockboxUuid,\n data,\n publicMetadata,\n privateMetadata,\n undefined,\n // if forceReplace and data already exist, then replace data. Otherwise insert it\n options.forceReplace && manifest.length > 0 ? manifest[0].dataUuid : undefined,\n options\n ).catch((err) => {\n console.error(`Error while upserting data ${JSON.stringify(publicMetadata)} data`, err)\n throw err\n })\n ).dataUuid\n }\n\n /**\n * @name createBytesData\n * @description Creates a Base64 encrypted Payload to send and store in the vault. With the data input as a Bytes\n * @param lockboxUuid\n * @param data\n * @param meta\n * @param privateMeta the metadata that will be secured in the vault\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing data, specify the previous data uuid\n * @param withNotification if the insertion of data requires notification\n * @returns the data uuid\n */\n public async createBytesData<T extends Metadata>(\n lockboxUuid: Uuid,\n data: Uint8Array,\n meta: T,\n privateMeta: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: { withNotification: boolean; updateMedicalStatus: boolean } = {\n withNotification: false,\n updateMedicalStatus: false,\n }\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.bytesEncryptToBase64Payload(data)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload(privateMeta)\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n if (options.withNotification)\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid, options)\n else return this.vaultClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * @name getJsonData\n * @description Fetches and decrypts the lockbox data with the cached shared secret.\n * Decrypts the data to a valid JSON object. If this is impossible, the call to the WASM binary will fail\n *\n * @type T is the generic type specifying the return type object of the function\n * @param lockboxUuid\n * @param dataUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns the data specified by the generic type <T>\n */\n public async getJsonData<T = any>(lockboxUuid: Uuid, dataUuid: Uuid, lockboxOwnerUuid?: Uuid): Promise<T> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let [encryptedPayload, symmetricDecryptor] = await Promise.all([\n this.vaultClient.lockboxDataGet(lockboxUuid, dataUuid, lockboxOwnerUuid),\n this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid),\n ])\n\n return symmetricDecryptor.base64PayloadDecryptToJson(encryptedPayload.data)\n }\n /**\n * @description Fetches and decrypts the lockbox data with the cached shared secret.\n * @param lockboxUuid\n * @param dataUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns the bytes data\n */\n public async getBytesData(lockboxUuid: Uuid, dataUuid: Uuid, lockboxOwnerUuid?: Uuid): Promise<Uint8Array> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let [encryptedPayload, symmetricDecryptor] = await Promise.all([\n this.vaultClient.lockboxDataGet(lockboxUuid, dataUuid, lockboxOwnerUuid),\n this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid),\n ])\n\n return symmetricDecryptor.base64PayloadDecryptToBytes(encryptedPayload.data)\n }\n\n /**\n * @name getGrants\n * @description Get all lockboxes granted to user with the applied filter\n * @note this function returns cached grants and will not update unless the page is refreshed\n * @todo some versions of lockboxes do not make use of lockbox metadata\n * in this case, all lockboxes need to be filtered one-by-one to find the correct one\n * Remove if this is no longer the case\n * @param filter: the consultationId in which the grant exists\n * @returns decrypted lockboxes granted to user\n */\n public async getGrants(filter?: { consultationId: Uuid }): Promise<Grant[]> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let filterString = JSON.stringify(filter)\n // retrieves cached grants\n if (this.cachedMetadataGrants[filterString]) return this.cachedMetadataGrants[filterString]\n\n // We're using the account role to determine the way a grant is accessed\n let currentAccountRole = await this.getAccountRole()\n if (currentAccountRole.length === 1 && currentAccountRole[0] === OtherRoleType.User) return []\n\n if (\n [OtherRoleType.Patient, OtherRoleType.User].every((requiredRole) =>\n currentAccountRole.includes(requiredRole)\n )\n ) {\n let encryptedGrants\n // if there are no grants with the applied filter from index, attempt for naive filter with backwards compatibility\n if (filter) {\n encryptedGrants = await filterGrantsWithLockboxMetadata(this, filter)\n } else {\n encryptedGrants = (await this.vaultClient.grantsGet()).grants\n }\n const decryptedGrants = await decryptGrants(encryptedGrants, this.rsa)\n // sets the cached grant\n this.cachedMetadataGrants[filterString] = decryptedGrants\n console.info('[sdk:grant] Found grant for patient')\n return decryptedGrants\n }\n // if not a patient, then a practitioner is trying to retrieve a grant, it **Must** contain a filter, otherwise too many grants are possible\n if (!filter) throw MissingGrantFilter\n // Note: will work only if the filter being applied is exclusively a consult id\n const grantsByConsultLockbox = await this.vaultClient\n .vaultIndexGet([IndexKey.ConsultationLockbox], [filter.consultationId])\n .then((res) => res[IndexKey.ConsultationLockbox])\n .catch((e) => {\n console.error(e)\n return []\n })\n\n const decryptedConsults = decryptConsultLockboxGrants(grantsByConsultLockbox ?? [], this.rsa)\n if (decryptedConsults.length > 0) {\n console.info('[sdk:index] Grants found in user`s constant time secure index')\n this.cachedMetadataGrants[filterString] = decryptedConsults\n return this.cachedMetadataGrants[filterString]\n }\n\n // if we have no valid grants, then return nothing\n return []\n }\n\n /**\n * Fetches the role of the account that is logged in\n *\n * @returns the role based scopes defined by the whoami\n */\n async getAccountRole(): Promise<RoleBasedScopes[]> {\n return (await this.guardClient.whoAmI()).scope.split(' ') as RoleBasedScopes[]\n }\n\n /**\n * @name getCachedSecretCryptor\n * @description Retrieves the cached lockbox secret or fetches the secret from vault, then creates the symmetric cryptor and stores it in memory\n * @param lockboxUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns\n */\n async getCachedSecretCryptor(lockboxUuid: string, lockboxOwnerUuid?: string): Promise<OroToolbox.CryptoChaCha> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let index = this.secrets.findIndex((secret) => secret.lockboxUuid === lockboxUuid)\n if (index === -1) {\n let encryptedSecret = (await this.vaultClient.lockboxSecretGet(lockboxUuid, lockboxOwnerUuid)).sharedSecret\n\n let secret = this.rsa.base64DecryptToBytes(encryptedSecret)\n let cryptor = this.toolbox.CryptoChaCha.fromKey(secret)\n this.secrets.push({ lockboxUuid, cryptor })\n return cryptor\n } else {\n return this.secrets[index].cryptor\n }\n }\n\n /**\n * Retrieves the patient personal information associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several personal informations data\n * @param consultationId The consultation Id\n * @param category The personal MetadataCategory to fetch\n * @param forceRefresh force data refresh (default to false)\n * @returns the personal data\n */\n public async getPersonalInformationsFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory.Personal | MetadataCategory.ChildPersonal | MetadataCategory.OtherPersonal,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, category, options)\n }\n\n /**\n * Retrieves the patient medical data associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several medical data\n * @param consultationId The consultation Id\n * @param forceRefresh force data refresh (default to false)\n * @returns the medical data\n */\n public async getMedicalDataFromConsultId(\n consultationId: Uuid,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, MetadataCategory.Medical, options)\n }\n\n /**\n * Retrieves the patient follow up data associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several follow up data\n * @param consultationId The consultation Id\n * @param forceRefresh force data refresh (default to false)\n * @returns the medical data\n */\n public async getFollowupDataFromConsultId(\n consultationId: Uuid,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, MetadataCategory.Followup, options)\n }\n\n private async getMetaCategoryFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n let grants = await this.getGrants({ consultationId })\n let workflowData: LocalizedData<PopulatedWorkflowData>[] = []\n for (let grant of grants) {\n let manifest = await this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId],\n },\n true,\n grant.lockboxOwnerUuid,\n options\n )\n\n // TODO: find another solution for backwards compatibility (those without the metadata consultationIds)\n if (manifest.length === 0) {\n manifest = (\n await this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n // backward compatiblility with TonTest\n },\n true,\n grant.lockboxOwnerUuid,\n options\n )\n ).filter((entry) => !entry.metadata.consultationIds) // Keep only entries without associated consultationIds\n }\n let data = await Promise.all(\n manifest.map(async (entry) => {\n return {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid!,\n dataUuid: entry.dataUuid,\n data: await this.getJsonData<PopulatedWorkflowData>(grant.lockboxUuid!, entry.dataUuid),\n }\n })\n )\n workflowData = { ...workflowData, ...data }\n }\n return workflowData\n }\n\n /**\n * @description retrieves the personal information stored in the first owned lockbox\n * @param userId The user Id\n * @returns the personal data\n */\n public async getPersonalInformations(userId: Uuid): Promise<LocalizedData<PopulatedWorkflowData>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === userId)\n\n if (!grant) {\n throw MissingGrant\n }\n\n const { lockboxUuid, lockboxOwnerUuid } = grant\n\n if (!lockboxUuid) throw MissingLockbox\n\n if (!lockboxOwnerUuid) throw MissingLockboxOwner\n\n const identificationDataUuid = (\n await this.getLockboxManifest(\n lockboxUuid,\n {\n category: MetadataCategory.Personal,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n false,\n userId\n )\n )[0].dataUuid\n\n return {\n lockboxOwnerUuid,\n lockboxUuid,\n dataUuid: identificationDataUuid,\n data: await this.getJsonData<PopulatedWorkflowData>(lockboxUuid, identificationDataUuid),\n }\n }\n\n /**\n * Retrieves the grant associated to a consultationId\n * @note returns the first grant only\n * @param consultationId The consultationId\n * @returns the grant\n */\n public async getGrantFromConsultId(consultationId: Uuid): Promise<Grant | undefined> {\n let grants = await this.getGrants({ consultationId })\n\n if (grants.length === 0) {\n throw AssociatedLockboxNotFound\n }\n\n return grants[0]\n }\n\n /**\n * retrieves the identity associated to the `consultationId`\n * @param consultationId The consultation Id\n * @returns the identity\n */\n public async getIdentityFromConsultId(consultationId: Uuid): Promise<IdentityResponse | undefined> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (grant && grant.lockboxOwnerUuid) {\n return await this.guardClient.identityGet(grant.lockboxOwnerUuid)\n } else {\n return undefined\n }\n }\n\n /**\n * retrieves the lockbox manifest for a given lockbox and add's its private metadata\n * @note the lockbox manifest will retrieved the cached manifest first unless force refresh is enabled\n * @param lockboxUuid\n * @param filter\n * @param expandPrivateMetadata\n * @param lockboxOwnerUuid\n * @param forceRefresh\n * @returns the lockbox manifest\n */\n public async getLockboxManifest(\n lockboxUuid: Uuid,\n filter: Metadata,\n expandPrivateMetadata: boolean,\n lockboxOwnerUuid?: Uuid,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<LockboxManifest> {\n let manifestKey = JSON.stringify({\n lockboxUuid,\n filter,\n expandPrivateMetadata,\n lockboxOwnerUuid,\n })\n if (!options.forceRefresh && this.cachedManifest[manifestKey]) return this.cachedManifest[manifestKey]\n\n return this.vaultClient.lockboxManifestGet(lockboxUuid, filter, lockboxOwnerUuid).then((manifest) => {\n return Promise.all(\n manifest.map(async (entry) => {\n if (expandPrivateMetadata && entry.metadata.privateMetadata) {\n let privateMeta = await this.getJsonData<Metadata>(\n lockboxUuid!,\n entry.metadata.privateMetadata,\n lockboxOwnerUuid\n )\n entry.metadata = {\n ...entry.metadata,\n ...privateMeta,\n }\n }\n return entry\n })\n ).then((manifest) => (this.cachedManifest[manifestKey] = manifest))\n })\n }\n\n /**\n * @description Create or update the personal information and store it in the first owned lockbox\n * @param identity The identity to use\n * @param data The personal data to store\n * @param dataUuid (optional) The dataUuid to update\n * @returns\n */\n public async createPersonalInformations(\n identity: IdentityResponse,\n data: PopulatedWorkflowData,\n dataUuid?: string\n ): Promise<DataCreateResponse> {\n const lockboxUuid = (await this.getGrants()).find(\n (lockbox) => lockbox.lockboxOwnerUuid === identity.id\n )?.lockboxUuid\n\n if (lockboxUuid) {\n return this.createJsonData<PersonalMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Personal,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n {},\n undefined,\n dataUuid\n )\n } else {\n throw MissingLockbox\n }\n }\n\n /**\n * Create or update user Preference\n * @param identity\n * @param preference\n * @param dataUuid\n * @returns\n */\n public async createUserPreference(\n identity: IdentityResponse,\n preference: UserPreference,\n dataUuid?: string\n ): Promise<DataCreateResponse> {\n const lockboxUuid = (await this.getGrants()).find(\n (lockbox) => lockbox.lockboxOwnerUuid === identity.id\n )?.lockboxUuid\n\n if (lockboxUuid) {\n return this.createJsonData<PreferenceMeta>(\n lockboxUuid,\n preference,\n {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n },\n {},\n undefined,\n dataUuid\n )\n } else {\n throw MissingLockbox\n }\n }\n\n /**\n * retrieves the user preference from a grant\n * @param grant The grant\n * @returns the user preference\n */\n public async getDataFromGrant<T = any>(grant: Grant, filter: Metadata): Promise<LocalizedData<T>> {\n const { lockboxUuid, lockboxOwnerUuid } = grant\n\n if (!lockboxUuid) throw MissingLockbox\n if (!lockboxOwnerUuid) throw MissingLockboxOwner\n const identificationDataUuid = (\n await this.getLockboxManifest(lockboxUuid, filter, false, grant.lockboxOwnerUuid, { forceRefresh: true })\n )[0].dataUuid\n\n return {\n lockboxOwnerUuid,\n lockboxUuid,\n dataUuid: identificationDataUuid,\n data: await this.getJsonData<T>(lockboxUuid, identificationDataUuid),\n }\n }\n\n /**\n * retrieves the user preference from a consultation id\n * @param consultationId The related consultationId\n * @returns the user preference\n */\n public async getUserPreferenceFromConsultId(consultationId: string): Promise<LocalizedData<UserPreference>> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<UserPreference>(grant, {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference stored in the first owned lockbox from identity\n * @param identity The identity to use\n * @returns the user preference\n */\n public async getUserPreference(identity: IdentityResponse): Promise<LocalizedData<UserPreference>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === identity.id)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<UserPreference>(grant, {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference from a consultation id\n * @param consultationId The related consultationId\n * @returns the user preference\n */\n public async getRecoveryDataFromConsultId(consultationId: string): Promise<LocalizedData<RecoveryData>> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<RecoveryData>(grant, {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference stored in the first owned lockbox from identity\n * @param identity The identity to use\n * @returns the user preference\n */\n public async getRecoveryData(identity: IdentityResponse): Promise<LocalizedData<RecoveryData>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === identity.id)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant(grant, {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n })\n }\n\n /**\n * @name getAssignedConsultations\n * @description finds all assigned or owned consultations for the logged user\n * Steps:\n * - Retrieves all granted lockboxes given to the logged user\n * - for each lockbox, find all consultation ids\n * - for each consultation id, retrieve the consult information\n * @param practiceUuid the uuid of the practice to look consult into\n * @returns the list of consults\n */\n public async getAssignedConsultations(practiceUuid: Uuid): Promise<Consult[]> {\n return Promise.all(\n (await this.getGrants()).map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n true,\n undefined\n ).then((manifest) =>\n Promise.all(\n manifest.map(\n async (entry) =>\n await this.consultClient.getConsultByUUID(entry.metadata.consultationId, practiceUuid)\n )\n ).then((promise) => promise.flat())\n )\n )\n ).then((consults) => consults.flat())\n }\n\n /**\n * Gets the past consultations of the patient as well as his relatives if any\n * @param consultationId any consultation uuid from which we will fetch all the other consultations of the same patient as the owner of this consultation id\n * @param practiceUuid\n */\n public async getPastConsultationsFromConsultId(\n consultationId: string,\n practiceUuid: string\n ): Promise<Consult[] | undefined> {\n const grant = await this.getGrantFromConsultId(consultationId)\n if (!grant) return undefined\n\n let consultationsInLockbox: string[] = (\n await this.vaultClient.lockboxMetadataGet(\n grant.lockboxUuid!,\n ['consultationId'],\n ['consultationId'],\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n grant.lockboxOwnerUuid\n )\n )\n .flat()\n .map((metadata: { consultationId: string }) => metadata.consultationId)\n\n if (consultationsInLockbox.length == 0) return []\n\n return await Promise.all(\n consultationsInLockbox.map(async (consultId: string) => {\n return await this.consultClient.getConsultByUUID(consultId, practiceUuid)\n })\n )\n }\n\n /**\n * @name getPatientConsultationData\n * @description retrieves the consultation data\n * @param consultationId\n * @returns\n */\n public async getPatientConsultationData(\n consultationId: Uuid,\n options: { forceRefresh: boolean } = { forceRefresh: false }\n ): Promise<PopulatedWorkflowData[]> {\n //TODO: make use of getPatientDocumentsList instead of doing it manually here\n return Promise.all(\n (await this.getGrants({ consultationId }))\n .map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId, //since we want to update the cached manifest (if another consult data exists)\n },\n true,\n grant.lockboxOwnerUuid,\n options\n ).then((manifest) =>\n Promise.all(\n manifest.map((e) =>\n this.getJsonData<PopulatedWorkflowData>(\n grant.lockboxUuid!,\n e.dataUuid,\n grant.lockboxOwnerUuid\n )\n )\n )\n )\n )\n .flat()\n ).then((data) => data.flat())\n }\n\n /**\n * This function returns the patient prescriptions\n * @param consultationId\n * @returns\n */\n public async getPatientPrescriptionsList(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Prescription,\n },\n true,\n consultationId\n )\n }\n\n /**\n * This function returns the patient results\n * @param consultationId\n * @returns\n */\n public async getPatientResultsList(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Result,\n },\n true,\n consultationId\n )\n }\n\n /**\n * returns the patient treatment plan options\n * @param consultationId\n * @returns Document[] corresponding to the patient treatment plan options\n */\n public async getPatientTreatmentPlans(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.TreatmentPlan,\n },\n true,\n consultationId\n )\n }\n\n /**\n * returns a specific patient treatment plan option\n * @param consultationId\n * @param treatmentPlanId\n * @returns\n */\n public async getPatientTreatmentPlanByUuid(consultationId: Uuid, treatmentPlanId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.TreatmentPlan,\n treatmentPlanId,\n },\n true,\n consultationId\n )\n }\n\n /**\n * @name getPatientDocumentsList\n * @description applies the provided filter to the vault to only find those documents\n * @param filters the applied filters (e.g. type of documents)\n * @param expandPrivateMetadata whether or not, the private metadata needs to be retrieved\n * (more computationally expensive)\n * @param consultationId\n * @returns the filtered document list\n */\n public async getPatientDocumentsList(\n filters: Object,\n expandPrivateMetadata: boolean,\n consultationId: Uuid\n ): Promise<Document[]> {\n return Promise.all(\n (await this.getGrants({ consultationId }))\n .map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n { ...filters, consultationId },\n expandPrivateMetadata,\n grant.lockboxOwnerUuid,\n { forceRefresh: true }\n ).then((manifest) =>\n Promise.all(\n manifest.map(async (entry): Promise<Document> => {\n return {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid!,\n ...entry,\n }\n })\n )\n )\n )\n .flat()\n ).then((data) => data.flat())\n }\n\n /****************************************************************************************************************\n * RECOVERY *\n ****************************************************************************************************************/\n\n /**\n * @name recoverPrivateKeyFromSecurityQuestions\n * @description Recovers and sets the rsa private key from the answered security questions\n * @param id\n * @param recoverySecurityQuestions\n * @param recoverySecurityAnswers\n * @param threshold the number of answers needed to recover the key\n */\n public async recoverPrivateKeyFromSecurityQuestions(\n id: Uuid,\n recoverySecurityQuestions: string[],\n recoverySecurityAnswers: string[],\n threshold: number\n ) {\n let shards: SecretShard[] = (await this.guardClient.identityGet(id)).recoverySecurityQuestions!\n let answeredShards = shards\n .filter((shard: any) => {\n // filters all answered security questions\n let indexOfQuestion = recoverySecurityQuestions.indexOf(shard.securityQuestion)\n if (indexOfQuestion === -1) return false\n return recoverySecurityAnswers[indexOfQuestion] && recoverySecurityAnswers[indexOfQuestion] != ''\n })\n .map((item: any) => {\n // appends the security answer to the answered shards\n let index = recoverySecurityQuestions.indexOf(item.securityQuestion)\n item.securityAnswer = recoverySecurityAnswers[index]\n return item\n })\n try {\n // reconstructs the key from the answered security answers\n let privateKey = this.toolbox.reconstructSecret(answeredShards, threshold)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n } catch (e) {\n console.error(e)\n }\n }\n\n /**\n * @name recoverPrivateKeyFromPassword\n * @description Recovers and sets the rsa private key from the password\n * @param id\n * @param password\n */\n public async recoverPrivateKeyFromPassword(id: Uuid, password: string) {\n let identity = await this.guardClient.identityGet(id)\n\n let recoveryPayload = identity.recoveryPassword\n let symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(password)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n\n if (identity.recoveryLogin) {\n //Ensure we can recover from a page reload\n let symetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(identity.recoveryLogin)\n sessionStorage.setItem(\n sessionStorePrivateKeyName(id),\n symetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n )\n }\n\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * @name recoverPrivateKeyFromMasterKey\n * @description Recovers and sets the rsa private key from the master key\n * @param id\n * @param masterKey\n */\n public async recoverPrivateKeyFromMasterKey(id: Uuid, masterKey: string) {\n let recoveryPayload = (await this.guardClient.identityGet(id)).recoveryMasterKey!\n let symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(masterKey)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * @description Generates and updates the security questions and answers payload using new recovery questions and answers\n * Important: Since the security questions generate a payload for the private key, they will never be stored on the device as they must remain secret!!!\n * @param id\n * @param recoverySecurityQuestions\n * @param recoverySecurityAnswers\n * @param threshold the number of answers needed to rebuild the secret\n */\n public async updateSecurityQuestions(\n id: Uuid,\n recoverySecurityQuestions: string[],\n recoverySecurityAnswers: string[],\n threshold: number\n ) {\n if (!this.rsa) throw IncompleteAuthentication\n let securityQuestionPayload = this.toolbox.breakSecretIntoShards(\n recoverySecurityQuestions,\n recoverySecurityAnswers,\n this.rsa.private(),\n threshold\n )\n let updateRequest = {\n recoverySecurityQuestions: securityQuestionPayload,\n }\n\n return await this.guardClient.identityUpdate(id, updateRequest)\n }\n\n /**\n * @description Generates and stores the payload encrypted payload and updates the password itself (double hash)\n * @important\n * the recovery payload uses a singly hashed password and the password stored is doubly hashed so\n * the stored password cannot derive the decryption key in the payload\n * @note\n * the old password must be provided when not performing an account recovery\n * @param id\n * @param newPassword\n * @param oldPassword\n */\n public async updatePassword(id: Uuid, newPassword: string, oldPassword?: string) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(newPassword)\n let passwordPayload = symmetricEncryptor.bytesEncryptToBase64Payload(this.rsa.private())\n if (oldPassword) {\n oldPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(oldPassword))\n }\n\n newPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(newPassword))\n\n let updateRequest = {\n password: {\n oldPassword,\n newPassword,\n },\n recoveryPassword: passwordPayload,\n }\n\n return await this.guardClient.identityUpdate(id, updateRequest)\n }\n\n /**\n * @description Generates and stores the master key encrypted payload\n * Important\n * Since the master key is used to generate a payload for the private key, it will never be stored on the device as it must remain secret!\n * @param id\n * @param masterKey\n * @param lockboxUuid\n */\n async updateMasterKey(id: Uuid, masterKey: string, lockboxUuid: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(masterKey)\n let masterKeyPayload = symmetricEncryptor.bytesEncryptToBase64Payload(this.rsa.private())\n let updateRequest = { recoveryMasterKey: masterKeyPayload }\n const updatedIdentity = await this.guardClient.identityUpdate(id, updateRequest)\n\n await this.getOrInsertJsonData<RecoveryMeta>(\n lockboxUuid,\n { masterKey },\n {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n },\n {},\n { forceReplace: true, withNotification: false, updateMedicalStatus: false }\n )\n\n return updatedIdentity\n }\n}\n","import { AxiosService, CliniaResponse, FacetFilter, PlaceData } from \"oro-sdk-apis\"\n\nexport class CliniaService {\n private api: AxiosService\n\n constructor(private url: string, apiKey: string, private locale?: string) {\n this.api = new AxiosService({ headers: { 'X-Clinia-API-Key': apiKey } })\n }\n\n public placeSearch(searchOptions: {\n locale?: string\n query?: string\n facetFilters?: FacetFilter[]\n location?: string\n aroundLatLng?: string\n page?: number\n }) {\n const { locale, ...data } = searchOptions\n\n return this.api.post<CliniaResponse<PlaceData>>(\n `${this.url}/search/v1/indexes/health_facility/query`,\n data,\n {\n params: { locale: locale ?? this.locale },\n }\n )\n }\n\n public placeMatch(\n searchOptions: {\n locale?: string\n name?: string\n address?: string\n postalCode?: string\n place?: string\n region?: string\n country?: string\n },\n type?: string\n ) {\n const { locale, ...data } = searchOptions\n\n let request = this.api.post<PlaceData[]>(\n `${this.url}/search/v1/matches`,\n data,\n {\n params: { locale: locale ?? this.locale },\n }\n )\n\n if (type) {\n request = request.then((places) =>\n places.filter((place) => place.type === type)\n )\n }\n\n return request\n }\n}\n","import initApis from 'oro-sdk-apis'\nimport { OroClient } from './client'\nimport * as OroToolboxNamespace from 'oro-toolbox'\n\nexport type OroToolbox = typeof OroToolboxNamespace\n\nexport let wasmPath = 'node_modules/oro-toolbox'\n\n/**\n * This function helps you to initialize and OroClient instance\n * @param toolbox the OroToolbox object\n * @param tellerBaseURL the teller service base URL \n * @param vaultBaseURL the vault service base URL \n * @param guardBaseURL the guard service base URL \n * @param searchbaseURL the search service base URL\n * @param practiceBaseURL the practice service base URL \n * @param consultBaseURL the consult service base URL \n * @param workflowBaseURL the workflow service base URL \n * @param diagnosisBaseURL the diagnosis service base URL \n * @param authenticationCallback (optional) authenticationCallback the authentification callback \n * @returns an instance of OroClient\n */\nconst init = (\n toolbox: OroToolbox,\n tellerBaseURL: string,\n vaultBaseURL: string,\n guardBaseURL: string,\n searchBaseURL: string,\n practiceBaseURL: string,\n consultBaseURL: string,\n workflowBaseURL: string,\n diagnosisBaseURL: string,\n authenticationCallback?: (err: Error) => void\n) => {\n const {\n tellerService,\n practiceService,\n consultService,\n vaultService,\n guardService,\n searchService,\n workflowService,\n diagnosisService,\n } = initApis(\n {\n tellerBaseURL,\n vaultBaseURL,\n guardBaseURL,\n searchBaseURL,\n practiceBaseURL,\n consultBaseURL,\n workflowBaseURL,\n diagnosisBaseURL,\n },\n authenticationCallback\n )\n\n const client = new OroClient(\n toolbox,\n tellerService!,\n vaultService!,\n guardService!,\n searchService!,\n practiceService!,\n consultService!,\n workflowService!,\n diagnosisService!,\n authenticationCallback\n )\n\n return client\n}\n\nexport { OroClient } from './client'\nexport * from 'oro-sdk-apis'\nexport * from './models'\nexport * from './helpers'\nexport * from './services'\nexport { OroToolboxNamespace }\nexport default init\n"],"names":["personalMetaToPrefix","_personalMetaToPrefix","MetadataCategory","Personal","ChildPersonal","OtherPersonal","identificationToPersonalInformations","data","category","prefix","birthday","firstname","gender","name","phone","zip","hid","_data","pharmacy","address","toActualObject","ret","Object","entries","fields","forEach","_ref","key","field","displayedAnswer","answer","updatePersonalIntoPopulatedWorkflowData","infos","JSON","parse","stringify","kind","extractISOLocalityForConsult","answers","undefined","arrAnswersWithLocality","flatMap","currentAnswerPage","arrCountryFields","keys","filter","workflowFieldName","indexOf","flat","arrProvinceFields","arrConsultLocalFields","concat","map","currentFieldName","item","arrSelectedLocality","currentSelectedLocality","startsWith","length","console","log","allowedLocalityPatterns","_wrapRegExp","indexPriority","isoValue","finalLocality","reduce","extractedSelected","exec","_ref2","indexSelectedPriority","isoSelectedValue","extractedFinal","_ref3","indexFinalPriority","isoFinalValue","sessionPrivateKeyPrefix","sessionStorePrivateKeyName","id","IncompleteAuthentication","_Error","_inheritsLoose","apply","arguments","_wrapNativeSuper","Error","MissingGrant","_Error2","MissingGrantFilter","_Error3","MissingLockbox","_Error4","MissingLockboxOwner","_Error5","AssociatedLockboxNotFound","_Error6","WorkflowAnswersMissingError","_Error7","filterTriggeredAnsweredWithKind","_x","_x2","_filterTriggeredAnsweredWithKind","_asyncToGenerator","_regeneratorRuntime","mark","_callee","workflowData","flattenedAnswers","triggeredQuestionsWithKind","samePageAnswers","res","wrap","_callee$","_context","prev","next","selectedAnswers","flattenSelectedAnswers","fromEntries","pages","a","questions","question","isTriggered","triggers","cur","_extends","questionFieldName","abrupt","stop","getWorkflowDataByCategory","_x3","_x4","_getWorkflowDataByCategory","_callee2","_workflowData$selecte","triggeredQuestions","answersPerPage","_callee2$","_context2","_ref4","pageAnswers","_","_ref5","k","v","previousAnswers","pageIndex","_ref6","questionId","Promise","all","_ref7","_ref8","p","populateWorkflowField","then","populatedValue","workflowCreatedAt","createdAt","workflowId","locale","err","error","getImagesFromIndexDb","_x5","_getImagesFromIndexDb","_callee3","_callee3$","_context3","getMany","_v$id","sent","_x6","_x7","_x8","_populateWorkflowField","_callee4","answerValue","previousAnswer","_callee4$","_context4","t0","text","value","images","image","imageData","resolve","includes","Array","isArray","some","subSetTriggers","every","trigger","linearAnswers","_iterator","_createForOfIteratorHelperLoose","_step","done","push","values","getInitialisedSelectedAnswers","workflow","useDefault","page","_i","_Object$entries","_Object$entries$_i","defaultValue","fillWorkflowFromPopulatedWorkflow","populatedWorkflow","filledWorkflow","find","changed","pageIdx","_i2","_Object$entries2","_Object$entries2$_i","_populatedWorkflow$fi","detectChangesInWorkflowAnswers","pageId","selectedAnswer","equalsAnswer","answer1","answer2","getOrCreatePatientConsultationUuid","_getOrCreatePatientConsultationUuid","consult","oroClient","payment","practiceClient","practiceGetPayment","uuidPractice","idStripeInvoiceOrPaymentIntent","uuidConsult","consultClient","getConsultByUUID","consultCreate","MAX_RETRIES","registerPatient","_registerPatient","patientUuid","consultRequest","masterKey","recoveryQA","indexSearch","onProgress","lockboxUuid","practitionerAdmin","retry","identity","errorsThrown","stepsTotalNum","currentStep","_loop","_ret","_consultIndex","_identity","_identity2","practitioners","grantPromises","consultIndex","consultIndexPromises","_loop$","setTimeout","practiceGetFromUuid","uuidAdmin","practiceGetPractitioners","getOrCreatePatientLockbox","guardClient","identityGet","grantLockbox","practitioner","uuid","_x30","IndexKey","ConsultationLockbox","grant","lockboxOwnerUuid","consultationId","vaultIndexAdd","_x31","storeImageAliases","storePatientData","isoLanguageRequired","consultType","recoveryMasterKey","updateMasterKey","recoverySecurityQuestions","updateSecurityQuestions","recoverySecurityAnswers","buildConsultSearchIndex","statusMedical","MedicalStatus","Assigning","warn","updateConsultByUUID","New","delegateYield","cleanIndex","_x9","_getOrCreatePatientLockbox","grants","lockboxResponse","tokens","_context5","getGrants","vaultClient","lockboxCreate","authRefresh","setTokens","accessToken","refreshToken","whoAmI","_x10","_x11","_x12","_x13","_x14","_x15","_storePatientData","_callee5","isoLanguage","patientDataPromises","_callee5$","_context6","getOrInsertJsonData","Raw","contentType","Consultation","documentType","DocumentType","PopulatedWorkflowData","withNotification","forceReplace","updateMedicalStatus","Medical","consultationIds","extractAndStorePersonalWorkflowData","Preference","ConsultType","FollowUp","Onboard","Refill","Followup","dataUuids","_x16","_x17","_x18","_x19","_x20","_storeImageAliases","_callee6","progress","nonNullImages","storedImagesNum","totalImagesNum","promises","_callee6$","_context7","t1","img","ImageAlias","idbId","progressStepValue","Math","round","_x21","_x22","_x23","_x24","_x25","_extractAndStorePersonalWorkflowData","_callee7","_callee7$","_context8","extractPersonalInfoFromWorkflowData","_x26","_extractPersonalInfoFromWorkflowData","_callee8","_callee8$","_context9","personalInfoPopulatedWfData","childPersonalInfoPopulatedWfData","otherPersonalInfoPopulatedWfData","_x27","_x28","_x29","_buildConsultSearchIndex","_callee9","terms","_yield$extractPersona","personalInfo","childPersonalInfo","otherPersonalInfo","_callee9$","_context10","shortId","searchClient","index","decryptGrants","encryptedGrants","rsaKey","encryptedLockbox","uuidParse","base64DecryptToBytes","e","decryptConsultLockboxGrants","encryptedConsultLockboxes","base64DecryptToJson","encryptedIndexEntry","grantsTuple","grantTuples","getRefillAnswersAsWorkflow","isTreatmentWorking","hasSideEffects","deliveryAddress","_extends2","_extends3","culDeSacs","hidePlanRules","startingPlanIds","title","groups","type","fieldsAndGroups","label","inline","inlineLabel","metaCategory","youPharmacy","summaryLabel","youAddress","createRefill","_createRefill","populatedRefillWorkflow","newConsult","rawConsultationManifest","rawConsultation","getLockboxManifest","uuidParent","getJsonData","dataUuid","filterGrantsWithLockboxMetadata","_filterGrantsWithLockboxMetadata","filteredGrants","consultationIdExistsInMetadata","lockboxMetadataGet","OroClient","toolbox","tellerClient","workflowClient","diagnosisClient","authenticationCallback","_proto","prototype","_cleanIndex","cachedMetadataGrants","cachedManifest","signUp","_signUp","email","password","practice","tosAndCpAcceptance","tokenData","subscription","skipEmailValidation","privateKey","symmetricEncryptor","recoveryPassword","hashedPassword","emailConfirmed","subscriptionAcceptance","signupRequest","symetricEncryptor","rsa","CryptoRSA","CryptoChaCha","fromPassphrase","bytesEncryptToBase64Payload","hashStringToBase64","toLowerCase","practiceUuid","publicKey","encodeToBase64","identityCreate","recoveryLogin","sessionStorage","setItem","confirmEmail","_confirmEmail","claims","identityUpdate","sub","signIn","_signIn","otp","tokenRequest","userUuid","authToken","recoverPrivateKeyFromPassword","resumeSession","_resumeSession","recoveryPayload","recoveryKey","symmetricDecryptor","getItem","base64PayloadDecryptToBytes","fromKey","localEncryptToJsonPayload","chaChaKey","encryptedData","jsonEncryptToBase64Payload","encryptedKey","encryptToBytes","localDecryptJsonPayload","decryptedData","base64PayloadDecryptToJson","signOut","_signOut","secrets","authLogout","_registerPatient2","_createRefill2","forceUpdateIndexEntries","_forceUpdateIndexEntries","_callee10","_this","_this$vaultIndexAdd","indexConsultLockbox","_callee10$","consults","alert","_vaultIndexAdd","_callee11","indexOwnerUuid","rsaPub","base64IndexOwnerPubKey","encryptedIndex","_Object$keys","keyString","_callee11$","_context11","decodeFromBase64","uniqueHash","timestamp","jsonWithPubEncryptToBase64","vaultIndexPut","_grantLockbox","_callee12","granteeUuid","secret","base64GranteePublicKey","granteePublicKey","granteeEncryptedSecret","request","_callee12$","_context12","getCachedSecretCryptor","bytesWithPubEncryptToBase64","encryptedSecret","lockboxGrant","createMessageData","_createMessageData","_callee13","message","previousDataUuid","options","_context13","t2","author","encryptedPrivateMeta","call","meta","Message","publicMetadata","privateMetadata","lockboxDataStore","_x32","_x33","_x34","createMessageAttachmentData","_createMessageAttachmentData","_callee14","_context14","Uint8Array","arrayBuffer","t3","t4","t5","t6","t7","lastModified","t8","size","t9","fileName","_x35","_x36","_x37","_x38","_x39","_x40","createConsultationAttachmentData","_createConsultationAttachmentData","_callee15","_context15","t10","t11","createBytesData","_x41","_x42","_x43","_x44","_x45","_x46","_x47","createJsonData","_createJsonData","_callee16","privateMeta","_context16","_x48","_x49","_x50","_x51","_x52","_x53","_x54","_getOrInsertJsonData","_callee17","_context17","lockboxManifestGet","manifest","_x55","_x56","_x57","_x58","_x59","_createBytesData","_callee18","_context18","_x60","_x61","_x62","_x63","_x64","_x65","_x66","_getJsonData","_callee19","_yield$Promise$all","encryptedPayload","_callee19$","_context19","lockboxDataGet","_x67","_x68","_x69","getBytesData","_getBytesData","_callee20","_yield$Promise$all2","_callee20$","_context20","_x70","_x71","_x72","_getGrants","_callee21","filterString","currentAccountRole","decryptedGrants","grantsByConsultLockbox","decryptedConsults","_callee21$","_context21","getAccountRole","OtherRoleType","User","Patient","requiredRole","grantsGet","info","vaultIndexGet","_x73","_getAccountRole","_callee22","_callee22$","_context22","scope","split","_getCachedSecretCryptor","_callee23","cryptor","_callee23$","_context23","findIndex","lockboxSecretGet","sharedSecret","_x74","_x75","getPersonalInformationsFromConsultId","_getPersonalInformationsFromConsultId","_callee24","forceRefresh","_context24","getMetaCategoryFromConsultId","_x76","_x77","_x78","getMedicalDataFromConsultId","_getMedicalDataFromConsultId","_callee25","_context25","_x79","_x80","getFollowupDataFromConsultId","_getFollowupDataFromConsultId","_callee26","_context26","_x81","_x82","_getMetaCategoryFromConsultId","_callee28","_context29","_context28","_this2","entry","metadata","_callee27","_callee27$","_context27","_x86","_x83","_x84","_x85","getPersonalInformations","_getPersonalInformations","_callee29","userId","identificationDataUuid","_callee29$","_context30","lockbox","_x87","getGrantFromConsultId","_getGrantFromConsultId","_callee30","_callee30$","_context31","_x88","getIdentityFromConsultId","_getIdentityFromConsultId","_callee31","_callee31$","_context32","_x89","_getLockboxManifest","_callee33","expandPrivateMetadata","manifestKey","_context34","_callee32","_callee32$","_context33","_this3","_x95","_x90","_x91","_x92","_x93","_x94","createPersonalInformations","_createPersonalInformations","_callee34","_yield$this$getGrants","_callee34$","_context35","_x96","_x97","_x98","createUserPreference","_createUserPreference","_callee35","preference","_yield$this$getGrants2","_callee35$","_context36","_x99","_x100","_x101","getDataFromGrant","_getDataFromGrant","_callee36","_callee36$","_context37","_x102","_x103","getUserPreferenceFromConsultId","_getUserPreferenceFromConsultId","_callee37","_callee37$","_context38","_x104","getUserPreference","_getUserPreference","_callee38","_callee38$","_context39","_x105","getRecoveryDataFromConsultId","_getRecoveryDataFromConsultId","_callee39","_callee39$","_context40","Recovery","_x106","getRecoveryData","_getRecoveryData","_callee40","_callee40$","_context41","_x107","getAssignedConsultations","_getAssignedConsultations","_callee42","_this4","_callee42$","_context43","_callee41","_callee41$","_context42","_x109","promise","_x108","getPastConsultationsFromConsultId","_getPastConsultationsFromConsultId","_callee44","_this5","consultationsInLockbox","_callee44$","_context45","_callee43","consultId","_callee43$","_context44","_x112","_x110","_x111","getPatientConsultationData","_getPatientConsultationData","_callee45","_context46","_this6","_x113","_x114","getPatientPrescriptionsList","_getPatientPrescriptionsList","_callee46","_callee46$","_context47","getPatientDocumentsList","Prescription","_x115","getPatientResultsList","_getPatientResultsList","_callee47","_callee47$","_context48","Result","_x116","getPatientTreatmentPlans","_getPatientTreatmentPlans","_callee48","_callee48$","_context49","TreatmentPlan","_x117","getPatientTreatmentPlanByUuid","_getPatientTreatmentPlanByUuid","_callee49","treatmentPlanId","_callee49$","_context50","_x118","_x119","_getPatientDocumentsList","_callee51","filters","_this7","_callee51$","_context52","_callee50","_callee50$","_context51","_x123","_x120","_x121","_x122","recoverPrivateKeyFromSecurityQuestions","_recoverPrivateKeyFromSecurityQuestions","_callee52","threshold","shards","answeredShards","_callee52$","_context53","shard","indexOfQuestion","securityQuestion","securityAnswer","reconstructSecret","_x124","_x125","_x126","_x127","_recoverPrivateKeyFromPassword","_callee53","_callee53$","_context54","_x128","_x129","recoverPrivateKeyFromMasterKey","_recoverPrivateKeyFromMasterKey","_callee54","_callee54$","_context55","_x130","_x131","_updateSecurityQuestions","_callee55","securityQuestionPayload","updateRequest","_callee55$","_context56","breakSecretIntoShards","_x132","_x133","_x134","_x135","updatePassword","_updatePassword","_callee56","newPassword","oldPassword","passwordPayload","_callee56$","_context57","_x136","_x137","_x138","_updateMasterKey","_callee57","masterKeyPayload","updatedIdentity","_callee57$","_context58","_x139","_x140","_x141","CliniaService","url","apiKey","api","AxiosService","headers","placeSearch","searchOptions","_objectWithoutPropertiesLoose","_excluded","post","params","placeMatch","_excluded2","places","place","wasmPath","init","tellerBaseURL","vaultBaseURL","guardBaseURL","searchBaseURL","practiceBaseURL","consultBaseURL","workflowBaseURL","diagnosisBaseURL","_initApis","initApis","tellerService","practiceService","consultService","vaultService","guardService","searchService","workflowService","diagnosisService","client"],"mappings":"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"}