oro-sdk-apis 1.41.0 → 1.44.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"oro-sdk-apis.cjs.production.min.js","sources":["../src/helpers/hash.ts","../src/models/consult.ts","../src/models/diagnosis.ts","../node_modules/regenerator-runtime/runtime.js","../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 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 New = 'New',\n ToAnswer = 'ToAnswer',\n Answered = 'Answered',\n Closed = 'Closed',\n Reopened = 'Reopened',\n Archived = 'Archived',\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 tagSpecialtyRequired: string\n idStripeInvoiceOrPaymentIntent: string\n isoLocalityRequired?: string\n isoLanguageRequired: 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 uuidAssignedDoctor: string\n uuidCurrentAssigned: 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\nexport interface TreatmentRequest {\n uuid?: string\n uuidDiagnosis?: string\n name: string\n description: 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}\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}\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 treatment?: Treatment\n prescriptionsAndDrugs?: DrugPrescription[]\n notes?: string\n status: PlanStatus\n uuidTreatmentPlan: string\n decidedAt: string\n createdAt: string\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 notes?: string\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 notes?: string\n}\n\nexport interface TreatmentPlanUpdateRequest extends TreatmentPlansRequest {\n uuidConsult: string\n diagnosis: DiagnosisRequest\n plan: TreatmentAndDrugPrescriptionUpdateRequest\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 * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","import 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'\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\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 }\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 practiceInstance = this.practiceInstances.get(practiceUuid)\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(practiceUuid, 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}\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 PracticeCloseConsultationTypes = 'PracticeCloseConsultationTypes',\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}\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\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>\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\nexport type PracticeConfigPractitionerSearch = PracticeConfig<\n PracticeConfigKind.PractitionerSearch,\n {\n disableIndexing?: boolean,\n disableSearch?: 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\nexport interface PracticeWorkflow {\n id?: number ///optional for insertion\n uuidPractice: string\n uuidWorkflow: string\n typeWorkflow: WorkflowType\n tagSpecialty?: 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}\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 * 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 tagSpecialtyRequired: string\n isoLocalityRequired?: string\n isoLanguageRequired: string\n}\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.PracticeCloseConsultationTypes]?: PracticeConfigPracticeCloseConsultationTypes\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}\n\nexport interface Practice {\n uuid: string\n name: 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 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}","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 EntryData {\n id?: number\n label?: string\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.\n */\n triggers?: 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}\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 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}\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<'checkbox-group' | 'select' | 'multiple' | 'text-select-group', IndexedData<ChoiceInputData>>\n | GroupedGenericQuestionData<'radio', IndexedData<RadioInputData>>\n | GroupedGenericQuestionData<'radio-card' | 'profile-selector', IndexedData<RadioCardInputData>>\n | GroupedGenericQuestionData<'language-picker', IndexedData<LanguagePickerData>>\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 walkthroughSlides?: SlideData[]\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}","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} 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 ): 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 },\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 ): 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 },\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 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 // numTry ?: number,\n // delay ?: number,\n ): Promise<ConsultTransmission> {\n let data = new FormData()\n\n data.append('nameDriverReceiver', nameDriver)\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(uuidConsult: string, addressReceiver: string, file: File): Promise<ConsultTransmission> {\n return this.postConsultTransmission(uuidConsult, 'Documo', addressReceiver, file)\n }\n\n public postConsultEmail(uuidConsult: string, file: File): Promise<ConsultTransmission> {\n return this.postConsultTransmission(uuidConsult, 'Pharmacierge', undefined, file)\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 Drug,\n TreatmentPlan,\n TreatmentPlans,\n TreatmentPlansRequest,\n TreatmentPlansResponse,\n Uuid,\n} from '..'\nimport { Diagnosis, Treatment, DiagnosisRequest, TreatmentAndDrugPrescriptionUpdateRequest, TreatmentRequest } 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>(\n `${this.baseURL}/v1/diagnoses/${uuidDiagnosis}`\n )\n }\n\n public createDiagnosis(diagnosis: DiagnosisRequest): Promise<Diagnosis> {\n return this.api.post<Diagnosis>(\n `${this.baseURL}/v1/diagnoses`,\n diagnosis\n )\n }\n\n public updateDiagnosis(\n uuid: string,\n diagnosis: DiagnosisRequest\n ): Promise<Diagnosis> {\n return this.api.put<Diagnosis>(\n `${this.baseURL}/v1/diagnoses/${uuid}`,\n diagnosis\n )\n }\n\n public getTreatmentsFromDiagnosisUuid(\n diagnosisUuid: Uuid\n ): Promise<Treatment[]> {\n return this.api.get<Treatment[]>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments`\n )\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(\n uuidConsult: Uuid\n ): Promise<TreatmentPlan[]> {\n return this.api.get<TreatmentPlan[]>(\n `${this.baseURL}/v1/treatment-plans/`,\n { params: { uuidConsult } }\n )\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>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments`,\n treatmentRequest\n )\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(\n uuidConsult: Uuid\n ): Promise<TreatmentPlans> {\n return this.api.get<TreatmentPlans>(\n `${this.baseURL}/v1/treatment-plans/`,\n { params: { uuidConsult, populated: true } }\n )\n }\n\n public postPlans(\n plans: TreatmentPlansRequest\n ): Promise<TreatmentPlansResponse> {\n return this.api.post<TreatmentPlansResponse>(\n `${this.baseURL}/v1/treatment-plans`,\n plans\n )\n }\n\n public updateTreatmentPlan(\n uuidPlan: string,\n uuidConsult: string,\n diagnosisRequest: DiagnosisRequest,\n plan: TreatmentAndDrugPrescriptionUpdateRequest\n ): Promise<TreatmentPlan> {\n return this.api.put<TreatmentPlan>(\n `${this.baseURL}/v1/treatment-plans/${uuidPlan}`,\n {\n uuidConsult,\n diagnosis: diagnosisRequest,\n plan\n }\n )\n }\n\n public acceptTreatmentPlan(\n uuidPlan: string,\n uuidConsult: string\n ): Promise<TreatmentPlan> {\n return this.api.put<TreatmentPlan>(\n `${this.baseURL}/v1/treatment-plans/${uuidPlan}/accept`,\n { uuidConsult }\n )\n }\n\n /**\n * retrieves all the drugs of the specified practice\n * @param uuidPractice\n */\n public async getAllDrugs(\n uuidPractice: string\n ): Promise<Drug[] | undefined> {\n const res = await this.api.get<{foundDrugs: Drug[]}>(\n `${this.baseURL}/v1/drugs/practice/${uuidPractice}`,\n )\n if(res && res.foundDrugs)\n 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('+', '-').replace('/', '_'))\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 { ConsultRequestMetadata, PracticeAccount, Uuid } from '../models'\nimport {\n Assignment,\n AssignmentRequest,\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 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 /// Workflows\n public practiceGetWorkflows(practiceUuid: Uuid): Promise<PracticeWorkflow[]> {\n return this.api.get<PracticeWorkflow[]>(`${this.baseURL}/v1/practices/${practiceUuid}/workflows`)\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(practiceUuid: Uuid, planType?: PlanType): Promise<PracticePayment[]> {\n return this.api.get<PracticePayment[]>(`${this.baseURL}/v1/practices/${practiceUuid}/payments`, {\n params: { kind: planType },\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 consultRequest (optional) consult request to use. If defined, when payment service call our hooks in practice, it will try to create a consult with these infos.\n * @returns\n */\n public practiceCreatePaymentsIntent(\n practiceUuid: Uuid,\n planId: number,\n userEmail: string,\n isoLocality?: string,\n url_subdomain?: string,\n consultRequest?: ConsultRequestMetadata\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 consultRequest,\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 ): 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 },\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 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","FeeStatus","MedicalStatus","TaskStatus","ClosedReasonType","VisibilityType","DrugType","PrescriptionStatus","PlanStatus","runtime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","key","defineProperty","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","generator","create","Generator","context","Context","_invoke","state","method","arg","Error","undefined","done","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","makeInvokeMethod","fn","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","reject","invoke","result","__await","then","unwrapped","error","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","doneResult","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","globalThis","Function","AxiosService","config","axios","apiRequest","url","data","headers","res","apiRequestHeader","headerToRetrieve","toLowerCase","get","deleteRequest","post","put","patch","head","APIService","useLocalStorage","tokenRefreshFailureCallback","interceptors","request","use","token","useRefreshToken","getTokens","refreshToken","accessToken","Authorization","createAuthRefreshInterceptor","_this","failedRequest","authRefreshFn","setTokens","tokenResp","response","console","statusCodes","setAuthRefreshFn","tokens","localStorage","setItem","JSON","stringify","item","getItem","parse","ApisPracticeManager","serviceCollReq","getAuthTokenCbk","Map","practiceUuid","practiceInstance","practiceInstances","newPracticeInstance","init","authTokenFunc","guardService","log","apiService","set","WorkflowType","RateDimension","PlanType","PaymentStatus","PractitionerStatus","AssignmentStatus","PractitionnerRoleType","OtherRoleType","LicenseStatus","PeriodType","SyncStatus","PracticeEmailKind","PracticeConfigKind","StripePriceType","IndexKey","DocumentType","MetadataCategory","IndexKind","AuthenticationFailed","AuthenticationBadRequest","AuthenticationServerError","AuthenticationUnconfirmedEmail","IdentityCreationFailed","IdentityCreationBadRequest","IdentityCreationConflict","VaultDataMissing","ConsultService","api","baseURL","consultCreate","c","countConsults","uuidPractice","uuidRequester","statusesMedical","statusesExclude","shortId","columnToSortTo","orderToSortTo","perPage","indexPage","filterAssignedDoctor","filterCurrentPractitioner","filterIsoLocality","filterAssignee","params","page","sortColumns","orderColumns","resContentRange","parseInt","getConsults","getConsultByUUID","uuidConsult","updateConsultByUUID","consult","getConsultFaxStatuses","kind","Fax","postConsultTransmission","nameDriver","addressOrPhoneToSendTo","file","nameReceiver","txtTransmissionTitle","txtTransmissionNotes","FormData","append","postConsultFax","addressReceiver","postConsultEmail","retryConsultFax","transmissionId","status","Retrying","updateConsultTransmissionStatus","newStatus","DiagnosisService","getDiagnoses","getDiagnosisByUuid","uuidDiagnosis","createDiagnosis","diagnosis","updateDiagnosis","uuid","getTreatmentsFromDiagnosisUuid","diagnosisUuid","getTreatmentPlansFromConsultUuid","createTreatment","treatmentRequest","getTreatmentPlansPopulatedFromConsultUuid","populated","postPlans","plans","updateTreatmentPlan","uuidPlan","diagnosisRequest","plan","acceptTreatmentPlan","getAllDrugs","foundDrugs","GuardService","authRefresh","bind","identityCache","whoAmICache","m2mToken","req","skipAuthRefresh","resp","_context","isAxiosError","code","_e$response","authToken","_context2","_e$response2","authLogout","authRecover","identityCreate","_context6","_e$response3","identityGet","identityID","skipCache","cacheKey","identity","whoAmI","refreshCache","identityUpdate","identityMFAQRCode","password","Accept","identitySendConfirmEmail","identityGetByCustomerEmail","email","identityGetByHash","substring","indexOf","b64Hash","replace","SearchService","index","consultUUID","terms","search","PracticeService","practiceGetFromURL","practiceURL","url_practice","practiceGetFromUuid","locale","withAccounts","accounts","practiceConfigGetFromPracticeUuid","practiceConfigGetByKindForPracticeUuid","practiceConfigCreateForPracticeUuid","practiceConfigUpdate","practiceGetAccounts","practiceGetAccount","accountUuid","practiceGetWorkflows","practiceGetWorkflow","workflowType","practiceGetPlans","planType","practiceGetPlan","planId","practiceGetPlanPrices","practiceGetPayments","practiceGetPayment","idStripeInvoiceOrPaymentIntent","practiceGetPaymentForStripePaymentIntentWithID","stripePaymentIntentId","practiceGetPaymentsIntents","getPaymentIntentHashedEmail","practiceCreatePaymentsIntent","userEmail","isoLocality","url_subdomain","consultRequest","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","lockboxUuid","lockboxOwnerUuid","previousDataUuid","lockbox_owner_uuid","data_uuid","patientUuid","statusMedical","closedReasonType","closedReasonDescription","neverExpires","notifyFaxFailed","consultationUuid","consultationShortId","fax","practice_uuid","reassignmentEmail","newPractitionerUuid","sendOnlineFaxSuccessfulEmail","sendResumeConsultEmail","VaultService","lockboxCreate","lockboxMetadata","lockboxMetadataAdd","lockboxSecretGet","lockboxGrant","grantsGet","lockboxDataGet","dataUuid","stream","lockboxManifestGet","filter","lockboxMetadataGet","fields","groupby","vaultIndexPut","entries","indexOwnerUuid","index_owner_uuid","vaultIndexSnapshotPut","vaultIndexGet","indexKeys","identifiers","timestamp","index_keys","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 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 New = 'New',\n ToAnswer = 'ToAnswer',\n Answered = 'Answered',\n Closed = 'Closed',\n Reopened = 'Reopened',\n Archived = 'Archived',\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 tagSpecialtyRequired: string\n idStripeInvoiceOrPaymentIntent: string\n isoLocalityRequired?: string\n isoLanguageRequired: 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 uuidAssignedDoctor: string\n uuidCurrentAssigned: 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\nexport interface TreatmentRequest {\n uuid?: string\n uuidDiagnosis?: string\n name: string\n description: 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}\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}\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 treatment?: Treatment\n prescriptionsAndDrugs?: DrugPrescription[]\n notes?: string\n status: PlanStatus\n uuidTreatmentPlan: string\n decidedAt: string\n createdAt: string\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 notes?: string\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 notes?: string\n}\n\nexport interface TreatmentPlanUpdateRequest extends TreatmentPlansRequest {\n uuidConsult: string\n diagnosis: DiagnosisRequest\n plan: TreatmentAndDrugPrescriptionUpdateRequest\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> {}","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'\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\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 }\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 practiceInstance = this.practiceInstances.get(practiceUuid)\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(practiceUuid, 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}\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 PracticeCloseConsultationTypes = 'PracticeCloseConsultationTypes',\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}\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\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>\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\nexport type PracticeConfigPractitionerSearch = PracticeConfig<\n PracticeConfigKind.PractitionerSearch,\n {\n disableIndexing?: boolean\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\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\nexport interface PracticeWorkflow {\n id?: number ///optional for insertion\n uuidPractice: string\n uuidWorkflow: string\n typeWorkflow: WorkflowType\n tagSpecialty?: 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}\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 * 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 tagSpecialtyRequired: string\n isoLocalityRequired?: string\n isoLanguageRequired: string\n}\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.PracticeCloseConsultationTypes]?: PracticeConfigPracticeCloseConsultationTypes\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]?: PracticeConfigPractitionerSearch\n}\n\nexport interface Practice {\n uuid: string\n name: 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 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 EntryData {\n id?: number\n label?: string\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.\n */\n triggers?: 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 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}\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<'checkbox-group' | 'hair-loss-frontal' | 'select' | 'multiple' | 'text-select-group', IndexedData<ChoiceInputData>>\n | GroupedGenericQuestionData<'radio'\n | 'hair-selector-women'\n | 'hair-selector-men'\n | 'hair-loss-stage', \n IndexedData<RadioInputData>>\n | GroupedGenericQuestionData<'radio-card' | 'profile-selector', IndexedData<RadioCardInputData>>\n | GroupedGenericQuestionData<'language-picker', IndexedData<LanguagePickerData>>\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 walkthroughSlides?: SlideData[]\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}","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} 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 ): 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 },\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 ): 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 },\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 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 // numTry ?: number,\n // delay ?: number,\n ): Promise<ConsultTransmission> {\n let data = new FormData()\n\n data.append('nameDriverReceiver', nameDriver)\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(uuidConsult: string, addressReceiver: string, file: File): Promise<ConsultTransmission> {\n return this.postConsultTransmission(uuidConsult, 'Documo', addressReceiver, file)\n }\n\n public postConsultEmail(uuidConsult: string, file: File): Promise<ConsultTransmission> {\n return this.postConsultTransmission(uuidConsult, 'Pharmacierge', undefined, file)\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 Drug,\n TreatmentPlan,\n TreatmentPlans,\n TreatmentPlansRequest,\n TreatmentPlansResponse,\n Uuid,\n} from '..'\nimport { Diagnosis, Treatment, DiagnosisRequest, TreatmentAndDrugPrescriptionUpdateRequest, TreatmentRequest } 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>(\n `${this.baseURL}/v1/diagnoses/${uuidDiagnosis}`\n )\n }\n\n public createDiagnosis(diagnosis: DiagnosisRequest): Promise<Diagnosis> {\n return this.api.post<Diagnosis>(\n `${this.baseURL}/v1/diagnoses`,\n diagnosis\n )\n }\n\n public updateDiagnosis(\n uuid: string,\n diagnosis: DiagnosisRequest\n ): Promise<Diagnosis> {\n return this.api.put<Diagnosis>(\n `${this.baseURL}/v1/diagnoses/${uuid}`,\n diagnosis\n )\n }\n\n public getTreatmentsFromDiagnosisUuid(\n diagnosisUuid: Uuid\n ): Promise<Treatment[]> {\n return this.api.get<Treatment[]>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments`\n )\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(\n uuidConsult: Uuid\n ): Promise<TreatmentPlan[]> {\n return this.api.get<TreatmentPlan[]>(\n `${this.baseURL}/v1/treatment-plans/`,\n { params: { uuidConsult } }\n )\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>(\n `${this.baseURL}/v1/diagnoses/${diagnosisUuid}/treatments`,\n treatmentRequest\n )\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(\n uuidConsult: Uuid\n ): Promise<TreatmentPlans> {\n return this.api.get<TreatmentPlans>(\n `${this.baseURL}/v1/treatment-plans/`,\n { params: { uuidConsult, populated: true } }\n )\n }\n\n public postPlans(\n plans: TreatmentPlansRequest\n ): Promise<TreatmentPlansResponse> {\n return this.api.post<TreatmentPlansResponse>(\n `${this.baseURL}/v1/treatment-plans`,\n plans\n )\n }\n\n public updateTreatmentPlan(\n uuidPlan: string,\n uuidConsult: string,\n diagnosisRequest: DiagnosisRequest,\n plan: TreatmentAndDrugPrescriptionUpdateRequest\n ): Promise<TreatmentPlan> {\n return this.api.put<TreatmentPlan>(\n `${this.baseURL}/v1/treatment-plans/${uuidPlan}`,\n {\n uuidConsult,\n diagnosis: diagnosisRequest,\n plan\n }\n )\n }\n\n public acceptTreatmentPlan(\n uuidPlan: string,\n uuidConsult: string\n ): Promise<TreatmentPlan> {\n return this.api.put<TreatmentPlan>(\n `${this.baseURL}/v1/treatment-plans/${uuidPlan}/accept`,\n { uuidConsult }\n )\n }\n\n /**\n * retrieves all the drugs of the specified practice\n * @param uuidPractice\n */\n public async getAllDrugs(\n uuidPractice: string\n ): Promise<Drug[] | undefined> {\n const res = await this.api.get<{foundDrugs: Drug[]}>(\n `${this.baseURL}/v1/drugs/practice/${uuidPractice}`,\n )\n if(res && res.foundDrugs)\n 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('+', '-').replace('/', '_'))\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 { ConsultRequestMetadata, PracticeAccount, Uuid } from '../models'\nimport {\n Assignment,\n AssignmentRequest,\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 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(practiceUuid: Uuid, planType?: PlanType): Promise<PracticePayment[]> {\n return this.api.get<PracticePayment[]>(`${this.baseURL}/v1/practices/${practiceUuid}/payments`, {\n params: { kind: planType },\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 consultRequest (optional) consult request to use. If defined, when payment service call our hooks in practice, it will try to create a consult with these infos.\n * @returns\n */\n public practiceCreatePaymentsIntent(\n practiceUuid: Uuid,\n planId: number,\n userEmail: string,\n isoLocality?: string,\n url_subdomain?: string,\n consultRequest?: ConsultRequestMetadata\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 consultRequest,\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 ): 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 },\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 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","FeeStatus","MedicalStatus","TaskStatus","ClosedReasonType","VisibilityType","DrugType","PrescriptionStatus","PlanStatus","AxiosService","config","this","axios","create","_proto","apiRequest","url","data","headers","then","res","apiRequestHeader","headerToRetrieve","toLowerCase","get","method","deleteRequest","post","put","patch","head","APIService","useLocalStorage","tokenRefreshFailureCallback","_this","self","interceptors","request","use","token","useRefreshToken","getTokens","refreshToken","accessToken","Authorization","error","Promise","reject","createAuthRefreshInterceptor","failedRequest","authRefreshFn","_context","setTokens","tokenResp","response","resolve","console","statusCodes","_inheritsLoose","setAuthRefreshFn","fn","tokens","localStorage","setItem","JSON","stringify","item","getItem","parse","ApisPracticeManager","serviceCollReq","getAuthTokenCbk","Map","practiceUuid","practiceInstance","practiceInstances","_context2","newPracticeInstance","init","undefined","authTokenFunc","guardService","log","Error","apiService","set","WorkflowType","RateDimension","PlanType","PaymentStatus","PractitionerStatus","AssignmentStatus","PractitionnerRoleType","OtherRoleType","LicenseStatus","PeriodType","SyncStatus","PracticeEmailKind","PracticeConfigKind","StripePriceType","IndexKey","DocumentType","MetadataCategory","IndexKind","AuthenticationFailed","AuthenticationBadRequest","AuthenticationServerError","AuthenticationUnconfirmedEmail","IdentityCreationFailed","IdentityCreationBadRequest","IdentityCreationConflict","VaultDataMissing","ConsultService","api","baseURL","consultCreate","c","countConsults","uuidPractice","uuidRequester","statusesMedical","statusesExclude","shortId","columnToSortTo","orderToSortTo","perPage","indexPage","filterAssignedDoctor","filterCurrentPractitioner","filterIsoLocality","filterAssignee","params","page","sortColumns","orderColumns","resContentRange","parseInt","getConsults","getConsultByUUID","uuidConsult","updateConsultByUUID","consult","getConsultFaxStatuses","kind","Fax","postConsultTransmission","nameDriver","addressOrPhoneToSendTo","file","nameReceiver","txtTransmissionTitle","txtTransmissionNotes","FormData","append","Content-Type","postConsultFax","addressReceiver","postConsultEmail","retryConsultFax","transmissionId","status","Retrying","updateConsultTransmissionStatus","newStatus","DiagnosisService","getDiagnoses","getDiagnosisByUuid","uuidDiagnosis","createDiagnosis","diagnosis","updateDiagnosis","uuid","getTreatmentsFromDiagnosisUuid","diagnosisUuid","getTreatmentPlansFromConsultUuid","createTreatment","treatmentRequest","getTreatmentPlansPopulatedFromConsultUuid","populated","postPlans","plans","updateTreatmentPlan","uuidPlan","diagnosisRequest","plan","acceptTreatmentPlan","getAllDrugs","foundDrugs","GuardService","authRefresh","bind","identityCache","whoAmICache","m2mToken","req","skipAuthRefresh","resp","isAxiosError","code","_e$response","authToken","_e$response2","authLogout","authRecover","identityCreate","_context6","_e$response3","identityGet","identityID","skipCache","cacheKey","_context7","identity","whoAmI","refreshCache","_context8","identityUpdate","identityMFAQRCode","password","Accept","identitySendConfirmEmail","identityGetByCustomerEmail","email","identityGetByHash","substring","indexOf","b64Hash","replace","SearchService","index","consultUUID","terms","search","PracticeService","practiceGetFromURL","practiceURL","url_practice","practiceGetFromUuid","locale","withAccounts","accounts","practiceConfigGetFromPracticeUuid","practiceConfigGetByKindForPracticeUuid","practiceConfigCreateForPracticeUuid","practiceConfigUpdate","practiceGetAccounts","practiceGetAccount","accountUuid","practiceGetWorkflows","practiceGetWorkflow","workflowType","practiceGetPlans","planType","practiceGetPlan","planId","practiceGetPlanPrices","practiceGetPayments","practiceGetPayment","idStripeInvoiceOrPaymentIntent","practiceGetPaymentForStripePaymentIntentWithID","stripePaymentIntentId","practiceGetPaymentsIntents","getPaymentIntentHashedEmail","practiceCreatePaymentsIntent","userEmail","isoLocality","url_subdomain","consultRequest","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","lockboxUuid","lockboxOwnerUuid","previousDataUuid","lockbox_owner_uuid","data_uuid","patientUuid","statusMedical","closedReasonType","closedReasonDescription","neverExpires","notifyFaxFailed","consultationUuid","consultationShortId","fax","practice_uuid","reassignmentEmail","newPractitionerUuid","sendOnlineFaxSuccessfulEmail","sendResumeConsultEmail","VaultService","lockboxCreate","lockboxMetadata","lockboxMetadataAdd","lockboxSecretGet","lockboxGrant","grantsGet","lockboxDataGet","dataUuid","stream","lockboxManifestGet","filter","lockboxMetadataGet","fields","groupby","vaultIndexPut","entries","indexOwnerUuid","index_owner_uuid","vaultIndexSnapshotPut","entry","vaultIndexGet","indexKeys","identifiers","timestamp","index_keys","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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"}