oro-sdk 3.1.1 → 3.1.2-dev2.1

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/patient-registration.ts","../src/helpers/vault-grants.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 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 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): 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 // Generates the answers of the specified category and adds the appropriate values if any are missing\n return Promise.all(\n workflowData.selectedAnswers\n .map((e) => Object.entries(e))\n .flat()\n .filter(([k, v]) => triggeredQuestions[k] && triggeredQuestions[k]['metaCategory'] === category)\n .map(([k, v]) => {\n return populateWorkflowField(triggeredQuestions[k], v).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): 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 kind: question.kind,\n })\n}\n\nexport function isTriggered(triggers: string[], answers: string[]): boolean {\n for (let trigger of triggers) {\n if (!answers.includes(trigger)) {\n return false\n }\n }\n return true\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) {\n const filledWorkflow = JSON.parse(JSON.stringify(workflow))\n\n if (!filledWorkflow.selectedAnswers) {\n filledWorkflow.selectedAnswers = getInitialisedSelectedAnswers(filledWorkflow, false)\n }\n\n filledWorkflow.pages.forEach((page: WorkflowPageData, pageIdx: number) => {\n const ret: any = {}\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 }\n }\n })\n\n return filledWorkflow\n}\n","import {\n Consult,\n ConsultationImageMeta,\n ConsultationMeta,\n ConsultRequest,\n DocumentType,\n IdentityResponse,\n IndexKey,\n MedicalMeta,\n MedicalStatus,\n MetadataCategory,\n PersonalMeta,\n Practitioner,\n PreferenceMeta,\n RawConsultationMeta,\n Uuid,\n VaultIndex,\n WorkflowData,\n} from 'oro-sdk-apis'\nimport {\n filterTriggeredAnsweredWithKind,\n getImagesFromIndexDb,\n getWorkflowDataByCategory,\n OroClient,\n RegisterPatientOutput,\n} from '..'\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 * @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): 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\n for (; retry > 0; retry--) {\n try {\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 (!consult) {\n consult = await getOrCreatePatientConsultationUuid(consultRequest, oroClient)\n }\n\n // Creating lockbox\n if (!lockboxUuid) lockboxUuid = await getOrCreatePatientLockbox(oroClient)\n\n if (!identity)\n 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 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(`[SDK: registration] Error while adding to the practitioner's index ${practitioner.uuid}`, err)\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\n await storeImageAliases(consult.uuid, lockboxUuid, workflow, oroClient).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\n await storePatientData(consult.uuid, consultRequest.isoLanguageRequired, lockboxUuid, workflow, oroClient).catch((err) => {\n console.error('[SDK: registration] Some errors happened during patient data upload', err)\n errorsThrown.push(err)\n })\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 (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 (errorsThrown.length > 0)\n throw errorsThrown\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 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 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 */\nasync function getOrCreatePatientConsultationUuid(consult: ConsultRequest, oroClient: OroClient): 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', err)\n throw err\n })\n } else {\n return await oroClient.consultClient.consultCreate(consult).catch((err) => {\n console.error('Error while creating consult', err)\n throw err\n })\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(undefined, true)\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 return (\n await oroClient.vaultClient.lockboxCreate().catch((err) => {\n console.error('Error while creating lockbox', err)\n throw err\n })\n ).lockboxUuid\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): Promise<(Uuid | void)[]> {\n // Create and store registration data\n return Promise.all([\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 )\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 ]).then((dataUuids) => dataUuids.flat())\n}\n\nasync function storeImageAliases(\n consultationId: Uuid,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient\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 promises = nonNullImages.map((image) => {\n return oroClient.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 })\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","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 { IndexKey, Grant, IndexConsultLockbox, MetadataCategory, VaultIndex } from 'oro-sdk-apis'\nimport { OroClient, Uuid } from '..'\n\n/**\n * @name filterGrantsWithLockboxMetadata\n * @description searches for the applied filters in the vault index\n * @param oroClient\n * @param filter: the metadata filter applied to each the lockboxes\n * @param vaultIndex: the index to which the filter will be applied\n * @param forceRefresh\n * @returns the filtered grants\n */\nexport async function filterGrantsWithLockboxMetadata(\n oroClient: OroClient,\n filter?: { consultationId: Uuid },\n vaultIndex?: VaultIndex,\n forceRefresh = false\n): Promise<Grant[]> {\n if (!vaultIndex || forceRefresh) {\n vaultIndex = await buildLegacyVaultIndex(oroClient)\n }\n if (vaultIndex[IndexKey.Consultation] && filter) {\n let indexConsults = (vaultIndex[IndexKey.Consultation] ?? [])\n .filter((consultGrant: { consultationId: Uuid }) => consultGrant.consultationId === filter.consultationId)\n .map((consultGrant: { consultationId: Uuid; grant: Grant }) => consultGrant.grant as Grant)\n return indexConsults as Grant[]\n } else {\n // No grants exist and the index has already been built\n return []\n }\n}\n\n/** Finds all grants for the logged user\n * requests a list of unique consultation ids for each lockbox the user has access to\n * builds and sets the index of consultations\n * @param oroClient\n * @returns the constructed vaultIndex\n */\nexport async function buildLegacyVaultIndex(oroClient: OroClient): Promise<VaultIndex> {\n let grants = await oroClient.getGrants()\n let consultGrants: IndexConsultLockbox[] = []\n for (let grant of grants) {\n let consults = (\n await oroClient.vaultClient.lockboxMetadataGet(grant.lockboxUuid!, ['consultationId'], [], {\n category: MetadataCategory.Consultation,\n })\n )[0] as Uuid[]\n\n consultGrants = [\n ...consultGrants,\n ...consults.map((consult: any) => ({\n ...consult,\n grant: {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid,\n },\n })),\n ]\n }\n\n let vaultIndex = {\n [IndexKey.Consultation]: consultGrants,\n }\n oroClient.setVaultIndex(vaultIndex)\n console.info('[sdk:index] Successfully Built Vault Index')\n return vaultIndex\n}\n","import {\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 PersonalMeta,\n PopulatedWorkflowData,\n Practice,\n PracticeService,\n PreferenceMeta,\n RecoveryMeta,\n SearchService,\n SecretShard,\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 { decryptConsultLockboxGrants, decryptGrants, registerPatient, sessionStorePrivateKeyName } from './helpers'\nimport {\n AssociatedLockboxNotFound,\n IncompleteAuthentication,\n LocalEncryptedData,\n MissingGrant,\n MissingLockbox,\n MissingLockboxOwner,\n RecoveryData,\n RegisterPatientOutput,\n UserPreference,\n} from './models'\nimport { buildLegacyVaultIndex, 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.vaultIndex = undefined\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 const emailConfirmed = !!skipEmailValidation\n\n const signupRequest: IdentityCreateRequest = {\n practiceUuid: practice.uuid,\n email: email.toLowerCase(),\n emailConfirmed,\n password: hashedPassword,\n publicKey: this.toolbox.encodeToBase64(this.rsa.public()),\n recoveryPassword,\n tosAndCpAcceptance,\n tokenData,\n subscription,\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 * @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 ): Promise<RegisterPatientOutput> {\n if (!this.rsa) throw IncompleteAuthentication\n return registerPatient(patientUuid, consult, workflow, this, this.toolbox.uuid(), recoveryQA)\n }\n\n /**\n * Builds the vault index for the logged user\n *\n * Steps:\n * 1. Retrieves, decrypts and sets the lockbox IndexSnapshot\n * 2. Retrieves, decrypts and adds all other index entries starting at the snapshot timestamp\n * 3. Updates the IndexSnapshot if changed\n * @deprecated\n * @returns the latest vault index\n */\n public async buildVaultIndex(forceRefresh: boolean = false) {\n if (!this.vaultIndex || forceRefresh) await buildLegacyVaultIndex(this)\n }\n\n /**\n * Setter for the vault index\n * @param index\n */\n public setVaultIndex(index: VaultIndex) {\n this.vaultIndex = index\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 //// DEPRECATED : REMOVE ME : BEGIN ///////////////////////////////////////////\n case IndexKey.Consultation:\n encryptedIndex[key] = (entries[key] as IndexConsultLockbox[])\n .map((e) => ({\n ...e,\n uniqueHash: this.toolbox.hashStringToBase64(\n JSON.stringify({\n consultationId: e.consultationId,\n grant: e.grant,\n })\n ),\n }))\n .filter(\n (e) =>\n !this.vaultIndex ||\n !this.vaultIndex[IndexKey.Consultation]?.find((v) => v.uniqueHash === e.uniqueHash)\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 //// DEPRECATED : REMOVE ME : END ///////////////////////////////////////////\n }\n }\n await this.vaultClient.vaultIndexPut(encryptedIndex, indexOwnerUuid)\n }\n\n /**\n * adds or updates the index snapshot for the logged user\n * @param index\n */\n public async indexSnapshotAdd(index: VaultIndex) {\n if (!this.rsa) throw IncompleteAuthentication\n let rsaPub: Uint8Array = this.rsa.public()\n\n let cleanedIndex: VaultIndex = {\n [IndexKey.Consultation]: index[IndexKey.Consultation]\n ?.filter((c) => c)\n .map((c) => {\n return {\n grant: c.grant,\n consultationId: c.consultationId,\n }\n }),\n }\n\n // the data of the snapshot should not contain the `IndexEntry` data\n // (will create conflicts while updating)\n let encryptedIndexEntry = CryptoRSA.jsonWithPubEncryptToBase64(cleanedIndex, rsaPub)\n\n // The encryptedIndexEntry can have the uuid and timstamp (for updating)\n let encryptedIndex: EncryptedIndexEntry = {\n uuid: index.uuid,\n timestamp: index.timestamp,\n encryptedIndexEntry,\n }\n this.vaultClient.vaultIndexSnapshotPut(encryptedIndex)\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 ): 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)\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 ): 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)\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 * @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 ): 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 )\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 * @returns the data uuid\n */\n public async createJsonData<T = Meta>(\n lockboxUuid: Uuid,\n data: any,\n meta?: T,\n privateMeta?: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\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\n return this.tellerClient.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 * @returns the data uuid\n */\n public async getOrInsertJsonData<M = Metadata>(\n lockboxUuid: Uuid,\n data: any,\n publicMetadata: M,\n privateMetadata: Metadata,\n forceReplace: boolean = false\n ): Promise<Uuid> {\n let manifest = await this.vaultClient.lockboxManifestGet(lockboxUuid, publicMetadata)\n if (!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 forceReplace && manifest.length > 0 ? manifest[0].dataUuid : undefined // if forceReplace and data already exist, then replace data. Otherwise insert it\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 * @returns the data uuid\n */\n public async createBytesData<T = Meta>(\n lockboxUuid: Uuid,\n data: Uint8Array,\n meta: T,\n privateMeta: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\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\n return this.tellerClient.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 }, forceRefresh: boolean = false): Promise<Grant[]> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let filterString = JSON.stringify(filter)\n // retrieves cached grants\n // Note: if filters is set to empty, it will be stored in the `undefined` key\n if (!forceRefresh && this.cachedMetadataGrants[filterString]) return this.cachedMetadataGrants[filterString]\n\n // if there is a filter to apply, then the grant can be retrieved from the vault index, otherwise, all grants are fetched\n // Note: will work only if the filter being applied is exclusively a consult id\n const grantsByConsultLockbox = filter ? (\n await this.vaultClient.vaultIndexGet([IndexKey.ConsultationLockbox], [filter.consultationId])\n .then((res) => res[IndexKey.ConsultationLockbox])\n .catch((e) => {\n console.error(e)\n return []\n })\n ) : undefined\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[JSON.stringify(filter)] = decryptedConsults\n return this.cachedMetadataGrants[filterString]\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, this.vaultIndex, forceRefresh)\n } else {\n encryptedGrants = (await this.vaultClient.grantsGet()).grants\n }\n\n const decryptedGrants = await decryptGrants(encryptedGrants, this.rsa)\n // sets the cached grant\n this.cachedMetadataGrants[filterString] = decryptedGrants\n return decryptedGrants\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 forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, category, forceRefresh)\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 forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, MetadataCategory.Medical, forceRefresh)\n }\n\n private async getMetaCategoryFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory,\n 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 forceRefresh\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 forceRefresh\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 forceRefresh: boolean = false\n ): Promise<LockboxManifest> {\n let manifestKey = JSON.stringify({\n lockboxUuid,\n filter,\n expandPrivateMetadata,\n lockboxOwnerUuid,\n })\n if (!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(\n lockboxUuid,\n\n filter,\n false,\n grant.lockboxOwnerUuid,\n true\n )\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, forceRefresh: boolean = false): Promise<Consult[]> {\n return Promise.all(\n (await this.getGrants(undefined, forceRefresh)).map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n true,\n undefined,\n forceRefresh\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 forceRefresh: boolean = 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 }, forceRefresh))\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 forceRefresh\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 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 true\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","MetadataCategory","Personal","ChildPersonal","OtherPersonal","identificationToPersonalInformations","data","category","prefix","birthday","firstname","gender","name","phone","zip","hid","pharmacy","address","toActualObject","ret","Object","entries","fields","forEach","key","field","displayedAnswer","answer","updatePersonalIntoPopulatedWorkflowData","infos","JSON","parse","stringify","kind","extractISOLocalityForConsult","answers","undefined","arrAnswersWithLocality","flatMap","currentAnswerPage","arrCountryFields","keys","filter","workflowFieldName","indexOf","flat","arrProvinceFields","arrConsultLocalFields","map","currentFieldName","item","arrSelectedLocality","currentSelectedLocality","startsWith","length","console","log","allowedLocalityPatterns","finalLocality","reduce","extractedSelected","exec","indexSelectedPriority","isoSelectedValue","extractedFinal","indexFinalPriority","isoFinalValue","sessionPrivateKeyPrefix","sessionStorePrivateKeyName","id","IncompleteAuthentication","Error","MissingGrant","MissingLockbox","MissingLockboxOwner","AssociatedLockboxNotFound","WorkflowAnswersMissingError","filterTriggeredAnsweredWithKind","workflowData","selectedAnswers","flattenedAnswers","flattenSelectedAnswers","triggeredQuestionsWithKind","fromEntries","pages","a","questions","question","isTriggered","triggers","samePageAnswers","prev","cur","res","questionFieldName","getWorkflowDataByCategory","triggeredQuestions","Promise","all","e","k","v","populateWorkflowField","then","populatedValue","workflowCreatedAt","createdAt","workflowId","locale","err","error","getImagesFromIndexDb","getMany","answerValue","text","value","images","image","imageData","resolve","trigger","includes","linearAnswers","push","values","getInitialisedSelectedAnswers","workflow","useDefault","page","defaultValue","fillWorkflowFromPopulatedWorkflow","populatedWorkflow","filledWorkflow","pageIdx","MAX_RETRIES","registerPatient","patientUuid","consultRequest","oroClient","masterKey","recoveryQA","consult","lockboxUuid","practitionerAdmin","retry","identity","errorsThrown","setTimeout","practiceClient","practiceGetFromUuid","uuidPractice","uuidAdmin","practiceGetPractitioners","practitioners","getOrCreatePatientConsultationUuid","getOrCreatePatientLockbox","guardClient","identityGet","grantLockbox","grantPromises","practitioner","uuid","consultIndex","IndexKey","ConsultationLockbox","grant","lockboxOwnerUuid","consultationId","consultIndexPromises","vaultIndexAdd","storeImageAliases","storePatientData","isoLanguageRequired","recoveryMasterKey","updateMasterKey","recoverySecurityQuestions","updateSecurityQuestions","recoverySecurityAnswers","consultClient","updateConsultByUUID","statusMedical","MedicalStatus","New","cleanIndex","practiceGetPayment","idStripeInvoiceOrPaymentIntent","payment","uuidConsult","getConsultByUUID","consultCreate","getGrants","grants","vaultClient","lockboxCreate","isoLanguage","getOrInsertJsonData","Raw","contentType","Consultation","documentType","DocumentType","PopulatedWorkflowData","Medical","consultationIds","extractAndStorePersonalWorkflowData","Preference","dataUuids","nonNullImages","img","promises","ImageAlias","idbId","decryptGrants","encryptedGrants","rsaKey","encryptedLockbox","uuidParse","base64DecryptToBytes","decryptConsultLockboxGrants","encryptedConsultLockboxes","base64DecryptToJson","encryptedIndexEntry","grantsTuple","grantTuples","filterGrantsWithLockboxMetadata","vaultIndex","forceRefresh","buildLegacyVaultIndex","indexConsults","consultGrant","consultGrants","lockboxMetadataGet","consults","setVaultIndex","info","OroClient","toolbox","tellerClient","searchClient","workflowClient","diagnosisClient","authenticationCallback","cachedMetadataGrants","cachedManifest","signUp","email","password","practice","tosAndCpAcceptance","tokenData","subscription","skipEmailValidation","rsa","CryptoRSA","privateKey","symmetricEncryptor","CryptoChaCha","fromPassphrase","recoveryPassword","bytesEncryptToBase64Payload","hashedPassword","hashStringToBase64","emailConfirmed","signupRequest","practiceUuid","toLowerCase","publicKey","encodeToBase64","identityCreate","recoveryLogin","symetricEncryptor","sessionStorage","setItem","confirmEmail","accessToken","setTokens","whoAmI","claims","identityUpdate","sub","signIn","otp","tokenRequest","authToken","userUuid","recoverPrivateKeyFromPassword","resumeSession","recoveryPayload","getItem","recoveryKey","symmetricDecryptor","base64PayloadDecryptToBytes","fromKey","localEncryptToJsonPayload","chaChaKey","encryptedData","jsonEncryptToBase64Payload","encryptedKey","encryptToBytes","localDecryptJsonPayload","decryptedData","base64PayloadDecryptToJson","signOut","secrets","refreshToken","authLogout","buildVaultIndex","index","forceUpdateIndexEntries","indexConsultLockbox","alert","indexOwnerUuid","base64IndexOwnerPubKey","rsaPub","decodeFromBase64","encryptedIndex","keyString","uniqueHash","timestamp","jsonWithPubEncryptToBase64","find","vaultIndexPut","indexSnapshotAdd","cleanedIndex","c","vaultIndexSnapshotPut","granteeUuid","getCachedSecretCryptor","secret","base64GranteePublicKey","granteePublicKey","granteeEncryptedSecret","bytesWithPubEncryptToBase64","request","encryptedSecret","lockboxGrant","createMessageData","message","previousDataUuid","author","encryptedPrivateMeta","meta","Message","publicMetadata","privateMetadata","lockboxDataStore","createMessageAttachmentData","Uint8Array","arrayBuffer","lastModified","size","fileName","type","createConsultationAttachmentData","createBytesData","createJsonData","privateMeta","forceReplace","lockboxManifestGet","manifest","dataUuid","getJsonData","lockboxDataGet","encryptedPayload","getBytesData","filterString","vaultIndexGet","grantsByConsultLockbox","decryptedConsults","grantsGet","decryptedGrants","findIndex","lockboxSecretGet","sharedSecret","cryptor","getPersonalInformationsFromConsultId","getMetaCategoryFromConsultId","getMedicalDataFromConsultId","getLockboxManifest","entry","metadata","getPersonalInformations","userId","lockbox","identificationDataUuid","getGrantFromConsultId","getIdentityFromConsultId","expandPrivateMetadata","manifestKey","createPersonalInformations","createUserPreference","preference","getDataFromGrant","getUserPreferenceFromConsultId","getUserPreference","getRecoveryDataFromConsultId","Recovery","getRecoveryData","getAssignedConsultations","promise","getPastConsultationsFromConsultId","consultationsInLockbox","consultId","getPatientConsultationData","getPatientPrescriptionsList","getPatientDocumentsList","Prescription","getPatientResultsList","Result","getPatientTreatmentPlans","TreatmentPlan","getPatientTreatmentPlanByUuid","treatmentPlanId","filters","recoverPrivateKeyFromSecurityQuestions","threshold","shards","answeredShards","shard","indexOfQuestion","securityQuestion","securityAnswer","reconstructSecret","recoverPrivateKeyFromMasterKey","securityQuestionPayload","breakSecretIntoShards","updateRequest","updatePassword","newPassword","oldPassword","passwordPayload","masterKeyPayload","updatedIdentity","CliniaService","url","apiKey","api","AxiosService","headers","placeSearch","searchOptions","post","params","placeMatch","places","place","wasmPath","init","tellerBaseURL","vaultBaseURL","guardBaseURL","searchBaseURL","practiceBaseURL","consultBaseURL","workflowBaseURL","diagnosisBaseURL","initApis","tellerService","practiceService","consultService","vaultService","guardService","searchService","workflowService","diagnosisService","client"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAMA,oBAAoB,sDACrBC,yBAAgB,CAACC,QADI,IACO,KADP,wBAErBD,yBAAgB,CAACE,aAFI,IAEY,OAFZ,wBAGrBF,yBAAgB,CAACG,aAHI,IAGY,OAHZ,wBAA1B;AAMA;;;;;;SAKgBC,qCACZC,MACAC;;;EAKA,IAAMC,MAAM,GAAGR,oBAAoB,CAACO,QAAD,CAAnC;EAEA,OAAO;IACHE,QAAQ,EAAEH,IAAI,CAAIE,MAAJ,cADX;IAEHE,SAAS,EAAEJ,IAAI,CAAIE,MAAJ,eAFZ;IAGHG,MAAM,EAAEL,IAAI,CAAIE,MAAJ,YAHT;IAIHI,IAAI,EAAEN,IAAI,CAAIE,MAAJ,UAJP;IAKHK,KAAK,EAAEP,IAAI,CAAIE,MAAJ,WALR;IAMHM,GAAG,EAAER,IAAI,CAAIE,MAAJ,SANN;IAOHO,GAAG,YAAET,IAAI,CAAIE,MAAJ,SAAN,qBAA0BF,IAAI,CAAIE,MAAJ,QAP9B;IAQHQ,QAAQ,EAAEV,IAAI,CAAIE,MAAJ,cARX;IASHS,OAAO,EAAEX,IAAI,CAAIE,MAAJ;GATjB;AAWH;SAEeU,eAAeZ;EAC3B,IAAMa,GAAG,GAAQ,EAAjB;EAEAC,MAAM,CAACC,OAAP,CAAef,IAAI,CAACgB,MAApB,EAA4BC,OAA5B,CAAoC;QAAEC;QAAKC;IACvCN,GAAG,CAACK,GAAD,CAAH,GAAWC,KAAK,CAACC,eAAN,GAAwBD,KAAK,CAACC,eAA9B,GAAgDD,KAAK,CAACE,MAAjE;GADJ;EAIA,OAAOR,GAAP;AACH;AAED;;;;;;;SAMgBS,wCACZC,OACAvB,MACAC;EAKA,IAAMC,MAAM,GAAGR,oBAAoB,CAACO,QAAD,CAAnC;EAEA,IAAMY,GAAG,GAAGW,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAe1B,IAAf,CAAX,CAAZ;;EAEA,IAAIuB,KAAK,CAACpB,QAAN,IAAkBU,GAAG,CAACG,MAAJ,CAAcd,MAAd,cAAtB,EACIW,GAAG,CAACG,MAAJ,CAAcd,MAAd,eAAgCmB,MAAhC,GAAyCE,KAAK,CAACpB,QAA/C;EACJ,IAAIoB,KAAK,CAACnB,SAAN,IAAmBS,GAAG,CAACG,MAAJ,CAAcd,MAAd,eAAvB,EACIW,GAAG,CAACG,MAAJ,CAAcd,MAAd,gBAAiCmB,MAAjC,GAA0CE,KAAK,CAACnB,SAAhD;EACJ,IAAImB,KAAK,CAAClB,MAAN,IAAgBQ,GAAG,CAACG,MAAJ,CAAcd,MAAd,YAApB,EACIW,GAAG,CAACG,MAAJ,CAAcd,MAAd,aAA8BmB,MAA9B,GAAuCE,KAAK,CAAClB,MAA7C;EACJ,IAAIkB,KAAK,CAACjB,IAAN,IAAcO,GAAG,CAACG,MAAJ,CAAcd,MAAd,UAAlB,EACIW,GAAG,CAACG,MAAJ,CAAcd,MAAd,WAA4BmB,MAA5B,GAAqCE,KAAK,CAACjB,IAA3C;EACJ,IAAIiB,KAAK,CAAChB,KAAN,IAAeM,GAAG,CAACG,MAAJ,CAAcd,MAAd,WAAnB,EACIW,GAAG,CAACG,MAAJ,CAAcd,MAAd,YAA6BmB,MAA7B,GAAsCE,KAAK,CAAChB,KAA5C;EACJ,IAAIgB,KAAK,CAACf,GAAN,IAAaK,GAAG,CAACG,MAAJ,CAAcd,MAAd,SAAjB,EACIW,GAAG,CAACG,MAAJ,CAAcd,MAAd,UAA2BmB,MAA3B,GAAoCE,KAAK,CAACf,GAA1C;;EACJ,IAAIe,KAAK,CAACd,GAAV,EAAe;IACX,IAAII,GAAG,CAACG,MAAJ,CAAcd,MAAd,SAAJ,EAAgC;MAC5BW,GAAG,CAACG,MAAJ,CAAcd,MAAd,UAA2BmB,MAA3B,GAAoCE,KAAK,CAACd,GAA1C;KADJ,MAEO,IAAII,GAAG,CAACG,MAAJ,CAAcd,MAAd,QAAJ,EAA+B;;MAElCW,GAAG,CAACG,MAAJ,CAAcd,MAAd,SAA0BmB,MAA1B,GAAmCE,KAAK,CAACd,GAAzC;KAFG,MAGA;;MAEHI,GAAG,CAACG,MAAJ,CAAcd,MAAd,YAA6B;QAAEyB,IAAI,EAAE,MAAR;QAAgBN,MAAM,EAAEE,KAAK,CAACd;OAA3D;;;;EAIR,OAAOI,GAAP;AACH;AAED;;;;;;SAKgBe,6BACZC;EAEA,IAAI,CAACA,OAAL,EAAc;IACV,OAAOC,SAAP;;;EAGJ,IAAMC,sBAAsB,GAAGF,OAAO,CACjCG,OAD0B,CAClB,UAACC,iBAAD;IACL,IAAMC,gBAAgB,GAAGpB,MAAM,CAACqB,IAAP,CAAYF,iBAAZ,EACpBG,MADoB,CAEjB,UAACC,iBAAD;MAAA,OACIA,iBAAiB,CAACC,OAAlB,CAA0B,SAA1B,MAAyC,CAAC,CAD9C;KAFiB,EAKpBC,IALoB,EAAzB;IAMA,IAAMC,iBAAiB,GAAG1B,MAAM,CAACqB,IAAP,CAAYF,iBAAZ,EACrBG,MADqB,CAElB,UAACC,iBAAD;MAAA,OACIA,iBAAiB,CAACC,OAAlB,CAA0B,UAA1B,MAA0C,CAAC,CAD/C;KAFkB,EAKrBC,IALqB,EAA1B;IAMA,IAAME,qBAAqB,GAAG3B,MAAM,CAACqB,IAAP,CAAYF,iBAAZ,EACzBG,MADyB,CAEtB,UAACC,iBAAD;MAAA,OACIA,iBAAiB,CAACC,OAAlB,CAA0B,UAA1B,MAA0C,CAAC,CAD/C;KAFsB,EAKzBC,IALyB,EAA9B;;IAOA,iBACOL,gBAAgB,CAACQ,GAAjB,CACC,UAACC,gBAAD;MAAA,OACK,OAAOV,iBAAiB,CAACU,gBAAD,CAAxB,KAA+C,QAA/C,GACKV,iBAAiB,CAACU,gBAAD,CADtB,GAEKb,SAHV;KADD,CADP,EAOOU,iBAAiB,CAACE,GAAlB,CACC,UAACC,gBAAD;MAAA,OACK,OAAOV,iBAAiB,CAACU,gBAAD,CAAxB,KAA+C,QAA/C,GACKV,iBAAiB,CAACU,gBAAD,CADtB,GAEKb,SAHV;KADD,CAPP,EAaOW,qBAAqB,CAACC,GAAtB,CACC,UAACC,gBAAD;MAAA,OACK,OAAOV,iBAAiB,CAACU,gBAAD,CAAxB,KAA+C,QAA/C,GACKV,iBAAiB,CAACU,gBAAD,CADtB,GAEKb,SAHV;KADD,CAbP;GArBuB,EA0C1BM,MA1C0B,CA0CnB,UAACQ,IAAD;IAAA,OAAUA,IAAI,KAAKd,SAAnB;GA1CmB,CAA/B;EA4CA,IAAMe,mBAAmB,GAAGd,sBAAsB,CAACK,MAAvB,CACxB,UAACU,uBAAD;IAAA,OACIA,uBAAuB,CAACC,UAAxB,CAAmC,oBAAnC,CADJ;GADwB,CAA5B;;EAIA,IAAI,CAACF,mBAAD,IAAwBA,mBAAmB,CAACG,MAApB,KAA+B,CAA3D,EAA8D;IAC1DC,OAAO,CAACC,GAAR,CAAY,0BAA0BL,mBAAtC;IACA,OAAOf,SAAP;;;;;;EAKJ,IAAMqB,uBAAuB,4BAAG,uEAAH;IAAA;IAAA;IAA7B;;EACA,IAAMC,aAAa,GAAGP,mBAAmB,CAACQ,MAApB,CAClB,UAACD,aAAD,EAAgBN,uBAAhB;IACI,IAAMQ,iBAAiB,GAAGH,uBAAuB,CAACI,IAAxB,CACtBT,uBADsB,CAA1B;;IAGA,YACIQ,iBADJ,WACIA,iBADJ,GACyB,EADzB;QAASE,qBAAT;QAAgCC,gBAAhC;;IAEA,IAAI,CAACL,aAAL,EAAoB;MAChB,OAAOK,gBAAP;;;IAGJ,IAAMC,cAAc,GAAGP,uBAAuB,CAACI,IAAxB,CAA6BH,aAA7B,CAAvB;;IACA,YAA8CM,cAA9C,WAA8CA,cAA9C,GAAgE,EAAhE;QAASC,kBAAT;QAA6BC,aAA7B;;;;IAGA,IACI,CAACJ,qBAAD,IACCG,kBAAkB,IACfA,kBAAkB,GAAGH,qBAH7B,EAIE;MACE,OAAOI,aAAP;;;IAGJ,OAAOH,gBAAP;GAvBc,EAyBlB3B,SAzBkB,CAAtB;EA4BAmB,OAAO,CAACC,GAAR,CAAY,sBAAsBE,aAAlC;EACA,OAAOA,aAAP;AACH;AAED,IAAMS,uBAAuB,GAAG,WAAhC;SACgBC,2BAA2BC;EACvC,OAAOF,uBAAuB,GAAGE,EAAjC;AACH;;ICtMYC,wBAAb;EAAA;;EAAA;IAAA;;;EAAA;AAAA,iCAA8CC,KAA9C;AACA,IAAaC,YAAb;EAAA;;EAAA;IAAA;;;EAAA;AAAA,iCAAkCD,KAAlC;AACA,IAAaE,cAAb;EAAA;;EAAA;IAAA;;;EAAA;AAAA,iCAAoCF,KAApC;AACA,IAAaG,mBAAb;EAAA;;EAAA;IAAA;;;EAAA;AAAA,iCAAyCH,KAAzC;AACA,IAAaI,yBAAb;EAAA;;EAAA;IAAA;;;EAAA;AAAA,iCAA+CJ,KAA/C;AACA,IAAaK,2BAAb;EAAA;;EAAA;IAAA;;;EAAA;AAAA,iCAAiDL,KAAjD;;SCSsBM,+BAAtB;EAAA;AAAA;AAuCA;;;;;;;;;;;gGAvCO,iBACHC,YADG,EAEH7C,IAFG;IAAA;IAAA;MAAA;QAAA;UAAA;YAAA,IAcE6C,YAAY,CAACC,eAdf;cAAA;cAAA;;;YAAA,MAcsCH,2BAdtC;;UAAA;;YAgBCI,gBAhBD,GAgBoBC,sBAAsB,CAACH,YAAY,CAACC,eAAd,CAhB1C;;YAkBCG,0BAlBD,GAkB8B9D,MAAM,CAAC+D,WAAP,CAC7BL,YAAY,CAACM,KAAb,CACKpC,GADL,CACS,UAACqC,CAAD;cACD,OAAOjE,MAAM,CAACC,OAAP,CAAegE,CAAC,CAACC,SAAjB,EAA4B5C,MAA5B,CACH;gBAAA,IAAK6C,QAAL;gBAAA,OAAmBC,WAAW,CAACD,QAAQ,CAACE,QAAT,IAAqB,EAAtB,EAA0BT,gBAA1B,CAAX,IAA0DO,QAAQ,CAACtD,IAAT,KAAkBA,IAA/F;eADG,CAAP;aAFR,EAMKY,IANL,EAD6B,CAlB9B;YA4BG6C,eA5BH,GA4BqBZ,YAAY,CAACC,eAAb,CAA6BpB,MAA7B,CAAoC,UAACgC,IAAD,EAAOC,GAAP;cACxD,oBAAYD,IAAZ,EAAqBC,GAArB;aADoB,EAErB,EAFqB,CA5BrB;YAgCGC,GAhCH,GAgCSzE,MAAM,CAACqB,IAAP,CAAYyC,0BAAZ,EAAwClC,GAAxC,CAA4C,UAAC8C,iBAAD;cACpD,OAAOJ,eAAe,CAACI,iBAAD,CAAtB;aADQ,CAhCT;YAAA,iCAoCID,GApCJ;;UAAA;UAAA;YAAA;;;;;;;;AAgDP,SAAsBE,yBAAtB;EAAA;AAAA;;;0FAAO,kBACHjB,YADG,EAEHvE,QAFG;IAAA;IAAA;MAAA;QAAA;UAAA;YAAA,IAIEuE,YAAY,CAACC,eAJf;cAAA;cAAA;;;YAAA,MAIsCH,2BAJtC;;UAAA;;YAOCI,gBAPD,GAOoBC,sBAAsB,CAACH,YAAY,CAACC,eAAd,CAP1C;;YASCiB,kBATD,GASsB5E,MAAM,CAAC+D,WAAP,CACrBL,YAAY,CAACM,KAAb,CACKpC,GADL,CACS,UAACqC,CAAD;cACD,OAAOjE,MAAM,CAACC,OAAP,CAAegE,CAAC,CAACC,SAAjB,EAA4B5C,MAA5B,CAAmC;gBAAA,IAAK6C,QAAL;gBAAA,OACtCC,WAAW,CAACD,QAAQ,CAACE,QAAT,IAAqB,EAAtB,EAA0BT,gBAA1B,CAD2B;eAAnC,CAAP;aAFR,EAMKnC,IANL,EADqB,CATtB;YAmBGvB,MAnBH,GAmBoD,EAnBpD;;YAAA,kCAsBI2E,OAAO,CAACC,GAAR,CACHpB,YAAY,CAACC,eAAb,CACK/B,GADL,CACS,UAACmD,CAAD;cAAA,OAAO/E,MAAM,CAACC,OAAP,CAAe8E,CAAf,CAAP;aADT,EAEKtD,IAFL,GAGKH,MAHL,CAGY;cAAA,IAAE0D,CAAF;cAAA,OAAYJ,kBAAkB,CAACI,CAAD,CAAlB,IAAyBJ,kBAAkB,CAACI,CAAD,CAAlB,CAAsB,cAAtB,MAA0C7F,QAA/E;aAHZ,EAIKyC,GAJL,CAIS;kBAAEoD;kBAAGC;cACN,OAAOC,qBAAqB,CAACN,kBAAkB,CAACI,CAAD,CAAnB,EAAwBC,CAAxB,CAArB,CAAgDE,IAAhD,CAAqD,UAACC,cAAD;gBACxDlF,MAAM,CAAC8E,CAAD,CAAN,GAAYI,cAAZ;eADG,CAAP;aALR,CADG,EAWFD,IAXE,CAWG;cACF,IAAMpF,GAAG,GAA0B;gBAC/BsF,iBAAiB,EAAE3B,YAAY,CAAC4B,SADD;gBAE/BC,UAAU,EAAE7B,YAAY,CAACT,EAFM;gBAG/BuC,MAAM,EAAE9B,YAAY,CAAC8B,MAHU;gBAI/BtF,MAAM,EAANA;eAJJ;cAMA,OAAOH,GAAP;aAlBD,WAoBI,UAAC0F,GAAD;cACHtD,OAAO,CAACuD,KAAR,6BAAwCvG,QAAxC,0BAAuEsG,GAAvE;cACA,MAAMA,GAAN;aAtBD,CAtBJ;;UAAA;UAAA;YAAA;;;;;;;;AAgDP,SAAsBE,oBAAtB;EAAA;AAAA;AAIA;;;;;;;;;;;qFAJO,kBAAoCpF,MAApC;IAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OACUqF,iBAAO,CAAyBrF,MAAgB,CAACqB,GAAjB,CAAqB,UAACqD,CAAD;cAAA;;cAAA,gBAAOA,CAAC,CAAChC,EAAT,oBAAegC,CAAf;aAArB,CAAzB,CADjB;;UAAA;YAAA;;UAAA;UAAA;YAAA;;;;;;;;SAaQC;;;;;sFAAf,kBACIf,QADJ,EAEI0B,WAFJ;IAAA;IAAA;MAAA;QAAA;UAAA;YAKQvF,eALR,GAKyDU,SALzD;YAAA,eAMYmD,QAAQ,CAACtD,IANrB;YAAA,kCAOa,mBAPb,wBAaa,OAbb,wBAca,YAdb,wBAea,QAfb,wBAsBa,UAtBb,yBAuBa,gBAvBb,yBAkCa,QAlCb;YAAA;;UAAA;YAQY,IAAIsD,QAAQ,CAACpD,OAAb,EAAsB;cAClBT,eAAe,GAAMuF,WAAW,CAAC,CAAD,CAAjB,SAAwB1B,QAAQ,CAACpD,OAAT,CAAiB8E,WAAW,CAAC,CAAD,CAA5B,EAA2CC,IAAlF;;;YAEJvF,MAAM,GAAGsF,WAAT;YAXZ;;UAAA;YAgBY,IAAI1B,QAAQ,CAACpD,OAAb,EAAsB;cAClBT,eAAe,GAAG6D,QAAQ,CAACpD,OAAT,CAAiB8E,WAAjB,EAAwCC,IAA1D;;;YAGJvF,MAAM,GAAGsF,WAAT;YApBZ;;UAAA;YAwBYvF,eAAe,GAAIuF,WAAwB,CAACjE,GAAzB,CAA6B,UAACmE,KAAD;cAC5C,IAAI5B,QAAQ,CAACpD,OAAb,EAAsB;gBAClB,OAAOoD,QAAQ,CAACpD,OAAT,CAAiBgF,KAAjB,EAAwBD,IAA/B;;;cAGJ,MAAM,IAAItC,2BAAJ,EAAN;aALe,CAAnB;YAQAjD,MAAM,GAAGsF,WAAT;YAhCZ;;UAAA;YAAA;YAAA,OAmC2BF,oBAAoB,CAACE,WAAD,CAApB,CAAkCV,IAAlC,CAAuC,UAACa,MAAD;cAAA,OAClDA,MAAM,CAACpE,GAAP,CAAW,UAACqE,KAAD;gBACP,IAAQzG,IAAR,GAA4ByG,KAA5B,CAAQzG,IAAR;oBAAc0G,SAAd,GAA4BD,KAA5B,CAAcC,SAAd;gBAEA,OAAO;kBAAE1G,IAAI,EAAJA,IAAF;kBAAQ0G,SAAS,EAATA;iBAAf;eAHJ,CADkD;aAAvC,CAnC3B;;UAAA;YAmCY3F,MAnCZ;YAAA;;UAAA;YA4CYA,MAAM,GAAGsF,WAAT;;UA5CZ;YAAA,kCA+CWhB,OAAO,CAACsB,OAAR,CAAgB;cACnB5F,MAAM,EAANA,MADmB;cAEnBD,eAAe,EAAfA,eAFmB;cAGnBO,IAAI,EAAEsD,QAAQ,CAACtD;aAHZ,CA/CX;;UAAA;UAAA;YAAA;;;;;;;;AAsDA,SAAgBuD,YAAYC,UAAoBtD;EAC5C,qDAAoBsD,QAApB,wCAA8B;IAAA,IAArB+B,OAAqB;;IAC1B,IAAI,CAACrF,OAAO,CAACsF,QAAR,CAAiBD,OAAjB,CAAL,EAAgC;MAC5B,OAAO,KAAP;;;;EAGR,OAAO,IAAP;AACH;AAED,SAAgBvC,uBAAuB9C;EACnC,IAAMuF,aAAa,GAAyB,EAA5C;;EAEA,sDAAqBvF,OAArB,2CAA8B;IAAA,IAAnBR,MAAmB;IAC1B+F,aAAa,CAACC,IAAd,OAAAD,aAAa,EAAStG,MAAM,CAACwG,MAAP,CAAcjG,MAAd,CAAT,CAAb;;;EAGJ,OAAO+F,aAAa,CAAC7E,IAAd,CAAmB,CAAnB,CAAP;AACH;AAED;;;;;;;AAMA,SAAgBgF,8BAA8BC,UAAwBC;MAAAA;IAAAA,aAAsB;;;EACxF,OAAOD,QAAQ,CAAC1C,KAAT,CAAepC,GAAf,CAAmB,UAACgF,IAAD;IACtB,IAAM7G,GAAG,GAAQ,EAAjB;;IACA,mCAA6BC,MAAM,CAACC,OAAP,CAAe2G,IAAI,CAAC1C,SAApB,CAA7B,qCAA6D;MAAxD;UAAOjB,EAAP;UAAWkB,QAAX;;MACD,IAAIA,QAAQ,CAACtD,IAAT,KAAkB,YAAtB,EAAoC;QAChCd,GAAG,CAACkD,EAAD,CAAH,GAAU0D,UAAU,GAAG,EAAH,GAAQ3F,SAA5B;OADJ,MAEO;QACHjB,GAAG,CAACkD,EAAD,CAAH,GAAU0D,UAAU,IAAIxC,QAAQ,CAAC0C,YAAvB,GAAsC1C,QAAQ,CAAC0C,YAA/C,GAA8D7F,SAAxE;;;;IAGR,OAAOjB,GAAP;GATG,CAAP;AAWH;AAED,SAAgB+G,kCAAkCJ,UAAwBK;EACtE,IAAMC,cAAc,GAAGtG,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAe8F,QAAf,CAAX,CAAvB;;EAEA,IAAI,CAACM,cAAc,CAACrD,eAApB,EAAqC;IACjCqD,cAAc,CAACrD,eAAf,GAAiC8C,6BAA6B,CAACO,cAAD,EAAiB,KAAjB,CAA9D;;;EAGJA,cAAc,CAAChD,KAAf,CAAqB7D,OAArB,CAA6B,UAACyG,IAAD,EAAyBK,OAAzB;;IAEzB,qCAAmBjH,MAAM,CAACC,OAAP,CAAe2G,IAAI,CAAC1C,SAApB,CAAnB,wCAAmD;MAA9C;UAAOjB,EAAP;;MACD,IAAI8D,iBAAiB,CAAC7G,MAAlB,CAAyB+C,EAAzB,CAAJ,EAAkC;QAC9B,IAAI+D,cAAc,CAACrD,eAAnB,EACIqD,cAAc,CAACrD,eAAf,CAA+BsD,OAA/B,EAAwChE,EAAxC,IAA8C8D,iBAAiB,CAAC7G,MAAlB,CAAyB+C,EAAzB,EAA6B1C,MAA3E;;;GALhB;EAYA,OAAOyG,cAAP;AACH;;ACjND,IAAME,WAAW,GAAG,EAApB;AAEA;;;;;;;;;;;;;;;;;;;;;AAoBA,SAAsBC,eAAtB;EAAA;AAAA;AAmKA;;;;;;;;gFAnKO,kBACHC,WADG,EAEHC,cAFG,EAGHX,QAHG,EAIHY,SAJG,EAKHC,SALG,EAMHC,UANG;IAAA;;IAAA;MAAA;QAAA;UAAA;YAWCC,OAXD,GAWgCzG,SAXhC;YAYC0G,WAZD,GAYiC1G,SAZjC;YAaC2G,iBAbD,GAauC3G,SAbvC;YAcC4G,KAdD,GAcSV,WAdT;YAeCW,QAfD,GAe0C7G,SAf1C;YAgBC8G,YAhBD,GAgByB,EAhBzB;;UAAA;YAAA,MAkBIF,KAAK,GAAG,CAlBZ;cAAA;cAAA;;;YAAA;YAAA;cAAA;;cAAA;cAAA;gBAAA;kBAAA;oBAAA;sBAAA;sBAAA,OAqBW,IAAI/C,OAAJ,CAAY,UAACsB,OAAD;wBAAA,OAAa4B,UAAU,CAAC5B,OAAD,EAAU,IAAV,CAAvB;uBAAZ,CArBX;;oBAAA;sBAAA,IAwBUwB,iBAxBV;wBAAA;wBAAA;;;sBAAA;sBAAA,OAyBoCL,SAAS,CAACU,cAAV,CAAyBC,mBAAzB,CAA6CZ,cAAc,CAACa,YAA5D,CAzBpC;;oBAAA;sBAyBSP,iBAzBT,kBA0BcQ,SA1Bd;;oBAAA;sBAAA;sBAAA,OA4B+Cb,SAAS,CAACU,cAAV,CACrCI,wBADqC,CACZf,cAAc,CAACa,YADH,WAE/B,UAACzC,GAAD;wBACHtD,OAAO,CAACC,GAAR,mCAA8CqD,GAA9C;wBACA,OAAO,EAAP;uBAJkC,CA5B/C;;oBAAA;sBA4BS4C,aA5BT;;sBAAA,IAoCUZ,OApCV;wBAAA;wBAAA;;;sBAAA;sBAAA,OAqCyBa,kCAAkC,CAACjB,cAAD,EAAiBC,SAAjB,CArC3D;;oBAAA;sBAqCSG,OArCT;;oBAAA;sBAAA,IAyCUC,WAzCV;wBAAA;wBAAA;;;sBAAA;sBAAA,OAyC2Ca,yBAAyB,CAACjB,SAAD,CAzCpE;;oBAAA;sBAyCuBI,WAzCvB;;oBAAA;sBAAA,IA2CUG,QA3CV;wBAAA;wBAAA;;;sBAAA;sBAAA,OA4C0BP,SAAS,CAACkB,WAAV,CAAsBC,WAAtB,CAAkCrB,WAAlC,CA5C1B;;oBAAA;sBA4CSS,QA5CT;;oBAAA;sBAAA;sBAAA,OA8CWP,SAAS,CAACoB,YAAV,CAAuBf,iBAAvB,EAA0CD,WAA1C,WAA6D,UAACjC,GAAD;wBAC/DtD,OAAO,CAACuD,KAAR,yDAAoEiC,iBAApE,EAAyFlC,GAAzF;;wBAEAqC,YAAY,CAACvB,IAAb,CAAkBd,GAAlB;uBAHE,CA9CX;;oBAAA;;sBAqDSkD,aArDT,GAqDyBN,aAAa,CAC5B/G,MADe,CACR,UAACsH,YAAD;wBAAA,OAAkBA,YAAY,CAACC,IAAb,KAAsBlB,iBAAxC;uBADQ,EAEf/F,GAFe;wBAAA,sEAEX,iBAAOgH,YAAP;0BAAA;4BAAA;8BAAA;gCAAA;kCAAA,iCACMtB,SAAS,CAACoB,YAAV,CAAuBE,YAAY,CAACC,IAApC,EAA0CnB,WAA1C,WAA8D,UAACjC,GAAD;oCACjEtD,OAAO,CAACuD,KAAR,iDAA8DD,GAA9D;;oCAEA,IAAImC,KAAK,IAAI,CAAb,EAAgB;oCAChBE,YAAY,CAACvB,IAAb,CAAkBd,GAAlB;mCAJG,CADN;;gCAAA;gCAAA;kCAAA;;;;yBAFW;;wBAAA;0BAAA;;0BArDzB;sBAgEWqD,YAhEX,sCAiEUC,iBAAQ,CAACC,mBAjEnB,IAiEyC,CAC5B;wBACIC,KAAK,EAAE;0BACHvB,WAAW,EAAXA,WADG;0BAEHwB,gBAAgB,EAAE9B;yBAH1B;wBAKI+B,cAAc,EAAE1B,OAAO,CAACoB;uBANA,CAjEzC;;sBA6ESO,oBA7ET,GA6EgCf,aAAa,CAACzG,GAAd;wBAAA,uEAAkB,kBAAOgH,YAAP;0BAAA;4BAAA;8BAAA;gCAAA;kCAAA,kCAClCtB,SAAS,CAAC+B,aAAV,CAAwBP,YAAxB,EAAsCF,YAAY,CAACC,IAAnD,WAA+D,UAACpD,GAAD;oCAClEtD,OAAO,CAACuD,KAAR,yEAAoFkD,YAAY,CAACC,IAAjG,EAAyGpD,GAAzG;;oCAEA,IAAImC,KAAK,IAAI,CAAb,EAAgB,OAAhB,KACKE,YAAY,CAACvB,IAAb,CAAkBd,GAAlB;mCAJF,CADkC;;gCAAA;gCAAA;kCAAA;;;;yBAAlB;;wBAAA;0BAAA;;0BA7EhC;sBAAA;sBAAA,OAuFW6D,iBAAiB,CAAC7B,OAAO,CAACoB,IAAT,EAAenB,WAAf,EAA4BhB,QAA5B,EAAsCY,SAAtC,CAAjB,UAAwE,UAAC7B,GAAD;wBAC1EtD,OAAO,CAACuD,KAAR,CAAc,8DAAd,EAA8ED,GAA9E;;wBAEA,IAAImC,KAAK,IAAI,CAAb,EAAgB,OAAhB,KACKE,YAAY,CAACvB,IAAb,CAAkBd,GAAlB;uBAJH,CAvFX;;oBAAA;sBAAA;sBAAA,OA8FW8D,gBAAgB,CAAC9B,OAAO,CAACoB,IAAT,EAAexB,cAAc,CAACmC,mBAA9B,EAAmD9B,WAAnD,EAAgEhB,QAAhE,EAA0EY,SAA1E,CAAhB,UAA2G,UAAC7B,GAAD;wBAC7GtD,OAAO,CAACuD,KAAR,CAAc,qEAAd,EAAqFD,GAArF;wBACAqC,YAAY,CAACvB,IAAb,CAAkBd,GAAlB;uBAFE,CA9FX;;oBAAA;sBAAA,MAmGS8B,SAAS,IAAI,eAACM,QAAD,aAAC,UAAU4B,iBAAX,CAnGtB;wBAAA;wBAAA;;;sBAAA;sBAAA,OAqG0BnC,SAAS,CAACoC,eAAV,CAA0BtC,WAA1B,EAAuCG,SAAvC,EAAkDG,WAAlD,WAAqE,UAACjC,GAAD;wBAClFtD,OAAO,CAACuD,KAAR,wDAAqED,GAArE;;wBAEA,IAAImC,KAAK,IAAI,CAAb,EAAgB;wBAChBE,YAAY,CAACvB,IAAb,CAAkBd,GAAlB;wBACA,OAAOoC,QAAP;uBALa,CArG1B;;oBAAA;sBAqGSA,QArGT;sBAAA;sBAAA;;oBAAA;;sBA8GSN,SAAS,GAAGvG,SAAZ;;oBA9GT;sBAAA,MAiHSwG,UAAU,IAAI,gBAACK,QAAD,aAAC,WAAU8B,yBAAX,CAjHvB;wBAAA;wBAAA;;;sBAAA;sBAAA,OAmH0BrC,SAAS,CACrBsC,uBADY,CAETxC,WAFS,EAGTI,UAAU,CAACmC,yBAHF,EAITnC,UAAU,CAACqC,uBAJF,EAKT,CALS,WAON,UAACpE,GAAD;wBACHtD,OAAO,CAACuD,KAAR,gEAA6ED,GAA7E;;wBAEA,IAAImC,KAAK,IAAI,CAAb,EAAgB;wBAChBE,YAAY,CAACvB,IAAb,CAAkBd,GAAlB;wBACA,OAAOoC,QAAP;uBAZS,CAnH1B;;oBAAA;sBAmHSA,QAnHT;;oBAAA;sBAAA;sBAAA,OAkIWhD,OAAO,CAACC,GAAR,WAAgB6D,aAAhB,EAAkCS,oBAAlC,EAlIX;;oBAAA;sBAAA,MAoIStB,YAAY,CAAC5F,MAAb,GAAsB,CApI/B;wBAAA;wBAAA;;;sBAAA,MAqIe4F,YArIf;;oBAAA;sBAAA;sBAAA,OAwIWR,SAAS,CAACwC,aAAV,CAAwBC,mBAAxB,CAA4CtC,OAAO,CAACoB,IAApD,EAA0D;wBAC5DmB,aAAa,EAAEC,sBAAa,CAACC;uBAD3B,CAxIX;;oBAAA;sBAAA;;oBAAA;oBAAA;sBAAA;;;;;;UAAA;YAAA;;YAAA;cAAA;cAAA;;;YAAA;;UAAA;YAAA;YAAA;;UAAA;YAAA;YAAA;YA+IK/H,OAAO,CAACuD,KAAR,oGAAiGkC,KAAjG;YACAE,YAAY,GAAG,EAAf;YAhJL;;UAAA;YAkBeF,KAAK,EAlBpB;YAAA;YAAA;;UAAA;YAAA,MAqJCA,KAAK,IAAI,CArJV;cAAA;cAAA;;;YAsJCzF,OAAO,CAACuD,KAAR,CAAc,gDAAd;YAtJD,MAuJO,oBAvJP;;UAAA;YA0JHvD,OAAO,CAACC,GAAR,CAAY,yBAAZ;YA1JG;YAAA,OA2JGkF,SAAS,CAAC6C,UAAV,EA3JH;;UAAA;YAAA,kCA4JI;cACH5C,SAAS,EAATA,SADG;cAEH4B,cAAc,EAAE1B,OAAQ,CAACoB,IAFtB;cAGHnB,WAAW,EAAEA;aA/Jd;;UAAA;UAAA;YAAA;;;;;;;;SAyKQY;;;AAkBf;;;;;;;;mGAlBA,kBAAkDb,OAAlD,EAA2EH,SAA3E;IAAA;IAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OACwBA,SAAS,CAACU,cAAV,CAAyBoC,kBAAzB,CAChB3C,OAAO,CAACS,YADQ,EAEhBT,OAAO,CAAC4C,8BAFQ,CADxB;;UAAA;YACQC,OADR;;YAAA,MAKQA,OAAO,IAAIA,OAAO,CAACC,WAL3B;cAAA;cAAA;;;YAAA,kCAMejD,SAAS,CAACwC,aAAV,CAAwBU,gBAAxB,CAAyCF,OAAO,CAACC,WAAjD,WAAoE,UAAC9E,GAAD;cACvEtD,OAAO,CAACuD,KAAR,CAAc,gCAAd,EAAgDD,GAAhD;cACA,MAAMA,GAAN;aAFG,CANf;;UAAA;YAAA;YAAA,OAWqB6B,SAAS,CAACwC,aAAV,CAAwBW,aAAxB,CAAsChD,OAAtC,WAAqD,UAAChC,GAAD;cAC9DtD,OAAO,CAACuD,KAAR,CAAc,8BAAd,EAA8CD,GAA9C;cACA,MAAMA,GAAN;aAFS,CAXrB;;UAAA;YAAA;;UAAA;UAAA;YAAA;;;;;;;;SAuBe8C;;;AAcf;;;;;;;;;;;;0FAdA,kBAAyCjB,SAAzC;IAAA;IAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OACuBA,SAAS,CAACoD,SAAV,CAAoB1J,SAApB,EAA+B,IAA/B,CADvB;;UAAA;YACQ2J,MADR;;YAAA,MAEQA,MAAM,CAACzI,MAAP,GAAgB,CAFxB;cAAA;cAAA;;;YAGQC,OAAO,CAACC,GAAR,CAAY,kEAAZ;YAHR,kCAIeuI,MAAM,CAAC,CAAD,CAAN,CAAUjD,WAJzB;;UAAA;YAAA;YAAA,OAOkBJ,SAAS,CAACsD,WAAV,CAAsBC,aAAtB,YAA4C,UAACpF,GAAD;cAC9CtD,OAAO,CAACuD,KAAR,CAAc,8BAAd,EAA8CD,GAA9C;cACA,MAAMA,GAAN;aAFE,CAPlB;;UAAA;YAAA,iDAWUiC,WAXV;;UAAA;UAAA;YAAA;;;;;;;;SAuBe6B;;;;;iFAAf,kBACIJ,cADJ,EAEI2B,WAFJ,EAGIpD,WAHJ,EAIIhB,QAJJ,EAKIY,SALJ;IAAA;MAAA;QAAA;UAAA;YAAA,kCAQWzC,OAAO,CAACC,GAAR,CAAY;YAEfwC,SAAS,CAACyD,mBAAV,CACIrD,WADJ,EAEIhB,QAFJ,EAGI;cACIvH,QAAQ,EAAEN,yBAAgB,CAACmM,GAD/B;cAEIC,WAAW,EAAE,kBAFjB;cAGI9B,cAAc,EAAdA;aANR,EAQI,EARJ,CAFe,EAYfxE,yBAAyB,CAAC+B,QAAD,EAAW7H,yBAAgB,CAACqM,YAA5B,CAAzB,CAAmE/F,IAAnE,CAAwE,UAACjG,IAAD;cAAA,OACpEoI,SAAS,CAACyD,mBAAV,CACIrD,WADJ,EAEIxI,IAFJ,EAGI;gBACIC,QAAQ,EAAEN,yBAAgB,CAACqM,YAD/B;gBAEIC,YAAY,EAAEC,qBAAY,CAACC,qBAF/B;gBAGIlC,cAAc,EAAdA;eANR,EAQI;gBAAEA,cAAc,EAAdA;eARN,CADoE;aAAxE,CAZe,EAwBfxE,yBAAyB,CAAC+B,QAAD,EAAW7H,yBAAgB,CAACyM,OAA5B,CAAzB,CAA8DnG,IAA9D,CAAmE,UAACjG,IAAD;cAAA,OAC/DoI,SAAS,CAACyD,mBAAV,CACIrD,WADJ,EAEIxI,IAFJ,EAGI;gBACIC,QAAQ,EAAEN,yBAAgB,CAACyM,OAD/B;gBAEIH,YAAY,EAAEC,qBAAY,CAACC,qBAF/B;gBAGIE,eAAe,EAAE,CAACpC,cAAD;eANzB,EAQI,EARJ,CAD+D;aAAnE,CAxBe,EAoCfqC,mCAAmC,CAC/B9E,QAD+B,EAE/BgB,WAF+B,EAG/ByB,cAH+B,EAI/BtK,yBAAgB,CAACC,QAJc,EAK/BwI,SAL+B,CApCpB,EA2CfkE,mCAAmC,CAC/B9E,QAD+B,EAE/BgB,WAF+B,EAG/ByB,cAH+B,EAI/BtK,yBAAgB,CAACE,aAJc,EAK/BuI,SAL+B,CA3CpB,EAkDfkE,mCAAmC,CAC/B9E,QAD+B,EAE/BgB,WAF+B,EAG/ByB,cAH+B,EAI/BtK,yBAAgB,CAACG,aAJc,EAK/BsI,SAL+B,CAlDpB,EAyDfA,SAAS,CAACyD,mBAAV,CACIrD,WADJ,EAEI;cAAEoD,WAAW,EAAXA;aAFN,EAGI;cACI3L,QAAQ,EAAEN,yBAAgB,CAAC4M,UAD/B;cAEIR,WAAW,EAAE;aALrB,EAOI,EAPJ,CAzDe,CAAZ,EAkEJ9F,IAlEI,CAkEC,UAACuG,SAAD;cAAA,OAAeA,SAAS,CAACjK,IAAV,EAAf;aAlED,CARX;;UAAA;UAAA;YAAA;;;;;;;;SA6Ee6H;;;AA8Bf;;;;;;;;;;;;kFA9BA,kBACIH,cADJ,EAEIzB,WAFJ,EAGIhB,QAHJ,EAIIY,SAJJ;IAAA;IAAA;MAAA;QAAA;UAAA;YAAA,eAMyB3B,oBANzB;YAAA;YAAA,OAMqDlC,+BAA+B,CAACiD,QAAD,EAAW,cAAX,CANpF;;UAAA;YAAA,8BAMgHjF,IANhH;YAAA;YAAA;;UAAA;YAMUuE,MANV;YAQU2F,aARV,GAQ0B3F,MAAM,CAAC1E,MAAP,CAAc,UAACsK,GAAD;cAAA,OAAS,CAAC,CAACA,GAAX;aAAd,CAR1B;;YAUI,IAAI5F,MAAM,CAAC9D,MAAP,KAAkByJ,aAAa,CAACzJ,MAApC,EAA4C;cACxCC,OAAO,CAACuD,KAAR,CAAc,gEAAd;;;YAGAmG,QAdR,GAcmBF,aAAa,CAAC/J,GAAd,CAAkB,UAACqE,KAAD;cAC7B,OAAOqB,SAAS,CAACyD,mBAAV,CACHrD,WADG,EAEHzB,KAFG,EAGH;gBACI9G,QAAQ,EAAEN,yBAAgB,CAACqM,YAD/B;gBAEIC,YAAY,EAAEC,qBAAY,CAACU,UAF/B;gBAGI3C,cAAc,EAAdA,cAHJ;gBAII4C,KAAK,EAAE9F,KAAK,CAAC8F;eAPd,EASH,EATG,CAAP;aADW,CAdnB;YAAA,kCA2BWlH,OAAO,CAACC,GAAR,CAAY+G,QAAZ,CA3BX;;UAAA;UAAA;YAAA;;;;;;;;AAuCA,SAAsBL,mCAAtB;EAAA;AAAA;;;oGAAO,kBACH9E,QADG,EAEHgB,WAFG,EAGHyB,cAHG,EAIHhK,QAJG,EAKHmI,SALG;IAAA;MAAA;QAAA;UAAA;YAAA,kCAOI3C,yBAAyB,CAAC+B,QAAD,EAAWvH,QAAX,CAAzB,CAA6EgG,IAA7E,CAAkF,UAACjG,IAAD;cACrF,IAAIc,MAAM,CAACqB,IAAP,CAAYnC,IAAI,CAACgB,MAAjB,EAAyBgC,MAAzB,KAAoC,CAAxC,EAA2C;cAC3C,OAAOoF,SAAS,CAACyD,mBAAV,CACHrD,WADG,EAEHxI,IAFG,EAGH;gBACIC,QAAQ,EAARA,QADJ;gBAEIgM,YAAY,EAAEC,qBAAY,CAACC,qBAF/B;gBAGIE,eAAe,EAAE,CAACpC,cAAD;eANlB,EAQH,EARG,CAAP;aAFG,CAPJ;;UAAA;UAAA;YAAA;;;;;;;;ACzXP;;;;;;;;;AAQA,SAAgB6C,cAAcC,iBAA0BC;EACpD,OAAOD,eAAe,CACjBrK,GADE,CACE,UAAAqH,KAAK;IACN,IAAIA,KAAK,CAACkD,gBAAN,IAA0B,CAAClD,KAAK,CAACvB,WAArC,EAAkD;MAC9C,IAAI;QACAuB,KAAK,CAACvB,WAAN,GAAoB0E,oBAAS,CACzBF,MAAM,CAACG,oBAAP,CAA4BpD,KAAK,CAACkD,gBAAlC,CADyB,CAA7B;OADJ,CAIE,OAAOpH,CAAP,EAAU;QACR5C,OAAO,CAACuD,KAAR,CAAc,wEAAd,EAAwFX,CAAxF;;;;IAGR,OAAOkE,KAAP;GAXD,EAaF3H,MAbE,CAaK,UAAA2H,KAAK;IAAA,OAAIA,KAAK,CAACvB,WAAV;GAbV,CAAP;AAcH;AAED;;;;;;;;;AAQA,SAAgB4E,4BAA4BC,2BAAkDL;EAC1F,OAAOK,yBAAyB,CAC3B3K,GADE,CACE,UAAA2K,yBAAyB;IAC1B,IAAI;MACA,OAAO,CAAC,IAAD,EAAQL,MAAM,CAACM,mBAAP,CACXD,yBAAyB,CAACE,mBADf,EAEWxD,KAFnB,CAAP;KADJ,CAIE,OAAMlE,CAAN,EAAS;MACP5C,OAAO,CAACuD,KAAR,CAAc,gEAAd,EAAgFX,CAAhF;MACA,OAAO,CAAC,KAAD,EAAQ/D,SAAR,CAAP,CAFO;;GANZ,EAWFM,MAXE,CAWK,UAAAoL,WAAW;IAAA,OAAIA,WAAW,CAAC,CAAD,CAAf;GAXhB,EAYF9K,GAZE,CAYE,UAAA+K,WAAW;IAAA,OAAIA,WAAW,CAAC,CAAD,CAAf;GAZb,CAAP;AAaH;;AC/CD;;;;;;;;;;AASA,SAAsBC,+BAAtB;EAAA;AAAA;AAoBA;;;;;;;;gGApBO,iBACHtF,SADG,EAEHhG,MAFG,EAGHuL,UAHG,EAIHC,YAJG;IAAA;;IAAA;MAAA;QAAA;UAAA;YAAA,IAIHA,YAJG;cAIHA,YAJG,GAIY,KAJZ;;;YAAA,MAMC,CAACD,UAAD,IAAeC,YANhB;cAAA;cAAA;;;YAAA;YAAA,OAOoBC,qBAAqB,CAACzF,SAAD,CAPzC;;UAAA;YAOCuF,UAPD;;UAAA;YAAA,MASCA,UAAU,CAAC9D,iBAAQ,CAACmC,YAAV,CAAV,IAAqC5J,MATtC;cAAA;cAAA;;;YAUK0L,aAVL,GAUqB,0BAACH,UAAU,CAAC9D,iBAAQ,CAACmC,YAAV,CAAX,oCAAsC,EAAtC,EACf5J,MADe,CACR,UAAC2L,YAAD;cAAA,OAA4CA,YAAY,CAAC9D,cAAb,KAAgC7H,MAAM,CAAC6H,cAAnF;aADQ,EAEfvH,GAFe,CAEX,UAACqL,YAAD;cAAA,OAA0DA,YAAY,CAAChE,KAAvE;aAFW,CAVrB;YAAA,iCAaQ+D,aAbR;;UAAA;YAAA,iCAgBQ,EAhBR;;UAAA;UAAA;YAAA;;;;;;;;AA0BP,SAAsBD,qBAAtB;EAAA;AAAA;;;sFAAO,kBAAqCzF,SAArC;IAAA;;IAAA;;IAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OACgBA,SAAS,CAACoD,SAAV,EADhB;;UAAA;YACCC,MADD;YAECuC,aAFD,GAEwC,EAFxC;YAAA;cAAA;cAAA;gBAAA;kBAAA;oBAAA;sBAGMjE,KAHN;sBAAA;sBAAA,OAKW3B,SAAS,CAACsD,WAAV,CAAsBuC,kBAAtB,CAAyClE,KAAK,CAACvB,WAA/C,EAA6D,CAAC,gBAAD,CAA7D,EAAiF,EAAjF,EAAqF;wBACvFvI,QAAQ,EAAEN,yBAAgB,CAACqM;uBADzB,CALX;;oBAAA;sBAIKkC,QAJL,kBAQG,CARH;sBAUCF,aAAa,aACNA,aADM,EAENE,QAAQ,CAACxL,GAAT,CAAa,UAAC6F,OAAD;wBAAA,oBACTA,OADS;0BAEZwB,KAAK,EAAE;4BACHC,gBAAgB,EAAED,KAAK,CAACC,gBADrB;4BAEHxB,WAAW,EAAEuB,KAAK,CAACvB;;;uBAJxB,CAFM,CAAb;;oBAVD;oBAAA;sBAAA;;;;;YAAA,4CAGeiD,MAHf;;UAAA;YAAA;cAAA;cAAA;;;YAAA;;UAAA;YAAA;YAAA;;UAAA;YAsBCkC,UAtBD,kCAuBE9D,iBAAQ,CAACmC,YAvBX,IAuB0BgC,aAvB1B;YAyBH5F,SAAS,CAAC+F,aAAV,CAAwBR,UAAxB;YACA1K,OAAO,CAACmL,IAAR,CAAa,4CAAb;YA1BG,kCA2BIT,UA3BJ;;UAAA;UAAA;YAAA;;;;;;;;ICoBMU,SAAb;EAgBI,mBACYC,OADZ,EAEWC,YAFX,EAGW7C,WAHX,EAIWpC,WAJX,EAKWkF,YALX,EAMW1F,cANX,EAOW8B,aAPX,EAQW6D,cARX,EASWC,eATX,EAUYC,sBAVZ;IACY,YAAA,GAAAL,OAAA;IACD,iBAAA,GAAAC,YAAA;IACA,gBAAA,GAAA7C,WAAA;IACA,gBAAA,GAAApC,WAAA;IACA,iBAAA,GAAAkF,YAAA;IACA,mBAAA,GAAA1F,cAAA;IACA,kBAAA,GAAA8B,aAAA;IACA,mBAAA,GAAA6D,cAAA;IACA,oBAAA,GAAAC,eAAA;IACC,2BAAA,GAAAC,sBAAA;IAxBJ,YAAA,GAGF,EAHE;IAIA,yBAAA,GAEJ,EAFI;IAIA,mBAAA,GAEJ,EAFI;;;;;;;EAVZ;;EAAA,OAgCiB1D,UAhCjB;;EAAA;IAAA,0FAgCW;MAAA;QAAA;UAAA;YAAA;cACH,KAAK0C,UAAL,GAAkB7L,SAAlB;cACA,KAAK8M,oBAAL,GAA4B,EAA5B;cACA,KAAKC,cAAL,GAAsB,EAAtB;;YAHG;YAAA;cAAA;;;;KAhCX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;;EAAA,OAiDiBC,MAjDjB;;EAAA;IAAA,sFAiDW,kBACHC,KADG,EAEHC,QAFG,EAGHC,QAHG,EAIHC,kBAJG,EAKHC,SALG,EAMHC,YANG,EAOHC,mBAPG;MAAA;MAAA;QAAA;UAAA;YAAA;cASH,KAAKC,GAAL,GAAW,IAAIC,oBAAJ,EAAX;cACMC,UAVH,GAUgB,KAAKF,GAAL,aAVhB;cAYGG,kBAZH,GAYwB,KAAKnB,OAAL,CAAaoB,YAAb,CAA0BC,cAA1B,CAAyCX,QAAzC,CAZxB;cAaGY,gBAbH,GAasBH,kBAAkB,CAACI,2BAAnB,CAA+CL,UAA/C,CAbtB;cAeGM,cAfH,GAeoB,KAAKxB,OAAL,CAAayB,kBAAb,CAAgC,KAAKzB,OAAL,CAAayB,kBAAb,CAAgCf,QAAhC,CAAhC,CAfpB;cAiBGgB,cAjBH,GAiBoB,CAAC,CAACX,mBAjBtB;cAmBGY,aAnBH,GAmB0C;gBACzCC,YAAY,EAAEjB,QAAQ,CAACtF,IADkB;gBAEzCoF,KAAK,EAAEA,KAAK,CAACoB,WAAN,EAFkC;gBAGzCH,cAAc,EAAdA,cAHyC;gBAIzChB,QAAQ,EAAEc,cAJ+B;gBAKzCM,SAAS,EAAE,KAAK9B,OAAL,CAAa+B,cAAb,CAA4B,KAAKf,GAAL,YAA5B,CAL8B;gBAMzCM,gBAAgB,EAAhBA,gBANyC;gBAOzCV,kBAAkB,EAAlBA,kBAPyC;gBAQzCC,SAAS,EAATA,SARyC;gBASzCC,YAAY,EAAZA;eA5BD;cAAA;cAAA,OA+BoB,KAAK9F,WAAL,CAAiBgH,cAAjB,CAAgCL,aAAhC,CA/BpB;;YAAA;cA+BGtH,QA/BH;;cAiCH,IAAIA,QAAQ,CAAC4H,aAAb,EAA4B;;gBAEpBC,iBAFoB,GAEA,KAAKlC,OAAL,CAAaoB,YAAb,CAA0BC,cAA1B,CAAyChH,QAAQ,CAAC4H,aAAlD,CAFA;gBAGxBE,cAAc,CAACC,OAAf,CACI5M,0BAA0B,CAAC6E,QAAQ,CAAC5E,EAAV,CAD9B,EAEIyM,iBAAiB,CAACX,2BAAlB,CAA8CL,UAA9C,CAFJ;;;cApCD,kCA0CI7G,QA1CJ;;YAAA;YAAA;cAAA;;;;KAjDX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAmGiBgI,YAnGjB;;EAAA;IAAA,4FAmGW,kBAAmBC,WAAnB;MAAA;MAAA;QAAA;UAAA;YAAA;cACH,KAAKtH,WAAL,CAAiBuH,SAAjB,CAA2B;gBAAED,WAAW,EAAXA;eAA7B;cADG;cAAA,OAEkB,KAAKtH,WAAL,CAAiBwH,MAAjB,EAFlB;;YAAA;cAEGC,MAFH;cAAA,kCAGI,KAAKzH,WAAL,CAAiB0H,cAAjB,CAAgCD,MAAM,CAACE,GAAvC,EAA4C;gBAC/CjB,cAAc,EAAE;eADb,CAHJ;;YAAA;YAAA;cAAA;;;;KAnGX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;EAAA,OAqHiBkB,MArHjB;;EAAA;IAAA,sFAqHW,kBAAahB,YAAb,EAAiCnB,KAAjC,EAAgDC,QAAhD,EAAkEmC,GAAlE;MAAA;MAAA;QAAA;UAAA;YAAA;cACGrB,cADH,GACoB,KAAKxB,OAAL,CAAayB,kBAAb,CAAgC,KAAKzB,OAAL,CAAayB,kBAAb,CAAgCf,QAAhC,CAAhC,CADpB;cAEGoC,YAFH,GAEoC;gBACnClB,YAAY,EAAZA,YADmC;gBAEnCnB,KAAK,EAAEA,KAAK,CAACoB,WAAN,EAF4B;gBAGnCnB,QAAQ,EAAEc,cAHyB;gBAInCqB,GAAG,EAAHA;eAND;cAAA;cAAA,OASG,KAAK7H,WAAL,CAAiB+H,SAAjB,CAA2BD,YAA3B,CATH;;YAAA;cAAA;cAAA,OAUqB,KAAK9H,WAAL,CAAiBwH,MAAjB,EAVrB;;YAAA;cAUGQ,QAVH,kBAUgDL,GAVhD;cAAA;cAAA,OAaG,KAAKM,6BAAL,CAAmCD,QAAnC,EAA6CtC,QAA7C,CAbH;;YAAA;cAAA;cAAA,OAcU,KAAK1F,WAAL,CAAiBC,WAAjB,CAA6B+H,QAA7B,CAdV;;YAAA;cAAA;;YAAA;YAAA;cAAA;;;;KArHX;;IAAA;MAAA;;;IAAA;;;;;;;;EAAA,OA0IiBE,aA1IjB;;EAAA;IAAA,6FA0IW;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACe,KAAKlI,WAAL,CAAiBwH,MAAjB,EADf;;YAAA;cACG/M,EADH,kBAC0CkN,GAD1C;cAEGQ,eAFH,GAEqBhB,cAAc,CAACiB,OAAf,CAAuB5N,0BAA0B,CAACC,EAAD,CAAjD,CAFrB;cAAA;cAAA,OAGwB,KAAKuF,WAAL,CAAiBC,WAAjB,CAA6BxF,EAA7B,CAHxB;;YAAA;cAGG4N,WAHH,kBAG0DpB,aAH1D;;cAAA,MAKC,CAACoB,WAAD,IAAgB,CAACF,eALlB;gBAAA;gBAAA;;;cAAA,MAKyCzN,wBALzC;;YAAA;cAOG4N,kBAPH,GAOwB,KAAKtD,OAAL,CAAaoB,YAAb,CAA0BC,cAA1B,CAAyCgC,WAAzC,CAPxB;cAQCnC,UARD,GAQcoC,kBAAkB,CAACC,2BAAnB,CAA+CJ,eAA/C,CARd;cASH,KAAKnC,GAAL,GAAW,KAAKhB,OAAL,CAAaiB,SAAb,CAAuBuC,OAAvB,CAA+BtC,UAA/B,CAAX;;YATG;YAAA;cAAA;;;;KA1IX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;EAAA,OA6JWuC,yBA7JX,GA6JW,mCAA0BlL,KAA1B;IACH,IAAI,CAAC,KAAKyI,GAAV,EAAe;MACX,IAAI,KAAKX,sBAAT,EAAiC;QAC7B,KAAKA,sBAAL,CAA4B,IAAI3K,wBAAJ,EAA5B;;;MAGJ,MAAM,IAAIA,wBAAJ,EAAN;;;IAGJ,IAAMgO,SAAS,GAAG,IAAI,KAAK1D,OAAL,CAAaoB,YAAjB,EAAlB;IAEA,IAAMuC,aAAa,GAAGD,SAAS,CAACE,0BAAV,CAAqCrL,KAArC,CAAtB;IACA,IAAMsL,YAAY,GAAG,KAAK7D,OAAL,CAAa+B,cAAb,CAA4B,KAAKf,GAAL,CAAS8C,cAAT,CAAwBJ,SAAS,CAAC9Q,GAAV,EAAxB,CAA5B,CAArB;IAEA,OAAO;MAAE+Q,aAAa,EAAbA,aAAF;MAAiBE,YAAY,EAAZA;KAAxB;;;;;;;;;;;EA3KR,OAqLWE,uBArLX,GAqLW;QAA0BF,oBAAAA;QAAcF,qBAAAA;;IAC3C,IAAI,CAAC,KAAK3C,GAAV,EAAe;MACX,IAAI,KAAKX,sBAAT,EAAiC;QAC7B,KAAKA,sBAAL,CAA4B,IAAI3K,wBAAJ,EAA5B;;;MAGJ,MAAM,IAAIA,wBAAJ,EAAN;;;IAGJ,IAAMgO,SAAS,GAAG,KAAK1C,GAAL,CAASnC,oBAAT,CAA8BgF,YAA9B,CAAlB;IACA,IAAMG,aAAa,GAAG,KAAKhE,OAAL,CAAaoB,YAAb,CAA0BoC,OAA1B,CAAkCE,SAAlC,EAA6CO,0BAA7C,CAAwEN,aAAxE,CAAtB;IAEA,OAAOK,aAAP;;;;;;;EAjMR,OAuMiBE,OAvMjB;;EAAA;IAAA,uFAuMW;MAAA;QAAA;UAAA;YAAA;cACH,KAAKlD,GAAL,GAAWxN,SAAX;cACA,KAAK2Q,OAAL,GAAe,EAAf;cACA,KAAKnJ,WAAL,CAAiBuH,SAAjB,CAA2B;gBACvBD,WAAW,EAAE9O,SADU;gBAEvB4Q,YAAY,EAAE5Q;eAFlB;cAHG;cAAA,OAOG,KAAKwH,WAAL,CAAiBqJ,UAAjB,EAPH;;YAAA;YAAA;cAAA;;;;KAvMX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;;;;;;;;EAAA,OAkOiB1K,eAlOjB;;EAAA;IAAA,gGAkOW,kBACHC,WADG,EAEHK,OAFG,EAGHf,QAHG,EAIHc,UAJG;MAAA;QAAA;UAAA;YAAA;cAAA,IASE,KAAKgH,GATP;gBAAA;gBAAA;;;cAAA,MASkBtL,wBATlB;;YAAA;cAAA,kCAUIiE,eAAe,CAACC,WAAD,EAAcK,OAAd,EAAuBf,QAAvB,EAAiC,IAAjC,EAAuC,KAAK8G,OAAL,CAAa3E,IAAb,EAAvC,EAA4DrB,UAA5D,CAVnB;;YAAA;YAAA;cAAA;;;;KAlOX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;EAAA,OAyPiBsK,eAzPjB;;EAAA;IAAA,+FAyPW,kBAAsBhF,YAAtB;MAAA;QAAA;UAAA;YAAA;cAAA,IAAsBA,YAAtB;gBAAsBA,YAAtB,GAA8C,KAA9C;;;cAAA,MACC,CAAC,KAAKD,UAAN,IAAoBC,YADrB;gBAAA;gBAAA;;;cAAA;cAAA,OACyCC,qBAAqB,CAAC,IAAD,CAD9D;;YAAA;YAAA;cAAA;;;;KAzPX;;IAAA;MAAA;;;IAAA;;;;;;;;EAAA,OAiQWM,aAjQX,GAiQW,uBAAc0E,KAAd;IACH,KAAKlF,UAAL,GAAkBkF,KAAlB;;;;;;;;EAlQR,OAyQiBC,uBAzQjB;;EAAA;IAAA,uGAyQW;MAAA;;;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACgB,KAAKtH,SAAL,EADhB;;YAAA;cACCC,MADD;cAAA;cAAA,OAGoD9F,OAAO,CAACC,GAAR,CACnD6F,MAAM,CAAC/I,GAAP;gBAAA,uEACI,kBAAOqH,KAAP;kBAAA;oBAAA;sBAAA;wBAAA;0BAAA;0BAAA,OACU,KAAI,CAAC2B,WAAL,CACDuC,kBADC,CAEElE,KAAK,CAACvB,WAFR,EAGE,CAAC,gBAAD,CAHF,EAIE,EAJF,EAKE;4BAAEvI,QAAQ,EAAEN,yBAAgB,CAACqM;2BAL/B,EAMEjC,KAAK,CAACC,gBANR,EAQD/D,IARC,CAQI,UAACiI,QAAD;4BACF,IAAI;8BACA,OAAOA,QAAQ,CAAC,CAAD,CAAR,CAAYxL,GAAZ,CAAgB,UAAC6F,OAAD;gCACnB,oBACOA,OADP;kCAEIwB,KAAK,EAAE;oCACHC,gBAAgB,EAAED,KAAK,CAACC,gBADrB;oCAEHxB,WAAW,EAAEuB,KAAK,CAACvB;;;+BALxB,CAAP;6BADJ,CAUE,OAAO3C,CAAP,EAAU;;8BAER,OAAO,EAAP;;2BArBN,WAwBK;4BAAA,OAAM,EAAN;2BAxBL,CADV;;wBAAA;0BAAA;;wBAAA;wBAAA;0BAAA;;;;iBADJ;;gBAAA;kBAAA;;kBADmD,EA6BrDI,IA7BqD,CA6BhD,UAACiI,QAAD;gBAAA,OAAcA,QAAQ,CAAC3L,IAAT,EAAd;eA7BgD,CAHpD;;YAAA;cAGCwQ,mBAHD;cAiCH,KAAK5I,aAAL,gDACKN,iBAAQ,CAACmC,YADd,IAC6B+G,mBAD7B,wBAGK9M,IAHL,CAGU;gBAAA,OAAM+M,KAAK,CAAC,qCAAD,CAAX;eAHV,WAIW;gBAAA,OAAM/P,OAAO,CAACuD,KAAR,CAAc,6BAAd,CAAN;eAJX;;YAjCG;YAAA;cAAA;;;;KAzQX;;IAAA;MAAA;;;IAAA;;;;;;;;;;EAAA,OAuTiB2D,aAvTjB;;EAAA;IAAA,6FAuTW,mBAAoBpJ,OAApB,EAAyCkS,cAAzC;MAAA;;MAAA;;MAAA;QAAA;UAAA;YAAA;cAAA,IACE,KAAK3D,GADP;gBAAA;gBAAA;;;cAAA,MACkBtL,wBADlB;;YAAA;cAAA,KAICiP,cAJD;gBAAA;gBAAA;;;cAAA;cAAA,OAKqC,KAAK3J,WAAL,CAAiBC,WAAjB,CAA6B0J,cAA7B,CALrC;;YAAA;cAKKC,sBALL,mBAKmF9C,SALnF;cAMC+C,MAAM,GAAG,KAAK7E,OAAL,CAAa8E,gBAAb,CAA8BF,sBAA9B,CAAT;cAND;cAAA;;YAAA;cAQCC,MAAM,GAAG,KAAK7D,GAAL,YAAT;;YARD;cAWC+D,cAXD,GAWuC,EAXvC;cAAA,uBAamBvS,MAAM,CAACqB,IAAP,CAAYpB,OAAZ,CAbnB;;YAAA;cAAA;gBAAA;gBAAA;;;cAaMuS,SAbN;cAcKpS,GAdL,GAcWoS,SAdX;cAAA,gBAeSpS,GAfT;cAAA,oCAgBU2I,iBAAQ,CAACC,mBAhBnB,0BAuCUD,iBAAQ,CAACmC,YAvCnB;cAAA;;YAAA;cAiBSqH,cAAc,CAACnS,GAAD,CAAd,GAAuBH,OAAO,CAACG,GAAD,CAAP,CAClBwB,GADkB,CACd,UAACmD,CAAD;gBAAA,oBACEA,CADF;kBAED0N,UAAU,EAAE1N,CAAC,CAACoE;;eAHC,EAKlBvH,GALkB,CAMf,UAACmD,CAAD;gBAAA,OACC;kBACG8D,IAAI,EAAE9D,CAAC,CAAC8D,IADX;kBAEG6J,SAAS,EAAE3N,CAAC,CAAC2N,SAFhB;kBAGGD,UAAU,EAAE1N,CAAC,CAAC0N,UAHjB;kBAIGhG,mBAAmB,EAAEgC,oBAAS,CAACkE,0BAAV,CACjB;oBACIxJ,cAAc,EAAEpE,CAAC,CAACoE,cADtB;oBAEIF,KAAK,EAAElE,CAAC,CAACkE;mBAHI,EAKjBoJ,MALiB;iBALzB;eANe,CAAvB;cAjBT;;YAAA;cAwCSE,cAAc,CAACnS,GAAD,CAAd,GAAuBH,OAAO,CAACG,GAAD,CAAP,CAClBwB,GADkB,CACd,UAACmD,CAAD;gBAAA,oBACEA,CADF;kBAED0N,UAAU,EAAE,MAAI,CAACjF,OAAL,CAAayB,kBAAb,CACRvO,IAAI,CAACE,SAAL,CAAe;oBACXuI,cAAc,EAAEpE,CAAC,CAACoE,cADP;oBAEXF,KAAK,EAAElE,CAAC,CAACkE;mBAFb,CADQ;;eAHG,EAUlB3H,MAVkB,CAWf,UAACyD,CAAD;gBAAA;;gBAAA,OACI,CAAC,MAAI,CAAC8H,UAAN,IACA,2BAAC,MAAI,CAACA,UAAL,CAAgB9D,iBAAQ,CAACmC,YAAzB,CAAD,aAAC,sBAAwC0H,IAAxC,CAA6C,UAAC3N,CAAD;kBAAA,OAAOA,CAAC,CAACwN,UAAF,KAAiB1N,CAAC,CAAC0N,UAA1B;iBAA7C,CAAD,CAFJ;eAXe,EAelB7Q,GAfkB,CAgBf,UAACmD,CAAD;gBAAA,OACC;kBACG8D,IAAI,EAAE9D,CAAC,CAAC8D,IADX;kBAEG6J,SAAS,EAAE3N,CAAC,CAAC2N,SAFhB;kBAGGD,UAAU,EAAE1N,CAAC,CAAC0N,UAHjB;kBAIGhG,mBAAmB,EAAEgC,oBAAS,CAACkE,0BAAV,CACjB;oBACIxJ,cAAc,EAAEpE,CAAC,CAACoE,cADtB;oBAEIF,KAAK,EAAElE,CAAC,CAACkE;mBAHI,EAKjBoJ,MALiB;iBALzB;eAhBe,CAAvB;cAxCT;;YAAA;cAAA;cAAA;cAAA;;YAAA;cAAA;cAAA,OA0EG,KAAKzH,WAAL,CAAiBiI,aAAjB,CAA+BN,cAA/B,EAA+CJ,cAA/C,CA1EH;;YAAA;YAAA;cAAA;;;;KAvTX;;IAAA;MAAA;;;IAAA;;;;;;;;EAAA,OAwYiBW,gBAxYjB;;EAAA;IAAA,gGAwYW,mBAAuBf,KAAvB;MAAA;;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IACE,KAAKvD,GADP;gBAAA;gBAAA;;;cAAA,MACkBtL,wBADlB;;YAAA;cAECmP,MAFD,GAEsB,KAAK7D,GAAL,YAFtB;cAICuE,YAJD,sCAKEhK,iBAAQ,CAACmC,YALX,6BAK0B6G,KAAK,CAAChJ,iBAAQ,CAACmC,YAAV,CAL/B,qBAK0B,sBACnB5J,MADmB,CACZ,UAAC0R,CAAD;gBAAA,OAAOA,CAAP;eADY,EAEpBpR,GAFoB,CAEhB,UAACoR,CAAD;gBACD,OAAO;kBACH/J,KAAK,EAAE+J,CAAC,CAAC/J,KADN;kBAEHE,cAAc,EAAE6J,CAAC,CAAC7J;iBAFtB;eAHiB,CAL1B;;;cAiBCsD,mBAjBD,GAiBuBgC,oBAAS,CAACkE,0BAAV,CAAqCI,YAArC,EAAmDV,MAAnD,CAjBvB;;cAoBCE,cApBD,GAoBuC;gBACtC1J,IAAI,EAAEkJ,KAAK,CAAClJ,IAD0B;gBAEtC6J,SAAS,EAAEX,KAAK,CAACW,SAFqB;gBAGtCjG,mBAAmB,EAAnBA;eAvBD;cAyBH,KAAK7B,WAAL,CAAiBqI,qBAAjB,CAAuCV,cAAvC;;YAzBG;YAAA;cAAA;;;;KAxYX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;EAAA,OA2aiB7J,YA3ajB;;EAAA;IAAA,4FA2aW,mBAAmBwK,WAAnB,EAAsCxL,WAAtC,EAAyDwB,gBAAzD;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IACE,KAAKsF,GADP;gBAAA;gBAAA;;;cAAA,MACkBtL,wBADlB;;YAAA;cAAA;cAAA,OAGiB,KAAKiQ,sBAAL,CAA4BzL,WAA5B,EAAyCwB,gBAAzC,CAHjB;;YAAA;cAGCkK,MAHD,mBAG6EhT,GAH7E;cAAA;cAAA,OAIiC,KAAKoI,WAAL,CAAiBC,WAAjB,CAA6ByK,WAA7B,CAJjC;;YAAA;cAICG,sBAJD,mBAI4E/D,SAJ5E;cAKCgE,gBALD,GAKoB,KAAK9F,OAAL,CAAa8E,gBAAb,CAA8Be,sBAA9B,CALpB;cAOCE,sBAPD,GAO0B9E,oBAAS,CAAC+E,2BAAV,CAAsCJ,MAAtC,EAA8CE,gBAA9C,CAP1B;cAQCG,OARD,GAQgC;gBAC/BC,eAAe,EAAEH,sBADc;gBAE/BL,WAAW,EAAEA;eAVd;cAAA;cAAA,OAYG,KAAKtI,WAAL,CAAiB+I,YAAjB,CAA8BjM,WAA9B,EAA2C+L,OAA3C,EAAoDvK,gBAApD,CAZH;;YAAA;YAAA;cAAA;;;;KA3aX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;EAAA,OAociB0K,iBApcjB;;EAAA;IAAA,iGAocW,mBACHlM,WADG,EAEHmM,OAFG,EAGH1K,cAHG,EAIHD,gBAJG,EAKH4K,gBALG;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IAOE,KAAKtF,GAPP;gBAAA;gBAAA;;;cAAA,MAOkBtL,wBAPlB;;YAAA;cAAA;cAAA,OAS4B,KAAKiQ,sBAAL,CAA4BzL,WAA5B,EAAyCwB,gBAAzC,CAT5B;;YAAA;cASCyF,kBATD;cAWCwC,aAXD,GAWiBxC,kBAAkB,CAACyC,0BAAnB,CAA8CyC,OAA9C,CAXjB;cAAA,gBAYwBlF,kBAZxB;cAAA;cAAA,OAagB,KAAKnG,WAAL,CAAiBwH,MAAjB,EAbhB;;YAAA;cAAA,gCAa2CG,GAb3C;cAAA;gBAaC4D,MAbD;;cAYCC,oBAZD,iBAY2C5C,0BAZ3C;cAgBC6C,IAhBD,GAgBQ;gBACP9K,cAAc,EAAdA,cADO;gBAEPhK,QAAQ,EAAEN,yBAAgB,CAACqM,YAFpB;gBAGPC,YAAY,EAAEC,qBAAY,CAAC8I,OAHpB;gBAIPjJ,WAAW,EAAE;eApBd;cAuBCwI,OAvBD,GAuB+B;gBAC9BvU,IAAI,EAAEiS,aADwB;gBAE9BgD,cAAc,EAAEF,IAFc;gBAG9BG,eAAe,EAAEJ;eA1BlB;cAAA,mCA6BI,KAAKvG,YAAL,CAAkB4G,gBAAlB,CAAmC3M,WAAnC,EAAgD+L,OAAhD,EAAyDvK,gBAAzD,EAA2E4K,gBAA3E,CA7BJ;;YAAA;YAAA;cAAA;;;;KApcX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;EAAA,OA8eiBQ,2BA9ejB;;EAAA;IAAA,2GA8eW,mBACH5M,WADG,EAEHxI,IAFG,EAGHiK,cAHG,EAIHD,gBAJG,EAKH4K,gBALG;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IAOE,KAAKtF,GAPP;gBAAA;gBAAA;;;cAAA,MAOkBtL,wBAPlB;;YAAA;cAAA;cAAA,OAS4B,KAAKiQ,sBAAL,CAA4BzL,WAA5B,EAAyCwB,gBAAzC,CAT5B;;YAAA;cASCyF,kBATD;cAAA,gBAUiBA,kBAVjB;cAAA,gBAUoE4F,UAVpE;cAAA;cAAA,OAUqFrV,IAAI,CAACsV,WAAL,EAVrF;;YAAA;cAAA;cAAA;cAUCrD,aAVD,iBAUoCpC,2BAVpC;cAAA,gBAWwBJ,kBAXxB;cAAA;cAAA,OAYgB,KAAKnG,WAAL,CAAiBwH,MAAjB,EAZhB;;YAAA;cAAA,gCAY2CG,GAZ3C;cAAA,gBAaWjR,IAAI,CAACM,IAbhB;cAAA,gBAceN,IAAI,CAACuV,YAdpB;cAAA,gBAeOvV,IAAI,CAACwV,IAfZ;cAAA;gBAYCX,MAZD;gBAaCY,QAbD;gBAcCF,YAdD;gBAeCC,IAfD;;cAWCV,oBAXD,iBAW2C5C,0BAX3C;cAkBC6C,IAlBD,GAkBQ;gBACP9K,cAAc,EAAdA,cADO;gBAEPhK,QAAQ,EAAEN,yBAAgB,CAACqM,YAFpB;gBAGPC,YAAY,EAAEC,qBAAY,CAAC8I,OAHpB;gBAIPjJ,WAAW,EAAE/L,IAAI,CAAC0V;eAtBnB;cAyBCnB,OAzBD,GAyB+B;gBAC9BvU,IAAI,EAAEiS,aADwB;gBAE9BgD,cAAc,EAAEF,IAFc;gBAG9BG,eAAe,EAAEJ;eA5BlB;cAAA,mCA+BI,KAAKvG,YAAL,CAAkB4G,gBAAlB,CAAmC3M,WAAnC,EAAgD+L,OAAhD,EAAyDvK,gBAAzD,EAA2E4K,gBAA3E,CA/BJ;;YAAA;YAAA;cAAA;;;;KA9eX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;;EAAA,OA2hBiBe,gCA3hBjB;;EAAA;IAAA,gHA2hBW,mBACHnN,WADG,EAEHxI,IAFG,EAGHiK,cAHG,EAIHgC,YAJG,EAKHjC,gBALG,EAMH4K,gBANG;MAAA;QAAA;UAAA;YAAA;cAAA,IAQE,KAAKtF,GARP;gBAAA;gBAAA;;;cAAA,MAQkBtL,wBARlB;;YAAA;cAAA,gBAUI,IAVJ;cAAA,gBAWCwE,WAXD;cAAA,gBAYK6M,UAZL;cAAA;cAAA,OAYsBrV,IAAI,CAACsV,WAAL,EAZtB;;YAAA;cAAA;cAAA;cAAA,gBAaC;gBACIrL,cAAc,EAAdA,cADJ;gBAEIhK,QAAQ,EAAEN,yBAAgB,CAACqM,YAF/B;gBAGIC,YAAY,EAAZA,YAHJ;gBAIIF,WAAW,EAAE/L,IAAI,CAAC0V;eAjBvB;cAAA;cAAA,OAoBoB,KAAKpM,WAAL,CAAiBwH,MAAjB,EApBpB;;YAAA;cAAA,gCAoB+CG,GApB/C;cAAA,gBAqBejR,IAAI,CAACM,IArBpB;cAAA;gBAoBKuU,MApBL;gBAqBKY,QArBL;;cAAA,gBAuBCzL,gBAvBD;cAAA,iBAwBC4K,gBAxBD;cAAA,iDAUSgB,eAVT;;YAAA;YAAA;cAAA;;;;KA3hBX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;;EAAA,OAkkBiBC,cAlkBjB;;EAAA;IAAA,8FAkkBW,mBACHrN,WADG,EAEHxI,IAFG,EAGH+U,IAHG,EAIHe,WAJG,EAKH9L,gBALG,EAMH4K,gBANG;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IAQE,KAAKtF,GARP;gBAAA;gBAAA;;;cAAA,MAQkBtL,wBARlB;;YAAA;cAAA;cAAA,OAU4B,KAAKiQ,sBAAL,CAA4BzL,WAA5B,EAAyCwB,gBAAzC,CAV5B;;YAAA;cAUCyF,kBAVD;cAWCwC,aAXD,GAWiBxC,kBAAkB,CAACyC,0BAAnB,CAA8ClS,IAA9C,CAXjB;cAYC8U,oBAZD,GAYwBrF,kBAAkB,CAACyC,0BAAnB,CAA8C4D,WAA9C,CAZxB;cAcCvB,OAdD,GAc+B;gBAC9BvU,IAAI,EAAEiS,aADwB;gBAE9BgD,cAAc,EAAEF,IAFc;gBAG9BG,eAAe,EAAEJ;eAjBlB;cAAA,mCAoBI,KAAKvG,YAAL,CAAkB4G,gBAAlB,CAAmC3M,WAAnC,EAAgD+L,OAAhD,EAAyDvK,gBAAzD,EAA2E4K,gBAA3E,CApBJ;;YAAA;YAAA;cAAA;;;;KAlkBX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;EAAA,OAkmBiB/I,mBAlmBjB;;EAAA;IAAA,mGAkmBW,mBACHrD,WADG,EAEHxI,IAFG,EAGHiV,cAHG,EAIHC,eAJG,EAKHa,YALG;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IAKHA,YALG;gBAKHA,YALG,GAKqB,KALrB;;;cAAA;cAAA,OAOkB,KAAKrK,WAAL,CAAiBsK,kBAAjB,CAAoCxN,WAApC,EAAiDyM,cAAjD,CAPlB;;YAAA;cAOCgB,QAPD;;cAAA,MAQC,CAACF,YAAD,IAAiBE,QAAQ,CAACjT,MAAT,GAAkB,CARpC;gBAAA;gBAAA;;;cASCC,OAAO,CAACC,GAAR,mBAA4B1B,IAAI,CAACE,SAAL,CAAeuT,cAAf,CAA5B;cATD,mCAUQgB,QAAQ,CAAC,CAAD,CAAR,CAAYC,QAVpB;;YAAA;cAAA;cAAA,OAaW,KAAKL,cAAL,CACFrN,WADE,EAEFxI,IAFE,EAGFiV,cAHE,EAIFC,eAJE,EAKFpT,SALE,EAMFiU,YAAY,IAAIE,QAAQ,CAACjT,MAAT,GAAkB,CAAlC,GAAsCiT,QAAQ,CAAC,CAAD,CAAR,CAAYC,QAAlD,GAA6DpU,SAN3D;yBAOE,UAACyE,GAAD;gBACJtD,OAAO,CAACuD,KAAR,iCAA4ChF,IAAI,CAACE,SAAL,CAAeuT,cAAf,CAA5C,YAAmF1O,GAAnF;gBACA,MAAMA,GAAN;eATE,CAbX;;YAAA;cAAA,mDAwBG2P,QAxBH;;YAAA;YAAA;cAAA;;;;KAlmBX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;;EAAA,OAwoBiBN,eAxoBjB;;EAAA;IAAA,+FAwoBW,mBACHpN,WADG,EAEHxI,IAFG,EAGH+U,IAHG,EAIHe,WAJG,EAKH9L,gBALG,EAMH4K,gBANG;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IAQE,KAAKtF,GARP;gBAAA;gBAAA;;;cAAA,MAQkBtL,wBARlB;;YAAA;cAAA;cAAA,OAS4B,KAAKiQ,sBAAL,CAA4BzL,WAA5B,EAAyCwB,gBAAzC,CAT5B;;YAAA;cASCyF,kBATD;cAUCwC,aAVD,GAUiBxC,kBAAkB,CAACI,2BAAnB,CAA+C7P,IAA/C,CAVjB;cAWC8U,oBAXD,GAWwBrF,kBAAkB,CAACyC,0BAAnB,CAA8C4D,WAA9C,CAXxB;cAaCvB,OAbD,GAa+B;gBAC9BvU,IAAI,EAAEiS,aADwB;gBAE9BgD,cAAc,EAAEF,IAFc;gBAG9BG,eAAe,EAAEJ;eAhBlB;cAAA,mCAmBI,KAAKvG,YAAL,CAAkB4G,gBAAlB,CAAmC3M,WAAnC,EAAgD+L,OAAhD,EAAyDvK,gBAAzD,EAA2E4K,gBAA3E,CAnBJ;;YAAA;YAAA;cAAA;;;;KAxoBX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;;EAAA,OAyqBiBuB,WAzqBjB;;EAAA;IAAA,2FAyqBW,mBAA2B3N,WAA3B,EAA8C0N,QAA9C,EAA8DlM,gBAA9D;MAAA;;MAAA;QAAA;UAAA;YAAA;cAAA,IACE,KAAKsF,GADP;gBAAA;gBAAA;;;cAAA,MACkBtL,wBADlB;;YAAA;cAAA;cAAA,OAGgD2B,OAAO,CAACC,GAAR,CAAY,CAC3D,KAAK8F,WAAL,CAAiB0K,cAAjB,CAAgC5N,WAAhC,EAA6C0N,QAA7C,EAAuDlM,gBAAvD,CAD2D,EAE3D,KAAKiK,sBAAL,CAA4BzL,WAA5B,EAAyCwB,gBAAzC,CAF2D,CAAZ,CAHhD;;YAAA;cAAA;cAGEqM,gBAHF;cAGoBzE,kBAHpB;cAAA,mCAQIA,kBAAkB,CAACW,0BAAnB,CAA8C8D,gBAAgB,CAACrW,IAA/D,CARJ;;YAAA;YAAA;cAAA;;;;KAzqBX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;EAAA,OA0rBiBsW,YA1rBjB;;EAAA;IAAA,4FA0rBW,mBAAmB9N,WAAnB,EAAsC0N,QAAtC,EAAsDlM,gBAAtD;MAAA;;MAAA;QAAA;UAAA;YAAA;cAAA,IACE,KAAKsF,GADP;gBAAA;gBAAA;;;cAAA,MACkBtL,wBADlB;;YAAA;cAAA;cAAA,OAGgD2B,OAAO,CAACC,GAAR,CAAY,CAC3D,KAAK8F,WAAL,CAAiB0K,cAAjB,CAAgC5N,WAAhC,EAA6C0N,QAA7C,EAAuDlM,gBAAvD,CAD2D,EAE3D,KAAKiK,sBAAL,CAA4BzL,WAA5B,EAAyCwB,gBAAzC,CAF2D,CAAZ,CAHhD;;YAAA;cAAA;cAGEqM,gBAHF;cAGoBzE,kBAHpB;cAAA,mCAQIA,kBAAkB,CAACC,2BAAnB,CAA+CwE,gBAAgB,CAACrW,IAAhE,CARJ;;YAAA;YAAA;cAAA;;;;KA1rBX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;EAAA,OA+sBiBwL,SA/sBjB;;EAAA;IAAA,yFA+sBW,mBAAgBpJ,MAAhB,EAAmDwL,YAAnD;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IAAmDA,YAAnD;gBAAmDA,YAAnD,GAA2E,KAA3E;;;cAAA,IACE,KAAK0B,GADP;gBAAA;gBAAA;;;cAAA,MACkBtL,wBADlB;;YAAA;cAGCuS,YAHD,GAGgB/U,IAAI,CAACE,SAAL,CAAeU,MAAf,CAHhB;;;cAAA,MAMC,CAACwL,YAAD,IAAiB,KAAKgB,oBAAL,CAA0B2H,YAA1B,CANlB;gBAAA;gBAAA;;;cAAA,mCAMkE,KAAK3H,oBAAL,CAA0B2H,YAA1B,CANlE;;YAAA;cAAA,KAU4BnU,MAV5B;gBAAA;gBAAA;;;cAAA;cAAA,OAWO,KAAKsJ,WAAL,CAAiB8K,aAAjB,CAA+B,CAAC3M,iBAAQ,CAACC,mBAAV,CAA/B,EAA+D,CAAC1H,MAAM,CAAC6H,cAAR,CAA/D,EACDhE,IADC,CACI,UAACV,GAAD;gBAAA,OAASA,GAAG,CAACsE,iBAAQ,CAACC,mBAAV,CAAZ;eADJ,WAEK,UAACjE,CAAD;gBACH5C,OAAO,CAACuD,KAAR,CAAcX,CAAd;gBACA,OAAO,EAAP;eAJF,CAXP;;YAAA;cAAA;cAAA;cAAA;;YAAA;cAAA,gBAiBC/D,SAjBD;;YAAA;cAUG2U,sBAVH;cAkBGC,iBAlBH,GAkBuBtJ,2BAA2B,CAACqJ,sBAAD,WAACA,sBAAD,GAA2B,EAA3B,EAA+B,KAAKnH,GAApC,CAlBlD;;cAAA,MAmBCoH,iBAAiB,CAAC1T,MAAlB,GAA2B,CAnB5B;gBAAA;gBAAA;;;cAoBCC,OAAO,CAACmL,IAAR,CAAa,+DAAb;cACA,KAAKQ,oBAAL,CAA0BpN,IAAI,CAACE,SAAL,CAAeU,MAAf,CAA1B,IAAoDsU,iBAApD;cArBD,mCAsBQ,KAAK9H,oBAAL,CAA0B2H,YAA1B,CAtBR;;YAAA;cAAA,KA2BCnU,MA3BD;gBAAA;gBAAA;;;cAAA;cAAA,OA4ByBsL,+BAA+B,CAAC,IAAD,EAAOtL,MAAP,EAAe,KAAKuL,UAApB,EAAgCC,YAAhC,CA5BxD;;YAAA;cA4BCb,eA5BD;cAAA;cAAA;;YAAA;cAAA;cAAA,OA8B0B,KAAKrB,WAAL,CAAiBiL,SAAjB,EA9B1B;;YAAA;cA8BC5J,eA9BD,mBA8BwDtB,MA9BxD;;YAAA;cAAA;cAAA,OAiC2BqB,aAAa,CAACC,eAAD,EAAkB,KAAKuC,GAAvB,CAjCxC;;YAAA;cAiCGsH,eAjCH;;cAmCH,KAAKhI,oBAAL,CAA0B2H,YAA1B,IAA0CK,eAA1C;cAnCG,mCAoCIA,eApCJ;;YAAA;YAAA;cAAA;;;;KA/sBX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;EAAA,OA6vBU3C,sBA7vBV;;EAAA;IAAA,sGA6vBI,mBAA6BzL,WAA7B,EAAkDwB,gBAAlD;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IACS,KAAKsF,GADd;gBAAA;gBAAA;;;cAAA,MACyBtL,wBADzB;;YAAA;cAGQ6O,KAHR,GAGgB,KAAKJ,OAAL,CAAaoE,SAAb,CAAuB,UAAC3C,MAAD;gBAAA,OAAYA,MAAM,CAAC1L,WAAP,KAAuBA,WAAnC;eAAvB,CAHhB;;cAAA,MAIQqK,KAAK,KAAK,CAAC,CAJnB;gBAAA;gBAAA;;;cAAA;cAAA,OAKqC,KAAKnH,WAAL,CAAiBoL,gBAAjB,CAAkCtO,WAAlC,EAA+CwB,gBAA/C,CALrC;;YAAA;cAKYwK,eALZ,mBAKuGuC,YALvG;cAOY7C,MAPZ,GAOqB,KAAK5E,GAAL,CAASnC,oBAAT,CAA8BqH,eAA9B,CAPrB;cAQYwC,OARZ,GAQsB,KAAK1I,OAAL,CAAaoB,YAAb,CAA0BoC,OAA1B,CAAkCoC,MAAlC,CARtB;cASQ,KAAKzB,OAAL,CAAapL,IAAb,CAAkB;gBAAEmB,WAAW,EAAXA,WAAF;gBAAewO,OAAO,EAAPA;eAAjC;cATR,mCAUeA,OAVf;;YAAA;cAAA,mCAYe,KAAKvE,OAAL,CAAaI,KAAb,EAAoBmE,OAZnC;;YAAA;YAAA;cAAA;;;;KA7vBJ;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;EAAA,OAsxBiBC,oCAtxBjB;;EAAA;IAAA,oHAsxBW,mBACHhN,cADG,EAEHhK,QAFG,EAGH2N,YAHG;MAAA;QAAA;UAAA;YAAA;cAAA,IAGHA,YAHG;gBAGHA,YAHG,GAGY,KAHZ;;;cAAA,mCAKI,KAAKsJ,4BAAL,CAAkCjN,cAAlC,EAAkDhK,QAAlD,EAA4D2N,YAA5D,CALJ;;YAAA;YAAA;cAAA;;;;KAtxBX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;EAAA,OAsyBiBuJ,2BAtyBjB;;EAAA;IAAA,2GAsyBW,mBACHlN,cADG,EAEH2D,YAFG;MAAA;QAAA;UAAA;YAAA;cAAA,IAEHA,YAFG;gBAEHA,YAFG,GAEY,KAFZ;;;cAAA,mCAII,KAAKsJ,4BAAL,CAAkCjN,cAAlC,EAAkDtK,yBAAgB,CAACyM,OAAnE,EAA4EwB,YAA5E,CAJJ;;YAAA;YAAA;cAAA;;;;KAtyBX;;IAAA;MAAA;;;IAAA;;;EAAA,OA6yBkBsJ,4BA7yBlB;IAAA,4GA6yBY,mBACJjN,cADI,EAEJhK,QAFI,EAGJ2N,YAHI;MAAA;;MAAA;;MAAA;QAAA;UAAA;YAAA;cAAA,IAGJA,YAHI;gBAGJA,YAHI,GAGW,KAHX;;;cAAA;cAAA,OAKe,KAAKpC,SAAL,CAAe;gBAAEvB,cAAc,EAAdA;eAAjB,CALf;;YAAA;cAKAwB,MALA;cAMAjH,YANA,GAMuD,EANvD;cAAA;gBAAA;gBAAA;kBAAA;oBAAA;sBAAA;wBAOKuF,KAPL;wBAAA;wBAAA,OAQqB,MAAI,CAACqN,kBAAL,CACjBrN,KAAK,CAACvB,WADW,EAEjB;0BACIvI,QAAQ,EAARA,QADJ;0BAEIgM,YAAY,EAAEC,qBAAY,CAACC,qBAF/B;0BAGIE,eAAe,EAAE,CAACpC,cAAD;yBALJ,EAOjB,IAPiB,EAQjBF,KAAK,CAACC,gBARW,EASjB4D,YATiB,CARrB;;sBAAA;wBAQIqI,QARJ;;wBAAA,MAqBIA,QAAQ,CAACjT,MAAT,KAAoB,CArBxB;0BAAA;0BAAA;;;wBAAA;wBAAA,OAuBc,MAAI,CAACoU,kBAAL,CACFrN,KAAK,CAACvB,WADJ,EAEF;0BACIvI,QAAQ,EAARA,QADJ;0BAEIgM,YAAY,EAAEC,qBAAY,CAACC;yBAJ7B,EAOF,IAPE,EAQFpC,KAAK,CAACC,gBARJ,EASF4D,YATE,CAvBd;;sBAAA;wBAsBIqI,QAtBJ,mBAkCM7T,MAlCN,CAkCa,UAACiV,KAAD;0BAAA,OAAW,CAACA,KAAK,CAACC,QAAN,CAAejL,eAA3B;yBAlCb;;sBAAA;wBAAA;wBAAA,OAoCiB1G,OAAO,CAACC,GAAR,CACbqQ,QAAQ,CAACvT,GAAT;0BAAA,uEAAa,mBAAO2U,KAAP;4BAAA;8BAAA;gCAAA;kCAAA;oCAAA,gBAEatN,KAAK,CAACC,gBAFnB;oCAAA,gBAGQD,KAAK,CAACvB,WAHd;oCAAA,gBAIK6O,KAAK,CAACnB,QAJX;oCAAA;oCAAA,OAKO,MAAI,CAACC,WAAL,CAAwCpM,KAAK,CAACvB,WAA9C,EAA4D6O,KAAK,CAACnB,QAAlE,CALP;;kCAAA;oCAAA;oCAAA;sCAELlM,gBAFK;sCAGLxB,WAHK;sCAIL0N,QAJK;sCAKLlW,IALK;;;kCAAA;kCAAA;oCAAA;;;;2BAAb;;0BAAA;4BAAA;;4BADa,CApCjB;;sBAAA;wBAoCIA,IApCJ;wBA8CAwE,YAAY,gBAAQA,YAAR,EAAyBxE,IAAzB,CAAZ;;sBA9CA;sBAAA;wBAAA;;;;;cAAA,4CAOcyL,MAPd;;YAAA;cAAA;gBAAA;gBAAA;;;cAAA;;YAAA;cAAA;cAAA;;YAAA;cAAA,mCAgDGjH,YAhDH;;YAAA;YAAA;cAAA;;;;KA7yBZ;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAq2BiB+S,uBAr2BjB;;EAAA;IAAA,uGAq2BW,mBAA8BC,MAA9B;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACkB,KAAKhM,SAAL,EADlB;;YAAA;cACGzB,KADH,mBACoC2J,IADpC,CACyC,UAAC+D,OAAD;gBAAA,OAAaA,OAAO,CAACzN,gBAAR,KAA6BwN,MAA1C;eADzC;;cAAA,IAGEzN,KAHF;gBAAA;gBAAA;;;cAAA,MAIO7F,YAJP;;YAAA;cAOKsE,WAPL,GAOuCuB,KAPvC,CAOKvB,WAPL,EAOkBwB,gBAPlB,GAOuCD,KAPvC,CAOkBC,gBAPlB;;cAAA,IASExB,WATF;gBAAA;gBAAA;;;cAAA,MASqBrE,cATrB;;YAAA;cAAA,IAWE6F,gBAXF;gBAAA;gBAAA;;;cAAA,MAW0B5F,mBAX1B;;YAAA;cAAA;cAAA,OAcO,KAAKgT,kBAAL,CACF5O,WADE,EAEF;gBACIvI,QAAQ,EAAEN,yBAAgB,CAACC,QAD/B;gBAEIqM,YAAY,EAAEC,qBAAY,CAACC;eAJ7B,EAMF,KANE,EAOFqL,MAPE,CAdP;;YAAA;cAaGE,sBAbH,mBAuBD,CAvBC,EAuBExB,QAvBF;cAAA,gBA0BClM,gBA1BD;cAAA,gBA2BCxB,WA3BD;cAAA,gBA4BWkP,sBA5BX;cAAA;cAAA,OA6Ba,KAAKvB,WAAL,CAAwC3N,WAAxC,EAAqDkP,sBAArD,CA7Bb;;YAAA;cAAA;cAAA;gBA0BC1N,gBA1BD;gBA2BCxB,WA3BD;gBA4BC0N,QA5BD;gBA6BClW,IA7BD;;;YAAA;YAAA;cAAA;;;;KAr2BX;;IAAA;MAAA;;;IAAA;;;;;;;;;;EAAA,OA44BiB2X,qBA54BjB;;EAAA;IAAA,qGA44BW,mBAA4B1N,cAA5B;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACgB,KAAKuB,SAAL,CAAe;gBAAEvB,cAAc,EAAdA;eAAjB,CADhB;;YAAA;cACCwB,MADD;;cAAA,MAGCA,MAAM,CAACzI,MAAP,KAAkB,CAHnB;gBAAA;gBAAA;;;cAAA,MAIOqB,yBAJP;;YAAA;cAAA,mCAOIoH,MAAM,CAAC,CAAD,CAPV;;YAAA;YAAA;cAAA;;;;KA54BX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OA25BiBmM,wBA35BjB;;EAAA;IAAA,wGA25BW,mBAA+B3N,cAA/B;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACiB,KAAK0N,qBAAL,CAA2B1N,cAA3B,CADjB;;YAAA;cACGF,KADH;;cAAA,MAGCA,KAAK,IAAIA,KAAK,CAACC,gBAHhB;gBAAA;gBAAA;;;cAAA;cAAA,OAIc,KAAKV,WAAL,CAAiBC,WAAjB,CAA6BQ,KAAK,CAACC,gBAAnC,CAJd;;YAAA;cAAA;;YAAA;cAAA,mCAMQlI,SANR;;YAAA;YAAA;cAAA;;;;KA35BX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;EAAA,OA+6BiBsV,kBA/6BjB;;EAAA;IAAA,kGA+6BW,mBACH5O,WADG,EAEHpG,MAFG,EAGHyV,qBAHG,EAIH7N,gBAJG,EAKH4D,YALG;MAAA;;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IAKHA,YALG;gBAKHA,YALG,GAKqB,KALrB;;;cAOCkK,WAPD,GAOetW,IAAI,CAACE,SAAL,CAAe;gBAC7B8G,WAAW,EAAXA,WAD6B;gBAE7BpG,MAAM,EAANA,MAF6B;gBAG7ByV,qBAAqB,EAArBA,qBAH6B;gBAI7B7N,gBAAgB,EAAhBA;eAJc,CAPf;;cAAA,MAaC,CAAC4D,YAAD,IAAiB,KAAKiB,cAAL,CAAoBiJ,WAApB,CAblB;gBAAA;gBAAA;;;cAAA,mCAa2D,KAAKjJ,cAAL,CAAoBiJ,WAApB,CAb3D;;YAAA;cAAA,mCAeI,KAAKpM,WAAL,CAAiBsK,kBAAjB,CAAoCxN,WAApC,EAAiDpG,MAAjD,EAAyD4H,gBAAzD,EAA2E/D,IAA3E,CAAgF,UAACgQ,QAAD;gBACnF,OAAOtQ,OAAO,CAACC,GAAR,CACHqQ,QAAQ,CAACvT,GAAT;kBAAA,uEAAa,mBAAO2U,KAAP;oBAAA;oBAAA;sBAAA;wBAAA;0BAAA;4BAAA,MACLQ,qBAAqB,IAAIR,KAAK,CAACC,QAAN,CAAepC,eADnC;8BAAA;8BAAA;;;4BAAA;4BAAA,OAEmB,MAAI,CAACiB,WAAL,CACpB3N,WADoB,EAEpB6O,KAAK,CAACC,QAAN,CAAepC,eAFK,EAGpBlL,gBAHoB,CAFnB;;0BAAA;4BAED8L,WAFC;4BAOLuB,KAAK,CAACC,QAAN,gBACOD,KAAK,CAACC,QADb,EAEOxB,WAFP;;0BAPK;4BAAA,mCAYFuB,KAZE;;0BAAA;0BAAA;4BAAA;;;;mBAAb;;kBAAA;oBAAA;;oBADG,EAeLpR,IAfK,CAeA,UAACgQ,QAAD;kBAAA,OAAe,MAAI,CAACpH,cAAL,CAAoBiJ,WAApB,IAAmC7B,QAAlD;iBAfA,CAAP;eADG,CAfJ;;YAAA;YAAA;cAAA;;;;KA/6BX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;EAAA,OAy9BiB8B,0BAz9BjB;;EAAA;IAAA,0GAy9BW,mBACHpP,QADG,EAEH3I,IAFG,EAGHkW,QAHG;MAAA;;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OAKwB,KAAK1K,SAAL,EALxB;;YAAA;cAAA,wDAK0CkI,IAL1C,CAMC,UAAC+D,OAAD;gBAAA,OAAaA,OAAO,CAACzN,gBAAR,KAA6BrB,QAAQ,CAAC5E,EAAnD;eAND;;cAAA;gBAAA;gBAAA;;;cAAA;cAAA;cAAA;;YAAA;cAAA,gBAKiB,sBAEjByE,WAPA;;YAAA;cAKGA,WALH;;cAAA,KASCA,WATD;gBAAA;gBAAA;;;cAAA,mCAUQ,KAAKqN,cAAL,CACHrN,WADG,EAEHxI,IAFG,EAGH;gBACIC,QAAQ,EAAEN,yBAAgB,CAACC,QAD/B;gBAEIqM,YAAY,EAAEC,qBAAY,CAACC;eAL5B,EAOH,EAPG,EAQHrK,SARG,EASHoU,QATG,CAVR;;YAAA;cAAA,MAsBO/R,cAtBP;;YAAA;YAAA;cAAA;;;;KAz9BX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;EAAA,OA0/BiB6T,oBA1/BjB;;EAAA;IAAA,oGA0/BW,mBACHrP,QADG,EAEHsP,UAFG,EAGH/B,QAHG;MAAA;;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OAKwB,KAAK1K,SAAL,EALxB;;YAAA;cAAA,yDAK0CkI,IAL1C,CAMC,UAAC+D,OAAD;gBAAA,OAAaA,OAAO,CAACzN,gBAAR,KAA6BrB,QAAQ,CAAC5E,EAAnD;eAND;;cAAA;gBAAA;gBAAA;;;cAAA;cAAA;cAAA;;YAAA;cAAA,gBAKiB,uBAEjByE,WAPA;;YAAA;cAKGA,WALH;;cAAA,KASCA,WATD;gBAAA;gBAAA;;;cAAA,mCAUQ,KAAKqN,cAAL,CACHrN,WADG,EAEHyP,UAFG,EAGH;gBACIhY,QAAQ,EAAEN,yBAAgB,CAAC4M,UAD/B;gBAEIR,WAAW,EAAE;eALd,EAOH,EAPG,EAQHjK,SARG,EASHoU,QATG,CAVR;;YAAA;cAAA,MAsBO/R,cAtBP;;YAAA;YAAA;cAAA;;;;KA1/BX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAyhCiB+T,gBAzhCjB;;EAAA;IAAA,gGAyhCW,mBAAgCnO,KAAhC,EAA8C3H,MAA9C;MAAA;MAAA;QAAA;UAAA;YAAA;cACKoG,WADL,GACuCuB,KADvC,CACKvB,WADL,EACkBwB,gBADlB,GACuCD,KADvC,CACkBC,gBADlB;;cAAA,IAGExB,WAHF;gBAAA;gBAAA;;;cAAA,MAGqBrE,cAHrB;;YAAA;cAAA,IAIE6F,gBAJF;gBAAA;gBAAA;;;cAAA,MAI0B5F,mBAJ1B;;YAAA;cAAA;cAAA,OAMO,KAAKgT,kBAAL,CACF5O,WADE,EAGFpG,MAHE,EAIF,KAJE,EAKF2H,KAAK,CAACC,gBALJ,EAMF,IANE,CANP;;YAAA;cAKG0N,sBALH,mBAcD,CAdC,EAcExB,QAdF;cAAA,gBAiBClM,gBAjBD;cAAA,gBAkBCxB,WAlBD;cAAA,gBAmBWkP,sBAnBX;cAAA;cAAA,OAoBa,KAAKvB,WAAL,CAAoB3N,WAApB,EAAiCkP,sBAAjC,CApBb;;YAAA;cAAA;cAAA;gBAiBC1N,gBAjBD;gBAkBCxB,WAlBD;gBAmBC0N,QAnBD;gBAoBClW,IApBD;;;YAAA;YAAA;cAAA;;;;KAzhCX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAsjCiBmY,8BAtjCjB;;EAAA;IAAA,8GAsjCW,mBAAqClO,cAArC;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACiB,KAAK0N,qBAAL,CAA2B1N,cAA3B,CADjB;;YAAA;cACGF,KADH;;cAAA,IAGEA,KAHF;gBAAA;gBAAA;;;cAAA,MAGe7F,YAHf;;YAAA;cAAA,mCAKI,KAAKgU,gBAAL,CAAsCnO,KAAtC,EAA6C;gBAChD9J,QAAQ,EAAEN,yBAAgB,CAAC4M,UADqB;gBAEhDR,WAAW,EAAE;eAFV,CALJ;;YAAA;YAAA;cAAA;;;;KAtjCX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAskCiBqM,iBAtkCjB;;EAAA;IAAA,iGAskCW,mBAAwBzP,QAAxB;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACkB,KAAK6C,SAAL,EADlB;;YAAA;cACGzB,KADH,mBACoC2J,IADpC,CACyC,UAAC+D,OAAD;gBAAA,OAAaA,OAAO,CAACzN,gBAAR,KAA6BrB,QAAQ,CAAC5E,EAAnD;eADzC;;cAAA,IAGEgG,KAHF;gBAAA;gBAAA;;;cAAA,MAGe7F,YAHf;;YAAA;cAAA,mCAKI,KAAKgU,gBAAL,CAAsCnO,KAAtC,EAA6C;gBAChD9J,QAAQ,EAAEN,yBAAgB,CAAC4M,UADqB;gBAEhDR,WAAW,EAAE;eAFV,CALJ;;YAAA;YAAA;cAAA;;;;KAtkCX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAslCiBsM,4BAtlCjB;;EAAA;IAAA,4GAslCW,mBAAmCpO,cAAnC;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACiB,KAAK0N,qBAAL,CAA2B1N,cAA3B,CADjB;;YAAA;cACGF,KADH;;cAAA,IAGEA,KAHF;gBAAA;gBAAA;;;cAAA,MAGe7F,YAHf;;YAAA;cAAA,mCAKI,KAAKgU,gBAAL,CAAoCnO,KAApC,EAA2C;gBAC9C9J,QAAQ,EAAEN,yBAAgB,CAAC2Y,QADmB;gBAE9CvM,WAAW,EAAE;eAFV,CALJ;;YAAA;YAAA;cAAA;;;;KAtlCX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAsmCiBwM,eAtmCjB;;EAAA;IAAA,+FAsmCW,mBAAsB5P,QAAtB;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACkB,KAAK6C,SAAL,EADlB;;YAAA;cACGzB,KADH,mBACoC2J,IADpC,CACyC,UAAC+D,OAAD;gBAAA,OAAaA,OAAO,CAACzN,gBAAR,KAA6BrB,QAAQ,CAAC5E,EAAnD;eADzC;;cAAA,IAGEgG,KAHF;gBAAA;gBAAA;;;cAAA,MAGe7F,YAHf;;YAAA;cAAA,mCAKI,KAAKgU,gBAAL,CAAsBnO,KAAtB,EAA6B;gBAChC9J,QAAQ,EAAEN,yBAAgB,CAAC2Y,QADK;gBAEhCvM,WAAW,EAAE;eAFV,CALJ;;YAAA;YAAA;cAAA;;;;KAtmCX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;EAAA,OA2nCiByM,wBA3nCjB;;EAAA;IAAA,wGA2nCW,mBAA+BtI,YAA/B,EAAmDtC,YAAnD;MAAA;;MAAA;QAAA;UAAA;YAAA;cAAA,IAAmDA,YAAnD;gBAAmDA,YAAnD,GAA2E,KAA3E;;;cAAA,gBACIjI,OADJ;cAAA;cAAA,OAEQ,KAAK6F,SAAL,CAAe1J,SAAf,EAA0B8L,YAA1B,CAFR;;YAAA;cAAA,gCAEiDlL,GAFjD,CAEqD,UAACqH,KAAD;gBAAA,OAChD,MAAI,CAACqN,kBAAL,CACIrN,KAAK,CAACvB,WADV,EAEI;kBACIvI,QAAQ,EAAEN,yBAAgB,CAACqM,YAD/B;kBAEIC,YAAY,EAAEC,qBAAY,CAACC;iBAJnC,EAMI,IANJ,EAOIrK,SAPJ,EAQI8L,YARJ,EASE3H,IATF,CASO,UAACgQ,QAAD;kBAAA,OACHtQ,OAAO,CAACC,GAAR,CACIqQ,QAAQ,CAACvT,GAAT;oBAAA,uEACI,mBAAO2U,KAAP;sBAAA;wBAAA;0BAAA;4BAAA;8BAAA;8BAAA,OACU,MAAI,CAACzM,aAAL,CAAmBU,gBAAnB,CAAoC+L,KAAK,CAACC,QAAN,CAAerN,cAAnD,EAAmEiG,YAAnE,CADV;;4BAAA;8BAAA;;4BAAA;4BAAA;8BAAA;;;;qBADJ;;oBAAA;sBAAA;;sBADJ,EAKEjK,IALF,CAKO,UAACwS,OAAD;oBAAA,OAAaA,OAAO,CAAClW,IAAR,EAAb;mBALP,CADG;iBATP,CADgD;eAFrD;cAAA,iDACYqD,GADZ,oCAqBDK,IArBC,CAqBI,UAACiI,QAAD;gBAAA,OAAcA,QAAQ,CAAC3L,IAAT,EAAd;eArBJ;;YAAA;YAAA;cAAA;;;;KA3nCX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAwpCiBmW,iCAxpCjB;;EAAA;IAAA,iHAwpCW,mBACHzO,cADG,EAEHiG,YAFG;MAAA;;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OAIiB,KAAKyH,qBAAL,CAA2B1N,cAA3B,CAJjB;;YAAA;cAIGF,KAJH;;cAAA,IAKEA,KALF;gBAAA;gBAAA;;;cAAA,mCAKgBjI,SALhB;;YAAA;cAAA;cAAA,OAQO,KAAK4J,WAAL,CAAiBuC,kBAAjB,CACFlE,KAAK,CAACvB,WADJ,EAEF,CAAC,gBAAD,CAFE,EAGF,CAAC,gBAAD,CAHE,EAIF;gBACIvI,QAAQ,EAAEN,yBAAgB,CAACqM,YAD/B;gBAEIC,YAAY,EAAEC,qBAAY,CAACC;eAN7B,EAQFpC,KAAK,CAACC,gBARJ,CARP;;YAAA;cAOC2O,sBAPD,mBAmBEpW,IAnBF,GAoBEG,GApBF,CAoBM,UAAC4U,QAAD;gBAAA,OAA0CA,QAAQ,CAACrN,cAAnD;eApBN;;cAAA,MAsBC0O,sBAAsB,CAAC3V,MAAvB,IAAiC,CAtBlC;gBAAA;gBAAA;;;cAAA,mCAsB4C,EAtB5C;;YAAA;cAAA;cAAA,OAwBU2C,OAAO,CAACC,GAAR,CACT+S,sBAAsB,CAACjW,GAAvB;gBAAA,uEAA2B,mBAAOkW,SAAP;kBAAA;oBAAA;sBAAA;wBAAA;0BAAA;0BAAA,OACV,MAAI,CAAChO,aAAL,CAAmBU,gBAAnB,CAAoCsN,SAApC,EAA+C1I,YAA/C,CADU;;wBAAA;0BAAA;;wBAAA;wBAAA;0BAAA;;;;iBAA3B;;gBAAA;kBAAA;;kBADS,CAxBV;;YAAA;cAAA;;YAAA;YAAA;cAAA;;;;KAxpCX;;IAAA;MAAA;;;IAAA;;;;;;;;;;EAAA,OA6rCiB2I,0BA7rCjB;;EAAA;IAAA,0GA6rCW,mBACH5O,cADG,EAEH2D,YAFG;MAAA;;MAAA;QAAA;UAAA;YAAA;cAAA,IAEHA,YAFG;gBAEHA,YAFG,GAEqB,KAFrB;;;cAAA,gBAKIjI,OALJ;cAAA;cAAA,OAMQ,KAAK6F,SAAL,CAAe;gBAAEvB,cAAc,EAAdA;eAAjB,EAAmC2D,YAAnC,CANR;;YAAA;cAAA,gCAOMlL,GAPN,CAOU,UAACqH,KAAD;gBAAA,OACD,MAAI,CAACqN,kBAAL,CACIrN,KAAK,CAACvB,WADV,EAEI;kBACIvI,QAAQ,EAAEN,yBAAgB,CAACqM,YAD/B;kBAEIC,YAAY,EAAEC,qBAAY,CAACC,qBAF/B;kBAGIlC,cAAc,EAAdA;iBALR,EAOI,IAPJ,EAQIF,KAAK,CAACC,gBARV,EASI4D,YATJ,EAUE3H,IAVF,CAUO,UAACgQ,QAAD;kBAAA,OACHtQ,OAAO,CAACC,GAAR,CACIqQ,QAAQ,CAACvT,GAAT,CAAa,UAACmD,CAAD;oBAAA,OACT,MAAI,CAACsQ,WAAL,CACIpM,KAAK,CAACvB,WADV,EAEI3C,CAAC,CAACqQ,QAFN,EAGInM,KAAK,CAACC,gBAHV,CADS;mBAAb,CADJ,CADG;iBAVP,CADC;eAPV,EA8BMzH,IA9BN;cAAA,iDAKYqD,GALZ,oCA+BDK,IA/BC,CA+BI,UAACjG,IAAD;gBAAA,OAAUA,IAAI,CAACuC,IAAL,EAAV;eA/BJ;;YAAA;YAAA;cAAA;;;;KA7rCX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAouCiBuW,2BApuCjB;;EAAA;IAAA,2GAouCW,mBAAkC7O,cAAlC;MAAA;QAAA;UAAA;YAAA;cAAA,mCACI,KAAK8O,uBAAL,CACH;gBACI9Y,QAAQ,EAAEN,yBAAgB,CAACqM,YAD/B;gBAEIC,YAAY,EAAEC,qBAAY,CAAC8M;eAH5B,EAKH,IALG,EAMH/O,cANG,CADJ;;YAAA;YAAA;cAAA;;;;KApuCX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAovCiBgP,qBApvCjB;;EAAA;IAAA,qGAovCW,mBAA4BhP,cAA5B;MAAA;QAAA;UAAA;YAAA;cAAA,mCACI,KAAK8O,uBAAL,CACH;gBACI9Y,QAAQ,EAAEN,yBAAgB,CAACqM,YAD/B;gBAEIC,YAAY,EAAEC,qBAAY,CAACgN;eAH5B,EAKH,IALG,EAMHjP,cANG,CADJ;;YAAA;YAAA;cAAA;;;;KApvCX;;IAAA;MAAA;;;IAAA;;;;;;;;;EAAA,OAowCiBkP,wBApwCjB;;EAAA;IAAA,wGAowCW,mBAA+BlP,cAA/B;MAAA;QAAA;UAAA;YAAA;cAAA,mCACI,KAAK8O,uBAAL,CACH;gBACI9Y,QAAQ,EAAEN,yBAAgB,CAACqM,YAD/B;gBAEIC,YAAY,EAAEC,qBAAY,CAACkN;eAH5B,EAKH,IALG,EAMHnP,cANG,CADJ;;YAAA;YAAA;cAAA;;;;KApwCX;;IAAA;MAAA;;;IAAA;;;;;;;;;;EAAA,OAqxCiBoP,6BArxCjB;;EAAA;IAAA,6GAqxCW,mBAAoCpP,cAApC,EAA0DqP,eAA1D;MAAA;QAAA;UAAA;YAAA;cAAA,mCACI,KAAKP,uBAAL,CACH;gBACI9Y,QAAQ,EAAEN,yBAAgB,CAACqM,YAD/B;gBAEIC,YAAY,EAAEC,qBAAY,CAACkN,aAF/B;gBAGIE,eAAe,EAAfA;eAJD,EAMH,IANG,EAOHrP,cAPG,CADJ;;YAAA;YAAA;cAAA;;;;KArxCX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;EAAA,OA0yCiB8O,uBA1yCjB;;EAAA;IAAA,uGA0yCW,mBACHQ,OADG,EAEH1B,qBAFG,EAGH5N,cAHG;MAAA;;MAAA;QAAA;UAAA;YAAA;cAAA,gBAKItE,OALJ;cAAA;cAAA,OAMQ,KAAK6F,SAAL,CAAe;gBAAEvB,cAAc,EAAdA;eAAjB,CANR;;YAAA;cAAA,gCAOMvH,GAPN,CAOU,UAACqH,KAAD;gBAAA,OACD,MAAI,CAACqN,kBAAL,CACIrN,KAAK,CAACvB,WADV,eAES+Q,OAFT;kBAEkBtP,cAAc,EAAdA;oBACd4N,qBAHJ,EAII9N,KAAK,CAACC,gBAJV,EAKI,IALJ,EAME/D,IANF,CAMO,UAACgQ,QAAD;kBAAA,OACHtQ,OAAO,CAACC,GAAR,CACIqQ,QAAQ,CAACvT,GAAT;oBAAA,uEAAa,mBAAO2U,KAAP;sBAAA;wBAAA;0BAAA;4BAAA;8BAAA;gCAELrN,gBAAgB,EAAED,KAAK,CAACC,gBAFnB;gCAGLxB,WAAW,EAAEuB,KAAK,CAACvB;iCAChB6O,KAJE;;4BAAA;4BAAA;8BAAA;;;;qBAAb;;oBAAA;sBAAA;;sBADJ,CADG;iBANP,CADC;eAPV,EA0BM9U,IA1BN;cAAA,iDAKYqD,GALZ,oCA2BDK,IA3BC,CA2BI,UAACjG,IAAD;gBAAA,OAAUA,IAAI,CAACuC,IAAL,EAAV;eA3BJ;;YAAA;YAAA;cAAA;;;;KA1yCX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;;;EAAA,OAo1CiBiX,sCAp1CjB;;EAAA;IAAA,sHAo1CW,mBACHzV,EADG,EAEH0G,yBAFG,EAGHE,uBAHG,EAIH8O,SAJG;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OAMgC,KAAKnQ,WAAL,CAAiBC,WAAjB,CAA6BxF,EAA7B,CANhC;;YAAA;cAMC2V,MAND,mBAMkEjP,yBANlE;cAOCkP,cAPD,GAOkBD,MAAM,CACtBtX,MADgB,CACT,UAACwX,KAAD;;gBAEJ,IAAIC,eAAe,GAAGpP,yBAAyB,CAACnI,OAA1B,CAAkCsX,KAAK,CAACE,gBAAxC,CAAtB;gBACA,IAAID,eAAe,KAAK,CAAC,CAAzB,EAA4B,OAAO,KAAP;gBAC5B,OAAOlP,uBAAuB,CAACkP,eAAD,CAAvB,IAA4ClP,uBAAuB,CAACkP,eAAD,CAAvB,IAA4C,EAA/F;eALa,EAOhBnX,GAPgB,CAOZ,UAACE,IAAD;;gBAED,IAAIiQ,KAAK,GAAGpI,yBAAyB,CAACnI,OAA1B,CAAkCM,IAAI,CAACkX,gBAAvC,CAAZ;gBACAlX,IAAI,CAACmX,cAAL,GAAsBpP,uBAAuB,CAACkI,KAAD,CAA7C;gBACA,OAAOjQ,IAAP;eAXa,CAPlB;;cAoBH,IAAI;;gBAEI4M,UAFJ,GAEiB,KAAKlB,OAAL,CAAa0L,iBAAb,CAA+BL,cAA/B,EAA+CF,SAA/C,CAFjB;gBAGA,KAAKnK,GAAL,GAAW,KAAKhB,OAAL,CAAaiB,SAAb,CAAuBuC,OAAvB,CAA+BtC,UAA/B,CAAX;eAHJ,CAIE,OAAO3J,CAAP,EAAU;gBACR5C,OAAO,CAACuD,KAAR,CAAcX,CAAd;;;YAzBD;YAAA;cAAA;;;;KAp1CX;;IAAA;MAAA;;;IAAA;;;;;;;;;;EAAA,OAu3CiB0L,6BAv3CjB;;EAAA;IAAA,6GAu3CW,mBAAoCxN,EAApC,EAA8CiL,QAA9C;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACkB,KAAK1F,WAAL,CAAiBC,WAAjB,CAA6BxF,EAA7B,CADlB;;YAAA;cACC4E,QADD;cAGC8I,eAHD,GAGmB9I,QAAQ,CAACiH,gBAH5B;cAICgC,kBAJD,GAIsB,KAAKtD,OAAL,CAAaoB,YAAb,CAA0BC,cAA1B,CAAyCX,QAAzC,CAJtB;cAKCQ,UALD,GAKcoC,kBAAkB,CAACC,2BAAnB,CAA+CJ,eAA/C,CALd;;cAOH,IAAI9I,QAAQ,CAAC4H,aAAb,EAA4B;;gBAEpBC,iBAFoB,GAEA,KAAKlC,OAAL,CAAaoB,YAAb,CAA0BC,cAA1B,CAAyChH,QAAQ,CAAC4H,aAAlD,CAFA;gBAGxBE,cAAc,CAACC,OAAf,CACI5M,0BAA0B,CAACC,EAAD,CAD9B,EAEIyM,iBAAiB,CAACX,2BAAlB,CAA8CL,UAA9C,CAFJ;;;cAMJ,KAAKF,GAAL,GAAW,KAAKhB,OAAL,CAAaiB,SAAb,CAAuBuC,OAAvB,CAA+BtC,UAA/B,CAAX;;YAhBG;YAAA;cAAA;;;;KAv3CX;;IAAA;MAAA;;;IAAA;;;;;;;;;;EAAA,OAg5CiByK,8BAh5CjB;;EAAA;IAAA,8GAg5CW,mBAAqClW,EAArC,EAA+CsE,SAA/C;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OAC0B,KAAKiB,WAAL,CAAiBC,WAAjB,CAA6BxF,EAA7B,CAD1B;;YAAA;cACC0N,eADD,mBAC4DlH,iBAD5D;cAECqH,kBAFD,GAEsB,KAAKtD,OAAL,CAAaoB,YAAb,CAA0BC,cAA1B,CAAyCtH,SAAzC,CAFtB;cAGCmH,UAHD,GAGcoC,kBAAkB,CAACC,2BAAnB,CAA+CJ,eAA/C,CAHd;cAIH,KAAKnC,GAAL,GAAW,KAAKhB,OAAL,CAAaiB,SAAb,CAAuBuC,OAAvB,CAA+BtC,UAA/B,CAAX;;YAJG;YAAA;cAAA;;;;KAh5CX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;EAAA,OA+5CiB9E,uBA/5CjB;;EAAA;IAAA,uGA+5CW,mBACH3G,EADG,EAEH0G,yBAFG,EAGHE,uBAHG,EAIH8O,SAJG;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IAME,KAAKnK,GANP;gBAAA;gBAAA;;;cAAA,MAMkBtL,wBANlB;;YAAA;cAOCkW,uBAPD,GAO2B,KAAK5L,OAAL,CAAa6L,qBAAb,CAC1B1P,yBAD0B,EAE1BE,uBAF0B,EAG1B,KAAK2E,GAAL,aAH0B,EAI1BmK,SAJ0B,CAP3B;cAaCW,aAbD,GAaiB;gBAChB3P,yBAAyB,EAAEyP;eAd5B;cAAA;cAAA,OAiBU,KAAK5Q,WAAL,CAAiB0H,cAAjB,CAAgCjN,EAAhC,EAAoCqW,aAApC,CAjBV;;YAAA;cAAA;;YAAA;YAAA;cAAA;;;;KA/5CX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;;;;EAAA,OA87CiBC,cA97CjB;;EAAA;IAAA,8FA87CW,mBAAqBtW,EAArB,EAA+BuW,WAA/B,EAAoDC,WAApD;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IACE,KAAKjL,GADP;gBAAA;gBAAA;;;cAAA,MACkBtL,wBADlB;;YAAA;cAGCyL,kBAHD,GAGsB,KAAKnB,OAAL,CAAaoB,YAAb,CAA0BC,cAA1B,CAAyC2K,WAAzC,CAHtB;cAICE,eAJD,GAImB/K,kBAAkB,CAACI,2BAAnB,CAA+C,KAAKP,GAAL,aAA/C,CAJnB;;cAKH,IAAIiL,WAAJ,EAAiB;gBACbA,WAAW,GAAG,KAAKjM,OAAL,CAAayB,kBAAb,CAAgC,KAAKzB,OAAL,CAAayB,kBAAb,CAAgCwK,WAAhC,CAAhC,CAAd;;;cAGJD,WAAW,GAAG,KAAKhM,OAAL,CAAayB,kBAAb,CAAgC,KAAKzB,OAAL,CAAayB,kBAAb,CAAgCuK,WAAhC,CAAhC,CAAd;cAEIF,aAXD,GAWiB;gBAChBpL,QAAQ,EAAE;kBACNuL,WAAW,EAAXA,WADM;kBAEND,WAAW,EAAXA;iBAHY;gBAKhB1K,gBAAgB,EAAE4K;eAhBnB;cAAA;cAAA,OAmBU,KAAKlR,WAAL,CAAiB0H,cAAjB,CAAgCjN,EAAhC,EAAoCqW,aAApC,CAnBV;;YAAA;cAAA;;YAAA;YAAA;cAAA;;;;KA97CX;;IAAA;MAAA;;;IAAA;;;;;;;;;;;;EAAA,OA49CU5P,eA59CV;;EAAA;IAAA,+FA49CI,mBAAsBzG,EAAtB,EAAgCsE,SAAhC,EAAmDG,WAAnD;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IACS,KAAK8G,GADd;gBAAA;gBAAA;;;cAAA,MACyBtL,wBADzB;;YAAA;cAGQyL,kBAHR,GAG6B,KAAKnB,OAAL,CAAaoB,YAAb,CAA0BC,cAA1B,CAAyCtH,SAAzC,CAH7B;cAIQoS,gBAJR,GAI2BhL,kBAAkB,CAACI,2BAAnB,CAA+C,KAAKP,GAAL,aAA/C,CAJ3B;cAKQ8K,aALR,GAKwB;gBAAE7P,iBAAiB,EAAEkQ;eAL7C;cAAA;cAAA,OAMkC,KAAKnR,WAAL,CAAiB0H,cAAjB,CAAgCjN,EAAhC,EAAoCqW,aAApC,CANlC;;YAAA;cAMUM,eANV;cAAA;cAAA,OAQU,KAAK7O,mBAAL,CACFrD,WADE,EAEF;gBAAEH,SAAS,EAATA;eAFA,EAGF;gBACIpI,QAAQ,EAAEN,yBAAgB,CAAC2Y,QAD/B;gBAEIvM,WAAW,EAAE;eALf,EAOF,EAPE,EAQF,IARE,CARV;;YAAA;cAAA,mCAmBW2O,eAnBX;;YAAA;YAAA;cAAA;;;;KA59CJ;;IAAA;MAAA;;;IAAA;;;EAAA;AAAA;;;;AC1DA,IAEaC,aAAb;EAGI,uBAAoBC,GAApB,EAAiCC,MAAjC,EAAyDvU,MAAzD;IAAoB,QAAA,GAAAsU,GAAA;IAAqC,WAAA,GAAAtU,MAAA;IACrD,KAAKwU,GAAL,GAAW,IAAIC,qBAAJ,CAAiB;MAAEC,OAAO,EAAE;QAAE,oBAAoBH;;KAAlD,CAAX;;;EAJR;;EAAA,OAOWI,WAPX,GAOW,qBAAYC,aAAZ;IAQH,IAAQ5U,MAAR,GAA4B4U,aAA5B,CAAQ5U,MAAR;QAAmBtG,IAAnB,iCAA4Bkb,aAA5B;;IAEA,OAAO,KAAKJ,GAAL,CAASK,IAAT,CACA,KAAKP,GADL,+CAEH5a,IAFG,EAGH;MACIob,MAAM,EAAE;QAAE9U,MAAM,EAAEA,MAAF,WAAEA,MAAF,GAAY,KAAKA;;KAJlC,CAAP;GAjBR;;EAAA,OA0BW+U,UA1BX,GA0BW,oBACHH,aADG,EAUHxF,IAVG;IAYH,IAAQpP,MAAR,GAA4B4U,aAA5B,CAAQ5U,MAAR;QAAmBtG,IAAnB,iCAA4Bkb,aAA5B;;IAEA,IAAI3G,OAAO,GAAG,KAAKuG,GAAL,CAASK,IAAT,CACP,KAAKP,GADE,yBAEV5a,IAFU,EAGV;MACIob,MAAM,EAAE;QAAE9U,MAAM,EAAEA,MAAF,WAAEA,MAAF,GAAY,KAAKA;;KAJ3B,CAAd;;IAQA,IAAIoP,IAAJ,EAAU;MACNnB,OAAO,GAAGA,OAAO,CAACtO,IAAR,CAAa,UAACqV,MAAD;QAAA,OACnBA,MAAM,CAAClZ,MAAP,CAAc,UAACmZ,KAAD;UAAA,OAAWA,KAAK,CAAC7F,IAAN,KAAeA,IAA1B;SAAd,CADmB;OAAb,CAAV;;;IAKJ,OAAOnB,OAAP;GAtDR;;EAAA;AAAA;;ICIWiH,QAAQ,GAAG,0BAAf;AAEP;;;;;;;;;;;;;;;AAcA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CACTnN,OADS,EAEToN,aAFS,EAGTC,YAHS,EAITC,YAJS,EAKTC,aALS,EAMTC,eANS,EAOTC,cAPS,EAQTC,eARS,EASTC,gBATS,EAUTtN,sBAVS;EAYT,gBASIuN,iBAAQ,CACR;IACIR,aAAa,EAAbA,aADJ;IAEIC,YAAY,EAAZA,YAFJ;IAGIC,YAAY,EAAZA,YAHJ;IAIIC,aAAa,EAAbA,aAJJ;IAKIC,eAAe,EAAfA,eALJ;IAMIC,cAAc,EAAdA,cANJ;IAOIC,eAAe,EAAfA,eAPJ;IAQIC,gBAAgB,EAAhBA;GATI,EAWRtN,sBAXQ,CATZ;MACIwN,aADJ,aACIA,aADJ;MAEIC,eAFJ,aAEIA,eAFJ;MAGIC,cAHJ,aAGIA,cAHJ;MAIIC,YAJJ,aAIIA,YAJJ;MAKIC,YALJ,aAKIA,YALJ;MAMIC,aANJ,aAMIA,aANJ;MAOIC,eAPJ,aAOIA,eAPJ;MAQIC,gBARJ,aAQIA,gBARJ;;EAuBA,IAAMC,MAAM,GAAG,IAAItO,SAAJ,CACXC,OADW,EAEX6N,aAFW,EAGXG,YAHW,EAIXC,YAJW,EAKXC,aALW,EAMXJ,eANW,EAOXC,cAPW,EAQXI,eARW,EASXC,gBATW,EAUX/N,sBAVW,CAAf;EAaA,OAAOgO,MAAP;AACH,CAjDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"oro-sdk.cjs.development.js","sources":["../node_modules/regenerator-runtime/runtime.js","../src/helpers/client.ts","../src/models/error.ts","../src/helpers/workflow.ts","../src/helpers/patient-registration.ts","../src/helpers/vault-grants.ts","../src/sdk-revision/client.ts","../src/client.ts","../src/services/external/clinia.ts","../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","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 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 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): 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 // Generates the answers of the specified category and adds the appropriate values if any are missing\n return Promise.all(\n workflowData.selectedAnswers\n .map((e) => Object.entries(e))\n .flat()\n .filter(([k, v]) => triggeredQuestions[k] && triggeredQuestions[k]['metaCategory'] === category)\n .map(([k, v]) => {\n return populateWorkflowField(triggeredQuestions[k], v).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): 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 kind: question.kind,\n })\n}\n\nexport function isTriggered(triggers: string[], answers: string[]): boolean {\n for (let trigger of triggers) {\n if (!answers.includes(trigger)) {\n return false\n }\n }\n return true\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) {\n const filledWorkflow = JSON.parse(JSON.stringify(workflow))\n\n if (!filledWorkflow.selectedAnswers) {\n filledWorkflow.selectedAnswers = getInitialisedSelectedAnswers(filledWorkflow, false)\n }\n\n filledWorkflow.pages.forEach((page: WorkflowPageData, pageIdx: number) => {\n const ret: any = {}\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 }\n }\n })\n\n return filledWorkflow\n}\n","import {\n Consult,\n ConsultationImageMeta,\n ConsultationMeta,\n ConsultRequest,\n DocumentType,\n IdentityResponse,\n IndexKey, LocalizedData,\n MedicalMeta,\n MedicalStatus,\n MetadataCategory,\n PersonalMeta, PopulatedWorkflowData,\n Practitioner,\n PreferenceMeta,\n RawConsultationMeta, Term, Terms,\n Uuid,\n VaultIndex,\n WorkflowData,\n} from 'oro-sdk-apis'\nimport {\n filterTriggeredAnsweredWithKind,\n getImagesFromIndexDb,\n getWorkflowDataByCategory, identificationToPersonalInformations,\n OroClient,\n RegisterPatientOutput, toActualObject,\n} from '..'\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 * @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): 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\n for (; retry > 0; retry--) {\n try {\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 (!consult) {\n consult = await getOrCreatePatientConsultationUuid(consultRequest, oroClient)\n }\n\n // Creating lockbox\n if (!lockboxUuid) lockboxUuid = await getOrCreatePatientLockbox(oroClient)\n\n if (!identity)\n 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 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(`[SDK: registration] Error while adding to the practitioner's index ${practitioner.uuid}`, err)\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\n await storeImageAliases(consult.uuid, lockboxUuid, workflow, oroClient).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\n await storePatientData(consult.uuid, consultRequest.isoLanguageRequired, lockboxUuid, workflow, oroClient).catch((err) => {\n console.error('[SDK: registration] Some errors happened during patient data upload', err)\n errorsThrown.push(err)\n })\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 (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 (errorsThrown.length > 0)\n throw errorsThrown\n\n // Deem the consultation as ready\n await oroClient.consultClient.updateConsultByUUID(consult.uuid, {\n statusMedical: MedicalStatus.New,\n })\n\n await searchIndexConsultation(consult.uuid, oroClient).catch((err) => {\n console.error('[SDK: registration] personal information not found or another error occured during search indexing', err)\n errorsThrown.push(err)\n })\n\n // if we got through the complete flow, the registration succeeded\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 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 */\nasync function getOrCreatePatientConsultationUuid(consult: ConsultRequest, oroClient: OroClient): 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', err)\n throw err\n })\n } else {\n return await oroClient.consultClient.consultCreate(consult).catch((err) => {\n console.error('Error while creating consult', err)\n throw err\n })\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(undefined, true)\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 return (\n await oroClient.vaultClient.lockboxCreate().catch((err) => {\n console.error('Error while creating lockbox', err)\n throw err\n })\n ).lockboxUuid\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): Promise<(Uuid | void)[]> {\n // Create and store registration data\n return Promise.all([\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 )\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 ]).then((dataUuids) => dataUuids.flat())\n}\n\nasync function storeImageAliases(\n consultationId: Uuid,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient\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 promises = nonNullImages.map((image) => {\n return oroClient.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 })\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\nexport async function extractPersonalInfoFromConsultId(consultUuid: string, oroClient: OroClient): Promise<{\n consultUuid: string,\n personalInformations: LocalizedData<PopulatedWorkflowData>,\n childPersonalInformations: LocalizedData<PopulatedWorkflowData>,\n otherPersonalInformations: LocalizedData<PopulatedWorkflowData>,\n}> {\n return Promise.all([\n // Retrieve MetadataCategory.Personal in any case\n oroClient\n .getPersonalInformationsFromConsultId(consultUuid, MetadataCategory.Personal, true)\n .then((personalInformations) => {\n if (!personalInformations[0]) {\n console.error(\n `${MetadataCategory.Personal} informations not found for consult:`,\n consultUuid\n )\n\n throw Error('No self personal information found')\n }\n\n return personalInformations[0]\n }),\n // Retrieve MetadataCategory.ChildPersonal in any case in parallel\n oroClient\n .getPersonalInformationsFromConsultId(consultUuid, MetadataCategory.ChildPersonal, true)\n .then((childInformations): any => {\n if (!childInformations[0]) {\n console.debug(\n `${MetadataCategory.ChildPersonal} informations not found for consult:`,\n consultUuid\n )\n\n // Retrieve MetadataCategory.OtherPersonal only if MetadataCategory.ChildPersonal does not exist\n return oroClient\n .getPersonalInformationsFromConsultId(\n consultUuid,\n MetadataCategory.OtherPersonal,\n true\n )\n .then((otherInformations) => {\n if (!otherInformations[0]) {\n console.debug(\n `${MetadataCategory.OtherPersonal} informations not found for consult:`,\n consultUuid\n )\n\n return {}\n }\n\n return { otherPersonalInformations: otherInformations[0] }\n })\n }\n\n return { childPersonalInformations: childInformations[0] }\n }),\n ]).then(([personalInformations, { childPersonalInformations, otherPersonalInformations }]) => {\n return {\n consultUuid,\n personalInformations,\n childPersonalInformations,\n otherPersonalInformations,\n }\n })\n}\n\nexport async function searchIndexConsultation(consultUuid: string, oroClient: OroClient) {\n let terms: Terms = []\n\n console.log('here')\n\n const {\n personalInformations,\n childPersonalInformations,\n otherPersonalInformations\n } = await extractPersonalInfoFromConsultId(consultUuid, oroClient)\n\n console.log('personal=', personalInformations, 'child=', childPersonalInformations, 'other=', otherPersonalInformations)\n\n const personalInfo = identificationToPersonalInformations(\n toActualObject(personalInformations.data),\n MetadataCategory.Personal\n )\n terms.push(<Term>{\n kind: 'first-name',\n value: personalInfo.firstname,\n }, <Term> {\n kind: 'last-name',\n value: personalInfo.name\n })\n\n if(childPersonalInformations) {\n const childPersonalInfo = identificationToPersonalInformations(\n toActualObject(childPersonalInformations.data),\n MetadataCategory.ChildPersonal\n )\n terms.push(<Term>{\n kind: 'first-name',\n value: childPersonalInfo.firstname,\n }, <Term> {\n kind: 'last-name',\n value: childPersonalInfo.name\n })\n }\n\n if(otherPersonalInformations) {\n const otherPersonalInfo = identificationToPersonalInformations(\n toActualObject(otherPersonalInformations.data),\n MetadataCategory.OtherPersonal\n )\n terms.push(<Term>{\n kind: 'first-name',\n value: otherPersonalInfo.firstname,\n }, <Term> {\n kind: 'last-name',\n value: otherPersonalInfo.name\n })\n }\n\n await oroClient.searchClient.index(consultUuid, terms)\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 { IndexKey, Grant, IndexConsultLockbox, MetadataCategory, VaultIndex } from 'oro-sdk-apis'\nimport { OroClient, Uuid } from '..'\n\n/**\n * @name filterGrantsWithLockboxMetadata\n * @description searches for the applied filters in the vault index\n * @param oroClient\n * @param filter: the metadata filter applied to each the lockboxes\n * @param vaultIndex: the index to which the filter will be applied\n * @param forceRefresh\n * @returns the filtered grants\n */\nexport async function filterGrantsWithLockboxMetadata(\n oroClient: OroClient,\n filter?: { consultationId: Uuid },\n vaultIndex?: VaultIndex,\n forceRefresh = false\n): Promise<Grant[]> {\n if (!vaultIndex || forceRefresh) {\n vaultIndex = await buildLegacyVaultIndex(oroClient)\n }\n if (vaultIndex[IndexKey.Consultation] && filter) {\n let indexConsults = (vaultIndex[IndexKey.Consultation] ?? [])\n .filter((consultGrant: { consultationId: Uuid }) => consultGrant.consultationId === filter.consultationId)\n .map((consultGrant: { consultationId: Uuid; grant: Grant }) => consultGrant.grant as Grant)\n return indexConsults as Grant[]\n } else {\n // No grants exist and the index has already been built\n return []\n }\n}\n\n/** Finds all grants for the logged user\n * requests a list of unique consultation ids for each lockbox the user has access to\n * builds and sets the index of consultations\n * @param oroClient\n * @returns the constructed vaultIndex\n */\nexport async function buildLegacyVaultIndex(oroClient: OroClient): Promise<VaultIndex> {\n let grants = await oroClient.getGrants()\n let consultGrants: IndexConsultLockbox[] = []\n for (let grant of grants) {\n let consults = (\n await oroClient.vaultClient.lockboxMetadataGet(grant.lockboxUuid!, ['consultationId'], [], {\n category: MetadataCategory.Consultation,\n })\n )[0] as Uuid[]\n\n consultGrants = [\n ...consultGrants,\n ...consults.map((consult: any) => ({\n ...consult,\n grant: {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid,\n },\n })),\n ]\n }\n\n let vaultIndex = {\n [IndexKey.Consultation]: consultGrants,\n }\n oroClient.setVaultIndex(vaultIndex)\n console.info('[sdk:index] Successfully Built Vault Index')\n return vaultIndex\n}\n","import {\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 PersonalMeta,\n PopulatedWorkflowData,\n Practice,\n PracticeService,\n PreferenceMeta,\n RecoveryMeta,\n SearchService,\n SecretShard,\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 { decryptConsultLockboxGrants, decryptGrants, registerPatient, sessionStorePrivateKeyName } from './helpers'\nimport {\n AssociatedLockboxNotFound,\n IncompleteAuthentication,\n LocalEncryptedData,\n MissingGrant,\n MissingLockbox,\n MissingLockboxOwner,\n RecoveryData,\n RegisterPatientOutput,\n UserPreference,\n} from './models'\nimport { buildLegacyVaultIndex, 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.vaultIndex = undefined\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 const emailConfirmed = !!skipEmailValidation\n\n const signupRequest: IdentityCreateRequest = {\n practiceUuid: practice.uuid,\n email: email.toLowerCase(),\n emailConfirmed,\n password: hashedPassword,\n publicKey: this.toolbox.encodeToBase64(this.rsa.public()),\n recoveryPassword,\n tosAndCpAcceptance,\n tokenData,\n subscription,\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 * @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 ): Promise<RegisterPatientOutput> {\n if (!this.rsa) throw IncompleteAuthentication\n return registerPatient(patientUuid, consult, workflow, this, this.toolbox.uuid(), recoveryQA)\n }\n\n /**\n * Builds the vault index for the logged user\n *\n * Steps:\n * 1. Retrieves, decrypts and sets the lockbox IndexSnapshot\n * 2. Retrieves, decrypts and adds all other index entries starting at the snapshot timestamp\n * 3. Updates the IndexSnapshot if changed\n * @deprecated\n * @returns the latest vault index\n */\n public async buildVaultIndex(forceRefresh: boolean = false) {\n if (!this.vaultIndex || forceRefresh) await buildLegacyVaultIndex(this)\n }\n\n /**\n * Setter for the vault index\n * @param index\n */\n public setVaultIndex(index: VaultIndex) {\n this.vaultIndex = index\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 //// DEPRECATED : REMOVE ME : BEGIN ///////////////////////////////////////////\n case IndexKey.Consultation:\n encryptedIndex[key] = (entries[key] as IndexConsultLockbox[])\n .map((e) => ({\n ...e,\n uniqueHash: this.toolbox.hashStringToBase64(\n JSON.stringify({\n consultationId: e.consultationId,\n grant: e.grant,\n })\n ),\n }))\n .filter(\n (e) =>\n !this.vaultIndex ||\n !this.vaultIndex[IndexKey.Consultation]?.find((v) => v.uniqueHash === e.uniqueHash)\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 //// DEPRECATED : REMOVE ME : END ///////////////////////////////////////////\n }\n }\n await this.vaultClient.vaultIndexPut(encryptedIndex, indexOwnerUuid)\n }\n\n /**\n * adds or updates the index snapshot for the logged user\n * @param index\n */\n public async indexSnapshotAdd(index: VaultIndex) {\n if (!this.rsa) throw IncompleteAuthentication\n let rsaPub: Uint8Array = this.rsa.public()\n\n let cleanedIndex: VaultIndex = {\n [IndexKey.Consultation]: index[IndexKey.Consultation]\n ?.filter((c) => c)\n .map((c) => {\n return {\n grant: c.grant,\n consultationId: c.consultationId,\n }\n }),\n }\n\n // the data of the snapshot should not contain the `IndexEntry` data\n // (will create conflicts while updating)\n let encryptedIndexEntry = CryptoRSA.jsonWithPubEncryptToBase64(cleanedIndex, rsaPub)\n\n // The encryptedIndexEntry can have the uuid and timstamp (for updating)\n let encryptedIndex: EncryptedIndexEntry = {\n uuid: index.uuid,\n timestamp: index.timestamp,\n encryptedIndexEntry,\n }\n this.vaultClient.vaultIndexSnapshotPut(encryptedIndex)\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 ): 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)\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 ): 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)\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 * @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 ): 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 )\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 * @returns the data uuid\n */\n public async createJsonData<T = Meta>(\n lockboxUuid: Uuid,\n data: any,\n meta?: T,\n privateMeta?: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\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\n return this.tellerClient.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 * @returns the data uuid\n */\n public async getOrInsertJsonData<M = Metadata>(\n lockboxUuid: Uuid,\n data: any,\n publicMetadata: M,\n privateMetadata: Metadata,\n forceReplace: boolean = false\n ): Promise<Uuid> {\n let manifest = await this.vaultClient.lockboxManifestGet(lockboxUuid, publicMetadata)\n if (!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 forceReplace && manifest.length > 0 ? manifest[0].dataUuid : undefined // if forceReplace and data already exist, then replace data. Otherwise insert it\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 * @returns the data uuid\n */\n public async createBytesData<T = Meta>(\n lockboxUuid: Uuid,\n data: Uint8Array,\n meta: T,\n privateMeta: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\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\n return this.tellerClient.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 }, forceRefresh: boolean = false): Promise<Grant[]> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let filterString = JSON.stringify(filter)\n // retrieves cached grants\n // Note: if filters is set to empty, it will be stored in the `undefined` key\n if (!forceRefresh && this.cachedMetadataGrants[filterString]) return this.cachedMetadataGrants[filterString]\n\n // if there is a filter to apply, then the grant can be retrieved from the vault index, otherwise, all grants are fetched\n // Note: will work only if the filter being applied is exclusively a consult id\n const grantsByConsultLockbox = filter ? (\n await this.vaultClient.vaultIndexGet([IndexKey.ConsultationLockbox], [filter.consultationId])\n .then((res) => res[IndexKey.ConsultationLockbox])\n .catch((e) => {\n console.error(e)\n return []\n })\n ) : undefined\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[JSON.stringify(filter)] = decryptedConsults\n return this.cachedMetadataGrants[filterString]\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, this.vaultIndex, forceRefresh)\n } else {\n encryptedGrants = (await this.vaultClient.grantsGet()).grants\n }\n\n const decryptedGrants = await decryptGrants(encryptedGrants, this.rsa)\n // sets the cached grant\n this.cachedMetadataGrants[filterString] = decryptedGrants\n return decryptedGrants\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 forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, category, forceRefresh)\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 forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, MetadataCategory.Medical, forceRefresh)\n }\n\n private async getMetaCategoryFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory,\n 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 forceRefresh\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 forceRefresh\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 forceRefresh: boolean = false\n ): Promise<LockboxManifest> {\n let manifestKey = JSON.stringify({\n lockboxUuid,\n filter,\n expandPrivateMetadata,\n lockboxOwnerUuid,\n })\n if (!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(\n lockboxUuid,\n\n filter,\n false,\n grant.lockboxOwnerUuid,\n true\n )\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, forceRefresh: boolean = false): Promise<Consult[]> {\n return Promise.all(\n (await this.getGrants(undefined, forceRefresh)).map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n true,\n undefined,\n forceRefresh\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 forceRefresh: boolean = 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 }, forceRefresh))\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 forceRefresh\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 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 true\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":["undefined","personalMetaToPrefix","MetadataCategory","Personal","ChildPersonal","OtherPersonal","identificationToPersonalInformations","data","category","prefix","birthday","firstname","gender","name","phone","zip","hid","pharmacy","address","toActualObject","ret","Object","entries","fields","forEach","key","field","displayedAnswer","answer","updatePersonalIntoPopulatedWorkflowData","infos","JSON","parse","stringify","kind","extractISOLocalityForConsult","answers","arrAnswersWithLocality","flatMap","currentAnswerPage","arrCountryFields","keys","filter","workflowFieldName","indexOf","flat","arrProvinceFields","arrConsultLocalFields","map","currentFieldName","item","arrSelectedLocality","currentSelectedLocality","startsWith","length","console","log","allowedLocalityPatterns","finalLocality","reduce","extractedSelected","exec","indexSelectedPriority","isoSelectedValue","extractedFinal","indexFinalPriority","isoFinalValue","sessionPrivateKeyPrefix","sessionStorePrivateKeyName","id","IncompleteAuthentication","Error","MissingGrant","MissingLockbox","MissingLockboxOwner","AssociatedLockboxNotFound","WorkflowAnswersMissingError","filterTriggeredAnsweredWithKind","workflowData","selectedAnswers","flattenedAnswers","flattenSelectedAnswers","triggeredQuestionsWithKind","fromEntries","pages","a","questions","question","isTriggered","triggers","samePageAnswers","prev","cur","res","questionFieldName","getWorkflowDataByCategory","triggeredQuestions","Promise","all","e","k","v","populateWorkflowField","then","populatedValue","workflowCreatedAt","createdAt","workflowId","locale","err","error","getImagesFromIndexDb","getMany","answerValue","text","value","images","image","imageData","resolve","trigger","includes","linearAnswers","push","values","getInitialisedSelectedAnswers","workflow","useDefault","page","defaultValue","fillWorkflowFromPopulatedWorkflow","populatedWorkflow","filledWorkflow","pageIdx","MAX_RETRIES","registerPatient","patientUuid","consultRequest","oroClient","masterKey","recoveryQA","consult","lockboxUuid","practitionerAdmin","retry","identity","errorsThrown","setTimeout","practiceClient","practiceGetFromUuid","uuidPractice","uuidAdmin","practiceGetPractitioners","practitioners","getOrCreatePatientConsultationUuid","getOrCreatePatientLockbox","guardClient","identityGet","grantLockbox","grantPromises","practitioner","uuid","consultIndex","IndexKey","ConsultationLockbox","grant","lockboxOwnerUuid","consultationId","consultIndexPromises","vaultIndexAdd","storeImageAliases","storePatientData","isoLanguageRequired","recoveryMasterKey","updateMasterKey","recoverySecurityQuestions","updateSecurityQuestions","recoverySecurityAnswers","consultClient","updateConsultByUUID","statusMedical","MedicalStatus","New","searchIndexConsultation","cleanIndex","practiceGetPayment","idStripeInvoiceOrPaymentIntent","payment","uuidConsult","getConsultByUUID","consultCreate","getGrants","grants","vaultClient","lockboxCreate","isoLanguage","getOrInsertJsonData","Raw","contentType","Consultation","documentType","DocumentType","PopulatedWorkflowData","Medical","consultationIds","extractAndStorePersonalWorkflowData","Preference","dataUuids","nonNullImages","img","promises","ImageAlias","idbId","extractPersonalInfoFromConsultId","consultUuid","getPersonalInformationsFromConsultId","personalInformations","childInformations","debug","otherInformations","otherPersonalInformations","childPersonalInformations","terms","personalInfo","childPersonalInfo","otherPersonalInfo","searchClient","index","decryptGrants","encryptedGrants","rsaKey","encryptedLockbox","uuidParse","base64DecryptToBytes","decryptConsultLockboxGrants","encryptedConsultLockboxes","base64DecryptToJson","encryptedIndexEntry","grantsTuple","grantTuples","filterGrantsWithLockboxMetadata","vaultIndex","forceRefresh","buildLegacyVaultIndex","indexConsults","consultGrant","consultGrants","lockboxMetadataGet","consults","setVaultIndex","info","OroClient","toolbox","tellerClient","workflowClient","diagnosisClient","authenticationCallback","cachedMetadataGrants","cachedManifest","signUp","email","password","practice","tosAndCpAcceptance","tokenData","subscription","skipEmailValidation","rsa","CryptoRSA","privateKey","symmetricEncryptor","CryptoChaCha","fromPassphrase","recoveryPassword","bytesEncryptToBase64Payload","hashedPassword","hashStringToBase64","emailConfirmed","signupRequest","practiceUuid","toLowerCase","publicKey","encodeToBase64","identityCreate","recoveryLogin","symetricEncryptor","sessionStorage","setItem","confirmEmail","accessToken","setTokens","whoAmI","claims","identityUpdate","sub","signIn","otp","tokenRequest","authToken","userUuid","recoverPrivateKeyFromPassword","resumeSession","recoveryPayload","getItem","recoveryKey","symmetricDecryptor","base64PayloadDecryptToBytes","fromKey","localEncryptToJsonPayload","chaChaKey","encryptedData","jsonEncryptToBase64Payload","encryptedKey","encryptToBytes","localDecryptJsonPayload","decryptedData","base64PayloadDecryptToJson","signOut","secrets","refreshToken","authLogout","buildVaultIndex","forceUpdateIndexEntries","indexConsultLockbox","alert","indexOwnerUuid","base64IndexOwnerPubKey","rsaPub","decodeFromBase64","encryptedIndex","keyString","uniqueHash","timestamp","jsonWithPubEncryptToBase64","find","vaultIndexPut","indexSnapshotAdd","cleanedIndex","c","vaultIndexSnapshotPut","granteeUuid","getCachedSecretCryptor","secret","base64GranteePublicKey","granteePublicKey","granteeEncryptedSecret","bytesWithPubEncryptToBase64","request","encryptedSecret","lockboxGrant","createMessageData","message","previousDataUuid","author","encryptedPrivateMeta","meta","Message","publicMetadata","privateMetadata","lockboxDataStore","createMessageAttachmentData","Uint8Array","arrayBuffer","lastModified","size","fileName","type","createConsultationAttachmentData","createBytesData","createJsonData","privateMeta","forceReplace","lockboxManifestGet","manifest","dataUuid","getJsonData","lockboxDataGet","encryptedPayload","getBytesData","filterString","vaultIndexGet","grantsByConsultLockbox","decryptedConsults","grantsGet","decryptedGrants","findIndex","lockboxSecretGet","sharedSecret","cryptor","getMetaCategoryFromConsultId","getMedicalDataFromConsultId","getLockboxManifest","entry","metadata","getPersonalInformations","userId","lockbox","identificationDataUuid","getGrantFromConsultId","getIdentityFromConsultId","expandPrivateMetadata","manifestKey","createPersonalInformations","createUserPreference","preference","getDataFromGrant","getUserPreferenceFromConsultId","getUserPreference","getRecoveryDataFromConsultId","Recovery","getRecoveryData","getAssignedConsultations","promise","getPastConsultationsFromConsultId","consultationsInLockbox","consultId","getPatientConsultationData","getPatientPrescriptionsList","getPatientDocumentsList","Prescription","getPatientResultsList","Result","getPatientTreatmentPlans","TreatmentPlan","getPatientTreatmentPlanByUuid","treatmentPlanId","filters","recoverPrivateKeyFromSecurityQuestions","threshold","shards","answeredShards","shard","indexOfQuestion","securityQuestion","securityAnswer","reconstructSecret","recoverPrivateKeyFromMasterKey","securityQuestionPayload","breakSecretIntoShards","updateRequest","updatePassword","newPassword","oldPassword","passwordPayload","masterKeyPayload","updatedIdentity","CliniaService","url","apiKey","api","AxiosService","headers","placeSearch","searchOptions","post","params","placeMatch","places","place","wasmPath","init","tellerBaseURL","vaultBaseURL","guardBaseURL","searchBaseURL","practiceBaseURL","consultBaseURL","workflowBaseURL","diagnosisBaseURL","initApis","tellerService","practiceService","consultService","vaultService","guardService","searchService","workflowService","diagnosisService","client"],"mappings":"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"}