oro-sdk-apis 5.17.0 → 6.0.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-apis.cjs.production.min.js","sources":["../src/helpers/hash.ts","../src/models/consult.ts","../src/models/diagnosis.ts","../src/services/axios.ts","../src/services/api.ts","../src/services/apisPracticeManager.ts","../src/models/practice.ts","../src/models/vault.ts","../src/models/workflow.ts","../src/models/search.ts","../src/models/error.ts","../src/services/consult.ts","../src/services/diagnosis.ts","../src/services/guard.ts","../src/services/search.ts","../src/services/practice.ts","../src/services/teller.ts","../src/services/vault.ts","../src/services/workflow.ts","../src/helpers/init.ts"],"sourcesContent":["import { sha256 } from 'hash.js'\nimport { Buffer } from 'buffer/'\n\n/**\n * This function return a base64 string representation of a hashed string\n * @param value the string to hash\n * @returns a base64 string representation of a hashed value\n */\nexport function hashToBase64String(value: string): string {\n return Buffer.from(sha256().update(value).digest('hex'), 'hex').toString('base64')\n}\n","export enum AssistantType {\n MedicalSecretary = 'MedicalSecretary',\n Nurse = 'Nurse',\n Specialist = 'Specialist',\n Administrative = 'Administrative',\n Other = 'Other',\n}\n\nexport interface ConsultAssignedAssistant {\n id?: number ///optional for insertion\n uuidConsult: string\n uuidAssistant: string\n type: AssistantType\n tagSpecialty?: string\n duuidCurrentTaskDescription?: string\n}\n\nexport enum TransmissionKind {\n Fax = 'Fax',\n Email = 'Email',\n SMS = 'SMS',\n EncryptedEmail = 'EncryptedEmail',\n Logs = 'Logs',\n API = 'API',\n Other = 'Other',\n}\n\nexport enum TransmissionStatus {\n Preparing = 'Preparing',\n Sending = 'Sending',\n Sent = 'Sent',\n Retrying = 'Retrying',\n Failed = 'Failed',\n DriverError = 'DriverError',\n TimedOut = 'TimedOut',\n ReceiverNotExist = 'ReceiverNotExist',\n ReceiverNotAnswering = 'ReceiverNotAnswering',\n ReceiverIncompatible = 'ReceiverIncompatible',\n}\n\nexport interface ConsultTransmission {\n id: number\n uuidConsult: string\n kind: TransmissionKind\n status: TransmissionStatus\n nameDriverReceiver: string\n addressReceiver: string\n idDriverForTransmission: string\n txtLastDriverMessage: string\n numTry: number\n numTryLeft: number\n delay: number\n tsFirstTry: string\n tsLastStatusUpdate: string\n keyWebhookSecret: string\n}\n\nexport enum ConsultType {\n Onboard = 'Onboard',\n Refill = 'Refill',\n}\n\nexport enum FeeStatus {\n NoFee = 'NoFee',\n Pending = 'Pending',\n Paid = 'Paid',\n Reimbursed = 'Reimbursed',\n Cancelled = 'Cancelled',\n Contested = 'Contested',\n}\n\nexport enum MedicalStatus {\n Creating = 'Creating',\n Assigning = 'Assigning',\n Assigned = 'Assigned',\n New = 'New',\n ToAnswer = 'ToAnswer',\n Answered = 'Answered',\n Closing = 'Closing',\n Closed = 'Closed',\n Reopened = 'Reopened',\n Archived = 'Archived',\n Failed = 'Failed',\n}\n\nexport enum TaskStatus {\n None = 'None',\n ToDo = 'ToDo',\n InProgress = 'InProgress',\n Blocked = 'Blocked',\n Done = 'Done',\n}\n\nexport enum ClosedReasonType {\n /**\n * A completed consultation\n */\n Completed = 'Completed',\n /**\n * The conclusion was that what the patient submitted was not a disease\n */\n NotADisease = 'NotADisease',\n /**\n * The consultation was not appropriate for virtual\n */\n NotAppropriateForVirtual = 'NotAppropriateForVirtual',\n /**\n * Any other reason why the consultation was closed\n */\n Other = 'Other',\n /**\n * A consultation that is required to be done in person\n */\n RequiresInPerson = 'RequiresInPerson',\n}\n\nexport interface ClosedConsultReasonInsertFields {\n /**\n * The uuid of the consultation\n */\n consult_uuid: string\n /**\n * The reason why the consultation was closed\n */\n closed_reason_type: ClosedReasonType\n /**\n * The description why the consultation was closed\n */\n closed_reason_description: string\n /**\n * When the consultation was closed\n */\n created_at: string\n}\n\nexport interface ConsultClosedReason {\n /**\n * The reason why the consultation was closed\n */\n closedReasonType: ClosedReasonType\n /**\n * The description why the consultation was closed\n */\n closedReasonDescription?: string\n}\n\nexport interface ConsultRequest {\n uuidPractice: string\n consultType?: ConsultType\n tagSpecialtyRequired: string\n idStripeInvoiceOrPaymentIntent: string\n isoLocalityRequired?: string\n isoLanguageRequired: string\n uuidParent?: string\n}\nexport interface Consult {\n uuid: string\n uuidPracticeAdmin: string\n uuidPractice: string\n tagSpecialtyRequired: string\n isoLanguageRequired: string\n idPracticePayment: number\n statusFee?: FeeStatus\n isoLocalityRequired: string\n statusMedical?: MedicalStatus\n consultType: ConsultType\n uuidAssignedDoctor: string\n uuidCurrentAssigned: string\n uuidParent?: string\n statusTask?: TaskStatus\n hasTransmissions?: boolean\n assignedAssistant?: ConsultAssignedAssistant[]\n closeConsultReason?: ConsultClosedReason\n shortId?: string\n createdAt?: string\n expiresAt?: string\n}\n","export enum VisibilityType {\n Generic = 'Generic',\n Private = 'Private',\n Instance = 'Instance',\n}\n\nexport type DiagnosisType = VisibilityType\n\nexport type TreatmentType = VisibilityType\n\nexport interface DiagnosisRequest {\n uuid?: string\n name: string\n description: string\n type: DiagnosisType\n parentUuid?: string\n language: string\n tags?: string[]\n urlMultimedia?: string\n}\n\nexport interface Diagnosis extends DiagnosisRequest {\n uuid: string\n uuidPractice: string\n uuidPractitioner?: string\n createdAt: string\n}\n\n// Type defined to store all consult related data linked to a given treatment\nexport interface TreatmentAssociatedConsultData {\n uuidConsult: string\n consultKind: string\n}\n\nexport interface TreatmentRequest {\n uuid?: string\n uuidDiagnosis?: string\n uuidParentTreatment?: string\n uuidPreviousRevision?: string\n name: string\n description: string\n refillable?: boolean\n noteToPharmacy?: string\n urlMultimedia?: string\n type?: TreatmentType\n}\n\nexport interface Treatment extends TreatmentRequest {\n uuid: string\n uuidDiagnosis: string\n uuidPractitioner?: string\n createdAt: string\n arrAssociatedConsults?: TreatmentAssociatedConsultData[]\n}\n\nexport enum DrugType {\n Generic = 'Generic',\n Instance = 'Instance',\n}\n\nexport interface DrugRequest {\n name: string // name of the drug\n description?: string // Description of the drug\n type: DrugType // Entry type\n language: string // drug locale\n posology?: string // drug posology\n sideEffects?: string // Side effects of the drug\n imageUrl?: string // Image URL to the drug\n parentUuid?: string // (optional) parent uuid of the drug. In case of DrugType.Instance\n uuid?: string // uuid of the drug (will be used as parentUuid in case of creation of new drug)\n}\n\nexport interface Drug extends DrugRequest {\n uuid: string\n uuidPractice: string\n uuidPractitioner?: string\n createdAt: string\n}\n\n/**\n * Status of the prescription\n * Right now, it only serves a soft delete flag\n */\nexport enum PrescriptionStatus {\n Existing = 'Existing',\n Deleted = 'Deleted',\n}\n\nexport interface PrescriptionRequest {\n uuid?: string\n uuidTreatment?: string\n uuidDrug?: string\n quantity: string\n sig: string\n renewal: string\n}\n\nexport interface Prescription extends PrescriptionRequest {\n uuid: string\n uuidTreatment: string\n status?: PrescriptionStatus\n createdAt: string\n}\n\nexport enum PlanStatus {\n Pending = 'Pending',\n Accepted = 'Accepted',\n Rejected = 'Rejected',\n PreviouslyAccepted = 'PreviouslyAccepted',\n}\n\nexport interface TreatmentPlan {\n uuid: string\n uuidConsult: string\n uuidDiagnosis: string\n uuidTreatment?: string\n notes?: string\n status: PlanStatus\n decidedAt: string\n createdAt: string\n}\n\nexport interface DrugPrescription {\n prescription: Prescription\n drug: Drug\n}\n\nexport interface TreatmentAndDrugPrescription {\n treatmentsHistory?: TreatmentHistory[]\n notes?: string\n status: PlanStatus\n uuidTreatmentPlan: string\n /**\n * this field is used to store the datetime when the patient accepted or refused the prescription\n */\n decidedAt?: string\n createdAt: string\n}\n\n/**\n * An entry in the history of the treatments of the patient.\n * The history entry consists of the treatment and the prescriptions and the drugs\n * that were prescribed to the patient at that point of history\n */\nexport interface TreatmentHistory {\n treatment: Treatment\n treatmentRevisions: Treatment[]\n prescriptionsAndDrugs: DrugPrescription[]\n}\n\nexport interface TreatmentPlans {\n uuidConsult: string\n diagnosis: Diagnosis\n plans?: TreatmentAndDrugPrescription[]\n}\n\nexport interface DrugPrescriptionRequest {\n prescription: PrescriptionRequest\n drug: DrugRequest\n}\n\nexport interface TreatmentAndDrugPrescriptionRequest {\n trackingId: string\n treatment: TreatmentRequest\n prescriptionsAndDrugs?: DrugPrescriptionRequest[]\n}\n\nexport interface TreatmentPlansRequest {\n uuidConsult: string\n diagnosis: DiagnosisRequest\n plans?: TreatmentAndDrugPrescriptionRequest[]\n}\n\nexport interface TreatmentAndDrugPrescriptionUpdateRequest {\n treatment: Treatment\n prescriptionsAndDrugs?: DrugPrescriptionRequest[]\n}\n\nexport interface TreatmentPlanUpdateRequest extends TreatmentPlansRequest {\n uuidConsult: string\n diagnosis: DiagnosisRequest\n plan: TreatmentAndDrugPrescriptionUpdateRequest\n /**\n * request to refill the treatment plan\n */\n refill?: boolean\n}\n\nexport interface TreatmentPlansResponseEntry {\n trackingId?: string // can be undefined if treatmentPlan does not contain a treatment\n treatmentPlan: TreatmentPlan\n}\n\nexport interface TreatmentPlansResponse extends Array<TreatmentPlansResponseEntry> {}\n\nexport interface TreatmentAssociatedConsultDataResponse extends Array<TreatmentAssociatedConsultData> {}\n","import type { AxiosRequestConfig } from 'axios'\nimport axios, { AxiosInstance } from 'axios'\n\n\nexport class AxiosService {\n protected axios: AxiosInstance\n\n constructor(\n config?: AxiosRequestConfig\n ) {\n if (!config) config = {}\n\n this.axios = axios.create(config)\n }\n\n protected async apiRequest(config: AxiosRequestConfig, url: string, data?: any) {\n if (!config.headers) config.headers = {}\n\n config.headers['Content-Type'] = 'application/json'\n\n return this.axios({\n ...config,\n url,\n data: data,\n }).then((res) => {\n return res.data\n })\n }\n\n protected async apiRequestHeader(config: AxiosRequestConfig, url: string, headerToRetrieve?: string, data?: any,) {\n if (!config.headers) config.headers = {}\n\n config.headers['Content-Type'] = 'application/json'\n\n return this.axios({\n ...config,\n url,\n data: data,\n }).then((res) => {\n if (headerToRetrieve) {\n return res.headers[headerToRetrieve] ?? res.headers[headerToRetrieve.toLowerCase()]\n }\n\n return res.headers\n })\n }\n\n public get<T = any>(url: string, config?: AxiosRequestConfig): Promise<T> {\n return this.apiRequest({ ...config, method: 'get' }, url)\n }\n\n public deleteRequest<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<T> {\n return this.apiRequest({ ...config, method: 'delete' }, url)\n }\n\n public post<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<T> {\n return this.apiRequest({ ...config, method: 'post' }, url, data)\n }\n\n public put<T = any>(\n url: string,\n data: any,\n config?: AxiosRequestConfig\n ): Promise<T> {\n return this.apiRequest({ ...config, method: 'put' }, url, data)\n }\n\n public patch<T = any>(\n url: string,\n data: any,\n config?: AxiosRequestConfig\n ): Promise<T> {\n return this.apiRequest({ ...config, method: 'patch' }, url, data)\n }\n\n public head<T = any>(\n url: string,\n config?: AxiosRequestConfig,\n headerToRetrieve?: string,\n data?: any\n ): Promise<T> {\n return this.apiRequestHeader({ ...config, method: 'head' }, url, headerToRetrieve, data)\n }\n}\n","import type { AxiosRequestConfig } from 'axios'\nimport createAuthRefreshInterceptor from 'axios-auth-refresh'\nimport { AuthRefreshFunc, Tokens } from '../models'\nimport { AxiosService } from './axios'\nimport { GuardRequestConfig } from './guard'\nimport { v4 as uuidv4 } from 'uuid'\n\nexport class APIService extends AxiosService {\n private authRefreshFn?: AuthRefreshFunc\n private tokens: Tokens = {}\n\n /**\n * The API Service lets you use an axios API and handles oro backend services authentification via JWT tokens\n * @param useLocalStorage if set to true, tokens will be stored in localStorage\n * @param config (optional) an axios config\n * @param tokenRefreshFailureCallback (optional) callback to call when failing to refresh the auth token\n */\n constructor(\n private useLocalStorage: boolean,\n config?: AxiosRequestConfig,\n private tokenRefreshFailureCallback?: (err: Error) => void\n ) {\n super(config)\n const self = this\n const sessionId = uuidv4()\n\n this.axios.interceptors.request.use(\n (config) => {\n const token = (config as GuardRequestConfig).useRefreshToken\n ? self.getTokens().refreshToken\n : self.getTokens().accessToken\n\n config.headers = {\n ...config.headers,\n Authorization: `Bearer ${token}`,\n 'X-Session-Id': sessionId,\n 'X-Request-Id': uuidv4(),\n }\n return config\n },\n (error) => {\n Promise.reject(error)\n }\n )\n\n createAuthRefreshInterceptor(\n this.axios,\n async function (failedRequest) {\n if (self.authRefreshFn) {\n try {\n let tokenResp = await self.authRefreshFn(self.getTokens().refreshToken)\n self.setTokens({\n accessToken: tokenResp.accessToken,\n refreshToken: tokenResp.refreshToken,\n })\n failedRequest.response.config.headers['Authorization'] = `Bearer ${\n self.getTokens().accessToken\n }`\n return Promise.resolve()\n } catch (e) {\n console.error('an error occured while refreshing tokens (notifying callback)', e)\n if (self.tokenRefreshFailureCallback) self.tokenRefreshFailureCallback(failedRequest)\n return Promise.resolve() // We keep it like that. Otherwise, it seems to break the api service will it is not needed\n // return Promise.reject(e)\n }\n }\n console.error('The request could not refresh the token (authRefreshFn was not set)', failedRequest)\n return Promise.resolve() // We keep it like that. Otherwise, it seems to break the api service will it is not needed\n // return Promise.reject(failedRequest)\n },\n { statusCodes: [401, 403] }\n )\n }\n\n public setAuthRefreshFn(fn: AuthRefreshFunc) {\n this.authRefreshFn = fn\n }\n\n public setTokens(tokens: Tokens) {\n if (this.useLocalStorage) {\n localStorage.setItem('tokens', JSON.stringify(tokens))\n }\n this.tokens = tokens\n }\n\n public getTokens(): Tokens {\n if (this.useLocalStorage) {\n let tokens: Tokens = {}\n const item = localStorage.getItem('tokens')\n if (item) {\n tokens = JSON.parse(item)\n }\n return tokens\n } else {\n return this.tokens\n }\n }\n}\n","import { init } from '../helpers'\nimport { AuthTokenResponse, ServiceCollection, ServiceCollectionRequest } from '../models'\nimport { GuardService } from './guard'\n\n/**\n * This service enables you to handle one authentication token per practice\n */\nexport class ApisPracticeManager {\n private practiceInstances = new Map<string, ServiceCollection>()\n\n /**\n * The constructor\n * @param serviceCollReq the services to initialize. Only filled urls will get corresponding service to be initialized.\n * It will be used each time a new practices needs a `ServiceCollection`\n * @param getAuthTokenCbk the callback function used to get a new JWT token\n * @param useLocalStorage (default: false) if true store tokens into local storage (only for browsers)\n */\n constructor(\n private serviceCollReq: ServiceCollectionRequest,\n private getAuthTokenCbk: (guard: GuardService, practiceUuid?: string) => Promise<AuthTokenResponse>,\n private useLocalStorage = false\n ) {}\n\n /**\n * This function is used to get a `ServiceCollection` associated to a practice. If missing, it will initialize a new `ServiceCollection`.\n * @param practiceUuid the uuid of the practice\n * @returns a promise holding a `ServiceCollection`\n */\n public async get(practiceUuid?: string): Promise<ServiceCollection> {\n const cacheKey = practiceUuid ?? 'none'\n const practiceInstance = this.practiceInstances.get(cacheKey)\n if (practiceInstance) return practiceInstance\n\n const newPracticeInstance = init(this.serviceCollReq, undefined, this.useLocalStorage)\n\n // Create one auth token callback per practice since the practice uuid needs to change\n const authTokenFunc = async () => {\n if (newPracticeInstance.guardService) {\n console.log(`\\x1b[36m[Auth] Refresh auth called (practiceUuid: ${practiceUuid})\\x1b[36m`)\n return await this.getAuthTokenCbk(newPracticeInstance.guardService, practiceUuid)\n } else {\n throw Error('[Auth] Unable to refresh token guard service is undefined')\n }\n }\n\n // Initialize the M2M token\n await authTokenFunc()\n\n // Set the refresh tokens callback\n newPracticeInstance.apiService.setAuthRefreshFn(authTokenFunc)\n\n this.practiceInstances.set(cacheKey, newPracticeInstance)\n\n return newPracticeInstance\n }\n}\n","import { PlaceData } from '.'\n\nexport enum WorkflowType {\n Onboard = 'Onboard',\n Followup = 'Followup',\n Renew = 'Renew',\n DataRetrieve = 'DataRetrieve',\n}\n\nexport enum RateDimension {\n RatioOnTotal = 'RatioOnTotal',\n FixedOnTotal = 'FixedOnTotal',\n RatioPlatformFee = 'RatioPlatformFee',\n FixedPlatformFee = 'FixedPlatformFee',\n RatioOnPlatformFeeTotal = 'RatioOnPlatformFeeTotal',\n FixedOnPlatformFeeTotal = 'FixedOnPlatformFeeTotal',\n RatioOnItem = 'RatioOnItem',\n FixedOnItem = 'FixedOnItem',\n}\n\nexport enum PlanType {\n Onboard = 'Onboard',\n Followup = 'Followup',\n Renew = 'Renew',\n DataRetrieve = 'DataRetrieve',\n}\n\nexport enum PaymentStatus {\n Pending = 'Pending',\n Success = 'Success',\n Failure = 'Failure',\n Canceled = 'Canceled',\n SuccessAndDelivered = 'SuccessAndDelivered',\n}\n\nexport enum PractitionerStatus {\n Practicing = 'Practicing',\n Retired = 'Retired',\n NotInvolvedAnymore = 'NotInvolvedAnymore',\n Deactivated = 'Deactivated',\n Flagged = 'Flagged',\n InConflict = 'InConflict',\n Delicensed = 'Delicensed',\n}\n\nexport enum AssignmentStatus {\n Assigned = 'Assigned',\n Reassigned = 'Reassigned',\n Cancelled = 'Cancelled',\n}\n\nexport enum PractitionnerRoleType {\n Doctor = 'Doctor',\n MedicalAssistant = 'MedicalAssistant',\n MedicalSecretary = 'MedicalSecretary',\n Nurse = 'Nurse',\n Specialist = 'Specialist',\n LabAssistant = 'LabAssistant',\n Administrative = 'Administrative',\n ManualDispatcher = 'ManualDispatcher',\n Other = 'Other',\n}\n\nexport enum OtherRoleType {\n Patient = 'Patient',\n User = 'User',\n System = 'System',\n}\n\nexport type AllRoleType = OtherRoleType | PractitionnerRoleType\n\nexport enum LicenseStatus {\n Valid = 'Valid',\n Invalid = 'Invalid',\n Expired = 'Expired',\n NA = 'NA',\n Removed = 'Removed',\n}\n\nexport enum PeriodType {\n PerYear = 'PerYear',\n PerQuarter = 'PerQuarter',\n PerMonth = 'PerMonth',\n PerWeek = 'PerWeek',\n PerBusinessDay = 'PerBusinessDay',\n PerDay = 'PerDay',\n PerHour = 'PerHour',\n}\n\nexport enum SyncStatus {\n Requested = 'Requested',\n Started = 'Started',\n Succeeded = 'Succeeded',\n Failed = 'Failed',\n Cancelled = 'Cancelled',\n}\n\nexport enum PracticeEmailKind {\n SignedUp = 'SignedUp',\n Onboarded = 'Onboarded',\n OnboardedPractitioner = 'OnboardedPractitioner',\n OnboardedPatient = 'OnboardedPatient',\n Answered = 'Answered',\n ToAnswer = 'ToAnswer',\n FollowedUp = 'FollowedUp',\n Renewed = 'Renewed',\n DataRetrieved = 'DataRetrieved',\n Closed = 'Closed',\n PasswordRecovery = 'PasswordRecovery',\n FaxFailed = 'FaxFailed',\n ExamResult = 'ExamResult',\n Reassigned = 'Reassigned',\n OnlinePharmacyFaxSent = 'OnlinePharmacyFaxSent',\n ResumeConsult = 'ResumeConsult',\n}\n\nexport interface PracticeAccount {\n id?: number ///optional for insertion\n uuidPractice: string\n isoLocality?: string\n idStripeAccount?: string\n emailBillingContact: string\n urlSubdomain?: string\n}\n\n/**\n * Defines all the practice config kind.\n *\n * Please respect the following when defining a new practice config:\n * - be really specific on its role\n * - all configs needs to have default values in app\n * - the default behavior should always to be display the feature.\n * In other words, practice configs should either be used to hide a functionnality or overwrite a default behavior.\n * To be extra explicit, if you want to show a functionnality only in one practice, you will have to add a practice configs in all other practice to hide it (yes it is cumbersome).\n *\n */\nexport enum PracticeConfigKind {\n PatientConsultCard = 'PatientConsultCard',\n PracticeCloseConsultationTypes = 'PracticeCloseConsultationTypes',\n PracticeConsultTabs = 'PracticeConsultTabs',\n PracticeConfigExample = 'PracticeConfigExample',\n PracticeCookieBanner = 'PracticeCookieBanner',\n PracticeCssVariables = 'PracticeCssVariables',\n PracticeFontsLinks = 'PracticeFontsLinks',\n PracticeLocaleSwitcher = 'PracticeLocaleSwitcher',\n PracticePharmacyPicker = 'PracticePharmacyPicker',\n PracticePrescriptionFields = 'PracticePrescriptionFields',\n PractitionerChatbox = 'PractitionerChatbox',\n PractitionerConsultList = 'PractitionerConsultList',\n PractitionerSearch = 'PractitionerSearch',\n PracticeRegisterWalkthrough = 'PracticeRegisterWalkthrough',\n PracticeExamsAndResults = 'PracticeExamsAndResults',\n PracticeLayout = 'PracticeLayout',\n PracticeAddressField = 'PracticeAddressField',\n PracticeDiagnosisAndTreatment = 'PracticeDiagnosisAndTreatment',\n PracticeInfoLetterDiscount = 'PracticeInfoLetterDiscount',\n}\n\n/**\n * Defines the close consultation types to hide in the close consultation modal of a practice\n */\nexport type PracticeConfigPracticeCloseConsultationTypes = PracticeConfig<\n PracticeConfigKind.PracticeCloseConsultationTypes,\n {\n /**\n * Should hide item with value \"Completed\"\n */\n hideCompleted?: boolean\n\n /**\n * Should hide item with value \"Requires-in-person\"\n */\n hideRequiresInPerson?: boolean\n\n /**\n * Should hide item with value \"Other\"\n */\n hideOther?: boolean\n\n /**\n * Should hide item with value \"Not-a-disease\"\n */\n hideNotADisease?: boolean\n\n /**\n * Should hide item with value \"Appropriate-for-virtual\"\n */\n hideNotAppropriateForVirtual?: boolean\n }\n>\n\n/**\n * Generic interface of a practice config\n *\n * Practice configs needs to have a JSDoc for **all** interface and fields.\n *\n */\nexport interface PracticeConfig<K, T> {\n /**\n * The uuid of the practice to apply the config\n */\n uuidPractice: string\n /**\n * The kind of the practice config. Used as a discriminator to help auto-completion.\n */\n kind: PracticeConfigKind\n /**\n * The actual interface of the config\n */\n config: T\n}\n\nexport type PracticeConfigPatientConsultCard = PracticeConfig<\n PracticeConfigKind.PatientConsultCard,\n { hideDiagnosis?: boolean }\n>\n\nexport type PracticeConfigPracticeConsultTabs = PracticeConfig<\n PracticeConfigKind.PracticeConsultTabs,\n { hideDxTx?: boolean }\n>\n\n/**\n * This type is for test (do not remove without updating the integration tests)\n */\nexport type PracticeConfigPracticeConfigExample = PracticeConfig<\n PracticeConfigKind.PracticeConfigExample,\n { primaryColor?: string }\n>\n\n/**\n * Defines the practice cookie banner\n */\nexport type PracticeConfigPracticeCookieBanner = PracticeConfig<\n PracticeConfigKind.PracticeCookieBanner,\n {\n showCookieBanner?: boolean\n policyLink?: string\n useOfCookieLink?: string\n }\n>\n\n/**\n * This interface describes all practice css variables\n * The keys should reflect the exact css name\n */\nexport type PracticeConfigPracticeCssVariables = PracticeConfig<\n PracticeConfigKind.PracticeCssVariables,\n Record<string, string>\n>\n\n/**\n * Defines the font of the practice css url\n */\nexport type PracticeConfigPracticeFontsLinks = PracticeConfig<\n PracticeConfigKind.PracticeFontsLinks,\n {\n /**\n * sans serif font family\n */\n sansSerif?: string\n /**\n * serif font family\n */\n serif?: string\n }\n>\n\n/**\n * Defines the locale switcher config\n */\nexport type PracticeConfigPracticeLocaleSwitcher = PracticeConfig<\n PracticeConfigKind.PracticeLocaleSwitcher,\n {\n /**\n * Should hide the locale switcher\n */\n hideLocaleSwitcher?: boolean\n }\n>\n\n/**\n * Defines the online pharmacy address of the practice\n */\nexport type PracticeConfigPracticeOnlinePharmacy = PracticeConfig<\n PracticeConfigKind.PracticePharmacyPicker,\n {\n /**\n * The address of the online pharmacy\n */\n onlinePharmacy?: PlaceData\n /**\n * Shows or hides the address input field in the treatment acceptance modal\n */\n showTreatmentAcceptanceAddressInput: boolean\n }\n>\n\n/**\n * Defines the consultation chatbox configs\n */\nexport type PracticeConfigPractitionerChatbox = PracticeConfig<\n PracticeConfigKind.PractitionerChatbox,\n {\n /**\n * If defined will replace the automatic chatbox comment notifiying the patient a new treatment plan has been added. Indexed by locale.\n */\n planAddedMessage?: { [languageISO639_3: string]: string }\n /**\n * If defined will replace the automatic chatbox comment notifiying the patient a new treatment plan has been updated. Indexed by locale.\n */\n planUpdatedMessage?: { [languageISO639_3: string]: string }\n /**\n * If defined will replace the automatic chatbox comment notifiying the patient a new exam has been dispatched. Indexed by locale.\n */\n examsUpdatedMessage?: { [languageISO639_3: string]: string }\n }\n>\n\n/**\n * This config is used to configure the layout of the consult list for practitioners\n */\nexport type PracticeConfigPractitionerConsultList = PracticeConfig<\n PracticeConfigKind.PractitionerConsultList,\n {\n /**\n * Hides the locality column\n */\n hideLocality?: boolean\n /**\n * Hides the plan name column\n */\n hidePlan?: boolean\n /**\n * Hides the fax column\n */\n hideFax?: boolean\n /**\n * Hides the expires at column\n */\n hideExpiresAt?: boolean\n }\n>\n\n/**\n * This config is used to configure the layout of the modular prescription fields\n */\nexport type PracticeConfigPracticePrescriptionFields = PracticeConfig<\n PracticeConfigKind.PracticePrescriptionFields,\n {\n /**\n * the y position in px of the first modular prescription\n */\n yCoordinate?: number\n }\n>\n\n/**\n * This config is used to enable or disable the Search feature\n */\nexport type PracticeConfigPractitionerSearch = PracticeConfig<\n PracticeConfigKind.PractitionerSearch,\n {\n /**\n * Disable search indexing a consultation on its creation\n */\n disableSearchIndexing?: boolean\n /**\n * Disable search for consultations from the ConsultList\n */\n disableSearch?: boolean\n }\n>\n\n/**\n * This config is used to configure the register walkthrough\n */\nexport type PracticeConfigPracticeRegisterWalkthrough = PracticeConfig<\n PracticeConfigKind.PracticeRegisterWalkthrough,\n {\n /**\n * The workflow uuid containing the walkthrough to display. If not defined, the walkthrough slides screen is skipped.\n */\n workflowUuid?: string\n }\n>\n\n/**\n * This config is used for all configs related to the Exams and Results module\n */\nexport type PracticeConfigPracticeExamsAndResults = PracticeConfig<\n PracticeConfigKind.PracticeExamsAndResults,\n {\n /**\n * If true, then show the deprecated URL prescription pad\n */\n showUrlPrescriptionPad?: boolean\n }\n>\n\n/**\n * This config is used for all configs related to the Layout of the app (Navbar, Footer, etc)\n */\nexport type PracticeConfigPracticeLayout = PracticeConfig<\n PracticeConfigKind.PracticeLayout,\n {\n /**\n * If true, then show the FAQ link in the Navbar\n */\n showFaqLink?: boolean\n }\n>\n\n/**\n * This config is used for all configs related to the Google Places address field\n */\nexport type PracticeConfigPracticeAddressField = PracticeConfig<\n PracticeConfigKind.PracticeAddressField,\n {\n /**\n * If true, then show the long version of the address, otherwise, show the short version\n */\n longAddress?: boolean\n }\n>\n\n/**\n * This config is used for all configs related to the Diagnosis and Treatments module\n */\nexport type PracticeConfigPracticeDiagnosisAndTreatment = PracticeConfig<\n PracticeConfigKind.PracticeDiagnosisAndTreatment,\n {\n /**\n * If true, then sort alphabetically the diagnoses, treatments, and drugs shown in their respective select dropdown\n */\n sortNames?: boolean\n /**\n * If true, it enables the Prescription Refill feature\n */\n enableRefill?: boolean\n }\n>\n\n/**\n * This config is used to set a discount code in case the info letter is accepted by the patient\n */\nexport type PracticeConfigPracticeInfoLetterDiscount = PracticeConfig<\n PracticeConfigKind.PracticeInfoLetterDiscount,\n {\n /**\n * The discount code to be applied when the info letter is accepted\n */\n discountCode?: string\n\n /**\n * The text to display for the discount code\n */\n discountText?: string\n\n /**\n * Show the info letter subscription without a Discount code before the patient confirms his email,\n * if he confirms his email but still didn't check the subscription, then display a discount code for subscribing\n */\n promptInfoLetterBeforeEmailConfirmed?: boolean\n }\n>\n\nexport type PracticeConfigs =\n | PracticeConfigPractitionerSearch\n | PracticeConfigPractitionerConsultList\n | PracticeConfigPractitionerChatbox\n | PracticeConfigPracticeLocaleSwitcher\n | PracticeConfigPracticeCookieBanner\n | PracticeConfigPracticeOnlinePharmacy\n | PracticeConfigPracticeCssVariables\n | PracticeConfigPracticeFontsLinks\n | PracticeConfigPracticePrescriptionFields\n | PracticeConfigPracticeConfigExample // Here for integration tests only\n | PracticeConfigPracticeConsultTabs\n | PracticeConfigPatientConsultCard\n | PracticeConfigPracticeExamsAndResults\n | PracticeConfigPracticeLayout\n | PracticeConfigPracticeAddressField\n | PracticeConfigPracticeDiagnosisAndTreatment\n | PracticeConfigPracticeInfoLetterDiscount\n\nexport interface PracticeWorkflow {\n id?: number ///optional for insertion\n uuidPractice: string\n uuidWorkflow: string\n typeWorkflow: WorkflowType\n tagSpecialty?: string\n associatedWorkflowUuid?: string\n}\n\nexport type PracticeWorkflowWithTagSpecialty = PracticeWorkflow & {\n tagSpecialty: string\n}\n\nexport interface PracticePlan {\n id?: number ///optional for insertion\n uuidPractice: string\n isoLocality?: string\n nameDefault: string\n descDefault: string\n hoursExpiration: number\n active: boolean\n namePriceCurrency: string // DEPRECATED: left only for in-app receipt display and lower migration risks\n numPriceAmount: number // DEPRECATED: left only for in-app receipt display and lower migration risks\n numPriceExtDecimal?: number // DEPRECATED: left only for in-app receipt display and lower migration risks\n numPriceExtNegativeExponential?: number // DEPRECATED: left only for in-app receipt display and lower migration risks\n kind: PlanType\n idStripeProduct: string\n idStripePrice: string // DEPRECATED: left only for in-app receipt display and lower migration risks\n dateCreatedAt: Date\n dateUpdateAt: Date\n ratePerThousandOverride: number // DEPRECATED: left only to lower migration risks\n activateFollowUp: boolean\n}\n\nexport enum StripePriceType {\n Default = 'Default',\n Discount = 'Discount',\n}\n\n// Subset of Stripe.Price\nexport interface PracticePrice {\n /**\n * Unique identifier for the object in Stripe.\n */\n idStripePrice: string\n /**\n * Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).\n */\n currency: string\n /**\n * The unit amount in %s to be charged, represented as a whole integer if possible.\n */\n unitAmount: number\n}\n\nexport interface PracticePlanPrices {\n idPlan: number\n default: PracticePrice\n discount?: PracticePrice\n}\n\nexport interface PracticeRate {\n id?: number\n uuidPractice: string\n idPlan: number\n isoLocality?: string\n dimension: RateDimension\n description: string\n uidTaxRate: string\n idStripeTaxRate: string\n}\n\nexport interface PracticePlatformFee {\n uuidPractice: string\n idPlan: number\n isoLocality?: string\n numPlatformFinalFee: number\n}\n\nexport interface PracticePayment {\n id?: number ///optional for insertion\n uuidPractice: string\n idPlan: number\n uuidConsult?: string\n hoursConsultExpiration: number\n idStripeInvoiceOrPaymentIntent: string\n status: PaymentStatus\n dateCreatedAt: Date\n dateUpdateAt: Date\n}\n\nexport interface PracticePaymentIntent {\n id?: number ///optional for insertion\n uuidPractice: string\n idPlan: number\n idPayment: number\n hoursPlanExpiration: number\n isoLocality?: string\n textPaymentMethodOptions: string\n nameCurrency: string\n numTotalAmount: number\n numPlatformFeeAmount: number\n idStripeInvoice: string\n idStripePaymtIntent: string\n /**\n * This value is set only after the PracticePaymentIntent has been finalized and ready to be paid\n */\n stripeClientSecret?: string\n dateCreatedAt?: Date\n dateUpdateAt?: Date\n}\n\n/**\n * All the PaymentIntentRequestMetadata Kind available\n */\nexport enum PaymentIntentRequestMetadataKind {\n ConsultRequestMetadata = 'ConsultRequestMetadata',\n RefillTreatmentRequestMetadata = 'RefillTreatmentRequestMetadata',\n}\n\n/**\n * This interface is used as metadata when creating Stripe Invoice.\n * It will be used to create the consult when stripe use our hook.\n */\nexport interface ConsultRequestMetadata {\n /**\n * Defines the kind of `PaymentIntentRequestMetadata` it is\n *\n * Note: it can be `undefined` to handle backward compatibility when this interface didn't had a `kind`\n */\n kind: PaymentIntentRequestMetadataKind.ConsultRequestMetadata | undefined\n /**\n * The specialty required by the consultation\n */\n tagSpecialtyRequired: string\n /**\n * The locality required for the consultation in iso. COUNTRY (ISO 3166) - PROVINCE - COUNTY - CITY\n */\n isoLocalityRequired?: string\n /**\n * The language required for the consultation. Should respect ISO 639-3 https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes\n */\n isoLanguageRequired: string\n}\n\n/**\n * This interface is used as metadata when creating Stripe Invoice.\n * It will be used to refill a treatment plan of a consult.\n */\nexport interface RefillTreatmentRequestMetadata {\n /**\n * Defines the kind of `PaymentIntentRequestMetadata` it is\n */\n kind: PaymentIntentRequestMetadataKind.RefillTreatmentRequestMetadata\n /**\n * The consult uuid to refill\n */\n consultUuid: string\n}\n\n/**\n * This interface is used as metadata when creating Stripe Invoice.\n * It will be used when stripe uses our hook.\n */\nexport type PaymentIntentRequestMetadata = ConsultRequestMetadata | RefillTreatmentRequestMetadata\n\nexport interface AssignmentRequest {\n uuidAssignor: string //defaulting for insertion to the default practice admin\n uuidPractitioner?: string\n status?: AssignmentStatus\n uuidConsult?: string\n tagSpecialty?: string\n isoLocality?: string\n isoLanguage?: string\n}\n\nexport type Assignment = {\n id: number ///optional for insertion\n uuidPractice: string\n uuidAssignor: string //defaulting for insertion to the default practice admin\n uuidPractitioner?: string\n status?: AssignmentStatus\n uuidConsult?: string\n tagSpecialty?: string\n timeAssigned?: string //defaulting for insertion\n}\n\nexport interface PractitionerRole {\n id?: number //optional for insertion\n uuidPractice: string\n uuidPractitioner: string\n role: PractitionnerRoleType\n dateGiven?: Date //default during insertion\n}\n\nexport interface PractitionerLicense {\n id?: number ///optional for insertion\n uuidPractitioner: string\n country: string\n tagSpecialty: string\n isoLocality: string\n txtLicenseNumber: string\n txtComplementary?: string\n dateProvidedAt?: Date\n dateObtainedAt?: Date\n dateRenewedAt?: Date\n status?: LicenseStatus\n}\n\nexport interface PractitionerPreference {\n id?: number\n uuidPractitioner: string\n uuidPractice: string\n tagSpecialties: string\n isoLocalityConsult?: string\n periodQuotaConsult?: PeriodType\n quantityQuotaConsult?: number\n tagConsultLanguages?: string\n}\n\nexport interface PractitionerQuota {\n id?: number ///optional for insertion\n uuidPractitioner: string\n uuidPractice: string\n tagSpecialty: string\n isoLocality: string\n quantityLeft?: number\n dateRenewal?: Date\n dateLastUpdate?: Date\n}\n\nexport interface Practitioner {\n uuid: string\n uuidPractice: string\n txtFirstName: string\n txtLastName: string\n txtTitle: string\n emailAddress: string\n tagsSpecialties: string\n arrLanguages: string\n dateAddedAt?: Date //defaulting for insertion\n status?: PractitionerStatus //defaulting for insertion\n txtAddressTransmission?: string //the default non-fax address to send prescription to\n}\n\nexport interface HydratedPracticeConfigs {\n [PracticeConfigKind.PatientConsultCard]?: PracticeConfigPatientConsultCard\n [PracticeConfigKind.PracticeCloseConsultationTypes]?: PracticeConfigPracticeCloseConsultationTypes\n [PracticeConfigKind.PracticeConsultTabs]?: PracticeConfigPracticeConsultTabs\n [PracticeConfigKind.PracticeConfigExample]?: PracticeConfigPracticeConfigExample\n [PracticeConfigKind.PracticeCookieBanner]?: PracticeConfigPracticeCookieBanner\n [PracticeConfigKind.PracticeCssVariables]?: PracticeConfigPracticeCssVariables\n [PracticeConfigKind.PracticeFontsLinks]?: PracticeConfigPracticeFontsLinks\n [PracticeConfigKind.PracticeLocaleSwitcher]?: PracticeConfigPracticeLocaleSwitcher\n [PracticeConfigKind.PracticePharmacyPicker]?: PracticeConfigPracticeOnlinePharmacy\n [PracticeConfigKind.PracticePrescriptionFields]?: PracticeConfigPracticePrescriptionFields\n [PracticeConfigKind.PractitionerChatbox]?: PracticeConfigPractitionerChatbox\n [PracticeConfigKind.PractitionerConsultList]?: PracticeConfigPractitionerConsultList\n [PracticeConfigKind.PractitionerSearch]?: PracticeConfigPractitionerSearch\n [PracticeConfigKind.PracticeRegisterWalkthrough]?: PracticeConfigPracticeRegisterWalkthrough\n [PracticeConfigKind.PracticeExamsAndResults]?: PracticeConfigPracticeExamsAndResults\n [PracticeConfigKind.PracticeLayout]?: PracticeConfigPracticeLayout\n [PracticeConfigKind.PracticeAddressField]?: PracticeConfigPracticeAddressField\n [PracticeConfigKind.PracticeDiagnosisAndTreatment]?: PracticeConfigPracticeDiagnosisAndTreatment\n [PracticeConfigKind.PracticeInfoLetterDiscount]?: PracticeConfigPracticeInfoLetterDiscount\n}\n\nexport interface Practice {\n uuid: string\n name: string\n shortName: string\n countryOperating: string\n urlPractice: string\n urlLinkedPage?: string\n urlTos?: string\n urlConfidentiality?: string\n uuidAdmin: string\n uuidDefaultAssigned: string\n uuidDefaultFallback: string\n prefDefaultLang: string\n keyGoogleTagNonProd: string\n keyGoogleTagProd: string\n txtAddress?: string\n emailBusiness?: string\n phoneBusiness?: string\n urlSupport?: string\n emailSupport?: string\n phoneSupport?: string\n phoneFax?: string\n txtTaxID?: string\n txtVATID?: string\n txtRegistrationID?: string\n txtLegalInfos?: string\n txtDefaultTransmissionDriver?: string\n txtDefaultTransmissionAddress?: string\n accounts?: PracticeAccount[]\n configs?: HydratedPracticeConfigs\n}\n\nexport interface Sync {\n id?: number\n status?: SyncStatus\n descriptionStep: string\n dateStarted?: Date\n dateFinished?: Date\n}\n\nexport interface PracticeEmail {\n id?: number\n uuidPractice: string\n kind: PracticeEmailKind\n idMailgunTemplate: string\n isoLanguage: string\n tags: string\n}\n\nexport interface PracticeSubscription {\n id?: number\n uuidPractice: string\n idMailChimpAudience: string\n isoLanguage: string\n}\n\nexport interface PracticeInvoice {\n id: string //Stripe invoice ID\n customerEmail: string\n total: number\n subtotal: number\n currency: string\n discount: number\n}\n\n/**\n * This interface represents a practice secret\n * It is used to generate a symetric key to encrypt\n * practice related data\n */\nexport interface PracticeSecret {\n practiceUuid: string\n /**\n * The payload is the actual base64 encoded bytes that can\n * be used as the practice secret. In the db,\n * this field is base64 encoded nonce+encrypted-payload.\n * It's decrypted on the fly when returned by the api.\n */\n payload: string\n}\n","import { Uuid, Base64String, Metadata } from './shared'\nimport { MetadataCategory } from './workflow'\n\nexport interface LockboxCreateResponse {\n lockboxUuid: Uuid\n}\n\nexport interface SharedSecretResponse {\n sharedSecret: Base64String\n}\n\nexport interface LockboxGrantRequest {\n granteeUuid: Uuid\n encryptedSecret: Base64String\n}\n\nexport interface LockboxDataRequest {\n publicMetadata?: Metadata\n privateMetadata?: Base64String\n data: Base64String\n}\n\nexport type LockboxManifest = ManifestEntry[]\n\nexport interface ManifestEntry {\n dataUuid: Uuid\n metadata: Metadata\n}\n\nexport interface GrantedLockboxes {\n grants: Grant[]\n}\n\nexport interface Grant {\n lockboxOwnerUuid?: Uuid\n encryptedLockbox?: Base64String\n lockboxUuid?: Uuid\n}\n\nexport interface DataCreateResponse {\n dataUuid: Uuid\n}\n\nexport interface DataResponse {\n data: Base64String\n}\n\nexport interface IndexEntry {\n uuid?: Uuid\n uniqueHash?: Base64String\n timestamp?: Date\n}\n\nexport interface IndexConsultLockbox extends IndexEntry {\n consultationId: Uuid\n grant: Grant\n}\n\nexport interface VaultIndex extends IndexEntry {\n [IndexKey.ConsultationLockbox]?: IndexConsultLockbox[] // only one should ever exist at a time\n [IndexKey.Consultation]?: IndexConsultLockbox[] // DEPRECATED REMOVE ME\n}\n\nexport interface EncryptedVaultIndex {\n [IndexKey.Consultation]?: EncryptedIndexEntry[]\n [IndexKey.ConsultationLockbox]?: EncryptedIndexEntry[]\n [IndexKey.IndexSnapshot]?: EncryptedIndexEntry[]\n}\n\nexport interface EncryptedIndexEntry extends IndexEntry {\n encryptedIndexEntry: Base64String\n}\n\nexport enum IndexKey {\n Consultation = 'Consultation', //DEPRECATED REMOVE ME\n IndexSnapshot = 'IndexSnapshot', //DEPRECATED REMOVE ME\n ConsultationLockbox = 'ConsultationLockbox'\n}\n\nexport interface Document extends ManifestEntry {\n lockboxOwnerUuid?: Uuid\n lockboxUuid: Uuid\n}\n\nexport interface Meta {\n documentType?: DocumentType\n category: MetadataCategory\n contentType?: string\n}\n\nexport interface PreferenceMeta extends Meta {\n category: MetadataCategory.Preference\n contentType: 'application/json'\n}\n\nexport interface RecoveryMeta extends Meta {\n category: MetadataCategory.Recovery\n contentType: 'application/json'\n}\n\nexport interface RawConsultationMeta extends Meta {\n category: MetadataCategory.Raw\n contentType: 'application/json'\n consultationId?: Uuid\n}\n\nexport interface ConsultationMeta extends Meta {\n documentType: DocumentType\n category: MetadataCategory.Consultation\n consultationId?: Uuid\n}\n\nexport interface ConsultationImageMeta extends ConsultationMeta {\n idbId: Uuid\n}\n\nexport interface MedicalMeta extends Meta {\n documentType:\n | DocumentType.PopulatedWorkflowData\n | DocumentType.Result\n | DocumentType.Prescription\n | DocumentType.DoctorsNote\n category: MetadataCategory.Medical\n consultationIds?: Uuid[]\n}\n\nexport interface PersonalMeta {\n documentType: DocumentType.PopulatedWorkflowData | DocumentType.Note\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n consultationIds?: Uuid[]\n}\n\nexport enum DocumentType {\n Message = 'Message',\n Note = 'Note',\n DoctorsNote = 'DoctorsNote',\n Prescription = 'Prescription',\n ExamRequest = 'ExamRequest',\n Result = 'Result',\n Attachment = 'Attachment',\n BigFile = 'BigFile',\n MeetingRequest = 'MeetingRequest',\n AudioNote = 'AudioNote',\n VideoNote = 'VideoNote',\n PopulatedWorkflowData = 'PopulatedWorkflowData',\n TreatmentPlan = 'TreatmentPlan',\n ImageAlias = 'ImageAlias',\n}\n\nexport interface LocalizedData<T = any> {\n lockboxOwnerUuid?: string\n lockboxUuid: string\n dataUuid: string\n data: T\n}\n","/**\n * This type represents all the patient profile kind\n */\nexport type ProfileKind = 'myself' | 'child' | 'other'\n/**\n * this type is done as an example on how to add another data kind\n */\nexport type OtherKind = 'otherKindOfType'\n\n/**\n * This type represents all the kind a data that can define `ChoiceInputData` (`OtherKind` is here only as an example on how to add a new kind)\n */\nexport type AllChoiceInputDataKind = ProfileKind | OtherKind\n\n/**\n * This interface represents a `StateTrigger` on selected profile kind\n */\nexport interface ProfileTrigger {\n kind: 'profileTrigger'\n value: ProfileKind\n}\n\n/**\n * This interface is meant as an example of another kind of `StateTrigger`\n */\nexport interface OtherTrigger {\n kind: 'otherTrigger'\n field1: number\n field2: string\n}\n\n/**\n * This type represents all the state triggers that are defined.\n *\n * A state trigger is triggered onto app states. In other words, it is for triggers that cannot be defined thanks to pure workflow answers.\n */\nexport type StateTrigger = ProfileTrigger | OtherTrigger\n\nexport interface IndexedData<T> {\n [key: string]: T\n}\n\nexport type SelectedAnswerData = string | string[]\nexport type SelectedAnswersData = IndexedData<SelectedAnswerData>[]\n\nexport interface ChoiceInputData {\n text: string\n className?: string\n order?: number\n /** If defined, the choice input contains a kind that can be used into app. For instance, to check if a specific `kind` of answer has been selected */\n kind?: AllChoiceInputDataKind\n}\n\nexport interface RadioInputIconOptionsData {\n variant: 'icon'\n icon: string\n}\n\nexport interface RadioInputData extends ChoiceInputData {\n options?: RadioInputIconOptionsData\n}\n\nexport interface RadioCardInputData extends RadioInputData {\n bodyText: string\n}\n\nexport interface LanguagePickerData extends ChoiceInputData {\n flag: string // iso3166-1\n locale: string\n}\n\nexport interface TileRadioData extends ChoiceInputData {\n fullText?: string\n image?: string\n description?: string\n}\n\nexport enum InputApplyFunctions { //these are generic metadata categories\n AllUpperCase = 'AllUpperCase',\n AllLowerCase = 'AllLowerCase',\n AllAlphabetical = 'AllAlphabetical',\n AllAlphanumeric = 'AllAlphanumeric',\n NoSpaces = 'NoSpaces',\n}\n\nexport interface EntryData {\n id?: number\n label?: string\n inputApply?: InputApplyFunctions | InputApplyFunctions[]\n hideLabel?: boolean\n minorLabel?: string\n summaryLabel?: string\n summaryHidden?: boolean\n className?: string\n /**\n * This field represents a list of `selectedAnswers` that must be set for this entry to be displayed using the followng logical combination of rules:\n *\n * #### Single string\n *\n * ```\n * // Required: rule1\n * rules: rule1\n * ```\n *\n * #### Array of strings (AND is applied between statements):\n *\n * ```\n * // Required: rule1 AND rule2\n * rules: [ rule1, rule2 ]\n * ```\n *\n * #### Array of arrays of strings (OR is applied between inner arrays. AND is applied between inner arrays statements)\n *\n * ```\n * // Required: rule1 OR rule2\n * rules: [\n * [ rule1 ],\n * [ rule2 ]\n * ]\n *\n * // Required: rule1 OR (rule2 AND rule3)\n * rules: [\n * [ rule1 ],\n * [ rule2, rule3 ]\n * ]\n *\n * // THIS IS FORBIDDEN\n * rules: [\n * rule1, // <-- THIS IS FORBIDDEN. Instead use [ rule1 ]\n * [ rule2, rule3 ]\n * ]\n * ```\n */\n triggers?: string[][] | string[] | string\n /**\n * This field represents a list of `StateTrigger` that must be fulfilled for this entry to be displayed.\n */\n stateTriggers?: StateTrigger[]\n // represents the modal that it will be rendered as\n componentKind?: string\n message?: string\n}\n\nexport interface SlideData {\n header: string\n body: string\n image?: {\n src: string\n alt: string\n }\n icon?: string\n}\n\nexport enum MetadataCategory { //these are generic metadata categories\n ChildPersonal = 'ChildPersonal',\n Consultation = 'Consultation',\n Refill = 'Refill',\n DataRetrieval = 'DataRetrieval',\n Followup = 'Followup',\n Recovery = 'Recovery',\n Medical = 'Medical',\n OtherPersonal = 'OtherPersonal',\n Personal = 'Personal',\n Preference = 'Preference',\n Prescription = 'Prescription',\n Raw = 'Raw',\n}\n\n/**\n * This interface describes all images-alias question kind options\n */\nexport interface ImagesAliasQuestionOptions {\n /**\n * Comma separated list of accepted formats. Will be given to the input html element.\n * Use same format as described [here](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#accept)\n */\n accept?: string\n /**\n * Should allow multiple uploads or not\n */\n multiple?: boolean\n /**\n * Should display photo guide instructions or not\n */\n photoGuide?: boolean\n}\n\nexport interface GenericQuestionData<T, A = IndexedData<ChoiceInputData>, O = undefined> extends EntryData {\n kind: T\n metaCategory: MetadataCategory\n answers?: A\n formValidation?: any[] // use yup-ast expressions\n placeholder?: string\n defaultValue?: any\n value?: string\n /**\n * Options to forward to the workflow component\n */\n options?: O\n messages?: string\n /**\n * Overrides the read only ability of the question's answer\n * populated by extended workflow feature\n */\n readOnly?: boolean\n /**\n * Overrides the fillable default of the question's answer\n * populated by extended workflow feature\n */\n defaultEmpty?: boolean\n}\n\nexport interface GroupedGenericQuestionData<T, A = IndexedData<ChoiceInputData>> extends GenericQuestionData<T, A> {\n inline?: boolean\n inlineLabel?: boolean\n order?: number\n}\n\nexport declare type QuestionData =\n | GenericQuestionData<'title' | 'paragraph' | 'checkbox', void>\n | GenericQuestionData<\n | 'text'\n | 'text-area'\n | 'date'\n | 'number'\n | 'images'\n | 'body-parts'\n | 'pharmacy-picker'\n | 'online-pharmacy-picker'\n | 'place-address'\n >\n | GenericQuestionData<'images-alias', IndexedData<ChoiceInputData>, ImagesAliasQuestionOptions>\n | GenericQuestionData<\n 'checkbox-group' | 'hair-loss-frontal' | 'select' | 'multiple' | 'text-select-group',\n IndexedData<ChoiceInputData>\n >\n | GroupedGenericQuestionData<\n 'radio' | 'hair-selector-women' | 'hair-selector-men' | 'hair-loss-stage' | 'hair-loss-other',\n IndexedData<RadioInputData>\n >\n | GroupedGenericQuestionData<'radio-card' | 'profile-selector', IndexedData<RadioCardInputData>>\n | GroupedGenericQuestionData<'language-picker', IndexedData<LanguagePickerData>>\n | GroupedGenericQuestionData<'tile-radio', IndexedData<TileRadioData>>\n\nexport interface FieldData {\n type: 'field'\n className?: string\n id: string\n}\n\nexport interface FieldGroupData {\n type: 'field-group'\n className?: string\n fieldsAndGroups: (FieldData | FieldGroupData)[]\n name?: string\n inline?: boolean\n fullWidth?: boolean\n}\n\nexport interface WorkflowPageData {\n className?: string\n groups?: FieldGroupData[]\n highlightMsg?: string\n questions: IndexedData<QuestionData>\n title?: string\n triggers?: string[]\n /**\n * This field represents a list of `ids` which will be spliced from the workflow groups and inserted into a designated location\n */\n prioritizeIds?: string[]\n}\n\nexport interface WorkflowData {\n createdAt: string\n culDeSacs: EntryData[]\n id: string\n locale?: string\n pages: WorkflowPageData[]\n summaryImageFieldName?: string // this field is used to show the consult summary image\n summarySymptomsFieldName?: string // this field is used to show the consult summary symptoms\n selectedAnswers?: SelectedAnswersData\n serviceImage?: string\n walkthroughSlides?: SlideData[]\n /**\n * (optional) the service name this workflow provides\n */\n serviceName?: string\n /**\n * (optional) the description of the service this workflow provides\n */\n serviceDescription?: string\n /**\n * (optional) rules to hide certain payment plans depending on the workflow answers\n */\n hidePlanRules?: HidePlanRule[]\n\n /**\n * (optional) extension of another workflow referenced by uuid\n */\n extendingWorkflow?: string\n\n /**\n * (optional) rules for the extension of another workflow \n */\n extendingRules?: IndexedData<WorkflowExtendingRules>\n}\n\nexport interface WorkflowExtendingRules {\n /**\n * Whether the field becomes read only in the extended workflow\n */\n readOnly?: boolean,\n /**\n * Whether the field becomes deselected/empty by default in the extended workflow\n */\n defaultEmpty?: boolean,\n /**\n * Whether the field should be removed altogether in the extended workflow\n */\n remove?: boolean,\n}\n\nexport interface HidePlanRule {\n /**\n * the stripe plan id from the practice service\n */\n idPlan: string\n /**\n * Questions to apply yup rules on in, if rules are met then hide the plan\n */\n rules: QuestionHidePlanRule[] | QuestionHidePlanRule[][]\n}\n\nexport interface QuestionHidePlanRule {\n /**\n * the id of the question to check the rule on\n */\n questionId: string\n /**\n * a collection of yup validated rules (same exact syntax we used for the workflow formValidation field, please reuse same functions)\n */\n yupRuleValueToHide: any\n}\n\n/**\n * This interface describes an upload of an image (could be a picture, a pdf, a text file, etc.)\n */\nexport interface WorkflowUploadedImage {\n /**\n * Depending on the driver used by WorkflowInput:\n * - 'indexdb': will fetch the image in IndexDB with this id\n * - 'vault': will fetch the image in the vault with this id\n */\n idbId?: string\n /**\n * The name of the image\n */\n name: string\n /**\n * the image data (could be a picture, a pdf, a text file, etc.)\n */\n imageData?: string\n}\n\n/**\n * This interface describes a workflow prepared and ready to be sent to vault\n */\nexport interface PopulatedWorkflowField {\n answer: SelectedAnswerData | WorkflowUploadedImage[] // Actual answer from the workflow\n displayedAnswer?: any // This answer is to be used only when it's impossible to get data from workflow\n kind: string // If we don't store question. We will need that field to at least know the field type\n}\n\nexport interface PopulatedWorkflowData {\n workflowId: string // The workflow id to refer\n workflowCreatedAt: string // The workflow version\n locale?: string\n fields: Record<string, PopulatedWorkflowField> // key corresponds to the QuestionData key in the workflow\n}\n","export interface SearchRequest {\n terms: Terms\n}\n\nexport interface SearchResponse {\n results: SearchResult[]\n}\n\nexport interface SearchResult {\n consultUuid: string\n kind: string\n score: number\n}\n\nexport interface IndexRequest {\n consultUUID: string\n terms: Terms\n}\n\nexport type Terms = Term[]\nexport interface Term {\n kind?: string\n value: string\n}\n\n\nexport enum IndexKind {\n consultUuid,\n consultShortid,\n firstName,\n lastName,\n healthId,\n dob,\n}\n","export class AuthenticationFailed extends Error { }\nexport class AuthenticationBadRequest extends Error { }\nexport class AuthenticationServerError extends Error { }\nexport class AuthenticationUnconfirmedEmail extends Error { }\nexport class IdentityCreationFailed extends Error { }\nexport class IdentityCreationBadRequest extends Error { }\nexport class IdentityCreationConflict extends Error { }\nexport class VaultDataMissing extends Error { }","import { APIService } from './api'\nimport {\n Uuid,\n Consult,\n ConsultRequest,\n MedicalStatus,\n ConsultTransmission,\n ClosedReasonType,\n TransmissionKind,\n TransmissionStatus,\n ConsultType,\n} from '../models'\n\nexport class ConsultService {\n constructor(private api: APIService, private baseURL: string) {}\n\n public consultCreate(c: ConsultRequest): Promise<Consult> {\n return this.api.post<Consult>(`${this.baseURL}/v1/consults`, c)\n }\n\n /**\n * This function returns the number of consults using parameters\n * @param uuidPractice the practice uuid\n * @param uuidRequester the requester uuid\n * @param statusesMedical an array containing MedicalStatus to include\n * @param statusesExclude an array containing MedicalStatus to exclude\n * @param shortId a shortId matcher (will match all consult with a shortId starting with this `shortId`)\n * @param columnToSortTo the list of columns separated by commas, to sort to (in order of sorting)\n * @param orderToSortTo the type of sorting to do ('asc' for ascending or 'desc' for descending)\n * @param perPage the number of item to retrieve per \"page\"\n * @param indexPage the actual index of the page to retrieve (0 based: 0 is the first items)\n * @param filterAssignedDoctor the uuid of the doctor for which to filter with\n * @param filterCurrentPractitioner the uuid of the current assistant assigned to filter with\n * @param filterIsoLocality the of isoLocality to filter with\n * @param filterAssignee array of practitioner uuids with which you want to filter the consultations\n * @returns a number of consult\n */\n public countConsults(\n uuidPractice?: Uuid,\n uuidRequester?: Uuid,\n statusesMedical?: MedicalStatus[],\n statusesExclude?: MedicalStatus[],\n shortId?: string,\n columnToSortTo?: string[],\n orderToSortTo?: string[],\n perPage?: number,\n indexPage?: number,\n filterAssignedDoctor?: string,\n filterCurrentPractitioner?: string,\n filterIsoLocality?: string[],\n filterAssignee?: string[],\n typesConsult?: ConsultType[],\n uuidParent?: Uuid\n ): Promise<number> {\n return this.api\n .head<any>(\n `${this.baseURL}/v1/consults`,\n {\n params: {\n uuidPractice,\n uuidRequester,\n statusesMedical,\n statusesExclude,\n shortId,\n perPage,\n page: indexPage,\n sortColumns: columnToSortTo,\n orderColumns: orderToSortTo,\n filterAssignedDoctor,\n filterCurrentPractitioner,\n filterIsoLocality,\n filterAssignee,\n typesConsult,\n uuidParent,\n },\n },\n 'Content-Range'\n )\n .then((resContentRange) => {\n if (!resContentRange || (typeof resContentRange !== 'string' && typeof resContentRange !== 'number')) {\n return 0\n }\n\n if (typeof resContentRange === 'number') {\n return resContentRange\n }\n\n return parseInt(resContentRange)\n })\n }\n\n /**\n * This function get consults using parameters\n * @param uuidPractice the practice uuid\n * @param uuidRequester the requester uuid\n * @param statusesMedical an array containing MedicalStatus to include\n * @param statusesExclude an array containing MedicalStatus to exclude\n * @param shortId a shortId matcher (will match all consult with a shortId starting with this `shortId`)\n * @param columnToSortTo the list of columns separated by commas, to sort to (in order of sorting)\n * @param orderToSortTo the type of sorting to do ('asc' for ascending or 'desc' for descending)\n * @param perPage the number of item to retrieve per \"page\"\n * @param indexPage the actual index of the page to retrieve (0 based: 0 is the first items)\n * @param filterAssignedDoctor the uuid of the doctor for which to filter with\n * @param filterCurrentPractitioner the uuid of the current assistant assigned to filter with\n * @param filterIsoLocality the of isoLocality to filter with\n * @returns a list of consult\n */\n public getConsults(\n uuidPractice?: Uuid,\n uuidRequester?: Uuid,\n statusesMedical?: MedicalStatus[],\n statusesExclude?: MedicalStatus[],\n shortId?: string,\n columnToSortTo?: string[],\n orderToSortTo?: string[],\n perPage?: number,\n indexPage?: number,\n filterAssignedDoctor?: string,\n filterCurrentPractitioner?: string,\n filterIsoLocality?: string[],\n filterAssignee?: string[],\n uuidParent?: Uuid,\n typesConsult?: ConsultType[]\n ): Promise<Consult[]> {\n return this.api.get<Consult[]>(`${this.baseURL}/v1/consults`, {\n params: {\n uuidPractice,\n uuidRequester,\n statusesMedical,\n statusesExclude,\n shortId,\n perPage,\n page: indexPage,\n sortColumns: columnToSortTo,\n orderColumns: orderToSortTo,\n filterAssignedDoctor,\n filterCurrentPractitioner,\n filterIsoLocality,\n filterAssignee,\n typesConsult,\n uuidParent,\n },\n })\n }\n\n public getConsultByUUID(uuidConsult: Uuid, uuidPractice?: Uuid): Promise<Consult> {\n return this.api.get<Consult>(`${this.baseURL}/v1/consults/${uuidConsult}`, { params: { uuidPractice } })\n }\n\n public getConsultByPracticePaymentID(idPracticePayment: Number, uuidPractice?: Uuid): Promise<Consult> {\n return this.api.get<Consult>(`${this.baseURL}/v1/consults/payment-${idPracticePayment}`, {\n params: { uuidPractice },\n })\n }\n\n public updateConsultByUUID(\n uuidConsult: Uuid,\n consult: {\n statusMedical?: MedicalStatus\n closedReasonType?: ClosedReasonType\n closedReasonDescription?: string\n uuidAssignedDoctor?: Uuid\n neverExpires?: boolean\n },\n uuidPractice?: Uuid,\n uuidRequester?: Uuid\n ): Promise<Consult> {\n return this.api.put<Consult>(`${this.baseURL}/v1/consults/${uuidConsult}`, consult, {\n params: {\n uuidPractice,\n uuidRequester,\n },\n })\n }\n\n public getConsultFaxStatuses(uuidConsult: string): Promise<ConsultTransmission[]> {\n return this.api.get<ConsultTransmission[]>(`${this.baseURL}/v1/consults/${uuidConsult}/transmissions`, {\n params: {\n kind: TransmissionKind.Fax,\n },\n })\n }\n\n public postConsultTransmission(\n uuidConsult: string,\n nameDriver: string = 'Documo',\n addressOrPhoneToSendTo?: string,\n file?: File,\n nameReceiver?: string,\n txtTransmissionTitle?: string,\n txtTransmissionNotes?: string,\n uuidPatient?: string\n // numTry ?: number,\n // delay ?: number,\n ): Promise<ConsultTransmission> {\n let data = new FormData()\n\n data.append('nameDriverReceiver', nameDriver)\n if (uuidPatient) {\n data.append('uuidPatient', uuidPatient)\n }\n if (addressOrPhoneToSendTo) {\n data.append('addressReceiver', addressOrPhoneToSendTo)\n }\n if (file) {\n data.append('file', file)\n }\n if (nameReceiver) {\n data.append('nameReceiver', nameReceiver)\n }\n if (txtTransmissionTitle) {\n data.append('txtTransmissionTitle', txtTransmissionTitle)\n }\n if (txtTransmissionNotes) {\n data.append('txtTransmissionNotes', txtTransmissionNotes)\n }\n\n return this.api.post<ConsultTransmission>(`${this.baseURL}/v1/consults/${uuidConsult}/transmissions`, data, {\n headers: { 'Content-Type': 'multipart/form-data;' },\n })\n }\n\n public postConsultFax(\n uuidConsult: string,\n addressReceiver: string,\n file: File,\n uuidPatient?: string\n ): Promise<ConsultTransmission> {\n return this.postConsultTransmission(\n uuidConsult,\n 'Documo',\n addressReceiver,\n file,\n undefined,\n undefined,\n undefined,\n uuidPatient\n )\n }\n\n public postConsultEmail(uuidConsult: string, file: File, uuidPatient?: string): Promise<ConsultTransmission> {\n return this.postConsultTransmission(\n uuidConsult,\n 'Pharmacierge',\n undefined,\n file,\n undefined,\n undefined,\n undefined,\n uuidPatient\n )\n }\n\n public retryConsultFax(uuidConsult: string, transmissionId: string): Promise<ConsultTransmission> {\n return this.api.put<ConsultTransmission>(\n `${this.baseURL}/v1/consults/${uuidConsult}/transmissions/${transmissionId}`,\n { status: TransmissionStatus.Retrying }\n )\n }\n\n public updateConsultTransmissionStatus(\n transmissionId: string,\n uuidConsult: string,\n newStatus: TransmissionStatus\n ): Promise<ConsultTransmission> {\n return this.api.put<ConsultTransmission>(\n `${this.baseURL}/v1/consults/${uuidConsult}/transmissions/${transmissionId}`,\n { status: newStatus }\n )\n }\n}\n","import {\n Consult,\n Drug,\n TreatmentAssociatedConsultData,\n TreatmentPlan,\n TreatmentPlans,\n TreatmentPlansRequest,\n TreatmentPlansResponse,\n TreatmentPlanUpdateRequest,\n Uuid,\n} from '..'\nimport {\n Diagnosis,\n Treatment,\n DiagnosisRequest,\n TreatmentAndDrugPrescriptionUpdateRequest,\n TreatmentRequest,\n} from '../models/diagnosis'\nimport { APIService } from './api'\n\nexport class DiagnosisService {\n constructor(private api: APIService, private baseURL: string) {}\n\n public getDiagnoses(): Promise<Diagnosis[]> {\n return this.api.get<Diagnosis[]>(`${this.baseURL}/v1/diagnoses`)\n }\n\n /**\n * Get a diagnosis by uuid that belongs to your practice\n * @param uuidDiagnosis the uuid of the diagnosis\n * @returns a diagnosis\n */\n public getDiagnosisByUuid(uuidDiagnosis: Uuid): Promise<Diagnosis> {\n return this.api.get<Diagnosis>(`${this.baseURL}/v1/diagnoses/${uuidDiagnosis}`)\n }\n\n public createDiagnosis(diagnosis: DiagnosisRequest): Promise<Diagnosis> {\n return this.api.post<Diagnosis>(`${this.baseURL}/v1/diagnoses`, diagnosis)\n }\n\n public updateDiagnosis(uuid: string, diagnosis: DiagnosisRequest): Promise<Diagnosis> {\n return this.api.put<Diagnosis>(`${this.baseURL}/v1/diagnoses/${uuid}`, diagnosis)\n }\n\n public getTreatmentByUuid(uuidDiagnosis: Uuid, uuidTreatment: Uuid): Promise<Treatment> {\n return this.api.get<Treatment>(`${this.baseURL}/v1/diagnoses/${uuidDiagnosis}/treatments/${uuidTreatment}`)\n }\n\n public getTreatmentsFromDiagnosisUuid(diagnosisUuid: Uuid): Promise<Treatment[]> {\n return this.api.get<Treatment[]>(`${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments`)\n }\n\n /**\n * This function returns treatment plans associated to a consult\n * @param uuidConsult the consult uuid to fetch\n * @returns an array of TreatmentPlan\n */\n public getTreatmentPlansFromConsultUuid(uuidConsult: Uuid): Promise<TreatmentPlan[]> {\n return this.api.get<TreatmentPlan[]>(`${this.baseURL}/v1/treatment-plans/`, { params: { uuidConsult } })\n }\n\n /**\n * creates a new treatment for the specified diagnosis\n * @param diagnosisUuid uuid of the diagnosis that the treatment is linked to\n * @param treatmentRequest the treatment to be inserted\n */\n public createTreatment(diagnosisUuid: string, treatmentRequest: TreatmentRequest) {\n return this.api.post<Treatment>(`${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments`, treatmentRequest)\n }\n\n /**\n * This function returns populated treatment plans associated to a consult\n * @param uuidConsult the consult uuid to fetch\n * @returns a TreatmentPlans object\n */\n public getTreatmentPlansPopulatedFromConsultUuid(uuidConsult: Uuid): Promise<TreatmentPlans> {\n return this.api.get<TreatmentPlans>(`${this.baseURL}/v1/treatment-plans/`, {\n params: { uuidConsult, populated: true },\n })\n }\n\n public postPlans(plans: TreatmentPlansRequest): Promise<TreatmentPlansResponse> {\n return this.api.post<TreatmentPlansResponse>(`${this.baseURL}/v1/treatment-plans`, plans)\n }\n\n public updateTreatmentPlan(\n uuidPlan: string,\n uuidConsult: string,\n diagnosisRequest: DiagnosisRequest,\n plan: TreatmentAndDrugPrescriptionUpdateRequest,\n refill?: boolean\n ): Promise<TreatmentPlan> {\n return this.api.put<TreatmentPlan>(`${this.baseURL}/v1/treatment-plans/${uuidPlan}`, <\n TreatmentPlanUpdateRequest\n >{\n uuidConsult,\n diagnosis: diagnosisRequest,\n plan,\n refill,\n })\n }\n\n public setAssociatedConsultsToTreatment(\n diagnosisUuid: string,\n treatmentUuid: string,\n arrAssociatedConsults: TreatmentAssociatedConsultData[]\n ): Promise<TreatmentAssociatedConsultData[]> {\n return this.api.post<TreatmentAssociatedConsultData[]>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments/${treatmentUuid}/associated-consults`,\n arrAssociatedConsults\n )\n }\n\n public updateAssociatedConsultsToTreatment(\n diagnosisUuid: string,\n treatmentUuid: string,\n arrAssociatedConsults: TreatmentAssociatedConsultData[]\n ): Promise<TreatmentAssociatedConsultData[]> {\n return this.api.put<TreatmentAssociatedConsultData[]>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments/${treatmentUuid}/associated-consults`,\n arrAssociatedConsults\n )\n }\n\n public getAssociatedConsultsOfTreatment(\n diagnosisUuid: string,\n treatmentUuid: string\n ): Promise<TreatmentAssociatedConsultData[]> {\n return this.api.get<TreatmentAssociatedConsultData[]>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments/${treatmentUuid}/associated-consults`\n )\n }\n\n public acceptTreatmentPlan(uuidPlan: string, uuidConsult: string): Promise<TreatmentPlan> {\n return this.api.put<TreatmentPlan>(`${this.baseURL}/v1/treatment-plans/${uuidPlan}/accept`, { uuidConsult })\n }\n\n /**\n * retrieves all the drugs of the specified practice\n * @param uuidPractice\n */\n public async getAllDrugs(uuidPractice: string): Promise<Drug[] | undefined> {\n const res = await this.api.get<{ foundDrugs: Drug[] }>(`${this.baseURL}/v1/drugs/practice/${uuidPractice}`)\n if (res && res.foundDrugs) return res.foundDrugs\n return undefined\n }\n}\n","import { AxiosError } from 'axios'\nimport type { AxiosAuthRefreshRequestConfig } from 'axios-auth-refresh'\nimport {\n AuthenticationBadRequest,\n AuthenticationFailed,\n AuthenticationServerError,\n AuthenticationUnconfirmedEmail,\n AuthRecoverRequest,\n AuthTokenRequest,\n AuthTokenResponse,\n Base64String,\n IdentityCreateRequest,\n IdentityCreationBadRequest,\n IdentityCreationConflict,\n IdentityCreationFailed,\n IdentityResendConfirmEmailRequest,\n IdentityResponse,\n IdentityUpdateRequest,\n M2MTokenRequest,\n QRCodeRequest,\n QRCodeResponse,\n Tokens,\n Uuid,\n WhoAmIResponse,\n} from '../models'\nimport { APIService } from './api'\n\nexport interface GuardRequestConfig extends AxiosAuthRefreshRequestConfig {\n useRefreshToken: boolean\n}\nexport class GuardService {\n private identityCache: Record<string, IdentityResponse>\n private whoAmICache: Record<string, WhoAmIResponse>\n\n constructor(private api: APIService, private baseURL: string) {\n this.api.setAuthRefreshFn(this.authRefresh.bind(this)) // This is the default behavior for User JWT tokens. If you want other kind of refresh you shall overwrite this call\n this.identityCache = {}\n this.whoAmICache = {}\n }\n\n /**\n * Will replace access and refresh tokens with `tokens`\n *\n * Note:\n * ```typescript\n * setTokens({accessToken: undefined, refreshToken: 'aTokenValue'}) // will erase accessToken and set refreshToken with 'aTokenValue'\n * setTokens({refreshToken: 'aTokenValue'}) // will keep actual value of accessToken and set refreshToken with 'aTokenValue'\n *\n * ```\n * @param tokens\n */\n public setTokens(tokens: Tokens) {\n this.api.setTokens({ ...this.api.getTokens(), ...tokens })\n }\n\n /**\n * Allow to retrieve a M2M token for a service\n *\n * @param req The credentials required to get an access token\n * @returns AuthTokenResponse\n */\n public async m2mToken(req: M2MTokenRequest): Promise<AuthTokenResponse> {\n let resp: AuthTokenResponse | undefined\n\n try {\n let config: AxiosAuthRefreshRequestConfig = {\n skipAuthRefresh: true,\n }\n\n resp = await this.api.post<AuthTokenResponse>(`${this.baseURL}/v1/m2m/token`, req, config)\n\n this.api.setTokens({\n accessToken: resp.accessToken,\n })\n } catch (e) {\n console.error('Error while posting m2m token:', e)\n\n if ((e as any).isAxiosError) {\n const code = (e as AxiosError).response?.status\n switch (code) {\n case 400:\n throw new AuthenticationBadRequest()\n case 500:\n throw new AuthenticationServerError()\n case 401:\n default:\n throw new AuthenticationFailed()\n }\n }\n throw new AuthenticationFailed()\n }\n\n return resp\n }\n\n /**\n * Allow to retrieve an access token and a refresh token in order\n * to do authenticated request afterward\n *\n * @param req The credentials required to get an access token\n * @returns AuthTokenResponse\n */\n public async authToken(req: AuthTokenRequest): Promise<AuthTokenResponse> {\n let resp: AuthTokenResponse\n\n try {\n let config: AxiosAuthRefreshRequestConfig = {\n skipAuthRefresh: true,\n }\n\n resp = await this.api.post<AuthTokenResponse>(`${this.baseURL}/v1/auth/token`, req, config)\n\n this.api.setTokens({\n accessToken: resp.accessToken,\n refreshToken: resp.refreshToken,\n })\n } catch (e) {\n console.error('Error while posting auth token:', e)\n\n if ((e as any).isAxiosError) {\n const code = (e as AxiosError).response?.status\n switch (code) {\n case 400:\n throw new AuthenticationBadRequest()\n case 424:\n throw new AuthenticationUnconfirmedEmail()\n case 500:\n throw new AuthenticationServerError()\n case 401:\n default:\n throw new AuthenticationFailed()\n }\n }\n throw new AuthenticationFailed()\n }\n return resp\n }\n\n /**\n * Get new access and refresh token\n *\n * @returns AuthTokenResponse\n */\n public async authRefresh(refreshToken?: string): Promise<AuthTokenResponse> {\n let config: GuardRequestConfig = {\n skipAuthRefresh: true,\n useRefreshToken: true,\n }\n return this.api.put<AuthTokenResponse>(`${this.baseURL}/v1/auth/token`, null, config)\n }\n\n /**\n * Call guard to overwrite existing refresh token cookie\n *\n * @returns void\n */\n public async authLogout(): Promise<void> {\n return this.api.get<void>(`${this.baseURL}/v1/auth/logout`)\n }\n\n /**\n * Call guard to attempt account recovery\n *\n * @param req The email address / practice of the account to recover\n * @returns void\n */\n public async authRecover(req: AuthRecoverRequest): Promise<void> {\n return this.api.post<void>(`${this.baseURL}/v1/auth/recover`, req)\n }\n\n /**\n * Allow to create a new identity. The identity will then need to be confirmed\n * via an email link\n *\n * @param req the information about the new identity to create\n * @returns IdentityResponse\n */\n public async identityCreate(req: IdentityCreateRequest): Promise<IdentityResponse> {\n let resp: IdentityResponse\n\n try {\n resp = await this.api.post<IdentityResponse>(`${this.baseURL}/v1/identities`, req)\n this.api.setTokens({\n refreshToken: resp.refreshToken,\n })\n } catch (e) {\n if ((e as any).isAxiosError) {\n const code = (e as AxiosError).response?.status\n switch (code) {\n case 400:\n throw new IdentityCreationBadRequest()\n case 409:\n throw new IdentityCreationConflict()\n case 500:\n default:\n throw new IdentityCreationFailed()\n }\n }\n throw new IdentityCreationFailed()\n }\n return resp\n }\n\n /**\n * Retrieve an identity. Will return public fields only when requested\n * without authentication\n *\n * @param identityID Unique id of the identity to retrieve\n * @param skipCache (default: false) will skip identity cache (not even update it)\n * @returns IdentityResponse\n */\n public async identityGet(identityID: Uuid, skipCache = false): Promise<IdentityResponse> {\n const tokens = this.api.getTokens()\n const cacheKey = (tokens.accessToken ?? '') + (tokens.refreshToken ?? '') + identityID\n\n if (skipCache || !tokens.accessToken || !this.identityCache[cacheKey]) {\n const identity = await this.api.get<IdentityResponse>(`${this.baseURL}/v1/identities/${identityID}`)\n\n if (skipCache) return identity\n\n this.identityCache[cacheKey] = identity\n }\n return this.identityCache[cacheKey]\n }\n\n /**\n * Get information about the current authenticated user\n *\n * @param refreshCache if true it will refresh the whoAmI cache (default: false)\n * @returns WhoAmIResponse\n */\n public async whoAmI(refreshCache: boolean = false): Promise<WhoAmIResponse> {\n const cacheKey = this.api.getTokens().accessToken ?? ''\n if (!this.whoAmICache[cacheKey] || refreshCache) {\n this.whoAmICache[cacheKey] = await this.api.get<WhoAmIResponse>(`${this.baseURL}/v1/auth/whoami`)\n }\n return this.whoAmICache[cacheKey]\n }\n\n /**\n * Update an existing identity\n *\n * @param identityID unique id of identity to update\n * @param req update request\n * @returns IdentityResponse\n */\n public async identityUpdate(identityID: Uuid, req: IdentityUpdateRequest): Promise<IdentityResponse> {\n return this.api.put<IdentityResponse>(`${this.baseURL}/v1/identities/${identityID}`, req)\n }\n\n /**\n * Return base64 data representing a QR code that the\n * current identity need in order to use MFA\n *\n * @param identityID unique id of the identity\n * @param password the identity password (already hashed and in base64)\n * @returns QRCodeResponse\n */\n public async identityMFAQRCode(identityID: Uuid, password: Base64String): Promise<QRCodeResponse> {\n const req: QRCodeRequest = { password }\n return this.api.post<QRCodeResponse>(`${this.baseURL}/v1/identities/${identityID}/mfa`, req, {\n headers: { Accept: 'application/json' },\n })\n }\n\n /**\n * Attempt to resend the email confirmation email\n *\n * @param req IdentityResendConfirmEmailRequest\n * @return void\n */\n public async identitySendConfirmEmail(req: IdentityResendConfirmEmailRequest): Promise<void> {\n return this.api.post<void>(`${this.baseURL}/v1/identity/confirm`, req)\n }\n\n /**\n * Get an identity using a customer email (format: customer+[b64Hash]@orohealth.me)\n *\n * @param email the customer email\n * @returns IdentityResponse\n */\n public async identityGetByCustomerEmail(email: string): Promise<IdentityResponse> {\n return this.identityGetByHash(email.substring(email.indexOf('+') + 1, email.indexOf('@')))\n }\n\n /**\n * Get an identity using a base64 hash\n *\n * @param b64Hash base64 hash of the identity\n * @returns IdentityResponse\n */\n public async identityGetByHash(b64Hash: string): Promise<IdentityResponse> {\n //TODO: Right now this maps directly to the IdentityGet call.\n //Eventually, with the mapping table method, this would lead to another\n //call (ie: /v1/mapping/[b64Hash]) which would return a blob to decrypt\n //which would contain the real identityID to call IdentityGet with.\n\n //The hash comes in base64 format but it isn't URL safe soe we have to convert\n //to base64URL (see https://en.wikipedia.org/wiki/Base64#The_URL_applications)\n return this.identityGet(b64Hash.replace(/\\+/g, '-').replace(/\\//g, '_'))\n }\n}\n","import {APIService} from \"./api\";\nimport {IndexRequest, SearchRequest, SearchResponse, Terms} from \"../models/search\";\n\nexport class SearchService {\n constructor(private api: APIService, private baseURL: string) {}\n\n /**\n * Creates search indexes for the terms passed in order to be able to search for it in the future\n * @param consultUUID\n * @param terms the search terms to be indexed\n */\n public index(\n consultUUID: string,\n terms: Terms\n ): Promise<any> {\n return this.api.post<IndexRequest>(\n `${this.baseURL}/v1/index`,\n <IndexRequest> {\n consultUUID,\n terms\n }\n )\n }\n\n /**\n * Searches for the consultations corresponding to the search terms entered in the query\n * @param terms array of search terms\n */\n public search(\n terms: Terms\n ): Promise<SearchResponse> {\n return this.api.post<SearchResponse>(\n `${this.baseURL}/v1/search`,\n <SearchRequest> {\n terms\n }\n )\n }\n}","import { hashToBase64String } from '../helpers'\nimport { PaymentStatus, PracticeAccount, Uuid } from '../models'\nimport {\n Assignment,\n AssignmentRequest,\n PaymentIntentRequestMetadata,\n PlanType,\n Practice,\n PracticeConfigKind,\n PracticeConfigs,\n PracticeInvoice,\n PracticePayment,\n PracticePaymentIntent,\n PracticePlan,\n PracticePlanPrices,\n PracticeWorkflow,\n PracticeWorkflowWithTagSpecialty,\n Practitioner,\n PractitionerLicense,\n PractitionerPreference,\n PractitionerQuota,\n PractitionerRole,\n WorkflowType,\n} from '../models/practice'\nimport { APIService } from './api'\n\nexport class PracticeService {\n constructor(private api: APIService, private baseURL: string) {}\n\n /**\n * This function will only work if the service is initialized with\n * an M2M with the scope `practice.practices.get`\n * @returns an array of practices\n */\n public practiceGetAll(): Promise<Practice[]> {\n return this.api.get<Practice[]>(`${this.baseURL}/v1/practices`)\n }\n\n /**\n * This function get the practice from the URL of a practice\n * It is the entry point of our web apps\n * @param practiceURL URL of the practice to search\n * @param hydratePracticeConfigs (optional) if set true it the Practice field configs will be set\n * @param accounts (optional) if set true it the Practice field accounts will be set\n * @returns the found practice or undefined\n */\n public practiceGetFromURL(\n practiceURL: string,\n params?: {\n hydratePracticeConfigs?: boolean\n accounts?: boolean\n }\n ): Promise<Practice | undefined> {\n return this.api.get<Practice | undefined>(`${this.baseURL}/v1/practices`, {\n params: {\n url_practice: practiceURL,\n ...params,\n },\n })\n }\n\n public practiceGetFromUuid(practiceUuid: Uuid, locale?: string, withAccounts?: boolean): Promise<Practice> {\n return this.api.get<Practice>(`${this.baseURL}/v1/practices/${practiceUuid}`, {\n params: { locale, accounts: withAccounts },\n })\n }\n\n /// Practice Configs\n\n /**\n * This function retrieves all configs of a specific practice\n * @param practiceUuid uuid of the practice\n * @returns the practice configs\n */\n public practiceConfigGetFromPracticeUuid(practiceUuid: Uuid): Promise<PracticeConfigs[]> {\n return this.api.get<PracticeConfigs[]>(`${this.baseURL}/v1/practices/${practiceUuid}/configs`)\n }\n\n /**\n * This function retrieves a specific config of a practice\n * @param practiceUuid uuid of the practice\n * @param kind of the config\n * @returns the practice config\n */\n public practiceConfigGetByKindForPracticeUuid(\n practiceUuid: Uuid,\n kind: PracticeConfigKind\n ): Promise<PracticeConfigs> {\n return this.api.get<PracticeConfigs>(`${this.baseURL}/v1/practices/${practiceUuid}/configs/${kind}`)\n }\n\n /**\n * This function creates a config for a specific practice\n * @param practiceUuid uuid of the practice\n * @param config the config to add to the practice\n * @returns the created practice config\n */\n public practiceConfigCreateForPracticeUuid(practiceUuid: Uuid, config: PracticeConfigs): Promise<PracticeConfigs> {\n return this.api.post<PracticeConfigs>(`${this.baseURL}/v1/practices/${practiceUuid}/configs`, config)\n }\n\n /**\n * This function updates a specific config of a practice\n * @param practiceUuid uuid of the practice\n * @param config the config to update\n * @returns the practice config\n */\n public practiceConfigUpdate(config: PracticeConfigs): Promise<PracticeConfigs> {\n return this.api.put<PracticeConfigs>(\n `${this.baseURL}/v1/practices/${config.uuidPractice}/configs/${config.kind}`,\n config\n )\n }\n\n /// Accounts\n public practiceGetAccounts(practiceUuid: Uuid): Promise<PracticeAccount[]> {\n return this.api.get<PracticeAccount[]>(`${this.baseURL}/v1/practices/${practiceUuid}/accounts`)\n }\n\n public practiceGetAccount(practiceUuid: Uuid, accountUuid: Uuid): Promise<PracticeAccount> {\n return this.api.get<PracticeAccount>(`${this.baseURL}/v1/practices/${practiceUuid}/accounts/${accountUuid}`)\n }\n\n /**\n * Get the PracticeWorkflows of a specific practice\n * @param practiceUuid the uuid of the practice\n * @param kind (optional) the kind of WorkflowType to filter in\n * @returns a list of PracticeWorkflow\n */\n public practiceGetWorkflows(practiceUuid: Uuid, kind?: WorkflowType): Promise<PracticeWorkflow[]> {\n return this.api.get<PracticeWorkflow[]>(`${this.baseURL}/v1/practices/${practiceUuid}/workflows`, {\n params: { kind },\n })\n }\n\n public practiceGetWorkflow(\n practiceUuid: Uuid,\n workflowType: WorkflowType\n ): Promise<PracticeWorkflowWithTagSpecialty> {\n return this.api.get<PracticeWorkflowWithTagSpecialty>(\n `${this.baseURL}/v1/practices/${practiceUuid}/workflows/${workflowType}`\n )\n }\n\n /// Plans\n public practiceGetPlans(practiceUuid: Uuid, planType?: PlanType): Promise<PracticePlan[]> {\n return this.api.get<PracticePlan[]>(`${this.baseURL}/v1/practices/${practiceUuid}/plans`, {\n params: { kind: planType },\n })\n }\n\n public practiceGetPlan(practiceUuid: Uuid, planId: number): Promise<PracticePlan> {\n return this.api.get<PracticePlan>(`${this.baseURL}/v1/practices/${practiceUuid}/plans/${planId}`)\n }\n\n public practiceGetPlanPrices(practiceUuid: Uuid, planId: number): Promise<PracticePlanPrices> {\n return this.api.get<PracticePlanPrices>(`${this.baseURL}/v1/practices/${practiceUuid}/plans/${planId}/prices`)\n }\n\n // Payments\n public practiceGetPayments(\n practiceUuid: Uuid,\n statusPayment?: PaymentStatus,\n withConsultUUIDNULL?: boolean,\n perPage?: number,\n indexPage?: number\n ): Promise<PracticePayment[]> {\n return this.api.get<PracticePayment[]>(`${this.baseURL}/v1/practices/${practiceUuid}/payments`, {\n params: {\n status: statusPayment,\n withConsultUUIDNULL,\n perPage,\n indexPage,\n },\n })\n }\n\n public practiceGetPayment(practiceUuid: Uuid, idStripeInvoiceOrPaymentIntent: string): Promise<PracticePayment> {\n return this.api.get<PracticePayment>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/${idStripeInvoiceOrPaymentIntent}`\n )\n }\n\n public practiceGetPaymentForStripePaymentIntentWithID(\n practiceUuid: Uuid,\n stripePaymentIntentId: number\n ): Promise<PracticePayment> {\n return this.api.get<PracticePayment>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/${stripePaymentIntentId}`\n )\n }\n\n // Payments Intent\n public practiceGetPaymentsIntents(practiceUuid: Uuid, planType?: PlanType): Promise<PracticePaymentIntent[]> {\n return this.api.get<PracticePaymentIntent[]>(`${this.baseURL}/v1/practices/${practiceUuid}/payments/intents`, {\n params: { kind: planType },\n })\n }\n\n /**\n * This function return the user hased email to be use for creating payment intent\n * @param email the email to hash\n * @returns a hashed email\n */\n public getPaymentIntentHashedEmail(email: string): string {\n return hashToBase64String(email.toLowerCase())\n }\n\n /**\n * Creates a PracticePaymentIntent\n * @param practiceUuid the uuid of the practice\n * @param planId the plan id to use\n * @param userEmail the email address of the user\n * @param isoLocality (optional) the desired locality\n * @param url_subdomain (optional) the url of the sub domain (@bruno-morel need you to document that)\n * @param promotionCode (optional) promotion code to apply\n * @param requestMetadata (optional) the request metadata to use. If defined, when payment service call our hooks in practice, it will use it to do required action (create a consult, refill a consult, etc.).\n * @returns\n */\n public practiceCreatePaymentsIntent(\n practiceUuid: Uuid,\n planId: number,\n userEmail: string,\n isoLocality?: string,\n url_subdomain?: string,\n requestMetadata?: PaymentIntentRequestMetadata\n ): Promise<PracticePaymentIntent> {\n return this.api.post<PracticePaymentIntent>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/intents/`,\n {\n idPlan: planId,\n hashUserEmail: userEmail ? this.getPaymentIntentHashedEmail(userEmail) : undefined,\n isoLocality,\n requestMetadata,\n },\n { params: { url_subdomain } }\n )\n }\n\n public practiceGetPaymentsIntent(practiceUuid: Uuid, paymentIntentId: number): Promise<PracticePaymentIntent> {\n return this.api.get<PracticePaymentIntent>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/intents/${paymentIntentId}`\n )\n }\n\n /**\n * Updates a PracticePaymentIntent\n * @param practiceUuid the practice uuid\n * @param idPraticePaymentIntent the id of the PracticePaymentIntent to update\n * @param practicePaymentIntent the desired PracticePaymentIntent\n * @param userEmail the email of the user\n * @param promotionCode (optional) promotional code to apply\n * @param finalize (optional) if true will finalize the PracticePaymentIntent and related Stripe.Invoice. Once, finalized you cannot modify the PracticePaymentIntent anymore.\n * @returns the updated PracticePaymentIntent\n */\n public practiceUpdatePaymentsIntent(\n practiceUuid: string,\n idPraticePaymentIntent: number,\n practicePaymentIntent: PracticePaymentIntent,\n userEmail: string,\n promotionCode?: string,\n finalize?: boolean\n ) {\n return this.api.put<PracticePaymentIntent>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/intents/${idPraticePaymentIntent}`,\n {\n ...practicePaymentIntent,\n hashUserEmail: userEmail ? this.getPaymentIntentHashedEmail(userEmail) : undefined,\n },\n { params: { promotionCode, finalize } }\n )\n }\n\n /**\n * Invoice\n * @param practiceUuid UUID of the practice to get the invoice from\n * @param invoiceId ID of the invoice in stripe\n */\n public getInvoice(practiceUuid: Uuid, invoiceId: string): Promise<PracticeInvoice> {\n return this.api.get<PracticeInvoice>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/invoices/${invoiceId}`\n )\n }\n\n // Practitioner\n public practiceGetPractitioners(practiceUuid: Uuid): Promise<Practitioner[]> {\n return this.api.get<Practitioner[]>(`${this.baseURL}/v1/practices/${practiceUuid}/practitioners`)\n }\n\n public practiceUpdatePractitioner(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n requestBody: Practitioner\n ): Promise<Practitioner> {\n return this.api.put<Practitioner>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}`,\n requestBody\n )\n }\n\n public practiceGetPractitioner(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<Practitioner> {\n return this.api.get<Practitioner>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}`\n )\n }\n\n // Practitioner Licenses\n public practiceGetPractitionerLicenses(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<PractitionerLicense[]> {\n return this.api.get<PractitionerLicense[]>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/licenses`\n )\n }\n\n public practiceCreatePractitionerLicense(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n requestBody: PractitionerLicense\n ): Promise<PractitionerLicense> {\n return this.api.post<PractitionerLicense>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/licenses`,\n requestBody\n )\n }\n\n public practiceUpdatePractitionerLicense(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n licenseId: number,\n requestBody: PractitionerLicense\n ): Promise<PractitionerLicense> {\n return this.api.put<PractitionerLicense>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/licenses/${licenseId}`,\n requestBody\n )\n }\n\n public practiceGetPractitionerLicense(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n licenseId: number\n ): Promise<PractitionerLicense> {\n return this.api.get<PractitionerLicense>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/licenses/${licenseId}`\n )\n }\n\n // Practitioner Preferences\n public practiceGetPractitionerPreferences(\n practiceUuid: Uuid,\n practitionerUuid: Uuid\n ): Promise<PractitionerPreference[]> {\n return this.api.get<PractitionerPreference[]>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/preferences`\n )\n }\n\n public practiceCreatePractitionerPreference(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n requestBody: PractitionerPreference\n ): Promise<PractitionerPreference> {\n return this.api.post<PractitionerPreference>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/preferences`,\n requestBody\n )\n }\n\n public practiceUpdatePractitionerPreference(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n preferenceId: number,\n requestBody: PractitionerPreference\n ): Promise<PractitionerPreference> {\n return this.api.put<PractitionerPreference>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/preferences/${preferenceId}`,\n requestBody\n )\n }\n\n public practiceGetPractitionerPreference(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n preferenceId: number\n ): Promise<PractitionerPreference> {\n return this.api.get<PractitionerPreference>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/preferences/${preferenceId}`\n )\n }\n\n // Practitioner Roles\n public practiceGetPractitionerRoles(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<PractitionerRole[]> {\n return this.api.get<PractitionerRole[]>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles`\n )\n }\n\n public practiceCreatePractitionerRole(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n requestBody: PractitionerRole\n ): Promise<PractitionerRole> {\n return this.api.post<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles`,\n requestBody\n )\n }\n\n public practiceDeletePractitionerRoles(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<PractitionerRole> {\n return this.api.deleteRequest<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles`\n )\n }\n\n public practiceUpdatePractitionerRole(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n roleId: number,\n requestBody: PractitionerRole\n ): Promise<PractitionerRole> {\n return this.api.put<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles/${roleId}`,\n requestBody\n )\n }\n\n public practiceGetPractitionerRole(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n roleId: number\n ): Promise<PractitionerRole> {\n return this.api.get<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles/${roleId}`\n )\n }\n\n public practiceDeletePractitionerRole(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n roleId: number\n ): Promise<PractitionerRole> {\n return this.api.deleteRequest<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles/${roleId}`\n )\n }\n\n // Practitioner signature\n\n /**\n * This function returns the practitioner's signature as a Blob\n * @param practiceUuid the practice uuid of the practitioner\n * @param practitionerUuid the practitioner uuid\n * @returns a blob representing the signature\n */\n public practiceGetPractitionerSignature(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<Blob> {\n return this.api.get<Blob>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/signature`,\n { responseType: 'blob' }\n )\n }\n\n // Assignments\n public practiceGetAssignments(practiceUuid: Uuid): Promise<Assignment[]> {\n return this.api.get<Assignment[]>(`${this.baseURL}/v1/practices/${practiceUuid}/assignments`)\n }\n\n public practiceCreateAssignment(practiceUuid: Uuid, requestBody: AssignmentRequest): Promise<Assignment> {\n return this.api.post<Assignment>(`${this.baseURL}/v1/practices/${practiceUuid}/assignments`, requestBody)\n }\n\n public practiceUpdateAssignment(\n practiceUuid: Uuid,\n assignmentId: number,\n requestBody: Assignment\n ): Promise<Assignment> {\n return this.api.put<Assignment>(\n `${this.baseURL}/v1/practices/${practiceUuid}/assignments/${assignmentId}`,\n requestBody\n )\n }\n\n public practiceGetAssignment(practiceUuid: Uuid, assignmentId: number): Promise<Assignment> {\n return this.api.get<Assignment>(`${this.baseURL}/v1/practices/${practiceUuid}/assignments/${assignmentId}`)\n }\n\n // Quotas\n public practiceGetQuotas(practiceUuid: Uuid): Promise<PractitionerQuota[]> {\n return this.api.get<PractitionerQuota[]>(`${this.baseURL}/v1/practices/${practiceUuid}/quotas`)\n }\n\n public practiceGetQuota(practiceUuid: Uuid, quotaId: number): Promise<PractitionerQuota> {\n return this.api.get<PractitionerQuota>(`${this.baseURL}/v1/practices/${practiceUuid}/quotas/${quotaId}`)\n }\n}\n","import { APIService } from './api'\nimport {\n ClosedReasonType,\n Consult,\n DataCreateResponse,\n LockboxDataRequest,\n MedicalStatus,\n ResumeConsultEmailRequest,\n Uuid,\n} from '../models'\nexport class TellerService {\n constructor(private api: APIService, private baseURL: string) { }\n\n public async lockboxDataStore(\n lockboxUuid: Uuid,\n req: LockboxDataRequest,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: {\n updateMedicalStatus: boolean\n } = { updateMedicalStatus: true },\n ): Promise<DataCreateResponse> {\n return this.api.post<DataCreateResponse>(`${this.baseURL}/v1/lockboxes/${lockboxUuid}/data`, req, {\n params: {\n lockbox_owner_uuid: lockboxOwnerUuid,\n data_uuid: previousDataUuid,\n update_medical_status: options.updateMedicalStatus,\n },\n })\n }\n\n public updateConsultByUUID(\n patientUuid: Uuid,\n uuidConsult: Uuid,\n statusMedical: MedicalStatus,\n closedReasonType?: ClosedReasonType,\n closedReasonDescription?: string,\n neverExpires?: boolean\n ): Promise<Consult> {\n return this.api.put<Consult>(`${this.baseURL}/v1/consults/${uuidConsult}`, {\n patientUuid,\n statusMedical,\n closedReasonType,\n closedReasonDescription,\n neverExpires,\n })\n }\n\n /**\n * This function notifies teller that the fax sent for a specific consult did not get through\n * @todo - Make service only exposed route\n * @param practiceUuid the practice uuid linked to the consult\n * @param consultationUuid the consultation uuid\n * @param consultationShortId the consultation short id\n * @param fax the address where to send the fax\n * @returns void\n */\n public notifyFaxFailed(practiceUuid: Uuid, consultationUuid: Uuid, consultationShortId: string, fax: string) {\n return this.api.post<void>(\n `${this.baseURL}/v1/fax-failed`,\n {\n consultationUuid,\n consultationShortId,\n fax,\n },\n {\n params: { practice_uuid: practiceUuid },\n }\n )\n }\n\n /**\n * This function let's you reassign a practictioner to a consult and send a notification email\n * @todo - Make service only exposed route\n * @param uuidConsult the uuid of the consult to reassign\n * @param newPractitionerUuid the uuid of the practitioner that will get reassigned\n */\n public reassignmentEmail(uuidConsult: Uuid, newPractitionerUuid: Uuid) {\n return this.api.post<void>(`${this.baseURL}/v1/consult/${uuidConsult}/reassignment-email`, {\n newPractitionerUuid,\n })\n }\n\n /**\n * This function will send an email to the patientUuid, saying that the online practice has been sent a fax successfully\n * @todo - Make service only exposed route\n * @param consult\n * @param patientUuid\n * @returns void\n */\n public sendOnlineFaxSuccessfulEmail(consult: Consult, patientUuid: Uuid): Promise<void> {\n return this.api.post(`${this.baseURL}/v1/online-fax-notify`, { consult, patientUuid })\n }\n\n /**\n * This function will send an email to the patientUuid, saying that the refill has been completed successfully\n * @todo - Make service only exposed route\n * @param consult\n * @param patientUuid\n * @returns void\n */\n public sendRefillFaxSucceededEmail(consult: Consult, patientUuid: Uuid): Promise<void> {\n return this.api.post(`${this.baseURL}/v1/refill-confirm-email`, { consult, patientUuid })\n }\n\n /**\n * This function will send an email to patient to allow them to resume the consult.\n * @param req the body of the resume consult request\n * @returns void\n */\n public sendResumeConsultEmail(req: ResumeConsultEmailRequest): Promise<void> {\n return this.api.post(`${this.baseURL}/v1/resume-consult-email`, req)\n }\n}\n","import { APIService } from './api'\nimport {\n DataCreateResponse,\n DataResponse,\n GrantedLockboxes,\n LockboxCreateResponse,\n LockboxDataRequest,\n LockboxGrantRequest,\n LockboxManifest,\n SharedSecretResponse,\n Uuid,\n EncryptedVaultIndex,\n IndexKey,\n EncryptedIndexEntry\n} from '../models'\n\nexport class VaultService {\n constructor(private api: APIService, private baseURL: string) { }\n\n public async lockboxCreate(lockboxMetadata?: Object): Promise<LockboxCreateResponse> {\n return this.api.post<LockboxCreateResponse>(\n `${this.baseURL}/v1/lockbox`,\n lockboxMetadata\n )\n }\n\n public async lockboxMetadataAdd(\n lockboxUuid: Uuid,\n lockboxMetadata: Object,\n lockboxOwnerUuid?: Uuid\n ): Promise<LockboxCreateResponse> {\n return this.api.put<LockboxCreateResponse>(\n `${this.baseURL}/v1/lockbox/${lockboxUuid}`,\n lockboxMetadata,\n { params: { lockbox_owner_uuid: lockboxOwnerUuid } }\n )\n }\n\n public async lockboxSecretGet(\n lockboxUuid: Uuid,\n lockboxOwnerUuid?: Uuid\n ): Promise<SharedSecretResponse> {\n return this.api.get<SharedSecretResponse>(\n `${this.baseURL}/v1/lockboxes/${lockboxUuid}/secret`,\n { params: { lockbox_owner_uuid: lockboxOwnerUuid } }\n )\n }\n\n public async lockboxGrant(\n lockboxUuid: Uuid,\n req: LockboxGrantRequest,\n lockboxOwnerUuid?: Uuid\n ): Promise<void> {\n return this.api.post<void>(\n `${this.baseURL}/v1/lockboxes/${lockboxUuid}/grant`,\n req,\n { params: { lockbox_owner_uuid: lockboxOwnerUuid } }\n )\n }\n\n /**\n * Get all lockboxes granted to user\n * @param filter filter of lockbox metadata\n * @returns decrypted lockboxes granted to user\n */\n public async grantsGet(): Promise<GrantedLockboxes> {\n return this.api.get<GrantedLockboxes>(`${this.baseURL}/v1/grants`)\n }\n\n /**\n * This function create or update a data into the vault.\n * @note At creation it is necessary to have all `req` filled\n * @note When setting `previousDataUuid` you are updating the data. `req` metadata fields are optional.\n * @param lockboxUuid The lockbox uuid the data will be stored in\n * @param req The request (please see notes)\n * @param lockboxOwnerUuid The uuid of the owner of the lockbox (@deprecated)\n * @param previousDataUuid The data uuid of the data you want to update\n * @returns \n */\n public async lockboxDataStore(\n lockboxUuid: Uuid,\n req: LockboxDataRequest,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n return this.api.post<DataCreateResponse>(\n `${this.baseURL}/v1/lockboxes/${lockboxUuid}/data`,\n req,\n {\n params: {\n lockbox_owner_uuid: lockboxOwnerUuid,\n data_uuid: previousDataUuid,\n },\n }\n )\n }\n\n public async lockboxDataGet(\n lockboxUuid: Uuid,\n dataUuid: Uuid,\n lockboxOwnerUuid?: Uuid,\n stream: boolean = true\n ): Promise<DataResponse> {\n let data = await this.api.get(\n `${this.baseURL}/v1/lockboxes/${lockboxUuid}/data/${dataUuid}`,\n { params: { lockbox_owner_uuid: lockboxOwnerUuid, stream } }\n )\n\n // returned as stream, we need to put inside a DataResponse object\n if (stream)\n return { data }\n\n return data\n }\n\n public async lockboxManifestGet(\n lockboxUuid: Uuid,\n filter?: Object,\n lockboxOwnerUuid?: Uuid\n ): Promise<LockboxManifest> {\n return this.api.get(`${this.baseURL}/v1/lockboxes/${lockboxUuid}`, {\n params: { lockbox_owner_uuid: lockboxOwnerUuid, filter },\n })\n }\n\n public async lockboxMetadataGet(\n lockboxUuid: Uuid,\n fields: string[],\n groupby: string[],\n filter?: Object,\n lockboxOwnerUuid?: Uuid\n ): Promise<any[]> {\n return this.api.get(`${this.baseURL}/v1/lockboxes/${lockboxUuid}/metadata`, {\n params: { lockbox_owner_uuid: lockboxOwnerUuid, fields, groupby, filter },\n })\n }\n\n /**\n * inserts or updates encrypted index entries\n * @note if the index data is being inserted for a user other than the requester, use `indexOwnerUuid`\n * @note if a uuid for an entry is provided, the service will perform an update\n * @param entries the encrypted index data\n * @param indexOwnerUuid\n */\n public async vaultIndexPut(entries: EncryptedVaultIndex, indexOwnerUuid?: Uuid): Promise<void> {\n return this.api.put(`${this.baseURL}/v1/index`,\n entries,\n {\n params: {\n index_owner_uuid: indexOwnerUuid,\n },\n }\n )\n }\n\n /**\n * inserts or updates index snapshot for the provided index owner\n * @note if the index data is being inserted for a user other than the requester, use `indexOwnerUuid`\n * @param entry the encrypted index snapshot\n */\n public async vaultIndexSnapshotPut(entry: EncryptedIndexEntry): Promise<void> {\n return this.api.put(`${this.baseURL}/v1/index-snapshot`, entry)\n }\n\n /**\n * Retrieves the encrypted index from the vault for the requesting user\n * @note index keys can be specified to narrow the scope of index being requested\n * @param indexKeys accepted index fields determined by vault\n * @param identifiers: an array of unique_hashes or consultation uuids used to identify an index entry\n * @param timestamp the minimum timestamp that index entries were created\n * @returns the encrypted index\n */\n public async vaultIndexGet(indexKeys: IndexKey[], identifiers?: string[], timestamp?: Date): Promise<EncryptedVaultIndex> {\n return this.api.get<EncryptedVaultIndex>(`${this.baseURL}/v1/index`, {\n params: { index_keys: indexKeys, identifiers, timestamp },\n })\n }\n}\n","import { WorkflowData } from '../models/workflow'\nimport { APIService } from './api'\n\nexport class WorkflowService {\n private v1Url: string\n\n constructor(private api: APIService, url: string) {\n this.v1Url = `${url}/v1`\n }\n\n /**\n * This function returns all workflows\n * @returns desired workflow\n */\n public getWorkflows(): Promise<WorkflowData[]> {\n return this.api.get<WorkflowData[]>(`${this.v1Url}/workflows`)\n }\n\n /**\n * This function retrieves a workflow. If `locale` is not found, it will try to find 'en' version of it.\n * By default, will return most recent workflow of a specific `id`. `createdAt` can be used to select older version.\n * @param id The uuid of the workflow\n * @param locale (optional) The desired locale of the workflow (default: 'en')\n * @param createdAt (optional) The creation date of the workflow (also used for versionning)\n * @returns desired workflow\n */\n public getWorkflow(\n id: string,\n locale?: string,\n createdAt?: string\n ): Promise<WorkflowData> {\n return this.api.get<WorkflowData>(`${this.v1Url}/workflows/${id}`, {\n params: { locale, createdAt },\n })\n }\n}\n","import { ServiceCollection, ServiceCollectionRequest } from '../models'\nimport {\n APIService,\n ConsultService,\n DiagnosisService,\n GuardService,\n PracticeService,\n SearchService,\n TellerService,\n VaultService,\n WorkflowService,\n} from '../services'\n\n/**\n * This function is used to initialize services with a provided url\n * @param services an object containing the url of the services to init\n * @param authenticationCallback (optional) the authentification callback. Called when the token were not able to be refreshed.\n * @param useLocalStorage (default: true) if true store tokens into local storage (only for browsers)\n * @returns an instance of each services with a provided url\n */\nexport const init = (\n services: ServiceCollectionRequest,\n authenticationCallback?: (err: Error, practiceUuid?: string) => void,\n useLocalStorage = true\n): ServiceCollection => {\n const {\n tellerBaseURL,\n practiceBaseURL,\n consultBaseURL,\n vaultBaseURL,\n guardBaseURL,\n searchBaseURL,\n workflowBaseURL,\n diagnosisBaseURL,\n } = services\n\n const apiService = new APIService(useLocalStorage, undefined, authenticationCallback)\n\n return {\n apiService,\n tellerService: tellerBaseURL ? new TellerService(apiService, tellerBaseURL) : undefined,\n practiceService: practiceBaseURL ? new PracticeService(apiService, practiceBaseURL) : undefined,\n consultService: consultBaseURL ? new ConsultService(apiService, consultBaseURL) : undefined,\n vaultService: vaultBaseURL ? new VaultService(apiService, vaultBaseURL) : undefined,\n guardService: guardBaseURL ? new GuardService(apiService, guardBaseURL) : undefined,\n searchService: searchBaseURL ? new SearchService(apiService, searchBaseURL) : undefined,\n workflowService: workflowBaseURL ? new WorkflowService(apiService, workflowBaseURL) : undefined,\n diagnosisService: diagnosisBaseURL ? new DiagnosisService(apiService, diagnosisBaseURL) : undefined,\n }\n}\n"],"names":["hashToBase64String","value","Buffer","from","sha256","update","digest","toString","AssistantType","TransmissionKind","TransmissionStatus","ConsultType","FeeStatus","MedicalStatus","TaskStatus","ClosedReasonType","VisibilityType","DrugType","PrescriptionStatus","PlanStatus","AxiosService","config","this","axios","create","_proto","prototype","apiRequest","_apiRequest","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","data","wrap","_context","prev","next","headers","abrupt","_extends","then","res","stop","_x","_x2","_x3","apply","arguments","apiRequestHeader","_apiRequestHeader","_callee2","headerToRetrieve","_context2","_res$headers$headerTo","toLowerCase","_x4","_x5","_x6","_x7","get","method","deleteRequest","post","put","patch","head","APIService","_AxiosService","useLocalStorage","tokenRefreshFailureCallback","_this","call","self","_assertThisInitialized","sessionId","uuidv4","interceptors","request","use","token","useRefreshToken","getTokens","refreshToken","accessToken","Authorization","X-Session-Id","X-Request-Id","error","Promise","reject","createAuthRefreshInterceptor","_ref","failedRequest","tokenResp","authRefreshFn","setTokens","sent","response","resolve","t0","console","statusCodes","_inheritsLoose","setAuthRefreshFn","fn","tokens","localStorage","setItem","JSON","stringify","item","getItem","parse","ApisPracticeManager","serviceCollReq","getAuthTokenCbk","Map","_get","practiceUuid","cacheKey","practiceInstance","newPracticeInstance","authTokenFunc","practiceInstances","init","undefined","guardService","log","Error","apiService","set","WorkflowType","RateDimension","PlanType","PaymentStatus","PractitionerStatus","AssignmentStatus","PractitionnerRoleType","OtherRoleType","LicenseStatus","PeriodType","SyncStatus","PracticeEmailKind","PracticeConfigKind","StripePriceType","PaymentIntentRequestMetadataKind","IndexKey","DocumentType","InputApplyFunctions","MetadataCategory","IndexKind","AuthenticationFailed","_Error","_wrapNativeSuper","AuthenticationBadRequest","_Error2","AuthenticationServerError","_Error3","AuthenticationUnconfirmedEmail","_Error4","IdentityCreationFailed","_Error5","IdentityCreationBadRequest","_Error6","IdentityCreationConflict","_Error7","VaultDataMissing","_Error8","ConsultService","api","baseURL","consultCreate","c","countConsults","uuidPractice","uuidRequester","statusesMedical","statusesExclude","shortId","columnToSortTo","orderToSortTo","perPage","indexPage","filterAssignedDoctor","filterCurrentPractitioner","filterIsoLocality","filterAssignee","typesConsult","uuidParent","params","page","sortColumns","orderColumns","resContentRange","parseInt","getConsults","getConsultByUUID","uuidConsult","getConsultByPracticePaymentID","idPracticePayment","updateConsultByUUID","consult","getConsultFaxStatuses","kind","Fax","postConsultTransmission","nameDriver","addressOrPhoneToSendTo","file","nameReceiver","txtTransmissionTitle","txtTransmissionNotes","uuidPatient","FormData","append","Content-Type","postConsultFax","addressReceiver","postConsultEmail","retryConsultFax","transmissionId","status","Retrying","updateConsultTransmissionStatus","newStatus","DiagnosisService","getDiagnoses","getDiagnosisByUuid","uuidDiagnosis","createDiagnosis","diagnosis","updateDiagnosis","uuid","getTreatmentByUuid","uuidTreatment","getTreatmentsFromDiagnosisUuid","diagnosisUuid","getTreatmentPlansFromConsultUuid","createTreatment","treatmentRequest","getTreatmentPlansPopulatedFromConsultUuid","populated","postPlans","plans","updateTreatmentPlan","uuidPlan","diagnosisRequest","plan","refill","setAssociatedConsultsToTreatment","treatmentUuid","arrAssociatedConsults","updateAssociatedConsultsToTreatment","getAssociatedConsultsOfTreatment","acceptTreatmentPlan","getAllDrugs","_getAllDrugs","foundDrugs","GuardService","authRefresh","bind","identityCache","whoAmICache","m2mToken","_m2mToken","req","resp","_e$response","code","skipAuthRefresh","isAxiosError","t1","authToken","_authToken","_e$response2","_authRefresh","_callee3","_context3","authLogout","_authLogout","_callee4","_context4","authRecover","_authRecover","_callee5","_context5","identityCreate","_identityCreate","_callee6","_e$response3","_context6","identityGet","_identityGet","_callee7","identityID","skipCache","_tokens$accessToken","_tokens$refreshToken","identity","_context7","whoAmI","_whoAmI","_callee8","refreshCache","_this$api$getTokens$a","_context8","_x8","identityUpdate","_identityUpdate","_callee9","_context9","_x9","_x10","identityMFAQRCode","_identityMFAQRCode","_callee10","password","_context10","Accept","_x11","_x12","identitySendConfirmEmail","_identitySendConfirmEmail","_callee11","_context11","_x13","identityGetByCustomerEmail","_identityGetByCustomerEmail","_callee12","email","_context12","identityGetByHash","substring","indexOf","_x14","_identityGetByHash","_callee13","b64Hash","_context13","replace","_x15","SearchService","index","consultUUID","terms","search","PracticeService","practiceGetAll","practiceGetFromURL","practiceURL","url_practice","practiceGetFromUuid","locale","withAccounts","accounts","practiceConfigGetFromPracticeUuid","practiceConfigGetByKindForPracticeUuid","practiceConfigCreateForPracticeUuid","practiceConfigUpdate","practiceGetAccounts","practiceGetAccount","accountUuid","practiceGetWorkflows","practiceGetWorkflow","workflowType","practiceGetPlans","planType","practiceGetPlan","planId","practiceGetPlanPrices","practiceGetPayments","statusPayment","withConsultUUIDNULL","practiceGetPayment","idStripeInvoiceOrPaymentIntent","practiceGetPaymentForStripePaymentIntentWithID","stripePaymentIntentId","practiceGetPaymentsIntents","getPaymentIntentHashedEmail","practiceCreatePaymentsIntent","userEmail","isoLocality","url_subdomain","requestMetadata","idPlan","hashUserEmail","practiceGetPaymentsIntent","paymentIntentId","practiceUpdatePaymentsIntent","idPraticePaymentIntent","practicePaymentIntent","promotionCode","finalize","getInvoice","invoiceId","practiceGetPractitioners","practiceUpdatePractitioner","practitionerUuid","requestBody","practiceGetPractitioner","practiceGetPractitionerLicenses","practiceCreatePractitionerLicense","practiceUpdatePractitionerLicense","licenseId","practiceGetPractitionerLicense","practiceGetPractitionerPreferences","practiceCreatePractitionerPreference","practiceUpdatePractitionerPreference","preferenceId","practiceGetPractitionerPreference","practiceGetPractitionerRoles","practiceCreatePractitionerRole","practiceDeletePractitionerRoles","practiceUpdatePractitionerRole","roleId","practiceGetPractitionerRole","practiceDeletePractitionerRole","practiceGetPractitionerSignature","responseType","practiceGetAssignments","practiceCreateAssignment","practiceUpdateAssignment","assignmentId","practiceGetAssignment","practiceGetQuotas","practiceGetQuota","quotaId","TellerService","lockboxDataStore","_lockboxDataStore","lockboxUuid","lockboxOwnerUuid","previousDataUuid","options","updateMedicalStatus","lockbox_owner_uuid","data_uuid","update_medical_status","patientUuid","statusMedical","closedReasonType","closedReasonDescription","neverExpires","notifyFaxFailed","consultationUuid","consultationShortId","fax","practice_uuid","reassignmentEmail","newPractitionerUuid","sendOnlineFaxSuccessfulEmail","sendRefillFaxSucceededEmail","sendResumeConsultEmail","VaultService","lockboxCreate","_lockboxCreate","lockboxMetadata","lockboxMetadataAdd","_lockboxMetadataAdd","lockboxSecretGet","_lockboxSecretGet","lockboxGrant","_lockboxGrant","grantsGet","_grantsGet","lockboxDataGet","_lockboxDataGet","dataUuid","stream","_x16","_x17","lockboxManifestGet","_lockboxManifestGet","filter","_x18","_x19","_x20","lockboxMetadataGet","_lockboxMetadataGet","fields","groupby","_x21","_x22","_x23","_x24","_x25","vaultIndexPut","_vaultIndexPut","entries","indexOwnerUuid","index_owner_uuid","_x26","_x27","vaultIndexSnapshotPut","_vaultIndexSnapshotPut","entry","_x28","vaultIndexGet","_vaultIndexGet","indexKeys","identifiers","timestamp","index_keys","_x29","_x30","_x31","WorkflowService","v1Url","getWorkflows","getWorkflow","id","createdAt","services","authenticationCallback","tellerBaseURL","practiceBaseURL","consultBaseURL","vaultBaseURL","guardBaseURL","searchBaseURL","workflowBaseURL","diagnosisBaseURL","tellerService","practiceService","consultService","vaultService","searchService","workflowService","diagnosisService"],"mappings":"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"}
1
+ {"version":3,"file":"oro-sdk-apis.cjs.production.min.js","sources":["../src/helpers/hash.ts","../src/models/consult.ts","../src/models/diagnosis.ts","../src/services/axios.ts","../src/services/api.ts","../src/services/apisPracticeManager.ts","../src/models/practice.ts","../src/models/vault.ts","../src/models/workflow.ts","../src/models/search.ts","../src/models/error.ts","../src/services/consult.ts","../src/services/diagnosis.ts","../src/services/guard.ts","../src/services/search.ts","../src/services/practice.ts","../src/services/teller.ts","../src/services/vault.ts","../src/services/workflow.ts","../src/helpers/init.ts"],"sourcesContent":["import { sha256 } from 'hash.js'\nimport { Buffer } from 'buffer/'\n\n/**\n * This function return a base64 string representation of a hashed string\n * @param value the string to hash\n * @returns a base64 string representation of a hashed value\n */\nexport function hashToBase64String(value: string): string {\n return Buffer.from(sha256().update(value).digest('hex'), 'hex').toString('base64')\n}\n","export enum AssistantType {\n MedicalSecretary = 'MedicalSecretary',\n Nurse = 'Nurse',\n Specialist = 'Specialist',\n Administrative = 'Administrative',\n Other = 'Other',\n}\n\nexport interface ConsultAssignedAssistant {\n id?: number ///optional for insertion\n uuidConsult: string\n uuidAssistant: string\n type: AssistantType\n tagSpecialty?: string\n duuidCurrentTaskDescription?: string\n}\n\nexport enum TransmissionKind {\n Fax = 'Fax',\n Email = 'Email',\n SMS = 'SMS',\n EncryptedEmail = 'EncryptedEmail',\n Logs = 'Logs',\n API = 'API',\n Other = 'Other',\n}\n\nexport enum TransmissionStatus {\n Preparing = 'Preparing',\n Sending = 'Sending',\n Sent = 'Sent',\n Retrying = 'Retrying',\n Failed = 'Failed',\n DriverError = 'DriverError',\n TimedOut = 'TimedOut',\n ReceiverNotExist = 'ReceiverNotExist',\n ReceiverNotAnswering = 'ReceiverNotAnswering',\n ReceiverIncompatible = 'ReceiverIncompatible',\n}\n\nexport interface ConsultTransmission {\n id: number\n uuidConsult: string\n kind: TransmissionKind\n status: TransmissionStatus\n nameDriverReceiver: string\n addressReceiver: string\n idDriverForTransmission: string\n txtLastDriverMessage: string\n numTry: number\n numTryLeft: number\n delay: number\n tsFirstTry: string\n tsLastStatusUpdate: string\n keyWebhookSecret: string\n}\n\nexport enum ConsultType {\n Onboard = 'Onboard',\n Refill = 'Refill',\n}\n\nexport enum FeeStatus {\n NoFee = 'NoFee',\n Pending = 'Pending',\n Paid = 'Paid',\n Reimbursed = 'Reimbursed',\n Cancelled = 'Cancelled',\n Contested = 'Contested',\n}\n\nexport enum MedicalStatus {\n Creating = 'Creating',\n Assigning = 'Assigning',\n Assigned = 'Assigned',\n New = 'New',\n ToAnswer = 'ToAnswer',\n Answered = 'Answered',\n Closing = 'Closing',\n Closed = 'Closed',\n Reopened = 'Reopened',\n Archived = 'Archived',\n Failed = 'Failed',\n}\n\nexport enum TaskStatus {\n None = 'None',\n ToDo = 'ToDo',\n InProgress = 'InProgress',\n Blocked = 'Blocked',\n Done = 'Done',\n}\n\nexport enum ClosedReasonType {\n /**\n * A completed consultation\n */\n Completed = 'Completed',\n /**\n * The conclusion was that what the patient submitted was not a disease\n */\n NotADisease = 'NotADisease',\n /**\n * The consultation was not appropriate for virtual\n */\n NotAppropriateForVirtual = 'NotAppropriateForVirtual',\n /**\n * Any other reason why the consultation was closed\n */\n Other = 'Other',\n /**\n * A consultation that is required to be done in person\n */\n RequiresInPerson = 'RequiresInPerson',\n}\n\nexport interface ClosedConsultReasonInsertFields {\n /**\n * The uuid of the consultation\n */\n consult_uuid: string\n /**\n * The reason why the consultation was closed\n */\n closed_reason_type: ClosedReasonType\n /**\n * The description why the consultation was closed\n */\n closed_reason_description: string\n /**\n * When the consultation was closed\n */\n created_at: string\n}\n\nexport interface ConsultClosedReason {\n /**\n * The reason why the consultation was closed\n */\n closedReasonType: ClosedReasonType\n /**\n * The description why the consultation was closed\n */\n closedReasonDescription?: string\n}\n\nexport interface ConsultRequest {\n uuidPractice: string\n consultType?: ConsultType\n tagSpecialtyRequired: string\n idStripeInvoiceOrPaymentIntent: string\n isoLocalityRequired?: string\n isoLanguageRequired: string\n uuidParent?: string\n}\nexport interface Consult {\n uuid: string\n uuidPracticeAdmin: string\n uuidPractice: string\n tagSpecialtyRequired: string\n isoLanguageRequired: string\n idPracticePayment: number\n statusFee?: FeeStatus\n isoLocalityRequired: string\n statusMedical?: MedicalStatus\n consultType: ConsultType\n uuidAssignedDoctor: string\n uuidCurrentAssigned: string\n uuidParent?: string\n statusTask?: TaskStatus\n hasTransmissions?: boolean\n assignedAssistant?: ConsultAssignedAssistant[]\n closeConsultReason?: ConsultClosedReason\n shortId?: string\n createdAt?: string\n expiresAt?: string\n}\n","export enum VisibilityType {\n Generic = 'Generic',\n Private = 'Private',\n Instance = 'Instance',\n}\n\nexport type DiagnosisType = VisibilityType\n\nexport type TreatmentType = VisibilityType\n\nexport interface DiagnosisRequest {\n uuid?: string\n name: string\n description: string\n type: DiagnosisType\n parentUuid?: string\n language: string\n tags?: string[]\n urlMultimedia?: string\n}\n\nexport interface Diagnosis extends DiagnosisRequest {\n uuid: string\n uuidPractice: string\n uuidPractitioner?: string\n createdAt: string\n}\n\n// Type defined to store all consult related data linked to a given treatment\nexport interface TreatmentAssociatedConsultData {\n uuidConsult: string\n consultKind: string\n}\n\nexport interface TreatmentRequest {\n uuid?: string\n uuidDiagnosis?: string\n uuidParentTreatment?: string\n uuidPreviousRevision?: string\n name: string\n description: string\n refillable?: boolean\n noteToPharmacy?: string\n urlMultimedia?: string\n type?: TreatmentType\n}\n\nexport interface Treatment extends TreatmentRequest {\n uuid: string\n uuidDiagnosis: string\n uuidPractitioner?: string\n createdAt: string\n arrAssociatedConsults?: TreatmentAssociatedConsultData[]\n}\n\nexport enum DrugType {\n Generic = 'Generic',\n Instance = 'Instance',\n}\n\nexport interface DrugRequest {\n name: string // name of the drug\n description?: string // Description of the drug\n type: DrugType // Entry type\n language: string // drug locale\n posology?: string // drug posology\n sideEffects?: string // Side effects of the drug\n imageUrl?: string // Image URL to the drug\n parentUuid?: string // (optional) parent uuid of the drug. In case of DrugType.Instance\n uuid?: string // uuid of the drug (will be used as parentUuid in case of creation of new drug)\n}\n\nexport interface Drug extends DrugRequest {\n uuid: string\n uuidPractice: string\n uuidPractitioner?: string\n createdAt: string\n}\n\n/**\n * Status of the prescription\n * Right now, it only serves a soft delete flag\n */\nexport enum PrescriptionStatus {\n Existing = 'Existing',\n Deleted = 'Deleted',\n}\n\nexport interface PrescriptionRequest {\n uuid?: string\n uuidTreatment?: string\n uuidDrug?: string\n quantity: string\n sig: string\n renewal: string\n}\n\nexport interface Prescription extends PrescriptionRequest {\n uuid: string\n uuidTreatment: string\n status?: PrescriptionStatus\n createdAt: string\n}\n\nexport enum PlanStatus {\n Pending = 'Pending',\n Accepted = 'Accepted',\n Rejected = 'Rejected',\n PreviouslyAccepted = 'PreviouslyAccepted',\n}\n\nexport interface TreatmentPlan {\n uuid: string\n uuidConsult: string\n uuidDiagnosis: string\n uuidTreatment?: string\n notes?: string\n status: PlanStatus\n decidedAt: string\n createdAt: string\n}\n\nexport interface DrugPrescription {\n prescription: Prescription\n drug: Drug\n}\n\nexport interface TreatmentAndDrugPrescription {\n treatmentsHistory?: TreatmentHistory[]\n notes?: string\n status: PlanStatus\n uuidTreatmentPlan: string\n /**\n * this field is used to store the datetime when the patient accepted or refused the prescription\n */\n decidedAt?: string\n createdAt: string\n}\n\n/**\n * An entry in the history of the treatments of the patient.\n * The history entry consists of the treatment and the prescriptions and the drugs\n * that were prescribed to the patient at that point of history\n */\nexport interface TreatmentHistory {\n treatment: Treatment\n treatmentRevisions: Treatment[]\n prescriptionsAndDrugs: DrugPrescription[]\n}\n\nexport interface TreatmentPlans {\n uuidConsult: string\n diagnosis: Diagnosis\n plans?: TreatmentAndDrugPrescription[]\n}\n\nexport interface DrugPrescriptionRequest {\n prescription: PrescriptionRequest\n drug: DrugRequest\n}\n\nexport interface TreatmentAndDrugPrescriptionRequest {\n trackingId: string\n treatment: TreatmentRequest\n prescriptionsAndDrugs?: DrugPrescriptionRequest[]\n}\n\nexport interface TreatmentPlansRequest {\n uuidConsult: string\n diagnosis: DiagnosisRequest\n plans?: TreatmentAndDrugPrescriptionRequest[]\n}\n\nexport interface TreatmentAndDrugPrescriptionUpdateRequest {\n treatment: Treatment\n prescriptionsAndDrugs?: DrugPrescriptionRequest[]\n}\n\nexport interface TreatmentPlanUpdateRequest extends TreatmentPlansRequest {\n uuidConsult: string\n diagnosis: DiagnosisRequest\n plan: TreatmentAndDrugPrescriptionUpdateRequest\n /**\n * request to refill the treatment plan\n */\n refill?: boolean\n}\n\nexport interface TreatmentPlansResponseEntry {\n trackingId?: string // can be undefined if treatmentPlan does not contain a treatment\n treatmentPlan: TreatmentPlan\n}\n\nexport interface TreatmentPlansResponse extends Array<TreatmentPlansResponseEntry> {}\n\nexport interface TreatmentAssociatedConsultDataResponse extends Array<TreatmentAssociatedConsultData> {}\n","import type { AxiosRequestConfig } from 'axios'\nimport axios, { AxiosInstance } from 'axios'\n\n\nexport class AxiosService {\n protected axios: AxiosInstance\n\n constructor(\n config?: AxiosRequestConfig\n ) {\n if (!config) config = {}\n\n this.axios = axios.create(config)\n }\n\n protected async apiRequest(config: AxiosRequestConfig, url: string, data?: any) {\n if (!config.headers) config.headers = {}\n\n config.headers['Content-Type'] = 'application/json'\n\n return this.axios({\n ...config,\n url,\n data: data,\n }).then((res) => {\n return res.data\n })\n }\n\n protected async apiRequestHeader(config: AxiosRequestConfig, url: string, headerToRetrieve?: string, data?: any,) {\n if (!config.headers) config.headers = {}\n\n config.headers['Content-Type'] = 'application/json'\n\n return this.axios({\n ...config,\n url,\n data: data,\n }).then((res) => {\n if (headerToRetrieve) {\n return res.headers[headerToRetrieve] ?? res.headers[headerToRetrieve.toLowerCase()]\n }\n\n return res.headers\n })\n }\n\n public get<T = any>(url: string, config?: AxiosRequestConfig): Promise<T> {\n return this.apiRequest({ ...config, method: 'get' }, url)\n }\n\n public deleteRequest<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<T> {\n return this.apiRequest({ ...config, method: 'delete' }, url)\n }\n\n public post<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<T> {\n return this.apiRequest({ ...config, method: 'post' }, url, data)\n }\n\n public put<T = any>(\n url: string,\n data: any,\n config?: AxiosRequestConfig\n ): Promise<T> {\n return this.apiRequest({ ...config, method: 'put' }, url, data)\n }\n\n public patch<T = any>(\n url: string,\n data: any,\n config?: AxiosRequestConfig\n ): Promise<T> {\n return this.apiRequest({ ...config, method: 'patch' }, url, data)\n }\n\n public head<T = any>(\n url: string,\n config?: AxiosRequestConfig,\n headerToRetrieve?: string,\n data?: any\n ): Promise<T> {\n return this.apiRequestHeader({ ...config, method: 'head' }, url, headerToRetrieve, data)\n }\n}\n","import type { AxiosRequestConfig } from 'axios'\nimport createAuthRefreshInterceptor from 'axios-auth-refresh'\nimport { AuthRefreshFunc, Tokens } from '../models'\nimport { AxiosService } from './axios'\nimport { GuardRequestConfig } from './guard'\nimport { v4 as uuidv4 } from 'uuid'\n\nexport class APIService extends AxiosService {\n private authRefreshFn?: AuthRefreshFunc\n private tokens: Tokens = {}\n\n /**\n * The API Service lets you use an axios API and handles oro backend services authentification via JWT tokens\n * @param useLocalStorage if set to true, tokens will be stored in localStorage\n * @param config (optional) an axios config\n * @param tokenRefreshFailureCallback (optional) callback to call when failing to refresh the auth token\n */\n constructor(\n private useLocalStorage: boolean,\n config?: AxiosRequestConfig,\n private tokenRefreshFailureCallback?: (err: Error) => void\n ) {\n super(config)\n const self = this\n const sessionId = uuidv4()\n\n this.axios.interceptors.request.use(\n (config) => {\n const token = (config as GuardRequestConfig).useRefreshToken\n ? self.getTokens().refreshToken\n : self.getTokens().accessToken\n\n config.headers = {\n ...config.headers,\n Authorization: `Bearer ${token}`,\n 'X-Session-Id': sessionId,\n 'X-Request-Id': uuidv4(),\n }\n return config\n },\n (error) => {\n Promise.reject(error)\n }\n )\n\n createAuthRefreshInterceptor(\n this.axios,\n async function (failedRequest) {\n if (self.authRefreshFn) {\n try {\n let tokenResp = await self.authRefreshFn(self.getTokens().refreshToken)\n self.setTokens({\n accessToken: tokenResp.accessToken,\n refreshToken: tokenResp.refreshToken,\n })\n failedRequest.response.config.headers['Authorization'] = `Bearer ${\n self.getTokens().accessToken\n }`\n return Promise.resolve()\n } catch (e) {\n console.error('an error occured while refreshing tokens (notifying callback)', e)\n if (self.tokenRefreshFailureCallback) self.tokenRefreshFailureCallback(failedRequest)\n return Promise.resolve() // We keep it like that. Otherwise, it seems to break the api service will it is not needed\n // return Promise.reject(e)\n }\n }\n console.error('The request could not refresh the token (authRefreshFn was not set)', failedRequest)\n return Promise.resolve() // We keep it like that. Otherwise, it seems to break the api service will it is not needed\n // return Promise.reject(failedRequest)\n },\n { statusCodes: [401, 403] }\n )\n }\n\n public setAuthRefreshFn(fn: AuthRefreshFunc) {\n this.authRefreshFn = fn\n }\n\n public setTokens(tokens: Tokens) {\n if (this.useLocalStorage) {\n localStorage.setItem('tokens', JSON.stringify(tokens))\n }\n this.tokens = tokens\n }\n\n public getTokens(): Tokens {\n if (this.useLocalStorage) {\n let tokens: Tokens = {}\n const item = localStorage.getItem('tokens')\n if (item) {\n tokens = JSON.parse(item)\n }\n return tokens\n } else {\n return this.tokens\n }\n }\n}\n","import { init } from '../helpers'\nimport { AuthTokenResponse, ServiceCollection, ServiceCollectionRequest } from '../models'\nimport { GuardService } from './guard'\n\n/**\n * This service enables you to handle one authentication token per practice\n */\nexport class ApisPracticeManager {\n private practiceInstances = new Map<string, ServiceCollection>()\n\n /**\n * The constructor\n * @param serviceCollReq the services to initialize. Only filled urls will get corresponding service to be initialized.\n * It will be used each time a new practices needs a `ServiceCollection`\n * @param getAuthTokenCbk the callback function used to get a new JWT token\n * @param useLocalStorage (default: false) if true store tokens into local storage (only for browsers)\n */\n constructor(\n private serviceCollReq: ServiceCollectionRequest,\n private getAuthTokenCbk: (guard: GuardService, practiceUuid?: string) => Promise<AuthTokenResponse>,\n private useLocalStorage = false\n ) {\n // The refreshInstance will be a single instance that is used to refresh the tokens of others this way it will not interfere with requests made by other services \n const newPracticeInstance = init(this.serviceCollReq, undefined, this.useLocalStorage)\n this.practiceInstances.set('refreshInstance', newPracticeInstance)\n }\n\n /**\n * This function is used to get a `ServiceCollection` associated to a practice. If missing, it will initialize a new `ServiceCollection`.\n * @param practiceUuid the uuid of the practice\n * @returns a promise holding a `ServiceCollection`\n */\n public async get(practiceUuid?: string): Promise<ServiceCollection> {\n const cacheKey = practiceUuid ?? 'none'\n const practiceInstance = this.practiceInstances.get(cacheKey)\n if (practiceInstance) return practiceInstance\n\n const newPracticeInstance = init(this.serviceCollReq, undefined, this.useLocalStorage)\n newPracticeInstance.apiService.setAuthRefreshFn(() => this.authTokenFunc(practiceUuid))\n this.practiceInstances.set(cacheKey, newPracticeInstance)\n\n return newPracticeInstance\n }\n\n /**\n * Uses the refresh intance to fetch a new auth token for the given practice\n * @param practiceUuid the uuid of the practice or key of a specific instance\n * @returns a new authentication token\n */\n public async authTokenFunc(practiceUuidOrInstanceName?: string): Promise<AuthTokenResponse> {\n // fetch the refresh intance and refresh the token for another practice\n const newPracticeInstance = await this.get('refreshInstance');\n if (newPracticeInstance.guardService) {\n console.log(`\\x1b[36m[Auth] Refresh auth called (practiceUuid: ${practiceUuidOrInstanceName})\\x1b[36m`)\n return await this.getAuthTokenCbk(newPracticeInstance.guardService, practiceUuidOrInstanceName)\n } else {\n throw Error('[Auth] Unable to refresh token guard service is undefined')\n }\n }\n}\n","import { PlaceData } from '.'\n\nexport enum WorkflowType {\n Onboard = 'Onboard',\n Followup = 'Followup',\n Renew = 'Renew',\n DataRetrieve = 'DataRetrieve',\n}\n\nexport enum RateDimension {\n RatioOnTotal = 'RatioOnTotal',\n FixedOnTotal = 'FixedOnTotal',\n RatioPlatformFee = 'RatioPlatformFee',\n FixedPlatformFee = 'FixedPlatformFee',\n RatioOnPlatformFeeTotal = 'RatioOnPlatformFeeTotal',\n FixedOnPlatformFeeTotal = 'FixedOnPlatformFeeTotal',\n RatioOnItem = 'RatioOnItem',\n FixedOnItem = 'FixedOnItem',\n}\n\nexport enum PlanType {\n Onboard = 'Onboard',\n Followup = 'Followup',\n Renew = 'Renew',\n DataRetrieve = 'DataRetrieve',\n}\n\nexport enum PaymentStatus {\n Pending = 'Pending',\n Success = 'Success',\n Failure = 'Failure',\n Canceled = 'Canceled',\n SuccessAndDelivered = 'SuccessAndDelivered',\n}\n\nexport enum PractitionerStatus {\n Practicing = 'Practicing',\n Retired = 'Retired',\n NotInvolvedAnymore = 'NotInvolvedAnymore',\n Deactivated = 'Deactivated',\n Flagged = 'Flagged',\n InConflict = 'InConflict',\n Delicensed = 'Delicensed',\n}\n\nexport enum AssignmentStatus {\n Assigned = 'Assigned',\n Reassigned = 'Reassigned',\n Cancelled = 'Cancelled',\n}\n\nexport enum PractitionnerRoleType {\n Doctor = 'Doctor',\n MedicalAssistant = 'MedicalAssistant',\n MedicalSecretary = 'MedicalSecretary',\n Nurse = 'Nurse',\n Specialist = 'Specialist',\n LabAssistant = 'LabAssistant',\n Administrative = 'Administrative',\n ManualDispatcher = 'ManualDispatcher',\n Other = 'Other',\n}\n\nexport enum OtherRoleType {\n Patient = 'Patient',\n User = 'User',\n System = 'System',\n}\n\nexport type AllRoleType = OtherRoleType | PractitionnerRoleType\n\nexport enum LicenseStatus {\n Valid = 'Valid',\n Invalid = 'Invalid',\n Expired = 'Expired',\n NA = 'NA',\n Removed = 'Removed',\n}\n\nexport enum PeriodType {\n PerYear = 'PerYear',\n PerQuarter = 'PerQuarter',\n PerMonth = 'PerMonth',\n PerWeek = 'PerWeek',\n PerBusinessDay = 'PerBusinessDay',\n PerDay = 'PerDay',\n PerHour = 'PerHour',\n}\n\nexport enum SyncStatus {\n Requested = 'Requested',\n Started = 'Started',\n Succeeded = 'Succeeded',\n Failed = 'Failed',\n Cancelled = 'Cancelled',\n}\n\nexport enum PracticeEmailKind {\n SignedUp = 'SignedUp',\n Onboarded = 'Onboarded',\n OnboardedPractitioner = 'OnboardedPractitioner',\n OnboardedPatient = 'OnboardedPatient',\n Answered = 'Answered',\n ToAnswer = 'ToAnswer',\n FollowedUp = 'FollowedUp',\n Renewed = 'Renewed',\n DataRetrieved = 'DataRetrieved',\n Closed = 'Closed',\n PasswordRecovery = 'PasswordRecovery',\n FaxFailed = 'FaxFailed',\n ExamResult = 'ExamResult',\n Reassigned = 'Reassigned',\n OnlinePharmacyFaxSent = 'OnlinePharmacyFaxSent',\n ResumeConsult = 'ResumeConsult',\n}\n\nexport interface PracticeAccount {\n id?: number ///optional for insertion\n uuidPractice: string\n isoLocality?: string\n idStripeAccount?: string\n emailBillingContact: string\n urlSubdomain?: string\n}\n\n/**\n * Defines all the practice config kind.\n *\n * Please respect the following when defining a new practice config:\n * - be really specific on its role\n * - all configs needs to have default values in app\n * - the default behavior should always to be display the feature.\n * In other words, practice configs should either be used to hide a functionnality or overwrite a default behavior.\n * To be extra explicit, if you want to show a functionnality only in one practice, you will have to add a practice configs in all other practice to hide it (yes it is cumbersome).\n *\n */\nexport enum PracticeConfigKind {\n PatientConsultCard = 'PatientConsultCard',\n PracticeCloseConsultationTypes = 'PracticeCloseConsultationTypes',\n PracticeConsultTabs = 'PracticeConsultTabs',\n PracticeConfigExample = 'PracticeConfigExample',\n PracticeCookieBanner = 'PracticeCookieBanner',\n PracticeCssVariables = 'PracticeCssVariables',\n PracticeFontsLinks = 'PracticeFontsLinks',\n PracticeLocaleSwitcher = 'PracticeLocaleSwitcher',\n PracticePharmacyPicker = 'PracticePharmacyPicker',\n PracticePrescriptionFields = 'PracticePrescriptionFields',\n PractitionerChatbox = 'PractitionerChatbox',\n PractitionerConsultList = 'PractitionerConsultList',\n PractitionerSearch = 'PractitionerSearch',\n PracticeRegisterWalkthrough = 'PracticeRegisterWalkthrough',\n PracticeExamsAndResults = 'PracticeExamsAndResults',\n PracticeLayout = 'PracticeLayout',\n PracticeAddressField = 'PracticeAddressField',\n PracticeDiagnosisAndTreatment = 'PracticeDiagnosisAndTreatment',\n PracticeInfoLetterDiscount = 'PracticeInfoLetterDiscount',\n}\n\n/**\n * Defines the close consultation types to hide in the close consultation modal of a practice\n */\nexport type PracticeConfigPracticeCloseConsultationTypes = PracticeConfig<\n PracticeConfigKind.PracticeCloseConsultationTypes,\n {\n /**\n * Should hide item with value \"Completed\"\n */\n hideCompleted?: boolean\n\n /**\n * Should hide item with value \"Requires-in-person\"\n */\n hideRequiresInPerson?: boolean\n\n /**\n * Should hide item with value \"Other\"\n */\n hideOther?: boolean\n\n /**\n * Should hide item with value \"Not-a-disease\"\n */\n hideNotADisease?: boolean\n\n /**\n * Should hide item with value \"Appropriate-for-virtual\"\n */\n hideNotAppropriateForVirtual?: boolean\n }\n>\n\n/**\n * Generic interface of a practice config\n *\n * Practice configs needs to have a JSDoc for **all** interface and fields.\n *\n */\nexport interface PracticeConfig<K, T> {\n /**\n * The uuid of the practice to apply the config\n */\n uuidPractice: string\n /**\n * The kind of the practice config. Used as a discriminator to help auto-completion.\n */\n kind: PracticeConfigKind\n /**\n * The actual interface of the config\n */\n config: T\n}\n\nexport type PracticeConfigPatientConsultCard = PracticeConfig<\n PracticeConfigKind.PatientConsultCard,\n { hideDiagnosis?: boolean }\n>\n\nexport type PracticeConfigPracticeConsultTabs = PracticeConfig<\n PracticeConfigKind.PracticeConsultTabs,\n { hideDxTx?: boolean }\n>\n\n/**\n * This type is for test (do not remove without updating the integration tests)\n */\nexport type PracticeConfigPracticeConfigExample = PracticeConfig<\n PracticeConfigKind.PracticeConfigExample,\n { primaryColor?: string }\n>\n\n/**\n * Defines the practice cookie banner\n */\nexport type PracticeConfigPracticeCookieBanner = PracticeConfig<\n PracticeConfigKind.PracticeCookieBanner,\n {\n showCookieBanner?: boolean\n policyLink?: string\n useOfCookieLink?: string\n }\n>\n\n/**\n * This interface describes all practice css variables\n * The keys should reflect the exact css name\n */\nexport type PracticeConfigPracticeCssVariables = PracticeConfig<\n PracticeConfigKind.PracticeCssVariables,\n Record<string, string>\n>\n\n/**\n * Defines the font of the practice css url\n */\nexport type PracticeConfigPracticeFontsLinks = PracticeConfig<\n PracticeConfigKind.PracticeFontsLinks,\n {\n /**\n * sans serif font family\n */\n sansSerif?: string\n /**\n * serif font family\n */\n serif?: string\n }\n>\n\n/**\n * Defines the locale switcher config\n */\nexport type PracticeConfigPracticeLocaleSwitcher = PracticeConfig<\n PracticeConfigKind.PracticeLocaleSwitcher,\n {\n /**\n * Should hide the locale switcher\n */\n hideLocaleSwitcher?: boolean\n }\n>\n\n/**\n * Defines the online pharmacy address of the practice\n */\nexport type PracticeConfigPracticeOnlinePharmacy = PracticeConfig<\n PracticeConfigKind.PracticePharmacyPicker,\n {\n /**\n * The address of the online pharmacy\n */\n onlinePharmacy?: PlaceData\n /**\n * Shows or hides the address input field in the treatment acceptance modal\n */\n showTreatmentAcceptanceAddressInput: boolean\n }\n>\n\n/**\n * Defines the consultation chatbox configs\n */\nexport type PracticeConfigPractitionerChatbox = PracticeConfig<\n PracticeConfigKind.PractitionerChatbox,\n {\n /**\n * If defined will replace the automatic chatbox comment notifiying the patient a new treatment plan has been added. Indexed by locale.\n */\n planAddedMessage?: { [languageISO639_3: string]: string }\n /**\n * If defined will replace the automatic chatbox comment notifiying the patient a new treatment plan has been updated. Indexed by locale.\n */\n planUpdatedMessage?: { [languageISO639_3: string]: string }\n /**\n * If defined will replace the automatic chatbox comment notifiying the patient a new exam has been dispatched. Indexed by locale.\n */\n examsUpdatedMessage?: { [languageISO639_3: string]: string }\n }\n>\n\n/**\n * This config is used to configure the layout of the consult list for practitioners\n */\nexport type PracticeConfigPractitionerConsultList = PracticeConfig<\n PracticeConfigKind.PractitionerConsultList,\n {\n /**\n * Hides the locality column\n */\n hideLocality?: boolean\n /**\n * Hides the plan name column\n */\n hidePlan?: boolean\n /**\n * Hides the fax column\n */\n hideFax?: boolean\n /**\n * Hides the expires at column\n */\n hideExpiresAt?: boolean\n }\n>\n\n/**\n * This config is used to configure the layout of the modular prescription fields\n */\nexport type PracticeConfigPracticePrescriptionFields = PracticeConfig<\n PracticeConfigKind.PracticePrescriptionFields,\n {\n /**\n * the y position in px of the first modular prescription\n */\n yCoordinate?: number\n }\n>\n\n/**\n * This config is used to enable or disable the Search feature\n */\nexport type PracticeConfigPractitionerSearch = PracticeConfig<\n PracticeConfigKind.PractitionerSearch,\n {\n /**\n * Disable search indexing a consultation on its creation\n */\n disableSearchIndexing?: boolean\n /**\n * Disable search for consultations from the ConsultList\n */\n disableSearch?: boolean\n }\n>\n\n/**\n * This config is used to configure the register walkthrough\n */\nexport type PracticeConfigPracticeRegisterWalkthrough = PracticeConfig<\n PracticeConfigKind.PracticeRegisterWalkthrough,\n {\n /**\n * The workflow uuid containing the walkthrough to display. If not defined, the walkthrough slides screen is skipped.\n */\n workflowUuid?: string\n }\n>\n\n/**\n * This config is used for all configs related to the Exams and Results module\n */\nexport type PracticeConfigPracticeExamsAndResults = PracticeConfig<\n PracticeConfigKind.PracticeExamsAndResults,\n {\n /**\n * If true, then show the deprecated URL prescription pad\n */\n showUrlPrescriptionPad?: boolean\n }\n>\n\n/**\n * This config is used for all configs related to the Layout of the app (Navbar, Footer, etc)\n */\nexport type PracticeConfigPracticeLayout = PracticeConfig<\n PracticeConfigKind.PracticeLayout,\n {\n /**\n * If true, then show the FAQ link in the Navbar\n */\n showFaqLink?: boolean\n }\n>\n\n/**\n * This config is used for all configs related to the Google Places address field\n */\nexport type PracticeConfigPracticeAddressField = PracticeConfig<\n PracticeConfigKind.PracticeAddressField,\n {\n /**\n * If true, then show the long version of the address, otherwise, show the short version\n */\n longAddress?: boolean\n }\n>\n\n/**\n * This config is used for all configs related to the Diagnosis and Treatments module\n */\nexport type PracticeConfigPracticeDiagnosisAndTreatment = PracticeConfig<\n PracticeConfigKind.PracticeDiagnosisAndTreatment,\n {\n /**\n * If true, then sort alphabetically the diagnoses, treatments, and drugs shown in their respective select dropdown\n */\n sortNames?: boolean\n /**\n * If true, it enables the Prescription Refill feature\n */\n enableRefill?: boolean\n }\n>\n\n/**\n * This config is used to set a discount code in case the info letter is accepted by the patient\n */\nexport type PracticeConfigPracticeInfoLetterDiscount = PracticeConfig<\n PracticeConfigKind.PracticeInfoLetterDiscount,\n {\n /**\n * The discount code to be applied when the info letter is accepted\n */\n discountCode?: string\n\n /**\n * The text to display for the discount code\n */\n discountText?: string\n\n /**\n * Show the info letter subscription without a Discount code before the patient confirms his email,\n * if he confirms his email but still didn't check the subscription, then display a discount code for subscribing\n */\n promptInfoLetterBeforeEmailConfirmed?: boolean\n }\n>\n\nexport type PracticeConfigs =\n | PracticeConfigPractitionerSearch\n | PracticeConfigPractitionerConsultList\n | PracticeConfigPractitionerChatbox\n | PracticeConfigPracticeLocaleSwitcher\n | PracticeConfigPracticeCookieBanner\n | PracticeConfigPracticeOnlinePharmacy\n | PracticeConfigPracticeCssVariables\n | PracticeConfigPracticeFontsLinks\n | PracticeConfigPracticePrescriptionFields\n | PracticeConfigPracticeConfigExample // Here for integration tests only\n | PracticeConfigPracticeConsultTabs\n | PracticeConfigPatientConsultCard\n | PracticeConfigPracticeExamsAndResults\n | PracticeConfigPracticeLayout\n | PracticeConfigPracticeAddressField\n | PracticeConfigPracticeDiagnosisAndTreatment\n | PracticeConfigPracticeInfoLetterDiscount\n\nexport interface PracticeWorkflow {\n id?: number ///optional for insertion\n uuidPractice: string\n uuidWorkflow: string\n typeWorkflow: WorkflowType\n tagSpecialty?: string\n associatedWorkflowUuid?: string\n}\n\nexport type PracticeWorkflowWithTagSpecialty = PracticeWorkflow & {\n tagSpecialty: string\n}\n\nexport interface PracticePlan {\n id?: number ///optional for insertion\n uuidPractice: string\n isoLocality?: string\n nameDefault: string\n descDefault: string\n hoursExpiration: number\n active: boolean\n namePriceCurrency: string // DEPRECATED: left only for in-app receipt display and lower migration risks\n numPriceAmount: number // DEPRECATED: left only for in-app receipt display and lower migration risks\n numPriceExtDecimal?: number // DEPRECATED: left only for in-app receipt display and lower migration risks\n numPriceExtNegativeExponential?: number // DEPRECATED: left only for in-app receipt display and lower migration risks\n kind: PlanType\n idStripeProduct: string\n idStripePrice: string // DEPRECATED: left only for in-app receipt display and lower migration risks\n dateCreatedAt: Date\n dateUpdateAt: Date\n ratePerThousandOverride: number // DEPRECATED: left only to lower migration risks\n activateFollowUp: boolean\n}\n\nexport enum StripePriceType {\n Default = 'Default',\n Discount = 'Discount',\n}\n\n// Subset of Stripe.Price\nexport interface PracticePrice {\n /**\n * Unique identifier for the object in Stripe.\n */\n idStripePrice: string\n /**\n * Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).\n */\n currency: string\n /**\n * The unit amount in %s to be charged, represented as a whole integer if possible.\n */\n unitAmount: number\n}\n\nexport interface PracticePlanPrices {\n idPlan: number\n default: PracticePrice\n discount?: PracticePrice\n}\n\nexport interface PracticeRate {\n id?: number\n uuidPractice: string\n idPlan: number\n isoLocality?: string\n dimension: RateDimension\n description: string\n uidTaxRate: string\n idStripeTaxRate: string\n}\n\nexport interface PracticePlatformFee {\n uuidPractice: string\n idPlan: number\n isoLocality?: string\n numPlatformFinalFee: number\n}\n\nexport interface PracticePayment {\n id?: number ///optional for insertion\n uuidPractice: string\n idPlan: number\n uuidConsult?: string\n hoursConsultExpiration: number\n idStripeInvoiceOrPaymentIntent: string\n status: PaymentStatus\n dateCreatedAt: Date\n dateUpdateAt: Date\n}\n\nexport interface PracticePaymentIntent {\n id?: number ///optional for insertion\n uuidPractice: string\n idPlan: number\n idPayment: number\n hoursPlanExpiration: number\n isoLocality?: string\n textPaymentMethodOptions: string\n nameCurrency: string\n numTotalAmount: number\n numPlatformFeeAmount: number\n idStripeInvoice: string\n idStripePaymtIntent: string\n /**\n * This value is set only after the PracticePaymentIntent has been finalized and ready to be paid\n */\n stripeClientSecret?: string\n dateCreatedAt?: Date\n dateUpdateAt?: Date\n}\n\n/**\n * All the PaymentIntentRequestMetadata Kind available\n */\nexport enum PaymentIntentRequestMetadataKind {\n ConsultRequestMetadata = 'ConsultRequestMetadata',\n RefillTreatmentRequestMetadata = 'RefillTreatmentRequestMetadata',\n}\n\n/**\n * This interface is used as metadata when creating Stripe Invoice.\n * It will be used to create the consult when stripe use our hook.\n */\nexport interface ConsultRequestMetadata {\n /**\n * Defines the kind of `PaymentIntentRequestMetadata` it is\n *\n * Note: it can be `undefined` to handle backward compatibility when this interface didn't had a `kind`\n */\n kind: PaymentIntentRequestMetadataKind.ConsultRequestMetadata | undefined\n /**\n * The specialty required by the consultation\n */\n tagSpecialtyRequired: string\n /**\n * The locality required for the consultation in iso. COUNTRY (ISO 3166) - PROVINCE - COUNTY - CITY\n */\n isoLocalityRequired?: string\n /**\n * The language required for the consultation. Should respect ISO 639-3 https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes\n */\n isoLanguageRequired: string\n}\n\n/**\n * This interface is used as metadata when creating Stripe Invoice.\n * It will be used to refill a treatment plan of a consult.\n */\nexport interface RefillTreatmentRequestMetadata {\n /**\n * Defines the kind of `PaymentIntentRequestMetadata` it is\n */\n kind: PaymentIntentRequestMetadataKind.RefillTreatmentRequestMetadata\n /**\n * The consult uuid to refill\n */\n consultUuid: string\n}\n\n/**\n * This interface is used as metadata when creating Stripe Invoice.\n * It will be used when stripe uses our hook.\n */\nexport type PaymentIntentRequestMetadata = ConsultRequestMetadata | RefillTreatmentRequestMetadata\n\nexport interface AssignmentRequest {\n uuidAssignor: string //defaulting for insertion to the default practice admin\n uuidPractitioner?: string\n status?: AssignmentStatus\n uuidConsult?: string\n tagSpecialty?: string\n isoLocality?: string\n isoLanguage?: string\n}\n\nexport type Assignment = {\n id: number ///optional for insertion\n uuidPractice: string\n uuidAssignor: string //defaulting for insertion to the default practice admin\n uuidPractitioner?: string\n status?: AssignmentStatus\n uuidConsult?: string\n tagSpecialty?: string\n timeAssigned?: string //defaulting for insertion\n}\n\nexport interface PractitionerRole {\n id?: number //optional for insertion\n uuidPractice: string\n uuidPractitioner: string\n role: PractitionnerRoleType\n dateGiven?: Date //default during insertion\n}\n\nexport interface PractitionerLicense {\n id?: number ///optional for insertion\n uuidPractitioner: string\n country: string\n tagSpecialty: string\n isoLocality: string\n txtLicenseNumber: string\n txtComplementary?: string\n dateProvidedAt?: Date\n dateObtainedAt?: Date\n dateRenewedAt?: Date\n status?: LicenseStatus\n}\n\nexport interface PractitionerPreference {\n id?: number\n uuidPractitioner: string\n uuidPractice: string\n tagSpecialties: string\n isoLocalityConsult?: string\n periodQuotaConsult?: PeriodType\n quantityQuotaConsult?: number\n tagConsultLanguages?: string\n}\n\nexport interface PractitionerQuota {\n id?: number ///optional for insertion\n uuidPractitioner: string\n uuidPractice: string\n tagSpecialty: string\n isoLocality: string\n quantityLeft?: number\n dateRenewal?: Date\n dateLastUpdate?: Date\n}\n\nexport interface Practitioner {\n uuid: string\n uuidPractice: string\n txtFirstName: string\n txtLastName: string\n txtTitle: string\n emailAddress: string\n tagsSpecialties: string\n arrLanguages: string\n dateAddedAt?: Date //defaulting for insertion\n status?: PractitionerStatus //defaulting for insertion\n txtAddressTransmission?: string //the default non-fax address to send prescription to\n}\n\nexport interface HydratedPracticeConfigs {\n [PracticeConfigKind.PatientConsultCard]?: PracticeConfigPatientConsultCard\n [PracticeConfigKind.PracticeCloseConsultationTypes]?: PracticeConfigPracticeCloseConsultationTypes\n [PracticeConfigKind.PracticeConsultTabs]?: PracticeConfigPracticeConsultTabs\n [PracticeConfigKind.PracticeConfigExample]?: PracticeConfigPracticeConfigExample\n [PracticeConfigKind.PracticeCookieBanner]?: PracticeConfigPracticeCookieBanner\n [PracticeConfigKind.PracticeCssVariables]?: PracticeConfigPracticeCssVariables\n [PracticeConfigKind.PracticeFontsLinks]?: PracticeConfigPracticeFontsLinks\n [PracticeConfigKind.PracticeLocaleSwitcher]?: PracticeConfigPracticeLocaleSwitcher\n [PracticeConfigKind.PracticePharmacyPicker]?: PracticeConfigPracticeOnlinePharmacy\n [PracticeConfigKind.PracticePrescriptionFields]?: PracticeConfigPracticePrescriptionFields\n [PracticeConfigKind.PractitionerChatbox]?: PracticeConfigPractitionerChatbox\n [PracticeConfigKind.PractitionerConsultList]?: PracticeConfigPractitionerConsultList\n [PracticeConfigKind.PractitionerSearch]?: PracticeConfigPractitionerSearch\n [PracticeConfigKind.PracticeRegisterWalkthrough]?: PracticeConfigPracticeRegisterWalkthrough\n [PracticeConfigKind.PracticeExamsAndResults]?: PracticeConfigPracticeExamsAndResults\n [PracticeConfigKind.PracticeLayout]?: PracticeConfigPracticeLayout\n [PracticeConfigKind.PracticeAddressField]?: PracticeConfigPracticeAddressField\n [PracticeConfigKind.PracticeDiagnosisAndTreatment]?: PracticeConfigPracticeDiagnosisAndTreatment\n [PracticeConfigKind.PracticeInfoLetterDiscount]?: PracticeConfigPracticeInfoLetterDiscount\n}\n\nexport interface Practice {\n uuid: string\n name: string\n shortName: string\n countryOperating: string\n urlPractice: string\n urlLinkedPage?: string\n urlTos?: string\n urlConfidentiality?: string\n uuidAdmin: string\n uuidDefaultAssigned: string\n uuidDefaultFallback: string\n prefDefaultLang: string\n keyGoogleTagNonProd: string\n keyGoogleTagProd: string\n txtAddress?: string\n emailBusiness?: string\n phoneBusiness?: string\n urlSupport?: string\n emailSupport?: string\n phoneSupport?: string\n phoneFax?: string\n txtTaxID?: string\n txtVATID?: string\n txtRegistrationID?: string\n txtLegalInfos?: string\n txtDefaultTransmissionDriver?: string\n txtDefaultTransmissionAddress?: string\n accounts?: PracticeAccount[]\n configs?: HydratedPracticeConfigs\n}\n\nexport interface Sync {\n id?: number\n status?: SyncStatus\n descriptionStep: string\n dateStarted?: Date\n dateFinished?: Date\n}\n\nexport interface PracticeEmail {\n id?: number\n uuidPractice: string\n kind: PracticeEmailKind\n idMailgunTemplate: string\n isoLanguage: string\n tags: string\n}\n\nexport interface PracticeSubscription {\n id?: number\n uuidPractice: string\n idMailChimpAudience: string\n isoLanguage: string\n}\n\nexport interface PracticeInvoice {\n id: string //Stripe invoice ID\n customerEmail: string\n total: number\n subtotal: number\n currency: string\n discount: number\n}\n\n/**\n * This interface represents a practice secret\n * It is used to generate a symetric key to encrypt\n * practice related data\n */\nexport interface PracticeSecret {\n practiceUuid: string\n /**\n * The payload is the actual base64 encoded bytes that can\n * be used as the practice secret. In the db,\n * this field is base64 encoded nonce+encrypted-payload.\n * It's decrypted on the fly when returned by the api.\n */\n payload: string\n}\n","import { Uuid, Base64String, Metadata } from './shared'\nimport { MetadataCategory } from './workflow'\n\nexport interface LockboxCreateResponse {\n lockboxUuid: Uuid\n}\n\nexport interface SharedSecretResponse {\n sharedSecret: Base64String\n}\n\nexport interface LockboxGrantRequest {\n granteeUuid: Uuid\n encryptedSecret: Base64String\n}\n\nexport interface LockboxDataRequest {\n publicMetadata?: Metadata\n privateMetadata?: Base64String\n data: Base64String\n}\n\nexport type LockboxManifest = ManifestEntry[]\n\nexport interface ManifestEntry {\n dataUuid: Uuid\n metadata: Metadata\n}\n\nexport interface GrantedLockboxes {\n grants: Grant[]\n}\n\nexport interface Grant {\n lockboxOwnerUuid?: Uuid\n encryptedLockbox?: Base64String\n lockboxUuid?: Uuid\n}\n\nexport interface DataCreateResponse {\n dataUuid: Uuid\n}\n\nexport interface DataResponse {\n data: Base64String\n}\n\nexport interface IndexEntry {\n uuid?: Uuid\n uniqueHash?: Base64String\n timestamp?: Date\n}\n\nexport interface IndexConsultLockbox extends IndexEntry {\n consultationId: Uuid\n grant: Grant\n}\n\nexport interface VaultIndex extends IndexEntry {\n [IndexKey.ConsultationLockbox]?: IndexConsultLockbox[] // only one should ever exist at a time\n [IndexKey.Consultation]?: IndexConsultLockbox[] // DEPRECATED REMOVE ME\n}\n\nexport interface EncryptedVaultIndex {\n [IndexKey.Consultation]?: EncryptedIndexEntry[]\n [IndexKey.ConsultationLockbox]?: EncryptedIndexEntry[]\n [IndexKey.IndexSnapshot]?: EncryptedIndexEntry[]\n}\n\nexport interface EncryptedIndexEntry extends IndexEntry {\n encryptedIndexEntry: Base64String\n}\n\nexport enum IndexKey {\n Consultation = 'Consultation', //DEPRECATED REMOVE ME\n IndexSnapshot = 'IndexSnapshot', //DEPRECATED REMOVE ME\n ConsultationLockbox = 'ConsultationLockbox'\n}\n\nexport interface Document extends ManifestEntry {\n lockboxOwnerUuid?: Uuid\n lockboxUuid: Uuid\n}\n\nexport interface Meta {\n documentType?: DocumentType\n category: MetadataCategory\n contentType?: string\n}\n\nexport interface PreferenceMeta extends Meta {\n category: MetadataCategory.Preference\n contentType: 'application/json'\n}\n\nexport interface RecoveryMeta extends Meta {\n category: MetadataCategory.Recovery\n contentType: 'application/json'\n}\n\nexport interface RawConsultationMeta extends Meta {\n category: MetadataCategory.Raw\n contentType: 'application/json'\n consultationId?: Uuid\n}\n\nexport interface ConsultationMeta extends Meta {\n documentType: DocumentType\n category: MetadataCategory.Consultation\n consultationId?: Uuid\n}\n\nexport interface ConsultationImageMeta extends ConsultationMeta {\n idbId: Uuid\n}\n\nexport interface MedicalMeta extends Meta {\n documentType:\n | DocumentType.PopulatedWorkflowData\n | DocumentType.Result\n | DocumentType.Prescription\n | DocumentType.DoctorsNote\n category: MetadataCategory.Medical\n consultationIds?: Uuid[]\n}\n\nexport interface PersonalMeta {\n documentType: DocumentType.PopulatedWorkflowData | DocumentType.Note\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n consultationIds?: Uuid[]\n}\n\nexport enum DocumentType {\n Message = 'Message',\n Note = 'Note',\n DoctorsNote = 'DoctorsNote',\n Prescription = 'Prescription',\n ExamRequest = 'ExamRequest',\n Result = 'Result',\n Attachment = 'Attachment',\n BigFile = 'BigFile',\n MeetingRequest = 'MeetingRequest',\n AudioNote = 'AudioNote',\n VideoNote = 'VideoNote',\n PopulatedWorkflowData = 'PopulatedWorkflowData',\n TreatmentPlan = 'TreatmentPlan',\n ImageAlias = 'ImageAlias',\n}\n\nexport interface LocalizedData<T = any> {\n lockboxOwnerUuid?: string\n lockboxUuid: string\n dataUuid: string\n data: T\n}\n","/**\n * This type represents all the patient profile kind\n */\nexport type ProfileKind = 'myself' | 'child' | 'other'\n/**\n * this type is done as an example on how to add another data kind\n */\nexport type OtherKind = 'otherKindOfType'\n\n/**\n * This type represents all the kind a data that can define `ChoiceInputData` (`OtherKind` is here only as an example on how to add a new kind)\n */\nexport type AllChoiceInputDataKind = ProfileKind | OtherKind\n\n/**\n * This interface represents a `StateTrigger` on selected profile kind\n */\nexport interface ProfileTrigger {\n kind: 'profileTrigger'\n value: ProfileKind\n}\n\n/**\n * This interface is meant as an example of another kind of `StateTrigger`\n */\nexport interface OtherTrigger {\n kind: 'otherTrigger'\n field1: number\n field2: string\n}\n\n/**\n * This type represents all the state triggers that are defined.\n *\n * A state trigger is triggered onto app states. In other words, it is for triggers that cannot be defined thanks to pure workflow answers.\n */\nexport type StateTrigger = ProfileTrigger | OtherTrigger\n\nexport interface IndexedData<T> {\n [key: string]: T\n}\n\nexport type SelectedAnswerData = string | string[]\nexport type SelectedAnswersData = IndexedData<SelectedAnswerData>[]\n\nexport interface ChoiceInputData {\n text: string\n className?: string\n order?: number\n /** If defined, the choice input contains a kind that can be used into app. For instance, to check if a specific `kind` of answer has been selected */\n kind?: AllChoiceInputDataKind\n}\n\nexport interface RadioInputIconOptionsData {\n variant: 'icon'\n icon: string\n}\n\nexport interface RadioInputData extends ChoiceInputData {\n options?: RadioInputIconOptionsData\n}\n\nexport interface RadioCardInputData extends RadioInputData {\n bodyText: string\n}\n\nexport interface LanguagePickerData extends ChoiceInputData {\n flag: string // iso3166-1\n locale: string\n}\n\nexport interface TileRadioData extends ChoiceInputData {\n fullText?: string\n image?: string\n description?: string\n}\n\nexport enum InputApplyFunctions { //these are generic metadata categories\n AllUpperCase = 'AllUpperCase',\n AllLowerCase = 'AllLowerCase',\n AllAlphabetical = 'AllAlphabetical',\n AllAlphanumeric = 'AllAlphanumeric',\n NoSpaces = 'NoSpaces',\n}\n\nexport interface EntryData {\n id?: number\n label?: string\n inputApply?: InputApplyFunctions | InputApplyFunctions[]\n hideLabel?: boolean\n minorLabel?: string\n summaryLabel?: string\n summaryHidden?: boolean\n className?: string\n /**\n * This field represents a list of `selectedAnswers` that must be set for this entry to be displayed using the followng logical combination of rules:\n *\n * #### Single string\n *\n * ```\n * // Required: rule1\n * rules: rule1\n * ```\n *\n * #### Array of strings (AND is applied between statements):\n *\n * ```\n * // Required: rule1 AND rule2\n * rules: [ rule1, rule2 ]\n * ```\n *\n * #### Array of arrays of strings (OR is applied between inner arrays. AND is applied between inner arrays statements)\n *\n * ```\n * // Required: rule1 OR rule2\n * rules: [\n * [ rule1 ],\n * [ rule2 ]\n * ]\n *\n * // Required: rule1 OR (rule2 AND rule3)\n * rules: [\n * [ rule1 ],\n * [ rule2, rule3 ]\n * ]\n *\n * // THIS IS FORBIDDEN\n * rules: [\n * rule1, // <-- THIS IS FORBIDDEN. Instead use [ rule1 ]\n * [ rule2, rule3 ]\n * ]\n * ```\n */\n triggers?: string[][] | string[] | string\n /**\n * This field represents a list of `StateTrigger` that must be fulfilled for this entry to be displayed.\n */\n stateTriggers?: StateTrigger[]\n // represents the modal that it will be rendered as\n componentKind?: string\n message?: string\n}\n\nexport interface SlideData {\n header: string\n body: string\n image?: {\n src: string\n alt: string\n }\n icon?: string\n}\n\nexport enum MetadataCategory { //these are generic metadata categories\n ChildPersonal = 'ChildPersonal',\n Consultation = 'Consultation',\n Refill = 'Refill',\n DataRetrieval = 'DataRetrieval',\n Followup = 'Followup',\n Recovery = 'Recovery',\n Medical = 'Medical',\n OtherPersonal = 'OtherPersonal',\n Personal = 'Personal',\n Preference = 'Preference',\n Prescription = 'Prescription',\n Raw = 'Raw',\n}\n\n/**\n * This interface describes all images-alias question kind options\n */\nexport interface ImagesAliasQuestionOptions {\n /**\n * Comma separated list of accepted formats. Will be given to the input html element.\n * Use same format as described [here](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#accept)\n */\n accept?: string\n /**\n * Should allow multiple uploads or not\n */\n multiple?: boolean\n /**\n * Should display photo guide instructions or not\n */\n photoGuide?: boolean\n}\n\nexport interface GenericQuestionData<T, A = IndexedData<ChoiceInputData>, O = undefined> extends EntryData {\n kind: T\n metaCategory: MetadataCategory\n answers?: A\n formValidation?: any[] // use yup-ast expressions\n placeholder?: string\n defaultValue?: any\n value?: string\n /**\n * Options to forward to the workflow component\n */\n options?: O\n messages?: string\n /**\n * Overrides the read only ability of the question's answer\n * populated by extended workflow feature\n */\n readOnly?: boolean\n /**\n * Overrides the fillable default of the question's answer\n * populated by extended workflow feature\n */\n defaultEmpty?: boolean\n}\n\nexport interface GroupedGenericQuestionData<T, A = IndexedData<ChoiceInputData>> extends GenericQuestionData<T, A> {\n inline?: boolean\n inlineLabel?: boolean\n order?: number\n}\n\nexport declare type QuestionData =\n | GenericQuestionData<'title' | 'paragraph' | 'checkbox', void>\n | GenericQuestionData<\n | 'text'\n | 'text-area'\n | 'date'\n | 'number'\n | 'images'\n | 'body-parts'\n | 'pharmacy-picker'\n | 'online-pharmacy-picker'\n | 'place-address'\n >\n | GenericQuestionData<'images-alias', IndexedData<ChoiceInputData>, ImagesAliasQuestionOptions>\n | GenericQuestionData<\n 'checkbox-group' | 'hair-loss-frontal' | 'select' | 'multiple' | 'text-select-group',\n IndexedData<ChoiceInputData>\n >\n | GroupedGenericQuestionData<\n 'radio' | 'hair-selector-women' | 'hair-selector-men' | 'hair-loss-stage' | 'hair-loss-other',\n IndexedData<RadioInputData>\n >\n | GroupedGenericQuestionData<'radio-card' | 'profile-selector', IndexedData<RadioCardInputData>>\n | GroupedGenericQuestionData<'language-picker', IndexedData<LanguagePickerData>>\n | GroupedGenericQuestionData<'tile-radio', IndexedData<TileRadioData>>\n\nexport interface FieldData {\n type: 'field'\n className?: string\n id: string\n}\n\nexport interface FieldGroupData {\n type: 'field-group'\n className?: string\n fieldsAndGroups: (FieldData | FieldGroupData)[]\n name?: string\n inline?: boolean\n fullWidth?: boolean\n}\n\nexport interface WorkflowPageData {\n className?: string\n groups?: FieldGroupData[]\n highlightMsg?: string\n questions: IndexedData<QuestionData>\n title?: string\n triggers?: string[]\n /**\n * This field represents a list of `ids` which will be spliced from the workflow groups and inserted into a designated location\n */\n prioritizeIds?: string[]\n}\n\nexport interface WorkflowData {\n createdAt: string\n culDeSacs: EntryData[]\n id: string\n locale?: string\n pages: WorkflowPageData[]\n summaryImageFieldName?: string // this field is used to show the consult summary image\n summarySymptomsFieldName?: string // this field is used to show the consult summary symptoms\n selectedAnswers?: SelectedAnswersData\n serviceImage?: string\n walkthroughSlides?: SlideData[]\n /**\n * (optional) the service name this workflow provides\n */\n serviceName?: string\n /**\n * (optional) the description of the service this workflow provides\n */\n serviceDescription?: string\n /**\n * (optional) rules to hide certain payment plans depending on the workflow answers\n */\n hidePlanRules?: HidePlanRule[]\n\n /**\n * (optional) extension of another workflow referenced by uuid\n */\n extendingWorkflow?: string\n\n /**\n * (optional) rules for the extension of another workflow \n */\n extendingRules?: IndexedData<WorkflowExtendingRules>\n}\n\nexport interface WorkflowExtendingRules {\n /**\n * Whether the field becomes read only in the extended workflow\n */\n readOnly?: boolean,\n /**\n * Whether the field becomes deselected/empty by default in the extended workflow\n */\n defaultEmpty?: boolean,\n /**\n * Whether the field should be removed altogether in the extended workflow\n */\n remove?: boolean,\n}\n\nexport interface HidePlanRule {\n /**\n * the stripe plan id from the practice service\n */\n idPlan: string\n /**\n * Questions to apply yup rules on in, if rules are met then hide the plan\n */\n rules: QuestionHidePlanRule[] | QuestionHidePlanRule[][]\n}\n\nexport interface QuestionHidePlanRule {\n /**\n * the id of the question to check the rule on\n */\n questionId: string\n /**\n * a collection of yup validated rules (same exact syntax we used for the workflow formValidation field, please reuse same functions)\n */\n yupRuleValueToHide: any\n}\n\n/**\n * This interface describes an upload of an image (could be a picture, a pdf, a text file, etc.)\n */\nexport interface WorkflowUploadedImage {\n /**\n * Depending on the driver used by WorkflowInput:\n * - 'indexdb': will fetch the image in IndexDB with this id\n * - 'vault': will fetch the image in the vault with this id\n */\n idbId?: string\n /**\n * The name of the image\n */\n name: string\n /**\n * the image data (could be a picture, a pdf, a text file, etc.)\n */\n imageData?: string\n}\n\n/**\n * This interface describes a workflow prepared and ready to be sent to vault\n */\nexport interface PopulatedWorkflowField {\n answer: SelectedAnswerData | WorkflowUploadedImage[] // Actual answer from the workflow\n displayedAnswer?: any // This answer is to be used only when it's impossible to get data from workflow\n kind: string // If we don't store question. We will need that field to at least know the field type\n}\n\nexport interface PopulatedWorkflowData {\n workflowId: string // The workflow id to refer\n workflowCreatedAt: string // The workflow version\n locale?: string\n fields: Record<string, PopulatedWorkflowField> // key corresponds to the QuestionData key in the workflow\n}\n","export interface SearchRequest {\n terms: Terms\n}\n\nexport interface SearchResponse {\n results: SearchResult[]\n}\n\nexport interface SearchResult {\n consultUuid: string\n kind: string\n score: number\n}\n\nexport interface IndexRequest {\n consultUUID: string\n terms: Terms\n}\n\nexport type Terms = Term[]\nexport interface Term {\n kind?: string\n value: string\n}\n\n\nexport enum IndexKind {\n consultUuid,\n consultShortid,\n firstName,\n lastName,\n healthId,\n dob,\n}\n","export class AuthenticationFailed extends Error { }\nexport class AuthenticationBadRequest extends Error { }\nexport class AuthenticationServerError extends Error { }\nexport class AuthenticationUnconfirmedEmail extends Error { }\nexport class IdentityCreationFailed extends Error { }\nexport class IdentityCreationBadRequest extends Error { }\nexport class IdentityCreationConflict extends Error { }\nexport class VaultDataMissing extends Error { }","import { APIService } from './api'\nimport {\n Uuid,\n Consult,\n ConsultRequest,\n MedicalStatus,\n ConsultTransmission,\n ClosedReasonType,\n TransmissionKind,\n TransmissionStatus,\n ConsultType,\n} from '../models'\n\nexport class ConsultService {\n constructor(private api: APIService, private baseURL: string) {}\n\n public consultCreate(c: ConsultRequest): Promise<Consult> {\n return this.api.post<Consult>(`${this.baseURL}/v1/consults`, c)\n }\n\n /**\n * This function returns the number of consults using parameters\n * @param uuidPractice the practice uuid\n * @param uuidRequester the requester uuid\n * @param statusesMedical an array containing MedicalStatus to include\n * @param statusesExclude an array containing MedicalStatus to exclude\n * @param shortId a shortId matcher (will match all consult with a shortId starting with this `shortId`)\n * @param columnToSortTo the list of columns separated by commas, to sort to (in order of sorting)\n * @param orderToSortTo the type of sorting to do ('asc' for ascending or 'desc' for descending)\n * @param perPage the number of item to retrieve per \"page\"\n * @param indexPage the actual index of the page to retrieve (0 based: 0 is the first items)\n * @param filterAssignedDoctor the uuid of the doctor for which to filter with\n * @param filterCurrentPractitioner the uuid of the current assistant assigned to filter with\n * @param filterIsoLocality the of isoLocality to filter with\n * @param filterAssignee array of practitioner uuids with which you want to filter the consultations\n * @returns a number of consult\n */\n public countConsults(\n uuidPractice?: Uuid,\n uuidRequester?: Uuid,\n statusesMedical?: MedicalStatus[],\n statusesExclude?: MedicalStatus[],\n shortId?: string,\n columnToSortTo?: string[],\n orderToSortTo?: string[],\n perPage?: number,\n indexPage?: number,\n filterAssignedDoctor?: string,\n filterCurrentPractitioner?: string,\n filterIsoLocality?: string[],\n filterAssignee?: string[],\n typesConsult?: ConsultType[],\n uuidParent?: Uuid\n ): Promise<number> {\n return this.api\n .head<any>(\n `${this.baseURL}/v1/consults`,\n {\n params: {\n uuidPractice,\n uuidRequester,\n statusesMedical,\n statusesExclude,\n shortId,\n perPage,\n page: indexPage,\n sortColumns: columnToSortTo,\n orderColumns: orderToSortTo,\n filterAssignedDoctor,\n filterCurrentPractitioner,\n filterIsoLocality,\n filterAssignee,\n typesConsult,\n uuidParent,\n },\n },\n 'Content-Range'\n )\n .then((resContentRange) => {\n if (!resContentRange || (typeof resContentRange !== 'string' && typeof resContentRange !== 'number')) {\n return 0\n }\n\n if (typeof resContentRange === 'number') {\n return resContentRange\n }\n\n return parseInt(resContentRange)\n })\n }\n\n /**\n * This function get consults using parameters\n * @param uuidPractice the practice uuid\n * @param uuidRequester the requester uuid\n * @param statusesMedical an array containing MedicalStatus to include\n * @param statusesExclude an array containing MedicalStatus to exclude\n * @param shortId a shortId matcher (will match all consult with a shortId starting with this `shortId`)\n * @param columnToSortTo the list of columns separated by commas, to sort to (in order of sorting)\n * @param orderToSortTo the type of sorting to do ('asc' for ascending or 'desc' for descending)\n * @param perPage the number of item to retrieve per \"page\"\n * @param indexPage the actual index of the page to retrieve (0 based: 0 is the first items)\n * @param filterAssignedDoctor the uuid of the doctor for which to filter with\n * @param filterCurrentPractitioner the uuid of the current assistant assigned to filter with\n * @param filterIsoLocality the of isoLocality to filter with\n * @returns a list of consult\n */\n public getConsults(\n uuidPractice?: Uuid,\n uuidRequester?: Uuid,\n statusesMedical?: MedicalStatus[],\n statusesExclude?: MedicalStatus[],\n shortId?: string,\n columnToSortTo?: string[],\n orderToSortTo?: string[],\n perPage?: number,\n indexPage?: number,\n filterAssignedDoctor?: string,\n filterCurrentPractitioner?: string,\n filterIsoLocality?: string[],\n filterAssignee?: string[],\n uuidParent?: Uuid,\n typesConsult?: ConsultType[]\n ): Promise<Consult[]> {\n return this.api.get<Consult[]>(`${this.baseURL}/v1/consults`, {\n params: {\n uuidPractice,\n uuidRequester,\n statusesMedical,\n statusesExclude,\n shortId,\n perPage,\n page: indexPage,\n sortColumns: columnToSortTo,\n orderColumns: orderToSortTo,\n filterAssignedDoctor,\n filterCurrentPractitioner,\n filterIsoLocality,\n filterAssignee,\n typesConsult,\n uuidParent,\n },\n })\n }\n\n public getConsultByUUID(uuidConsult: Uuid, uuidPractice?: Uuid): Promise<Consult> {\n return this.api.get<Consult>(`${this.baseURL}/v1/consults/${uuidConsult}`, { params: { uuidPractice } })\n }\n\n public getConsultByPracticePaymentID(idPracticePayment: Number, uuidPractice?: Uuid): Promise<Consult> {\n return this.api.get<Consult>(`${this.baseURL}/v1/consults/payment-${idPracticePayment}`, {\n params: { uuidPractice },\n })\n }\n\n public updateConsultByUUID(\n uuidConsult: Uuid,\n consult: {\n statusMedical?: MedicalStatus\n closedReasonType?: ClosedReasonType\n closedReasonDescription?: string\n uuidAssignedDoctor?: Uuid\n neverExpires?: boolean\n },\n uuidPractice?: Uuid,\n uuidRequester?: Uuid\n ): Promise<Consult> {\n return this.api.put<Consult>(`${this.baseURL}/v1/consults/${uuidConsult}`, consult, {\n params: {\n uuidPractice,\n uuidRequester,\n },\n })\n }\n\n public getConsultFaxStatuses(uuidConsult: string): Promise<ConsultTransmission[]> {\n return this.api.get<ConsultTransmission[]>(`${this.baseURL}/v1/consults/${uuidConsult}/transmissions`, {\n params: {\n kind: TransmissionKind.Fax,\n },\n })\n }\n\n public postConsultTransmission(\n uuidConsult: string,\n nameDriver: string = 'Documo',\n addressOrPhoneToSendTo?: string,\n file?: File,\n nameReceiver?: string,\n txtTransmissionTitle?: string,\n txtTransmissionNotes?: string,\n uuidPatient?: string\n // numTry ?: number,\n // delay ?: number,\n ): Promise<ConsultTransmission> {\n let data = new FormData()\n\n data.append('nameDriverReceiver', nameDriver)\n if (uuidPatient) {\n data.append('uuidPatient', uuidPatient)\n }\n if (addressOrPhoneToSendTo) {\n data.append('addressReceiver', addressOrPhoneToSendTo)\n }\n if (file) {\n data.append('file', file)\n }\n if (nameReceiver) {\n data.append('nameReceiver', nameReceiver)\n }\n if (txtTransmissionTitle) {\n data.append('txtTransmissionTitle', txtTransmissionTitle)\n }\n if (txtTransmissionNotes) {\n data.append('txtTransmissionNotes', txtTransmissionNotes)\n }\n\n return this.api.post<ConsultTransmission>(`${this.baseURL}/v1/consults/${uuidConsult}/transmissions`, data, {\n headers: { 'Content-Type': 'multipart/form-data;' },\n })\n }\n\n public postConsultFax(\n uuidConsult: string,\n addressReceiver: string,\n file: File,\n uuidPatient?: string\n ): Promise<ConsultTransmission> {\n return this.postConsultTransmission(\n uuidConsult,\n 'Documo',\n addressReceiver,\n file,\n undefined,\n undefined,\n undefined,\n uuidPatient\n )\n }\n\n public postConsultEmail(uuidConsult: string, file: File, uuidPatient?: string): Promise<ConsultTransmission> {\n return this.postConsultTransmission(\n uuidConsult,\n 'Pharmacierge',\n undefined,\n file,\n undefined,\n undefined,\n undefined,\n uuidPatient\n )\n }\n\n public retryConsultFax(uuidConsult: string, transmissionId: string): Promise<ConsultTransmission> {\n return this.api.put<ConsultTransmission>(\n `${this.baseURL}/v1/consults/${uuidConsult}/transmissions/${transmissionId}`,\n { status: TransmissionStatus.Retrying }\n )\n }\n\n public updateConsultTransmissionStatus(\n transmissionId: string,\n uuidConsult: string,\n newStatus: TransmissionStatus\n ): Promise<ConsultTransmission> {\n return this.api.put<ConsultTransmission>(\n `${this.baseURL}/v1/consults/${uuidConsult}/transmissions/${transmissionId}`,\n { status: newStatus }\n )\n }\n}\n","import {\n Consult,\n Drug,\n TreatmentAssociatedConsultData,\n TreatmentPlan,\n TreatmentPlans,\n TreatmentPlansRequest,\n TreatmentPlansResponse,\n TreatmentPlanUpdateRequest,\n Uuid,\n} from '..'\nimport {\n Diagnosis,\n Treatment,\n DiagnosisRequest,\n TreatmentAndDrugPrescriptionUpdateRequest,\n TreatmentRequest,\n} from '../models/diagnosis'\nimport { APIService } from './api'\n\nexport class DiagnosisService {\n constructor(private api: APIService, private baseURL: string) {}\n\n public getDiagnoses(): Promise<Diagnosis[]> {\n return this.api.get<Diagnosis[]>(`${this.baseURL}/v1/diagnoses`)\n }\n\n /**\n * Get a diagnosis by uuid that belongs to your practice\n * @param uuidDiagnosis the uuid of the diagnosis\n * @returns a diagnosis\n */\n public getDiagnosisByUuid(uuidDiagnosis: Uuid): Promise<Diagnosis> {\n return this.api.get<Diagnosis>(`${this.baseURL}/v1/diagnoses/${uuidDiagnosis}`)\n }\n\n public createDiagnosis(diagnosis: DiagnosisRequest): Promise<Diagnosis> {\n return this.api.post<Diagnosis>(`${this.baseURL}/v1/diagnoses`, diagnosis)\n }\n\n public updateDiagnosis(uuid: string, diagnosis: DiagnosisRequest): Promise<Diagnosis> {\n return this.api.put<Diagnosis>(`${this.baseURL}/v1/diagnoses/${uuid}`, diagnosis)\n }\n\n public getTreatmentByUuid(uuidDiagnosis: Uuid, uuidTreatment: Uuid): Promise<Treatment> {\n return this.api.get<Treatment>(`${this.baseURL}/v1/diagnoses/${uuidDiagnosis}/treatments/${uuidTreatment}`)\n }\n\n public getTreatmentsFromDiagnosisUuid(diagnosisUuid: Uuid): Promise<Treatment[]> {\n return this.api.get<Treatment[]>(`${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments`)\n }\n\n /**\n * This function returns treatment plans associated to a consult\n * @param uuidConsult the consult uuid to fetch\n * @returns an array of TreatmentPlan\n */\n public getTreatmentPlansFromConsultUuid(uuidConsult: Uuid): Promise<TreatmentPlan[]> {\n return this.api.get<TreatmentPlan[]>(`${this.baseURL}/v1/treatment-plans/`, { params: { uuidConsult } })\n }\n\n /**\n * creates a new treatment for the specified diagnosis\n * @param diagnosisUuid uuid of the diagnosis that the treatment is linked to\n * @param treatmentRequest the treatment to be inserted\n */\n public createTreatment(diagnosisUuid: string, treatmentRequest: TreatmentRequest) {\n return this.api.post<Treatment>(`${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments`, treatmentRequest)\n }\n\n /**\n * This function returns populated treatment plans associated to a consult\n * @param uuidConsult the consult uuid to fetch\n * @returns a TreatmentPlans object\n */\n public getTreatmentPlansPopulatedFromConsultUuid(uuidConsult: Uuid): Promise<TreatmentPlans> {\n return this.api.get<TreatmentPlans>(`${this.baseURL}/v1/treatment-plans/`, {\n params: { uuidConsult, populated: true },\n })\n }\n\n public postPlans(plans: TreatmentPlansRequest): Promise<TreatmentPlansResponse> {\n return this.api.post<TreatmentPlansResponse>(`${this.baseURL}/v1/treatment-plans`, plans)\n }\n\n public updateTreatmentPlan(\n uuidPlan: string,\n uuidConsult: string,\n diagnosisRequest: DiagnosisRequest,\n plan: TreatmentAndDrugPrescriptionUpdateRequest,\n refill?: boolean\n ): Promise<TreatmentPlan> {\n return this.api.put<TreatmentPlan>(`${this.baseURL}/v1/treatment-plans/${uuidPlan}`, <\n TreatmentPlanUpdateRequest\n >{\n uuidConsult,\n diagnosis: diagnosisRequest,\n plan,\n refill,\n })\n }\n\n public setAssociatedConsultsToTreatment(\n diagnosisUuid: string,\n treatmentUuid: string,\n arrAssociatedConsults: TreatmentAssociatedConsultData[]\n ): Promise<TreatmentAssociatedConsultData[]> {\n return this.api.post<TreatmentAssociatedConsultData[]>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments/${treatmentUuid}/associated-consults`,\n arrAssociatedConsults\n )\n }\n\n public updateAssociatedConsultsToTreatment(\n diagnosisUuid: string,\n treatmentUuid: string,\n arrAssociatedConsults: TreatmentAssociatedConsultData[]\n ): Promise<TreatmentAssociatedConsultData[]> {\n return this.api.put<TreatmentAssociatedConsultData[]>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments/${treatmentUuid}/associated-consults`,\n arrAssociatedConsults\n )\n }\n\n public getAssociatedConsultsOfTreatment(\n diagnosisUuid: string,\n treatmentUuid: string\n ): Promise<TreatmentAssociatedConsultData[]> {\n return this.api.get<TreatmentAssociatedConsultData[]>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments/${treatmentUuid}/associated-consults`\n )\n }\n\n public acceptTreatmentPlan(uuidPlan: string, uuidConsult: string): Promise<TreatmentPlan> {\n return this.api.put<TreatmentPlan>(`${this.baseURL}/v1/treatment-plans/${uuidPlan}/accept`, { uuidConsult })\n }\n\n /**\n * retrieves all the drugs of the specified practice\n * @param uuidPractice\n */\n public async getAllDrugs(uuidPractice: string): Promise<Drug[] | undefined> {\n const res = await this.api.get<{ foundDrugs: Drug[] }>(`${this.baseURL}/v1/drugs/practice/${uuidPractice}`)\n if (res && res.foundDrugs) return res.foundDrugs\n return undefined\n }\n}\n","import { AxiosError } from 'axios'\nimport type { AxiosAuthRefreshRequestConfig } from 'axios-auth-refresh'\nimport {\n AuthenticationBadRequest,\n AuthenticationFailed,\n AuthenticationServerError,\n AuthenticationUnconfirmedEmail,\n AuthRecoverRequest,\n AuthTokenRequest,\n AuthTokenResponse,\n Base64String,\n IdentityCreateRequest,\n IdentityCreationBadRequest,\n IdentityCreationConflict,\n IdentityCreationFailed,\n IdentityResendConfirmEmailRequest,\n IdentityResponse,\n IdentityUpdateRequest,\n M2MTokenRequest,\n QRCodeRequest,\n QRCodeResponse,\n Tokens,\n Uuid,\n WhoAmIResponse,\n} from '../models'\nimport { APIService } from './api'\n\nexport interface GuardRequestConfig extends AxiosAuthRefreshRequestConfig {\n useRefreshToken: boolean\n}\nexport class GuardService {\n private identityCache: Record<string, IdentityResponse>\n private whoAmICache: Record<string, WhoAmIResponse>\n\n constructor(private api: APIService, private baseURL: string) {\n this.api.setAuthRefreshFn(this.authRefresh.bind(this)) // This is the default behavior for User JWT tokens. If you want other kind of refresh you shall overwrite this call\n this.identityCache = {}\n this.whoAmICache = {}\n }\n\n /**\n * Will replace access and refresh tokens with `tokens`\n *\n * Note:\n * ```typescript\n * setTokens({accessToken: undefined, refreshToken: 'aTokenValue'}) // will erase accessToken and set refreshToken with 'aTokenValue'\n * setTokens({refreshToken: 'aTokenValue'}) // will keep actual value of accessToken and set refreshToken with 'aTokenValue'\n *\n * ```\n * @param tokens\n */\n public setTokens(tokens: Tokens) {\n this.api.setTokens({ ...this.api.getTokens(), ...tokens })\n }\n\n /**\n * Allow to retrieve a M2M token for a service\n *\n * @param req The credentials required to get an access token\n * @returns AuthTokenResponse\n */\n public async m2mToken(req: M2MTokenRequest): Promise<AuthTokenResponse> {\n let resp: AuthTokenResponse | undefined\n\n try {\n let config: AxiosAuthRefreshRequestConfig = {\n skipAuthRefresh: true,\n }\n\n resp = await this.api.post<AuthTokenResponse>(`${this.baseURL}/v1/m2m/token`, req, config)\n\n this.api.setTokens({\n accessToken: resp.accessToken,\n })\n } catch (e) {\n console.error('Error while posting m2m token:', e)\n\n if ((e as any).isAxiosError) {\n const code = (e as AxiosError).response?.status\n switch (code) {\n case 400:\n throw new AuthenticationBadRequest()\n case 500:\n throw new AuthenticationServerError()\n case 401:\n default:\n throw new AuthenticationFailed()\n }\n }\n throw new AuthenticationFailed()\n }\n\n return resp\n }\n\n /**\n * Allow to retrieve an access token and a refresh token in order\n * to do authenticated request afterward\n *\n * @param req The credentials required to get an access token\n * @returns AuthTokenResponse\n */\n public async authToken(req: AuthTokenRequest): Promise<AuthTokenResponse> {\n let resp: AuthTokenResponse\n\n try {\n let config: AxiosAuthRefreshRequestConfig = {\n skipAuthRefresh: true,\n }\n\n resp = await this.api.post<AuthTokenResponse>(`${this.baseURL}/v1/auth/token`, req, config)\n\n this.api.setTokens({\n accessToken: resp.accessToken,\n refreshToken: resp.refreshToken,\n })\n } catch (e) {\n console.error('Error while posting auth token:', e)\n\n if ((e as any).isAxiosError) {\n const code = (e as AxiosError).response?.status\n switch (code) {\n case 400:\n throw new AuthenticationBadRequest()\n case 424:\n throw new AuthenticationUnconfirmedEmail()\n case 500:\n throw new AuthenticationServerError()\n case 401:\n default:\n throw new AuthenticationFailed()\n }\n }\n throw new AuthenticationFailed()\n }\n return resp\n }\n\n /**\n * Get new access and refresh token\n *\n * @returns AuthTokenResponse\n */\n public async authRefresh(refreshToken?: string): Promise<AuthTokenResponse> {\n let config: GuardRequestConfig = {\n skipAuthRefresh: true,\n useRefreshToken: true,\n }\n return this.api.put<AuthTokenResponse>(`${this.baseURL}/v1/auth/token`, null, config)\n }\n\n /**\n * Call guard to overwrite existing refresh token cookie\n *\n * @returns void\n */\n public async authLogout(): Promise<void> {\n return this.api.get<void>(`${this.baseURL}/v1/auth/logout`)\n }\n\n /**\n * Call guard to attempt account recovery\n *\n * @param req The email address / practice of the account to recover\n * @returns void\n */\n public async authRecover(req: AuthRecoverRequest): Promise<void> {\n return this.api.post<void>(`${this.baseURL}/v1/auth/recover`, req)\n }\n\n /**\n * Allow to create a new identity. The identity will then need to be confirmed\n * via an email link\n *\n * @param req the information about the new identity to create\n * @returns IdentityResponse\n */\n public async identityCreate(req: IdentityCreateRequest): Promise<IdentityResponse> {\n let resp: IdentityResponse\n\n try {\n resp = await this.api.post<IdentityResponse>(`${this.baseURL}/v1/identities`, req)\n this.api.setTokens({\n refreshToken: resp.refreshToken,\n })\n } catch (e) {\n if ((e as any).isAxiosError) {\n const code = (e as AxiosError).response?.status\n switch (code) {\n case 400:\n throw new IdentityCreationBadRequest()\n case 409:\n throw new IdentityCreationConflict()\n case 500:\n default:\n throw new IdentityCreationFailed()\n }\n }\n throw new IdentityCreationFailed()\n }\n return resp\n }\n\n /**\n * Retrieve an identity. Will return public fields only when requested\n * without authentication\n *\n * @param identityID Unique id of the identity to retrieve\n * @param skipCache (default: false) will skip identity cache (not even update it)\n * @returns IdentityResponse\n */\n public async identityGet(identityID: Uuid, skipCache = false): Promise<IdentityResponse> {\n const tokens = this.api.getTokens()\n const cacheKey = (tokens.accessToken ?? '') + (tokens.refreshToken ?? '') + identityID\n\n if (skipCache || !tokens.accessToken || !this.identityCache[cacheKey]) {\n const identity = await this.api.get<IdentityResponse>(`${this.baseURL}/v1/identities/${identityID}`)\n\n if (skipCache) return identity\n\n this.identityCache[cacheKey] = identity\n }\n return this.identityCache[cacheKey]\n }\n\n /**\n * Get information about the current authenticated user\n *\n * @param refreshCache if true it will refresh the whoAmI cache (default: false)\n * @returns WhoAmIResponse\n */\n public async whoAmI(refreshCache: boolean = false): Promise<WhoAmIResponse> {\n const cacheKey = this.api.getTokens().accessToken ?? ''\n if (!this.whoAmICache[cacheKey] || refreshCache) {\n this.whoAmICache[cacheKey] = await this.api.get<WhoAmIResponse>(`${this.baseURL}/v1/auth/whoami`)\n }\n return this.whoAmICache[cacheKey]\n }\n\n /**\n * Update an existing identity\n *\n * @param identityID unique id of identity to update\n * @param req update request\n * @returns IdentityResponse\n */\n public async identityUpdate(identityID: Uuid, req: IdentityUpdateRequest): Promise<IdentityResponse> {\n return this.api.put<IdentityResponse>(`${this.baseURL}/v1/identities/${identityID}`, req)\n }\n\n /**\n * Return base64 data representing a QR code that the\n * current identity need in order to use MFA\n *\n * @param identityID unique id of the identity\n * @param password the identity password (already hashed and in base64)\n * @returns QRCodeResponse\n */\n public async identityMFAQRCode(identityID: Uuid, password: Base64String): Promise<QRCodeResponse> {\n const req: QRCodeRequest = { password }\n return this.api.post<QRCodeResponse>(`${this.baseURL}/v1/identities/${identityID}/mfa`, req, {\n headers: { Accept: 'application/json' },\n })\n }\n\n /**\n * Attempt to resend the email confirmation email\n *\n * @param req IdentityResendConfirmEmailRequest\n * @return void\n */\n public async identitySendConfirmEmail(req: IdentityResendConfirmEmailRequest): Promise<void> {\n return this.api.post<void>(`${this.baseURL}/v1/identity/confirm`, req)\n }\n\n /**\n * Notifies the guard and confirms the phishing attempt\n * @param attemptUuid the guard logged attempt id\n * @returns void\n */\n public async authConfirmPhishingAttempts(attemptUuid: Uuid): Promise<void> {\n return this.api.put<void>(`${this.baseURL}/v1/auth/attempts/${attemptUuid}`, {})\n }\n\n /**\n * Get an identity using a customer email (format: customer+[b64Hash]@orohealth.me)\n *\n * @param email the customer email\n * @returns IdentityResponse\n */\n public async identityGetByCustomerEmail(email: string): Promise<IdentityResponse> {\n return this.identityGetByHash(email.substring(email.indexOf('+') + 1, email.indexOf('@')))\n }\n\n /**\n * Get an identity using a base64 hash\n *\n * @param b64Hash base64 hash of the identity\n * @returns IdentityResponse\n */\n public async identityGetByHash(b64Hash: string): Promise<IdentityResponse> {\n //TODO: Right now this maps directly to the IdentityGet call.\n //Eventually, with the mapping table method, this would lead to another\n //call (ie: /v1/mapping/[b64Hash]) which would return a blob to decrypt\n //which would contain the real identityID to call IdentityGet with.\n\n //The hash comes in base64 format but it isn't URL safe soe we have to convert\n //to base64URL (see https://en.wikipedia.org/wiki/Base64#The_URL_applications)\n return this.identityGet(b64Hash.replace(/\\+/g, '-').replace(/\\//g, '_'))\n }\n}\n","import {APIService} from \"./api\";\nimport {IndexRequest, SearchRequest, SearchResponse, Terms} from \"../models/search\";\n\nexport class SearchService {\n constructor(private api: APIService, private baseURL: string) {}\n\n /**\n * Creates search indexes for the terms passed in order to be able to search for it in the future\n * @param consultUUID\n * @param terms the search terms to be indexed\n */\n public index(\n consultUUID: string,\n terms: Terms\n ): Promise<any> {\n return this.api.post<IndexRequest>(\n `${this.baseURL}/v1/index`,\n <IndexRequest> {\n consultUUID,\n terms\n }\n )\n }\n\n /**\n * Searches for the consultations corresponding to the search terms entered in the query\n * @param terms array of search terms\n */\n public search(\n terms: Terms\n ): Promise<SearchResponse> {\n return this.api.post<SearchResponse>(\n `${this.baseURL}/v1/search`,\n <SearchRequest> {\n terms\n }\n )\n }\n}","import { hashToBase64String } from '../helpers'\nimport { PaymentStatus, PracticeAccount, Uuid } from '../models'\nimport {\n Assignment,\n AssignmentRequest,\n PaymentIntentRequestMetadata,\n PlanType,\n Practice,\n PracticeConfigKind,\n PracticeConfigs,\n PracticeInvoice,\n PracticePayment,\n PracticePaymentIntent,\n PracticePlan,\n PracticePlanPrices,\n PracticeWorkflow,\n PracticeWorkflowWithTagSpecialty,\n Practitioner,\n PractitionerLicense,\n PractitionerPreference,\n PractitionerQuota,\n PractitionerRole,\n WorkflowType,\n} from '../models/practice'\nimport { APIService } from './api'\n\nexport class PracticeService {\n constructor(private api: APIService, private baseURL: string) {}\n\n /**\n * This function will only work if the service is initialized with\n * an M2M with the scope `practice.practices.get`\n * @returns an array of practices\n */\n public practiceGetAll(): Promise<Practice[]> {\n return this.api.get<Practice[]>(`${this.baseURL}/v1/practices`)\n }\n\n /**\n * This function get the practice from the URL of a practice\n * It is the entry point of our web apps\n * @param practiceURL URL of the practice to search\n * @param hydratePracticeConfigs (optional) if set true it the Practice field configs will be set\n * @param accounts (optional) if set true it the Practice field accounts will be set\n * @returns the found practice or undefined\n */\n public practiceGetFromURL(\n practiceURL: string,\n params?: {\n hydratePracticeConfigs?: boolean\n accounts?: boolean\n }\n ): Promise<Practice | undefined> {\n return this.api.get<Practice | undefined>(`${this.baseURL}/v1/practices`, {\n params: {\n url_practice: practiceURL,\n ...params,\n },\n })\n }\n\n public practiceGetFromUuid(practiceUuid: Uuid, locale?: string, withAccounts?: boolean): Promise<Practice> {\n return this.api.get<Practice>(`${this.baseURL}/v1/practices/${practiceUuid}`, {\n params: { locale, accounts: withAccounts },\n })\n }\n\n /// Practice Configs\n\n /**\n * This function retrieves all configs of a specific practice\n * @param practiceUuid uuid of the practice\n * @returns the practice configs\n */\n public practiceConfigGetFromPracticeUuid(practiceUuid: Uuid): Promise<PracticeConfigs[]> {\n return this.api.get<PracticeConfigs[]>(`${this.baseURL}/v1/practices/${practiceUuid}/configs`)\n }\n\n /**\n * This function retrieves a specific config of a practice\n * @param practiceUuid uuid of the practice\n * @param kind of the config\n * @returns the practice config\n */\n public practiceConfigGetByKindForPracticeUuid(\n practiceUuid: Uuid,\n kind: PracticeConfigKind\n ): Promise<PracticeConfigs> {\n return this.api.get<PracticeConfigs>(`${this.baseURL}/v1/practices/${practiceUuid}/configs/${kind}`)\n }\n\n /**\n * This function creates a config for a specific practice\n * @param practiceUuid uuid of the practice\n * @param config the config to add to the practice\n * @returns the created practice config\n */\n public practiceConfigCreateForPracticeUuid(practiceUuid: Uuid, config: PracticeConfigs): Promise<PracticeConfigs> {\n return this.api.post<PracticeConfigs>(`${this.baseURL}/v1/practices/${practiceUuid}/configs`, config)\n }\n\n /**\n * This function updates a specific config of a practice\n * @param practiceUuid uuid of the practice\n * @param config the config to update\n * @returns the practice config\n */\n public practiceConfigUpdate(config: PracticeConfigs): Promise<PracticeConfigs> {\n return this.api.put<PracticeConfigs>(\n `${this.baseURL}/v1/practices/${config.uuidPractice}/configs/${config.kind}`,\n config\n )\n }\n\n /// Accounts\n public practiceGetAccounts(practiceUuid: Uuid): Promise<PracticeAccount[]> {\n return this.api.get<PracticeAccount[]>(`${this.baseURL}/v1/practices/${practiceUuid}/accounts`)\n }\n\n public practiceGetAccount(practiceUuid: Uuid, accountUuid: Uuid): Promise<PracticeAccount> {\n return this.api.get<PracticeAccount>(`${this.baseURL}/v1/practices/${practiceUuid}/accounts/${accountUuid}`)\n }\n\n /**\n * Get the PracticeWorkflows of a specific practice\n * @param practiceUuid the uuid of the practice\n * @param kind (optional) the kind of WorkflowType to filter in\n * @returns a list of PracticeWorkflow\n */\n public practiceGetWorkflows(practiceUuid: Uuid, kind?: WorkflowType): Promise<PracticeWorkflow[]> {\n return this.api.get<PracticeWorkflow[]>(`${this.baseURL}/v1/practices/${practiceUuid}/workflows`, {\n params: { kind },\n })\n }\n\n public practiceGetWorkflow(\n practiceUuid: Uuid,\n workflowType: WorkflowType\n ): Promise<PracticeWorkflowWithTagSpecialty> {\n return this.api.get<PracticeWorkflowWithTagSpecialty>(\n `${this.baseURL}/v1/practices/${practiceUuid}/workflows/${workflowType}`\n )\n }\n\n /// Plans\n public practiceGetPlans(practiceUuid: Uuid, planType?: PlanType): Promise<PracticePlan[]> {\n return this.api.get<PracticePlan[]>(`${this.baseURL}/v1/practices/${practiceUuid}/plans`, {\n params: { kind: planType },\n })\n }\n\n public practiceGetPlan(practiceUuid: Uuid, planId: number): Promise<PracticePlan> {\n return this.api.get<PracticePlan>(`${this.baseURL}/v1/practices/${practiceUuid}/plans/${planId}`)\n }\n\n public practiceGetPlanPrices(practiceUuid: Uuid, planId: number): Promise<PracticePlanPrices> {\n return this.api.get<PracticePlanPrices>(`${this.baseURL}/v1/practices/${practiceUuid}/plans/${planId}/prices`)\n }\n\n // Payments\n public practiceGetPayments(\n practiceUuid: Uuid,\n statusPayment?: PaymentStatus,\n withConsultUUIDNULL?: boolean,\n perPage?: number,\n indexPage?: number\n ): Promise<PracticePayment[]> {\n return this.api.get<PracticePayment[]>(`${this.baseURL}/v1/practices/${practiceUuid}/payments`, {\n params: {\n status: statusPayment,\n withConsultUUIDNULL,\n perPage,\n indexPage,\n },\n })\n }\n\n public practiceGetPayment(practiceUuid: Uuid, idStripeInvoiceOrPaymentIntent: string): Promise<PracticePayment> {\n return this.api.get<PracticePayment>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/${idStripeInvoiceOrPaymentIntent}`\n )\n }\n\n public practiceGetPaymentForStripePaymentIntentWithID(\n practiceUuid: Uuid,\n stripePaymentIntentId: number\n ): Promise<PracticePayment> {\n return this.api.get<PracticePayment>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/${stripePaymentIntentId}`\n )\n }\n\n // Payments Intent\n public practiceGetPaymentsIntents(practiceUuid: Uuid, planType?: PlanType): Promise<PracticePaymentIntent[]> {\n return this.api.get<PracticePaymentIntent[]>(`${this.baseURL}/v1/practices/${practiceUuid}/payments/intents`, {\n params: { kind: planType },\n })\n }\n\n /**\n * This function return the user hased email to be use for creating payment intent\n * @param email the email to hash\n * @returns a hashed email\n */\n public getPaymentIntentHashedEmail(email: string): string {\n return hashToBase64String(email.toLowerCase())\n }\n\n /**\n * Creates a PracticePaymentIntent\n * @param practiceUuid the uuid of the practice\n * @param planId the plan id to use\n * @param userEmail the email address of the user\n * @param isoLocality (optional) the desired locality\n * @param url_subdomain (optional) the url of the sub domain (@bruno-morel need you to document that)\n * @param promotionCode (optional) promotion code to apply\n * @param requestMetadata (optional) the request metadata to use. If defined, when payment service call our hooks in practice, it will use it to do required action (create a consult, refill a consult, etc.).\n * @returns\n */\n public practiceCreatePaymentsIntent(\n practiceUuid: Uuid,\n planId: number,\n userEmail: string,\n isoLocality?: string,\n url_subdomain?: string,\n requestMetadata?: PaymentIntentRequestMetadata\n ): Promise<PracticePaymentIntent> {\n return this.api.post<PracticePaymentIntent>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/intents/`,\n {\n idPlan: planId,\n hashUserEmail: userEmail ? this.getPaymentIntentHashedEmail(userEmail) : undefined,\n isoLocality,\n requestMetadata,\n },\n { params: { url_subdomain } }\n )\n }\n\n public practiceGetPaymentsIntent(practiceUuid: Uuid, paymentIntentId: number): Promise<PracticePaymentIntent> {\n return this.api.get<PracticePaymentIntent>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/intents/${paymentIntentId}`\n )\n }\n\n /**\n * Updates a PracticePaymentIntent\n * @param practiceUuid the practice uuid\n * @param idPraticePaymentIntent the id of the PracticePaymentIntent to update\n * @param practicePaymentIntent the desired PracticePaymentIntent\n * @param userEmail the email of the user\n * @param promotionCode (optional) promotional code to apply\n * @param finalize (optional) if true will finalize the PracticePaymentIntent and related Stripe.Invoice. Once, finalized you cannot modify the PracticePaymentIntent anymore.\n * @returns the updated PracticePaymentIntent\n */\n public practiceUpdatePaymentsIntent(\n practiceUuid: string,\n idPraticePaymentIntent: number,\n practicePaymentIntent: PracticePaymentIntent,\n userEmail: string,\n promotionCode?: string,\n finalize?: boolean\n ) {\n return this.api.put<PracticePaymentIntent>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/intents/${idPraticePaymentIntent}`,\n {\n ...practicePaymentIntent,\n hashUserEmail: userEmail ? this.getPaymentIntentHashedEmail(userEmail) : undefined,\n },\n { params: { promotionCode, finalize } }\n )\n }\n\n /**\n * Invoice\n * @param practiceUuid UUID of the practice to get the invoice from\n * @param invoiceId ID of the invoice in stripe\n */\n public getInvoice(practiceUuid: Uuid, invoiceId: string): Promise<PracticeInvoice> {\n return this.api.get<PracticeInvoice>(\n `${this.baseURL}/v1/practices/${practiceUuid}/payments/invoices/${invoiceId}`\n )\n }\n\n // Practitioner\n public practiceGetPractitioners(practiceUuid: Uuid): Promise<Practitioner[]> {\n return this.api.get<Practitioner[]>(`${this.baseURL}/v1/practices/${practiceUuid}/practitioners`)\n }\n\n public practiceUpdatePractitioner(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n requestBody: Practitioner\n ): Promise<Practitioner> {\n return this.api.put<Practitioner>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}`,\n requestBody\n )\n }\n\n public practiceGetPractitioner(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<Practitioner> {\n return this.api.get<Practitioner>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}`\n )\n }\n\n // Practitioner Licenses\n public practiceGetPractitionerLicenses(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<PractitionerLicense[]> {\n return this.api.get<PractitionerLicense[]>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/licenses`\n )\n }\n\n public practiceCreatePractitionerLicense(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n requestBody: PractitionerLicense\n ): Promise<PractitionerLicense> {\n return this.api.post<PractitionerLicense>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/licenses`,\n requestBody\n )\n }\n\n public practiceUpdatePractitionerLicense(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n licenseId: number,\n requestBody: PractitionerLicense\n ): Promise<PractitionerLicense> {\n return this.api.put<PractitionerLicense>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/licenses/${licenseId}`,\n requestBody\n )\n }\n\n public practiceGetPractitionerLicense(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n licenseId: number\n ): Promise<PractitionerLicense> {\n return this.api.get<PractitionerLicense>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/licenses/${licenseId}`\n )\n }\n\n // Practitioner Preferences\n public practiceGetPractitionerPreferences(\n practiceUuid: Uuid,\n practitionerUuid: Uuid\n ): Promise<PractitionerPreference[]> {\n return this.api.get<PractitionerPreference[]>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/preferences`\n )\n }\n\n public practiceCreatePractitionerPreference(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n requestBody: PractitionerPreference\n ): Promise<PractitionerPreference> {\n return this.api.post<PractitionerPreference>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/preferences`,\n requestBody\n )\n }\n\n public practiceUpdatePractitionerPreference(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n preferenceId: number,\n requestBody: PractitionerPreference\n ): Promise<PractitionerPreference> {\n return this.api.put<PractitionerPreference>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/preferences/${preferenceId}`,\n requestBody\n )\n }\n\n public practiceGetPractitionerPreference(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n preferenceId: number\n ): Promise<PractitionerPreference> {\n return this.api.get<PractitionerPreference>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/preferences/${preferenceId}`\n )\n }\n\n // Practitioner Roles\n public practiceGetPractitionerRoles(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<PractitionerRole[]> {\n return this.api.get<PractitionerRole[]>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles`\n )\n }\n\n public practiceCreatePractitionerRole(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n requestBody: PractitionerRole\n ): Promise<PractitionerRole> {\n return this.api.post<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles`,\n requestBody\n )\n }\n\n public practiceDeletePractitionerRoles(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<PractitionerRole> {\n return this.api.deleteRequest<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles`\n )\n }\n\n public practiceUpdatePractitionerRole(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n roleId: number,\n requestBody: PractitionerRole\n ): Promise<PractitionerRole> {\n return this.api.put<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles/${roleId}`,\n requestBody\n )\n }\n\n public practiceGetPractitionerRole(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n roleId: number\n ): Promise<PractitionerRole> {\n return this.api.get<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles/${roleId}`\n )\n }\n\n public practiceDeletePractitionerRole(\n practiceUuid: Uuid,\n practitionerUuid: Uuid,\n roleId: number\n ): Promise<PractitionerRole> {\n return this.api.deleteRequest<PractitionerRole>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/roles/${roleId}`\n )\n }\n\n // Practitioner signature\n\n /**\n * This function returns the practitioner's signature as a Blob\n * @param practiceUuid the practice uuid of the practitioner\n * @param practitionerUuid the practitioner uuid\n * @returns a blob representing the signature\n */\n public practiceGetPractitionerSignature(practiceUuid: Uuid, practitionerUuid: Uuid): Promise<Blob> {\n return this.api.get<Blob>(\n `${this.baseURL}/v1/practices/${practiceUuid}/practitioners/${practitionerUuid}/signature`,\n { responseType: 'blob' }\n )\n }\n\n // Assignments\n public practiceGetAssignments(practiceUuid: Uuid): Promise<Assignment[]> {\n return this.api.get<Assignment[]>(`${this.baseURL}/v1/practices/${practiceUuid}/assignments`)\n }\n\n public practiceCreateAssignment(practiceUuid: Uuid, requestBody: AssignmentRequest): Promise<Assignment> {\n return this.api.post<Assignment>(`${this.baseURL}/v1/practices/${practiceUuid}/assignments`, requestBody)\n }\n\n public practiceUpdateAssignment(\n practiceUuid: Uuid,\n assignmentId: number,\n requestBody: Assignment\n ): Promise<Assignment> {\n return this.api.put<Assignment>(\n `${this.baseURL}/v1/practices/${practiceUuid}/assignments/${assignmentId}`,\n requestBody\n )\n }\n\n public practiceGetAssignment(practiceUuid: Uuid, assignmentId: number): Promise<Assignment> {\n return this.api.get<Assignment>(`${this.baseURL}/v1/practices/${practiceUuid}/assignments/${assignmentId}`)\n }\n\n // Quotas\n public practiceGetQuotas(practiceUuid: Uuid): Promise<PractitionerQuota[]> {\n return this.api.get<PractitionerQuota[]>(`${this.baseURL}/v1/practices/${practiceUuid}/quotas`)\n }\n\n public practiceGetQuota(practiceUuid: Uuid, quotaId: number): Promise<PractitionerQuota> {\n return this.api.get<PractitionerQuota>(`${this.baseURL}/v1/practices/${practiceUuid}/quotas/${quotaId}`)\n }\n}\n","import { APIService } from './api'\nimport {\n ClosedReasonType,\n Consult,\n DataCreateResponse,\n LockboxDataRequest,\n MedicalStatus,\n ResumeConsultEmailRequest,\n Uuid,\n} from '../models'\nexport class TellerService {\n constructor(private api: APIService, private baseURL: string) { }\n\n public async lockboxDataStore(\n lockboxUuid: Uuid,\n req: LockboxDataRequest,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid,\n options: {\n updateMedicalStatus: boolean\n } = { updateMedicalStatus: true },\n ): Promise<DataCreateResponse> {\n return this.api.post<DataCreateResponse>(`${this.baseURL}/v1/lockboxes/${lockboxUuid}/data`, req, {\n params: {\n lockbox_owner_uuid: lockboxOwnerUuid,\n data_uuid: previousDataUuid,\n update_medical_status: options.updateMedicalStatus,\n },\n })\n }\n\n public updateConsultByUUID(\n patientUuid: Uuid,\n uuidConsult: Uuid,\n statusMedical: MedicalStatus,\n closedReasonType?: ClosedReasonType,\n closedReasonDescription?: string,\n neverExpires?: boolean\n ): Promise<Consult> {\n return this.api.put<Consult>(`${this.baseURL}/v1/consults/${uuidConsult}`, {\n patientUuid,\n statusMedical,\n closedReasonType,\n closedReasonDescription,\n neverExpires,\n })\n }\n\n /**\n * This function notifies teller that the fax sent for a specific consult did not get through\n * @todo - Make service only exposed route\n * @param practiceUuid the practice uuid linked to the consult\n * @param consultationUuid the consultation uuid\n * @param consultationShortId the consultation short id\n * @param fax the address where to send the fax\n * @returns void\n */\n public notifyFaxFailed(practiceUuid: Uuid, consultationUuid: Uuid, consultationShortId: string, fax: string) {\n return this.api.post<void>(\n `${this.baseURL}/v1/fax-failed`,\n {\n consultationUuid,\n consultationShortId,\n fax,\n },\n {\n params: { practice_uuid: practiceUuid },\n }\n )\n }\n\n /**\n * This function let's you reassign a practictioner to a consult and send a notification email\n * @todo - Make service only exposed route\n * @param uuidConsult the uuid of the consult to reassign\n * @param newPractitionerUuid the uuid of the practitioner that will get reassigned\n */\n public reassignmentEmail(uuidConsult: Uuid, newPractitionerUuid: Uuid) {\n return this.api.post<void>(`${this.baseURL}/v1/consult/${uuidConsult}/reassignment-email`, {\n newPractitionerUuid,\n })\n }\n\n /**\n * This function will send an email to the patientUuid, saying that the online practice has been sent a fax successfully\n * @todo - Make service only exposed route\n * @param consult\n * @param patientUuid\n * @returns void\n */\n public sendOnlineFaxSuccessfulEmail(consult: Consult, patientUuid: Uuid): Promise<void> {\n return this.api.post(`${this.baseURL}/v1/online-fax-notify`, { consult, patientUuid })\n }\n\n /**\n * This function will send an email to the patientUuid, saying that the refill has been completed successfully\n * @todo - Make service only exposed route\n * @param consult\n * @param patientUuid\n * @returns void\n */\n public sendRefillFaxSucceededEmail(consult: Consult, patientUuid: Uuid): Promise<void> {\n return this.api.post(`${this.baseURL}/v1/refill-confirm-email`, { consult, patientUuid })\n }\n\n /**\n * This function will send an email to patient to allow them to resume the consult.\n * @param req the body of the resume consult request\n * @returns void\n */\n public sendResumeConsultEmail(req: ResumeConsultEmailRequest): Promise<void> {\n return this.api.post(`${this.baseURL}/v1/resume-consult-email`, req)\n }\n}\n","import { APIService } from './api'\nimport {\n DataCreateResponse,\n DataResponse,\n GrantedLockboxes,\n LockboxCreateResponse,\n LockboxDataRequest,\n LockboxGrantRequest,\n LockboxManifest,\n SharedSecretResponse,\n Uuid,\n EncryptedVaultIndex,\n IndexKey,\n EncryptedIndexEntry\n} from '../models'\n\nexport class VaultService {\n constructor(private api: APIService, private baseURL: string) { }\n\n public async lockboxCreate(lockboxMetadata?: Object): Promise<LockboxCreateResponse> {\n return this.api.post<LockboxCreateResponse>(\n `${this.baseURL}/v1/lockbox`,\n lockboxMetadata\n )\n }\n\n public async lockboxMetadataAdd(\n lockboxUuid: Uuid,\n lockboxMetadata: Object,\n lockboxOwnerUuid?: Uuid\n ): Promise<LockboxCreateResponse> {\n return this.api.put<LockboxCreateResponse>(\n `${this.baseURL}/v1/lockbox/${lockboxUuid}`,\n lockboxMetadata,\n { params: { lockbox_owner_uuid: lockboxOwnerUuid } }\n )\n }\n\n public async lockboxSecretGet(\n lockboxUuid: Uuid,\n lockboxOwnerUuid?: Uuid\n ): Promise<SharedSecretResponse> {\n return this.api.get<SharedSecretResponse>(\n `${this.baseURL}/v1/lockboxes/${lockboxUuid}/secret`,\n { params: { lockbox_owner_uuid: lockboxOwnerUuid } }\n )\n }\n\n public async lockboxGrant(\n lockboxUuid: Uuid,\n req: LockboxGrantRequest,\n lockboxOwnerUuid?: Uuid\n ): Promise<void> {\n return this.api.post<void>(\n `${this.baseURL}/v1/lockboxes/${lockboxUuid}/grant`,\n req,\n { params: { lockbox_owner_uuid: lockboxOwnerUuid } }\n )\n }\n\n /**\n * Get all lockboxes granted to user\n * @param filter filter of lockbox metadata\n * @returns decrypted lockboxes granted to user\n */\n public async grantsGet(): Promise<GrantedLockboxes> {\n return this.api.get<GrantedLockboxes>(`${this.baseURL}/v1/grants`)\n }\n\n /**\n * This function create or update a data into the vault.\n * @note At creation it is necessary to have all `req` filled\n * @note When setting `previousDataUuid` you are updating the data. `req` metadata fields are optional.\n * @param lockboxUuid The lockbox uuid the data will be stored in\n * @param req The request (please see notes)\n * @param lockboxOwnerUuid The uuid of the owner of the lockbox (@deprecated)\n * @param previousDataUuid The data uuid of the data you want to update\n * @returns \n */\n public async lockboxDataStore(\n lockboxUuid: Uuid,\n req: LockboxDataRequest,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n return this.api.post<DataCreateResponse>(\n `${this.baseURL}/v1/lockboxes/${lockboxUuid}/data`,\n req,\n {\n params: {\n lockbox_owner_uuid: lockboxOwnerUuid,\n data_uuid: previousDataUuid,\n },\n }\n )\n }\n\n public async lockboxDataGet(\n lockboxUuid: Uuid,\n dataUuid: Uuid,\n lockboxOwnerUuid?: Uuid,\n stream: boolean = true\n ): Promise<DataResponse> {\n let data = await this.api.get(\n `${this.baseURL}/v1/lockboxes/${lockboxUuid}/data/${dataUuid}`,\n { params: { lockbox_owner_uuid: lockboxOwnerUuid, stream } }\n )\n\n // returned as stream, we need to put inside a DataResponse object\n if (stream)\n return { data }\n\n return data\n }\n\n public async lockboxManifestGet(\n lockboxUuid: Uuid,\n filter?: Object,\n lockboxOwnerUuid?: Uuid\n ): Promise<LockboxManifest> {\n return this.api.get(`${this.baseURL}/v1/lockboxes/${lockboxUuid}`, {\n params: { lockbox_owner_uuid: lockboxOwnerUuid, filter },\n })\n }\n\n public async lockboxMetadataGet(\n lockboxUuid: Uuid,\n fields: string[],\n groupby: string[],\n filter?: Object,\n lockboxOwnerUuid?: Uuid\n ): Promise<any[]> {\n return this.api.get(`${this.baseURL}/v1/lockboxes/${lockboxUuid}/metadata`, {\n params: { lockbox_owner_uuid: lockboxOwnerUuid, fields, groupby, filter },\n })\n }\n\n /**\n * inserts or updates encrypted index entries\n * @note if the index data is being inserted for a user other than the requester, use `indexOwnerUuid`\n * @note if a uuid for an entry is provided, the service will perform an update\n * @param entries the encrypted index data\n * @param indexOwnerUuid\n */\n public async vaultIndexPut(entries: EncryptedVaultIndex, indexOwnerUuid?: Uuid): Promise<void> {\n return this.api.put(`${this.baseURL}/v1/index`,\n entries,\n {\n params: {\n index_owner_uuid: indexOwnerUuid,\n },\n }\n )\n }\n\n /**\n * inserts or updates index snapshot for the provided index owner\n * @note if the index data is being inserted for a user other than the requester, use `indexOwnerUuid`\n * @param entry the encrypted index snapshot\n */\n public async vaultIndexSnapshotPut(entry: EncryptedIndexEntry): Promise<void> {\n return this.api.put(`${this.baseURL}/v1/index-snapshot`, entry)\n }\n\n /**\n * Retrieves the encrypted index from the vault for the requesting user\n * @note index keys can be specified to narrow the scope of index being requested\n * @param indexKeys accepted index fields determined by vault\n * @param identifiers: an array of unique_hashes or consultation uuids used to identify an index entry\n * @param timestamp the minimum timestamp that index entries were created\n * @returns the encrypted index\n */\n public async vaultIndexGet(indexKeys: IndexKey[], identifiers?: string[], timestamp?: Date): Promise<EncryptedVaultIndex> {\n return this.api.get<EncryptedVaultIndex>(`${this.baseURL}/v1/index`, {\n params: { index_keys: indexKeys, identifiers, timestamp },\n })\n }\n}\n","import { WorkflowData } from '../models/workflow'\nimport { APIService } from './api'\n\nexport class WorkflowService {\n private v1Url: string\n\n constructor(private api: APIService, url: string) {\n this.v1Url = `${url}/v1`\n }\n\n /**\n * This function returns all workflows\n * @returns desired workflow\n */\n public getWorkflows(): Promise<WorkflowData[]> {\n return this.api.get<WorkflowData[]>(`${this.v1Url}/workflows`)\n }\n\n /**\n * This function retrieves a workflow. If `locale` is not found, it will try to find 'en' version of it.\n * By default, will return most recent workflow of a specific `id`. `createdAt` can be used to select older version.\n * @param id The uuid of the workflow\n * @param locale (optional) The desired locale of the workflow (default: 'en')\n * @param createdAt (optional) The creation date of the workflow (also used for versionning)\n * @returns desired workflow\n */\n public getWorkflow(\n id: string,\n locale?: string,\n createdAt?: string\n ): Promise<WorkflowData> {\n return this.api.get<WorkflowData>(`${this.v1Url}/workflows/${id}`, {\n params: { locale, createdAt },\n })\n }\n}\n","import { ServiceCollection, ServiceCollectionRequest } from '../models'\nimport {\n APIService,\n ConsultService,\n DiagnosisService,\n GuardService,\n PracticeService,\n SearchService,\n TellerService,\n VaultService,\n WorkflowService,\n} from '../services'\n\n/**\n * This function is used to initialize services with a provided url\n * @param services an object containing the url of the services to init\n * @param authenticationCallback (optional) the authentification callback. Called when the token were not able to be refreshed.\n * @param useLocalStorage (default: true) if true store tokens into local storage (only for browsers)\n * @returns an instance of each services with a provided url\n */\nexport const init = (\n services: ServiceCollectionRequest,\n authenticationCallback?: (err: Error, practiceUuid?: string) => void,\n useLocalStorage = true\n): ServiceCollection => {\n const {\n tellerBaseURL,\n practiceBaseURL,\n consultBaseURL,\n vaultBaseURL,\n guardBaseURL,\n searchBaseURL,\n workflowBaseURL,\n diagnosisBaseURL,\n } = services\n\n const apiService = new APIService(useLocalStorage, undefined, authenticationCallback)\n\n return {\n apiService,\n tellerService: tellerBaseURL ? new TellerService(apiService, tellerBaseURL) : undefined,\n practiceService: practiceBaseURL ? new PracticeService(apiService, practiceBaseURL) : undefined,\n consultService: consultBaseURL ? new ConsultService(apiService, consultBaseURL) : undefined,\n vaultService: vaultBaseURL ? new VaultService(apiService, vaultBaseURL) : undefined,\n guardService: guardBaseURL ? new GuardService(apiService, guardBaseURL) : undefined,\n searchService: searchBaseURL ? new SearchService(apiService, searchBaseURL) : undefined,\n workflowService: workflowBaseURL ? new WorkflowService(apiService, workflowBaseURL) : undefined,\n diagnosisService: diagnosisBaseURL ? new DiagnosisService(apiService, diagnosisBaseURL) : undefined,\n }\n}\n"],"names":["hashToBase64String","value","Buffer","from","sha256","update","digest","toString","AssistantType","TransmissionKind","TransmissionStatus","ConsultType","FeeStatus","MedicalStatus","TaskStatus","ClosedReasonType","VisibilityType","DrugType","PrescriptionStatus","PlanStatus","AxiosService","config","this","axios","create","_proto","prototype","apiRequest","_apiRequest","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","data","wrap","_context","prev","next","headers","abrupt","_extends","then","res","stop","_x","_x2","_x3","apply","arguments","apiRequestHeader","_apiRequestHeader","_callee2","headerToRetrieve","_context2","_res$headers$headerTo","toLowerCase","_x4","_x5","_x6","_x7","get","method","deleteRequest","post","put","patch","head","APIService","_AxiosService","useLocalStorage","tokenRefreshFailureCallback","_this","call","self","_assertThisInitialized","sessionId","uuidv4","interceptors","request","use","token","useRefreshToken","getTokens","refreshToken","accessToken","Authorization","X-Session-Id","X-Request-Id","error","Promise","reject","createAuthRefreshInterceptor","_ref","failedRequest","tokenResp","authRefreshFn","setTokens","sent","response","resolve","t0","console","statusCodes","_inheritsLoose","setAuthRefreshFn","fn","tokens","localStorage","setItem","JSON","stringify","item","getItem","parse","ApisPracticeManager","serviceCollReq","getAuthTokenCbk","Map","newPracticeInstance","init","undefined","practiceInstances","set","_get","practiceUuid","cacheKey","practiceInstance","apiService","authTokenFunc","_authTokenFunc","practiceUuidOrInstanceName","guardService","log","Error","WorkflowType","RateDimension","PlanType","PaymentStatus","PractitionerStatus","AssignmentStatus","PractitionnerRoleType","OtherRoleType","LicenseStatus","PeriodType","SyncStatus","PracticeEmailKind","PracticeConfigKind","StripePriceType","PaymentIntentRequestMetadataKind","IndexKey","DocumentType","InputApplyFunctions","MetadataCategory","IndexKind","AuthenticationFailed","_Error","_wrapNativeSuper","AuthenticationBadRequest","_Error2","AuthenticationServerError","_Error3","AuthenticationUnconfirmedEmail","_Error4","IdentityCreationFailed","_Error5","IdentityCreationBadRequest","_Error6","IdentityCreationConflict","_Error7","VaultDataMissing","_Error8","ConsultService","api","baseURL","consultCreate","c","countConsults","uuidPractice","uuidRequester","statusesMedical","statusesExclude","shortId","columnToSortTo","orderToSortTo","perPage","indexPage","filterAssignedDoctor","filterCurrentPractitioner","filterIsoLocality","filterAssignee","typesConsult","uuidParent","params","page","sortColumns","orderColumns","resContentRange","parseInt","getConsults","getConsultByUUID","uuidConsult","getConsultByPracticePaymentID","idPracticePayment","updateConsultByUUID","consult","getConsultFaxStatuses","kind","Fax","postConsultTransmission","nameDriver","addressOrPhoneToSendTo","file","nameReceiver","txtTransmissionTitle","txtTransmissionNotes","uuidPatient","FormData","append","Content-Type","postConsultFax","addressReceiver","postConsultEmail","retryConsultFax","transmissionId","status","Retrying","updateConsultTransmissionStatus","newStatus","DiagnosisService","getDiagnoses","getDiagnosisByUuid","uuidDiagnosis","createDiagnosis","diagnosis","updateDiagnosis","uuid","getTreatmentByUuid","uuidTreatment","getTreatmentsFromDiagnosisUuid","diagnosisUuid","getTreatmentPlansFromConsultUuid","createTreatment","treatmentRequest","getTreatmentPlansPopulatedFromConsultUuid","populated","postPlans","plans","updateTreatmentPlan","uuidPlan","diagnosisRequest","plan","refill","setAssociatedConsultsToTreatment","treatmentUuid","arrAssociatedConsults","updateAssociatedConsultsToTreatment","getAssociatedConsultsOfTreatment","acceptTreatmentPlan","getAllDrugs","_getAllDrugs","foundDrugs","GuardService","authRefresh","bind","identityCache","whoAmICache","m2mToken","_m2mToken","req","resp","_e$response","code","skipAuthRefresh","isAxiosError","t1","authToken","_authToken","_e$response2","_authRefresh","_callee3","_context3","authLogout","_authLogout","_callee4","_context4","authRecover","_authRecover","_callee5","_context5","identityCreate","_identityCreate","_callee6","_e$response3","_context6","identityGet","_identityGet","_callee7","identityID","skipCache","_tokens$accessToken","_tokens$refreshToken","identity","_context7","whoAmI","_whoAmI","_callee8","refreshCache","_this$api$getTokens$a","_context8","_x8","identityUpdate","_identityUpdate","_callee9","_context9","_x9","_x10","identityMFAQRCode","_identityMFAQRCode","_callee10","password","_context10","Accept","_x11","_x12","identitySendConfirmEmail","_identitySendConfirmEmail","_callee11","_context11","_x13","authConfirmPhishingAttempts","_authConfirmPhishingAttempts","_callee12","attemptUuid","_context12","_x14","identityGetByCustomerEmail","_identityGetByCustomerEmail","_callee13","email","_context13","identityGetByHash","substring","indexOf","_x15","_identityGetByHash","_callee14","b64Hash","_context14","replace","_x16","SearchService","index","consultUUID","terms","search","PracticeService","practiceGetAll","practiceGetFromURL","practiceURL","url_practice","practiceGetFromUuid","locale","withAccounts","accounts","practiceConfigGetFromPracticeUuid","practiceConfigGetByKindForPracticeUuid","practiceConfigCreateForPracticeUuid","practiceConfigUpdate","practiceGetAccounts","practiceGetAccount","accountUuid","practiceGetWorkflows","practiceGetWorkflow","workflowType","practiceGetPlans","planType","practiceGetPlan","planId","practiceGetPlanPrices","practiceGetPayments","statusPayment","withConsultUUIDNULL","practiceGetPayment","idStripeInvoiceOrPaymentIntent","practiceGetPaymentForStripePaymentIntentWithID","stripePaymentIntentId","practiceGetPaymentsIntents","getPaymentIntentHashedEmail","practiceCreatePaymentsIntent","userEmail","isoLocality","url_subdomain","requestMetadata","idPlan","hashUserEmail","practiceGetPaymentsIntent","paymentIntentId","practiceUpdatePaymentsIntent","idPraticePaymentIntent","practicePaymentIntent","promotionCode","finalize","getInvoice","invoiceId","practiceGetPractitioners","practiceUpdatePractitioner","practitionerUuid","requestBody","practiceGetPractitioner","practiceGetPractitionerLicenses","practiceCreatePractitionerLicense","practiceUpdatePractitionerLicense","licenseId","practiceGetPractitionerLicense","practiceGetPractitionerPreferences","practiceCreatePractitionerPreference","practiceUpdatePractitionerPreference","preferenceId","practiceGetPractitionerPreference","practiceGetPractitionerRoles","practiceCreatePractitionerRole","practiceDeletePractitionerRoles","practiceUpdatePractitionerRole","roleId","practiceGetPractitionerRole","practiceDeletePractitionerRole","practiceGetPractitionerSignature","responseType","practiceGetAssignments","practiceCreateAssignment","practiceUpdateAssignment","assignmentId","practiceGetAssignment","practiceGetQuotas","practiceGetQuota","quotaId","TellerService","lockboxDataStore","_lockboxDataStore","lockboxUuid","lockboxOwnerUuid","previousDataUuid","options","updateMedicalStatus","lockbox_owner_uuid","data_uuid","update_medical_status","patientUuid","statusMedical","closedReasonType","closedReasonDescription","neverExpires","notifyFaxFailed","consultationUuid","consultationShortId","fax","practice_uuid","reassignmentEmail","newPractitionerUuid","sendOnlineFaxSuccessfulEmail","sendRefillFaxSucceededEmail","sendResumeConsultEmail","VaultService","lockboxCreate","_lockboxCreate","lockboxMetadata","lockboxMetadataAdd","_lockboxMetadataAdd","lockboxSecretGet","_lockboxSecretGet","lockboxGrant","_lockboxGrant","grantsGet","_grantsGet","lockboxDataGet","_lockboxDataGet","dataUuid","stream","_x17","lockboxManifestGet","_lockboxManifestGet","filter","_x18","_x19","_x20","lockboxMetadataGet","_lockboxMetadataGet","fields","groupby","_x21","_x22","_x23","_x24","_x25","vaultIndexPut","_vaultIndexPut","entries","indexOwnerUuid","index_owner_uuid","_x26","_x27","vaultIndexSnapshotPut","_vaultIndexSnapshotPut","entry","_x28","vaultIndexGet","_vaultIndexGet","indexKeys","identifiers","timestamp","index_keys","_x29","_x30","_x31","WorkflowService","v1Url","getWorkflows","getWorkflow","id","createdAt","services","authenticationCallback","tellerBaseURL","practiceBaseURL","consultBaseURL","vaultBaseURL","guardBaseURL","searchBaseURL","workflowBaseURL","diagnosisBaseURL","tellerService","practiceService","consultService","vaultService","searchService","workflowService","diagnosisService"],"mappings":"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"}