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.esm.js","sources":["../src/helpers/hash.ts","../node_modules/regenerator-runtime/runtime.js","../src/services/axios.ts","../src/services/api.ts","../src/services/apisPracticeManager.ts","../src/models/consult.ts","../src/models/diagnosis.ts","../src/models/error.ts","../src/models/practice.ts","../src/models/vault.ts","../src/models/workflow.ts","../src/models/search.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","/**\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","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> {}","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 { 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","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","undefined","AxiosService","config","axios","create","apiRequest","url","data","headers","then","res","apiRequestHeader","headerToRetrieve","toLowerCase","get","method","deleteRequest","post","put","patch","head","APIService","useLocalStorage","tokenRefreshFailureCallback","self","interceptors","request","use","token","useRefreshToken","getTokens","refreshToken","accessToken","Authorization","error","Promise","reject","createAuthRefreshInterceptor","failedRequest","authRefreshFn","tokenResp","setTokens","response","resolve","console","statusCodes","setAuthRefreshFn","fn","tokens","localStorage","setItem","JSON","stringify","item","getItem","parse","ApisPracticeManager","serviceCollReq","getAuthTokenCbk","Map","practiceUuid","practiceInstance","practiceInstances","newPracticeInstance","init","authTokenFunc","guardService","log","Error","apiService","set","AssistantType","TransmissionKind","TransmissionStatus","FeeStatus","MedicalStatus","TaskStatus","ClosedReasonType","VisibilityType","DrugType","PrescriptionStatus","PlanStatus","AuthenticationFailed","AuthenticationBadRequest","AuthenticationServerError","AuthenticationUnconfirmedEmail","IdentityCreationFailed","IdentityCreationBadRequest","IdentityCreationConflict","VaultDataMissing","WorkflowType","RateDimension","PlanType","PaymentStatus","PractitionerStatus","AssignmentStatus","PractitionnerRoleType","OtherRoleType","LicenseStatus","PeriodType","SyncStatus","PracticeEmailKind","PracticeConfigKind","StripePriceType","IndexKey","DocumentType","MetadataCategory","IndexKind","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","isAxiosError","code","authToken","authLogout","authRecover","identityCreate","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","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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"}
1
+ {"version":3,"file":"oro-sdk-apis.esm.js","sources":["../src/helpers/hash.ts","../src/services/axios.ts","../src/services/api.ts","../src/services/apisPracticeManager.ts","../src/models/consult.ts","../src/models/diagnosis.ts","../src/models/error.ts","../src/models/practice.ts","../src/models/vault.ts","../src/models/workflow.ts","../src/models/search.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","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","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> {}","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 { 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","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","AxiosService","config","axios","create","apiRequest","url","data","headers","then","res","apiRequestHeader","headerToRetrieve","toLowerCase","get","method","deleteRequest","post","put","patch","head","APIService","useLocalStorage","tokenRefreshFailureCallback","self","interceptors","request","use","token","useRefreshToken","getTokens","refreshToken","accessToken","Authorization","error","Promise","reject","createAuthRefreshInterceptor","failedRequest","authRefreshFn","tokenResp","setTokens","response","resolve","console","statusCodes","setAuthRefreshFn","fn","tokens","localStorage","setItem","JSON","stringify","item","getItem","parse","ApisPracticeManager","serviceCollReq","getAuthTokenCbk","Map","practiceUuid","practiceInstance","practiceInstances","newPracticeInstance","init","undefined","authTokenFunc","guardService","log","Error","apiService","set","AssistantType","TransmissionKind","TransmissionStatus","FeeStatus","MedicalStatus","TaskStatus","ClosedReasonType","VisibilityType","DrugType","PrescriptionStatus","PlanStatus","AuthenticationFailed","AuthenticationBadRequest","AuthenticationServerError","AuthenticationUnconfirmedEmail","IdentityCreationFailed","IdentityCreationBadRequest","IdentityCreationConflict","VaultDataMissing","WorkflowType","RateDimension","PlanType","PaymentStatus","PractitionerStatus","AssignmentStatus","PractitionnerRoleType","OtherRoleType","LicenseStatus","PeriodType","SyncStatus","PracticeEmailKind","PracticeConfigKind","StripePriceType","IndexKey","DocumentType","MetadataCategory","IndexKind","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","isAxiosError","code","authToken","authLogout","authRecover","identityCreate","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","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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"}