oro-sdk 3.3.0 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"oro-sdk.cjs.development.js","sources":["../node_modules/regenerator-runtime/runtime.js","../src/helpers/client.ts","../src/models/error.ts","../src/helpers/workflow.ts","../src/helpers/patient-registration.ts","../src/helpers/vault-grants.ts","../src/sdk-revision/client.ts","../src/client.ts","../src/services/external/clinia.ts","../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","import {\n PopulatedWorkflowData,\n MetadataCategory,\n SelectedAnswersData,\n} from 'oro-sdk-apis'\nimport { PersonalInformations } from '../models/client'\n\nconst personalMetaToPrefix = {\n [MetadataCategory.Personal]: 'you',\n [MetadataCategory.ChildPersonal]: 'child',\n [MetadataCategory.OtherPersonal]: 'other',\n}\n\n/**\n * This function extract PersonalInformations from data input object coming from workflow\n * @param data extracted from WorkflowData\n * @returns PersonalInformations of a patient\n */\nexport function identificationToPersonalInformations(\n data: any,\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n): PersonalInformations {\n const prefix = personalMetaToPrefix[category]\n\n return {\n birthday: data[`${prefix}Birthday`],\n firstname: data[`${prefix}Firstname`],\n gender: data[`${prefix}Gender`],\n name: data[`${prefix}Name`],\n phone: data[`${prefix}Phone`],\n zip: data[`${prefix}Zip`],\n hid: data[`${prefix}HID`] ?? data[`${prefix}ID`], // This is done for backward compatibility (historically youID was used)\n pharmacy: data[`${prefix}Pharmacy`],\n address: data[`${prefix}Address`],\n }\n}\n\nexport function toActualObject(data: PopulatedWorkflowData) {\n const ret: any = {}\n\n Object.entries(data.fields).forEach(([key, field]) => {\n ret[key] = field.displayedAnswer ? field.displayedAnswer : field.answer\n })\n\n return ret\n}\n\n/**\n * This function update a PopulatedWorkflowData with PersonalInformations\n * @param infos the personal informations\n * @param data the PopulatedWorkflowData\n * @returns an updated PopulatedWorkflowData\n */\nexport function updatePersonalIntoPopulatedWorkflowData(\n infos: PersonalInformations,\n data: PopulatedWorkflowData,\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n) {\n const prefix = personalMetaToPrefix[category]\n\n const ret = JSON.parse(JSON.stringify(data)) // deep copy PopulatedWorkflowData\n\n if (infos.birthday && ret.fields[`${prefix}Birthday`])\n ret.fields[`${prefix}Birthday`].answer = infos.birthday\n if (infos.firstname && ret.fields[`${prefix}Firstname`])\n ret.fields[`${prefix}Firstname`].answer = infos.firstname\n if (infos.gender && ret.fields[`${prefix}Gender`])\n ret.fields[`${prefix}Gender`].answer = infos.gender\n if (infos.name && ret.fields[`${prefix}Name`])\n ret.fields[`${prefix}Name`].answer = infos.name\n if (infos.phone && ret.fields[`${prefix}Phone`])\n ret.fields[`${prefix}Phone`].answer = infos.phone\n if (infos.zip && ret.fields[`${prefix}Zip`])\n ret.fields[`${prefix}Zip`].answer = infos.zip\n if (infos.hid) {\n if (ret.fields[`${prefix}HID`]) {\n ret.fields[`${prefix}HID`].answer = infos.hid\n } else if (ret.fields[`${prefix}ID`]) {\n // This is done for backward compatibility (historically youID was used)\n ret.fields[`${prefix}ID`].answer = infos.hid\n } else {\n // If does not exist create it\n ret.fields[`${prefix}HID`] = { kind: 'text', answer: infos.hid }\n }\n }\n\n return ret\n}\n\n/**\n * This function extract an ISO 3166-1 alpha-2 country and subdivision code from data input object coming from workflow\n * @param answers answers from the WorkflowData\n * @returns an ISO 3166 alpha-2 code or undefined\n */\nexport function extractISOLocalityForConsult(\n answers?: SelectedAnswersData\n): string | undefined {\n if (!answers) {\n return undefined\n }\n\n const arrAnswersWithLocality = answers\n .flatMap((currentAnswerPage) => {\n const arrCountryFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Country') !== -1\n )\n .flat()\n const arrProvinceFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Province') !== -1\n )\n .flat()\n const arrConsultLocalFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Locality') !== -1\n )\n .flat()\n //returning the actual selected values, skipping if their IDs are more complex than a string\n return [\n ...arrCountryFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ...arrProvinceFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ...arrConsultLocalFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ]\n })\n .filter((item) => item !== undefined)\n\n const arrSelectedLocality = arrAnswersWithLocality.filter(\n (currentSelectedLocality) =>\n currentSelectedLocality.startsWith('isoLocalityConsult')\n )\n if (!arrSelectedLocality || arrSelectedLocality.length === 0) {\n console.log('no locality found in ' + arrSelectedLocality)\n return undefined\n }\n //to allow enforcing of an order, we will allow the following pattern in the isoLocalityConsult field name\n // isoLocalityConsult-QC-CA and isoLocalityConsult_1-QC-CA\n // or generally: isoLocalityConsult-<isoValue> or isoLocalityConsult_<priority>-<isoValue>\n const allowedLocalityPatterns = /isoLocalityConsult(?:_(?<indexPriority>\\d*))?-(?<isoValue>[a-zA-Z0-9]{2}-[a-zA-Z0-9]{1,3})/\n const finalLocality = arrSelectedLocality.reduce<string | undefined>(\n (finalLocality, currentSelectedLocality) => {\n const extractedSelected = allowedLocalityPatterns.exec(\n currentSelectedLocality\n )\n const [, indexSelectedPriority, isoSelectedValue] =\n extractedSelected ?? []\n if (!finalLocality) {\n return isoSelectedValue\n }\n\n const extractedFinal = allowedLocalityPatterns.exec(finalLocality)\n const [, indexFinalPriority, isoFinalValue] = extractedFinal ?? []\n //we only keep the old value if there's priority used\n // and the new value is of lower priority\n if (\n !indexSelectedPriority ||\n (indexFinalPriority &&\n indexFinalPriority > indexSelectedPriority)\n ) {\n return isoFinalValue\n }\n\n return isoSelectedValue\n },\n undefined\n )\n\n console.log('Picking locality ' + finalLocality)\n return finalLocality\n}\n\nconst sessionPrivateKeyPrefix = 'sess-pkey'\nexport function sessionStorePrivateKeyName(id: string): string {\n return sessionPrivateKeyPrefix + id\n}\n","export class IncompleteAuthentication extends Error {}\nexport class MissingGrant extends Error {}\nexport class MissingLockbox extends Error {}\nexport class MissingLockboxOwner extends Error {}\nexport class AssociatedLockboxNotFound extends Error {}\nexport class WorkflowAnswersMissingError extends Error {}\n","import { getMany } from 'idb-keyval'\nimport { WorkflowAnswersMissingError } from '../models'\nimport {\n MetadataCategory,\n PopulatedWorkflowData,\n PopulatedWorkflowField,\n QuestionData,\n SelectedAnswerData,\n SelectedAnswersData,\n WorkflowData,\n WorkflowPageData,\n WorkflowUploadedImage,\n} from 'oro-sdk-apis'\n\nexport async function filterTriggeredAnsweredWithKind(\n workflowData: WorkflowData,\n kind:\n | 'text'\n | 'text-area'\n | 'text-select-group'\n | 'date'\n | 'number'\n | 'images'\n | 'images-alias'\n | 'body-parts'\n | 'pharmacy-picker'\n | 'online-pharmacy-picker'\n): Promise<SelectedAnswerData[]> {\n if (!workflowData.selectedAnswers) throw WorkflowAnswersMissingError\n // Flattens the list of answered questions\n let flattenedAnswers = flattenSelectedAnswers(workflowData.selectedAnswers)\n // Generates a list of applicable questions\n let triggeredQuestionsWithKind = Object.fromEntries(\n workflowData.pages\n .map((a) => {\n return Object.entries(a.questions).filter(\n ([_, question]) => isTriggered(question.triggers || [], flattenedAnswers) && question.kind === kind\n )\n })\n .flat()\n )\n\n const samePageAnswers = workflowData.selectedAnswers.reduce((prev, cur) => {\n return { ...prev, ...cur }\n }, {})\n\n const res = Object.keys(triggeredQuestionsWithKind).map((questionFieldName) => {\n return samePageAnswers[questionFieldName]\n })\n\n return res\n}\n\n/**\n * Filters and Populates the `selectedAnswers` from the workflow by\n * Cross-referencing the `MetaCategory` of the answer's respective question\n * Populates the fields labels and values that are of radio, dropdown and checkbox types\n *\n * @param workflowData\n * @param category\n * @returns An array of record key, value pairs\n */\nexport async function getWorkflowDataByCategory(\n workflowData: WorkflowData,\n category: MetadataCategory\n): Promise<PopulatedWorkflowData> {\n if (!workflowData.selectedAnswers) throw WorkflowAnswersMissingError\n\n // Flattens the list of answered questions\n let flattenedAnswers = flattenSelectedAnswers(workflowData.selectedAnswers)\n // Generates a list of applicable questions\n let triggeredQuestions = Object.fromEntries(\n workflowData.pages\n .map((a) => {\n return Object.entries(a.questions).filter(([_, question]) =>\n isTriggered(question.triggers || [], flattenedAnswers)\n )\n })\n .flat()\n )\n\n const fields: Record<string, PopulatedWorkflowField> = {}\n\n // Generates the answers of the specified category and adds the appropriate values if any are missing\n return Promise.all(\n workflowData.selectedAnswers\n .map((e) => Object.entries(e))\n .flat()\n .filter(([k, v]) => triggeredQuestions[k] && triggeredQuestions[k]['metaCategory'] === category)\n .map(([k, v]) => {\n return populateWorkflowField(triggeredQuestions[k], v).then((populatedValue) => {\n fields[k] = populatedValue\n })\n })\n )\n .then(() => {\n const ret: PopulatedWorkflowData = {\n workflowCreatedAt: workflowData.createdAt,\n workflowId: workflowData.id,\n locale: workflowData.locale,\n fields,\n }\n return ret\n })\n .catch((err) => {\n console.error(`Error while extracting ${category} data from workflow`, err)\n throw err\n })\n}\n\nexport async function getImagesFromIndexDb(answer: SelectedAnswerData): Promise<WorkflowUploadedImage[]> {\n return await getMany<WorkflowUploadedImage>((answer as any[]).map((v) => v.id ?? v) as string[])\n}\n\n/**\n * (If applicable) Based on the question kind, and the answer type this function will add and replace the appropriate fields to the\n * field values if they are radio, dropdown and checkbox fields\n *\n *\n * @param question\n * @param answerValue\n * @returns\n */\nasync function populateWorkflowField(\n question: QuestionData,\n answerValue: SelectedAnswerData\n): Promise<PopulatedWorkflowField> {\n let answer: any\n let displayedAnswer: string | string[] | undefined = undefined\n switch (question.kind) {\n case 'text-select-group':\n if (question.answers) {\n displayedAnswer = `${answerValue[0]} ${question.answers[answerValue[1] as string].text}`\n }\n answer = answerValue\n break\n case 'radio':\n case 'radio-card':\n case 'select':\n if (question.answers) {\n displayedAnswer = question.answers[answerValue as string].text\n }\n\n answer = answerValue\n break\n case 'multiple':\n case 'checkbox-group':\n displayedAnswer = (answerValue as string[]).map((value) => {\n if (question.answers) {\n return question.answers[value].text\n }\n\n throw new WorkflowAnswersMissingError()\n })\n\n answer = answerValue\n break\n case 'images':\n answer = await getImagesFromIndexDb(answerValue).then((images) =>\n images.map((image) => {\n const { name, imageData } = image\n\n return { name, imageData }\n })\n )\n break\n default:\n answer = answerValue\n }\n\n return Promise.resolve({\n answer,\n displayedAnswer,\n kind: question.kind,\n })\n}\n\nexport function isTriggered(triggers: string[], answers: string[]): boolean {\n for (let trigger of triggers) {\n if (!answers.includes(trigger)) {\n return false\n }\n }\n return true\n}\n\nexport function flattenSelectedAnswers(answers: SelectedAnswersData) {\n const linearAnswers: SelectedAnswerData[] = []\n\n for (const answer of answers) {\n linearAnswers.push(...Object.values(answer))\n }\n\n return linearAnswers.flat(1)\n}\n\n/**\n * This function helps you to get a valid workflow selectedAnswers structure\n * @param workflow the workflow data to use to initialize selectedAnswers\n * @param useDefault use workflow default values or not (this is used to avoid having unset values to appear in summaries)\n * @returns a valid selectedAnswers structure\n */\nexport function getInitialisedSelectedAnswers(workflow: WorkflowData, useDefault: boolean = true) {\n return workflow.pages.map((page) => {\n const ret: any = {}\n for (const [id, question] of Object.entries(page.questions)) {\n if (question.kind === 'body-parts') {\n ret[id] = useDefault ? [] : undefined\n } else {\n ret[id] = useDefault && question.defaultValue ? question.defaultValue : undefined\n }\n }\n return ret\n })\n}\n\nexport function fillWorkflowFromPopulatedWorkflow(workflow: WorkflowData, populatedWorkflow: PopulatedWorkflowData) {\n const filledWorkflow = JSON.parse(JSON.stringify(workflow))\n\n if (!filledWorkflow.selectedAnswers) {\n filledWorkflow.selectedAnswers = getInitialisedSelectedAnswers(filledWorkflow, false)\n }\n\n filledWorkflow.pages.forEach((page: WorkflowPageData, pageIdx: number) => {\n const ret: any = {}\n for (const [id] of Object.entries(page.questions)) {\n if (populatedWorkflow.fields[id]) {\n if (filledWorkflow.selectedAnswers)\n filledWorkflow.selectedAnswers[pageIdx][id] = populatedWorkflow.fields[id].answer as\n | string\n | string[]\n }\n }\n })\n\n return filledWorkflow\n}\n","import {\n Consult,\n ConsultationImageMeta,\n ConsultationMeta,\n ConsultRequest,\n DocumentType,\n IdentityResponse,\n IndexKey,\n MedicalMeta,\n MedicalStatus,\n MetadataCategory,\n PersonalMeta,\n PopulatedWorkflowData,\n Practitioner,\n PreferenceMeta,\n RawConsultationMeta,\n Term,\n Terms,\n Uuid,\n VaultIndex,\n WorkflowData,\n} from 'oro-sdk-apis'\nimport {\n filterTriggeredAnsweredWithKind,\n getImagesFromIndexDb,\n getWorkflowDataByCategory,\n identificationToPersonalInformations,\n OroClient,\n RegisterPatientOutput,\n toActualObject\n} from '..'\n\nconst MAX_RETRIES = 15\n\n/**\n * Completes a registration for a user retrying the complete flow a maximum of 15 times\n *\n * @description The order of importance when registering:\n * Creates a consultation if none exist\n * Retrieves or create's a lockbox if none exist\n * Grants the lockbox (if new) to all practitioners in the practice\n * Stores or fetches the patient data (without images)\n * Indexes the lockbox to the consult for all practitioners (done after inserting since index can be rebuilt from grants)\n * Stores the image data - done last since the majority of failure cases occur here\n * Creates the recovery payloads if they don't exist\n *\n * @param patientUuid\n * @param consultRequest\n * @param workflow\n * @param oroClient\n * @param masterKey\n * @param recoveryQA\n * @returns the successful registration\n */\nexport async function registerPatient(\n patientUuid: Uuid,\n consultRequest: ConsultRequest,\n workflow: WorkflowData,\n oroClient: OroClient,\n masterKey?: Uuid,\n recoveryQA?: {\n recoverySecurityQuestions: string[]\n recoverySecurityAnswers: string[]\n }\n): Promise<RegisterPatientOutput> {\n let consult: Consult | undefined = undefined\n let lockboxUuid: Uuid | undefined = undefined\n let practitionerAdmin: Uuid | undefined = undefined\n let retry = MAX_RETRIES\n let identity: IdentityResponse | undefined = undefined\n let errorsThrown: Error[] = []\n\n for (; retry > 0; retry--) {\n try {\n // Wait a bit each retry (we also want the first one to wait)\n await new Promise((resolve) => setTimeout(resolve, 2000))\n\n // Retrieving practitioners\n if (!practitionerAdmin)\n practitionerAdmin = (await oroClient.practiceClient.practiceGetFromUuid(consultRequest.uuidPractice))\n .uuidAdmin\n\n let practitioners: Practitioner[] = await oroClient.practiceClient\n .practiceGetPractitioners(consultRequest.uuidPractice)\n .catch((err) => {\n console.log(`Error retrieving practitioners`, err)\n return []\n })\n\n // Creating consult\n if (!consult) {\n consult = await getOrCreatePatientConsultationUuid(consultRequest, oroClient)\n }\n\n // Creating lockbox\n if (!lockboxUuid) lockboxUuid = await getOrCreatePatientLockbox(oroClient)\n\n if (!identity)\n identity = await oroClient.guardClient.identityGet(patientUuid)\n\n await oroClient.grantLockbox(practitionerAdmin, lockboxUuid).catch((err) => {\n console.error(`Error while granting lockbox to practitioner admin ${practitionerAdmin}`, err)\n // if we cannot grant to the admin, then the registration will fail\n errorsThrown.push(err)\n })\n\n // Patient Grant to practice\n let grantPromises = practitioners\n .filter((practitioner) => practitioner.uuid !== practitionerAdmin)\n .map(async (practitioner) => {\n return oroClient.grantLockbox(practitioner.uuid, lockboxUuid!).catch((err) => {\n console.error(`Error while granting lockbox to practitioner`, err)\n // Acceptable to continue as admin has already been granted, but we should still retry until the last retry remains\n if (retry <= 1) return\n errorsThrown.push(err)\n })\n })\n\n const consultIndex: VaultIndex = {\n [IndexKey.ConsultationLockbox]: [\n {\n grant: {\n lockboxUuid,\n lockboxOwnerUuid: patientUuid,\n },\n consultationId: consult.uuid,\n },\n ],\n }\n\n // the index will identify in which lockbox a consultation resides\n let consultIndexPromises = practitioners.map(async (practitioner) => {\n return oroClient.vaultIndexAdd(consultIndex, practitioner.uuid).catch((err) => {\n console.error(`[SDK: registration] Error while adding to the practitioner's index ${practitioner.uuid}`, err)\n // Acceptable to continue as the index can be rebuilt, but we should still retry until the last retry remains\n if (retry <= 1) return\n else errorsThrown.push(err)\n })\n })\n\n\n await storeImageAliases(consult.uuid, lockboxUuid, workflow, oroClient).catch((err) => {\n console.error('[SDK: registration] Some errors happened during image upload', err)\n // Acceptable to continue as images can be requested during the consultation, but we should still retry until the last retry remains\n if (retry <= 1) return\n else errorsThrown.push(err)\n })\n\n await storePatientData(consult.uuid, consultRequest.isoLanguageRequired, lockboxUuid, workflow, oroClient).catch((err) => {\n console.error('[SDK: registration] Some errors happened during patient data upload', err)\n errorsThrown.push(err)\n })\n\n if (masterKey && !identity?.recoveryMasterKey) {\n // generate and store recovery payload and updates the identity \n identity = await oroClient.updateMasterKey(patientUuid, masterKey, lockboxUuid).catch((err) => {\n console.error(`[SDK: registration] Error while updating master key`, err)\n /// it's acceptable to continue registration (return old identity)\n if (retry <= 1) return\n errorsThrown.push(err)\n return identity\n })\n } else {\n // we did not set the master key so we do not return it\n masterKey = undefined\n }\n\n if (recoveryQA && !identity?.recoverySecurityQuestions)\n // Patient security question recovery threshold is 2 answers and updates the identity \n identity = await oroClient\n .updateSecurityQuestions(\n patientUuid,\n recoveryQA.recoverySecurityQuestions,\n recoveryQA.recoverySecurityAnswers,\n 2\n )\n .catch((err) => {\n console.error(`[SDK: registration] Error while updating security questions`, err)\n /// it's acceptable to continue registration (return old identity)\n if (retry <= 1) return\n errorsThrown.push(err)\n return identity\n })\n\n await Promise.all([...grantPromises, ...consultIndexPromises])\n\n await buildConsultSearchIndex(consult, workflow, oroClient).catch((err) => {\n console.error('[SDK: registration] personal information not found or another error occured during search indexing', err)\n if(retry <= 1) return // this statement is to avoid failing the registration due to the failure in search indexing the consult, this practically implements a soft retry\n errorsThrown.push(err)\n })\n\n if (errorsThrown.length > 0)\n throw errorsThrown\n\n // Deem the consultation as ready\n await oroClient.consultClient.updateConsultByUUID(consult.uuid, {\n statusMedical: MedicalStatus.New,\n })\n\n // if we got through the complete flow, the registration succeeded\n break\n } catch (err) {\n console.error(`[SDK] Error occured during registration: ${err}, retrying... Retries remaining: ${retry}`)\n errorsThrown = []\n continue\n }\n }\n\n if (retry <= 0) {\n console.error('[SDK] registration failed: MAX_RETRIES reached')\n throw 'RegistrationFailed'\n }\n\n console.log('Successfully Registered')\n await oroClient.cleanIndex()\n return {\n masterKey,\n consultationId: consult!.uuid,\n lockboxUuid: lockboxUuid!,\n }\n}\n\n/**\n * Creates a consultation if one has not been created and fails to be retrieved by the payment intent\n * @param consult\n * @param oroClient\n * @returns the consult Uuid\n */\nasync function getOrCreatePatientConsultationUuid(consult: ConsultRequest, oroClient: OroClient): Promise<Consult> {\n let payment = await oroClient.practiceClient.practiceGetPayment(\n consult.uuidPractice,\n consult.idStripeInvoiceOrPaymentIntent\n )\n if (payment && payment.uuidConsult) {\n return oroClient.consultClient.getConsultByUUID(payment.uuidConsult).catch((err) => {\n console.error('Error while retrieving consult', err)\n throw err\n })\n } else {\n return await oroClient.consultClient.consultCreate(consult).catch((err) => {\n console.error('Error while creating consult', err)\n throw err\n })\n }\n}\n\n/**\n * Creates a new lockbox for the patient if they do not have any, otherwise, use the first (and only one)\n * @param oroClient\n * @returns the lockbox Uuid\n */\nasync function getOrCreatePatientLockbox(oroClient: OroClient): Promise<Uuid> {\n let grants = await oroClient.getGrants(undefined, true)\n if (grants.length > 0) {\n console.log('The grant has already been created, skipping lockbox create step')\n return grants[0].lockboxUuid!\n } else\n return (\n await oroClient.vaultClient.lockboxCreate().catch((err) => {\n console.error('Error while creating lockbox', err)\n throw err\n })\n ).lockboxUuid\n}\n\n/**\n * Store all patient related information into his/her lockbox\n * @param consultationId The consultation id\n * @param isoLanguage the prefered language of communication (ISO 639-3 https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes)\n * @param lockboxUuid the lockbox uuid to store data in\n * @param workflow the workflow used to extract informations\n * @param oroClient an oroClient instance\n * @returns\n */\nasync function storePatientData(\n consultationId: Uuid,\n isoLanguage: string,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient\n): Promise<(Uuid | void)[]> {\n // Create and store registration data\n return Promise.all([\n // Storing Raw data first\n oroClient.getOrInsertJsonData<RawConsultationMeta>(\n lockboxUuid,\n workflow,\n {\n category: MetadataCategory.Raw,\n contentType: 'application/json',\n consultationId,\n },\n {}\n ),\n getWorkflowDataByCategory(workflow, MetadataCategory.Consultation).then((data) =>\n oroClient.getOrInsertJsonData<ConsultationMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId, // TODO: deprecated. Will finally only be in privateMetadata\n },\n { consultationId }\n )\n ),\n getWorkflowDataByCategory(workflow, MetadataCategory.Medical).then((data) =>\n oroClient.getOrInsertJsonData<MedicalMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Medical,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId!],\n },\n {}\n )\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.Personal,\n oroClient\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.ChildPersonal,\n oroClient\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.OtherPersonal,\n oroClient\n ),\n oroClient.getOrInsertJsonData<PreferenceMeta>(\n lockboxUuid,\n { isoLanguage },\n {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n },\n {}\n ),\n ]).then((dataUuids) => dataUuids.flat())\n}\n\nasync function storeImageAliases(\n consultationId: Uuid,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient\n): Promise<(Uuid | void)[]> {\n const images = await getImagesFromIndexDb((await filterTriggeredAnsweredWithKind(workflow, 'images-alias')).flat())\n\n const nonNullImages = images.filter((img) => !!img)\n\n if (images.length !== nonNullImages.length) {\n console.error('[SDK] Some images have not been found, they have been skipped.')\n }\n\n let promises = nonNullImages.map((image) => {\n return oroClient.getOrInsertJsonData<ConsultationImageMeta>(\n lockboxUuid,\n image,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.ImageAlias,\n consultationId,\n idbId: image.idbId as string,\n },\n {}\n )\n })\n return Promise.all(promises)\n}\n\n/**\n * Extracts the workflow MetadataCategory for Personal, ChildPersonal and OtherPersonal\n * then stores it in the vault\n *\n * @param workflow\n * @param lockboxUuid\n * @param category\n * @returns The data uuid\n */\nexport async function extractAndStorePersonalWorkflowData(\n workflow: WorkflowData,\n lockboxUuid: Uuid,\n consultationId: Uuid,\n category: MetadataCategory.Personal | MetadataCategory.ChildPersonal | MetadataCategory.OtherPersonal,\n oroClient: OroClient\n): Promise<Uuid | void> {\n return getWorkflowDataByCategory(workflow, category as unknown as MetadataCategory).then((data) => {\n if (Object.keys(data.fields).length === 0) return\n return oroClient.getOrInsertJsonData<PersonalMeta>(\n lockboxUuid,\n data,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId],\n },\n {}\n )\n })\n}\n\n/**\n * Given workflow data, it populates it with Personal, ChildPersonal, and OtherPersonal workflow data\n * @param workflow\n */\nexport async function extractPersonalInfoFromWorkflowData(workflow: WorkflowData): Promise<{\n personalInfoPopulatedWfData: PopulatedWorkflowData,\n childPersonalInfoPopulatedWfData: PopulatedWorkflowData,\n otherPersonalInfoPopulatedWfData: PopulatedWorkflowData,\n}> {\n return Promise.all([\n getWorkflowDataByCategory(workflow, MetadataCategory.Personal),\n getWorkflowDataByCategory(workflow, MetadataCategory.ChildPersonal),\n getWorkflowDataByCategory(workflow, MetadataCategory.OtherPersonal)\n ]).then(([personalInfoPopulatedWfData, childPersonalInfoPopulatedWfData, otherPersonalInfoPopulatedWfData]) => {\n return {\n personalInfoPopulatedWfData,\n childPersonalInfoPopulatedWfData,\n otherPersonalInfoPopulatedWfData,\n }\n })\n}\n\n/**\n * Creates the search index for the first name, last name, and the short id of the given consultation\n * @param consult the consultation to be search indexed\n * @param workflow the workflow data\n * @param oroClient\n */\nexport async function buildConsultSearchIndex(consult: Consult, workflow: WorkflowData, oroClient: OroClient) {\n let terms: Terms = [\n <Term> {\n kind: 'consult-shortid',\n value: consult.shortId\n }\n ]\n\n const {\n personalInfoPopulatedWfData,\n childPersonalInfoPopulatedWfData,\n otherPersonalInfoPopulatedWfData\n } = await extractPersonalInfoFromWorkflowData(workflow)\n\n const personalInfo = identificationToPersonalInformations(\n toActualObject(personalInfoPopulatedWfData),\n MetadataCategory.Personal\n )\n const childPersonalInfo = identificationToPersonalInformations(\n toActualObject(childPersonalInfoPopulatedWfData),\n MetadataCategory.ChildPersonal\n )\n const otherPersonalInfo = identificationToPersonalInformations(\n toActualObject(otherPersonalInfoPopulatedWfData),\n MetadataCategory.OtherPersonal\n )\n\n terms.push(<Term>{\n kind: 'first-name',\n value: personalInfo.firstname,\n }, <Term> {\n kind: 'last-name',\n value: personalInfo.name\n })\n\n if(childPersonalInfo.firstname && childPersonalInfo.name) {\n terms.push(<Term>{\n kind: 'first-name',\n value: childPersonalInfo.firstname,\n }, <Term> {\n kind: 'last-name',\n value: childPersonalInfo.name\n })\n }\n\n if(otherPersonalInfo.firstname && otherPersonalInfo.name) {\n terms.push(<Term>{\n kind: 'first-name',\n value: otherPersonalInfo.firstname,\n }, <Term> {\n kind: 'last-name',\n value: otherPersonalInfo.name\n })\n }\n\n await oroClient.searchClient.index(consult.uuid, terms)\n}","import { CryptoRSA, uuidParse} from \"oro-toolbox\"\nimport { EncryptedIndexEntry, Grant, IndexConsultLockbox } from \"oro-sdk-apis\"\n\n/**\n * Decrypts and returns the encrypted grants\n * If something went wrong during decryption, that grant will be removed from the list\n *\n * @param encryptedGrants: an array of encrypted grants\n * @param rsaKey: the rsa key used to decrypt the encrypted grants\n * @returns an array of grants\n */\nexport function decryptGrants(encryptedGrants: Grant[], rsaKey: CryptoRSA): Grant[] {\n return encryptedGrants\n .map(grant => {\n if (grant.encryptedLockbox && !grant.lockboxUuid) {\n try {\n grant.lockboxUuid = uuidParse(\n rsaKey.base64DecryptToBytes(grant.encryptedLockbox)\n )\n } catch (e) {\n console.error('[sdk:index] The grant could not be decrypted or was not a valid UUID: ', e)\n }\n }\n return grant\n })\n .filter(grant => grant.lockboxUuid)\n}\n\n/**\n * Decrypts the encrypted consult lockboxes and returns their grants\n * If something went wrong during decryption, that grant will be removed from the list\n *\n * @param encryptedConsultLockboxes: an array of encrypted entries\n * @param rsaKey: the rsa key used to decrypt the encrypted entries\n * @returns an array of grants\n */\nexport function decryptConsultLockboxGrants(encryptedConsultLockboxes: EncryptedIndexEntry[], rsaKey: CryptoRSA): Grant[] {\n return encryptedConsultLockboxes\n .map(encryptedConsultLockboxes => {\n try {\n return [true, (rsaKey.base64DecryptToJson(\n encryptedConsultLockboxes.encryptedIndexEntry\n ) as IndexConsultLockbox).grant]\n } catch(e) {\n console.error('[sdk:index] The consult lockbox grant could not be decrypted: ', e)\n return [false, undefined] // if decryption fails, we want to ignore the grant but not fail the call\n }\n })\n .filter(grantsTuple => grantsTuple[0])\n .map(grantTuples => grantTuples[1] as Grant)\n}","import { IndexKey, Grant, IndexConsultLockbox, MetadataCategory, VaultIndex } from 'oro-sdk-apis'\nimport { OroClient, Uuid } from '..'\n\n/**\n * @name filterGrantsWithLockboxMetadata\n * @description searches for the applied filters in the vault index\n * @param oroClient\n * @param filter: the metadata filter applied to each the lockboxes\n * @param vaultIndex: the index to which the filter will be applied\n * @param forceRefresh\n * @returns the filtered grants\n */\nexport async function filterGrantsWithLockboxMetadata(\n oroClient: OroClient,\n filter?: { consultationId: Uuid },\n vaultIndex?: VaultIndex,\n forceRefresh = false\n): Promise<Grant[]> {\n if (!vaultIndex || forceRefresh) {\n vaultIndex = await buildLegacyVaultIndex(oroClient)\n }\n if (vaultIndex[IndexKey.Consultation] && filter) {\n let indexConsults = (vaultIndex[IndexKey.Consultation] ?? [])\n .filter((consultGrant: { consultationId: Uuid }) => consultGrant.consultationId === filter.consultationId)\n .map((consultGrant: { consultationId: Uuid; grant: Grant }) => consultGrant.grant as Grant)\n return indexConsults as Grant[]\n } else {\n // No grants exist and the index has already been built\n return []\n }\n}\n\n/** Finds all grants for the logged user\n * requests a list of unique consultation ids for each lockbox the user has access to\n * builds and sets the index of consultations\n * @param oroClient\n * @returns the constructed vaultIndex\n */\nexport async function buildLegacyVaultIndex(oroClient: OroClient): Promise<VaultIndex> {\n let grants = await oroClient.getGrants()\n let consultGrants: IndexConsultLockbox[] = []\n for (let grant of grants) {\n let consults = (\n await oroClient.vaultClient.lockboxMetadataGet(grant.lockboxUuid!, ['consultationId'], [], {\n category: MetadataCategory.Consultation,\n })\n )[0] as Uuid[]\n\n consultGrants = [\n ...consultGrants,\n ...consults.map((consult: any) => ({\n ...consult,\n grant: {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid,\n },\n })),\n ]\n }\n\n let vaultIndex = {\n [IndexKey.Consultation]: consultGrants,\n }\n oroClient.setVaultIndex(vaultIndex)\n console.info('[sdk:index] Successfully Built Vault Index')\n return vaultIndex\n}\n","import {\n AuthTokenRequest,\n Consult,\n ConsultRequest,\n ConsultService,\n DataCreateResponse,\n DiagnosisService,\n Document,\n DocumentType,\n EncryptedIndexEntry,\n EncryptedVaultIndex,\n Grant,\n GuardService,\n IdentityCreateRequest,\n IdentityResponse,\n IndexConsultLockbox,\n IndexKey,\n LocalizedData,\n LockboxDataRequest,\n LockboxGrantRequest,\n LockboxManifest,\n ManifestEntry,\n Meta,\n Metadata,\n MetadataCategory,\n PersonalMeta,\n PopulatedWorkflowData,\n Practice,\n PracticeService,\n PreferenceMeta,\n RecoveryMeta,\n SearchService,\n SecretShard,\n TellerService,\n TokenData,\n TosAndCpAcceptanceRequest,\n Uuid,\n VaultIndex,\n VaultService,\n WorkflowData,\n WorkflowService,\n} from 'oro-sdk-apis'\nimport * as OroToolbox from 'oro-toolbox'\nimport { CryptoRSA } from 'oro-toolbox'\nimport { decryptConsultLockboxGrants, decryptGrants, registerPatient, sessionStorePrivateKeyName } from './helpers'\nimport {\n AssociatedLockboxNotFound,\n IncompleteAuthentication,\n LocalEncryptedData,\n MissingGrant,\n MissingLockbox,\n MissingLockboxOwner,\n RecoveryData,\n RegisterPatientOutput,\n UserPreference,\n} from './models'\nimport { buildLegacyVaultIndex, filterGrantsWithLockboxMetadata } from './sdk-revision'\n\nexport class OroClient {\n private rsa?: CryptoRSA\n private secrets: {\n lockboxUuid: string\n cryptor: OroToolbox.CryptoChaCha\n }[] = []\n private cachedMetadataGrants: {\n [filter: string]: Grant[]\n } = {}\n\n private cachedManifest: {\n [filter: string]: ManifestEntry[]\n } = {}\n\n private vaultIndex?: VaultIndex\n\n constructor(\n private toolbox: typeof OroToolbox,\n public tellerClient: TellerService,\n public vaultClient: VaultService,\n public guardClient: GuardService,\n public searchClient: SearchService,\n public practiceClient: PracticeService,\n public consultClient: ConsultService,\n public workflowClient: WorkflowService,\n public diagnosisClient: DiagnosisService,\n private authenticationCallback?: (err: Error) => void\n ) { }\n\n /**\n * clears the vaultIndex and cached metadata grants\n */\n public async cleanIndex() {\n this.vaultIndex = undefined\n this.cachedMetadataGrants = {}\n this.cachedManifest = {}\n }\n\n /**\n * Generates an RSA key pair and password payload (rsa private key encrypted with the password)\n * Calls Guard to sign up with the email address, password, practice, legal and token data\n *\n * @param email\n * @param password\n * @param practice\n * @param legal\n * @param tokenData\n * @returns\n */\n public async signUp(\n email: string,\n password: string,\n practice: Practice,\n tosAndCpAcceptance: TosAndCpAcceptanceRequest,\n tokenData?: TokenData,\n subscription?: boolean,\n skipEmailValidation?: boolean\n ): Promise<IdentityResponse> {\n this.rsa = new CryptoRSA()\n const privateKey = this.rsa.private()\n\n const symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(password)\n const recoveryPassword = symmetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n\n const hashedPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(password))\n\n const emailConfirmed = !!skipEmailValidation\n\n const signupRequest: IdentityCreateRequest = {\n practiceUuid: practice.uuid,\n email: email.toLowerCase(),\n emailConfirmed,\n password: hashedPassword,\n publicKey: this.toolbox.encodeToBase64(this.rsa.public()),\n recoveryPassword,\n tosAndCpAcceptance,\n tokenData,\n subscription,\n }\n\n const identity = await this.guardClient.identityCreate(signupRequest)\n\n if (identity.recoveryLogin) {\n //Ensure we can recover from a page reload\n let symetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(identity.recoveryLogin)\n sessionStorage.setItem(\n sessionStorePrivateKeyName(identity.id),\n symetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n )\n }\n\n return identity\n }\n\n /**\n * Parse the given accessToken claims by calling guard whoami and update theidentity to set it's emailConfirmed flag\n * @param accessToken\n * @returns The identity related to confirmedEmail\n */\n public async confirmEmail(accessToken: string): Promise<IdentityResponse> {\n this.guardClient.setTokens({ accessToken })\n const claims = await this.guardClient.whoAmI()\n return this.guardClient.identityUpdate(claims.sub, {\n emailConfirmed: true,\n })\n }\n\n /**\n * Calls Guard to sign in with the email address, password and one time password (if MFA is enabled)\n * Then recover's the rsa private key from the recovery payload\n *\n * @param practiceUuid\n * @param email\n * @param password\n * @param otp\n * @returns the user identity\n */\n public async signIn(practiceUuid: Uuid, email: string, password: string, otp?: string): Promise<IdentityResponse> {\n const hashedPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(password))\n const tokenRequest: AuthTokenRequest = {\n practiceUuid,\n email: email.toLowerCase(),\n password: hashedPassword,\n otp,\n }\n\n await this.guardClient.authToken(tokenRequest)\n const userUuid = (await this.guardClient.whoAmI()).sub\n\n // Updates the rsa key to the one generated on the backend\n await this.recoverPrivateKeyFromPassword(userUuid, password)\n return await this.guardClient.identityGet(userUuid)\n }\n\n /**\n * Will attempt to recover an existing login session and set back\n * the private key in scope\n */\n public async resumeSession() {\n const id = (await this.guardClient.whoAmI()).sub\n const recoveryPayload = sessionStorage.getItem(sessionStorePrivateKeyName(id))\n const recoveryKey = (await this.guardClient.identityGet(id)).recoveryLogin\n\n if (!recoveryKey || !recoveryPayload) throw IncompleteAuthentication\n\n const symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(recoveryKey)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * This function let's you encrypt locally an Object\n * @param value the Object to encrypt\n * @returns a LocalEncryptedData Object\n * @throws IncompleteAuthentication if rsa is not set\n * @calls authenticationCallback if rsa is not set\n */\n public localEncryptToJsonPayload(value: any): LocalEncryptedData {\n if (!this.rsa) {\n if (this.authenticationCallback) {\n this.authenticationCallback(new IncompleteAuthentication())\n }\n\n throw new IncompleteAuthentication()\n }\n\n const chaChaKey = new this.toolbox.CryptoChaCha()\n\n const encryptedData = chaChaKey.jsonEncryptToBase64Payload(value)\n const encryptedKey = this.toolbox.encodeToBase64(this.rsa.encryptToBytes(chaChaKey.key()))\n\n return { encryptedData, encryptedKey }\n }\n\n /**\n * This function let's you decrypt a LocalEncryptedData object\n * @param value a LocalEncryptedData object\n * @returns a decrypted Object\n * @throws IncompleteAuthentication if rsa is not set\n * @calls authenticationCallback if rsa is not set\n */\n public localDecryptJsonPayload({ encryptedKey, encryptedData }: LocalEncryptedData): any {\n if (!this.rsa) {\n if (this.authenticationCallback) {\n this.authenticationCallback(new IncompleteAuthentication())\n }\n\n throw new IncompleteAuthentication()\n }\n\n const chaChaKey = this.rsa.base64DecryptToBytes(encryptedKey)\n const decryptedData = this.toolbox.CryptoChaCha.fromKey(chaChaKey).base64PayloadDecryptToJson(encryptedData)\n\n return decryptedData\n }\n\n /**\n * Effectively kills your \"session\"\n */\n public async signOut() {\n this.rsa = undefined\n this.secrets = []\n this.guardClient.setTokens({\n accessToken: undefined,\n refreshToken: undefined,\n })\n await this.guardClient.authLogout()\n }\n\n /**\n * @name registerPatient\n * @description The complete flow to register a patient\n *\n * Steps:\n * 1. Create a consult (checks if payment has been done)\n * 2. Creates a lockbox\n * 3. Grants lockbox access to all practice personnel\n * 4. Creates secure identification, medical, onboarding data\n * 5. Generates and stores the rsa key pair and recovery payloads\n *\n * @param patientUuid\n * @param consult\n * @param workflow\n * @param recoveryQA\n * @returns\n */\n public async registerPatient(\n patientUuid: Uuid,\n consult: ConsultRequest,\n workflow: WorkflowData,\n recoveryQA?: {\n recoverySecurityQuestions: string[]\n recoverySecurityAnswers: string[]\n }\n ): Promise<RegisterPatientOutput> {\n if (!this.rsa) throw IncompleteAuthentication\n return registerPatient(patientUuid, consult, workflow, this, this.toolbox.uuid(), recoveryQA)\n }\n\n /**\n * Builds the vault index for the logged user\n *\n * Steps:\n * 1. Retrieves, decrypts and sets the lockbox IndexSnapshot\n * 2. Retrieves, decrypts and adds all other index entries starting at the snapshot timestamp\n * 3. Updates the IndexSnapshot if changed\n * @deprecated\n * @returns the latest vault index\n */\n public async buildVaultIndex(forceRefresh: boolean = false) {\n if (!this.vaultIndex || forceRefresh) await buildLegacyVaultIndex(this)\n }\n\n /**\n * Setter for the vault index\n * @param index\n */\n public setVaultIndex(index: VaultIndex) {\n this.vaultIndex = index\n }\n\n /**\n * Fetches all grants, and consultations that exist in each lockbox\n * Then updates the index for the current user with the lockbox consult relationship\n */\n public async forceUpdateIndexEntries() {\n let grants = await this.getGrants()\n\n let indexConsultLockbox: IndexConsultLockbox[] = await Promise.all(\n grants.map(\n async (grant: Grant) =>\n await this.vaultClient\n .lockboxMetadataGet(\n grant.lockboxUuid!,\n ['consultationId'],\n [],\n { category: MetadataCategory.Consultation },\n grant.lockboxOwnerUuid\n )\n .then((consults) => {\n try {\n return consults[0].map((consult: any) => {\n return {\n ...consult,\n grant: {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid,\n },\n }\n })\n } catch (e) {\n // No consultations in lockbox or index could not be created\n return []\n }\n })\n .catch(() => [])\n )\n ).then((consults) => consults.flat())\n this.vaultIndexAdd({\n [IndexKey.Consultation]: indexConsultLockbox,\n })\n .then(() => alert('The Index was successfully updated!'))\n .catch(() => console.error('The index failed to update!'))\n }\n\n /**\n * Generates, encrypts and adds entries to vault index for a given index owner\n *\n * @param entries\n * @param indexOwnerUuid\n */\n public async vaultIndexAdd(entries: VaultIndex, indexOwnerUuid?: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let rsaPub: Uint8Array\n if (indexOwnerUuid) {\n let base64IndexOwnerPubKey = (await this.guardClient.identityGet(indexOwnerUuid)).publicKey\n rsaPub = this.toolbox.decodeFromBase64(base64IndexOwnerPubKey)\n } else {\n rsaPub = this.rsa.public()\n }\n\n let encryptedIndex: EncryptedVaultIndex = {}\n\n for (let keyString of Object.keys(entries)) {\n let key = keyString as keyof VaultIndex\n switch (key) {\n case IndexKey.ConsultationLockbox:\n encryptedIndex[key] = (entries[key] as IndexConsultLockbox[])\n .map((e) => ({\n ...e,\n uniqueHash: e.consultationId,\n }))\n .map(\n (e: IndexConsultLockbox) =>\n ({\n uuid: e.uuid,\n timestamp: e.timestamp,\n uniqueHash: e.uniqueHash,\n encryptedIndexEntry: CryptoRSA.jsonWithPubEncryptToBase64(\n {\n consultationId: e.consultationId,\n grant: e.grant,\n },\n rsaPub\n ),\n } as EncryptedIndexEntry)\n )\n break\n //// DEPRECATED : REMOVE ME : BEGIN ///////////////////////////////////////////\n case IndexKey.Consultation:\n encryptedIndex[key] = (entries[key] as IndexConsultLockbox[])\n .map((e) => ({\n ...e,\n uniqueHash: this.toolbox.hashStringToBase64(\n JSON.stringify({\n consultationId: e.consultationId,\n grant: e.grant,\n })\n ),\n }))\n .filter(\n (e) =>\n !this.vaultIndex ||\n !this.vaultIndex[IndexKey.Consultation]?.find((v) => v.uniqueHash === e.uniqueHash)\n )\n .map(\n (e: IndexConsultLockbox) =>\n ({\n uuid: e.uuid,\n timestamp: e.timestamp,\n uniqueHash: e.uniqueHash,\n encryptedIndexEntry: CryptoRSA.jsonWithPubEncryptToBase64(\n {\n consultationId: e.consultationId,\n grant: e.grant,\n },\n rsaPub\n ),\n } as EncryptedIndexEntry)\n )\n break\n //// DEPRECATED : REMOVE ME : END ///////////////////////////////////////////\n }\n }\n await this.vaultClient.vaultIndexPut(encryptedIndex, indexOwnerUuid)\n }\n\n /**\n * adds or updates the index snapshot for the logged user\n * @param index\n */\n public async indexSnapshotAdd(index: VaultIndex) {\n if (!this.rsa) throw IncompleteAuthentication\n let rsaPub: Uint8Array = this.rsa.public()\n\n let cleanedIndex: VaultIndex = {\n [IndexKey.Consultation]: index[IndexKey.Consultation]\n ?.filter((c) => c)\n .map((c) => {\n return {\n grant: c.grant,\n consultationId: c.consultationId,\n }\n }),\n }\n\n // the data of the snapshot should not contain the `IndexEntry` data\n // (will create conflicts while updating)\n let encryptedIndexEntry = CryptoRSA.jsonWithPubEncryptToBase64(cleanedIndex, rsaPub)\n\n // The encryptedIndexEntry can have the uuid and timstamp (for updating)\n let encryptedIndex: EncryptedIndexEntry = {\n uuid: index.uuid,\n timestamp: index.timestamp,\n encryptedIndexEntry,\n }\n this.vaultClient.vaultIndexSnapshotPut(encryptedIndex)\n }\n\n /**\n * @name grantLockbox\n * @description Grants a lockbox by retrieving the shared secret of the lockbox and encrypting it with the grantees public key\n * @param granteeUuid\n * @param lockboxUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n */\n public async grantLockbox(granteeUuid: Uuid, lockboxUuid: Uuid, lockboxOwnerUuid?: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let secret = (await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)).key()\n let base64GranteePublicKey = (await this.guardClient.identityGet(granteeUuid)).publicKey\n let granteePublicKey = this.toolbox.decodeFromBase64(base64GranteePublicKey)\n\n let granteeEncryptedSecret = CryptoRSA.bytesWithPubEncryptToBase64(secret, granteePublicKey)\n let request: LockboxGrantRequest = {\n encryptedSecret: granteeEncryptedSecret,\n granteeUuid: granteeUuid,\n }\n await this.vaultClient.lockboxGrant(lockboxUuid, request, lockboxOwnerUuid)\n }\n\n /**\n * @name createMessageData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a message string\n * @param lockboxUuid\n * @param message\n * @param consultationId the consultation for which this message is sent\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createMessageData(\n lockboxUuid: Uuid,\n message: string,\n consultationId: string,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n\n let encryptedData = symmetricEncryptor.jsonEncryptToBase64Payload(message)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload({\n author: (await this.guardClient.whoAmI()).sub,\n })\n\n let meta = {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Message,\n contentType: 'text/plain',\n }\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * @name createMessageAttachmentData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a file\n * @param lockboxUuid\n * @param data the file stored\n * @param consultationId the consultation for which this message is sent\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createMessageAttachmentData(\n lockboxUuid: Uuid,\n data: File,\n consultationId: string,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.bytesEncryptToBase64Payload(new Uint8Array(await data.arrayBuffer()))\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload({\n author: (await this.guardClient.whoAmI()).sub,\n fileName: data.name,\n lastModified: data.lastModified,\n size: data.size,\n })\n\n let meta = {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Message,\n contentType: data.type,\n }\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * @name createAttachmentData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a file\n * @param lockboxUuid\n * @param data the file stored\n * @param consultationId the consultation for which this message is sent\n * @param category the category for the attachment data\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createConsultationAttachmentData(\n lockboxUuid: Uuid,\n data: File,\n consultationId: string,\n documentType: DocumentType,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n return this.createBytesData<Meta | any>(\n lockboxUuid,\n new Uint8Array(await data.arrayBuffer()),\n {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType,\n contentType: data.type,\n },\n {\n author: (await this.guardClient.whoAmI()).sub,\n fileName: data.name,\n },\n lockboxOwnerUuid,\n previousDataUuid\n )\n }\n\n /**\n * @name createJsonData\n * @description Creates a Base64 encrypted Payload to send and store in the vault. With the data input as a JSON\n * @param lockboxUuid\n * @param data\n * @param meta\n * @param privateMeta the metadata that will be secured in the vault\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing data, specify the previous data uuid\n * @returns the data uuid\n */\n public async createJsonData<T = Meta>(\n lockboxUuid: Uuid,\n data: any,\n meta?: T,\n privateMeta?: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.jsonEncryptToBase64Payload(data)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload(privateMeta)\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * Get or upsert a data in lockbox\n * @param lockboxUuid the lockbox uuid\n * @param data the data to insert\n * @param publicMetadata the public Metadata\n * @param privateMetadata the private Metadata\n * @param forceReplace set true when the insertion of data requires to replace the data when it exists already\n * @returns the data uuid\n */\n public async getOrInsertJsonData<M = Metadata>(\n lockboxUuid: Uuid,\n data: any,\n publicMetadata: M,\n privateMetadata: Metadata,\n forceReplace: boolean = false\n ): Promise<Uuid> {\n let manifest = await this.vaultClient.lockboxManifestGet(lockboxUuid, publicMetadata)\n if (!forceReplace && manifest.length > 0) {\n console.log(`The data for ${JSON.stringify(publicMetadata)} already exist`)\n return manifest[0].dataUuid\n } else\n return (\n await this.createJsonData<M>(\n lockboxUuid,\n data,\n publicMetadata,\n privateMetadata,\n undefined,\n forceReplace && manifest.length > 0 ? manifest[0].dataUuid : undefined // if forceReplace and data already exist, then replace data. Otherwise insert it\n ).catch((err) => {\n console.error(`Error while upserting data ${JSON.stringify(publicMetadata)} data`, err)\n throw err\n })\n ).dataUuid\n }\n\n /**\n * @name createBytesData\n * @description Creates a Base64 encrypted Payload to send and store in the vault. With the data input as a Bytes\n * @param lockboxUuid\n * @param data\n * @param meta\n * @param privateMeta the metadata that will be secured in the vault\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing data, specify the previous data uuid\n * @returns the data uuid\n */\n public async createBytesData<T = Meta>(\n lockboxUuid: Uuid,\n data: Uint8Array,\n meta: T,\n privateMeta: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.bytesEncryptToBase64Payload(data)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload(privateMeta)\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * @name getJsonData\n * @description Fetches and decrypts the lockbox data with the cached shared secret.\n * Decrypts the data to a valid JSON object. If this is impossible, the call to the WASM binary will fail\n *\n * @type T is the generic type specifying the return type object of the function\n * @param lockboxUuid\n * @param dataUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns the data specified by the generic type <T>\n */\n public async getJsonData<T = any>(lockboxUuid: Uuid, dataUuid: Uuid, lockboxOwnerUuid?: Uuid): Promise<T> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let [encryptedPayload, symmetricDecryptor] = await Promise.all([\n this.vaultClient.lockboxDataGet(lockboxUuid, dataUuid, lockboxOwnerUuid),\n this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid),\n ])\n\n return symmetricDecryptor.base64PayloadDecryptToJson(encryptedPayload.data)\n }\n /**\n * @description Fetches and decrypts the lockbox data with the cached shared secret.\n * @param lockboxUuid\n * @param dataUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns the bytes data\n */\n public async getBytesData(lockboxUuid: Uuid, dataUuid: Uuid, lockboxOwnerUuid?: Uuid): Promise<Uint8Array> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let [encryptedPayload, symmetricDecryptor] = await Promise.all([\n this.vaultClient.lockboxDataGet(lockboxUuid, dataUuid, lockboxOwnerUuid),\n this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid),\n ])\n\n return symmetricDecryptor.base64PayloadDecryptToBytes(encryptedPayload.data)\n }\n\n /**\n * @name getGrants\n * @description Get all lockboxes granted to user with the applied filter\n * @note this function returns cached grants and will not update unless the page is refreshed\n * @todo some versions of lockboxes do not make use of lockbox metadata\n * in this case, all lockboxes need to be filtered one-by-one to find the correct one\n * Remove if this is no longer the case\n * @param filter: the consultationId in which the grant exists\n * @returns decrypted lockboxes granted to user\n */\n public async getGrants(filter?: { consultationId: Uuid }, forceRefresh: boolean = false): Promise<Grant[]> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let filterString = JSON.stringify(filter)\n // retrieves cached grants\n // Note: if filters is set to empty, it will be stored in the `undefined` key\n if (!forceRefresh && this.cachedMetadataGrants[filterString]) return this.cachedMetadataGrants[filterString]\n\n // if there is a filter to apply, then the grant can be retrieved from the vault index, otherwise, all grants are fetched\n // Note: will work only if the filter being applied is exclusively a consult id\n const grantsByConsultLockbox = filter ? (\n await this.vaultClient.vaultIndexGet([IndexKey.ConsultationLockbox], [filter.consultationId])\n .then((res) => res[IndexKey.ConsultationLockbox])\n .catch((e) => {\n console.error(e)\n return []\n })\n ) : undefined\n const decryptedConsults = decryptConsultLockboxGrants(grantsByConsultLockbox ?? [], this.rsa)\n if (decryptedConsults.length > 0) {\n console.info('[sdk:index] Grants found in user`s constant time secure index')\n this.cachedMetadataGrants[JSON.stringify(filter)] = decryptedConsults\n return this.cachedMetadataGrants[filterString]\n }\n\n let encryptedGrants\n // if there are no grants with the applied filter from index, attempt for naive filter with backwards compatibility\n if (filter) {\n encryptedGrants = await filterGrantsWithLockboxMetadata(this, filter, this.vaultIndex, forceRefresh)\n } else {\n encryptedGrants = (await this.vaultClient.grantsGet()).grants\n }\n\n const decryptedGrants = await decryptGrants(encryptedGrants, this.rsa)\n // sets the cached grant\n this.cachedMetadataGrants[filterString] = decryptedGrants\n return decryptedGrants\n }\n\n /**\n * @name getCachedSecretCryptor\n * @description Retrieves the cached lockbox secret or fetches the secret from vault, then creates the symmetric cryptor and stores it in memory\n * @param lockboxUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns\n */\n async getCachedSecretCryptor(lockboxUuid: string, lockboxOwnerUuid?: string): Promise<OroToolbox.CryptoChaCha> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let index = this.secrets.findIndex((secret) => secret.lockboxUuid === lockboxUuid)\n if (index === -1) {\n let encryptedSecret = (await this.vaultClient.lockboxSecretGet(lockboxUuid, lockboxOwnerUuid)).sharedSecret\n\n let secret = this.rsa.base64DecryptToBytes(encryptedSecret)\n let cryptor = this.toolbox.CryptoChaCha.fromKey(secret)\n this.secrets.push({ lockboxUuid, cryptor })\n return cryptor\n } else {\n return this.secrets[index].cryptor\n }\n }\n\n /**\n * Retrieves the patient personal information associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several personal informations data\n * @param consultationId The consultation Id\n * @param category The personal MetadataCategory to fetch\n * @param forceRefresh force data refresh (default to false)\n * @returns the personal data\n */\n public async getPersonalInformationsFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory.Personal | MetadataCategory.ChildPersonal | MetadataCategory.OtherPersonal,\n forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, category, forceRefresh)\n }\n\n /**\n * Retrieves the patient medical data associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several medical data\n * @param consultationId The consultation Id\n * @param forceRefresh force data refresh (default to false)\n * @returns the medical data\n */\n public async getMedicalDataFromConsultId(\n consultationId: Uuid,\n forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, MetadataCategory.Medical, forceRefresh)\n }\n\n private async getMetaCategoryFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory,\n forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n let grants = await this.getGrants({ consultationId })\n let workflowData: LocalizedData<PopulatedWorkflowData>[] = []\n for (let grant of grants) {\n let manifest = await this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId],\n },\n true,\n grant.lockboxOwnerUuid,\n forceRefresh\n )\n\n // TODO: find another solution for backwards compatibility (those without the metadata consultationIds)\n if (manifest.length === 0) {\n manifest = (\n await this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n // backward compatiblility with TonTest\n },\n true,\n grant.lockboxOwnerUuid,\n forceRefresh\n )\n ).filter((entry) => !entry.metadata.consultationIds) // Keep only entries without associated consultationIds\n }\n let data = await Promise.all(\n manifest.map(async (entry) => {\n return {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid!,\n dataUuid: entry.dataUuid,\n data: await this.getJsonData<PopulatedWorkflowData>(grant.lockboxUuid!, entry.dataUuid),\n }\n })\n )\n workflowData = { ...workflowData, ...data }\n }\n return workflowData\n }\n\n /**\n * @description retrieves the personal information stored in the first owned lockbox\n * @param userId The user Id\n * @returns the personal data\n */\n public async getPersonalInformations(userId: Uuid): Promise<LocalizedData<PopulatedWorkflowData>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === userId)\n\n if (!grant) {\n throw MissingGrant\n }\n\n const { lockboxUuid, lockboxOwnerUuid } = grant\n\n if (!lockboxUuid) throw MissingLockbox\n\n if (!lockboxOwnerUuid) throw MissingLockboxOwner\n\n const identificationDataUuid = (\n await this.getLockboxManifest(\n lockboxUuid,\n {\n category: MetadataCategory.Personal,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n false,\n userId\n )\n )[0].dataUuid\n\n return {\n lockboxOwnerUuid,\n lockboxUuid,\n dataUuid: identificationDataUuid,\n data: await this.getJsonData<PopulatedWorkflowData>(lockboxUuid, identificationDataUuid),\n }\n }\n\n /**\n * Retrieves the grant associated to a consultationId\n * @note returns the first grant only\n * @param consultationId The consultationId\n * @returns the grant\n */\n public async getGrantFromConsultId(consultationId: Uuid): Promise<Grant | undefined> {\n let grants = await this.getGrants({ consultationId })\n\n if (grants.length === 0) {\n throw AssociatedLockboxNotFound\n }\n\n return grants[0]\n }\n\n /**\n * retrieves the identity associated to the `consultationId`\n * @param consultationId The consultation Id\n * @returns the identity\n */\n public async getIdentityFromConsultId(consultationId: Uuid): Promise<IdentityResponse | undefined> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (grant && grant.lockboxOwnerUuid) {\n return await this.guardClient.identityGet(grant.lockboxOwnerUuid)\n } else {\n return undefined\n }\n }\n\n /**\n * retrieves the lockbox manifest for a given lockbox and add's its private metadata\n * @note the lockbox manifest will retrieved the cached manifest first unless force refresh is enabled\n * @param lockboxUuid\n * @param filter\n * @param expandPrivateMetadata\n * @param lockboxOwnerUuid\n * @param forceRefresh\n * @returns the lockbox manifest\n */\n public async getLockboxManifest(\n lockboxUuid: Uuid,\n filter: Metadata,\n expandPrivateMetadata: boolean,\n lockboxOwnerUuid?: Uuid,\n forceRefresh: boolean = false\n ): Promise<LockboxManifest> {\n let manifestKey = JSON.stringify({\n lockboxUuid,\n filter,\n expandPrivateMetadata,\n lockboxOwnerUuid,\n })\n if (!forceRefresh && this.cachedManifest[manifestKey]) return this.cachedManifest[manifestKey]\n\n return this.vaultClient.lockboxManifestGet(lockboxUuid, filter, lockboxOwnerUuid).then((manifest) => {\n return Promise.all(\n manifest.map(async (entry) => {\n if (expandPrivateMetadata && entry.metadata.privateMetadata) {\n let privateMeta = await this.getJsonData<Metadata>(\n lockboxUuid!,\n entry.metadata.privateMetadata,\n lockboxOwnerUuid\n )\n entry.metadata = {\n ...entry.metadata,\n ...privateMeta,\n }\n }\n return entry\n })\n ).then((manifest) => (this.cachedManifest[manifestKey] = manifest))\n })\n }\n\n /**\n * @description Create or update the personal information and store it in the first owned lockbox\n * @param identity The identity to use\n * @param data The personal data to store\n * @param dataUuid (optional) The dataUuid to update\n * @returns\n */\n public async createPersonalInformations(\n identity: IdentityResponse,\n data: PopulatedWorkflowData,\n dataUuid?: string\n ): Promise<DataCreateResponse> {\n const lockboxUuid = (await this.getGrants()).find(\n (lockbox) => lockbox.lockboxOwnerUuid === identity.id\n )?.lockboxUuid\n\n if (lockboxUuid) {\n return this.createJsonData<PersonalMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Personal,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n {},\n undefined,\n dataUuid\n )\n } else {\n throw MissingLockbox\n }\n }\n\n /**\n * Create or update user Preference\n * @param identity\n * @param preference\n * @param dataUuid\n * @returns\n */\n public async createUserPreference(\n identity: IdentityResponse,\n preference: UserPreference,\n dataUuid?: string\n ): Promise<DataCreateResponse> {\n const lockboxUuid = (await this.getGrants()).find(\n (lockbox) => lockbox.lockboxOwnerUuid === identity.id\n )?.lockboxUuid\n\n if (lockboxUuid) {\n return this.createJsonData<PreferenceMeta>(\n lockboxUuid,\n preference,\n {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n },\n {},\n undefined,\n dataUuid\n )\n } else {\n throw MissingLockbox\n }\n }\n\n /**\n * retrieves the user preference from a grant\n * @param grant The grant\n * @returns the user preference\n */\n public async getDataFromGrant<T = any>(grant: Grant, filter: Metadata): Promise<LocalizedData<T>> {\n const { lockboxUuid, lockboxOwnerUuid } = grant\n\n if (!lockboxUuid) throw MissingLockbox\n if (!lockboxOwnerUuid) throw MissingLockboxOwner\n const identificationDataUuid = (\n await this.getLockboxManifest(\n lockboxUuid,\n\n filter,\n false,\n grant.lockboxOwnerUuid,\n true\n )\n )[0].dataUuid\n\n return {\n lockboxOwnerUuid,\n lockboxUuid,\n dataUuid: identificationDataUuid,\n data: await this.getJsonData<T>(lockboxUuid, identificationDataUuid),\n }\n }\n\n /**\n * retrieves the user preference from a consultation id\n * @param consultationId The related consultationId\n * @returns the user preference\n */\n public async getUserPreferenceFromConsultId(consultationId: string): Promise<LocalizedData<UserPreference>> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<UserPreference>(grant, {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference stored in the first owned lockbox from identity\n * @param identity The identity to use\n * @returns the user preference\n */\n public async getUserPreference(identity: IdentityResponse): Promise<LocalizedData<UserPreference>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === identity.id)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<UserPreference>(grant, {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference from a consultation id\n * @param consultationId The related consultationId\n * @returns the user preference\n */\n public async getRecoveryDataFromConsultId(consultationId: string): Promise<LocalizedData<RecoveryData>> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<RecoveryData>(grant, {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference stored in the first owned lockbox from identity\n * @param identity The identity to use\n * @returns the user preference\n */\n public async getRecoveryData(identity: IdentityResponse): Promise<LocalizedData<RecoveryData>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === identity.id)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant(grant, {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n })\n }\n\n /**\n * @name getAssignedConsultations\n * @description finds all assigned or owned consultations for the logged user\n * Steps:\n * - Retrieves all granted lockboxes given to the logged user\n * - for each lockbox, find all consultation ids\n * - for each consultation id, retrieve the consult information\n * @param practiceUuid the uuid of the practice to look consult into\n * @returns the list of consults\n */\n public async getAssignedConsultations(practiceUuid: Uuid, forceRefresh: boolean = false): Promise<Consult[]> {\n return Promise.all(\n (await this.getGrants(undefined, forceRefresh)).map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n true,\n undefined,\n forceRefresh\n ).then((manifest) =>\n Promise.all(\n manifest.map(\n async (entry) =>\n await this.consultClient.getConsultByUUID(entry.metadata.consultationId, practiceUuid)\n )\n ).then((promise) => promise.flat())\n )\n )\n ).then((consults) => consults.flat())\n }\n\n /**\n * Gets the past consultations of the patient as well as his relatives if any\n * @param consultationId any consultation uuid from which we will fetch all the other consultations of the same patient as the owner of this consultation id\n * @param practiceUuid\n */\n public async getPastConsultationsFromConsultId(\n consultationId: string,\n practiceUuid: string\n ): Promise<Consult[] | undefined> {\n const grant = await this.getGrantFromConsultId(consultationId)\n if (!grant) return undefined\n\n let consultationsInLockbox: string[] = (\n await this.vaultClient.lockboxMetadataGet(\n grant.lockboxUuid!,\n ['consultationId'],\n ['consultationId'],\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n grant.lockboxOwnerUuid\n )\n )\n .flat()\n .map((metadata: { consultationId: string }) => metadata.consultationId)\n\n if (consultationsInLockbox.length == 0) return []\n\n return await Promise.all(\n consultationsInLockbox.map(async (consultId: string) => {\n return await this.consultClient.getConsultByUUID(consultId, practiceUuid)\n })\n )\n }\n\n /**\n * @name getPatientConsultationData\n * @description retrieves the consultation data\n * @param consultationId\n * @returns\n */\n public async getPatientConsultationData(\n consultationId: Uuid,\n forceRefresh: boolean = false\n ): Promise<PopulatedWorkflowData[]> {\n //TODO: make use of getPatientDocumentsList instead of doing it manually here\n return Promise.all(\n (await this.getGrants({ consultationId }, forceRefresh))\n .map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId, //since we want to update the cached manifest (if another consult data exists)\n },\n true,\n grant.lockboxOwnerUuid,\n forceRefresh\n ).then((manifest) =>\n Promise.all(\n manifest.map((e) =>\n this.getJsonData<PopulatedWorkflowData>(\n grant.lockboxUuid!,\n e.dataUuid,\n grant.lockboxOwnerUuid\n )\n )\n )\n )\n )\n .flat()\n ).then((data) => data.flat())\n }\n\n /**\n * This function returns the patient prescriptions\n * @param consultationId\n * @returns\n */\n public async getPatientPrescriptionsList(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Prescription,\n },\n true,\n consultationId\n )\n }\n\n /**\n * This function returns the patient results\n * @param consultationId\n * @returns\n */\n public async getPatientResultsList(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Result,\n },\n true,\n consultationId\n )\n }\n\n /**\n * returns the patient treatment plan options\n * @param consultationId\n * @returns Document[] corresponding to the patient treatment plan options\n */\n public async getPatientTreatmentPlans(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.TreatmentPlan,\n },\n true,\n consultationId\n )\n }\n\n /**\n * returns a specific patient treatment plan option\n * @param consultationId\n * @param treatmentPlanId\n * @returns\n */\n public async getPatientTreatmentPlanByUuid(consultationId: Uuid, treatmentPlanId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.TreatmentPlan,\n treatmentPlanId,\n },\n true,\n consultationId\n )\n }\n\n /**\n * @name getPatientDocumentsList\n * @description applies the provided filter to the vault to only find those documents\n * @param filters the applied filters (e.g. type of documents)\n * @param expandPrivateMetadata whether or not, the private metadata needs to be retrieved\n * (more computationally expensive)\n * @param consultationId\n * @returns the filtered document list\n */\n public async getPatientDocumentsList(\n filters: Object,\n expandPrivateMetadata: boolean,\n consultationId: Uuid\n ): Promise<Document[]> {\n return Promise.all(\n (await this.getGrants({ consultationId }))\n .map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n { ...filters, consultationId },\n expandPrivateMetadata,\n grant.lockboxOwnerUuid,\n true\n ).then((manifest) =>\n Promise.all(\n manifest.map(async (entry): Promise<Document> => {\n return {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid!,\n ...entry,\n }\n })\n )\n )\n )\n .flat()\n ).then((data) => data.flat())\n }\n\n /****************************************************************************************************************\n * RECOVERY *\n ****************************************************************************************************************/\n\n /**\n * @name recoverPrivateKeyFromSecurityQuestions\n * @description Recovers and sets the rsa private key from the answered security questions\n * @param id\n * @param recoverySecurityQuestions\n * @param recoverySecurityAnswers\n * @param threshold the number of answers needed to recover the key\n */\n public async recoverPrivateKeyFromSecurityQuestions(\n id: Uuid,\n recoverySecurityQuestions: string[],\n recoverySecurityAnswers: string[],\n threshold: number\n ) {\n let shards: SecretShard[] = (await this.guardClient.identityGet(id)).recoverySecurityQuestions!\n let answeredShards = shards\n .filter((shard: any) => {\n // filters all answered security questions\n let indexOfQuestion = recoverySecurityQuestions.indexOf(shard.securityQuestion)\n if (indexOfQuestion === -1) return false\n return recoverySecurityAnswers[indexOfQuestion] && recoverySecurityAnswers[indexOfQuestion] != ''\n })\n .map((item: any) => {\n // appends the security answer to the answered shards\n let index = recoverySecurityQuestions.indexOf(item.securityQuestion)\n item.securityAnswer = recoverySecurityAnswers[index]\n return item\n })\n try {\n // reconstructs the key from the answered security answers\n let privateKey = this.toolbox.reconstructSecret(answeredShards, threshold)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n } catch (e) {\n console.error(e)\n }\n }\n\n /**\n * @name recoverPrivateKeyFromPassword\n * @description Recovers and sets the rsa private key from the password\n * @param id\n * @param password\n */\n public async recoverPrivateKeyFromPassword(id: Uuid, password: string) {\n let identity = await this.guardClient.identityGet(id)\n\n let recoveryPayload = identity.recoveryPassword\n let symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(password)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n\n if (identity.recoveryLogin) {\n //Ensure we can recover from a page reload\n let symetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(identity.recoveryLogin)\n sessionStorage.setItem(\n sessionStorePrivateKeyName(id),\n symetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n )\n }\n\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * @name recoverPrivateKeyFromMasterKey\n * @description Recovers and sets the rsa private key from the master key\n * @param id\n * @param masterKey\n */\n public async recoverPrivateKeyFromMasterKey(id: Uuid, masterKey: string) {\n let recoveryPayload = (await this.guardClient.identityGet(id)).recoveryMasterKey!\n let symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(masterKey)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * @description Generates and updates the security questions and answers payload using new recovery questions and answers\n * Important: Since the security questions generate a payload for the private key, they will never be stored on the device as they must remain secret!!!\n * @param id\n * @param recoverySecurityQuestions\n * @param recoverySecurityAnswers\n * @param threshold the number of answers needed to rebuild the secret\n */\n public async updateSecurityQuestions(\n id: Uuid,\n recoverySecurityQuestions: string[],\n recoverySecurityAnswers: string[],\n threshold: number\n ) {\n if (!this.rsa) throw IncompleteAuthentication\n let securityQuestionPayload = this.toolbox.breakSecretIntoShards(\n recoverySecurityQuestions,\n recoverySecurityAnswers,\n this.rsa.private(),\n threshold\n )\n let updateRequest = {\n recoverySecurityQuestions: securityQuestionPayload,\n }\n\n return await this.guardClient.identityUpdate(id, updateRequest)\n }\n\n /**\n * @description Generates and stores the payload encrypted payload and updates the password itself (double hash)\n * @important\n * the recovery payload uses a singly hashed password and the password stored is doubly hashed so\n * the stored password cannot derive the decryption key in the payload\n * @note\n * the old password must be provided when not performing an account recovery\n * @param id\n * @param newPassword\n * @param oldPassword\n */\n public async updatePassword(id: Uuid, newPassword: string, oldPassword?: string) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(newPassword)\n let passwordPayload = symmetricEncryptor.bytesEncryptToBase64Payload(this.rsa.private())\n if (oldPassword) {\n oldPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(oldPassword))\n }\n\n newPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(newPassword))\n\n let updateRequest = {\n password: {\n oldPassword,\n newPassword,\n },\n recoveryPassword: passwordPayload,\n }\n\n return await this.guardClient.identityUpdate(id, updateRequest)\n }\n\n /**\n * @description Generates and stores the master key encrypted payload\n * Important\n * Since the master key is used to generate a payload for the private key, it will never be stored on the device as it must remain secret!\n * @param id\n * @param masterKey\n * @param lockboxUuid\n */\n async updateMasterKey(id: Uuid, masterKey: string, lockboxUuid: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(masterKey)\n let masterKeyPayload = symmetricEncryptor.bytesEncryptToBase64Payload(this.rsa.private())\n let updateRequest = { recoveryMasterKey: masterKeyPayload }\n const updatedIdentity = await this.guardClient.identityUpdate(id, updateRequest)\n\n await this.getOrInsertJsonData<RecoveryMeta>(\n lockboxUuid,\n { masterKey },\n {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n },\n {},\n true\n )\n\n return updatedIdentity\n }\n}\n","import { AxiosService, CliniaResponse, FacetFilter, PlaceData } from \"oro-sdk-apis\"\n\nexport class CliniaService {\n private api: AxiosService\n\n constructor(private url: string, apiKey: string, private locale?: string) {\n this.api = new AxiosService({ headers: { 'X-Clinia-API-Key': apiKey } })\n }\n\n public placeSearch(searchOptions: {\n locale?: string\n query?: string\n facetFilters?: FacetFilter[]\n location?: string\n aroundLatLng?: string\n page?: number\n }) {\n const { locale, ...data } = searchOptions\n\n return this.api.post<CliniaResponse<PlaceData>>(\n `${this.url}/search/v1/indexes/health_facility/query`,\n data,\n {\n params: { locale: locale ?? this.locale },\n }\n )\n }\n\n public placeMatch(\n searchOptions: {\n locale?: string\n name?: string\n address?: string\n postalCode?: string\n place?: string\n region?: string\n country?: string\n },\n type?: string\n ) {\n const { locale, ...data } = searchOptions\n\n let request = this.api.post<PlaceData[]>(\n `${this.url}/search/v1/matches`,\n data,\n {\n params: { locale: locale ?? this.locale },\n }\n )\n\n if (type) {\n request = request.then((places) =>\n places.filter((place) => place.type === type)\n )\n }\n\n return request\n }\n}\n","import initApis from 'oro-sdk-apis'\nimport { OroClient } from './client'\nimport * as OroToolboxNamespace from 'oro-toolbox'\n\nexport type OroToolbox = typeof OroToolboxNamespace\n\nexport let wasmPath = 'node_modules/oro-toolbox'\n\n/**\n * This function helps you to initialize and OroClient instance\n * @param toolbox the OroToolbox object\n * @param tellerBaseURL the teller service base URL \n * @param vaultBaseURL the vault service base URL \n * @param guardBaseURL the guard service base URL \n * @param searchbaseURL the search service base URL\n * @param practiceBaseURL the practice service base URL \n * @param consultBaseURL the consult service base URL \n * @param workflowBaseURL the workflow service base URL \n * @param diagnosisBaseURL the diagnosis service base URL \n * @param authenticationCallback (optional) authenticationCallback the authentification callback \n * @returns an instance of OroClient\n */\nconst init = (\n toolbox: OroToolbox,\n tellerBaseURL: string,\n vaultBaseURL: string,\n guardBaseURL: string,\n searchBaseURL: string,\n practiceBaseURL: string,\n consultBaseURL: string,\n workflowBaseURL: string,\n diagnosisBaseURL: string,\n authenticationCallback?: (err: Error) => void\n) => {\n const {\n tellerService,\n practiceService,\n consultService,\n vaultService,\n guardService,\n searchService,\n workflowService,\n diagnosisService,\n } = initApis(\n {\n tellerBaseURL,\n vaultBaseURL,\n guardBaseURL,\n searchBaseURL,\n practiceBaseURL,\n consultBaseURL,\n workflowBaseURL,\n diagnosisBaseURL,\n },\n authenticationCallback\n )\n\n const client = new OroClient(\n toolbox,\n tellerService!,\n vaultService!,\n guardService!,\n searchService!,\n practiceService!,\n consultService!,\n workflowService!,\n diagnosisService!,\n authenticationCallback\n )\n\n return client\n}\n\nexport { OroClient } from './client'\nexport * from 'oro-sdk-apis'\nexport * from './models'\nexport * from './helpers'\nexport * from './services'\nexport { OroToolboxNamespace }\nexport default init\n"],"names":["undefined","personalMetaToPrefix","MetadataCategory","Personal","ChildPersonal","OtherPersonal","identificationToPersonalInformations","data","category","prefix","birthday","firstname","gender","name","phone","zip","hid","pharmacy","address","toActualObject","ret","Object","entries","fields","forEach","key","field","displayedAnswer","answer","updatePersonalIntoPopulatedWorkflowData","infos","JSON","parse","stringify","kind","extractISOLocalityForConsult","answers","arrAnswersWithLocality","flatMap","currentAnswerPage","arrCountryFields","keys","filter","workflowFieldName","indexOf","flat","arrProvinceFields","arrConsultLocalFields","map","currentFieldName","item","arrSelectedLocality","currentSelectedLocality","startsWith","length","console","log","allowedLocalityPatterns","finalLocality","reduce","extractedSelected","exec","indexSelectedPriority","isoSelectedValue","extractedFinal","indexFinalPriority","isoFinalValue","sessionPrivateKeyPrefix","sessionStorePrivateKeyName","id","IncompleteAuthentication","Error","MissingGrant","MissingLockbox","MissingLockboxOwner","AssociatedLockboxNotFound","WorkflowAnswersMissingError","filterTriggeredAnsweredWithKind","workflowData","selectedAnswers","flattenedAnswers","flattenSelectedAnswers","triggeredQuestionsWithKind","fromEntries","pages","a","questions","question","isTriggered","triggers","samePageAnswers","prev","cur","res","questionFieldName","getWorkflowDataByCategory","triggeredQuestions","Promise","all","e","k","v","populateWorkflowField","then","populatedValue","workflowCreatedAt","createdAt","workflowId","locale","err","error","getImagesFromIndexDb","getMany","answerValue","text","value","images","image","imageData","resolve","trigger","includes","linearAnswers","push","values","getInitialisedSelectedAnswers","workflow","useDefault","page","defaultValue","fillWorkflowFromPopulatedWorkflow","populatedWorkflow","filledWorkflow","pageIdx","MAX_RETRIES","registerPatient","patientUuid","consultRequest","oroClient","masterKey","recoveryQA","consult","lockboxUuid","practitionerAdmin","retry","identity","errorsThrown","setTimeout","practiceClient","practiceGetFromUuid","uuidPractice","uuidAdmin","practiceGetPractitioners","practitioners","getOrCreatePatientConsultationUuid","getOrCreatePatientLockbox","guardClient","identityGet","grantLockbox","grantPromises","practitioner","uuid","consultIndex","IndexKey","ConsultationLockbox","grant","lockboxOwnerUuid","consultationId","consultIndexPromises","vaultIndexAdd","storeImageAliases","storePatientData","isoLanguageRequired","recoveryMasterKey","updateMasterKey","recoverySecurityQuestions","updateSecurityQuestions","recoverySecurityAnswers","buildConsultSearchIndex","consultClient","updateConsultByUUID","statusMedical","MedicalStatus","New","cleanIndex","practiceGetPayment","idStripeInvoiceOrPaymentIntent","payment","uuidConsult","getConsultByUUID","consultCreate","getGrants","grants","vaultClient","lockboxCreate","isoLanguage","getOrInsertJsonData","Raw","contentType","Consultation","documentType","DocumentType","PopulatedWorkflowData","Medical","consultationIds","extractAndStorePersonalWorkflowData","Preference","dataUuids","nonNullImages","img","promises","ImageAlias","idbId","extractPersonalInfoFromWorkflowData","personalInfoPopulatedWfData","childPersonalInfoPopulatedWfData","otherPersonalInfoPopulatedWfData","terms","shortId","personalInfo","childPersonalInfo","otherPersonalInfo","searchClient","index","decryptGrants","encryptedGrants","rsaKey","encryptedLockbox","uuidParse","base64DecryptToBytes","decryptConsultLockboxGrants","encryptedConsultLockboxes","base64DecryptToJson","encryptedIndexEntry","grantsTuple","grantTuples","filterGrantsWithLockboxMetadata","vaultIndex","forceRefresh","buildLegacyVaultIndex","indexConsults","consultGrant","consultGrants","lockboxMetadataGet","consults","setVaultIndex","info","OroClient","toolbox","tellerClient","workflowClient","diagnosisClient","authenticationCallback","cachedMetadataGrants","cachedManifest","signUp","email","password","practice","tosAndCpAcceptance","tokenData","subscription","skipEmailValidation","rsa","CryptoRSA","privateKey","symmetricEncryptor","CryptoChaCha","fromPassphrase","recoveryPassword","bytesEncryptToBase64Payload","hashedPassword","hashStringToBase64","emailConfirmed","signupRequest","practiceUuid","toLowerCase","publicKey","encodeToBase64","identityCreate","recoveryLogin","symetricEncryptor","sessionStorage","setItem","confirmEmail","accessToken","setTokens","whoAmI","claims","identityUpdate","sub","signIn","otp","tokenRequest","authToken","userUuid","recoverPrivateKeyFromPassword","resumeSession","recoveryPayload","getItem","recoveryKey","symmetricDecryptor","base64PayloadDecryptToBytes","fromKey","localEncryptToJsonPayload","chaChaKey","encryptedData","jsonEncryptToBase64Payload","encryptedKey","encryptToBytes","localDecryptJsonPayload","decryptedData","base64PayloadDecryptToJson","signOut","secrets","refreshToken","authLogout","buildVaultIndex","forceUpdateIndexEntries","indexConsultLockbox","alert","indexOwnerUuid","base64IndexOwnerPubKey","rsaPub","decodeFromBase64","encryptedIndex","keyString","uniqueHash","timestamp","jsonWithPubEncryptToBase64","find","vaultIndexPut","indexSnapshotAdd","cleanedIndex","c","vaultIndexSnapshotPut","granteeUuid","getCachedSecretCryptor","secret","base64GranteePublicKey","granteePublicKey","granteeEncryptedSecret","bytesWithPubEncryptToBase64","request","encryptedSecret","lockboxGrant","createMessageData","message","previousDataUuid","author","encryptedPrivateMeta","meta","Message","publicMetadata","privateMetadata","lockboxDataStore","createMessageAttachmentData","Uint8Array","arrayBuffer","lastModified","size","fileName","type","createConsultationAttachmentData","createBytesData","createJsonData","privateMeta","forceReplace","lockboxManifestGet","manifest","dataUuid","getJsonData","lockboxDataGet","encryptedPayload","getBytesData","filterString","vaultIndexGet","grantsByConsultLockbox","decryptedConsults","grantsGet","decryptedGrants","findIndex","lockboxSecretGet","sharedSecret","cryptor","getPersonalInformationsFromConsultId","getMetaCategoryFromConsultId","getMedicalDataFromConsultId","getLockboxManifest","entry","metadata","getPersonalInformations","userId","lockbox","identificationDataUuid","getGrantFromConsultId","getIdentityFromConsultId","expandPrivateMetadata","manifestKey","createPersonalInformations","createUserPreference","preference","getDataFromGrant","getUserPreferenceFromConsultId","getUserPreference","getRecoveryDataFromConsultId","Recovery","getRecoveryData","getAssignedConsultations","promise","getPastConsultationsFromConsultId","consultationsInLockbox","consultId","getPatientConsultationData","getPatientPrescriptionsList","getPatientDocumentsList","Prescription","getPatientResultsList","Result","getPatientTreatmentPlans","TreatmentPlan","getPatientTreatmentPlanByUuid","treatmentPlanId","filters","recoverPrivateKeyFromSecurityQuestions","threshold","shards","answeredShards","shard","indexOfQuestion","securityQuestion","securityAnswer","reconstructSecret","recoverPrivateKeyFromMasterKey","securityQuestionPayload","breakSecretIntoShards","updateRequest","updatePassword","newPassword","oldPassword","passwordPayload","masterKeyPayload","updatedIdentity","CliniaService","url","apiKey","api","AxiosService","headers","placeSearch","searchOptions","post","params","placeMatch","places","place","wasmPath","init","tellerBaseURL","vaultBaseURL","guardBaseURL","searchBaseURL","practiceBaseURL","consultBaseURL","workflowBaseURL","diagnosisBaseURL","initApis","tellerService","practiceService","consultService","vaultService","guardService","searchService","workflowService","diagnosisService","client"],"mappings":"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"}
1
+ {"version":3,"file":"oro-sdk.cjs.development.js","sources":["../node_modules/regenerator-runtime/runtime.js","../src/helpers/client.ts","../src/models/error.ts","../src/helpers/workflow.ts","../src/helpers/patient-registration.ts","../src/helpers/vault-grants.ts","../src/sdk-revision/client.ts","../src/client.ts","../src/services/external/clinia.ts","../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","import {\n PopulatedWorkflowData,\n MetadataCategory,\n SelectedAnswersData,\n} from 'oro-sdk-apis'\nimport { PersonalInformations } from '../models/client'\n\nconst personalMetaToPrefix = {\n [MetadataCategory.Personal]: 'you',\n [MetadataCategory.ChildPersonal]: 'child',\n [MetadataCategory.OtherPersonal]: 'other',\n}\n\n/**\n * This function extract PersonalInformations from data input object coming from workflow\n * @param data extracted from WorkflowData\n * @returns PersonalInformations of a patient\n */\nexport function identificationToPersonalInformations(\n data: any,\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n): PersonalInformations {\n const prefix = personalMetaToPrefix[category]\n\n return {\n birthday: data[`${prefix}Birthday`],\n firstname: data[`${prefix}Firstname`],\n gender: data[`${prefix}Gender`],\n name: data[`${prefix}Name`],\n phone: data[`${prefix}Phone`],\n zip: data[`${prefix}Zip`],\n hid: data[`${prefix}HID`] ?? data[`${prefix}ID`], // This is done for backward compatibility (historically youID was used)\n pharmacy: data[`${prefix}Pharmacy`],\n address: data[`${prefix}Address`],\n }\n}\n\nexport function toActualObject(data: PopulatedWorkflowData) {\n const ret: any = {}\n\n Object.entries(data.fields).forEach(([key, field]) => {\n ret[key] = field.displayedAnswer ? field.displayedAnswer : field.answer\n })\n\n return ret\n}\n\n/**\n * This function update a PopulatedWorkflowData with PersonalInformations\n * @param infos the personal informations\n * @param data the PopulatedWorkflowData\n * @returns an updated PopulatedWorkflowData\n */\nexport function updatePersonalIntoPopulatedWorkflowData(\n infos: PersonalInformations,\n data: PopulatedWorkflowData,\n category:\n | MetadataCategory.Personal\n | MetadataCategory.ChildPersonal\n | MetadataCategory.OtherPersonal\n) {\n const prefix = personalMetaToPrefix[category]\n\n const ret = JSON.parse(JSON.stringify(data)) // deep copy PopulatedWorkflowData\n\n if (infos.birthday && ret.fields[`${prefix}Birthday`])\n ret.fields[`${prefix}Birthday`].answer = infos.birthday\n if (infos.firstname && ret.fields[`${prefix}Firstname`])\n ret.fields[`${prefix}Firstname`].answer = infos.firstname\n if (infos.gender && ret.fields[`${prefix}Gender`])\n ret.fields[`${prefix}Gender`].answer = infos.gender\n if (infos.name && ret.fields[`${prefix}Name`])\n ret.fields[`${prefix}Name`].answer = infos.name\n if (infos.phone && ret.fields[`${prefix}Phone`])\n ret.fields[`${prefix}Phone`].answer = infos.phone\n if (infos.zip && ret.fields[`${prefix}Zip`])\n ret.fields[`${prefix}Zip`].answer = infos.zip\n if (infos.hid) {\n if (ret.fields[`${prefix}HID`]) {\n ret.fields[`${prefix}HID`].answer = infos.hid\n } else if (ret.fields[`${prefix}ID`]) {\n // This is done for backward compatibility (historically youID was used)\n ret.fields[`${prefix}ID`].answer = infos.hid\n } else {\n // If does not exist create it\n ret.fields[`${prefix}HID`] = { kind: 'text', answer: infos.hid }\n }\n }\n\n return ret\n}\n\n/**\n * This function extract an ISO 3166-1 alpha-2 country and subdivision code from data input object coming from workflow\n * @param answers answers from the WorkflowData\n * @returns an ISO 3166 alpha-2 code or undefined\n */\nexport function extractISOLocalityForConsult(\n answers?: SelectedAnswersData\n): string | undefined {\n if (!answers) {\n return undefined\n }\n\n const arrAnswersWithLocality = answers\n .flatMap((currentAnswerPage) => {\n const arrCountryFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Country') !== -1\n )\n .flat()\n const arrProvinceFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Province') !== -1\n )\n .flat()\n const arrConsultLocalFields = Object.keys(currentAnswerPage)\n .filter(\n (workflowFieldName) =>\n workflowFieldName.indexOf('Locality') !== -1\n )\n .flat()\n //returning the actual selected values, skipping if their IDs are more complex than a string\n return [\n ...arrCountryFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ...arrProvinceFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ...arrConsultLocalFields.map(\n (currentFieldName) =>\n (typeof currentAnswerPage[currentFieldName] === 'string'\n ? currentAnswerPage[currentFieldName]\n : undefined) as string\n ),\n ]\n })\n .filter((item) => item !== undefined)\n\n const arrSelectedLocality = arrAnswersWithLocality.filter(\n (currentSelectedLocality) =>\n currentSelectedLocality.startsWith('isoLocalityConsult')\n )\n if (!arrSelectedLocality || arrSelectedLocality.length === 0) {\n console.log('no locality found in ' + arrSelectedLocality)\n return undefined\n }\n //to allow enforcing of an order, we will allow the following pattern in the isoLocalityConsult field name\n // isoLocalityConsult-QC-CA and isoLocalityConsult_1-QC-CA\n // or generally: isoLocalityConsult-<isoValue> or isoLocalityConsult_<priority>-<isoValue>\n const allowedLocalityPatterns = /isoLocalityConsult(?:_(?<indexPriority>\\d*))?-(?<isoValue>[a-zA-Z0-9]{2}-[a-zA-Z0-9]{1,3})/\n const finalLocality = arrSelectedLocality.reduce<string | undefined>(\n (finalLocality, currentSelectedLocality) => {\n const extractedSelected = allowedLocalityPatterns.exec(\n currentSelectedLocality\n )\n const [, indexSelectedPriority, isoSelectedValue] =\n extractedSelected ?? []\n if (!finalLocality) {\n return isoSelectedValue\n }\n\n const extractedFinal = allowedLocalityPatterns.exec(finalLocality)\n const [, indexFinalPriority, isoFinalValue] = extractedFinal ?? []\n //we only keep the old value if there's priority used\n // and the new value is of lower priority\n if (\n !indexSelectedPriority ||\n (indexFinalPriority &&\n indexFinalPriority > indexSelectedPriority)\n ) {\n return isoFinalValue\n }\n\n return isoSelectedValue\n },\n undefined\n )\n\n console.log('Picking locality ' + finalLocality)\n return finalLocality\n}\n\nconst sessionPrivateKeyPrefix = 'sess-pkey'\nexport function sessionStorePrivateKeyName(id: string): string {\n return sessionPrivateKeyPrefix + id\n}\n","export class IncompleteAuthentication extends Error {}\nexport class MissingGrant extends Error {}\nexport class MissingLockbox extends Error {}\nexport class MissingLockboxOwner extends Error {}\nexport class AssociatedLockboxNotFound extends Error {}\nexport class WorkflowAnswersMissingError extends Error {}\n","import { getMany } from 'idb-keyval'\nimport { WorkflowAnswersMissingError } from '../models'\nimport {\n MetadataCategory,\n PopulatedWorkflowData,\n PopulatedWorkflowField,\n QuestionData,\n SelectedAnswerData,\n SelectedAnswersData,\n WorkflowData,\n WorkflowPageData,\n WorkflowUploadedImage,\n} from 'oro-sdk-apis'\n\nexport async function filterTriggeredAnsweredWithKind(\n workflowData: WorkflowData,\n kind:\n | 'text'\n | 'text-area'\n | 'text-select-group'\n | 'date'\n | 'number'\n | 'images'\n | 'images-alias'\n | 'body-parts'\n | 'pharmacy-picker'\n | 'online-pharmacy-picker'\n): Promise<SelectedAnswerData[]> {\n if (!workflowData.selectedAnswers) throw WorkflowAnswersMissingError\n // Flattens the list of answered questions\n let flattenedAnswers = flattenSelectedAnswers(workflowData.selectedAnswers)\n // Generates a list of applicable questions\n let triggeredQuestionsWithKind = Object.fromEntries(\n workflowData.pages\n .map((a) => {\n return Object.entries(a.questions).filter(\n ([_, question]) => isTriggered(question.triggers || [], flattenedAnswers) && question.kind === kind\n )\n })\n .flat()\n )\n\n const samePageAnswers = workflowData.selectedAnswers.reduce((prev, cur) => {\n return { ...prev, ...cur }\n }, {})\n\n const res = Object.keys(triggeredQuestionsWithKind).map((questionFieldName) => {\n return samePageAnswers[questionFieldName]\n })\n\n return res\n}\n\n/**\n * Filters and Populates the `selectedAnswers` from the workflow by\n * Cross-referencing the `MetaCategory` of the answer's respective question\n * Populates the fields labels and values that are of radio, dropdown and checkbox types\n *\n * @param workflowData\n * @param category\n * @returns An array of record key, value pairs\n */\nexport async function getWorkflowDataByCategory(\n workflowData: WorkflowData,\n category: MetadataCategory\n): Promise<PopulatedWorkflowData> {\n if (!workflowData.selectedAnswers) throw WorkflowAnswersMissingError\n\n // Flattens the list of answered questions\n let flattenedAnswers = flattenSelectedAnswers(workflowData.selectedAnswers)\n // Generates a list of applicable questions\n let triggeredQuestions = Object.fromEntries(\n workflowData.pages\n .map((a) => {\n return Object.entries(a.questions).filter(([_, question]) =>\n isTriggered(question.triggers || [], flattenedAnswers)\n )\n })\n .flat()\n )\n\n const fields: Record<string, PopulatedWorkflowField> = {}\n\n // Generates the answers of the specified category and adds the appropriate values if any are missing\n return Promise.all(\n workflowData.selectedAnswers\n .map((e) => Object.entries(e))\n .flat()\n .filter(([k, v]) => triggeredQuestions[k] && triggeredQuestions[k]['metaCategory'] === category)\n .map(([k, v]) => {\n return populateWorkflowField(triggeredQuestions[k], v).then((populatedValue) => {\n fields[k] = populatedValue\n })\n })\n )\n .then(() => {\n const ret: PopulatedWorkflowData = {\n workflowCreatedAt: workflowData.createdAt,\n workflowId: workflowData.id,\n locale: workflowData.locale,\n fields,\n }\n return ret\n })\n .catch((err) => {\n console.error(`Error while extracting ${category} data from workflow`, err)\n throw err\n })\n}\n\nexport async function getImagesFromIndexDb(answer: SelectedAnswerData): Promise<WorkflowUploadedImage[]> {\n return await getMany<WorkflowUploadedImage>((answer as any[]).map((v) => v.id ?? v) as string[])\n}\n\n/**\n * (If applicable) Based on the question kind, and the answer type this function will add and replace the appropriate fields to the\n * field values if they are radio, dropdown and checkbox fields\n *\n *\n * @param question\n * @param answerValue\n * @returns\n */\nasync function populateWorkflowField(\n question: QuestionData,\n answerValue: SelectedAnswerData\n): Promise<PopulatedWorkflowField> {\n let answer: any\n let displayedAnswer: string | string[] | undefined = undefined\n switch (question.kind) {\n case 'text-select-group':\n if (question.answers) {\n displayedAnswer = `${answerValue[0]} ${question.answers[answerValue[1] as string].text}`\n }\n answer = answerValue\n break\n case 'radio':\n case 'radio-card':\n case 'select':\n if (question.answers) {\n displayedAnswer = question.answers[answerValue as string].text\n }\n\n answer = answerValue\n break\n case 'multiple':\n case 'checkbox-group':\n displayedAnswer = (answerValue as string[]).map((value) => {\n if (question.answers) {\n return question.answers[value].text\n }\n\n throw new WorkflowAnswersMissingError()\n })\n\n answer = answerValue\n break\n case 'images':\n answer = await getImagesFromIndexDb(answerValue).then((images) =>\n images.map((image) => {\n const { name, imageData } = image\n\n return { name, imageData }\n })\n )\n break\n default:\n answer = answerValue\n }\n\n return Promise.resolve({\n answer,\n displayedAnswer,\n kind: question.kind,\n })\n}\n\nexport function isTriggered(triggers: string[], answers: string[]): boolean {\n for (let trigger of triggers) {\n if (!answers.includes(trigger)) {\n return false\n }\n }\n return true\n}\n\nexport function flattenSelectedAnswers(answers: SelectedAnswersData) {\n const linearAnswers: SelectedAnswerData[] = []\n\n for (const answer of answers) {\n linearAnswers.push(...Object.values(answer))\n }\n\n return linearAnswers.flat(1)\n}\n\n/**\n * This function helps you to get a valid workflow selectedAnswers structure\n * @param workflow the workflow data to use to initialize selectedAnswers\n * @param useDefault use workflow default values or not (this is used to avoid having unset values to appear in summaries)\n * @returns a valid selectedAnswers structure\n */\nexport function getInitialisedSelectedAnswers(workflow: WorkflowData, useDefault: boolean = true) {\n return workflow.pages.map((page) => {\n const ret: any = {}\n for (const [id, question] of Object.entries(page.questions)) {\n if (question.kind === 'body-parts') {\n ret[id] = useDefault ? [] : undefined\n } else {\n ret[id] = useDefault && question.defaultValue ? question.defaultValue : undefined\n }\n }\n return ret\n })\n}\n\nexport function fillWorkflowFromPopulatedWorkflow(workflow: WorkflowData, populatedWorkflow: PopulatedWorkflowData) {\n const filledWorkflow = JSON.parse(JSON.stringify(workflow))\n\n if (!filledWorkflow.selectedAnswers) {\n filledWorkflow.selectedAnswers = getInitialisedSelectedAnswers(filledWorkflow, false)\n }\n\n filledWorkflow.pages.forEach((page: WorkflowPageData, pageIdx: number) => {\n const ret: any = {}\n for (const [id] of Object.entries(page.questions)) {\n if (populatedWorkflow.fields[id]) {\n if (filledWorkflow.selectedAnswers)\n filledWorkflow.selectedAnswers[pageIdx][id] = populatedWorkflow.fields[id].answer as\n | string\n | string[]\n }\n }\n })\n\n return filledWorkflow\n}\n","import {\n Consult,\n ConsultationImageMeta,\n ConsultationMeta,\n ConsultRequest,\n DocumentType,\n IdentityResponse,\n IndexKey,\n MedicalMeta,\n MedicalStatus,\n MetadataCategory,\n PersonalMeta,\n PopulatedWorkflowData,\n Practitioner,\n PreferenceMeta,\n RawConsultationMeta,\n Term,\n Terms,\n Uuid,\n VaultIndex,\n WorkflowData,\n} from 'oro-sdk-apis'\nimport {\n filterTriggeredAnsweredWithKind,\n getImagesFromIndexDb,\n getWorkflowDataByCategory,\n identificationToPersonalInformations,\n OroClient,\n RegisterPatientOutput,\n toActualObject,\n} from '..'\n\nconst MAX_RETRIES = 15\n\n/**\n * Completes a registration for a user retrying the complete flow a maximum of 15 times\n *\n * @description The order of importance when registering:\n * Creates a consultation if none exist\n * Retrieves or create's a lockbox if none exist\n * Grants the lockbox (if new) to all practitioners in the practice\n * Stores or fetches the patient data (without images)\n * Indexes the lockbox to the consult for all practitioners (done after inserting since index can be rebuilt from grants)\n * Stores the image data - done last since the majority of failure cases occur here\n * Creates the recovery payloads if they don't exist\n *\n * @param patientUuid\n * @param consultRequest\n * @param workflow\n * @param oroClient\n * @param masterKey\n * @param recoveryQA\n * @returns the successful registration\n */\nexport async function registerPatient(\n patientUuid: Uuid,\n consultRequest: ConsultRequest,\n workflow: WorkflowData,\n oroClient: OroClient,\n masterKey?: Uuid,\n recoveryQA?: {\n recoverySecurityQuestions: string[]\n recoverySecurityAnswers: string[]\n }\n): Promise<RegisterPatientOutput> {\n let consult: Consult | undefined = undefined\n let lockboxUuid: Uuid | undefined = undefined\n let practitionerAdmin: Uuid | undefined = undefined\n let retry = MAX_RETRIES\n let identity: IdentityResponse | undefined = undefined\n let errorsThrown: Error[] = []\n\n for (; retry > 0; retry--) {\n try {\n // Wait a bit each retry (we also want the first one to wait)\n await new Promise((resolve) => setTimeout(resolve, 2000))\n\n // Retrieving practitioners\n if (!practitionerAdmin)\n practitionerAdmin = (await oroClient.practiceClient.practiceGetFromUuid(consultRequest.uuidPractice))\n .uuidAdmin\n\n let practitioners: Practitioner[] = await oroClient.practiceClient\n .practiceGetPractitioners(consultRequest.uuidPractice)\n .catch((err) => {\n console.log(`Error retrieving practitioners`, err)\n return []\n })\n\n // Creating consult\n if (!consult) {\n consult = await getOrCreatePatientConsultationUuid(consultRequest, oroClient)\n }\n\n // Creating lockbox\n if (!lockboxUuid) lockboxUuid = await getOrCreatePatientLockbox(oroClient)\n\n if (!identity) identity = await oroClient.guardClient.identityGet(patientUuid)\n\n await oroClient.grantLockbox(practitionerAdmin, lockboxUuid).catch((err) => {\n console.error(`Error while granting lockbox to practitioner admin ${practitionerAdmin}`, err)\n // if we cannot grant to the admin, then the registration will fail\n errorsThrown.push(err)\n })\n\n // Patient Grant to practice\n let grantPromises = practitioners\n .filter((practitioner) => practitioner.uuid !== practitionerAdmin)\n .map(async (practitioner) => {\n return oroClient.grantLockbox(practitioner.uuid, lockboxUuid!).catch((err) => {\n console.error(`Error while granting lockbox to practitioner`, err)\n // Acceptable to continue as admin has already been granted, but we should still retry until the last retry remains\n if (retry <= 1) return\n errorsThrown.push(err)\n })\n })\n\n const consultIndex: VaultIndex = {\n [IndexKey.ConsultationLockbox]: [\n {\n grant: {\n lockboxUuid,\n lockboxOwnerUuid: patientUuid,\n },\n consultationId: consult.uuid,\n },\n ],\n }\n\n // the index will identify in which lockbox a consultation resides\n let consultIndexPromises = practitioners.map(async (practitioner) => {\n return oroClient.vaultIndexAdd(consultIndex, practitioner.uuid).catch((err) => {\n console.error(\n `[SDK: registration] Error while adding to the practitioner's index ${practitioner.uuid}`,\n err\n )\n // Acceptable to continue as the index can be rebuilt, but we should still retry until the last retry remains\n if (retry <= 1) return\n else errorsThrown.push(err)\n })\n })\n\n await storeImageAliases(consult.uuid, lockboxUuid, workflow, oroClient).catch((err) => {\n console.error('[SDK: registration] Some errors happened during image upload', err)\n // Acceptable to continue as images can be requested during the consultation, but we should still retry until the last retry remains\n if (retry <= 1) return\n else errorsThrown.push(err)\n })\n\n await storePatientData(\n consult.uuid,\n consultRequest.isoLanguageRequired,\n lockboxUuid,\n workflow,\n oroClient\n ).catch((err) => {\n console.error('[SDK: registration] Some errors happened during patient data upload', err)\n errorsThrown.push(err)\n })\n\n if (masterKey && !identity?.recoveryMasterKey) {\n // generate and store recovery payload and updates the identity\n identity = await oroClient.updateMasterKey(patientUuid, masterKey, lockboxUuid).catch((err) => {\n console.error(`[SDK: registration] Error while updating master key`, err)\n /// it's acceptable to continue registration (return old identity)\n if (retry <= 1) return\n errorsThrown.push(err)\n return identity\n })\n } else {\n // we did not set the master key so we do not return it\n masterKey = undefined\n }\n\n if (recoveryQA && !identity?.recoverySecurityQuestions)\n // Patient security question recovery threshold is 2 answers and updates the identity\n identity = await oroClient\n .updateSecurityQuestions(\n patientUuid,\n recoveryQA.recoverySecurityQuestions,\n recoveryQA.recoverySecurityAnswers,\n 2\n )\n .catch((err) => {\n console.error(`[SDK: registration] Error while updating security questions`, err)\n /// it's acceptable to continue registration (return old identity)\n if (retry <= 1) return\n errorsThrown.push(err)\n return identity\n })\n\n await Promise.all([...grantPromises, ...consultIndexPromises])\n\n await buildConsultSearchIndex(consult, workflow, oroClient).catch((err) => {\n console.error(\n '[SDK: registration] personal information not found or another error occured during search indexing',\n err\n )\n if (retry <= 1) return // this statement is to avoid failing the registration due to the failure in search indexing the consult, this practically implements a soft retry\n errorsThrown.push(err)\n })\n\n if (errorsThrown.length > 0) throw errorsThrown\n\n // Deem the consultation as ready\n await oroClient.consultClient.updateConsultByUUID(consult.uuid, {\n statusMedical: MedicalStatus.New,\n })\n\n // if we got through the complete flow, the registration succeeded\n break\n } catch (err) {\n console.error(`[SDK] Error occured during registration: ${err}, retrying... Retries remaining: ${retry}`)\n errorsThrown = []\n continue\n }\n }\n\n if (retry <= 0) {\n console.error('[SDK] registration failed: MAX_RETRIES reached')\n throw 'RegistrationFailed'\n }\n\n console.log('Successfully Registered')\n await oroClient.cleanIndex()\n return {\n masterKey,\n consultationId: consult!.uuid,\n lockboxUuid: lockboxUuid!,\n }\n}\n\n/**\n * Creates a consultation if one has not been created and fails to be retrieved by the payment intent\n * @param consult\n * @param oroClient\n * @returns the consult Uuid\n */\nasync function getOrCreatePatientConsultationUuid(consult: ConsultRequest, oroClient: OroClient): Promise<Consult> {\n let payment = await oroClient.practiceClient.practiceGetPayment(\n consult.uuidPractice,\n consult.idStripeInvoiceOrPaymentIntent\n )\n if (payment && payment.uuidConsult) {\n return oroClient.consultClient.getConsultByUUID(payment.uuidConsult).catch((err) => {\n console.error('Error while retrieving consult', err)\n throw err\n })\n } else {\n return await oroClient.consultClient.consultCreate(consult).catch((err) => {\n console.error('Error while creating consult', err)\n throw err\n })\n }\n}\n\n/**\n * Creates a new lockbox for the patient if they do not have any, otherwise, use the first (and only one)\n * @param oroClient\n * @returns the lockbox Uuid\n */\nasync function getOrCreatePatientLockbox(oroClient: OroClient): Promise<Uuid> {\n let grants = await oroClient.getGrants(undefined, true)\n if (grants.length > 0) {\n console.log('The grant has already been created, skipping lockbox create step')\n return grants[0].lockboxUuid!\n } else\n return (\n await oroClient.vaultClient.lockboxCreate().catch((err) => {\n console.error('Error while creating lockbox', err)\n throw err\n })\n ).lockboxUuid\n}\n\n/**\n * Store all patient related information into his/her lockbox\n * @param consultationId The consultation id\n * @param isoLanguage the prefered language of communication (ISO 639-3 https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes)\n * @param lockboxUuid the lockbox uuid to store data in\n * @param workflow the workflow used to extract informations\n * @param oroClient an oroClient instance\n * @returns\n */\nasync function storePatientData(\n consultationId: Uuid,\n isoLanguage: string,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient\n): Promise<(Uuid | void)[]> {\n // Create and store registration data\n return Promise.all([\n // Storing Raw data first\n oroClient.getOrInsertJsonData<RawConsultationMeta>(\n lockboxUuid,\n workflow,\n {\n category: MetadataCategory.Raw,\n contentType: 'application/json',\n consultationId,\n },\n {}\n ),\n getWorkflowDataByCategory(workflow, MetadataCategory.Consultation).then((data) =>\n oroClient.getOrInsertJsonData<ConsultationMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId, // TODO: deprecated. Will finally only be in privateMetadata\n },\n { consultationId }\n )\n ),\n getWorkflowDataByCategory(workflow, MetadataCategory.Medical).then((data) =>\n oroClient.getOrInsertJsonData<MedicalMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Medical,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId!],\n },\n {}\n )\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.Personal,\n oroClient\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.ChildPersonal,\n oroClient\n ),\n extractAndStorePersonalWorkflowData(\n workflow,\n lockboxUuid,\n consultationId,\n MetadataCategory.OtherPersonal,\n oroClient\n ),\n oroClient.getOrInsertJsonData<PreferenceMeta>(\n lockboxUuid,\n { isoLanguage },\n {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n },\n {}\n ),\n ]).then((dataUuids) => dataUuids.flat())\n}\n\nasync function storeImageAliases(\n consultationId: Uuid,\n lockboxUuid: Uuid,\n workflow: WorkflowData,\n oroClient: OroClient\n): Promise<(Uuid | void)[]> {\n const images = await getImagesFromIndexDb((await filterTriggeredAnsweredWithKind(workflow, 'images-alias')).flat())\n\n const nonNullImages = images.filter((img) => !!img)\n\n if (images.length !== nonNullImages.length) {\n console.error('[SDK] Some images have not been found, they have been skipped.')\n }\n\n let promises = nonNullImages.map((image) => {\n return oroClient.getOrInsertJsonData<ConsultationImageMeta>(\n lockboxUuid,\n image,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.ImageAlias,\n consultationId,\n idbId: image.idbId as string,\n },\n {}\n )\n })\n return Promise.all(promises)\n}\n\n/**\n * Extracts the workflow MetadataCategory for Personal, ChildPersonal and OtherPersonal\n * then stores it in the vault\n *\n * @param workflow\n * @param lockboxUuid\n * @param category\n * @returns The data uuid\n */\nexport async function extractAndStorePersonalWorkflowData(\n workflow: WorkflowData,\n lockboxUuid: Uuid,\n consultationId: Uuid,\n category: MetadataCategory.Personal | MetadataCategory.ChildPersonal | MetadataCategory.OtherPersonal,\n oroClient: OroClient\n): Promise<Uuid | void> {\n return getWorkflowDataByCategory(workflow, category as unknown as MetadataCategory).then((data) => {\n if (Object.keys(data.fields).length === 0) return\n return oroClient.getOrInsertJsonData<PersonalMeta>(\n lockboxUuid,\n data,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId],\n },\n {}\n )\n })\n}\n\n/**\n * Given workflow data, it populates it with Personal, ChildPersonal, and OtherPersonal workflow data\n * @param workflow\n */\nexport async function extractPersonalInfoFromWorkflowData(workflow: WorkflowData): Promise<{\n personalInfoPopulatedWfData: PopulatedWorkflowData\n childPersonalInfoPopulatedWfData: PopulatedWorkflowData\n otherPersonalInfoPopulatedWfData: PopulatedWorkflowData\n}> {\n return Promise.all([\n getWorkflowDataByCategory(workflow, MetadataCategory.Personal),\n getWorkflowDataByCategory(workflow, MetadataCategory.ChildPersonal),\n getWorkflowDataByCategory(workflow, MetadataCategory.OtherPersonal),\n ]).then(([personalInfoPopulatedWfData, childPersonalInfoPopulatedWfData, otherPersonalInfoPopulatedWfData]) => {\n return {\n personalInfoPopulatedWfData,\n childPersonalInfoPopulatedWfData,\n otherPersonalInfoPopulatedWfData,\n }\n })\n}\n\n/**\n * Creates the search index for the first name, last name, and the short id of the given consultation\n * @param consult the consultation to be search indexed\n * @param workflow the workflow data\n * @param oroClient\n */\nexport async function buildConsultSearchIndex(consult: Consult, workflow: WorkflowData, oroClient: OroClient) {\n let terms: Terms = [\n <Term>{\n kind: 'consult-shortid',\n value: consult.shortId,\n },\n ]\n\n const { personalInfoPopulatedWfData, childPersonalInfoPopulatedWfData, otherPersonalInfoPopulatedWfData } =\n await extractPersonalInfoFromWorkflowData(workflow)\n\n const personalInfo = identificationToPersonalInformations(\n toActualObject(personalInfoPopulatedWfData),\n MetadataCategory.Personal\n )\n const childPersonalInfo = identificationToPersonalInformations(\n toActualObject(childPersonalInfoPopulatedWfData),\n MetadataCategory.ChildPersonal\n )\n const otherPersonalInfo = identificationToPersonalInformations(\n toActualObject(otherPersonalInfoPopulatedWfData),\n MetadataCategory.OtherPersonal\n )\n\n terms.push(\n <Term>{\n kind: 'first-name',\n value: personalInfo.firstname,\n },\n <Term>{\n kind: 'last-name',\n value: personalInfo.name,\n }\n )\n\n if (childPersonalInfo.firstname && childPersonalInfo.name) {\n terms.push(\n <Term>{\n kind: 'first-name',\n value: childPersonalInfo.firstname,\n },\n <Term>{\n kind: 'last-name',\n value: childPersonalInfo.name,\n }\n )\n }\n\n if (otherPersonalInfo.firstname && otherPersonalInfo.name) {\n terms.push(\n <Term>{\n kind: 'first-name',\n value: otherPersonalInfo.firstname,\n },\n <Term>{\n kind: 'last-name',\n value: otherPersonalInfo.name,\n }\n )\n }\n\n await oroClient.searchClient.index(consult.uuid, terms)\n}\n","import { CryptoRSA, uuidParse} from \"oro-toolbox\"\nimport { EncryptedIndexEntry, Grant, IndexConsultLockbox } from \"oro-sdk-apis\"\n\n/**\n * Decrypts and returns the encrypted grants\n * If something went wrong during decryption, that grant will be removed from the list\n *\n * @param encryptedGrants: an array of encrypted grants\n * @param rsaKey: the rsa key used to decrypt the encrypted grants\n * @returns an array of grants\n */\nexport function decryptGrants(encryptedGrants: Grant[], rsaKey: CryptoRSA): Grant[] {\n return encryptedGrants\n .map(grant => {\n if (grant.encryptedLockbox && !grant.lockboxUuid) {\n try {\n grant.lockboxUuid = uuidParse(\n rsaKey.base64DecryptToBytes(grant.encryptedLockbox)\n )\n } catch (e) {\n console.error('[sdk:index] The grant could not be decrypted or was not a valid UUID: ', e)\n }\n }\n return grant\n })\n .filter(grant => grant.lockboxUuid)\n}\n\n/**\n * Decrypts the encrypted consult lockboxes and returns their grants\n * If something went wrong during decryption, that grant will be removed from the list\n *\n * @param encryptedConsultLockboxes: an array of encrypted entries\n * @param rsaKey: the rsa key used to decrypt the encrypted entries\n * @returns an array of grants\n */\nexport function decryptConsultLockboxGrants(encryptedConsultLockboxes: EncryptedIndexEntry[], rsaKey: CryptoRSA): Grant[] {\n return encryptedConsultLockboxes\n .map(encryptedConsultLockboxes => {\n try {\n return [true, (rsaKey.base64DecryptToJson(\n encryptedConsultLockboxes.encryptedIndexEntry\n ) as IndexConsultLockbox).grant]\n } catch(e) {\n console.error('[sdk:index] The consult lockbox grant could not be decrypted: ', e)\n return [false, undefined] // if decryption fails, we want to ignore the grant but not fail the call\n }\n })\n .filter(grantsTuple => grantsTuple[0])\n .map(grantTuples => grantTuples[1] as Grant)\n}","import { IndexKey, Grant, IndexConsultLockbox, MetadataCategory, VaultIndex } from 'oro-sdk-apis'\nimport { OroClient, Uuid } from '..'\n\n/**\n * @name filterGrantsWithLockboxMetadata\n * @description searches for the applied filters in the vault index\n * @param oroClient\n * @param filter: the metadata filter applied to each the lockboxes\n * @param vaultIndex: the index to which the filter will be applied\n * @param forceRefresh\n * @returns the filtered grants\n */\nexport async function filterGrantsWithLockboxMetadata(\n oroClient: OroClient,\n filter?: { consultationId: Uuid },\n vaultIndex?: VaultIndex,\n forceRefresh = false\n): Promise<Grant[]> {\n if (!vaultIndex || forceRefresh) {\n vaultIndex = await buildLegacyVaultIndex(oroClient)\n }\n if (vaultIndex[IndexKey.Consultation] && filter) {\n let indexConsults = (vaultIndex[IndexKey.Consultation] ?? [])\n .filter((consultGrant: { consultationId: Uuid }) => consultGrant.consultationId === filter.consultationId)\n .map((consultGrant: { consultationId: Uuid; grant: Grant }) => consultGrant.grant as Grant)\n return indexConsults as Grant[]\n } else {\n // No grants exist and the index has already been built\n return []\n }\n}\n\n/** Finds all grants for the logged user\n * requests a list of unique consultation ids for each lockbox the user has access to\n * builds and sets the index of consultations\n * @param oroClient\n * @returns the constructed vaultIndex\n */\nexport async function buildLegacyVaultIndex(oroClient: OroClient): Promise<VaultIndex> {\n let grants = await oroClient.getGrants()\n let consultGrants: IndexConsultLockbox[] = []\n for (let grant of grants) {\n let consults = (\n await oroClient.vaultClient.lockboxMetadataGet(grant.lockboxUuid!, ['consultationId'], [], {\n category: MetadataCategory.Consultation,\n })\n )[0] as Uuid[]\n\n consultGrants = [\n ...consultGrants,\n ...consults.map((consult: any) => ({\n ...consult,\n grant: {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid,\n },\n })),\n ]\n }\n\n let vaultIndex = {\n [IndexKey.Consultation]: consultGrants,\n }\n oroClient.setVaultIndex(vaultIndex)\n console.info('[sdk:index] Successfully Built Vault Index')\n return vaultIndex\n}\n","import {\n AuthTokenRequest,\n Consult,\n ConsultRequest,\n ConsultService,\n DataCreateResponse,\n DiagnosisService,\n Document,\n DocumentType,\n EncryptedIndexEntry,\n EncryptedVaultIndex,\n Grant,\n GuardService,\n IdentityCreateRequest,\n IdentityResponse,\n IndexConsultLockbox,\n IndexKey,\n LocalizedData,\n LockboxDataRequest,\n LockboxGrantRequest,\n LockboxManifest,\n ManifestEntry,\n Meta,\n Metadata,\n MetadataCategory,\n PersonalMeta,\n PopulatedWorkflowData,\n Practice,\n PracticeService,\n PreferenceMeta,\n RecoveryMeta,\n SearchService,\n SecretShard,\n TellerService,\n TokenData,\n TosAndCpAcceptanceRequest,\n Uuid,\n VaultIndex,\n VaultService,\n WorkflowData,\n WorkflowService,\n} from 'oro-sdk-apis'\nimport * as OroToolbox from 'oro-toolbox'\nimport { CryptoRSA } from 'oro-toolbox'\nimport { decryptConsultLockboxGrants, decryptGrants, registerPatient, sessionStorePrivateKeyName } from './helpers'\nimport {\n AssociatedLockboxNotFound,\n IncompleteAuthentication,\n LocalEncryptedData,\n MissingGrant,\n MissingLockbox,\n MissingLockboxOwner,\n RecoveryData,\n RegisterPatientOutput,\n UserPreference,\n} from './models'\nimport { buildLegacyVaultIndex, filterGrantsWithLockboxMetadata } from './sdk-revision'\n\nexport class OroClient {\n private rsa?: CryptoRSA\n private secrets: {\n lockboxUuid: string\n cryptor: OroToolbox.CryptoChaCha\n }[] = []\n private cachedMetadataGrants: {\n [filter: string]: Grant[]\n } = {}\n\n private cachedManifest: {\n [filter: string]: ManifestEntry[]\n } = {}\n\n private vaultIndex?: VaultIndex\n\n constructor(\n private toolbox: typeof OroToolbox,\n public tellerClient: TellerService,\n public vaultClient: VaultService,\n public guardClient: GuardService,\n public searchClient: SearchService,\n public practiceClient: PracticeService,\n public consultClient: ConsultService,\n public workflowClient: WorkflowService,\n public diagnosisClient: DiagnosisService,\n private authenticationCallback?: (err: Error) => void\n ) { }\n\n /**\n * clears the vaultIndex and cached metadata grants\n */\n public async cleanIndex() {\n this.vaultIndex = undefined\n this.cachedMetadataGrants = {}\n this.cachedManifest = {}\n }\n\n /**\n * Generates an RSA key pair and password payload (rsa private key encrypted with the password)\n * Calls Guard to sign up with the email address, password, practice, legal and token data\n *\n * @param email\n * @param password\n * @param practice\n * @param legal\n * @param tokenData\n * @returns\n */\n public async signUp(\n email: string,\n password: string,\n practice: Practice,\n tosAndCpAcceptance: TosAndCpAcceptanceRequest,\n tokenData?: TokenData,\n subscription?: boolean,\n skipEmailValidation?: boolean\n ): Promise<IdentityResponse> {\n this.rsa = new CryptoRSA()\n const privateKey = this.rsa.private()\n\n const symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(password)\n const recoveryPassword = symmetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n\n const hashedPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(password))\n\n const emailConfirmed = !!skipEmailValidation\n\n const signupRequest: IdentityCreateRequest = {\n practiceUuid: practice.uuid,\n email: email.toLowerCase(),\n emailConfirmed,\n password: hashedPassword,\n publicKey: this.toolbox.encodeToBase64(this.rsa.public()),\n recoveryPassword,\n tosAndCpAcceptance,\n tokenData,\n subscription,\n }\n\n const identity = await this.guardClient.identityCreate(signupRequest)\n\n if (identity.recoveryLogin) {\n //Ensure we can recover from a page reload\n let symetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(identity.recoveryLogin)\n sessionStorage.setItem(\n sessionStorePrivateKeyName(identity.id),\n symetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n )\n }\n\n return identity\n }\n\n /**\n * Parse the given accessToken claims by calling guard whoami and update theidentity to set it's emailConfirmed flag\n * @param accessToken\n * @returns The identity related to confirmedEmail\n */\n public async confirmEmail(accessToken: string): Promise<IdentityResponse> {\n this.guardClient.setTokens({ accessToken })\n const claims = await this.guardClient.whoAmI()\n return this.guardClient.identityUpdate(claims.sub, {\n emailConfirmed: true,\n })\n }\n\n /**\n * Calls Guard to sign in with the email address, password and one time password (if MFA is enabled)\n * Then recover's the rsa private key from the recovery payload\n *\n * @param practiceUuid\n * @param email\n * @param password\n * @param otp\n * @returns the user identity\n */\n public async signIn(practiceUuid: Uuid, email: string, password: string, otp?: string): Promise<IdentityResponse> {\n const hashedPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(password))\n const tokenRequest: AuthTokenRequest = {\n practiceUuid,\n email: email.toLowerCase(),\n password: hashedPassword,\n otp,\n }\n\n await this.guardClient.authToken(tokenRequest)\n const userUuid = (await this.guardClient.whoAmI()).sub\n\n // Updates the rsa key to the one generated on the backend\n await this.recoverPrivateKeyFromPassword(userUuid, password)\n return await this.guardClient.identityGet(userUuid)\n }\n\n /**\n * Will attempt to recover an existing login session and set back\n * the private key in scope\n */\n public async resumeSession() {\n const id = (await this.guardClient.whoAmI()).sub\n const recoveryPayload = sessionStorage.getItem(sessionStorePrivateKeyName(id))\n const recoveryKey = (await this.guardClient.identityGet(id)).recoveryLogin\n\n if (!recoveryKey || !recoveryPayload) throw IncompleteAuthentication\n\n const symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(recoveryKey)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * This function let's you encrypt locally an Object\n * @param value the Object to encrypt\n * @returns a LocalEncryptedData Object\n * @throws IncompleteAuthentication if rsa is not set\n * @calls authenticationCallback if rsa is not set\n */\n public localEncryptToJsonPayload(value: any): LocalEncryptedData {\n if (!this.rsa) {\n if (this.authenticationCallback) {\n this.authenticationCallback(new IncompleteAuthentication())\n }\n\n throw new IncompleteAuthentication()\n }\n\n const chaChaKey = new this.toolbox.CryptoChaCha()\n\n const encryptedData = chaChaKey.jsonEncryptToBase64Payload(value)\n const encryptedKey = this.toolbox.encodeToBase64(this.rsa.encryptToBytes(chaChaKey.key()))\n\n return { encryptedData, encryptedKey }\n }\n\n /**\n * This function let's you decrypt a LocalEncryptedData object\n * @param value a LocalEncryptedData object\n * @returns a decrypted Object\n * @throws IncompleteAuthentication if rsa is not set\n * @calls authenticationCallback if rsa is not set\n */\n public localDecryptJsonPayload({ encryptedKey, encryptedData }: LocalEncryptedData): any {\n if (!this.rsa) {\n if (this.authenticationCallback) {\n this.authenticationCallback(new IncompleteAuthentication())\n }\n\n throw new IncompleteAuthentication()\n }\n\n const chaChaKey = this.rsa.base64DecryptToBytes(encryptedKey)\n const decryptedData = this.toolbox.CryptoChaCha.fromKey(chaChaKey).base64PayloadDecryptToJson(encryptedData)\n\n return decryptedData\n }\n\n /**\n * Effectively kills your \"session\"\n */\n public async signOut() {\n this.rsa = undefined\n this.secrets = []\n this.guardClient.setTokens({\n accessToken: undefined,\n refreshToken: undefined,\n })\n await this.guardClient.authLogout()\n }\n\n /**\n * @name registerPatient\n * @description The complete flow to register a patient\n *\n * Steps:\n * 1. Create a consult (checks if payment has been done)\n * 2. Creates a lockbox\n * 3. Grants lockbox access to all practice personnel\n * 4. Creates secure identification, medical, onboarding data\n * 5. Generates and stores the rsa key pair and recovery payloads\n *\n * @param patientUuid\n * @param consult\n * @param workflow\n * @param recoveryQA\n * @returns\n */\n public async registerPatient(\n patientUuid: Uuid,\n consult: ConsultRequest,\n workflow: WorkflowData,\n recoveryQA?: {\n recoverySecurityQuestions: string[]\n recoverySecurityAnswers: string[]\n }\n ): Promise<RegisterPatientOutput> {\n if (!this.rsa) throw IncompleteAuthentication\n return registerPatient(patientUuid, consult, workflow, this, this.toolbox.uuid(), recoveryQA)\n }\n\n /**\n * Builds the vault index for the logged user\n *\n * Steps:\n * 1. Retrieves, decrypts and sets the lockbox IndexSnapshot\n * 2. Retrieves, decrypts and adds all other index entries starting at the snapshot timestamp\n * 3. Updates the IndexSnapshot if changed\n * @deprecated\n * @returns the latest vault index\n */\n public async buildVaultIndex(forceRefresh: boolean = false) {\n if (!this.vaultIndex || forceRefresh) await buildLegacyVaultIndex(this)\n }\n\n /**\n * Setter for the vault index\n * @param index\n */\n public setVaultIndex(index: VaultIndex) {\n this.vaultIndex = index\n }\n\n /**\n * Fetches all grants, and consultations that exist in each lockbox\n * Then updates the index for the current user with the lockbox consult relationship\n */\n public async forceUpdateIndexEntries() {\n let grants = await this.getGrants()\n\n let indexConsultLockbox: IndexConsultLockbox[] = await Promise.all(\n grants.map(\n async (grant: Grant) =>\n await this.vaultClient\n .lockboxMetadataGet(\n grant.lockboxUuid!,\n ['consultationId'],\n [],\n { category: MetadataCategory.Consultation },\n grant.lockboxOwnerUuid\n )\n .then((consults) => {\n try {\n return consults[0].map((consult: any) => {\n return {\n ...consult,\n grant: {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid,\n },\n }\n })\n } catch (e) {\n // No consultations in lockbox or index could not be created\n return []\n }\n })\n .catch(() => [])\n )\n ).then((consults) => consults.flat())\n this.vaultIndexAdd({\n [IndexKey.Consultation]: indexConsultLockbox,\n })\n .then(() => alert('The Index was successfully updated!'))\n .catch(() => console.error('The index failed to update!'))\n }\n\n /**\n * Generates, encrypts and adds entries to vault index for a given index owner\n *\n * @param entries\n * @param indexOwnerUuid\n */\n public async vaultIndexAdd(entries: VaultIndex, indexOwnerUuid?: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let rsaPub: Uint8Array\n if (indexOwnerUuid) {\n let base64IndexOwnerPubKey = (await this.guardClient.identityGet(indexOwnerUuid)).publicKey\n rsaPub = this.toolbox.decodeFromBase64(base64IndexOwnerPubKey)\n } else {\n rsaPub = this.rsa.public()\n }\n\n let encryptedIndex: EncryptedVaultIndex = {}\n\n for (let keyString of Object.keys(entries)) {\n let key = keyString as keyof VaultIndex\n switch (key) {\n case IndexKey.ConsultationLockbox:\n encryptedIndex[key] = (entries[key] as IndexConsultLockbox[])\n .map((e) => ({\n ...e,\n uniqueHash: e.consultationId,\n }))\n .map(\n (e: IndexConsultLockbox) =>\n ({\n uuid: e.uuid,\n timestamp: e.timestamp,\n uniqueHash: e.uniqueHash,\n encryptedIndexEntry: CryptoRSA.jsonWithPubEncryptToBase64(\n {\n consultationId: e.consultationId,\n grant: e.grant,\n },\n rsaPub\n ),\n } as EncryptedIndexEntry)\n )\n break\n //// DEPRECATED : REMOVE ME : BEGIN ///////////////////////////////////////////\n case IndexKey.Consultation:\n encryptedIndex[key] = (entries[key] as IndexConsultLockbox[])\n .map((e) => ({\n ...e,\n uniqueHash: this.toolbox.hashStringToBase64(\n JSON.stringify({\n consultationId: e.consultationId,\n grant: e.grant,\n })\n ),\n }))\n .filter(\n (e) =>\n !this.vaultIndex ||\n !this.vaultIndex[IndexKey.Consultation]?.find((v) => v.uniqueHash === e.uniqueHash)\n )\n .map(\n (e: IndexConsultLockbox) =>\n ({\n uuid: e.uuid,\n timestamp: e.timestamp,\n uniqueHash: e.uniqueHash,\n encryptedIndexEntry: CryptoRSA.jsonWithPubEncryptToBase64(\n {\n consultationId: e.consultationId,\n grant: e.grant,\n },\n rsaPub\n ),\n } as EncryptedIndexEntry)\n )\n break\n //// DEPRECATED : REMOVE ME : END ///////////////////////////////////////////\n }\n }\n await this.vaultClient.vaultIndexPut(encryptedIndex, indexOwnerUuid)\n }\n\n /**\n * adds or updates the index snapshot for the logged user\n * @param index\n */\n public async indexSnapshotAdd(index: VaultIndex) {\n if (!this.rsa) throw IncompleteAuthentication\n let rsaPub: Uint8Array = this.rsa.public()\n\n let cleanedIndex: VaultIndex = {\n [IndexKey.Consultation]: index[IndexKey.Consultation]\n ?.filter((c) => c)\n .map((c) => {\n return {\n grant: c.grant,\n consultationId: c.consultationId,\n }\n }),\n }\n\n // the data of the snapshot should not contain the `IndexEntry` data\n // (will create conflicts while updating)\n let encryptedIndexEntry = CryptoRSA.jsonWithPubEncryptToBase64(cleanedIndex, rsaPub)\n\n // The encryptedIndexEntry can have the uuid and timstamp (for updating)\n let encryptedIndex: EncryptedIndexEntry = {\n uuid: index.uuid,\n timestamp: index.timestamp,\n encryptedIndexEntry,\n }\n this.vaultClient.vaultIndexSnapshotPut(encryptedIndex)\n }\n\n /**\n * @name grantLockbox\n * @description Grants a lockbox by retrieving the shared secret of the lockbox and encrypting it with the grantees public key\n * @param granteeUuid\n * @param lockboxUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n */\n public async grantLockbox(granteeUuid: Uuid, lockboxUuid: Uuid, lockboxOwnerUuid?: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let secret = (await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)).key()\n let base64GranteePublicKey = (await this.guardClient.identityGet(granteeUuid)).publicKey\n let granteePublicKey = this.toolbox.decodeFromBase64(base64GranteePublicKey)\n\n let granteeEncryptedSecret = CryptoRSA.bytesWithPubEncryptToBase64(secret, granteePublicKey)\n let request: LockboxGrantRequest = {\n encryptedSecret: granteeEncryptedSecret,\n granteeUuid: granteeUuid,\n }\n await this.vaultClient.lockboxGrant(lockboxUuid, request, lockboxOwnerUuid)\n }\n\n /**\n * @name createMessageData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a message string\n * @param lockboxUuid\n * @param message\n * @param consultationId the consultation for which this message is sent\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createMessageData(\n lockboxUuid: Uuid,\n message: string,\n consultationId: string,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n\n let encryptedData = symmetricEncryptor.jsonEncryptToBase64Payload(message)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload({\n author: (await this.guardClient.whoAmI()).sub,\n })\n\n let meta = {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Message,\n contentType: 'text/plain',\n }\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * @name createMessageAttachmentData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a file\n * @param lockboxUuid\n * @param data the file stored\n * @param consultationId the consultation for which this message is sent\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createMessageAttachmentData(\n lockboxUuid: Uuid,\n data: File,\n consultationId: string,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.bytesEncryptToBase64Payload(new Uint8Array(await data.arrayBuffer()))\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload({\n author: (await this.guardClient.whoAmI()).sub,\n fileName: data.name,\n lastModified: data.lastModified,\n size: data.size,\n })\n\n let meta = {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Message,\n contentType: data.type,\n }\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * @name createAttachmentData\n * @description Creates a Base64 encrypted Payload to send and store in the vault from a file\n * @param lockboxUuid\n * @param data the file stored\n * @param consultationId the consultation for which this message is sent\n * @param category the category for the attachment data\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing file, specify the previous data uuid\n * @returns the data uuid\n */\n public async createConsultationAttachmentData(\n lockboxUuid: Uuid,\n data: File,\n consultationId: string,\n documentType: DocumentType,\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n return this.createBytesData<Meta | any>(\n lockboxUuid,\n new Uint8Array(await data.arrayBuffer()),\n {\n consultationId,\n category: MetadataCategory.Consultation,\n documentType,\n contentType: data.type,\n },\n {\n author: (await this.guardClient.whoAmI()).sub,\n fileName: data.name,\n },\n lockboxOwnerUuid,\n previousDataUuid\n )\n }\n\n /**\n * @name createJsonData\n * @description Creates a Base64 encrypted Payload to send and store in the vault. With the data input as a JSON\n * @param lockboxUuid\n * @param data\n * @param meta\n * @param privateMeta the metadata that will be secured in the vault\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing data, specify the previous data uuid\n * @returns the data uuid\n */\n public async createJsonData<T = Meta>(\n lockboxUuid: Uuid,\n data: any,\n meta?: T,\n privateMeta?: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.jsonEncryptToBase64Payload(data)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload(privateMeta)\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * Get or upsert a data in lockbox\n * @param lockboxUuid the lockbox uuid\n * @param data the data to insert\n * @param publicMetadata the public Metadata\n * @param privateMetadata the private Metadata\n * @param forceReplace set true when the insertion of data requires to replace the data when it exists already\n * @returns the data uuid\n */\n public async getOrInsertJsonData<M = Metadata>(\n lockboxUuid: Uuid,\n data: any,\n publicMetadata: M,\n privateMetadata: Metadata,\n forceReplace: boolean = false\n ): Promise<Uuid> {\n let manifest = await this.vaultClient.lockboxManifestGet(lockboxUuid, publicMetadata)\n if (!forceReplace && manifest.length > 0) {\n console.log(`The data for ${JSON.stringify(publicMetadata)} already exist`)\n return manifest[0].dataUuid\n } else\n return (\n await this.createJsonData<M>(\n lockboxUuid,\n data,\n publicMetadata,\n privateMetadata,\n undefined,\n forceReplace && manifest.length > 0 ? manifest[0].dataUuid : undefined // if forceReplace and data already exist, then replace data. Otherwise insert it\n ).catch((err) => {\n console.error(`Error while upserting data ${JSON.stringify(publicMetadata)} data`, err)\n throw err\n })\n ).dataUuid\n }\n\n /**\n * @name createBytesData\n * @description Creates a Base64 encrypted Payload to send and store in the vault. With the data input as a Bytes\n * @param lockboxUuid\n * @param data\n * @param meta\n * @param privateMeta the metadata that will be secured in the vault\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @param previousDataUuid if it's a revision of existing data, specify the previous data uuid\n * @returns the data uuid\n */\n public async createBytesData<T = Meta>(\n lockboxUuid: Uuid,\n data: Uint8Array,\n meta: T,\n privateMeta: { [val: string]: any },\n lockboxOwnerUuid?: Uuid,\n previousDataUuid?: Uuid\n ): Promise<DataCreateResponse> {\n if (!this.rsa) throw IncompleteAuthentication\n let symmetricEncryptor = await this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid)\n let encryptedData = symmetricEncryptor.bytesEncryptToBase64Payload(data)\n let encryptedPrivateMeta = symmetricEncryptor.jsonEncryptToBase64Payload(privateMeta)\n\n let request: LockboxDataRequest = {\n data: encryptedData,\n publicMetadata: meta,\n privateMetadata: encryptedPrivateMeta,\n }\n\n return this.tellerClient.lockboxDataStore(lockboxUuid, request, lockboxOwnerUuid, previousDataUuid)\n }\n\n /**\n * @name getJsonData\n * @description Fetches and decrypts the lockbox data with the cached shared secret.\n * Decrypts the data to a valid JSON object. If this is impossible, the call to the WASM binary will fail\n *\n * @type T is the generic type specifying the return type object of the function\n * @param lockboxUuid\n * @param dataUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns the data specified by the generic type <T>\n */\n public async getJsonData<T = any>(lockboxUuid: Uuid, dataUuid: Uuid, lockboxOwnerUuid?: Uuid): Promise<T> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let [encryptedPayload, symmetricDecryptor] = await Promise.all([\n this.vaultClient.lockboxDataGet(lockboxUuid, dataUuid, lockboxOwnerUuid),\n this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid),\n ])\n\n return symmetricDecryptor.base64PayloadDecryptToJson(encryptedPayload.data)\n }\n /**\n * @description Fetches and decrypts the lockbox data with the cached shared secret.\n * @param lockboxUuid\n * @param dataUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns the bytes data\n */\n public async getBytesData(lockboxUuid: Uuid, dataUuid: Uuid, lockboxOwnerUuid?: Uuid): Promise<Uint8Array> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let [encryptedPayload, symmetricDecryptor] = await Promise.all([\n this.vaultClient.lockboxDataGet(lockboxUuid, dataUuid, lockboxOwnerUuid),\n this.getCachedSecretCryptor(lockboxUuid, lockboxOwnerUuid),\n ])\n\n return symmetricDecryptor.base64PayloadDecryptToBytes(encryptedPayload.data)\n }\n\n /**\n * @name getGrants\n * @description Get all lockboxes granted to user with the applied filter\n * @note this function returns cached grants and will not update unless the page is refreshed\n * @todo some versions of lockboxes do not make use of lockbox metadata\n * in this case, all lockboxes need to be filtered one-by-one to find the correct one\n * Remove if this is no longer the case\n * @param filter: the consultationId in which the grant exists\n * @returns decrypted lockboxes granted to user\n */\n public async getGrants(filter?: { consultationId: Uuid }, forceRefresh: boolean = false): Promise<Grant[]> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let filterString = JSON.stringify(filter)\n // retrieves cached grants\n // Note: if filters is set to empty, it will be stored in the `undefined` key\n if (!forceRefresh && this.cachedMetadataGrants[filterString]) return this.cachedMetadataGrants[filterString]\n\n // if there is a filter to apply, then the grant can be retrieved from the vault index, otherwise, all grants are fetched\n // Note: will work only if the filter being applied is exclusively a consult id\n const grantsByConsultLockbox = filter ? (\n await this.vaultClient.vaultIndexGet([IndexKey.ConsultationLockbox], [filter.consultationId])\n .then((res) => res[IndexKey.ConsultationLockbox])\n .catch((e) => {\n console.error(e)\n return []\n })\n ) : undefined\n const decryptedConsults = decryptConsultLockboxGrants(grantsByConsultLockbox ?? [], this.rsa)\n if (decryptedConsults.length > 0) {\n console.info('[sdk:index] Grants found in user`s constant time secure index')\n this.cachedMetadataGrants[JSON.stringify(filter)] = decryptedConsults\n return this.cachedMetadataGrants[filterString]\n }\n\n let encryptedGrants\n // if there are no grants with the applied filter from index, attempt for naive filter with backwards compatibility\n if (filter) {\n encryptedGrants = await filterGrantsWithLockboxMetadata(this, filter, this.vaultIndex, forceRefresh)\n } else {\n encryptedGrants = (await this.vaultClient.grantsGet()).grants\n }\n\n const decryptedGrants = await decryptGrants(encryptedGrants, this.rsa)\n // sets the cached grant\n this.cachedMetadataGrants[filterString] = decryptedGrants\n return decryptedGrants\n }\n\n /**\n * @name getCachedSecretCryptor\n * @description Retrieves the cached lockbox secret or fetches the secret from vault, then creates the symmetric cryptor and stores it in memory\n * @param lockboxUuid\n * @param lockboxOwnerUuid the lockbox owner (ignored if lockbox is owned by self)\n * @returns\n */\n async getCachedSecretCryptor(lockboxUuid: string, lockboxOwnerUuid?: string): Promise<OroToolbox.CryptoChaCha> {\n if (!this.rsa) throw IncompleteAuthentication\n\n let index = this.secrets.findIndex((secret) => secret.lockboxUuid === lockboxUuid)\n if (index === -1) {\n let encryptedSecret = (await this.vaultClient.lockboxSecretGet(lockboxUuid, lockboxOwnerUuid)).sharedSecret\n\n let secret = this.rsa.base64DecryptToBytes(encryptedSecret)\n let cryptor = this.toolbox.CryptoChaCha.fromKey(secret)\n this.secrets.push({ lockboxUuid, cryptor })\n return cryptor\n } else {\n return this.secrets[index].cryptor\n }\n }\n\n /**\n * Retrieves the patient personal information associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several personal informations data\n * @param consultationId The consultation Id\n * @param category The personal MetadataCategory to fetch\n * @param forceRefresh force data refresh (default to false)\n * @returns the personal data\n */\n public async getPersonalInformationsFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory.Personal | MetadataCategory.ChildPersonal | MetadataCategory.OtherPersonal,\n forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, category, forceRefresh)\n }\n\n /**\n * Retrieves the patient medical data associated to the `consultationId`\n * The `consultationId` only helps to retrieve the patient lockboxes\n * Note: it is possible to have several medical data\n * @param consultationId The consultation Id\n * @param forceRefresh force data refresh (default to false)\n * @returns the medical data\n */\n public async getMedicalDataFromConsultId(\n consultationId: Uuid,\n forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n return this.getMetaCategoryFromConsultId(consultationId, MetadataCategory.Medical, forceRefresh)\n }\n\n private async getMetaCategoryFromConsultId(\n consultationId: Uuid,\n category: MetadataCategory,\n forceRefresh = false\n ): Promise<LocalizedData<PopulatedWorkflowData>[]> {\n let grants = await this.getGrants({ consultationId })\n let workflowData: LocalizedData<PopulatedWorkflowData>[] = []\n for (let grant of grants) {\n let manifest = await this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationIds: [consultationId],\n },\n true,\n grant.lockboxOwnerUuid,\n forceRefresh\n )\n\n // TODO: find another solution for backwards compatibility (those without the metadata consultationIds)\n if (manifest.length === 0) {\n manifest = (\n await this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category,\n documentType: DocumentType.PopulatedWorkflowData,\n // backward compatiblility with TonTest\n },\n true,\n grant.lockboxOwnerUuid,\n forceRefresh\n )\n ).filter((entry) => !entry.metadata.consultationIds) // Keep only entries without associated consultationIds\n }\n let data = await Promise.all(\n manifest.map(async (entry) => {\n return {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid!,\n dataUuid: entry.dataUuid,\n data: await this.getJsonData<PopulatedWorkflowData>(grant.lockboxUuid!, entry.dataUuid),\n }\n })\n )\n workflowData = { ...workflowData, ...data }\n }\n return workflowData\n }\n\n /**\n * @description retrieves the personal information stored in the first owned lockbox\n * @param userId The user Id\n * @returns the personal data\n */\n public async getPersonalInformations(userId: Uuid): Promise<LocalizedData<PopulatedWorkflowData>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === userId)\n\n if (!grant) {\n throw MissingGrant\n }\n\n const { lockboxUuid, lockboxOwnerUuid } = grant\n\n if (!lockboxUuid) throw MissingLockbox\n\n if (!lockboxOwnerUuid) throw MissingLockboxOwner\n\n const identificationDataUuid = (\n await this.getLockboxManifest(\n lockboxUuid,\n {\n category: MetadataCategory.Personal,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n false,\n userId\n )\n )[0].dataUuid\n\n return {\n lockboxOwnerUuid,\n lockboxUuid,\n dataUuid: identificationDataUuid,\n data: await this.getJsonData<PopulatedWorkflowData>(lockboxUuid, identificationDataUuid),\n }\n }\n\n /**\n * Retrieves the grant associated to a consultationId\n * @note returns the first grant only\n * @param consultationId The consultationId\n * @returns the grant\n */\n public async getGrantFromConsultId(consultationId: Uuid): Promise<Grant | undefined> {\n let grants = await this.getGrants({ consultationId })\n\n if (grants.length === 0) {\n throw AssociatedLockboxNotFound\n }\n\n return grants[0]\n }\n\n /**\n * retrieves the identity associated to the `consultationId`\n * @param consultationId The consultation Id\n * @returns the identity\n */\n public async getIdentityFromConsultId(consultationId: Uuid): Promise<IdentityResponse | undefined> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (grant && grant.lockboxOwnerUuid) {\n return await this.guardClient.identityGet(grant.lockboxOwnerUuid)\n } else {\n return undefined\n }\n }\n\n /**\n * retrieves the lockbox manifest for a given lockbox and add's its private metadata\n * @note the lockbox manifest will retrieved the cached manifest first unless force refresh is enabled\n * @param lockboxUuid\n * @param filter\n * @param expandPrivateMetadata\n * @param lockboxOwnerUuid\n * @param forceRefresh\n * @returns the lockbox manifest\n */\n public async getLockboxManifest(\n lockboxUuid: Uuid,\n filter: Metadata,\n expandPrivateMetadata: boolean,\n lockboxOwnerUuid?: Uuid,\n forceRefresh: boolean = false\n ): Promise<LockboxManifest> {\n let manifestKey = JSON.stringify({\n lockboxUuid,\n filter,\n expandPrivateMetadata,\n lockboxOwnerUuid,\n })\n if (!forceRefresh && this.cachedManifest[manifestKey]) return this.cachedManifest[manifestKey]\n\n return this.vaultClient.lockboxManifestGet(lockboxUuid, filter, lockboxOwnerUuid).then((manifest) => {\n return Promise.all(\n manifest.map(async (entry) => {\n if (expandPrivateMetadata && entry.metadata.privateMetadata) {\n let privateMeta = await this.getJsonData<Metadata>(\n lockboxUuid!,\n entry.metadata.privateMetadata,\n lockboxOwnerUuid\n )\n entry.metadata = {\n ...entry.metadata,\n ...privateMeta,\n }\n }\n return entry\n })\n ).then((manifest) => (this.cachedManifest[manifestKey] = manifest))\n })\n }\n\n /**\n * @description Create or update the personal information and store it in the first owned lockbox\n * @param identity The identity to use\n * @param data The personal data to store\n * @param dataUuid (optional) The dataUuid to update\n * @returns\n */\n public async createPersonalInformations(\n identity: IdentityResponse,\n data: PopulatedWorkflowData,\n dataUuid?: string\n ): Promise<DataCreateResponse> {\n const lockboxUuid = (await this.getGrants()).find(\n (lockbox) => lockbox.lockboxOwnerUuid === identity.id\n )?.lockboxUuid\n\n if (lockboxUuid) {\n return this.createJsonData<PersonalMeta>(\n lockboxUuid,\n data,\n {\n category: MetadataCategory.Personal,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n {},\n undefined,\n dataUuid\n )\n } else {\n throw MissingLockbox\n }\n }\n\n /**\n * Create or update user Preference\n * @param identity\n * @param preference\n * @param dataUuid\n * @returns\n */\n public async createUserPreference(\n identity: IdentityResponse,\n preference: UserPreference,\n dataUuid?: string\n ): Promise<DataCreateResponse> {\n const lockboxUuid = (await this.getGrants()).find(\n (lockbox) => lockbox.lockboxOwnerUuid === identity.id\n )?.lockboxUuid\n\n if (lockboxUuid) {\n return this.createJsonData<PreferenceMeta>(\n lockboxUuid,\n preference,\n {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n },\n {},\n undefined,\n dataUuid\n )\n } else {\n throw MissingLockbox\n }\n }\n\n /**\n * retrieves the user preference from a grant\n * @param grant The grant\n * @returns the user preference\n */\n public async getDataFromGrant<T = any>(grant: Grant, filter: Metadata): Promise<LocalizedData<T>> {\n const { lockboxUuid, lockboxOwnerUuid } = grant\n\n if (!lockboxUuid) throw MissingLockbox\n if (!lockboxOwnerUuid) throw MissingLockboxOwner\n const identificationDataUuid = (\n await this.getLockboxManifest(\n lockboxUuid,\n\n filter,\n false,\n grant.lockboxOwnerUuid,\n true\n )\n )[0].dataUuid\n\n return {\n lockboxOwnerUuid,\n lockboxUuid,\n dataUuid: identificationDataUuid,\n data: await this.getJsonData<T>(lockboxUuid, identificationDataUuid),\n }\n }\n\n /**\n * retrieves the user preference from a consultation id\n * @param consultationId The related consultationId\n * @returns the user preference\n */\n public async getUserPreferenceFromConsultId(consultationId: string): Promise<LocalizedData<UserPreference>> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<UserPreference>(grant, {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference stored in the first owned lockbox from identity\n * @param identity The identity to use\n * @returns the user preference\n */\n public async getUserPreference(identity: IdentityResponse): Promise<LocalizedData<UserPreference>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === identity.id)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<UserPreference>(grant, {\n category: MetadataCategory.Preference,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference from a consultation id\n * @param consultationId The related consultationId\n * @returns the user preference\n */\n public async getRecoveryDataFromConsultId(consultationId: string): Promise<LocalizedData<RecoveryData>> {\n const grant = await this.getGrantFromConsultId(consultationId)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant<RecoveryData>(grant, {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n })\n }\n\n /**\n * retrieves the user preference stored in the first owned lockbox from identity\n * @param identity The identity to use\n * @returns the user preference\n */\n public async getRecoveryData(identity: IdentityResponse): Promise<LocalizedData<RecoveryData>> {\n const grant = (await this.getGrants()).find((lockbox) => lockbox.lockboxOwnerUuid === identity.id)\n\n if (!grant) throw MissingGrant\n\n return this.getDataFromGrant(grant, {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n })\n }\n\n /**\n * @name getAssignedConsultations\n * @description finds all assigned or owned consultations for the logged user\n * Steps:\n * - Retrieves all granted lockboxes given to the logged user\n * - for each lockbox, find all consultation ids\n * - for each consultation id, retrieve the consult information\n * @param practiceUuid the uuid of the practice to look consult into\n * @returns the list of consults\n */\n public async getAssignedConsultations(practiceUuid: Uuid, forceRefresh: boolean = false): Promise<Consult[]> {\n return Promise.all(\n (await this.getGrants(undefined, forceRefresh)).map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n true,\n undefined,\n forceRefresh\n ).then((manifest) =>\n Promise.all(\n manifest.map(\n async (entry) =>\n await this.consultClient.getConsultByUUID(entry.metadata.consultationId, practiceUuid)\n )\n ).then((promise) => promise.flat())\n )\n )\n ).then((consults) => consults.flat())\n }\n\n /**\n * Gets the past consultations of the patient as well as his relatives if any\n * @param consultationId any consultation uuid from which we will fetch all the other consultations of the same patient as the owner of this consultation id\n * @param practiceUuid\n */\n public async getPastConsultationsFromConsultId(\n consultationId: string,\n practiceUuid: string\n ): Promise<Consult[] | undefined> {\n const grant = await this.getGrantFromConsultId(consultationId)\n if (!grant) return undefined\n\n let consultationsInLockbox: string[] = (\n await this.vaultClient.lockboxMetadataGet(\n grant.lockboxUuid!,\n ['consultationId'],\n ['consultationId'],\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n },\n grant.lockboxOwnerUuid\n )\n )\n .flat()\n .map((metadata: { consultationId: string }) => metadata.consultationId)\n\n if (consultationsInLockbox.length == 0) return []\n\n return await Promise.all(\n consultationsInLockbox.map(async (consultId: string) => {\n return await this.consultClient.getConsultByUUID(consultId, practiceUuid)\n })\n )\n }\n\n /**\n * @name getPatientConsultationData\n * @description retrieves the consultation data\n * @param consultationId\n * @returns\n */\n public async getPatientConsultationData(\n consultationId: Uuid,\n forceRefresh: boolean = false\n ): Promise<PopulatedWorkflowData[]> {\n //TODO: make use of getPatientDocumentsList instead of doing it manually here\n return Promise.all(\n (await this.getGrants({ consultationId }, forceRefresh))\n .map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.PopulatedWorkflowData,\n consultationId, //since we want to update the cached manifest (if another consult data exists)\n },\n true,\n grant.lockboxOwnerUuid,\n forceRefresh\n ).then((manifest) =>\n Promise.all(\n manifest.map((e) =>\n this.getJsonData<PopulatedWorkflowData>(\n grant.lockboxUuid!,\n e.dataUuid,\n grant.lockboxOwnerUuid\n )\n )\n )\n )\n )\n .flat()\n ).then((data) => data.flat())\n }\n\n /**\n * This function returns the patient prescriptions\n * @param consultationId\n * @returns\n */\n public async getPatientPrescriptionsList(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Prescription,\n },\n true,\n consultationId\n )\n }\n\n /**\n * This function returns the patient results\n * @param consultationId\n * @returns\n */\n public async getPatientResultsList(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.Result,\n },\n true,\n consultationId\n )\n }\n\n /**\n * returns the patient treatment plan options\n * @param consultationId\n * @returns Document[] corresponding to the patient treatment plan options\n */\n public async getPatientTreatmentPlans(consultationId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.TreatmentPlan,\n },\n true,\n consultationId\n )\n }\n\n /**\n * returns a specific patient treatment plan option\n * @param consultationId\n * @param treatmentPlanId\n * @returns\n */\n public async getPatientTreatmentPlanByUuid(consultationId: Uuid, treatmentPlanId: Uuid): Promise<Document[]> {\n return this.getPatientDocumentsList(\n {\n category: MetadataCategory.Consultation,\n documentType: DocumentType.TreatmentPlan,\n treatmentPlanId,\n },\n true,\n consultationId\n )\n }\n\n /**\n * @name getPatientDocumentsList\n * @description applies the provided filter to the vault to only find those documents\n * @param filters the applied filters (e.g. type of documents)\n * @param expandPrivateMetadata whether or not, the private metadata needs to be retrieved\n * (more computationally expensive)\n * @param consultationId\n * @returns the filtered document list\n */\n public async getPatientDocumentsList(\n filters: Object,\n expandPrivateMetadata: boolean,\n consultationId: Uuid\n ): Promise<Document[]> {\n return Promise.all(\n (await this.getGrants({ consultationId }))\n .map((grant) =>\n this.getLockboxManifest(\n grant.lockboxUuid!,\n { ...filters, consultationId },\n expandPrivateMetadata,\n grant.lockboxOwnerUuid,\n true\n ).then((manifest) =>\n Promise.all(\n manifest.map(async (entry): Promise<Document> => {\n return {\n lockboxOwnerUuid: grant.lockboxOwnerUuid,\n lockboxUuid: grant.lockboxUuid!,\n ...entry,\n }\n })\n )\n )\n )\n .flat()\n ).then((data) => data.flat())\n }\n\n /****************************************************************************************************************\n * RECOVERY *\n ****************************************************************************************************************/\n\n /**\n * @name recoverPrivateKeyFromSecurityQuestions\n * @description Recovers and sets the rsa private key from the answered security questions\n * @param id\n * @param recoverySecurityQuestions\n * @param recoverySecurityAnswers\n * @param threshold the number of answers needed to recover the key\n */\n public async recoverPrivateKeyFromSecurityQuestions(\n id: Uuid,\n recoverySecurityQuestions: string[],\n recoverySecurityAnswers: string[],\n threshold: number\n ) {\n let shards: SecretShard[] = (await this.guardClient.identityGet(id)).recoverySecurityQuestions!\n let answeredShards = shards\n .filter((shard: any) => {\n // filters all answered security questions\n let indexOfQuestion = recoverySecurityQuestions.indexOf(shard.securityQuestion)\n if (indexOfQuestion === -1) return false\n return recoverySecurityAnswers[indexOfQuestion] && recoverySecurityAnswers[indexOfQuestion] != ''\n })\n .map((item: any) => {\n // appends the security answer to the answered shards\n let index = recoverySecurityQuestions.indexOf(item.securityQuestion)\n item.securityAnswer = recoverySecurityAnswers[index]\n return item\n })\n try {\n // reconstructs the key from the answered security answers\n let privateKey = this.toolbox.reconstructSecret(answeredShards, threshold)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n } catch (e) {\n console.error(e)\n }\n }\n\n /**\n * @name recoverPrivateKeyFromPassword\n * @description Recovers and sets the rsa private key from the password\n * @param id\n * @param password\n */\n public async recoverPrivateKeyFromPassword(id: Uuid, password: string) {\n let identity = await this.guardClient.identityGet(id)\n\n let recoveryPayload = identity.recoveryPassword\n let symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(password)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n\n if (identity.recoveryLogin) {\n //Ensure we can recover from a page reload\n let symetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(identity.recoveryLogin)\n sessionStorage.setItem(\n sessionStorePrivateKeyName(id),\n symetricEncryptor.bytesEncryptToBase64Payload(privateKey)\n )\n }\n\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * @name recoverPrivateKeyFromMasterKey\n * @description Recovers and sets the rsa private key from the master key\n * @param id\n * @param masterKey\n */\n public async recoverPrivateKeyFromMasterKey(id: Uuid, masterKey: string) {\n let recoveryPayload = (await this.guardClient.identityGet(id)).recoveryMasterKey!\n let symmetricDecryptor = this.toolbox.CryptoChaCha.fromPassphrase(masterKey)\n let privateKey = symmetricDecryptor.base64PayloadDecryptToBytes(recoveryPayload)\n this.rsa = this.toolbox.CryptoRSA.fromKey(privateKey)\n }\n\n /**\n * @description Generates and updates the security questions and answers payload using new recovery questions and answers\n * Important: Since the security questions generate a payload for the private key, they will never be stored on the device as they must remain secret!!!\n * @param id\n * @param recoverySecurityQuestions\n * @param recoverySecurityAnswers\n * @param threshold the number of answers needed to rebuild the secret\n */\n public async updateSecurityQuestions(\n id: Uuid,\n recoverySecurityQuestions: string[],\n recoverySecurityAnswers: string[],\n threshold: number\n ) {\n if (!this.rsa) throw IncompleteAuthentication\n let securityQuestionPayload = this.toolbox.breakSecretIntoShards(\n recoverySecurityQuestions,\n recoverySecurityAnswers,\n this.rsa.private(),\n threshold\n )\n let updateRequest = {\n recoverySecurityQuestions: securityQuestionPayload,\n }\n\n return await this.guardClient.identityUpdate(id, updateRequest)\n }\n\n /**\n * @description Generates and stores the payload encrypted payload and updates the password itself (double hash)\n * @important\n * the recovery payload uses a singly hashed password and the password stored is doubly hashed so\n * the stored password cannot derive the decryption key in the payload\n * @note\n * the old password must be provided when not performing an account recovery\n * @param id\n * @param newPassword\n * @param oldPassword\n */\n public async updatePassword(id: Uuid, newPassword: string, oldPassword?: string) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(newPassword)\n let passwordPayload = symmetricEncryptor.bytesEncryptToBase64Payload(this.rsa.private())\n if (oldPassword) {\n oldPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(oldPassword))\n }\n\n newPassword = this.toolbox.hashStringToBase64(this.toolbox.hashStringToBase64(newPassword))\n\n let updateRequest = {\n password: {\n oldPassword,\n newPassword,\n },\n recoveryPassword: passwordPayload,\n }\n\n return await this.guardClient.identityUpdate(id, updateRequest)\n }\n\n /**\n * @description Generates and stores the master key encrypted payload\n * Important\n * Since the master key is used to generate a payload for the private key, it will never be stored on the device as it must remain secret!\n * @param id\n * @param masterKey\n * @param lockboxUuid\n */\n async updateMasterKey(id: Uuid, masterKey: string, lockboxUuid: Uuid) {\n if (!this.rsa) throw IncompleteAuthentication\n\n let symmetricEncryptor = this.toolbox.CryptoChaCha.fromPassphrase(masterKey)\n let masterKeyPayload = symmetricEncryptor.bytesEncryptToBase64Payload(this.rsa.private())\n let updateRequest = { recoveryMasterKey: masterKeyPayload }\n const updatedIdentity = await this.guardClient.identityUpdate(id, updateRequest)\n\n await this.getOrInsertJsonData<RecoveryMeta>(\n lockboxUuid,\n { masterKey },\n {\n category: MetadataCategory.Recovery,\n contentType: 'application/json',\n },\n {},\n true\n )\n\n return updatedIdentity\n }\n}\n","import { AxiosService, CliniaResponse, FacetFilter, PlaceData } from \"oro-sdk-apis\"\n\nexport class CliniaService {\n private api: AxiosService\n\n constructor(private url: string, apiKey: string, private locale?: string) {\n this.api = new AxiosService({ headers: { 'X-Clinia-API-Key': apiKey } })\n }\n\n public placeSearch(searchOptions: {\n locale?: string\n query?: string\n facetFilters?: FacetFilter[]\n location?: string\n aroundLatLng?: string\n page?: number\n }) {\n const { locale, ...data } = searchOptions\n\n return this.api.post<CliniaResponse<PlaceData>>(\n `${this.url}/search/v1/indexes/health_facility/query`,\n data,\n {\n params: { locale: locale ?? this.locale },\n }\n )\n }\n\n public placeMatch(\n searchOptions: {\n locale?: string\n name?: string\n address?: string\n postalCode?: string\n place?: string\n region?: string\n country?: string\n },\n type?: string\n ) {\n const { locale, ...data } = searchOptions\n\n let request = this.api.post<PlaceData[]>(\n `${this.url}/search/v1/matches`,\n data,\n {\n params: { locale: locale ?? this.locale },\n }\n )\n\n if (type) {\n request = request.then((places) =>\n places.filter((place) => place.type === type)\n )\n }\n\n return request\n }\n}\n","import initApis from 'oro-sdk-apis'\nimport { OroClient } from './client'\nimport * as OroToolboxNamespace from 'oro-toolbox'\n\nexport type OroToolbox = typeof OroToolboxNamespace\n\nexport let wasmPath = 'node_modules/oro-toolbox'\n\n/**\n * This function helps you to initialize and OroClient instance\n * @param toolbox the OroToolbox object\n * @param tellerBaseURL the teller service base URL \n * @param vaultBaseURL the vault service base URL \n * @param guardBaseURL the guard service base URL \n * @param searchbaseURL the search service base URL\n * @param practiceBaseURL the practice service base URL \n * @param consultBaseURL the consult service base URL \n * @param workflowBaseURL the workflow service base URL \n * @param diagnosisBaseURL the diagnosis service base URL \n * @param authenticationCallback (optional) authenticationCallback the authentification callback \n * @returns an instance of OroClient\n */\nconst init = (\n toolbox: OroToolbox,\n tellerBaseURL: string,\n vaultBaseURL: string,\n guardBaseURL: string,\n searchBaseURL: string,\n practiceBaseURL: string,\n consultBaseURL: string,\n workflowBaseURL: string,\n diagnosisBaseURL: string,\n authenticationCallback?: (err: Error) => void\n) => {\n const {\n tellerService,\n practiceService,\n consultService,\n vaultService,\n guardService,\n searchService,\n workflowService,\n diagnosisService,\n } = initApis(\n {\n tellerBaseURL,\n vaultBaseURL,\n guardBaseURL,\n searchBaseURL,\n practiceBaseURL,\n consultBaseURL,\n workflowBaseURL,\n diagnosisBaseURL,\n },\n authenticationCallback\n )\n\n const client = new OroClient(\n toolbox,\n tellerService!,\n vaultService!,\n guardService!,\n searchService!,\n practiceService!,\n consultService!,\n workflowService!,\n diagnosisService!,\n authenticationCallback\n )\n\n return client\n}\n\nexport { OroClient } from './client'\nexport * from 'oro-sdk-apis'\nexport * from './models'\nexport * from './helpers'\nexport * from './services'\nexport { OroToolboxNamespace }\nexport default init\n"],"names":["undefined","personalMetaToPrefix","MetadataCategory","Personal","ChildPersonal","OtherPersonal","identificationToPersonalInformations","data","category","prefix","birthday","firstname","gender","name","phone","zip","hid","pharmacy","address","toActualObject","ret","Object","entries","fields","forEach","key","field","displayedAnswer","answer","updatePersonalIntoPopulatedWorkflowData","infos","JSON","parse","stringify","kind","extractISOLocalityForConsult","answers","arrAnswersWithLocality","flatMap","currentAnswerPage","arrCountryFields","keys","filter","workflowFieldName","indexOf","flat","arrProvinceFields","arrConsultLocalFields","map","currentFieldName","item","arrSelectedLocality","currentSelectedLocality","startsWith","length","console","log","allowedLocalityPatterns","finalLocality","reduce","extractedSelected","exec","indexSelectedPriority","isoSelectedValue","extractedFinal","indexFinalPriority","isoFinalValue","sessionPrivateKeyPrefix","sessionStorePrivateKeyName","id","IncompleteAuthentication","Error","MissingGrant","MissingLockbox","MissingLockboxOwner","AssociatedLockboxNotFound","WorkflowAnswersMissingError","filterTriggeredAnsweredWithKind","workflowData","selectedAnswers","flattenedAnswers","flattenSelectedAnswers","triggeredQuestionsWithKind","fromEntries","pages","a","questions","question","isTriggered","triggers","samePageAnswers","prev","cur","res","questionFieldName","getWorkflowDataByCategory","triggeredQuestions","Promise","all","e","k","v","populateWorkflowField","then","populatedValue","workflowCreatedAt","createdAt","workflowId","locale","err","error","getImagesFromIndexDb","getMany","answerValue","text","value","images","image","imageData","resolve","trigger","includes","linearAnswers","push","values","getInitialisedSelectedAnswers","workflow","useDefault","page","defaultValue","fillWorkflowFromPopulatedWorkflow","populatedWorkflow","filledWorkflow","pageIdx","MAX_RETRIES","registerPatient","patientUuid","consultRequest","oroClient","masterKey","recoveryQA","consult","lockboxUuid","practitionerAdmin","retry","identity","errorsThrown","setTimeout","practiceClient","practiceGetFromUuid","uuidPractice","uuidAdmin","practiceGetPractitioners","practitioners","getOrCreatePatientConsultationUuid","getOrCreatePatientLockbox","guardClient","identityGet","grantLockbox","grantPromises","practitioner","uuid","consultIndex","IndexKey","ConsultationLockbox","grant","lockboxOwnerUuid","consultationId","consultIndexPromises","vaultIndexAdd","storeImageAliases","storePatientData","isoLanguageRequired","recoveryMasterKey","updateMasterKey","recoverySecurityQuestions","updateSecurityQuestions","recoverySecurityAnswers","buildConsultSearchIndex","consultClient","updateConsultByUUID","statusMedical","MedicalStatus","New","cleanIndex","practiceGetPayment","idStripeInvoiceOrPaymentIntent","payment","uuidConsult","getConsultByUUID","consultCreate","getGrants","grants","vaultClient","lockboxCreate","isoLanguage","getOrInsertJsonData","Raw","contentType","Consultation","documentType","DocumentType","PopulatedWorkflowData","Medical","consultationIds","extractAndStorePersonalWorkflowData","Preference","dataUuids","nonNullImages","img","promises","ImageAlias","idbId","extractPersonalInfoFromWorkflowData","personalInfoPopulatedWfData","childPersonalInfoPopulatedWfData","otherPersonalInfoPopulatedWfData","terms","shortId","personalInfo","childPersonalInfo","otherPersonalInfo","searchClient","index","decryptGrants","encryptedGrants","rsaKey","encryptedLockbox","uuidParse","base64DecryptToBytes","decryptConsultLockboxGrants","encryptedConsultLockboxes","base64DecryptToJson","encryptedIndexEntry","grantsTuple","grantTuples","filterGrantsWithLockboxMetadata","vaultIndex","forceRefresh","buildLegacyVaultIndex","indexConsults","consultGrant","consultGrants","lockboxMetadataGet","consults","setVaultIndex","info","OroClient","toolbox","tellerClient","workflowClient","diagnosisClient","authenticationCallback","cachedMetadataGrants","cachedManifest","signUp","email","password","practice","tosAndCpAcceptance","tokenData","subscription","skipEmailValidation","rsa","CryptoRSA","privateKey","symmetricEncryptor","CryptoChaCha","fromPassphrase","recoveryPassword","bytesEncryptToBase64Payload","hashedPassword","hashStringToBase64","emailConfirmed","signupRequest","practiceUuid","toLowerCase","publicKey","encodeToBase64","identityCreate","recoveryLogin","symetricEncryptor","sessionStorage","setItem","confirmEmail","accessToken","setTokens","whoAmI","claims","identityUpdate","sub","signIn","otp","tokenRequest","authToken","userUuid","recoverPrivateKeyFromPassword","resumeSession","recoveryPayload","getItem","recoveryKey","symmetricDecryptor","base64PayloadDecryptToBytes","fromKey","localEncryptToJsonPayload","chaChaKey","encryptedData","jsonEncryptToBase64Payload","encryptedKey","encryptToBytes","localDecryptJsonPayload","decryptedData","base64PayloadDecryptToJson","signOut","secrets","refreshToken","authLogout","buildVaultIndex","forceUpdateIndexEntries","indexConsultLockbox","alert","indexOwnerUuid","base64IndexOwnerPubKey","rsaPub","decodeFromBase64","encryptedIndex","keyString","uniqueHash","timestamp","jsonWithPubEncryptToBase64","find","vaultIndexPut","indexSnapshotAdd","cleanedIndex","c","vaultIndexSnapshotPut","granteeUuid","getCachedSecretCryptor","secret","base64GranteePublicKey","granteePublicKey","granteeEncryptedSecret","bytesWithPubEncryptToBase64","request","encryptedSecret","lockboxGrant","createMessageData","message","previousDataUuid","author","encryptedPrivateMeta","meta","Message","publicMetadata","privateMetadata","lockboxDataStore","createMessageAttachmentData","Uint8Array","arrayBuffer","lastModified","size","fileName","type","createConsultationAttachmentData","createBytesData","createJsonData","privateMeta","forceReplace","lockboxManifestGet","manifest","dataUuid","getJsonData","lockboxDataGet","encryptedPayload","getBytesData","filterString","vaultIndexGet","grantsByConsultLockbox","decryptedConsults","grantsGet","decryptedGrants","findIndex","lockboxSecretGet","sharedSecret","cryptor","getPersonalInformationsFromConsultId","getMetaCategoryFromConsultId","getMedicalDataFromConsultId","getLockboxManifest","entry","metadata","getPersonalInformations","userId","lockbox","identificationDataUuid","getGrantFromConsultId","getIdentityFromConsultId","expandPrivateMetadata","manifestKey","createPersonalInformations","createUserPreference","preference","getDataFromGrant","getUserPreferenceFromConsultId","getUserPreference","getRecoveryDataFromConsultId","Recovery","getRecoveryData","getAssignedConsultations","promise","getPastConsultationsFromConsultId","consultationsInLockbox","consultId","getPatientConsultationData","getPatientPrescriptionsList","getPatientDocumentsList","Prescription","getPatientResultsList","Result","getPatientTreatmentPlans","TreatmentPlan","getPatientTreatmentPlanByUuid","treatmentPlanId","filters","recoverPrivateKeyFromSecurityQuestions","threshold","shards","answeredShards","shard","indexOfQuestion","securityQuestion","securityAnswer","reconstructSecret","recoverPrivateKeyFromMasterKey","securityQuestionPayload","breakSecretIntoShards","updateRequest","updatePassword","newPassword","oldPassword","passwordPayload","masterKeyPayload","updatedIdentity","CliniaService","url","apiKey","api","AxiosService","headers","placeSearch","searchOptions","post","params","placeMatch","places","place","wasmPath","init","tellerBaseURL","vaultBaseURL","guardBaseURL","searchBaseURL","practiceBaseURL","consultBaseURL","workflowBaseURL","diagnosisBaseURL","initApis","tellerService","practiceService","consultService","vaultService","guardService","searchService","workflowService","diagnosisService","client"],"mappings":"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"}