epicenter-libs 3.27.2 → 3.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/browser/{AckExtension-d4aff5b6.js → AckExtension-1fe508aa.js} +3 -3
- package/dist/{module/AckExtension-6ecead0e.js.map → browser/AckExtension-1fe508aa.js.map} +1 -1
- package/dist/{module/ReloadExtension-5c5fac92.js → browser/ReloadExtension-51e9dfea.js} +3 -3
- package/dist/{module/ReloadExtension-5c5fac92.js.map → browser/ReloadExtension-51e9dfea.js.map} +1 -1
- package/dist/browser/{cometd-654b33b8.js → cometd-95666f77.js} +2 -2
- package/dist/browser/{cometd-654b33b8.js.map → cometd-95666f77.js.map} +1 -1
- package/dist/browser/{epicenter-5f3557fe.js → epicenter-53acd5e1.js} +33 -14
- package/dist/browser/epicenter-53acd5e1.js.map +1 -0
- package/dist/browser/epicenter.js +1 -1
- package/dist/cjs/{AckExtension-c498d906.js → AckExtension-da9f05ef.js} +3 -3
- package/dist/cjs/{AckExtension-c498d906.js.map → AckExtension-da9f05ef.js.map} +1 -1
- package/dist/cjs/{ReloadExtension-f9cee875.js → ReloadExtension-72077f71.js} +3 -3
- package/dist/cjs/{ReloadExtension-f9cee875.js.map → ReloadExtension-72077f71.js.map} +1 -1
- package/dist/cjs/{cometd-6cb7a959.js → cometd-bb7d98a6.js} +2 -2
- package/dist/cjs/{cometd-6cb7a959.js.map → cometd-bb7d98a6.js.map} +1 -1
- package/dist/cjs/{epicenter-216aaf73.js → epicenter-52f23ee7.js} +33 -14
- package/dist/cjs/epicenter-52f23ee7.js.map +1 -0
- package/dist/cjs/epicenter.js +1 -1
- package/dist/epicenter.js +29 -10
- package/dist/epicenter.js.map +1 -1
- package/dist/epicenter.min.js +1 -1
- package/dist/epicenter.min.js.map +1 -1
- package/dist/module/{AckExtension-6ecead0e.js → AckExtension-755114ce.js} +3 -3
- package/dist/{browser/AckExtension-d4aff5b6.js.map → module/AckExtension-755114ce.js.map} +1 -1
- package/dist/{browser/ReloadExtension-19c76dd7.js → module/ReloadExtension-22370c97.js} +3 -3
- package/dist/{browser/ReloadExtension-19c76dd7.js.map → module/ReloadExtension-22370c97.js.map} +1 -1
- package/dist/module/{cometd-ab539345.js → cometd-8498d64f.js} +2 -2
- package/dist/module/{cometd-ab539345.js.map → cometd-8498d64f.js.map} +1 -1
- package/dist/module/{epicenter-4b895c15.js → epicenter-46d3b19d.js} +33 -14
- package/dist/module/epicenter-46d3b19d.js.map +1 -0
- package/dist/module/epicenter.js +1 -1
- package/dist/types/adapters/authentication.d.ts +2 -0
- package/dist/types/adapters/episode.d.ts +2 -0
- package/dist/types/utils/identification.d.ts +2 -1
- package/package.json +1 -1
- package/src/adapters/authentication.ts +9 -4
- package/src/adapters/episode.ts +4 -2
- package/src/adapters/vault.ts +2 -2
- package/src/utils/identification.ts +12 -2
- package/dist/browser/epicenter-5f3557fe.js.map +0 -1
- package/dist/cjs/epicenter-216aaf73.js.map +0 -1
- package/dist/module/epicenter-4b895c15.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epicenter-53acd5e1.js","sources":["../../node_modules/regenerator-runtime/runtime.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/cross-fetch/dist/browser-ponyfill.js","../../src/utils/error.ts","../../src/utils/fault.ts","../../src/utils/result.ts","../../src/utils/cookies.ts","../../src/utils/store.ts","../../src/utils/constants.ts","../../src/utils/helpers.ts","../../src/utils/config.ts","../../src/utils/identification.ts","../../src/utils/error-manager.ts","../../src/utils/router.ts","../../src/adapters/account.ts","../../src/adapters/admin.ts","../../src/adapters/project.ts","../../src/adapters/cometd.ts","../../src/adapters/authentication.ts","../../src/adapters/asset.ts","../../src/adapters/email.ts","../../src/adapters/episode.ts","../../src/adapters/group.ts","../../src/adapters/leaderboard.ts","../../src/adapters/presence.ts","../../src/adapters/recaptcha.ts","../../src/adapters/run.ts","../../src/adapters/user.ts","../../src/adapters/vault.ts","../../src/apis/video.ts","../../src/adapters/video.ts","../../src/apis/vonage.ts","../../src/adapters/vonage.ts","../../src/adapters/world.ts","../../src/adapters/time.ts","../../src/adapters/task.ts","../../src/adapters/chat.ts","../../src/adapters/consensus.ts","../../src/adapters/somebody.ts","../../src/adapters/matchmaker.ts","../../src/adapters/daily.ts","../../src/adapters/wallet.ts","../../src/adapters/channel.ts","../../src/utilities.ts","../../src/epicenter.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","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = self.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.onabort = function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!self.fetch) {\n self.fetch = fetch;\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n}({}));\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n","\n/* Generic throwable error */\nexport default class EpicenterError extends Error {\n code?: string\n constructor(message?: string, code?: string) {\n super(message);\n this.code = code;\n }\n}","import EpicenterError from './error';\n\ninterface ErrorBody {\n status?: number,\n message: string,\n information?: {\n code: string,\n [key: string]: unknown,\n },\n cause?: unknown,\n}\n\n\n/* For failed network calls */\nexport default class Fault extends EpicenterError {\n status?: number;\n information?: Record<string, unknown>;\n cause?: unknown;\n\n constructor(body: ErrorBody, response?: Response) {\n super(\n body.message,\n body.information?.code\n );\n\n const { information, message, cause, status } = body;\n this.status = status ?? response?.status;\n this.message = message;\n\n if (information) {\n const { code, ...rest } = information;\n this.code = code;\n this.information = rest;\n }\n if (cause) {\n this.cause = cause;\n }\n }\n}","\n\n/* For network call responses */\nexport default class Result {\n status;\n headers;\n body;\n\n constructor(body: any, response: Response) {\n const { status, headers } = response;\n this.status = status;\n this.headers = headers;\n this.body = body;\n }\n}","\n\ntype End = number | string | Date | undefined;\n\n// Modified version of https://github.com/madmurphy/cookies.js\nconst getExpiration = (vEnd: End) => {\n if (!vEnd) return '';\n switch (vEnd.constructor) {\n case Number: return vEnd === Infinity ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT' : `; max-age=${vEnd}`;\n /*\n Note: Despite officially defined in RFC 6265, the use of `max-age` is not compatible with any\n version of Internet Explorer, Edge and some mobile browsers. Therefore passing a number to\n the end parameter might not work as expected. A possible solution might be to convert the the\n relative time to an absolute time. For instance, replacing the previous line with:\n */\n /*\n case Number: return vEnd === Infinity ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT' : `; expires=${(new Date(vEnd * 1e3 + Date.now())).toUTCString()}`;\n */\n case String: return `; expires=${vEnd}`;\n case Date: return `; expires=${new Date(vEnd).toUTCString()}`;\n default: return '';\n }\n};\n\ninterface EditCookieOptions {\n path?: string,\n domain?: string,\n end?: End,\n secure?: boolean,\n samesite?: boolean,\n}\n\nexport default {\n getItem(key: string): null | string {\n if (!key) return null;\n return decodeURIComponent(document.cookie.replace(new RegExp(`(?:(?:^|.*;)\\\\s*${encodeURIComponent(key).replace(/[-.+*]/g, '\\\\$&')}\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$`), '$1')) || null;\n },\n setItem(key: string, value: string | number | boolean, options: EditCookieOptions = {}): boolean {\n if (!key || (/^(?:expires|max-age|path|domain|secure)$/i).test(key)) return false;\n const { path, domain, end, secure, samesite } = options;\n const expireStr = getExpiration(end);\n const domainStr = domain ? `; domain=${domain}` : '';\n const pathStr = path ? `; path=${path}` : '';\n const secureStr = secure ? '; secure' : '';\n const samesiteStr = samesite ? `; samesite=${samesite}` : '';\n\n document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}${expireStr}${domainStr}${pathStr}${secureStr}${samesiteStr}`;\n return true;\n },\n removeItem(key: string, options: EditCookieOptions = {}): boolean {\n if (!this.hasItem(key)) return false;\n const { path, domain } = options;\n const domainStr = domain ? `; domain=${domain}` : '';\n const pathStr = path ? `; path=${path}` : '';\n document.cookie = `${encodeURIComponent(key)}=; expires=Thu, 01 Jan 1970 00:00:00 GMT${domainStr}${pathStr}`;\n return true;\n },\n hasItem(key: string): boolean {\n if (!key || (/^(?:expires|max-age|path|domain|secure)$/i).test(key)) return false;\n\n return (new RegExp(`(?:^|;\\\\s*)${encodeURIComponent(key).replace(/[-.+*]/g, '\\\\$&')}\\\\s*\\\\=`)).test(document.cookie);\n },\n clear(): string[] {\n const aKeys = document.cookie.replace(/((?:^|\\s*;)[^=]+)(?=;|$)|^\\s*|\\s*(?:=[^;]*)?(?:\\1|$)/g, '').split(/\\s*(?:=[^;]*)?;\\s*/);\n for (let nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) {\n aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);\n this.removeItem(aKeys[nIdx]);\n }\n return aKeys;\n },\n};\n","import cookies from './cookies';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype NodeMap = Record<any, any>\ntype JavaScriptObject = Record<string, any>;\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\ntype EpicenterStore = NodeMap | Storage;\n\n\nclass Store {\n _store: EpicenterStore;\n constructor(store: EpicenterStore) {\n this._store = store;\n }\n clear() {\n this._store.clear();\n }\n get store() {\n return this._store;\n }\n set store(store) {\n this._store = store;\n }\n}\n\nconst nodeMap = new Map();\nexport class NodeStore extends Store {\n constructor() {\n super(nodeMap);\n }\n getItem(key: string): NodeMap {\n return super.store.get(key);\n }\n setItem(key: string, value: JavaScriptObject): NodeMap {\n return super.store.set(key, value);\n }\n removeItem(key: string): boolean {\n return super.store.delete(key);\n }\n}\n\nexport class SessionStore extends Store {\n constructor() {\n super(window.sessionStorage);\n }\n getItem(key: string): JavaScriptObject {\n return JSON.parse(super.store.getItem(key));\n }\n setItem(key: string, value: JavaScriptObject): void {\n return super.store.setItem(key, JSON.stringify(value));\n }\n removeItem(key: string): void {\n return super.store.removeItem(key);\n }\n}\n\nexport class CookieStore {\n options = {};\n constructor(options = {}) {\n const hostname = window.location.hostname;\n // We have to explicitly not set domain in the cookie when it's localhost (for Chrome)\n // https://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain\n const defaults = hostname !== 'localhost' ?\n { path: '/', domain: `.${hostname}` } :\n { path: '/' };\n this.options = { ...defaults, ...options };\n }\n getItem(key: string): JavaScriptObject {\n const item = cookies.getItem(key);\n return item ? JSON.parse(item) : null;\n }\n setItem(key: string, value: JavaScriptObject): boolean {\n return cookies.setItem(key, JSON.stringify(value), this.options);\n }\n removeItem(key: string): boolean {\n return cookies.removeItem(key, this.options);\n }\n clear(): string[] {\n return cookies.clear();\n }\n}\n","\nexport enum BROWSER_STORAGE_TYPE {\n COOKIE = 'COOKIE',\n SESSION = 'SESSION',\n}\n\n\n/**\n * Scope boundaries are values associated with runs. They help to define the *default* user permissions used when a run is created, althought further permission configuration can be done with {@link #ROLE lock types}. Scopes also provide an index that in which a run can be queried for.\n *\n * Three parts -- boundary: level of hierarchy (ontology) that a piece of data belongs to. Specifically, a run, an asset, or a vault data\n * Boundary in which a piece of data (run, asset, vault) is ID-ed to (see scopeKey).\n *\n * pseudonymKey, goes in tandem w/ permit (lock types) --\n * Data lives and dies with scope, delete the scope, you lose the data and associated scopes\n * @enum {string}\n */\nexport enum SCOPE_BOUNDARY {\n /**\n * Runs scoped by project, users and facilitators are allowed access so long as they are a user in a group on the project.\n * @constant\n * @type {string}\n */\n PROJECT = 'PROJECT',\n /**\n * Runs scoped by group, users and facilitators are allowed access only if they are in the associated group\n * Groups are scoped by projects\n * @constant\n * @type {string}\n */\n GROUP = 'GROUP',\n /**\n * Runs scoped by episode, not sure what this one is permission-wise\n * Episodes are scoped by groups\n * @constant\n * @type {string}\n */\n EPISODE = 'EPISODE',\n /**\n * Runs scoped by world, users are only allowed access to the if they are assigned to the associated world. Facilitators need only to belong on the group that created the world\n * Worlds can be scoped by group or episode\n * @constant\n * @type {string}\n */\n WORLD = 'WORLD',\n}\n\n/**\n * Rituals are used to define the way in which the Epicenter stores a run while running actions like getting variables, saving meta data, and call model operations. Runs can exist in-memory for a certain amount of time before expiring, and requiring their revival again before use.\n * @enum {string}\n */\nexport enum RITUAL {\n /**\n * Allow GET action against archive, no revival of run\n * @constant\n * @type {string}\n */\n NONE = 'NONE',\n /**\n * Does not allow restore and will not access archived state (if down stay down)\n * @constant\n * @type {string}\n */\n INTER = 'INTER',\n /**\n * A run with this ritual will be pulled into memory as needed, and will stay in memory until it's lifespan (defined in your project Settings) has expired.\n * @constant\n * @type {string}\n */\n REANIMATE = 'REANIMATE',\n /**\n * Will always restore, and never access archived state\n * @constant\n * @type {string}\n */\n REVIVE = 'REVIVE',\n /**\n * A run with this ritual will be pulled into memory as needed, and removed from memory afterwards.\n * @constant\n * @type {string}\n */\n EXORCISE = 'EXORCISE',\n /**\n * Will always restore, and never access archived state, but will also terminate the run after issuing the command.\n * @constant\n * @type {string}\n */\n RESURRECT = 'RESURRECT',\n}\n\n/**\n * Push categories are pre-defined channels types in which one might use to receive push channel updates\n * @enum {string}\n */\nexport enum PUSH_CATEGORY {\n /**\n * intended for messaging users\n * yes pub\n * @constant\n * @type {string} */\n CHAT = 'CHAT',\n /**\n * Used for the {@link https://github.com/forio Consensus API}\n * no pub\n * @constant\n * @type {string} */\n CONSENSUS = 'CONSENSUS',\n /**\n * intended for general non-chat, sim-level communication\n * yes pub\n * @constant\n * @type {string} */\n CONTROL = 'CONTROL',\n /**\n * Used for the {@link https://github.com/forio Presence API}\n * no pub\n * @constant\n * @type {string} */\n PRESENCE = 'PRESENCE',\n /**\n * intended for awaiting entering games\n * yes pub\n * @constant\n * @type {string} */\n LOBBY = 'LOBBY',\n /**\n * Used for the {@link https://github.com/forio Run API}\n * no pub\n * @constant\n * @type {string} */\n RUN = 'RUN',\n /**\n * Used for the {@link https://github.com/forio Vault API}\n * no pub\n * @constant\n * @type {string}\n */\n VAULT = 'VAULT',\n /**\n * Used for the {@link https://github.com/forio Video API}\n * no pub\n * @constant\n * @type {string}\n */\n VIDEO = 'VIDEO',\n /**\n * Used for the {@link https://github.com/forio World API}\n * no pub\n * @constant\n * @type {string}\n */\n WORLD = 'WORLD',\n /**\n * For group related things; assignments, unassignments\n * @constant\n * @type {string}\n */\n GROUP = 'GROUP',\n /**\n * internal\n * @constant\n * @type {string} */\n SYSTEM = 'SYSTEM',\n}\n\nexport enum INTERNAL_ROLE {\n /**\n * System -- Epicenter Manager\n * @constant\n * @type {string}\n */\n SYSTEM = 'SYSTEM',\n /**\n * System minus -- read-only system access, write for certain accounts; think Geromel\n * @constant\n * @type {string}\n */\n MONITOR = 'MONITOR',\n /**\n * Author -- Team Members (and node server API keys)\n * tied to one account (personal + current account)\n * @constant\n * @type {string}\n */\n}\n\nexport enum ACCOUNT_ROLE {\n /**\n * Author -- Team Members (and node server API keys)\n * tied to one account (personal + current account)\n * @constant\n * @type {string}\n */\n AUTHOR = 'AUTHOR',\n /**\n * Author minus\n * @constant\n * @type {string}\n */\n SUPPORT = 'SUPPORT',\n}\n\nexport enum PROJECT_ROLE {\n /**\n * Intended role for admin users who should only have access to a specific project\n * @constant\n * @type {string}\n */\n ASSOCIATE = 'ASSOCIATE',\n}\n\nexport enum GROUP_ROLE {\n /**\n * Facilitators\n * @constant\n * @type {string}\n */\n FACILITATOR = 'FACILITATOR',\n /**\n * Reviewers (weaker facilitator)\n * Facilitator minus\n * @constant\n * @type {string}\n */\n REVIEWER = 'REVIEWER',\n /**\n * Users -- psuedonymKey (userKey) required in scope\n * e.g., an avatar -- GROUP scope, PARTICIPANT read, USER write, userKey pseudonymKey\n * @constant\n * @type {string}\n */\n USER = 'USER',\n /**\n * Leader\n * Participant plus\n * @constant\n * @type {string}\n */\n LEADER = 'LEADER',\n /**\n * Participant\n * @constant\n * @type {string}\n */\n PARTICIPANT = 'PARTICIPANT',\n /**\n * Anonymous\n * @constant\n * @type {string}\n */\n ANONYMOUS = 'ANONYMOUS',\n}\n\n\n/**\n * Roles are used to define permissions on resources in Epicenter.\n * @enum {string}\n */\nexport enum ROLE {\n /**\n * System -- Epicenter Manager\n * @constant\n * @type {string}\n */\n SYSTEM = 'SYSTEM',\n /**\n * System minus -- read-only system access, write for certain accounts; think Geromel\n * @constant\n * @type {string}\n */\n MONITOR = 'MONITOR',\n /**\n * Author -- Team Members (and node server API keys)\n * tied to one account (personal + current account)\n * @constant\n * @type {string}\n */\n AUTHOR = 'AUTHOR',\n /**\n * Author minus\n * @constant\n * @type {string}\n */\n SUPPORT = 'SUPPORT',\n /**\n * Facilitators\n * @constant\n * @type {string}\n */\n FACILITATOR = 'FACILITATOR',\n /**\n * Reviewers (weaker facilitator)\n * Facilitator minus\n * @constant\n * @type {string}\n */\n REVIEWER = 'REVIEWER',\n /**\n * Users -- psuedonymKey (userKey) required in scope\n * e.g., an avatar -- GROUP scope, PARTICIPANT read, USER write, userKey pseudonymKey\n * @constant\n * @type {string}\n */\n USER = 'USER',\n /**\n * Leader\n * Participant plus\n * @constant\n * @type {string}\n */\n LEADER = 'LEADER',\n /**\n * Participant\n * @constant\n * @type {string}\n */\n PARTICIPANT = 'PARTICIPANT',\n /**\n * Anonymous\n * @constant\n * @type {string}\n */\n ANONYMOUS = 'ANONYMOUS',\n}\n\n\n// /**\n// * Roles are used to define permissions on resources in Epicenter.\n// * @enum {string}\n// */\n// export const ROLE = {\n// ...INTERNAL_ROLE,\n// ...ACCOUNT_ROLE,\n// ...PROJECT_ROLE,\n// ...GROUP_ROLE,\n// };\n\n// export type ROLE = INTERNAL_ROLE | ACCOUNT_ROLE | PROJECT_ROLE | GROUP_ROLE;\n\n\nexport interface Permit {\n readLock: keyof typeof ROLE,\n writeLock: keyof typeof ROLE,\n}\n\nexport interface GenericScope {\n scopeBoundary: keyof typeof SCOPE_BOUNDARY,\n scopeKey: string,\n}\n\n/**\n * Generic search options for adapter methods. All adapter methods\n * will take `filter` and `sort` as a list of strings, and join with a \";\"\n */\nexport interface GenericSearchOptions {\n filter?: string[],\n sort?: string[],\n first?: number,\n max?: number,\n count?: boolean,\n}\n\n/**\n * The query parameters expected by the Epicenter APIs for\n * any kind of open search on a resource.\n */\nexport interface APISearchOptions {\n filter?: string,\n sort?: string,\n first?: number,\n max?: number,\n}\n","/* eslint-disable no-new-func */\nexport const isBrowser = new Function('try {return this===window;}catch(e){ return false;}');\nexport const isNode = new Function('try {return (typeof process !== \"undefined\") && (typeof process.versions.node !== \"undefined\")}catch(e){return false;}');\n\n\nexport const last = (strOrArr: string | Array<unknown>): unknown => strOrArr[strOrArr.length - 1];\nexport const prefix = (pre: string, str: string): string => str.startsWith(pre) ? str : `${pre}${str}`;\n","import EpicenterError from './error';\nimport { isBrowser, isNode } from './helpers';\n\n\nconst API_VERSION = 3;\nclass Config {\n _apiVersion = API_VERSION;\n _apiProtocol = '';\n _apiHost = '';\n _useProjectProxy = false;\n _accountShortName = '';\n _projectShortName = '';\n\n authOverride?: string\n\n constructor() {\n if (isBrowser()) {\n this.loadBrowser();\n return;\n }\n if (isNode()) {\n this.loadNode();\n return;\n }\n throw new EpicenterError('Could not identify environment; no configuration was setup');\n }\n\n /**\n * Protocol used to make network requests (whether `http://` or `https://`). It is typically set on-load based on your browser's URL. For local development, this is defaulted to `https`, and can be overwritten if desired.\n * @memberof config\n * @type {string}\n * */\n get apiProtocol() {\n return this._apiProtocol;\n }\n\n set apiProtocol(apiProtocol) {\n if (!apiProtocol.startsWith('http')) return;\n if (apiProtocol.endsWith(':')) {\n apiProtocol = apiProtocol.slice(0, -1);\n }\n this._apiProtocol = apiProtocol;\n }\n\n /**\n * Hostname used to make network requests. It is typically set on-load based on your browser's URL. For local development, this is defaulted to `forio.com`, and can be overwritten if desired.\n * @memberof config\n * @type {string}\n * */\n get apiHost() {\n return this._apiHost;\n }\n\n set apiHost(apiHost) {\n this._apiHost = apiHost;\n }\n\n /**\n * If true, requests are routed to project proxy server.\n * The proxy server processes requests and forwards them to the Epicenter platform as appropriate,\n * usually with some modification. Can be used to grant heightened privileges to a request.\n * @memberof config\n * @type {boolean}\n */\n get useProjectProxy() {\n return this._useProjectProxy;\n }\n\n set useProjectProxy(useProjectProxy) {\n this._useProjectProxy = useProjectProxy;\n }\n\n /**\n * Version used to make network requests. This is read-only variable intended for internal use.\n * @memberof config\n * @type {number}\n */\n get apiVersion() {\n return this._apiVersion;\n }\n\n set apiVersion(_apiVersion) {\n return;\n }\n\n /**\n * Account name used for making network requests. This is the default value used by Epicenter API adapters when making network requests without explicitly defining an account to use. It is defined on-load based on your browser's URL, and can be overwritten for local development.\n * @example\n * // with browser URL: https://forio.com/app/acme-simulations/foobar-game\n *\n * console.log(epicenter.config.accountShortName);\n * // should log 'acme-simulations'\n *\n * epicenter.runAdapter.get(123);\n * // instantiates a GET call with the URL: https://forio.com/api/v3/acme-simulations/foobar-game/run/123\n *\n * epicenter.config.accountShortName = 'globex-simuations';\n * epicenter.runAdapter.get(123);\n * // now instantiates a GET with the URL: https://forio.com/api/v3/globex-simulations/foobar-game/run/123\n *\n * epicenter.runAdapter.get(123, { accountShortName: 'initech-simulations' });\n * // now instantiates a GET with the URL: https://forio.com/api/v3/initech-simulations/foobar-game/run/123\n *\n * @memberof config\n * @type {string}\n */\n get accountShortName() {\n return this._accountShortName;\n }\n\n set accountShortName(accountShortName) {\n this._accountShortName = accountShortName;\n }\n /**\n * Project name used for making network requests. This is the default value used by Epicenter API adapters when making network requests without explicitly defining an account to use. It is defined on-load based on your browser's URL, and can be overwritten for local development.\n * @example\n * // with browser URL: https://forio.com/app/acme-simulations/foobar-game\n *\n * console.log(epicenter.config.projectShortName);\n * // should log 'foobar-game'\n *\n * epicenter.runAdapter.get(123);\n * // instantiates a GET call with the URL: https://forio.com/api/v3/acme-simulations/foobar-game/run/123\n *\n * epicenter.config.projectShortName = 'barfoo-game';\n * epicenter.runAdapter.get(123);\n * // now instantiates a GET with the URL: https://forio.com/api/v3/acme-simulations/barfoo-game/run/123\n *\n * epicenter.runAdapter.get(123, { projectShortName: 'barbaz-game' });\n * // now instantiates a GET with the URL: https://forio.com/api/v3/acme-simulations/barbaz-game/run/123\n *\n * @memberof config\n * @type {string}\n */\n get projectShortName() {\n return this._projectShortName;\n }\n\n set projectShortName(projectShortName) {\n this._projectShortName = projectShortName;\n }\n\n /**\n * Use to determines whether or not the environment is local.\n * @memberof config\n * @return whether or not environment is local.\n */\n isLocal() {\n if (!isBrowser()) return false;\n const host = window.location.host;\n return host === '127.0.0.1' ||\n host.indexOf('local.') === 0 ||\n host.indexOf('ngrok') !== -1 ||\n host.indexOf('localhost') === 0;\n }\n\n loadNode() {\n this.apiProtocol = 'https';\n this.apiHost = 'forio.com';\n return;\n }\n\n loadBrowser() {\n const isLocal = this.isLocal();\n const { protocol, pathname, host } = window.location;\n this.apiProtocol = isLocal ? 'https' : protocol;\n this.apiHost = isLocal ? 'forio.com' : host;\n\n const match = pathname.match(/\\/app\\/([\\w-]+)\\/([\\w-]+)/);\n if (match) {\n const [account, project] = match.slice(1);\n this.accountShortName = account;\n this.projectShortName = project;\n }\n }\n\n setContext(context: {\n apiProtocol?: string,\n apiHost?: string,\n useProjectProxy?: boolean,\n accountShortName?: string,\n projectShortName?: string,\n }) {\n if (context.apiProtocol) this.apiProtocol = context.apiProtocol;\n if (context.apiHost) this.apiHost = context.apiHost;\n if (typeof context.useProjectProxy === 'boolean') this.useProjectProxy = context.useProjectProxy;\n if (context.accountShortName) this.accountShortName = context.accountShortName;\n if (context.projectShortName) this.projectShortName = context.projectShortName;\n }\n}\n\nconst config = new Config();\n/**\n * Configuration -- used to set up and configure global settings for Epicenter JS libs.\n * @namespace config\n */\nexport default config;\n","import EpicenterError from './error';\nimport cookies from './cookies';\nimport { NodeStore, SessionStore, CookieStore } from './store';\nimport { BROWSER_STORAGE_TYPE, ROLE } from './constants';\nimport { isNode } from './helpers';\nimport config from './config';\nconst { COOKIE, SESSION } = BROWSER_STORAGE_TYPE;\n\nexport interface UserSession {\n token: string,\n userKey: string,\n groupKey?: string,\n groupName?: string,\n groupRole?: string,\n multipleGroups?: boolean,\n accountShortName: string,\n projectShortName?: string, // undefined when multipleGroups: true\n projectKey?: string,\n displayName: string,\n objectType: 'user',\n loginMethod: {\n objectType: string,\n },\n}\n\nexport interface AdminSession {\n adminHandle: string,\n adminKey: string,\n expires: boolean,\n multipleAccounts: boolean,\n objectType: 'admin'\n teamAccountRole: ROLE.AUTHOR | ROLE.SUPPORT,\n teamAccountShortName: string,\n projectShortName?:string,\n projectKey?: string,\n groupKey?: string,\n timeoutMinutes: number,\n token: string,\n}\n\nexport type Session = UserSession | AdminSession;\n\n\nconst SESSION_KEY = 'com.forio.epicenter.session';\nconst EPI_SSO_KEY = 'epicenter.v3.sso';\nclass Identification {\n type\n\n constructor(storeType: keyof typeof BROWSER_STORAGE_TYPE) {\n if (storeType !== COOKIE && storeType !== SESSION) {\n throw new EpicenterError(`Invalid Storage Type: \"${storeType}\", please use \"${COOKIE}\" or \"${SESSION}\".`);\n }\n this.type = storeType;\n this.consumeSSO();\n }\n get session() {\n const Store = this.getStore();\n return new Store().getItem(SESSION_KEY) as Session;\n }\n set session(session: Session | undefined) {\n const Store = this.getStore();\n const options = this.getStoreOptions(session);\n\n if (session) {\n new Store(options).setItem(SESSION_KEY, session as Session);\n } else if (this.session) {\n new Store(options).removeItem(SESSION_KEY);\n }\n }\n setSessionWithOptions(session: Session | undefined, forcePathInclusion: boolean) {\n const Store = this.getStore();\n const options = this.getStoreOptions(session, forcePathInclusion);\n\n if (session) {\n new Store(options).setItem(SESSION_KEY, session as Session);\n } else if (this.session) {\n new Store(options).removeItem(SESSION_KEY);\n }\n }\n getStore() {\n if (isNode()) return NodeStore;\n switch (this.type) {\n case SESSION: return SessionStore;\n case COOKIE:\n default: return CookieStore;\n }\n }\n /* Generates the appropriate path for storing your session (applicable only to cookies) */\n getStoreOptions(session?: Session, forcePathInclusion?: boolean) {\n const mySession = session || this.session;\n if (!mySession || isNode()) return '';\n\n const { objectType } = mySession;\n const isLocal = config.isLocal();\n const base = { samesite: isLocal ? 'lax' : 'none', secure: !isLocal };\n const isCustomDomain = !isLocal && window.location.pathname.split('/')[1] !== 'app';\n const isEpicenterDomain = !isLocal && !isCustomDomain;\n if ((objectType === 'user' || forcePathInclusion) && isEpicenterDomain) {\n const { accountShortName, projectShortName } = config;\n const account = accountShortName ? `/${accountShortName}` : '';\n const project = account && projectShortName ? `/${projectShortName}` : '';\n return { ...base, path: `/app${account}${project}` };\n }\n /* Admins and any custom domains (ones that don't use 'app/account/project') get the root path */\n return { ...base, path: '/' };\n }\n consumeSSO() {\n if (isNode()) return;\n\n // Occasionally, the backend might already wrap the cookie in quotes, have to handle\n // both cases, where we get string serialized content w/ quotes and without\n let cookieContent = cookies.getItem(EPI_SSO_KEY);\n if (\n typeof cookieContent === 'string' &&\n cookieContent.charAt(0) !== '\"' &&\n cookieContent.charAt(cookieContent.length - 1) !== '\"'\n ) {\n cookieContent = `\"${cookieContent}\"`;\n }\n\n /* Double parse here b/c the backend serializes it as a string; the first parse\n * converts it into a json string, the second parse converts the json string into\n * json. Yes, it's weird, no, we can't change it (unless we want to rewrite\n * Interface Builder code to accommodate) */\n const session = JSON.parse(JSON.parse(cookieContent ?? '\"null\"'));\n\n if (session) {\n const { accountShortName, projectShortName } = session;\n const account = accountShortName ? `/${accountShortName}` : '';\n const project = account && projectShortName ? `/${projectShortName}` : '';\n this.session = session;\n cookies.removeItem(EPI_SSO_KEY, { domain: `.${window.location.hostname}`, path: `/app${account}${project}` });\n }\n }\n}\n\nconst identification = new Identification(COOKIE);\nexport default identification;\n\n","import type { RetryFunction } from './router';\nimport Fault from './fault';\n\n\ntype Identifier = (error: Fault) => boolean\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype HandleFunction = <T>(error: Fault, retry: RetryFunction<T>) => Promise<any>\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport interface Handler {\n identifier: Identifier,\n handle: HandleFunction,\n unregister: () => void,\n}\n\nclass ErrorManager {\n _handlers: Handler[] = [];\n\n get handlers() {\n return this._handlers;\n }\n\n clearHandlers() {\n this._handlers = [];\n }\n\n registerHandler(\n identifier: Identifier,\n handleFn: HandleFunction\n ) {\n const handler = {\n identifier,\n handle: handleFn,\n unregister: () => this.unregisterHandler(identifier),\n };\n this.handlers.unshift(handler);\n return handler;\n }\n\n unregisterHandler(identifier: Identifier) {\n const index = this.handlers.findIndex((handler) => handler.identifier === identifier);\n if (index > -1) this.handlers.splice(index, 1);\n }\n\n async handle<Output>(\n error: Fault,\n retryFn: RetryFunction<Output>,\n handlers?: Handler[]\n ): Promise<Output> {\n handlers = handlers || this.handlers;\n const index = handlers.findIndex(({ identifier }) => identifier(error));\n const handler = handlers[index];\n if (!handler) throw error;\n let promise;\n try {\n promise = await handler.handle(error, retryFn).catch((err) => {\n /* This catch call ensures that handle always returns a promise,\n otherwise it'd be caught in the catch block below */\n throw err;\n });\n } catch (e) {\n console.error('Handler failed due to error', e);\n const remainingHandlers = index > -1 ? [...handlers.slice(0, index), ...handlers.slice(index + 1)] : [];\n // Try to handle the new error with the remaining handlers, otherwise keep trying to handle the original error\n const handleableError = e instanceof Fault ? e : error;\n promise = await this.handle(handleableError, retryFn, remainingHandlers);\n }\n return promise;\n }\n}\n\nconst errorManager = new ErrorManager();\n/**\n * Configuration -- used to set up and configure global settings for Epicenter JS libs.\n * @namespace errorManager\n */\nexport default errorManager;\n","import fetch from 'cross-fetch';\nimport EpicenterError from './error';\nimport Fault from './fault';\nimport Result from './result';\nimport identification from './identification';\nimport errorManager from './error-manager';\nimport config from './config';\nimport { prefix, isBrowser } from './helpers';\n\n\ntype Version = number | undefined;\ntype Server = string | undefined;\ntype UseProjectProxy = boolean | undefined;\ntype AccountShortName = string | undefined;\ntype ProjectShortName = string | undefined;\ntype Authorization = string | undefined;\ntype QueryObject = Record<string, unknown>;\ntype SearchParams = string | string[][] | URLSearchParams | QueryObject;\n\nexport interface RoutingOptions {\n authorization?: Authorization,\n server?: Server,\n useProjectProxy?: UseProjectProxy,\n accountShortName?: AccountShortName,\n projectShortName?: ProjectShortName,\n query?: SearchParams,\n headers?: Record<string, string>,\n body?: unknown,\n includeAuthorization?: boolean,\n inert?: boolean | ((fault: Fault) => boolean),\n paginated?: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parsePage?: (values: any[]) => any[],\n}\n\ninterface RequestOptions extends RoutingOptions {\n method: string,\n}\n\nexport interface RetryFunction<Output> {\n (): Promise<Output>,\n requestArguments?: { url: URL } & RequestOptions,\n}\n\nexport interface Page<Item> {\n firstResult: number,\n maxResults: number,\n totalResults: number,\n values: Item[],\n prev: () => Promise<Item[]>,\n next: () => Promise<Item[]>,\n all: (first?: number, allValues?: Item[]) => Promise<Item[]>,\n}\n\nconst MAX_URL_LENGTH = 2048;\nfunction paginate(json: Page<unknown>, url: URL, options: RequestOptions) {\n const parsePage = options.parsePage ?? (<T>(i: T) => i);\n const page = {...json, values: parsePage(json.values)};\n const prev = async function() {\n const searchParams = new URLSearchParams(url.search);\n if (page.firstResult === 0) {\n console.warn('Pagination: cannot call \"prev\" on first page');\n return [];\n }\n\n const first = page.firstResult - page.maxResults;\n const max = page.maxResults + (first < 0 ? first : 0);\n\n searchParams.set('first', Math.max(first, 0).toString());\n searchParams.set('max', max.toString());\n url.search = searchParams.toString();\n // eslint-disable-next-line no-use-before-define\n const prevPage = await request(url, {...options, paginated: false}).then(({body}) => body);\n prevPage.values = parsePage(prevPage.values);\n Object.assign(page, prevPage);\n return page.values;\n };\n\n const next = async function() {\n const searchParams = new URLSearchParams(url.search);\n const first = page.firstResult + page.maxResults;\n if (first >= page.totalResults) {\n console.warn('Pagination: cannot call \"next\" on final page');\n return [];\n }\n\n searchParams.set('first', first.toString());\n url.search = searchParams.toString();\n // eslint-disable-next-line no-use-before-define\n const nextPage = await request(url, {...options, paginated: false}).then(({body}) => body);\n nextPage.values = parsePage(nextPage.values);\n Object.assign(page, nextPage);\n return page.values;\n };\n\n const initialTotal = json.totalResults;\n const all = async function(first = 0, allValues: unknown[] = []): Promise<unknown[]> {\n if (first >= initialTotal) return allValues;\n\n const searchParams = new URLSearchParams(url.search);\n searchParams.set('first', first.toString());\n searchParams.delete('max');\n url.search = searchParams.toString();\n // eslint-disable-next-line no-use-before-define\n const nextPage = await request(url, {...options, paginated: false}).then(({body}) => body);\n allValues.push(...parsePage(nextPage.values));\n return all(first + nextPage.maxResults, allValues);\n };\n\n page.prev = prev;\n page.next = next;\n page.all = all;\n return page;\n}\n\nconst parseQuery = (query: SearchParams) => {\n if (query.constructor === URLSearchParams) {\n return query;\n }\n\n /* 'query' should be either an array, or string. Objects will be coerced into [key, value] arrays */\n if (typeof query === 'object' && query.constructor === Object) {\n query = Object.entries(query).reduce((arr, [key, value]) => {\n if (Array.isArray(value)) {\n /* Special case for arrayed param values: use duplicated params here */\n return [...arr, ...value.map((v) => [key, v])];\n }\n if (value === undefined || value === null) {\n /* Skip nullish values */\n return arr;\n }\n arr.push([key, value.toString()]);\n return arr;\n }, [] as string[][]);\n }\n return new URLSearchParams(query as string | string[][] | URLSearchParams);\n};\n\n\ninterface Message {\n headers: HeadersInit,\n body: BodyInit | null,\n}\n\nconst createMessage = (\n headersRaw?: Record<string, string>,\n bodyRaw?: unknown,\n includeAuthorization?: boolean,\n authorization?: string,\n): Message => {\n const headers = Object.assign({}, headersRaw);\n let body = null;\n if (isBrowser() && bodyRaw instanceof FormData) {\n body = bodyRaw;\n } else if (bodyRaw) {\n headers['Content-type'] = 'application/json; charset=UTF-8';\n body = JSON.stringify(bodyRaw);\n }\n\n if (!includeAuthorization) {\n delete headers.Authorization;\n return { headers, body };\n }\n\n const { session } = identification;\n if (!headers.Authorization) { // \"headers\" option as primary everything\n if (session) headers.Authorization = `Bearer ${session.token}`; // session token should be default\n if (authorization) headers.Authorization = authorization; // Router option as tertiary override\n if (config.authOverride) headers.Authorization = config.authOverride; // config fallback as secondary override\n }\n return { headers, body };\n};\n\nconst NO_CONTENT = 204;\nconst BAD_REQUEST = 400;\nconst OK = 200;\nasync function request(\n url: URL,\n options: RequestOptions,\n): Promise<Result> {\n const { method, headers, body, includeAuthorization, inert, paginated, authorization } = options;\n const message = createMessage(\n headers,\n body,\n includeAuthorization,\n authorization,\n );\n\n const response = await fetch(url.toString(), {\n method,\n cache: 'no-cache',\n redirect: 'follow',\n headers: message.headers,\n body: message.body,\n });\n\n if (response.status === NO_CONTENT) {\n return new Result(undefined, response);\n }\n\n const resContentType = response.headers.get('content-type');\n if (!resContentType || !resContentType.includes('application/json')) {\n throw new EpicenterError(`Response content-type '${resContentType}' does not include 'application/json' and my url is ${url.toString()}, ${method}`);\n }\n\n const json = await response.json();\n if ((response.status >= OK) && (response.status < BAD_REQUEST)) {\n const result = new Result(\n paginated ? paginate(json, url, options) : json,\n response\n );\n return result;\n }\n\n const fault = new Fault(json, response);\n if (inert === true) throw fault;\n if (typeof inert === 'function' && inert(fault)) throw fault;\n\n const retryOptions = {...options, inert: true};\n const retry = () => request(url, retryOptions);\n retry.requestArguments = {\n url,\n ...retryOptions,\n };\n return errorManager.handle<Result>(fault, retry);\n}\n\n/**\n * Used to make the network calls in all API adapters\n */\nexport default class Router {\n _version: Version = undefined\n _server: Server = undefined\n _useProjectProxy: UseProjectProxy = undefined;\n _accountShortName: AccountShortName = undefined;\n _projectShortName: ProjectShortName = undefined;\n _authorization: Authorization = undefined;\n _searchParams = new URLSearchParams();\n\n /**\n * The version of the Epicenter APIs being invoked; expected to stay at `3`\n */\n get version(): Version {\n return this._version;\n }\n\n set version(value: Version) {\n this._version = value;\n }\n\n /**\n * The root path used for the call, essentially protocol + hostname\n * @type {string}\n */\n get server(): Server {\n return this._server;\n }\n\n set server(value: Server) {\n this._server = value;\n }\n\n /**\n * If true, requests are routed to project proxy server.\n * The proxy server processes requests and forwards them to the Epicenter platform as appropriate,\n * usually with some modification. Can be used to grant heightened privileges to a request.\n *\n * If true, prefixes all request pathnames with `proxy/${accountShortName}/${projectShortName}/`.\n * @type {boolean}\n */\n get useProjectProxy(): UseProjectProxy {\n return this._useProjectProxy;\n }\n\n set useProjectProxy(value: UseProjectProxy) {\n this._useProjectProxy = value;\n }\n\n /**\n * Name of the account; for administrative use, this value should be set to 'epicenter'\n * @type {string}\n */\n get accountShortName(): AccountShortName {\n return this._accountShortName;\n }\n\n set accountShortName(value: AccountShortName) {\n this._accountShortName = value;\n }\n\n /**\n * Name of the project; for administrative use, this value should be set to 'manager'\n * @type {string}\n */\n get projectShortName(): ProjectShortName {\n return this._projectShortName;\n }\n\n set projectShortName(value: ProjectShortName) {\n this._projectShortName = value;\n }\n\n /**\n * Auth header; looks like `Bearer TOKEN` or `Basic TOKEN`\n * @type {string}\n */\n get authorization(): Authorization {\n return this._authorization;\n }\n\n set authorization(value: Authorization) {\n this._authorization = value;\n }\n\n /**\n * The search parameters for to use when making a network request. This property has should always return an instance of URLSearchParams or undefined. It has unique properties when used with the assignment operator (`=`); see the examples below for more details.\n * @type {URLSearchParams}\n *\n * @example\n * const router = new Router();\n * router.searchParams = '?foo=123';\n * console.log(router.searchParams); // always returns an instance object: URLSearchParams {}\n * console.log(router.searchParams.toString()); // logs 'foo=123'\n *\n * router.searchParams = 'foo=123'; // can omit the question mark\n * console.log(router.searchParams.toString()); // logs 'foo=123'\n *\n * router.searchParams = [['foo', '123'], ['bar', '456']]; // can accept arrays\n * console.log(router.searchParams.toString()); // logs 'foo=123&bar=456'\n *\n * router.searchParams = { foo: '123', bar: '456' }; // can accept objects\n * console.log(router.searchParams.toString()); // logs 'foo=123&bar=456'\n *\n * router.searchParams = { foo: '123', bar: ['4', '5', '6'] }; // can accept objects with arrayed values\n * console.log(router.searchParams.toString()); // logs 'foo=123&bar=4&bar=5&bar=6'\n *\n * router.searchParams = new URLSearchParams('foo=123'); // can accept instances of URLSearchParams\n * console.log(router.searchParams.toString()); // logs 'foo=123'\n *\n * @param {object|array|string|URLSearchParams} query Value used to set the search parameters\n */\n get searchParams(): SearchParams {\n return this._searchParams;\n }\n\n set searchParams(query: SearchParams) {\n this._searchParams = parseQuery(query);\n }\n\n /**\n * Sets the version. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [version] Version to use\n * @returns {Router} The Router instance\n */\n withVersion(version?: Version): Router {\n if (typeof version !== 'undefined') this.version = version;\n return this;\n }\n\n /**\n * Sets the root path. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [server] Root path to use\n * @returns {Router} The Router instance\n */\n withServer(server?: Server): Router {\n if (typeof server !== 'undefined') this.server = server;\n return this;\n }\n\n /**\n * Sets whether to route requests to project proxy server. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [useProjectProxy] Whether to use the proxy server\n * @returns {Router} The Router instance\n */\n withProjectProxy(useProjectProxy: UseProjectProxy): Router {\n if (typeof useProjectProxy !== 'undefined') this.useProjectProxy = useProjectProxy;\n return this;\n }\n\n /**\n * Sets the account. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [accountShortName] Account name to use\n * @returns {Router} The Router instance\n */\n withAccountShortName(accountShortName?: AccountShortName): Router {\n if (typeof accountShortName !== 'undefined') this.accountShortName = accountShortName;\n return this;\n }\n\n /**\n * Sets the project. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [projectShortName] Project name to use\n * @returns {Router} The Router instance\n */\n withProjectShortName(projectShortName?: ProjectShortName): Router {\n if (typeof projectShortName !== 'undefined') this.projectShortName = projectShortName;\n return this;\n }\n\n /**\n * Sets the project. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [projectShortName] Project name to use\n * @returns {Router} The Router instance\n */\n withAuthorization(authorization?: Authorization): Router {\n if (typeof authorization !== 'undefined') this.authorization = authorization;\n return this;\n }\n\n /**\n * Sets the search parameters. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string|array|object|URLSearchParams} [searchParams] Search parameters to use, utilizes the same setter as [searchParams](#Router-searchParams)\n * @returns {Router} The Router instance\n */\n withSearchParams(searchParams?: SearchParams): Router {\n if (typeof searchParams !== 'undefined') this.searchParams = searchParams;\n return this;\n }\n\n /**\n * Creates the URL that would be used for a network request. Should prioritize any overrides provided to it, falling back to any values set local to the Router instance, falling back to values set in the config\n * @param uriComponent The URI component used to generate the URL object\n * @param [overrides] Overrides for generating the URL object\n * @param [overrides.server] Override for the root URL string -- composed of the protocol and the hostname; e.g., https://forio.com\n * @param [overrides.useProjectProxy] Override for routing requests to the project proxy server\n * @param [overrides.accountShortName] Override for the account short name\n * @param [overrides.projectShortName] Override for the project short name\n * @param [overrides.version] Override for the version (NIU, is set by the config)\n * @param [overrides.query] Override for the URL search query\n * @returns URL object\n */\n getURL(\n uriComponent: string,\n overrides: {\n server?: string,\n useProjectProxy?: boolean,\n accountShortName?: string,\n projectShortName?: string,\n version?: number\n query?: SearchParams,\n } = {}\n ): URL {\n const server = overrides.server ?? this.server ?? `${config.apiProtocol}://${config.apiHost}`;\n const useProjectProxy = overrides.useProjectProxy ?? this.useProjectProxy ?? config.useProjectProxy;\n const accountShortName = overrides.accountShortName ?? this.accountShortName ?? config.accountShortName;\n const projectShortName = overrides.projectShortName ?? this.projectShortName ?? config.projectShortName;\n const version = overrides?.version ?? this.version ?? config.apiVersion;\n\n const url = new URL(`${server}`);\n\n const proxyPathComponent = useProjectProxy ? `proxy/${accountShortName}/${projectShortName}/` : '';\n const commonPathComponent = `api/v${version}/${accountShortName}/${projectShortName}`;\n const uniquePathComponent = prefix('/', uriComponent);\n\n url.pathname = `${proxyPathComponent}${commonPathComponent}${uniquePathComponent}`;\n\n url.search = overrides.query !== undefined ?\n parseQuery(overrides.query).toString() :\n (this.searchParams ?? new URLSearchParams()).toString();\n return url;\n }\n\n //Network Requests\n async get(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query, useProjectProxy,\n headers, includeAuthorization, inert, paginated, parsePage,\n } = options;\n\n const url = this.getURL(uriComponent, { server, query, accountShortName, projectShortName, useProjectProxy });\n\n if (url.href.length > MAX_URL_LENGTH) {\n const searchParams = (this.searchParams ?? new URLSearchParams()) as URLSearchParams;\n const entries = Array.from(searchParams.entries()) as Array<[string, string]>;\n const searchObject = entries.reduce((searchObject, [key, value]) => {\n // Store values that only occur once as the value itself\n if (!searchObject[key]) {\n searchObject[key] = value;\n return searchObject;\n }\n // Store values that that appear more than once in an array\n if (!Array.isArray(searchObject[key])) {\n // Make existing value an array\n searchObject[key] = [searchObject[key] as string];\n }\n (searchObject[key] as string[]).push(value);\n\n return searchObject;\n }, {} as Record<string, string | string[]>);\n this.searchParams = '';\n return this.post(uriComponent, {\n ...options,\n body: searchObject,\n });\n }\n\n return request(url, {\n method: 'GET',\n headers,\n includeAuthorization: includeAuthorization ?? true,\n authorization: authorization ?? this.authorization,\n inert,\n paginated,\n parsePage,\n });\n }\n\n async delete(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query, useProjectProxy,\n headers, includeAuthorization, inert,\n } = options;\n\n const url = this.getURL(uriComponent, { server, query, accountShortName, projectShortName, useProjectProxy });\n return request(url, {\n method: 'DELETE',\n headers,\n includeAuthorization: includeAuthorization ?? true,\n authorization: authorization ?? this.authorization,\n inert,\n });\n }\n\n async patch(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query, useProjectProxy,\n headers, body, includeAuthorization, inert,\n } = options;\n\n const url = this.getURL(uriComponent, { server, query, accountShortName, projectShortName, useProjectProxy });\n return request(url, {\n method: 'PATCH',\n headers,\n body,\n includeAuthorization: includeAuthorization ?? true,\n authorization: authorization ?? this.authorization,\n inert,\n });\n }\n\n async post(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query, useProjectProxy,\n headers, body, includeAuthorization, inert,\n } = options;\n\n const url = this.getURL(uriComponent, { server, query, accountShortName, projectShortName, useProjectProxy});\n return request(url, {\n method: 'POST',\n headers,\n body,\n includeAuthorization: includeAuthorization ?? true,\n authorization: authorization ?? this.authorization,\n inert,\n });\n }\n\n async put(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query, useProjectProxy,\n headers, body, includeAuthorization, inert,\n } = options;\n\n const url = this.getURL(uriComponent, { server, query, accountShortName, projectShortName, useProjectProxy});\n return request(url, {\n method: 'PUT',\n headers,\n body,\n includeAuthorization: includeAuthorization ?? true,\n authorization: authorization ?? this.authorization,\n inert,\n });\n }\n}\n","import type { RoutingOptions } from 'utils/router';\nimport Router from 'utils/router';\n\n\ninterface AccountReadView {\n name: string;\n objectType: string;\n}\n\ninterface AccountCreateView {\n adminKey: string;\n name: string;\n shortName: string;\n sharedSecret?: string;\n workerPartition?: string;\n active?: boolean;\n}\n\ninterface PersonalAccountCreateView extends AccountCreateView {\n objectType: 'personal';\n}\n\ninterface TeamAccountCreateView extends AccountCreateView {\n objectType: 'team';\n billingInterval: string;\n subscriptionPlan: string;\n}\n\ninterface AccountUpdateView {\n name?: string;\n workerPartition?: string;\n active?: boolean;\n}\n\ninterface PersonalAccountUpdateView extends AccountUpdateView {\n objectType: 'personal';\n}\n\ninterface TeamAccountUpdateView extends AccountUpdateView {\n objectType: 'team';\n billingInterval?: string;\n}\n\nexport async function getAccount(accountShortName: string): Promise<AccountReadView> {\n return await new Router()\n .withAccountShortName(accountShortName)\n .get('/account')\n .then(({body}) => body);\n}\n\nexport async function createAccount(view: PersonalAccountCreateView | TeamAccountCreateView): Promise<AccountReadView> {\n\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .post('/account', {\n body: view,\n }).then(({body}) => body);\n}\n\nexport async function updateAccount(\n view: PersonalAccountUpdateView | TeamAccountUpdateView,\n optionals: RoutingOptions = {},\n): Promise<AccountReadView> {\n return await new Router()\n .patch('/account', {\n body: view,\n ...optionals,\n }).then(({body}) => body);\n}\n\nexport async function removeAccount(\n accountShortName: string\n): Promise<void> {\n return await new Router()\n .withAccountShortName(accountShortName)\n .delete('/account')\n .then(({body}) => body);\n}\n\nexport async function teamForAdmin(\n adminKey: string,\n optionals: {\n includeAllMembers?: boolean,\n filter?: string,\n first?: number,\n max?: number,\n } & RoutingOptions = {},\n): Promise<AccountReadView[]> {\n const {\n includeAllMembers, filter, first, max,\n ...routingOptions\n } = optionals;\n const searchParams = {\n includeAllMembers, filter, first, max,\n };\n\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .withSearchParams(searchParams)\n .get(`/account/team/for/${adminKey}`, routingOptions)\n .then(({body}) => body);\n}","import type { RoutingOptions } from '../utils/router';\nimport Router from '../utils/router';\n\nexport interface Secret {\n password: string;\n}\n\nexport interface AdminCreateView {\n [key: string]: unknown,\n handle: string;\n email: string;\n givenName?: string;\n familyName?: string;\n verified: true;\n active?: true;\n}\n\ninterface Admin {\n lastUpdated: string,\n lastLogin: string,\n created: string,\n familyName: string,\n givenName: string,\n verified: boolean,\n handle: string,\n active: boolean,\n adminKey: string,\n email: string,\n objectType: 'external' | 'native',\n}\n\nexport interface NativeAdminCreateView extends AdminCreateView {\n objectType: 'native';\n secret: Secret;\n}\n\nexport async function createAdmin(view: AdminCreateView): Promise<Admin> {\n\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .post('/admin', {\n body: view,\n }).then(({body}) => body);\n}\n\nexport async function getWithHandle(handle: string, optionals: RoutingOptions = {}) {\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .get(`/admin/with/${handle}`, optionals)\n .then(({body}) => body);\n}","import type { RoutingOptions } from '../utils/router';\nimport { ROLE, Router } from '../utils';\n\nenum ACCESS_TYPE {\n PUBLIC = 'PUBLIC',\n PRIVATE = 'PRIVATE',\n AUTHENTICATED = 'AUTHENTICATED',\n}\n\nenum WORKER_PARTITION {\n NONE = 'NONE',\n ALL = 'ALL',\n FREE = 'FREE',\n LICENSED = 'LICENSED',\n ACCOUNT = 'ACCOUNT',\n}\n\nenum PHYLOGENY {\n ORIGINAL = 'ORIGINAL',\n HISTORICAL = 'HISTORICAL',\n REFERENTIAL = 'REFERENTIAL',\n ORDERED = 'ORDERED',\n EVENTUAL = 'EVENTUAL',\n}\n\nenum FILE_TYPE {\n INSENSITIVE = 'INSENSITIVE',\n SENSITIVE = 'SENSITIVE',\n}\n\ninterface Member {\n role: ROLE.AUTHOR,\n adminKey: string,\n objectType: 'project',\n}\n\ninterface Deployment {\n defaultGroupName: string,\n autoCreatePlayer: boolean,\n loginFile: string,\n welcomeFile: string,\n groupFile: string,\n}\n\ninterface TeamProject {\n concurrentRunLimit: number,\n modelFile: string,\n available: boolean,\n allowWorldSelfAssign: boolean,\n legacySettings: {\n blockDirectApiCalls: boolean,\n channelAuthorizationRequired: boolean,\n filePermissionsActive: boolean,\n showEmail: boolean,\n transmogrifierActive: boolean,\n dataApiAllowAnonymousAccess: boolean,\n channelVersion: number,\n authorizationMode: 'LEGACY' | 'USER',\n dataApiEnforceScope: boolean,\n },\n objectType: 'team',\n accessType: keyof typeof ACCESS_TYPE,\n sessionTimeoutSeconds: number,\n projectKey: string,\n members: Member[],\n channelEnabled: boolean,\n workerPartition: keyof typeof WORKER_PARTITION,\n name: string,\n phylogeny: keyof typeof PHYLOGENY,\n multiPlayerEnabled: boolean,\n shortName: string,\n approximateRunCount: number,\n pricing: {\n amount: number,\n },\n dataRetentionDays: number,\n fileType: keyof typeof FILE_TYPE,\n dimensions: 'UNIVERSE' | 'MULTIVERSE',\n deployment: Deployment,\n channelProtocol: 'OUMUAMUA' | 'COMETD',\n}\n\ninterface PersonalProject {\n concurrentRunLimit: number,\n available: boolean,\n objectType: 'personal',\n accessType: keyof typeof ACCESS_TYPE,\n sessionTimeoutSeconds: number,\n projectKey: string,\n workerPartition: keyof typeof WORKER_PARTITION,\n name: string,\n phylogeny: keyof typeof PHYLOGENY,\n shortName: string,\n approximateRunCount: number,\n fileType: keyof typeof FILE_TYPE,\n deployment: Deployment,\n channelProtocol: 'OUMUAMUA' | 'COMETD',\n channelEnabled: boolean,\n}\n\ntype Project =\n | TeamProject\n | PersonalProject;\n\n/**\n * Checks to see if the project currently has the push channels enabled\n * @example\n * epicenter.projectAdapter.channelsEnabled();\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise resolving true/false whether or not the project supports the use of push channels\n */\nexport async function channelsEnabled(\n optionals: RoutingOptions = {}\n): Promise<boolean> {\n return await new Router()\n .get('/project/channel/isEnabled', optionals)\n .then(({ body }) => body);\n}\n\nexport async function get(\n optionals: RoutingOptions = {}\n): Promise<Project> {\n return await new Router()\n .get('/project', optionals)\n .then(({ body }) => body);\n}\n\nexport async function list(\n accountShortName: string,\n optionals: RoutingOptions = {}\n): Promise<Project[]> {\n return await new Router()\n .withAccountShortName(accountShortName)\n .withProjectShortName('manager')\n .get('/project/in', optionals)\n .then(({body}) => body);\n}\n","import type { CometD, Message, SubscribeMessage, SubscriptionHandle } from 'cometd';\nimport type Channel from './channel';\n\nimport { EpicenterError, Fault, identification, isBrowser, errorManager, config } from '../utils';\nimport { get as getProject } from './project';\n\nconst AUTH_TOKEN_KEY = 'com.forio.epicenter.token';\n\nconst DISCONNECTED = 'disconnected';\nconst CONNECTED = 'connected';\nconst FORBIDDEN = 403;\nconst CONNECT_META_CHANNEL = '/meta/connect';\nconst DISCONNECT_META_CHANNEL = '/meta/disconnect';\nconst COMETD_RECONNECTED = 'COMETD_RECONNECTED';\nconst DEFAULT_CHANNEL_PROTOCOL = 'cometd';\n\ninterface ChannelUpdate {\n data: string | Record<string, unknown>,\n}\n\nlet cometdInstance: CometD | undefined;\nclass CometdAdapter {\n\n url = '';\n initialization: Promise<boolean> | undefined = undefined;\n subscriptions = new Map();\n isConnected = false;\n\n get cometd() {\n if (!cometdInstance) {\n throw new EpicenterError('Tried to get non-existent cometd');\n }\n return cometdInstance;\n }\n set cometd(instance) {\n cometdInstance = instance;\n }\n\n async startup(options: { logLevel: 'info' | 'debug' | 'warn' } = { logLevel: 'warn' }) {\n const project = await getProject();\n if (!project.channelEnabled) throw new EpicenterError('Push Channels are not enabled on this project');\n const channelProtocol = project.channelProtocol?.toLowerCase() || DEFAULT_CHANNEL_PROTOCOL;\n\n const { CometD } = await import('cometd');\n const AckExtension = (await import('cometd/AckExtension')).default;\n const ReloadExtension = (await import('cometd/ReloadExtension')).default;\n\n this.cometd = new CometD();\n const { apiProtocol, apiHost, apiVersion, accountShortName, projectShortName } = config;\n const accountProject = (accountShortName && projectShortName) ?\n `/${accountShortName}/${projectShortName}` :\n '/epicenter/manager';\n this.url = `${apiProtocol}://${apiHost}/push/v${apiVersion}${accountProject}/${channelProtocol}`;\n\n this.cometd.registerExtension('ack', new AckExtension());\n if (isBrowser()) {\n this.cometd.registerExtension('reload', new ReloadExtension());\n\n window.onunload = () => {\n if (this.cometd.getStatus() === CONNECTED) {\n if (this.cometd.reload) this.cometd.reload();\n const transport = this.cometd.getTransport();\n if (transport) transport.abort();\n }\n };\n }\n\n // Current don't want to support CometD on node servers\n // if (isNode()) {\n // const { adapt } = await import('cometd-nodejs-client');\n // adapt();\n // }\n\n this.cometd.configure({\n url: this.url,\n logLevel: options.logLevel,\n });\n return true;\n }\n\n listenToMetaChannels() {\n const connectListener = new Promise((resolve, reject) => {\n this.cometd.addListener(CONNECT_META_CHANNEL, (message: Message) => {\n if (this.cometd.isDisconnected()) {\n return;\n }\n const wasConnected = this.isConnected;\n this.isConnected = message.successful;\n if (!wasConnected && this.isConnected) {\n const error = new Fault({\n status: undefined,\n message: 'Reconnected to CometD',\n information: {\n code: COMETD_RECONNECTED,\n },\n });\n const retry = () => Promise.resolve();\n\n try {\n const result = errorManager.handle(error, retry);\n resolve(result);\n } catch (e) {\n reject(e);\n }\n }\n });\n });\n\n const disconnectListener = new Promise((resolve) => {\n this.cometd.addListener(DISCONNECT_META_CHANNEL, (message: Message) => {\n if (message.successful) {\n this.isConnected = false;\n }\n resolve(message);\n });\n });\n\n return Promise.all([connectListener, disconnectListener]);\n }\n\n async init(options?: { logLevel: 'info' | 'debug' | 'warn' }) {\n if (!this.initialization) {\n this.initialization = this.startup(options);\n }\n return this.initialization;\n }\n\n // Connects to CometD server\n async handshake(options: { inert?: boolean } = {}) {\n await this.init();\n\n if (this.cometd.getStatus() !== DISCONNECTED) {\n return Promise.resolve();\n }\n\n let handshakeProps = {};\n const { session } = identification;\n\n if (session) {\n handshakeProps = {\n ext: {\n [AUTH_TOKEN_KEY]: session.token,\n ack: true,\n },\n };\n }\n\n // TODO -- this was line in the old libs, don't know why; probably not needed so commenting out for now.\n // this.cometd.ackEnabled = true;\n this.cometd.websocketEnabled = true;\n return new Promise((resolve, reject) => this.cometd.handshake(handshakeProps, (handshakeReply) => {\n if (handshakeReply.successful) {\n this.listenToMetaChannels();\n resolve(handshakeReply);\n return;\n }\n\n const errorMessage = handshakeReply.error ?? '';\n const error = new Fault({\n status: errorMessage.includes('403') ? FORBIDDEN : undefined,\n message: errorMessage,\n information: {\n code: 'COMETD_ERROR',\n ...handshakeReply,\n },\n });\n\n if (options.inert) {\n reject(error);\n return;\n }\n\n const retry = () => this.handshake({ inert: true });\n try {\n const result = errorManager.handle(error, retry);\n resolve(result);\n } catch (e) {\n reject(e);\n }\n }));\n }\n\n async disconnect() {\n if (!this.initialization) return Promise.resolve();\n\n await this.init();\n await this.empty();\n if (this.cometd.getStatus() !== CONNECTED) return Promise.resolve();\n\n return new Promise((resolve, reject) => this.cometd.disconnect((disconnectReply: Message) => {\n if (!disconnectReply.successful) {\n reject(new EpicenterError('Unable to disconnect from CometD server'));\n } else {\n resolve(undefined);\n }\n }));\n }\n\n async add(\n channel: Channel | Channel[],\n update: (data: unknown) => unknown,\n options: { inert?: boolean } = {}\n ): Promise<SubscriptionHandle | SubscriptionHandle[]> {\n await this.init();\n const channels = ([] as Channel[]).concat(channel);\n\n if (this.cometd?.getStatus() !== CONNECTED) {\n await this.handshake();\n }\n const { session } = identification;\n const subscriptionProps = !session ? {} :\n { ext: { [AUTH_TOKEN_KEY]: session.token } };\n\n const handleCometdUpdate = ({ data }: ChannelUpdate) => {\n // TODO -- figure out why there's ambiguity here and try to remove it\n data = typeof data === 'string' ? JSON.parse(data) : data;\n return update(data);\n };\n\n const promises: Promise<SubscriptionHandle>[] = [];\n this.cometd.batch(() => channels.forEach(({ path }) => promises.push(new Promise((resolve, reject) => {\n const subscription = this.cometd.subscribe(path, handleCometdUpdate, subscriptionProps, (subscribeReply: SubscribeMessage) => {\n if (subscribeReply.successful) {\n this.subscriptions.set(subscription.channel, subscription);\n resolve(subscription);\n return;\n }\n\n const errorMessage = subscribeReply.error ?? '';\n const error = new Fault({\n status: errorMessage.includes('403') ? FORBIDDEN : undefined,\n message: errorMessage,\n information: {\n code: 'COMETD_ERROR',\n ...subscribeReply,\n },\n });\n\n if (options.inert) {\n reject(error);\n return;\n }\n\n const retry = () => this.add(channel, update, { inert: true });\n try {\n const result = errorManager.handle<SubscriptionHandle | SubscriptionHandle[]>(error, retry);\n const sub = Array.isArray(result) ? result[0] : result;\n resolve(sub);\n } catch (e) {\n reject(e);\n }\n });\n }))));\n return promises.length === 1 ?\n Promise.all(promises).then(([res]) => res) :\n Promise.all(promises);\n }\n\n async publish(\n channel: Channel | Channel[],\n content: Record<string, unknown>,\n options: { inert?: boolean } = {}\n ) {\n await this.init();\n const channels = ([] as Channel[]).concat(channel);\n\n if (this.cometd.getStatus() !== CONNECTED) {\n await this.handshake();\n }\n const { session } = identification;\n const publishProps = {\n ext: session ? { [AUTH_TOKEN_KEY]: session.token } : undefined,\n };\n const promises: Promise<Message>[] = [];\n this.cometd.batch(() => channels.forEach(({ path }) => promises.push(new Promise((resolve, reject) => {\n this.cometd.publish(path, content, publishProps, (publishReply: Message) => {\n if (publishReply.successful) {\n resolve(publishReply);\n return;\n }\n\n const errorMessage = publishReply.error ?? '';\n const error = new Fault({\n status: errorMessage.includes('403') ? FORBIDDEN : undefined,\n message: errorMessage,\n information: {\n code: 'COMETD_ERROR',\n ...publishReply,\n },\n });\n\n if (options.inert) {\n reject(error);\n return;\n }\n\n const retry = () => this.publish(channel, content, { inert: true });\n try {\n const result = errorManager.handle<Message | Message[]>(error, retry);\n const message = Array.isArray(result) ? result[0] : result;\n resolve(message);\n } catch (e) {\n reject(e);\n }\n });\n }))));\n return promises.length === 1 ?\n Promise.all(promises).then(([res]) => res) :\n Promise.all(promises);\n }\n\n async remove(subscription: SubscriptionHandle) {\n await this.init();\n this.subscriptions.delete(subscription.channel);\n return new Promise((resolve, reject) => this.cometd.unsubscribe(subscription, (unsubscribeReply: Message) => {\n if (unsubscribeReply.successful) {\n resolve(unsubscribeReply);\n }\n const errorMessage = unsubscribeReply.error ?? '';\n // No default error handling for this\n const error = new Fault({\n status: undefined,\n message: errorMessage,\n information: {\n code: 'COMETD_ERROR',\n ...unsubscribeReply,\n },\n });\n reject(error);\n }));\n }\n\n async empty() {\n await this.init();\n this.cometd.clearSubscriptions();\n this.subscriptions.clear();\n }\n}\nconst cometdAdapter = new CometdAdapter();\nexport default cometdAdapter;\n","import type { RoutingOptions } from '../utils/router';\nimport type { Session } from '../utils/identification';\n\nimport { Router, identification } from '../utils';\nimport cometdAdapter from './cometd';\n\n\ninterface UserCredentials {\n handle: string,\n password: string,\n groupKey?: string,\n}\ninterface AppCredentials {\n secretKey: string,\n}\n\n/**\n * Authentication API adapters -- use to manage user Epicenter session.\n * @namespace authAdapter\n */\n\n/**\n * Logs out of current Epicenter session. Also disconnects from CometD and removes user presence.\n * Priorities:\n * 1. Delete local session (even if 2 and 3 fail)\n * 2. Delete remote session (even if 3 fails)\n * 3. Other cleanup (disconnect CometD, delete presence)\n * Cleanup operations require authentication, so await cleanup before delete.\n * @example\n * epicenter.authAdapter.logout()\n * @param verificationOptionals Optional arguments; pass network call options overrides here.\n * @param presenceOptionals Optional arguments; pass network call options overrides here.\n * @returns promise resolving to successful logout\n */\nexport async function logout(\n verificationOptionals: RoutingOptions = {},\n presenceOptionals: RoutingOptions = verificationOptionals\n): Promise<void> {\n const cleanup = [cometdAdapter.disconnect()];\n const groupKey = identification?.session?.groupKey;\n if (groupKey) {\n cleanup.push(\n new Router().delete(\n `/presence/group/${groupKey}`,\n presenceOptionals\n )\n );\n }\n await Promise.allSettled(cleanup);\n await new Router()\n .delete('/verification', verificationOptionals)\n .finally(() => (identification.session = undefined));\n}\n\nexport async function getSession(optionals: RoutingOptions): Promise<Session> {\n const { body } = await new Router().get('/verification', optionals);\n identification.session = body;\n return body;\n}\n\nexport function getLocalSession(): Session | undefined {\n return identification.session;\n}\n\nexport function setLocalSession(session: Session): Session {\n return identification.session = session;\n}\n\nexport async function removeLocalSession(): Promise<void> {\n identification.session = undefined;\n await cometdAdapter.disconnect();\n}\n\n// forcePathInclusion should be used to force an admin login to include the path in the generated cookie\n// use cases for this include when an admin login should be limited in scope to a single project\n// this prevents login issues when trying to access other simulations\nexport async function login(\n credentials: UserCredentials | AppCredentials,\n optionals: { objectType?: string, forcePathInclusion?: boolean } & RoutingOptions = {}\n): Promise<Session> {\n const { objectType, forcePathInclusion, ...routingOptions } = optionals;\n let payload;\n if (Object.prototype.hasOwnProperty.call(credentials, 'handle')) {\n const { handle, password, groupKey } = credentials as UserCredentials;\n payload = { objectType: objectType ?? 'user', handle, password, groupKey: groupKey || undefined };\n }\n if (Object.prototype.hasOwnProperty.call(credentials, 'secretKey')) {\n const { secretKey } = credentials as AppCredentials;\n payload = { objectType: objectType ?? 'account', secretKey };\n }\n const session = await new Router()\n .post('/authentication', {\n inert: true,\n includeAuthorization: false,\n body: payload,\n ...routingOptions,\n }).then(({ body }) => body);\n\n await removeLocalSession();\n\n identification.setSessionWithOptions(session, forcePathInclusion ?? false);\n return session;\n}\n\n/**\n * Regenerates your epicenter session with the appropriate context. Allows users to update their session to the correct group, and admins to update their session with the correct account name. Will fail if the user/admin does not already belong to the group/account.\n * @example\n * // Changes the current user session to have a group context associated with the provided key\n * epicenter.authAdapter.regenerate('00000165ad4e6a3cd22b993340b963820239');\n * // Changes the current admin session to use the account context for the 'acme' account.\n * epicenter.authAdapter.regenerate('acme', { objectType: 'admin' });\n * @param groupOrAccount Group key or account name\n * @param [optionals] Optional parameters\n * @param [optionals.objectType] The object type to regenerate for. Uses objectType: 'user' by default.\n * @returns promise resolving to the new session object\n */\nexport async function regenerate(\n groupOrAccount: string,\n optionals: {\n objectType?: string,\n forcePathInclusion?: boolean,\n } & RoutingOptions = {}\n): Promise<Session> {\n const {\n objectType = 'user',\n accountShortName,\n forcePathInclusion,\n ...routingOptions\n } = optionals;\n\n const session = await new Router()\n .patch('/authentication', {\n accountShortName: objectType === 'admin' ?\n groupOrAccount :\n accountShortName,\n body: {\n objectType,\n groupKey: objectType === 'user' ?\n groupOrAccount :\n undefined,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n\n await removeLocalSession();\n identification.setSessionWithOptions(session, forcePathInclusion ?? false);\n return session;\n}\n\nexport async function sso(\n optionals: RoutingOptions = {},\n): Promise<Session> {\n const session = await new Router()\n .get('/registration/sso', optionals)\n .then(({ body }) => body);\n\n identification.session = session;\n return session;\n}\n\n/**\n * Retrieves the SAML link from the SSO configuration\n */\nexport async function getSAMLLink(\n optionals: RoutingOptions = {},\n): Promise<string> {\n return await new Router()\n .get('/registration/sso/saml', optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Generates and returns an epicenter URL that will redirect to the SAML url.\n */\nexport function generateSAMLLINK(\n optionals: RoutingOptions = {},\n): string {\n return new Router().getURL('/registration/sso/saml', optionals).toString();\n}\n\n/**\n * Sends an outcome to an external link specified in project config. For example, sending a grade back to a third party platform.\n * @param ltiVersion The version of LTI to use. Valid versions include 1.1, 1.2, and 1.3\n * @param [outcomeInformation] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [outcomeInformation.value] The value to pass back to the outcomeServiceUrl. For example, the grade a student received upon simulation completion\n * @param [outcomeInformation.sourcedId] The id of the current assignment/student as provided by the client using the SSO service\n * @param [outcomeInformation.outcomeServiceUrl] The url called for passing back the outcome\n * @returns promise that resolves to undefined (indicating success)\n */\nexport async function ssoOutcome(\n ltiVersion : string,\n outcomeInformation: {\n value: number,\n sourcedId: string,\n outcomeServiceUrl: string,\n },\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const { ...routingOptions } = optionals;\n return await new Router()\n .post(`/lti/${ltiVersion}/outcome`, {\n body: outcomeInformation,\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n/**\n * Sends a link to reset a user's password to their email\n * @example\n * const subject = 'Please reset your password for the Acme simulation';\n * const url = 'https://forio.com/app/acme/simulations';\n * const handle = 'testUser@test.com'\n * epicenter.authAdapter.resetPassword(handle, { redirectURL, subject });\n * @param handle Handle that user would use to login\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.redirectURL] Url to redirect to after password reset is completed. Must be in the forio domain otherwise an error will be thrown\n * @param [optionals.subject] The subject of the email that will be sent\n * @returns promise that resolves to undefined (indicating success)\n */\nexport async function resetPassword(\n handle: string,\n optionals: {\n redirectURL?: string,\n subject?: string,\n } & RoutingOptions = {}\n): Promise<void> {\n const {\n redirectURL, subject,\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .post(`/verification/password/user/${handle}`, {\n ...routingOptions,\n body: {\n redirectUrl: redirectURL,\n subject,\n },\n })\n .then(({ body }) => body);\n}\n\nexport async function verify(\n token: string,\n optionals: RoutingOptions = {},\n): Promise<Session> {\n return await new Router()\n .get('/verification', {\n authorization: `Bearer ${token}`,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n","import type { RoutingOptions } from '../utils/router';\nimport type { GenericScope } from '../utils/constants';\n\nimport fetch from 'cross-fetch';\nimport { Fault, Router, ROLE } from '../utils';\n\ninterface AssetScope extends GenericScope {\n userKey?: string,\n}\n\ninterface Asset {\n file: string,\n address: {\n projectShortName: string,\n groupName: string,\n accountShortName: string,\n worldKey: string,\n episodeName: string,\n },\n scope: AssetScope,\n}\n\ninterface AssetTicket {\n url: string,\n}\n\n\nexport async function create(\n file: string,\n scope: AssetScope,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: number,\n } & RoutingOptions = {}\n): Promise<AssetTicket> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n readLock, writeLock, ttlSeconds,\n ...routingOptions\n } = optionals;\n return await new Router()\n .post('/asset', {\n body: {\n file,\n scope: {\n scopeBoundary,\n scopeKey,\n userKey,\n },\n permit: {\n readLock: readLock ?? ROLE.USER,\n writeLock: writeLock ?? ROLE.USER,\n },\n ttlSeconds,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function update(\n file: string,\n scope: AssetScope,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: number,\n } & RoutingOptions = {}\n): Promise<AssetTicket> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n readLock, writeLock, ttlSeconds,\n ...routingOptions\n } = optionals;\n return await new Router()\n .patch('/asset', {\n body: {\n file,\n scope: {\n scopeBoundary,\n scopeKey,\n userKey,\n },\n permit: {\n readLock: readLock ?? ROLE.USER,\n writeLock: writeLock ?? ROLE.USER,\n },\n ttlSeconds,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function remove(\n assetKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n return await new Router()\n .delete(`/asset/${assetKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function removeFromScope(\n scope: AssetScope,\n optionals: RoutingOptions = {}\n): Promise<void> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const uriComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .delete(`/asset/in/${scopeBoundary}/${scopeKey}${uriComponent}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function get(\n assetKey: string,\n optionals: RoutingOptions = {}\n): Promise<Asset> {\n const { server, accountShortName, projectShortName } = optionals;\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .get(`/asset/${assetKey}`)\n .then(({ body }) => body);\n}\n\nexport async function list(\n scope: AssetScope,\n optionals: {\n filter?: string,\n } & RoutingOptions = {}\n): Promise<Asset[]> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n filter,\n ...routingOptions\n } = optionals;\n const uriComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/asset/in/${scopeBoundary}/${scopeKey}${uriComponent}/${filter ?? '*'}`, routingOptions)\n .then(({ body }) => body);\n}\n\nexport async function getURL(\n assetKey: string,\n optionals: RoutingOptions = {}\n): Promise<string> {\n return await new Router()\n .get(`/asset/url/${assetKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function getURLWithScope(\n file: string,\n scope: AssetScope,\n optionals: RoutingOptions = {}\n): Promise<string> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const uriComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/asset/url/with/${scopeBoundary}/${scopeKey}${uriComponent}/${file}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function download(\n assetKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n return await new Router()\n .get(`/asset/download/${assetKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function downloadWithScope(\n file: string,\n scope: AssetScope,\n optionals: RoutingOptions = {}\n): Promise<void> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const uriComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/asset/download/with/${scopeBoundary}/${scopeKey}${uriComponent}/${file}`, optionals)\n .then(({ body }) => body);\n}\n\nconst CONFLICT = 409;\nexport async function store(\n file: File,\n scope: AssetScope,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: number,\n overwrite?: boolean,\n fileName?: string,\n } & RoutingOptions = {}\n): Promise<void> {\n const { overwrite, fileName, ...remaining } = optionals;\n const name = fileName ?? file.name;\n let presignedUrl = '';\n try {\n const response = await create(name, scope, {inert: true, ...remaining});\n presignedUrl = response.url;\n } catch (error) {\n if (error instanceof Fault) {\n const shouldUpdate = error.status === CONFLICT && overwrite;\n if (!shouldUpdate) throw error;\n const response = await update(name, scope, remaining);\n presignedUrl = response.url;\n } else {\n throw error;\n }\n }\n await fetch(presignedUrl, { method: 'PUT', body: file });\n return;\n}","import type { RoutingOptions } from '../utils/router';\nimport { Router } from 'utils/index';\n\nenum ENCODING {\n HEX = 'HEX',\n BASE_64 = 'BASE_64',\n}\n\n/**\n * Sends an email to an individual user; available to participants\n * @example\n * //Sends an email with a smiley face png attachment\n * const groupKey = epicenter.authAdapter.getLocalSession().groupKey;\n * const subject = \"check out this drawing!\"\n * const body = \"I hope you enjoy this smiley face!\"\n * const attachements = [{\n * encoding: 'BASE_64',\n * name: 'testPic',\n * contentType: 'image/png',\n * data: 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAIxJREFUWEdjZBhgwDjA9jMQ5YAvzmb/efaewquWGDXYPDvqgNEQGA2B0RAYGiFAy+KaqBAYdcDICgFQtQryMaHql1qhgjURklu3IzuKWDNwOoCSUCAlFHFmQ2J9gB4VpFgO0kvVZhaplhPlAJgPCSVKciwn6ACY5TDD8aV8Qg7EpXe0KB4NgdEQGA0BAF7VgCFTeobfAAAAAElFTkSuQmCC',\n * }];\n *\n * // Sends an email to the address associated with the provided user key, sender will be seen as \"System\"\n * epicenter.emailAdapter.sendEmail(groupKey, '000001796733eef0842f4d6d960997018a3b', subject, body, { attachments });\n * // Sends an email to the address associated with the provided user key, sender will be seen as be the address provided by the \"from\" field\n * epicenter.emailAdapter.sendEmail(groupKey, '000001796733eef0842f4d6d960997018a3b', subject, body, { attachments, from: 'sender@test.com' });\n * // Sends an email to the address defined at \"replyTo\", sender will be seen as be the address provided by the \"from\" field\n * epicenter.emailAdapter.sendEmail(groupKey, '000001796733eef0842f4d6d960997018a3b', subject, body, { attachments, from: 'sender@test.com', replyTo: 'receiver@test.com' });\n * // Sends an email to the address associated with the provided user key, sender will be seen as the user associated with the \"fromUserKey\"\n * epicenter.emailAdapter.sendEmail(groupKey, '000001796733eef0842f4d6d960997018a3b', subject, body, { attachments, fromUserKey: '000001796733eef0842f4d6d960997018a33' });\n * @param groupKey The groupKey in which the email target user exists\n * @param userKey The unique userKey for the email target user\n * @param subject The subject line for the email.\n * @param emailBody The body for the email\n * @param [optionals] Optional parameters\n * @param [optionals.familyNameFirst] Specifies whether email target's family name will come before their given name. Defaults to false.\n * @param [optionals.html] Whether to treat the body as HTML (true) or as plain text (false). Defaults to false.\n * @param [optionals.body] The content of the email.\n * @param [optionals.from] The email address from which the message will appear to have been sent from. Will be overriden by fromUserKey.\n * @param [optionals.replyTo] The email address that will be replyed to by the recipient. Must be used in conjunction with optionals.from.\n * @param [optionals.fromUserKey] The userKey from which the email will appear to have been sent. The default response address will also be this email.\n * @param [optionals.attachments] An array of (binary) objects to include as attachments. All four properties must be included.\n * @param [optionals.attachments[].encoding] A string specifying the encoding method. See ENCODING for possible values.\n * @param [optionals.attachments[].data] A string containing the data for the attachment.\n * @param [optionals.attachments[].name] A string containing the name of the attachment.\n * @param [optionals.attachments[].contentType] A string specifying the attachment MIME Type.\n * @returns undefined indicating success\n */\nexport async function sendEmail(\n groupKey: string,\n userKey: string,\n subject: string,\n emailBody: string,\n optionals: {\n familyNameFirst?: string,\n html?: boolean,\n body?: string,\n from?: string,\n replyTo?: string,\n fromUserKey?: string,\n attachments?: {\n encoding: keyof typeof ENCODING,\n data: string,\n name: string,\n contentType: string,\n }[]\n } & RoutingOptions = {}\n): Promise<void> {\n const { accountShortName, projectShortName, server, familyNameFirst, html, attachments, from, replyTo, fromUserKey } =\n optionals;\n\n let fromString = '';\n if (fromUserKey) {\n fromString += `/as/${fromUserKey}`;\n } else if (from) {\n fromString += `/from/${from}`;\n if (replyTo) {\n fromString += `/${replyTo}`;\n }\n }\n\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .post(`/email/user/${groupKey}/${userKey}${fromString}`, {\n body: {\n subject,\n body: emailBody,\n familyNameFirst,\n html,\n attachments,\n },\n })\n .then(({ body }) => body);\n}\n\n/**\n * Sends an email to an individual admin (someone with epicenter account); Requires support level authentication\n * @param adminKey The unique adminKey for the email target\n * @param subject The subject line for the email.\n * @param [optionals] Optional parameter\n * @param [optionals.familyNameFirst] Specifies whether email target's family name will come before their given name. Defaults to false.\n * @param [optionals.html] Whether to treat the body as HTML (true) or as plain text (false). Defaults to false.\n * @param [optionals.body] The content of the email.\n * @param [optionals.attachments] An array of (binary) objects to include as attachments. All four properties must be included.\n * @param [optionals.attachments[].encoding] A string specifying the encoding method. See ENCODING for possible values.\n * @param [optionals.attachments[].data] A string containing the data for the attachment.\n * @param [optionals.attachments[].name] A string containing the name of the attachment.\n * @param [optionals.attachments[].contentType] A string specifying the attachment MIME Type.\n * @returns undefined indicating success\n */\nexport async function sendEmailToAdmin(\n adminKey: string,\n subject: string,\n emailBody: string,\n optionals: {\n familyNameFirst?: string,\n html?: boolean,\n body?: string,\n attachments?: {\n encoding: keyof typeof ENCODING,\n data: string,\n name: string,\n contentType: string,\n }\n } & RoutingOptions = {}\n): Promise<void> {\n const { accountShortName, projectShortName, server, familyNameFirst, html, attachments } =\n optionals;\n\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .post(`/email/admin/${adminKey}`, {\n body: {\n subject,\n body: emailBody,\n familyNameFirst,\n html,\n attachments,\n },\n })\n .then(({ body }) => body);\n}","import type { UserSession } from '../utils/identification';\nimport type { GenericSearchOptions } from '../utils/constants';\nimport type { RoutingOptions, Page } from '../utils/router';\n\nimport { Router, identification } from '../utils';\n\n\ninterface Episode {\n name: string,\n episodeKey: string,\n}\n\n/**\n * Create an episode.\n * @example\n * epicenter.episodeAdapter.create('myEpisode', 'myGroupName', {\n * runLimit: 20,\n * draft: true,\n * });\n * @param name Episode name\n * @param groupName Group to make the episode under\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.draft] Flag to indicate the episode is a draft (intended when used for settings scoping)\n * @param [optionals.runLimit] Optional argument to define the number of runs that can be made using this episode as the scope\n * @param [optionals.category] Optional argument to allow for establishing episode hierarchies\n * @returns promise that resolves to the newly created episode\n */\nexport async function create(\n name: string,\n groupName: string,\n optionals: {\n draft?: boolean,\n runLimit?: number,\n category?: string,\n } & RoutingOptions = {}\n): Promise<Episode> {\n const {\n draft, runLimit, category,\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/episode/${groupName}`, {\n body: { name, draft, runLimit, category },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n/**\n * Gets a specific episode.\n * @example\n * epicenter.episodeAdapter.get('000001796733eef0842f4d6d960997018a37');\n *\n * @param episodeKey The episode key\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to an episode\n */\nexport async function get(\n episodeKey: string,\n optionals: RoutingOptions = {}\n): Promise<Episode> {\n return await new Router()\n .get(`/episode/${episodeKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Gets episodes.\n * @example\n * const filter = [\n * 'name|=one|two', // searches only for episodes named 'one' or 'two'\n * 'draft=false', // searches only for episodes that aren't drafts\n * 'created>=2022-01-03T20:30:53.054Z', // looks for any episodes created after Jan 3rd 2022\n * // 'account.shortName=acme' // specifies the account, intended for admin use\n * // 'project.shortName=simulations' // specifies the project, intended for admin use\n * // 'group.name=my-group-name', // specifies a group name, intended for admin use\n * // 'group.groupKey=0000017dd3bf540e5ada5b1e058f08f20461', // specifies a group key, intended for admin use\n * ];\n * epicenter.episodeAdapter.query({\n * filter,\n * sort: ['+episode.created'], // sort all findings by the 'created' field (ascending)\n * first: 3, // page should start with the 4th item found (will default to 0)\n * max: 10, // page should only include the first 10 items\n * });\n * @param searchOptions Search options for the query\n * @param [searchOptions.filter] Filters for searching\n * @param [searchOptions.sort] Sorting criteria\n * @param [searchOptions.first] The starting index of the page returned\n * @param [searchOptions.max] The number of entries per page\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a page of episodes\n */\nexport async function query(\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Page<Episode>> {\n const { filter = [], sort = [], first = 0, max } = searchOptions;\n\n return await new Router()\n .withSearchParams({\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max,\n })\n .get('/episode/search', {\n paginated: true,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Gets episodes based on a group key\n * @example\n * epicenter.episodeAdapter.withGroup('0000017dd3bf540e5ada5b1e058f08f20461');\n *\n * @param groupKey The group key\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise resolving to a list of episodes\n */\nexport async function forGroup(\n groupKey: string,\n optionals: RoutingOptions = {}\n): Promise<Episode[]> {\n return await new Router()\n .get(`/episode/in/${groupKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Gets episode based on group name and episode name\n * @example\n * epicenter.episodeAdapter.withName('myEpisodeName');\n * @param name The episode name\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupName] Name of the group, if omitted will use the group name associated with the current session\n * @returns promise that resolves to an episode\n */\nexport async function withName(\n name: string,\n optionals: { groupName?: string } & RoutingOptions = {}\n): Promise<Episode> {\n const {\n groupName,\n ...routingOptions\n } = optionals;\n\n const session = identification.session as UserSession;\n return await new Router()\n .get(`/episode/with/${groupName ?? session?.groupName}/${name}`, routingOptions)\n .then(({ body }) => body);\n}\n\n/**\n * Deletes an episode\n * @example\n * epicenter.episodeAdapter.remove('000001796733eef0842f4d6d960997018a3b');\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to undefined if successful\n */\nexport async function remove(\n episodeKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n return await new Router()\n .delete(`/episode/${episodeKey}`, optionals)\n .then(({ body }) => body);\n}\n","import type { UserSession, Session } from '../utils/identification';\nimport type { RoutingOptions, Page } from '../utils/router';\nimport type { GenericSearchOptions } from '../utils/constants';\nimport type { User } from './user';\n\nimport { Router, EpicenterError, identification, ROLE } from '../utils';\n\nenum AUGMENT {\n MEMBERS = 'MEMBERS',\n QUANTIZED = 'QUANTIZED',\n}\n\ninterface Pricing {\n amount: number\n}\n\ninterface FlightRecorder {\n start: number,\n stop: number,\n enabled: boolean,\n}\n\ninterface GroupUpdate {\n runLimit?: number,\n organization?: string,\n allowSelfRegistration?: boolean,\n flightRecorder?: FlightRecorder,\n event?: string,\n allowMembershipChanges?: boolean,\n pricing?: Pricing,\n startDate?: Date,\n expirationDate?: Date,\n capacity?: number,\n allowChannel?: boolean,\n}\n\ninterface GroupPermission {\n available: boolean,\n objectType: 'group',\n role: keyof typeof ROLE,\n}\n\nexport interface Member extends GroupPermission {\n user: User,\n}\n\nexport interface Group extends GroupUpdate {\n name: string,\n groupKey: string,\n members?: Member[],\n}\n\ninterface SelfRegistrationResult {\n redirectUrl: string,\n whoAmI: Session,\n}\n\n\n/**\n * Provides information on a particular Epicenter group.\n * @example\n * import { authAdapter, groupAdapter } from 'epicenter-libs';\n * const session = authAdapter.getLocalSession();\n * // include members of the group in the response\n * const group = await groupAdapter.get(session.groupKey, { augment: 'MEMBERS' });\n * // include metrics relating to the group in the response\n * const group = await groupAdapter.get(session.groupKey, { augment: 'QUANTIZED' });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.augment] Specifies which additional information you'd like returned with the group\n * @param [optionals.groupKey] Group key, if omitted will attempt to use the group associated with the current session\n * @returns promise that resolves to a group\n */\nexport async function get(\n optionals: {\n augment?: keyof typeof AUGMENT,\n groupKey?: string,\n } & RoutingOptions = {}\n): Promise<Group> {\n const {\n groupKey, augment,\n ...routingOptions\n } = optionals;\n let uriComponent = '';\n if (augment === AUGMENT.MEMBERS) uriComponent = '/member';\n if (augment === AUGMENT.QUANTIZED) uriComponent = '/quantized';\n const session = identification.session as UserSession;\n return await new Router()\n .get(`/group${uriComponent}/${groupKey ?? session?.groupKey}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Deletes the group; available only to Epicenter admins\n * @example\n * epicenter.groupAdapter.destroy('0000017dd3bf540e5ada5b1e058f08f20461');\n * @param groupKey Key associated with group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to undefined if successful\n */\nexport async function destroy(\n groupKey: string,\n optionals: RoutingOptions = {},\n): Promise<void> {\n\n return await new Router()\n .delete(`/group/${groupKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Provides information on for all groups in the project\n * @example\n * const groups = await epicenter.groupAdapter.gather();\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.includeExpired] Indicates whether to include expired groups in the query\n * @returns promise that resolves to a list of groups\n */\nexport async function gather(\n optionals: { includeExpired?: boolean } & RoutingOptions = {}\n): Promise<Group[]> {\n const {\n includeExpired,\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .withSearchParams({ includeExpired })\n .get('/group', routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Updates fields for a particular group; available only to Epicenter admins.\n * @example\n * epicenter.groupAdapter.update('0000017dd3bf540e5ada5b1e058f08f20461', { event: 'Orientation Day' });\n * @param groupKey Key associated with group\n * @param update Attributes you wish to update\n * @param [update.runLimit] Defines the upper limit of runs allowed in the group\n * @param [update.organization] Name of the organization owning the group\n * @param [update.allowSelfRegistration] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.flightRecorder] Diagnostic tool for logging http requests for the server\n * @param [update.flightRecorder].start Start time (epoch time)\n * @param [update.flightRecorder].stop End time (epoch time)\n * @param [update.flightRecorder].enabled Enabled flag for the flight recorder\n * @param [update.event] Name of the event the group is playing for\n * @param [update.allowMembershipChanges] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.pricing] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.pricing].number TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.startDate] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.expirationDate] Date the group expires\n * @param [update.capacity] Defines the upper limit on the number of users allowed in the group\n * @param [update.allowChannel] Opt into push notifications for this resource. Applicable to projects with phylogeny >= SILENT\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the updated group\n */\nexport async function update(\n groupKey: string,\n update: GroupUpdate,\n optionals: RoutingOptions = {}\n): Promise<Group> {\n const {\n runLimit,\n organization,\n allowSelfRegistration,\n flightRecorder,\n event,\n allowMembershipChanges,\n pricing,\n startDate,\n expirationDate,\n capacity,\n allowChannel,\n } = update;\n\n return await new Router()\n .patch(`/group/${groupKey}`, {\n body: {\n runLimit,\n organization,\n allowSelfRegistration,\n flightRecorder,\n event,\n allowMembershipChanges,\n pricing,\n startDate,\n expirationDate,\n capacity,\n allowChannel,\n },\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Creates a new group; available only to Epicenter admins\n * @example\n * epicenter.groupAdapter.create({\n * runLimit: 10,\n * name: 'my-group-name',\n * });\n * @param group Group object\n * @param group.name Group name (required)\n * @param [group.runLimit] Defines the upper limit on the number of runs allowed in the group\n * @param [group.organization] Name of the organization owning the group\n * @param [group.allowSelfRegistration] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [group.flightRecorder] Diagnostic tool for loggin http requests for the server\n * @param [group.flightRecorder.start] Start time (epoch time)\n * @param [group.flightRecorder.stop] End time (epoch time)\n * @param [group.flightRecorder.enabled] Enabled flag for the flight recorder\n * @param [group.event] Name of the event the group is playing for\n * @param [group.allowMembershipChanges] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [group.pricing] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [group.startDate] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [group.expirationDate] Date the group expires\n * @param [group.capacity] Defines the upper limit on the number of users allowed in the group\n * @param [group.allowChannel] Opt into push notifications for this resource. Applicable to projects with phylogeny >= SILENT\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the newly created group\n */\nexport async function create(\n group: Group,\n optionals: RoutingOptions = {}\n): Promise<Group> {\n const {\n name,\n runLimit,\n organization,\n allowSelfRegistration,\n flightRecorder,\n event,\n allowMembershipChanges,\n pricing,\n startDate,\n expirationDate,\n capacity,\n allowChannel,\n } = group;\n if (!name) throw new EpicenterError('Cannot create a group with no name');\n return await new Router()\n .post('/group', {\n body: {\n name,\n runLimit,\n organization,\n allowSelfRegistration,\n flightRecorder,\n event,\n allowMembershipChanges,\n pricing,\n startDate,\n expirationDate,\n capacity,\n allowChannel,\n },\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Queries for groups\n * @example\n * import { groupAdapter } from 'epicenter-libs';\n * const filter = [\n * 'name|=group1|group2', // look for groups whose name is 'group1' or 'group2'\n * 'groupKey=0000017dd3bf540e5ada5b1e058f08f20461', // look for groups with the specific group key\n * 'approximateMemberCount>30', // look for groups larger than 30\n * 'startDate<2022-01-03T20:30:53.054Z', // look for groups with start date before Jan 3rd 2022\n * 'expirationDate<2022-01-03T20:30:53.054Z', // look for groups with expiration date before Jan 3rd 2022\n * // 'account.shortName=acme', // specifies account, intended for admin use\n * // 'project.shortName=simulations', // specifies project, intended for admin use\n * ];\n * groupAdapter.query({\n * filter,\n * sort: ['+group.name'] // sort all findings by group name ascending (lexigraphically)\n * first: 3, // page should start with the 4th item found (will default to 0)\n * max: 10, // page should only include the first 10 items\n * });\n * @param searchOptions Search options for the query\n * @param [searchOptions.filter] Filters for searching\n * @param [searchOptions.sort] Sorting criteria\n * @param [searchOptions.first] The starting index of the page returned\n * @param [searchOptions.max] The number of entries per page\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a page of groups\n */\nexport async function query(\n searchOptions: { quantized?: boolean } & GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Page<Group>> {\n const { filter = [], sort = [], first, max, quantized } = searchOptions;\n\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/group${quantized ? '/quantized' : ''}/search`, {\n paginated: true,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n/** DEPRECATED -- use groupAdapter.query instead */\nexport async function search(\n optionals: { quantized?: boolean } & GenericSearchOptions & RoutingOptions = {}\n): Promise<Page<Group>> {\n console.warn('DEPRECATION WARNING: groupAdapter.search is deprecated and will be removed with the next release. Use groupAdapter.query instead.');\n const { filter = [], sort = [], first, max, quantized, ...routingOptions } = optionals;\n const searchOptions = { filter, sort, first, max, quantized };\n return await query(searchOptions, routingOptions);\n}\n\n\n/**\n * Retrieves a group with given group name\n * @example\n * epicenter.groupAdapter.withGroupName('my-group-name');\n * @param name Name associated with the group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a group\n */\nexport async function withGroupName(\n name: string,\n optionals: RoutingOptions = {}\n): Promise<Group> {\n\n return await new Router()\n .get(`/group/with/${name}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Retrieves the list of groups a particular user is in; intended for admin use\n * @example\n * epicenter.groupAdapter.forUser(\n * '000001796733eef0842f4d6d960997018a3b', // get groups where this user is a member of\n * { role: ['FACILITATOR'] } // where this user is a facilitator in the group\n * );\n * @param userKey Name associated with the group\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.includeExpired] Indicates whether to include expired groups in the query\n * @param [optionals.includeAllMembers] Indicates whether to include the other members in the group (by default, only the requested user appears)\n * @param [optionals.role] Role or list of possible roles the user holds in the group\n * @returns promise that resolves to a list of groups\n */\nexport async function forUser(\n userKey: string,\n optionals: {\n includeAllMembers?: boolean,\n includeExpired?: boolean,\n role?: string | string[],\n } & RoutingOptions = {},\n): Promise<Group[]> {\n const {\n includeExpired, includeAllMembers, role,\n ...routingOptions\n } = optionals;\n const isMultiple = Array.isArray(role) && role.length > 0;\n const roleList = isMultiple ? role : [role];\n const searchParams = {\n includeExpired,\n includeAllMembers,\n role: role ? roleList : undefined,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/group/member/for/${userKey}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Retrieves the list of groups particular to the current session\n * @example\n * const groups = await epicenter.groupAdapter.getSessionGroups();\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.includeExpired] Indicates whether to include expired groups in the query\n * @param [optionals.includeAllMembers] Indicates whether to include the other members in the group (by default, only the requested user appears)\n * @param [optionals.role] Role or list of possible roles the user holds in the group\n * @returns promise that resolves to a list of groups\n */\nexport async function getSessionGroups(\n optionals: {\n includeAllMembers?: boolean,\n includeExpired?: boolean,\n role?: string | string[],\n } & RoutingOptions = {},\n): Promise<Group[]> {\n const {\n includeExpired, role,\n ...routingOptions\n } = optionals;\n const isMultiple = Array.isArray(role) && role.length > 0;\n const roleList = isMultiple ? role : [role];\n const searchParams = {\n includeExpired,\n role: role ? roleList : undefined,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get('/group/member', routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Permits a list of users to self-register for membership in a group; will only work if the group has allowSelfRegistration set to true\n * @example\n * epicenter.groupAdapter.whitelistUsers('0000017dd3bf540e5ada5b1e058f08f20461', {\n * allow: true,\n * emails: ['user1@test.com', 'user2@test.com'],\n * });\n * @param groupKey Key associated with group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.allow] Whether to allow or disallow self-registration for the specified users; defaults to true if unset\n * @param [optionals.emails] List of emails to allow or disallow; a value of \"*\" is interpreted as all users; defaults to all users if unset\n * @returns promise that resolves to undefined (indicating success)\n */\nexport async function whitelistUsers(\n groupKey: string,\n optionals: {\n allow?: boolean,\n emails?: string[]\n } & RoutingOptions = {}\n): Promise<void> {\n const {\n allow = true,\n emails = ['*'],\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .post(`/group/self/${groupKey}`, {\n body: {\n allow,\n emails,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Retrieves a list of users allowed to self-register for membership in a group with a given groupKey\n * @example\n * epicenter.groupAdapter.getWhitelistedUsers('0000017dd3bf540e5ada5b1e058f08f20461');\n * @param groupKey Key associated with the group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a list of users\n */\nexport async function getWhitelistedUsers(\n groupKey: string,\n optionals: RoutingOptions = {}\n): Promise<User[]> {\n\n return await new Router()\n .get(`/group/self/${groupKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Sends an email to the specified email address with a link to complete self-registration for a group\n * @example\n * epicenter.groupAdapter.sendRegistrationEmail('0000017dd3bf540e5ada5b1e058f08f20461', 'user1@test.com', {\n * redirectURL: '/login',\n * linkURL: '/register',\n * subject: 'Complete your registration!',\n * });\n * @param groupKey Key associated with group\n * @param email Email address to send the link to\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.linkURL] Relative path to link sent in email to complete registration (<forio scheme>://<forio host>/app/<account>/<project><linkURL>)\n * @param [optionals.redirectURL] Relative path to redirect to after completing registration (<forio scheme>://<forio host>/app/<account>/<project><redirectURL>)\n * @param [optionals.subject] The subject of the email that will be sent\n * @returns promise that resolves to undefined (indicating success)\n */\nexport async function sendRegistrationEmail(\n groupKey: string,\n email: string,\n optionals: {\n linkURL?: string,\n redirectURL?: string,\n subject?: string,\n } & RoutingOptions = {}\n): Promise<void> {\n const { redirectURL, linkURL, subject, ...routingOptions } = optionals;\n\n return await new Router()\n .post(`/registration/self/${groupKey}`, {\n body: {\n email,\n linkUrl: linkURL,\n redirectUrl: redirectURL,\n subject,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Finalizes a user's self-registration process for a group, requires the project to have deployment.autoCreatePlayer set to true\n * @example\n * epicenter.groupAdapter.selfRegister('myregistrationtoken', 'pass', {\n * displayName: 'My Display Name',\n * givenName: 'Leonard',\n * familyName: 'Nimoy',\n * handle: 'the_real_spock',\n * });\n * @param groupKey Key associated with group\n * @param password Password the user would use to log in\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.displayName] Display name chosen by user\n * @param [optionals.givenName] User's given name\n * @param [optionals.familyName] User's family name\n * @param [optionals.handle] Handle the user would use to log in, defaults to email address if not specified\n * @returns promise resolving to an object containing the redirect URL and the session\n */\nexport async function selfRegister(\n token: string,\n password: string,\n optionals: {\n displayName?: string,\n givenName?: string,\n familyName?: string,\n handle?: string,\n } & RoutingOptions = {}\n): Promise<SelfRegistrationResult> {\n const { displayName, givenName, familyName, handle, ...routingOptions } = optionals;\n\n return await new Router()\n .patch(`/registration/self/${token}`, {\n body: {\n password,\n displayName,\n givenName,\n familyName,\n handle,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\ntype UserInput = string | { userKey: string, role?: keyof typeof ROLE, available?: boolean };\n/**\n * Adds user(s) to the group\n * @example\n * epicenter.groupAdapter.addUser('000001796733eef0842f4d6d960997018a3b');\n * epicenter.groupAdapter.addUser([{\n * userKey: '000001796733eef0842f4d6d960997018a3b',\n * role: 'REVIEWER',\n * available: false,\n * }]);\n * @param usersInput List of user keys or user input objects (properties defined below)\n * @param usersInput[].userKey User key\n * @param [usersInput[].role] User's role -- defaults to PARTICIPANT if unset; See [ROLE](#ROLE) for all types\n * @param [usersInput[].available] Indicates whether or not the user is 'active' (for semantic labeling) -- defaults to true if unset\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupKey] Group key to do indicate the group; will default to the group key associated with the current session\n * @returns promise that resolves to the group the user was added to\n */\nexport async function addUser(\n usersInput: UserInput | UserInput[],\n optionals: { groupKey?: string } & RoutingOptions = {}\n):Promise<Group> {\n const { groupKey, ...routingOptions } = optionals;\n\n const users = Array.isArray(usersInput) ? usersInput : [usersInput];\n const session = identification.session as UserSession;\n return await new Router()\n .post(`/group/member/${groupKey ?? session?.groupKey}`, {\n body: users.map((u) => {\n const userKey = typeof u === 'string' ? u : u.userKey;\n const role = typeof u === 'string' ? ROLE.PARTICIPANT : u.role;\n const available = typeof u === 'string' ? true : u.available;\n\n return {\n role,\n userKey,\n objectType: 'group',\n available: available ?? true,\n };\n }),\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Updates a user's group membership information\n * @example\n * epicenter.groupAdapter.updateUser('000001796733eef0842f4d6d960997018a3b', { role: 'LEADER' });\n * @param userKey User key\n * @param update Object containing the updates to a user's group membership information\n * @param [update.role] User's role; See [ROLE](#ROLE) for all types\n * @param [update.available] Indicates whether or not the user is 'active' (for semantic labeling)\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the membership information that was updated\n */\nexport async function updateUser(\n userKey: string,\n update: { role?: keyof typeof ROLE, available?: boolean },\n optionals: { groupKey?: string } & RoutingOptions = {}\n):Promise<GroupPermission> {\n const { role, available } = update;\n const { groupKey, ...routingOptions } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .patch(`/group/member/${groupKey ?? session?.groupKey}/${userKey}`, {\n body: {\n objectType: 'group',\n role,\n available,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Removes user(s) from the group\n * @example\n * const userKeys = members.map(({ userKey }) => userKey);\n * epicenter.groupAdapter.removeUsers(userKeys)\n * @param userKey Key associated with the user or an array of user keys to remove from group\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupKey] Group key for the group you want to remove from; defaults to the group in the current session\n * @returns promise that resolves to undefined when successful\n */\nexport async function removeUser(\n userKey: string | string[],\n optionals: { groupKey?: string } & RoutingOptions = {}\n): Promise<void> {\n const { groupKey, ...routingOptions } = optionals;\n const hasMultiple = Array.isArray(userKey) && userKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${userKey.length === 1 ? userKey[0] : userKey}`;\n const searchParams = hasMultiple ? { userKey } : undefined;\n const session = identification.session as UserSession;\n return await new Router()\n .withSearchParams(searchParams)\n .delete(`/group/member/${groupKey ?? session?.groupKey}${uriComponent}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\nexport async function statusUpdate(\n code: string,\n message: string,\n optionals: { groupKey?: string } & RoutingOptions = {}\n): Promise<Group> {\n const { groupKey, ...routingOptions } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .patch(`/group/status/${groupKey ?? session?.groupKey}`, {\n body: { code, message },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n","import type { UserSession } from '../utils/identification';\nimport type { RoutingOptions } from '../utils/router';\nimport type { GenericScope, GenericSearchOptions } from '../utils/constants';\n\nimport { identification, Router } from '../utils';\n\n\ninterface Score {\n name: string,\n quantity: number,\n}\n\ninterface Tag {\n label: string,\n content: string,\n}\n\ninterface Leaderboard {\n lastUpdated: Date,\n}\n\n\n/**\n * Creates a leaderboard entry.\n * @example\n * import { leaderboardAdapter } from 'epicenter-libs';\n * const leaderboard = await leaderboardAdapter.update(\n * 'class-23-leaderboard',\n * { scopeBoundary: SCOPE_BOUNDARY.GROUP, scopeKey: '0000017dd3bf540e5ada5b1e058f08f20461' },\n * [{ name: 'total', quantity: 20 }, { name: 'extraCredit', quantity: 2 }],\n * { tags: [{ label: 'role', content: 'doctor' }] }\n * );\n * @param collection Name of the leaderboard\n * @param scope Scope attached to the leaderboard entry; allows for scoping\n * @param scope.scopeBoundary Can be a couple things, commonly group, project, episode, or world\n * @param scope.scopeKey Key of the resource defined by the scope boundary\n * @param scope.userKey User key for the user creating the entry, if omitted will use the one in current session\n * @param scores List of score objects\n * @param scores[].name Name of the score\n * @param scores[].quantity Value of the score\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @params [optionals.tags] Tags for the leaderboard entry, helps to provide another layer of scope if needed\n * @returns promise that resolves to the leaderboard entry created\n */\nexport async function update(\n collection: string,\n scope: { userKey?: string } & GenericScope,\n scores: Score[],\n optionals: {\n tags?: Tag[],\n allowChannel?: boolean,\n } & RoutingOptions = {}\n): Promise<Leaderboard> {\n const { tags, allowChannel, ...routingOptions } = optionals;\n const { scopeBoundary, scopeKey, userKey } = scope;\n const session = identification.session as UserSession;\n return await new Router()\n .post('/leaderboard', {\n body: {\n scope: {\n scopeBoundary,\n scopeKey,\n userKey: userKey ?? session?.userKey,\n },\n collection,\n scores,\n tags,\n allowChannel,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n/**\n * Gathers leaderboard information; not paginable (hence named 'list' and not 'query'). Technically there is no leader\n * @example\n * import { leaderboardAdapter } from 'epicenter-libs';\n * const leaderboard = await leaderboardAdapter.list('myLeaderboard', scope, {\n * filter: [\n * 'tag.role=doctor', // look for leaderboard entries tagged with role=doctor\n * 'score.total>0' // where the users scored a total higher than 0\n * ],\n * sort: ['+score.total'], // sort results by 'total' in ascending order,\n * first: 0,\n * max: 20 // retrieve only the first 20 entries\n * });\n * @param collection Name of the leaderboard\n * @param scope Scope attached to the leaderboard entry; allows for scoping\n * @param scope.scopeBoundary Can be a couple things, commonly group, project, episode, or world\n * @param scope.scopeKey Key of the resource defined by the scope boundary\n * @param searchOptions Search options for the query\n * @param [searchOptions.filter] Filters for searching\n * @param [searchOptions.sort] Sorting criteria\n * @param [searchOptions.first] The starting index of the list returned\n * @param [searchOptions.max] The maximum number of entries in the list\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to to a list of leaderboard entries\n */\nexport async function list(\n collection: string,\n scope: GenericScope,\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Leaderboard[]> {\n const { scopeBoundary, scopeKey } = scope;\n const { filter = [], sort = [], first, max } = searchOptions;\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/leaderboard/${scopeBoundary}/${scopeKey}/${collection}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function get(\n collection: string,\n scope: GenericScope,\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Leaderboard[]> {\n console.warn('DEPRECATION WARNING: leaderboardAdapter.get is deprecated and will be removed with the next release. Use leaderboardAdapter.list instead.');\n return await list(collection, scope, searchOptions, optionals);\n}","import type { RoutingOptions } from '../utils/router';\nimport type { User } from './user';\n\nimport Router from '../utils/router';\nimport cometdAdapter from './cometd';\n\n\ninterface Presence {\n lastUpdated: number,\n ttlSeconds: number,\n groupRole: 'FACILITATOR' | 'REVIEWER' | 'LEADER' | 'PARTICIPANT',\n user: User,\n}\n\n\n/**\n * Makes a connection request to the cometd server; effectively marking the user as online. This isn't required to be called in order to be considered online. Subscribe to a CometD channel will do the same as well. This is just a convenience method for when you don't need to utilize the channels expect specifically for presence.\n * Using [logout](#authAdapter-logout) will automatically disconnect for you.\n * @example\n * epicenter.presenceAdapter.connect()\n * @returns promise indicating whether or not the connection was successful\n */\nexport async function connect(): Promise<void> {\n await cometdAdapter.handshake();\n return;\n}\n\n\n/**\n * Retrieves the presence information for a particular group\n * @example\n * epicenter.presenceAdapter.forGroup('0000017dd3bf540e5ada5b1e058f08f20461');\n * @param groupKey Key associated with group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a list of users online\n */\nexport async function forGroup(\n groupKey: string,\n optionals: RoutingOptions = {}\n): Promise<Presence[]> {\n return await new Router()\n .get(`/presence/group/${groupKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Retrieves the presence information for a particular world\n * @example\n * epicenter.presenceAdapter.forWorld('0000017a445032dc38cb2cecd5fc13708314')\n * @param worldKey Key associated with world\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a list of users online\n */\nexport async function forWorld(\n worldKey: string,\n optionals: RoutingOptions = {},\n): Promise<Presence[]> {\n return await new Router()\n .get(`/presence/world/${worldKey}`, optionals)\n .then(({ body }) => body);\n}\n\n","import {Router} from 'utils/index';\n\nexport async function google(humanKey: string) {\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .post('/recaptcha/google', {\n body: {humanKey: humanKey},\n })\n .then(({body}) => body);\n}","import type { UserSession } from '../utils/identification';\nimport type { GenericScope, GenericSearchOptions } from '../utils/constants';\nimport type { RoutingOptions, Page } from '../utils/router';\n\nimport {\n Router, identification,\n ROLE, SCOPE_BOUNDARY, RITUAL,\n EpicenterError,\n} from 'utils';\n\n\ninterface ModelContext {\n version: string,\n}\ninterface ExecutionContext {\n version: string,\n}\n\ninterface ProcAction {\n name: string,\n arguments?: unknown[],\n objectType: 'execute',\n}\ninterface GetAction {\n name: string,\n objectType: 'get',\n}\ninterface SetAction {\n name: string,\n value: unknown,\n objectType: 'set',\n}\ntype Action =\n | ProcAction\n | GetAction\n | SetAction;\n\ninterface Run {\n runKey: string,\n variables?: Record<string, unknown>,\n}\n\ntype RunCreateOptions = {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ephemeral?: boolean,\n trackingKey?: string,\n modelContext?: ModelContext,\n executionContext?: ExecutionContext,\n allowChannel?: boolean,\n} & RoutingOptions;\n\ntype RunStrategy =\n | 'reuse-across-sessions'\n | 'reuse-never'\n | 'reuse-by-tracking-key'\n | 'multiplayer'\n\n/**\n * Creates a run. By default, all runs are created with the user's ID (`userKey`), except in the case of world-scoped runs.\n * If no permit is specified, platform will assign a default determined by the session user type and the scope boundary.\n * For a participant creating a run, the default readLock/writeLock is `USER/USER`, unless that run is scoped to a world,\n * in which case `PARTICIPANT/FACILITATOR` is the default. Admins and facilitators/reviewers have their own defaults.\n * @example\n * import { runAdapter, SCOPE_BOUNDARY } from 'epicenter-libs';\n * runAdapter.create('model.py', {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: '0000017dd3bf540e5ada5b1e058f08f20461'\n * });\n * @param model Name of your model file\n * @param scope Scope associated with your run\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.readLock] Read permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.writeLock] Write permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.trackingKey] Tracking key\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by clone operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by clone operations.\n * @param [optionals.allowChannel] Opt into push notifications for this resource. Applicable to projects with phylogeny >= SILENT\n * @returns promise that resolves to the newly created run\n */\nexport async function create(\n model: string,\n scope: { userKey?: string } & GenericScope,\n optionals: RunCreateOptions = {},\n): Promise<Run> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n readLock,\n writeLock,\n ephemeral,\n trackingKey,\n modelContext,\n executionContext,\n allowChannel,\n ...routingOptions\n } = optionals;\n\n const { WORLD } = SCOPE_BOUNDARY;\n const session = identification.session as UserSession;\n\n const hasPermit = readLock || writeLock;\n const headers = Object.assign(\n {},\n routingOptions.headers,\n hasPermit ? { 'X-Forio-Confirmation': true } : {}\n );\n const permit = hasPermit ? { readLock, writeLock } : undefined;\n\n return await new Router()\n .post('/run', {\n body: {\n scope: {\n scopeBoundary,\n scopeKey,\n userKey: scopeBoundary === WORLD ?\n undefined :\n userKey ?? session?.userKey,\n },\n permit,\n morphology: 'MANY',\n trackingKey,\n modelFile: model,\n modelContext: modelContext || {/* Is not recorded for clone. Overrides model ctx2 file. */},\n executionContext: executionContext || {/* Affected by clone. Carries arguments for model file worker on model initialization */},\n ephemeral,\n allowChannel,\n },\n ...routingOptions,\n headers,\n }).then(({ body }) => body);\n}\n/**\n * Creates a project scoped run\n * @example\n * import { runAdapter } from 'epicenter-libs';\n * runAdapter.createSingular('model.py');\n * NOTE permit default behavior based on who starts the run:\n * * Admin: read/write Author, User with World: read PARTICPANT, write FACILITATOR, User with Group: read/write USER,\n * @param model Name of your model file\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.readLock] Read permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.writeLock] Write permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by clone operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by clone operations.\n * @returns promise that resolves to the newly created run\n */\nexport async function createSingular(\n model: string,\n optionals: RunCreateOptions = {},\n): Promise<Run> {\n const {\n readLock, writeLock, ephemeral,\n modelContext, executionContext,\n ...routingOptions\n } = optionals;\n\n const hasPermit = readLock || writeLock;\n const headers = Object.assign(\n {},\n routingOptions.headers,\n hasPermit ? { 'X-Forio-Confirmation': true } : {}\n );\n const permit = hasPermit ? { readLock, writeLock } : undefined;\n\n return await new Router()\n .post('/run/singular', {\n body: {\n modelFile: model,\n permit,\n modelContext: modelContext || {/* Is not recorded for clone. Overrides model ctx2 file. */},\n executionContext: executionContext || {/* Affected by clone. Carries arguments for model file worker on model initialization */},\n ephemeral,\n },\n ...routingOptions,\n headers,\n }).then(({ body }) => body);\n}\n\n/**\n * Gets the singular run's runKey\n * @example\n * import { runAdapter } from 'epicenter-libs';\n * runAdapter.getSingularRunKey();\n * @returns promise that resolves to a runKey\n */\nexport async function getSingularRunKey(\n optionals: RoutingOptions = {}\n): Promise<number> {\n return await new Router()\n .get('/run/singular/key', optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Clone a run\n * @param runKey Run key for the run you want to clone\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.trackingKey] Tracking key\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by clone operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by clone operations.\n * @returns promise that resolves to the cloned run\n */\nexport async function clone(\n runKey: string,\n optionals: {\n ephemeral?: boolean,\n trackingKey?: string,\n modelContext?: ModelContext,\n executionContext?: ExecutionContext,\n } & RoutingOptions = {}\n): Promise<Run> {\n const {\n ephemeral, trackingKey, modelContext = {}, executionContext = {},\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/run/clone/${runKey}`, {\n body: {\n trackingKey,\n modelContext,\n executionContext,\n ephemeral,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function restore(\n runKey: string,\n optionals: {\n ephemeral?: boolean,\n modelContext?: ModelContext,\n executionContext?: ExecutionContext,\n } & RoutingOptions = {}\n): Promise<Run> {\n const {\n ephemeral, modelContext = {}, executionContext = {},\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/run/restore/${runKey}`, {\n body: {\n modelContext,\n executionContext,\n ephemeral,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function rewind(\n runKey: string,\n steps: number,\n optionals: {\n ephemeral?: boolean,\n modelContext?: ModelContext,\n } & RoutingOptions = {}\n): Promise<Run> {\n const {\n ephemeral, modelContext = {},\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/run/rewind/${runKey}`, {\n body: {\n rewindCount: steps,\n modelContext,\n ephemeral,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function update(\n runKey: string,\n update: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n trackingKey?: string,\n marked?: boolean, /* analogous to v2's 'saved' */\n hidden?: boolean, /* analogous to v2's 'trashed' */\n closed?: boolean, /* Closed is a flag that means do not restore, the run is done, no more play */\n allowChannel?: boolean, /* Opt into push notifications for this resource. Applicable to projects with phylogeny >= SILENT */\n },\n optionals: RoutingOptions = {}\n): Promise<Run> {\n const {\n readLock,\n writeLock,\n trackingKey,\n marked,\n hidden,\n closed,\n allowChannel,\n } = update;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const permit = (readLock || writeLock) ? { readLock, writeLock } : undefined;\n\n return await new Router()\n .withSearchParams(hasMultiple ? { runKey } : '')\n .patch(`/run${uriComponent}`, {\n body: {\n permit,\n trackingKey,\n marked,\n hidden,\n closed,\n allowChannel,\n },\n ...optionals,\n }).then(({ body }) => body);\n}\n\n\n/**\n * *Does not actually delete the run*. The run is instead removed from memory. This can be used as a means of preserving server CPUs, and should be used when you do not expect to perform any addtional actions that would bring the run back into memory. (TODO: see David for details; is it just operations that bring the run into memory? what about clone... etc.)\n * @example\n * epicenter.runAdapter.remove('00000173078afb05b4ae4c726637167a1a9e');\n * @param runKey Key associated with the run\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns promise that resolve to undefined if successful\n */\nexport async function remove(\n runKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n return await new Router()\n .delete(`/run/${runKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function get(\n runKey: string,\n optionals: RoutingOptions = {}\n): Promise<Run> {\n return await new Router()\n .get(`/run/${runKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Queries for runs.\n * @example\n * import { runAdapter } from 'epicenter-libs';\n * runAdapter.query('model.xlsx', {\n * filter: [\n * 'var.foo|=1|2|3', // look for runs with a variable 'foo' with the values 1, 2, or 3\n * 'var.score>=24', // looks for runs with a variable 'score' higher than or equal to 24\n * 'var.certified*=true' // looks for runs where the variable 'certified' exists,\n * 'run.hidden=false', // where the run's 'hidden' attribute is false\n * 'meta.classification~=bar-*' // where the run metadata contains a 'classification' that begins with 'bar-',\n * 'meta.categorization~=*-baz' // where the run metadata contains a 'categorization' that does not end with '-baz',\n * ],\n * sort: ['+run.created'] // sort all findings by the 'created' field (ascending)\n * variables: ['foo', 'baz'], // include the run variables for 'foo' and 'baz' in the response\n * metadata: ['classification'] // include the run metadata for 'classification' in the response\n * });\n * @param model Name of your model file\n * @param searchOptions Search options\n * @param [searchOptions.scope.scopeBoundary] Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param [searchOptions.scope.scopeKey] Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [searchOptions.scope.userKey] User attached to scope if necessary\n * @param [searchOptions.filter] List of conditionals to filter for\n * @param [searchOptions.sort] List of values to sort by (applies only to run attributes)\n * @param [searchOptions.variables] List of variables to include with the runs found\n * @param [searchOptions.metadata] List of metadata to include with the runs found\n * @param [searchOptions.first] The index from which we collect our runs from\n * @param [searchOptions.max] The maximum number of runs to return (upper limit: 200)\n * @param [searchOptions.timeout] Number of seconds we're willing to wait for the response from the server\n * @param [searchOptions.includeEpisodes] Only used for the `run/in/groupName` endpoint\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a page of runs\n */\nexport async function query(\n model: string,\n searchOptions: {\n timeout?: number,\n variables?: string[],\n metadata?: string[],\n scope?: { userKey?: string } & GenericScope,\n groupName?: string,\n episodeName?: string,\n includeEpisodes?: boolean,\n } & GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Page<Run>> {\n const {\n filter = [], sort = [], first, max, timeout, variables = [], metadata = [],\n scope, groupName, episodeName, includeEpisodes,\n } = searchOptions;\n const session = identification.session as UserSession;\n const uriComponent = scope ?\n `${scope.scopeBoundary}/${scope.scopeKey}` :\n `in/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`;\n if (scope?.userKey) filter.push(`run.userKey=${scope.userKey}`);\n\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n var: variables.join(';') || undefined,\n meta: metadata.join(';') || undefined,\n first, max, timeout, includeEpisodes,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/run/${uriComponent}/${model}`, {\n paginated: true,\n parsePage: (values: Run[]) => {\n return values.map((run) => {\n run.variables = variables.reduce((variableMap, key, index) => {\n // TODO -- add a test case to run.spec that makes sure it does not error if it receives run w/o 'variables'\n variableMap[key] = run.variables?.[index];\n return variableMap;\n }, {} as Record<string, unknown>);\n return run;\n });\n },\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\nexport async function introspect(\n model: string,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n\n return await new Router()\n .get(`/run/introspect/model/${model}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function introspectWithRunKey(\n runKey: string,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n\n return await new Router()\n .get(`/run/introspect/${runKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function operation(\n runKey: string | string[],\n name: string,\n args: unknown[] = [],\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<unknown> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout } : { ritual, timeout };\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n return await new Router()\n .withSearchParams(searchParams)\n .post(`/run/operation${uriComponent}`, {\n body: {\n name,\n arguments: args,\n objectType: 'execute', // TODO: remove this when platform fixes this so that it's not manually required\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function getVariables(\n runKey: string | string[],\n variables: string[],\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n ignorable?: boolean,\n } & RoutingOptions = {}\n): Promise<Record<string, unknown> | Record<string, unknown>[]> {\n const {\n timeout, ritual, ignorable,\n ...routingOptions\n } = optionals;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n const mappify = (values: unknown[]) => variables.reduce((variableMap, key, index) => {\n variableMap[key] = values[index];\n return variableMap;\n }, {} as Record<string, unknown>);\n\n const searchParams = { timeout };\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const include = variables.join(';');\n const body = hasMultiple ? { include, runKey } : { ritual, include };\n const additional = ignorable ? { ignorable } : {};\n return await new Router()\n .withSearchParams(searchParams)\n .post(`/run/variable${uriComponent}`, {\n body: {\n ...body,\n ...additional,\n },\n ...routingOptions,\n })\n .then(({ body }) => {\n if (hasMultiple) {\n return Object.keys(body).map((runKey) => ({\n runKey,\n variables: mappify(body[runKey]),\n }));\n }\n return mappify(body);\n });\n}\n\nexport async function getVariable(\n runKey: string | string[],\n variable: string | string[],\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<unknown> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n\n if (Array.isArray(runKey) || Array.isArray(variable)) {\n const variables = Array.isArray(variable) ? variable : [variable];\n return getVariables(runKey, variables, optionals);\n }\n\n return await new Router()\n .withSearchParams({ timeout, ritual })\n .get(`/run/variable/${runKey}/${variable}`, routingOptions)\n .then(({ body }) => body);\n\n}\n/**\n * Updates model variables for the run\n * @param runKey Identifier for your run\n * @param update Object with the key-value pairs you would like to update in the model\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.timeout] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [optionals.ritual] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @returns promise that resolve to an object with the variables & new values that were updated\n */\nexport async function updateVariables(\n runKey: string | string[],\n update: Record<string, unknown>,\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout } : { ritual, timeout };\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n return await new Router()\n .withSearchParams(searchParams)\n .patch(`/run/variable${uriComponent}`, {\n body: update,\n ...routingOptions,\n })\n .then(({ body }) => body);\n\n}\n\nexport async function getMetadata(\n runKey: string | string[],\n metadata: string[],\n optionals: {\n timeout?: number\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n timeout,\n ...routingOptions\n } = optionals;\n const include = metadata.join(';');\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const searchParams = { timeout };\n\n const runKeyArg = Array.isArray(runKey) ? runKey : [runKey];\n return await new Router()\n .withSearchParams(searchParams)\n .post('/run/meta', {\n body: {\n include,\n runKey: runKeyArg,\n },\n ...routingOptions,\n })\n .then(({ body }) => {\n const bodyAsArray = Object.keys(body).map((runKey) => ({\n runKey,\n data: body[runKey],\n }));\n return (\n hasMultiple ? bodyAsArray : bodyAsArray?.[0]?.data\n );\n });\n}\n\nexport async function updateMetadata(\n runKey: string | string[],\n update: Record<string, unknown>,\n optionals: {\n timeout?: number\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n timeout,\n ...routingOptions\n } = optionals;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout } : { timeout };\n\n return await new Router()\n .withSearchParams(searchParams)\n .patch(`/run/meta${uriComponent}`, {\n body: update,\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\nexport async function action(\n runKey: string | string[],\n actionList: Action[],\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout } : { ritual, timeout };\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n return await new Router()\n .withSearchParams(searchParams)\n .post(`/run/action${uriComponent}`, {\n body: actionList,\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Returns the run associated with the given world key; brings the run into memory, if the run does not exist, it will create it.\n * See `runAdapter.create` for more information about platform-determined default permits.\n * @example\n * import { runAdapter } from 'epicenter-libs';\n * const run = await runAdapter.retrieveFromWorld('0000017a445032dc38cb2cecd5fc13708314', 'model.py');\n * @param worldKey Key associated with the world you'd like a run from\n * @param model Name of model file you'd use to create the run if needed\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.readLock] Read permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.writeLock] Write permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.trackingKey] Tracking key\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by clone operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by clone operations.\n * @param [optionals.allowChannel] Opt into push notifications for this resource. Applicable to projects with phylogeny >= SILENT\n * @returns promise that resolves to the run retrieved from, or created for the world\n */\nexport async function retrieveFromWorld(\n worldKey: string,\n model: string,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ephemeral?: boolean,\n trackingKey?: string,\n modelContext?: ModelContext,\n executionContext?: ExecutionContext,\n allowChannel?: boolean,\n } & RoutingOptions = {}\n): Promise<Run> {\n const {\n readLock,\n writeLock,\n ephemeral,\n trackingKey,\n modelContext,\n executionContext,\n allowChannel,\n ...routingOptions\n } = optionals;\n\n const hasPermit = readLock || writeLock;\n const headers = Object.assign(\n {},\n routingOptions.headers,\n hasPermit ? { 'X-Forio-Confirmation': true } : {}\n );\n const permit = hasPermit ? { readLock, writeLock } : undefined;\n\n return await new Router()\n .post(`/run/world/${worldKey}`, {\n body: {\n permit,\n morphology: 'MANY',\n trackingKey,\n modelFile: model,\n modelContext: modelContext || {},\n executionContext: executionContext || {},\n ephemeral,\n allowChannel,\n },\n ...routingOptions,\n headers,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Removes the run associated with the given world key\n * @example\n * epicenter.runAdapter.removeFromWorld('0000017a445032dc38cb2cecd5fc13708314');\n * @param worldKey Key associated with the world\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to undefined when successful\n */\nexport async function removeFromWorld(\n worldKey: string,\n optionals: RoutingOptions = {},\n): Promise<void> {\n\n return await new Router()\n .delete(`/run/world/${worldKey}`, optionals)\n .then(({ body }) => body);\n}\n\n// TODO -- revisit the code below when considering reimplmenting v2 run strategies\n// async function serial(runKey: string, operations, optionals = {}) {\n// const normalizedOps = operations.map((item) => ({\n// name: typeof item === 'string' ? item : item.name,\n// params: item.params,\n// }));\n\n// //Perform all operations, sequentially\n// return normalizedOps.reduce((promise, { name, params }) => {\n// return promise.then(() => operation(runKey, name, params, optionals = {}));\n// }, Promise.resolve());\n// }\n\n/**\n * Queries for and/or creates a run, depending on the strategy provided.\n *\n * 'reuse-across-sessions' -- will get the most recent run for the given scope, creating it if it does not exist\n * 'reuse-never' -- will create a new run every time\n *\n * @example\n *\n * import { runAdapter } from 'epicenter-libs';\n * runAdapter.getWithStrategy(\n * 'reuse-across-sessions',\n * 'model.py',\n * {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: '123456789',\n * },\n * );\n *\n * @param strategy Strategy to use when retrieving the run\n * @param model Name of your model file\n * @param scope Scope associated with your run\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.readLock] Read permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.writeLock] Write permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.trackingKey] Tracking key\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by clone operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by clone operations.\n * @returns promise that resolves to a run\n */\n\nexport async function getWithStrategy(\n strategy: RunStrategy,\n model: string,\n scope: GenericScope,\n optionals: {\n // initOperations?: Array<string | { name: string, params?: unknown[]}>,\n } & RunCreateOptions = {}\n): Promise<Run> {\n // const { initOperations = [] } = optionals;\n if (strategy === 'reuse-across-sessions') {\n const searchOptions = {\n scope,\n sort: ['-run.created'],\n max: 1,\n };\n const { values: [lastRun] } = await query(model, searchOptions);\n if (!lastRun) {\n const newRun = await create(model, scope, optionals);\n // await serial(newRun.runKey, initOperations, optionals = {});\n return newRun;\n }\n return lastRun;\n } else if (strategy === 'reuse-never') {\n const newRun = await create(model, scope, optionals);\n // await serial(newRun.runKey, initOperations, optionals = {});\n return newRun;\n } else if (strategy === 'reuse-by-tracking-key') {\n //TBD write out if needed\n //Platform plans to introduce run limits into episode scope, differing from v2's implementation of runLimit via 'reuse-by-tracking-key'\n } else if (strategy === 'multiplayer') {\n //TODO when multiplayer API is ready\n //check the current world for this end user, return the current run for that world (if there is none, create a run for the world)\n }\n throw new EpicenterError('Invalid run strategy.');\n}\n\n/**\n * Clone a run into a novel episode scope\n * @param runKey Source run key for the run you want to copy and migrate\n * @param episodeKey Destination episode key for the run's new episode scope\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.trackingKey] Tracking key\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by migrate operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by migrate operations.\n * @returns promise that resolves to the migrated run\n */\nexport async function migrate(\n runKey: string,\n episodeKey: string,\n optionals: {\n ephemeral?: boolean,\n trackingKey?: string,\n modelContext?: ModelContext,\n executionContext?: ExecutionContext,\n } & RoutingOptions = {}\n): Promise<Run> {\n const {\n ephemeral, trackingKey, modelContext = {}, executionContext = {},\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/run/migrate/to/${episodeKey}/${runKey}`, {\n body: {\n trackingKey,\n modelContext,\n executionContext,\n ephemeral,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n","import type { RoutingOptions } from 'utils/router';\nimport Router from 'utils/router';\n\ninterface Secret {\n password: string;\n}\n\nexport interface UserCreateView {\n [key: string]: unknown,\n handle: string;\n email?: string;\n givenName?: string;\n familyName?: string;\n active?: true;\n}\n\nexport interface User {\n lastUpdated: string,\n displayName: string,\n givenName: string,\n familyName: string,\n handle: string,\n created: string,\n detail: Record<string, unknown>,\n userId: number,\n userKey: string,\n objectType: 'external' | 'native',\n}\n\ninterface UploadOptions extends RoutingOptions {\n groupKey?: string,\n overwrite?: boolean,\n}\n\nexport interface NativeUserCreateView extends UserCreateView {\n objectType: 'native';\n secret: Secret;\n}\n\nexport interface ExternalUserCreateView extends UserCreateView {\n objectType: 'external';\n}\n\ntype Modality = 'NONE' | 'HBP' | 'ICC' | 'SSO';\n\nexport async function uploadCSV(\n file: File,\n optionals: UploadOptions = {}\n): Promise<void> {\n const {\n overwrite,\n ...routingOptions\n } = optionals;\n\n const formdata = new FormData();\n formdata.append('file', file);\n\n return await new Router()\n .withSearchParams({ overwrite })\n .post('/user/upload', {\n body: formdata,\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\nexport async function createUser(\n view: ExternalUserCreateView | NativeUserCreateView,\n optionals: RoutingOptions = {}\n): Promise<User> {\n return await new Router()\n .post('/user', {\n body: view,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Gets a specific user.\n * @example\n * epicenter.userAdapter.get('00000179b4d3fb0c84f822df8cd2aa53be25');\n *\n * @param userKey The user key\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to an user\n */\nexport async function get(\n userKey: string,\n optionals: RoutingOptions = {}\n): Promise<User> {\n return await new Router()\n .get(`/user/${userKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function getWithHandle(\n handle: string,\n optionals: {\n modality?: Modality,\n } & RoutingOptions = {},\n): Promise<User> {\n const { modality, ...routingOptions } = optionals;\n const uriComponent = modality ? `/${modality}` : '';\n return await new Router()\n .get(`/user/with/${handle}${uriComponent}`, routingOptions)\n .then(({ body }) => body);\n}","import type { UserSession } from '../utils/identification';\nimport type { RoutingOptions } from '../utils/router';\nimport type { GenericScope, GenericSearchOptions, Permit } from '../utils/constants';\n\nimport {\n identification, Router,\n ROLE, SCOPE_BOUNDARY,\n} from '../utils';\n\n\nexport interface Vault<Items> {\n created: string,\n lastUpdated: string,\n mutationKey: string,\n address: unknown,\n scope: { userKey?: string } & GenericScope,\n name: string,\n permit: Permit,\n vaultKey: string,\n expiration: string,\n items?: Items,\n changed?: boolean\n}\n\ninterface Items {\n set?: Record<string, unknown>,\n push?: Record<string, unknown>,\n pop?: Record<string, unknown>,\n}\n\n/**\n * Updates a vault,\n * @example\n * // Change the name of the first student object in the list of students in the vault to \"Bob\"\n * epicenter.vaultAdapter.update('00000166d59adcb0f497ddc1aad0270c0a62', { set: { 'students.0.name': 'Bob' } })\n * @param vaultKey Vault key\n * @param items Object with a set/push/pop field to update the vault with\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the vault\n */\nexport async function update(\n vaultKey: string,\n items: Items,\n optionals: { mutationKey?: string } & RoutingOptions = {},\n): Promise<Vault<unknown>> {\n const {\n mutationKey,\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .withSearchParams({ mutationKey: mutationKey })\n .put(`/vault/${vaultKey}`, {\n body: {\n set: items.set ?? {},\n push: items.push ?? {},\n pop: items.pop ?? {},\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nconst NOT_FOUND = 404;\nexport async function get(\n vaultKey: string,\n optionals: RoutingOptions = {}\n): Promise<Vault<unknown>> {\n return await new Router()\n .get(`/vault/${vaultKey}`, optionals)\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n }).then(({ body }) => body);\n}\n\n\nexport async function withScope(\n name: string,\n scope: { userKey?: string } & GenericScope,\n optionals: RoutingOptions = {}\n): Promise<Vault<unknown>> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const uriComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/vault/with/${scopeBoundary}/${scopeKey}${uriComponent}/${name}`, optionals)\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n }).then(({ body }) => body);\n}\n\nexport async function byName(\n name: string,\n optionals: {\n groupName?: string,\n episodeName?: string,\n userKey?: string,\n includeEpisodes?: boolean,\n } & RoutingOptions = {}\n): Promise<Vault<unknown>[]> {\n const {\n groupName, episodeName,\n userKey, includeEpisodes,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n\n const searchParams = {\n userKey,\n includeEpisodes,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/vault/in/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}/${name}`, {\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\nexport async function remove(\n vaultKey: string,\n optionals: { mutationKey?: string } & RoutingOptions = {}\n): Promise<void> {\n const {\n mutationKey,\n ...routingOptions\n } = optionals;\n return await new Router()\n .withSearchParams({ mutationKey: mutationKey })\n .delete(`/vault/${vaultKey}`, routingOptions)\n .then(({ body }) => body);\n}\n\n/**\n * Defines vault properties, used to create or modify a vault. Vault names are unique to within their scope.\n * Base URL: POST `https://forio.com/api/v3/{ACCOUNT}/{PROJECT}/vault/{COLLECTION_NAME}`\n *\n * @example\n * import { vaultAdapter, SCOPE_BOUNDARY } from 'epicenter-libs';\n * vaultAdapter.define('my-vault-name', {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: 'GROUP_KEY'\n * });\n *\n * @param name Name of the vault\n * @param scope Scope associated with your run\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [scope.userKey] Optional key to scope the vault to a user\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.items] Optional items parameter for updating vault contents\n * @param [optionals.items.set] Sets a field in the vault, where `[name]: [value]`, send `[name]: null` to delete\n * @param [optionals.items.push] Adds an item to a list in the vault, it the list does not exist it will create one\n * @param [optionals.items.pop] Use to remove items lists in a vault; TODO: how to use is unclear, elucidate\n * @param [optionals.readLock] Role allowed to read\n * @param [optionals.writeLock] Role allowed to write\n * @param [optionals.ttlSeconds] Life span of the vault -- default to null, minimum value of 1800 (30 minutes)\n * @param [optionals.mutationStrategy] Setting a mutation strategy allows for the following behaviors: ALLOW - Is an upsert which means if the entry exists it will be updated with the items in the POST. DISALLOW - Is an insert which means that if the entry exists no changes will be made (the 'changed' flag will be false). ERROR - Is an insert and, if the entry exists, a conflict exception will be thrown. If the mutationStrategy is omitted, it will simply search by scope and name; updating if it exists, creating if not.\n * @param [optionals.allowChannel] Opt into push notifications for this resource. Applicable to projects with phylogeny >= SILENT\n * @returns the vault (created or modified) */\nexport async function define(\n name: string,\n scope: { userKey?: string } & GenericScope,\n optionals: {\n items?: Items,\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: string,\n mutationStrategy?: string,\n allowChannel?: boolean,\n } & RoutingOptions = {}\n): Promise<Vault<unknown>> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n readLock,\n writeLock,\n items,\n ttlSeconds,\n mutationStrategy = 'ERROR',\n allowChannel,\n ...routingOptions\n } = optionals;\n const { WORLD } = SCOPE_BOUNDARY;\n const { PARTICIPANT, USER } = ROLE;\n const defaultLock = scopeBoundary === WORLD ? PARTICIPANT : USER;\n\n const searchParams = { mutationStrategy };\n\n return await new Router()\n .withSearchParams(searchParams)\n .post(`/vault/${name}`, {\n body: {\n scope: {\n scopeBoundary,\n scopeKey,\n userKey,\n },\n permit: {\n readLock: readLock || defaultLock,\n writeLock: writeLock || defaultLock,\n },\n ttlSeconds,\n items,\n allowChannel,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n\nexport async function create(\n name: string,\n scope: { userKey?: string } & GenericScope,\n items: Items,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: string,\n mutationStrategy?: string,\n } & RoutingOptions = {}\n): Promise<Vault<unknown>> {\n console.warn('DEPRECATION WARNING: vaultAdapter.create is deprecated and will be removed with the next release. Use vaultAdapter.define instead.');\n return await define(name, scope, { items, ...optionals });\n}\n\nexport async function list(\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Vault<unknown>[]> {\n const { first, filter = [], max } = searchOptions;\n const searchParams = {\n filter: filter.join(';') || undefined,\n first, max,\n };\n\n return new Router()\n .withSearchParams(searchParams)\n .get('/vault/search', optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Counts the number of vaults that match the search options\n * @param searchOptions Search options\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the number of vaults that match the search options\n */\nexport async function count(\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Vault<unknown>[]> {\n const { first, filter = [], max } = searchOptions;\n const searchParams = {\n filter: filter.join(';') || undefined,\n first, max,\n };\n\n return new Router()\n .withSearchParams(searchParams)\n .get('/vault/count', optionals)\n .then(({ body }) => body);\n}\n","import type { GenericScope } from '../utils/constants';\nimport type { RoutingOptions, Page } from '../utils/router';\n\nimport Router from '../utils/router';\n\nexport type Video = FIXME;\nexport enum AFFILIATE {\n VONAGE = 'VONAGE',\n DAILY = 'DAILY',\n DOMESTIC = 'DOMESTIC',\n}\n\nexport enum PROCESSING_TYPE {\n transcription = 'transcription',\n}\n\nexport enum MEDIA_FORMAT {\n mp3 = 'mp3',\n mp4 = 'mp4',\n wav = 'wav',\n flac = 'flac',\n ogg = 'ogg',\n amr = 'amr',\n webm = 'webm',\n}\n\nexport enum LANGUAGE_CODE {\n 'af-ZA' = 'af-ZA',\n 'ar-AE' = 'ar-AE',\n 'ar-SA' = 'ar-SA',\n 'cy-GB' = 'cy-GB',\n 'da-DK' = 'da-DK',\n 'de-CH' = 'de-CH',\n 'de-DE' = 'de-DE',\n 'en-AB' = 'en-AB',\n 'en-AU' = 'en-AU',\n 'en-GB' = 'en-GB',\n 'en-IE' = 'en-IE',\n 'en-IN' = 'en-IN',\n 'en-US' = 'en-US',\n 'en-WL' = 'en-WL',\n 'es-ES' = 'es-ES',\n 'es-US' = 'es-US',\n 'fa-IR' = 'fa-IR',\n 'fr-CA' = 'fr-CA',\n 'fr-FR' = 'fr-FR',\n 'ga-IE' = 'ga-IE',\n 'gd-GB' = 'gd-GB',\n 'he-IL' = 'he-IL',\n 'hi-IN' = 'hi-IN',\n 'id-ID' = 'id-ID',\n 'it-IT' = 'it-IT',\n 'ja-JP' = 'ja-JP',\n 'ko-KR' = 'ko-KR',\n 'nl-NL' = 'nl-NL',\n 'pt-BR' = 'pt-BR',\n 'pt-PT' = 'pt-PT',\n 'ru-RU' = 'ru-RU',\n 'ta-IN' = 'ta-IN',\n 'te-IN' = 'te-IN',\n 'tr-TR' = 'tr-TR',\n 'zh-CN' = 'zh-CN',\n 'zh-TW' = 'zh-TW',\n 'th-TH' = 'th-TH',\n 'en-ZA' = 'en-ZA',\n 'en-NZ' = 'en-NZ',\n}\n\nexport type VIDEO_DIR = {\n contents: string[],\n videoKey: string,\n}\n\nexport async function getVideoURLByKey(\n file: string,\n videoKey: string,\n optionals: RoutingOptions = {}\n): Promise<string> {\n return await new Router()\n .get(`/video/url/${videoKey}/${file}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function getVideoURLWith(\n file: string,\n family: string,\n affiliate: keyof typeof AFFILIATE,\n scope: { userKey?: string } & GenericScope,\n optionals: RoutingOptions = {}\n): Promise<string> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const userKeyURIComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/video/url/with/${scopeBoundary}/${scopeKey}${userKeyURIComponent}/${affiliate}/${family}/${file}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function getVideoDirectoryByKey(\n videoKey: string,\n optionals: RoutingOptions = {}\n): Promise<VIDEO_DIR> {\n return await new Router()\n .get(`/video/url/${videoKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function getVideoDirectoryWith(\n family: string,\n affiliate: keyof typeof AFFILIATE,\n scope: { userKey?: string } & GenericScope,\n optionals: RoutingOptions = {}\n): Promise<VIDEO_DIR> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const userKeyURIComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/video/dir/with/${scopeBoundary}/${scopeKey}${userKeyURIComponent}/${affiliate}/${family}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function getVideoSearch(\n optionals: RoutingOptions = {}\n): Promise<Page<Video>> {\n return await new Router()\n .get('/video/search', optionals)\n .then(({ body }) => body);\n}\n\nexport async function deleteVideoByKey(\n videoKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n return await new Router()\n .delete(`/video/${videoKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function postVideoProcessor(\n videoKey: string,\n body: {\n processors: {\n jobName?: string,\n mediaFormat: keyof typeof MEDIA_FORMAT,\n languageCode: keyof typeof LANGUAGE_CODE,\n timeoutMinutes?: number,\n mediaFile?: string,\n objectType: keyof typeof PROCESSING_TYPE,\n }[],\n log?: string,\n },\n optionals: RoutingOptions = {},\n): Promise<boolean> {\n return await new Router()\n .post(`/video/execute/${videoKey}`, { body, ...optionals })\n .then(({ body }) => body);\n}\n\nexport async function downloadVideoByKey(\n file: string,\n videoKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n return await new Router()\n .get(`/video/download/${videoKey}/${file}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function downloadVideoWith(\n file: string,\n family: string,\n affiliate: keyof typeof AFFILIATE,\n scope: { userKey?: string } & GenericScope,\n optionals: RoutingOptions = {}\n): Promise<void> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const userKeyURIComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/video/download/with/${scopeBoundary}/${scopeKey}${userKeyURIComponent}/${affiliate}/${family}/${file}`, optionals)\n .then(({ body }) => body);\n}","import type { Page, RoutingOptions } from '../utils/router';\nimport type { GenericScope, GenericSearchOptions } from '../utils/constants';\nimport type { Video, AFFILIATE, PROCESSING_TYPE, MEDIA_FORMAT, LANGUAGE_CODE, VIDEO_DIR } from '../apis/video';\n\nimport EpicenterError from '../utils/error';\nimport * as videoAPI from '../apis/video';\n\n\n/**\n * Deletes a video (and it's associated files)\n * @param videoKey Video key\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to undefined when successful\n */\nexport async function remove(\n videoKey: string,\n optionals: RoutingOptions = {},\n): Promise<void> {\n return videoAPI.deleteVideoByKey(videoKey, optionals);\n}\n\n/**\n * Open search for video objects\n * @param searchOptions Search options\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a page of video objects\n */\nexport async function query(\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {},\n): Promise<Page<Video>> {\n const { filter = [], sort = [], first, max } = searchOptions;\n\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max,\n };\n\n return videoAPI.getVideoSearch({\n query: searchParams,\n paginated: true,\n ...optionals,\n });\n}\n\n\n/**\n * @example\n * import { videoAdapter } from 'epicenter-libs';\n *\n * // get using video key\n * videoAdapter.getURL('archive.mp4', {\n * videoKey: '0000017e31bb902cfe17615867d5005c5d5f',\n * });\n *\n * // get using scope/affiliate/family\n * videoAdapter.getURL('archive.mp4', {\n * scope: {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: session.groupKey,\n * },\n * affiliate: 'VONAGE',\n * family: 'archiveName'\n * });\n *\n * @param file Name of the file\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.scope] Scope object\n * @param [optionals.scope.scopeBoundary] Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param [optionals.scope.scopeKey] Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals.scope.userKey] User attached to scope if necessary\n * @param [optionals.affiliate] Affiliate -- only support for one for now: Vonage\n * @param [optionals.family] Identifier for the resourced provided by the affiliate (in the case of Vonage, this is the archive name).\n * @param [optionals.videoKey] Key for the video object\n * @returns\n */\nexport async function getURL(\n file: string,\n optionals: {\n scope?: { userKey?: string } & GenericScope,\n affiliate?: keyof typeof AFFILIATE,\n family?: string,\n videoKey?: string,\n } & RoutingOptions = {}\n): Promise<string> {\n const { scope, affiliate, family, videoKey, ...routingOptions } = optionals;\n if (scope && family && affiliate) {\n return videoAPI.getVideoURLWith(file, family, affiliate, scope, routingOptions);\n }\n if (videoKey) {\n return videoAPI.getVideoURLByKey(file, videoKey, routingOptions);\n }\n throw new EpicenterError('Cannot get video URL -- either a video key or scope/affiliate/family specification is required.');\n}\n\n/**\n * @example\n * import { videoAdapter } from 'epicenter-libs';\n *\n * // get using video key\n * videoAdapter.getDirectoryURL({\n * videoKey: '0000017e31bb902cfe17615867d5005c5d5f',\n * });\n *\n * // get using scope/affiliate/family\n * videoAdapter.getDirectoryURL({\n * scope: {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: session.groupKey,\n * },\n * affiliate: 'VONAGE',\n * family: 'archiveName'\n * });\n *\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.scope] Scope object\n * @param [optionals.scope.scopeBoundary] Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param [optionals.scope.scopeKey] Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals.scope.userKey] User attached to scope if necessary\n * @param [optionals.affiliate] Affiliate -- only support for one for now: Vonage\n * @param [optionals.family] Identifier for the resourced provided by the affiliate (in the case of Vonage, this is the archive name).\n * @param [optionals.videoKey] Key for the video object\n * @returns\n */\nexport async function getDirectoryURL(\n optionals: {\n scope?: { userKey?: string } & GenericScope,\n affiliate?: keyof typeof AFFILIATE,\n family?: string,\n videoKey?: string,\n } & RoutingOptions = {}\n): Promise<VIDEO_DIR> {\n const { scope, affiliate, family, videoKey, ...routingOptions } = optionals;\n if (scope && family && affiliate) {\n return videoAPI.getVideoDirectoryWith(family, affiliate, scope, routingOptions);\n }\n if (videoKey) {\n return videoAPI.getVideoDirectoryByKey(videoKey, routingOptions);\n }\n throw new EpicenterError('Cannot get video URL -- either a video key or scope/affiliate/family specification is required.');\n}\n\n/**\n * Processes a video (one example of this is transcribing a video)\n * @example\n *\n * const processors = [\n * {\n * mediaFormat: 'mp4',\n * languageCode: 'en-US',\n * objectType: 'transcription',\n * mediaFile: 'archive.mp4',\n * jobName: 'test-transcription',\n * },\n * ];\n *\n * videoAdapter.processVideo(videoKey, processors);\n *\n * @param videoKey Video key\n * @param [processors[]] List of processes to complete\n * @param [processors[].jobName] A string to specify the title of the newly file\n * @param [processors[].mediaFormat] The format of the file you are processing\n * @param [processors[].languageCode] The language which the video is recorded in\n * @param [processors[].timeoutMinutes] Optional- how long to wait before the call cancels out; defaults to 3 minutes\n * @param [processors[].mediaFile] The name of the media file to perform the process on\n * @param [processors[].objectType] The type of processing job to perform (currently limited to transcribe)\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.log] Name for log file\n * @returns promise that resolves a boolean\n */\nexport async function processVideo(\n videoKey: string,\n processors: {\n jobName: string,\n mediaFormat: keyof typeof MEDIA_FORMAT,\n languageCode: keyof typeof LANGUAGE_CODE,\n timeoutMinutes?: number,\n mediaFile: string,\n objectType: keyof typeof PROCESSING_TYPE,\n }[],\n optionals: {\n log?: string,\n } & RoutingOptions = {}\n): Promise<boolean> {\n const { log, ...routingOptions } = optionals;\n const body = {\n processors,\n log,\n };\n return videoAPI.postVideoProcessor(videoKey, body, routingOptions);\n}\n\n/**\n * @param file Name of the file\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.scope] Scope object\n * @param [optionals.scope.scopeBoundary] Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param [optionals.scope.scopeKey] Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals.scope.userKey] User attached to scope if necessary\n * @param [optionals.affiliate] Affiliate -- only support for one for now: Vonage\n * @param [optionals.family] Identifier for the resourced provided by the affiliate (in the case of Vonage, this is the archive name).\n * @param [optionals.videoKey] Key for the video object\n * @returns\n */\nexport async function download(\n file: string,\n optionals: {\n scope?: { userKey?: string } & GenericScope,\n affiliate?: keyof typeof AFFILIATE,\n family?: string,\n videoKey?: string,\n } & RoutingOptions = {}\n): Promise<void> {\n const { scope, affiliate, family, videoKey, ...routingOptions } = optionals;\n if (scope && family && affiliate) {\n videoAPI.downloadVideoWith(file, family, affiliate, scope, routingOptions);\n }\n if (videoKey) {\n videoAPI.downloadVideoByKey(file, videoKey, routingOptions);\n }\n throw new EpicenterError('Cannot download video -- either a video key or scope/affiliate/family specification is required.');\n}","import type { GenericScope, Permit } from '../utils/constants';\nimport type { RoutingOptions } from '../utils/router';\n\nimport Router from '../utils/router';\n\n\nexport type SessionID = string;\nexport type ArchiveID = string;\nexport type APIKey = string;\nexport type Token = string;\nexport type VonageSession = {\n sessionId: SessionID,\n};\nexport type VonageArchive = {\n archiveId: string,\n status: 'available' | 'deleted' | 'failed' | 'paused' | 'started' | 'stopped' | 'uploaded' | 'expired',\n}\n\nexport async function getSession(\n optionals: RoutingOptions = {},\n): Promise<{ sessionId: SessionID }> {\n return await new Router()\n .get('/vonage/session', optionals)\n .then(({ body }) => body);\n}\n\nexport async function postToken(\n body: { sessionId: string },\n optionals: RoutingOptions = {},\n): Promise<{ token: Token }> {\n return await new Router()\n // The initialLayoutClassList is a temporary fix for existing simulations;\n // This should likely be implemented differently if we decide to continue using Vonage;\n // We are currently investigating alternatives due to performance issues, so this solution just prevents API errors;\n .post('/vonage/token', { body: {...body, initialLayoutClassList: ['placeholder']}, ...optionals })\n .then(({ body }) => body);\n}\n\nexport async function postArchive(\n body: {\n name: string,\n scope: { userKey?: string } & GenericScope,\n sessionId: SessionID,\n permit?: Permit,\n ttlSeconds?: number,\n resolution?: string,\n },\n optionals: RoutingOptions = {},\n): Promise<VonageArchive> {\n return await new Router()\n .post('/vonage/archive', { body, ...optionals })\n .then(({ body }) => body);\n}\n\nexport async function getInfo(\n optionals: RoutingOptions = {}\n): Promise<{ apiKey: APIKey }> {\n return await new Router()\n .get('/vonage/info', optionals)\n .then(({ body }) => body);\n}\n\nexport async function deleteArchiveByID(\n archiveID: string,\n optionals: RoutingOptions = {}\n): Promise<VonageArchive> {\n return await new Router()\n .delete(`/vonage/archive/${archiveID}`, optionals)\n .then(({ body }) => body);\n}\n","import type { RoutingOptions } from '../utils/router';\nimport type { GenericScope } from '../utils/constants';\nimport type { APIKey, SessionID, Token, ArchiveID, VonageArchive, VonageSession } from '../apis/vonage';\n\nimport { ROLE } from '../utils/constants';\nimport * as vonageAPI from '../apis/vonage';\n\n\n/**\n * Gets the Vonage project ID (not to be confused with the Epicenter project). Used to initialize the session object on the client side\n * @example\n * import OT from '@opentok/client';\n * import { vonageAdapter } from 'epicenter-libs';\n *\n * const [sessionID, projectID] = await Promise.all([\n * vonageAdapter.createSession(),\n * vonageAdapter.getProjectID()\n * ]);\n *\n * const vonageSession = OT.initSession(projectID, sessionID);\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the Vonage project ID (otherwise known as the Vonage API key)\n */\nexport async function getProjectID(\n optionals: RoutingOptions = {}\n): Promise<APIKey> {\n return (await vonageAPI.getInfo(optionals)).apiKey;\n}\n\n/**\n * Calls the server SDK call for creating a session. Used to create a session object on the client side.\n * @example\n * import OT from '@opentok/client';\n * import { vonageAdapter } from 'epicenter-libs';\n *\n * const [sessionID, projectID] = await Promise.all([\n * vonageAdapter.createSession(),\n * vonageAdapter.getProjectID()\n * ]);\n *\n * const vonageSession = OT.initSession(projectID, sessionID);\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to an object containing the Vonage session ID\n */\nexport async function createSession(\n optionals: RoutingOptions = {}\n): Promise<VonageSession> {\n return vonageAPI.getSession(optionals);\n}\n\n/**\n * Creates a Vonage session token, used to connect a session.\n * @example\n * import { vonageAdapter } from 'epicenter-libs';\n * const token = await vonageAdapter.generateToken('2_MX40NzQ...Y1TnZ-fg');\n * vonageSession.connect(token);\n * @param sessionID ID of the session you're expecting to connect to using the token\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a Vonage session token\n */\nexport async function generateToken(\n sessionID: SessionID,\n optionals: RoutingOptions = {}\n): Promise<Token> {\n return (await vonageAPI.postToken({ sessionId: sessionID }, optionals)).token;\n}\n\n/**\n * Starts a Vonage archive -- a user recording of a Vonage session\n * @example\n * import { vonageAdapter, SCOPE_BOUNDARY } from 'epicenter-libs';\n * const session = authAdapter.getLocalSession();\n * vonageAdapter.startArchive('my-archive', '2_MX40NzQ...Y1TnZ-fg', {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: session.groupKey,\n * })\n * @param name Name of the archive; for your own purposes\n * @param sessionID ID of the session you're creating an archive for\n * @param scope Scope attached to the archive\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [scope.userKey] User key, to attach a user to the scope\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.readLock] Read permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.writeLock] Write permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.resolution] Video resolution the archive should be recorded at -- string like '1920x1080'\n * @param [optionals.ttlSeconds] Life span of the archive (how long before it is deleted); defaults to 604,800 (1 week), max of 31,536,000 (1 year)\n * @returns promise that resolves to an object containing the archive ID and status\n */\nexport async function startArchive(\n name: string,\n sessionID: SessionID,\n scope: { userKey?: string } & GenericScope,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n resolution?: string,\n ttlSeconds?: number,\n } & RoutingOptions = {}\n): Promise<VonageArchive> {\n const { readLock, writeLock, ttlSeconds, resolution, ...routingOptions } = optionals;\n const { PARTICIPANT, USER } = ROLE;\n const defaultLock = scope.userKey ? USER : PARTICIPANT;\n\n return vonageAPI.postArchive({\n name,\n sessionId: sessionID,\n scope,\n permit: {\n readLock: readLock ?? defaultLock,\n writeLock: writeLock ?? defaultLock,\n },\n ttlSeconds,\n resolution,\n }, routingOptions);\n}\n\n/**\n * Stops a Vonage archive -- begins the serialization process for a recording\n * @example\n * import { vonageAdapter } from 'epicenter-libs';\n * vonageAdapter.stopArchive('004355...ede770e39');\n * @param archiveID ID of the archive to stop\n * @param optionals Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to an object containing the archive ID and status (which should be \"stopped\")\n */\nexport async function stopArchive(\n archiveID: ArchiveID,\n optionals: RoutingOptions = {}\n): Promise<VonageArchive> {\n return vonageAPI.deleteArchiveByID(archiveID, optionals);\n}","import type { UserSession } from '../utils/identification';\nimport type { RoutingOptions } from '../utils/router';\nimport type { GenericScope } from '../utils/constants';\nimport type { User } from './user';\n\nimport {\n Router, identification,\n SCOPE_BOUNDARY,\n} from '../utils';\n\n\nenum OBJECTIVE {\n MINIMUM = 'MINIMUM',\n MAXIMUM = 'MAXIMUM',\n MARGINAL = 'MARGINAL',\n}\n\nenum ORBIT_TYPE {\n GROUP = 'GROUP',\n EPISODE = 'EPISODE',\n}\n\nenum WORLD_NAME_GENERATOR {\n colorAnimal = 'colorAnimal',\n sequential = 'sequential',\n}\n\ninterface UserAssignment {\n userKey: string,\n role?: string,\n}\n\ninterface Persona {\n role: string,\n minimum: number,\n maximum?: number,\n marginal?: number,\n}\n\ninterface Assignment {\n role: string,\n user: User,\n}\n\ninterface World {\n lastUpdated: string,\n personae: Persona[],\n assignments: Assignment[],\n orbitKey: string,\n worldKey: string,\n created: string,\n orbitType: keyof typeof ORBIT_TYPE,\n runKey: string,\n}\n\n/**\n * Updates fields for a particular world.\n * @example\n * epicenter.worldAdapter.update('0000017a445032dc38cb2cecd5fc13708314', { runKey: '0000018d61f1217b22ce0ae605ff00609f5e', displayName: 'World A1' });\n * @param worldKey Key associated with world\n * @param update Attributes you wish to update\n * @param [update.displayName] Display name of the world\n * @param [update.runKey] Key for the run you want to attach to the world\n * @param [update.allowChannel] Opt into push notifications for this resource. Applicable to projects with phylogeny >= SILENT\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise wiworld with updated attributes\n */\nexport async function update(\n worldKey: string,\n update: {\n displayName?: string,\n runKey?: string,\n allowChannel?: boolean\n },\n optionals: RoutingOptions = {}\n): Promise<World> {\n const {\n displayName,\n runKey,\n allowChannel,\n } = update;\n\n return await new Router()\n .patch(`/world/${worldKey}`, {\n body: {\n displayName,\n runKey,\n allowChannel,\n },\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Deletes a world\n * @example\n * epicenter.worldAdapter.destroy('0000017a445032dc38cb2cecd5fc13708314');\n * @param worldKey Key associated with world\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns\n */\nexport async function destroy(\n worldKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n\n return await new Router()\n .delete(`/world/${worldKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Creates a world\n * @example\n * epicenter.worldAdapter.create({ name: 'Whole New World' });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.name] Name of the new world -- if omitted one will be provided by Epicenter. Must be unique within the world's scope.\n * @param [optionals.displayName] Display name of the new world\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoping\n * @param [optionals.worldNameGenerator] Specifies how world names are generated\n * @param [optionals.worldNameGenerator.objectType] Can be either colorAnimal or sequential\n * @param [optionals.allowChannel] Opt into push notifications for this resource. Applicable to projects with phylogeny >= SILENT\n * @returns promise that resolves to the newly created world\n */\nexport async function create(\n optionals: {\n name?: string,\n displayName?: string,\n groupName?: string,\n episodeName?: string,\n worldNameGenerator?: { objectType: keyof typeof WORLD_NAME_GENERATOR },\n allowChannel?: boolean,\n } & RoutingOptions = {}\n): Promise<World> {\n const {\n name,\n displayName,\n groupName,\n episodeName,\n worldNameGenerator,\n allowChannel,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .post(`/world/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, {\n body: {\n name,\n worldNameGenerator,\n displayName,\n allowChannel,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n\n/**\n * Fetches the worlds in a group or episode if specified\n * @example\n * // Gets all the worlds in the group attached to the session\n * epicenter.worldAdapter.get();\n * // Gets all the worlds in the group attached to the session that the user is assigned to\n * epicenter.worldAdapter.get({ mine: true });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.mine] Flag for indicating to get only the worlds the requesting user is in (based on session token)\n * @returns promise that resolves to a list of worlds\n */\nexport async function get(\n optionals: {\n groupName?: string,\n episodeName?: string,\n mine?: boolean,\n } & RoutingOptions = {}\n): Promise<World> {\n const {\n groupName, episodeName, mine,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .withSearchParams({ mine })\n .get(`/world/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Fetches the assignments (plus some world info) in a group or episode if specified\n * @example\n * import { worldAdapter } from 'epicenter-libs';\n * worldAdapter.getAssignments({ mine: true });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.mine] Flag for indicating to get only the worlds the requesting user is in (based on session token)\n * @returns promise that resolves to a list of worlds the user is assigned to\n *\n */\nexport async function getAssignments(\n optionals: {\n groupName?: string,\n episodeName?: string,\n mine?: boolean,\n } & RoutingOptions = {}\n): Promise<World[]> {\n const {\n groupName, episodeName, mine,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .withSearchParams({ mine })\n .get(`/world/assignment/for/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, routingOptions)\n .then(({ body }) => body);\n}\n\nexport async function getSessionWorlds(\n optionals: RoutingOptions = {}\n): Promise<World> {\n return await new Router()\n .get('/world/assignment', optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Automatically assigns the current session's user a world\n * @example\n * // Assigns user to a group-scoped world\n * epicenter.worldAdapter.selfAssign();\n * // Assigns user to a group-scoped world with role \"cartographer\"\n * epicenter.worldAdapter.selfAssign({ role: 'cartographer' });\n * // Assigns user to an episode-scoped world with role \"cartographer\"\n * epicenter.worldAdapter.selfAssign({ role: 'cartographer', episodeName: 'my-episode-name' });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.role] Role constaint -- will put the user in a world with a role\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.objective] Allows platform to assign users beyond minimum amount\n * @param [optionals.worldNameGenerator] Specifies how world names are generated\n * @param [optionals.worldNameGenerator.objectType] Can be either colorAnimal or sequential\n * @param [optionals.populace] List of role description objects (personas) to dictate the self assignment\n * @param [optionals.populace[].role] Name of the role\n * @param [optionals.populace[].minimum] The minimum number of users that required for this role\n * @param [optionals.populace[].maximum] The maximum number of users that can be assigned to this role\n * @param [optionals.populace[].marginal] The maximum number of users that can be assigned to this role when using objective MARGINAL\n * @returns promise that resolves to the world the user was assigned to\n */\nexport async function selfAssign(\n optionals: {\n role?: string,\n groupName?: string,\n episodeName?: string,\n objective?: keyof typeof OBJECTIVE,\n worldNameGenerator?: {objectType: keyof typeof WORLD_NAME_GENERATOR},\n populace?: Persona[],\n } & RoutingOptions = {}\n): Promise<World> {\n const {\n role, groupName, episodeName, objective = OBJECTIVE.MINIMUM, worldNameGenerator, populace,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .post(`/world/selfassign/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, {\n body: { role, objective, worldNameGenerator, populace },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * (Auto assign) -- makes worlds given a list of users.\n * @example\n * import { worldAdapter } from 'epicenter-libs';\n * const worlds = await worldAdapter.assignUsers([\n * { userKey: '000001796733eef0842f4d6d960997018a43', role: 'locksmith' },\n * { userKey: '000001796733eef0842f4d6d960997018a3b' },\n * ]);\n *\n * @param assignments List of users assignment objects\n * @param assignments[].userKey User key\n * @param [assignments[].role] Role to assign to the user\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.role] Role constaint -- will put the user in a world with a role\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.objective] Allows platform to assign users beyond minimum amount\n * @param [optionals.requireAllAssignments] Have the server return w/ an error whenever an assignment was not made (instead of silently leaving the user as unassigned)\n * @param [optionals.keepEmptyWorlds] Specify whether worlds that are now empty should be deleted\n * @param [optionals.worldNameGenerator] Specifies how world names are generated\n * @param [optionals.worldNameGenerator.objectType] Can be either colorAnimal or sequential\n * @param [optionals.populace] List of role description objects (personas) to use while creating assignments\n * @param [optionals.populace[].role] Name of the role\n * @param [optionals.populace[].minimum] The minimum number of users that required for this role\n * @param [optionals.populace[].maximum] The maximum number of users that can be assigned to this role\n * @param [optionals.populace[].marginal] The maximum number of users that can be assigned to this role when using objective MARGINAL\n * @returns promise that resolves to the list of worlds created by the assignment\n */\nexport async function autoAssignUsers(\n assignments: UserAssignment[],\n optionals: {\n groupName?: string,\n episodeName?: string,\n objective?: keyof typeof OBJECTIVE,\n worldNameGenerator?: {objectType: keyof typeof WORLD_NAME_GENERATOR},\n requireAllAssignments?: boolean,\n keepEmptyWorlds?: boolean,\n populace?: Persona[],\n } & RoutingOptions = {}\n): Promise<World[]> {\n const {\n groupName, episodeName, objective = OBJECTIVE.MINIMUM, requireAllAssignments, worldNameGenerator, keepEmptyWorlds, populace,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .post(`/world/assignment/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, {\n body: { assignments, objective, requireAllAssignments, worldNameGenerator, keepEmptyWorlds, populace },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\ntype WorldKey = string;\nexport async function editAssignments(\n assignments: Record<WorldKey, UserAssignment[]>,\n optionals: {\n groupName?: string,\n episodeName?: string,\n objective?: keyof typeof OBJECTIVE,\n keepEmptyWorlds?: boolean,\n requireAllAssignments?: boolean,\n } & RoutingOptions = {}\n): Promise<World[]> {\n const {\n groupName, episodeName, objective = OBJECTIVE.MINIMUM, requireAllAssignments, keepEmptyWorlds,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .put(`/world/assignment/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, {\n body: { assignments, objective, requireAllAssignments, keepEmptyWorlds },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Retrieves the current assignment information for a given world\n *\n * @example\n * import { worldAdapter } from 'epicenter-libs';\n * const assignments = await worldAdapter.getAssignmentsByKey(world.worldKey);\n *\n * @param worldKey Key associated with the world\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the world containing the assignment object\n */\nexport async function getAssignmentsByKey(\n worldKey: string,\n optionals: RoutingOptions = {}\n): Promise<World> {\n\n return await new Router()\n .get(`/world/assignment/${worldKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Removes a user or list of users the all worlds in a given group or episode. Any worlds that do not contain users within them will be automatically deleted in the process.\n * @example\n * import { worldAdapter } from 'epicenter-libs';\n * await worldAdapter.removeUser(user.userKey);\n *\n * @param userKeys List of keys associated with users to remove from worlds\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.keepEmptyWorlds] If the unassignment results in an empty world, whether to delete it\n * @returns promise that resolves to undefined when successful\n */\nexport async function removeUsers(\n userKeys: string[],\n optionals: {\n groupName?: string,\n episodeName?: string,\n keepEmptyWorlds?: boolean,\n } & RoutingOptions = {}\n): Promise<void> {\n const {\n groupName, episodeName, keepEmptyWorlds,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .withSearchParams({ userKey: userKeys, keepEmptyWorlds: Boolean(keepEmptyWorlds) })\n .delete(`/world/assignment/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Gets the personas of a given scope (project, group, episode, world). Personas correspond to a role that a user in the world can be assigned to.\n *\n * @example\n * import { worldAdapter } from 'epicenter-libs';\n * await worldAdapter.getPersonas({ scopeBoundary: SCOPE_BOUNDARY.GROUP, scopeKey: GROUP_KEY });\n *\n * @param scope Scope associated with the persona set (by default the scope used will be the current project). Use this to do any specific overrides.\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves with undefined when successful\n */\nexport async function getPersonas(\n scope: GenericScope,\n optionals: RoutingOptions = {}\n): Promise<void> {\n const { scopeBoundary, scopeKey } = scope;\n const boundary = scopeBoundary || SCOPE_BOUNDARY.PROJECT;\n /* We will at some point remove the need to explicitly lower case this */\n const boundaryComponent = boundary === SCOPE_BOUNDARY.WORLD ? '' : `/${boundary.toLowerCase()}`;\n const scopeKeyComponent = boundary === SCOPE_BOUNDARY.PROJECT ? '' : `/${scopeKey}`;\n const uriComponent = `${boundaryComponent}${scopeKeyComponent}`;\n\n return await new Router()\n .get(`/world/persona${uriComponent}`, {\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Sets the personas of a given scope (project, group, episode, world). Personas correspond to a role the a user in the world can be assigned to.\n * A null value for minimum is 0, but a null maximum is uncapped. A null marginal defaults to maximum. Personas with greater specificity override more general ones (which are by default PROJECT scoped).\n *\n * @example\n * import { worldAdapter } from 'epicenter-libs';\n * await worldAdapter.setPersonas([\n * { role: 'leader', minimum: 1 },\n * ]);\n * @param personas List of role description objects (personas)\n * @param personas[].role Name of the role\n * @param [personas[].minimum] The minimum number of users that required for this role\n * @param [personas[].maximum] The maximum number of users that can be assigned to this role\n * @param [personas[].marginal] The maximum number of users that can be assigned to this role when using objective MARGINAL\n * @param scope Scope associated with the persona set (by default the scope used will be the current project). Use this to do any specific overrides.\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves with undefined when successful\n */\nexport async function setPersonas(\n personas: { role: string, minimum?: number, maximum?: number, marginal?: number }[],\n scope: GenericScope,\n optionals: RoutingOptions = {}\n): Promise<void> {\n const { scopeBoundary, scopeKey } = scope;\n const boundary = scopeBoundary || SCOPE_BOUNDARY.PROJECT;\n /* We will at some point remove the need to explicitly lower case this */\n const boundaryComponent = boundary === SCOPE_BOUNDARY.WORLD ? '' : `/${boundary.toLowerCase()}`;\n const scopeKeyComponent = boundary === SCOPE_BOUNDARY.PROJECT ? '' : `/${scopeKey}`;\n const uriComponent = `${boundaryComponent}${scopeKeyComponent}`;\n\n return await new Router()\n .put(`/world/persona${uriComponent}`, {\n body: personas,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Assigns an existing run to the given world.\n * @example\n * import { worldAdapter } from 'epicenter-libs';\n * await worldAdapter.assignRun(world.worldKey, { runKey: run.runKey });\n * @param worldKey Key associated with the world\n * @param runKey Key associated with the run\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the newly resolved world\n */\nexport async function assignRun(\n worldKey: string,\n runKey: string,\n optionals: RoutingOptions = {}\n): Promise<World> {\n\n return await new Router()\n .patch(`/world/run/${worldKey}`, {\n body: { runKey },\n ...optionals,\n })\n .then(({ body }) => body);\n}","import type { RoutingOptions } from 'utils/router';\nimport Router from 'utils/router';\n\n/**\n * Time API adapter -- handles getting the current server time\n * @namespace timeAdapter\n */\n\n/**\n * Fetches the current server time\n *\n * Base URL: GET `https://forio.com/api/v3/{ACCOUNT}/{PROJECT}/time`\n *\n * @memberof timeAdapter\n * @example\n *\n * import { timeAdapter } from 'epicenter-libs';\n * const worlds = await timeAdapter.get();\n *\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @returns {string} The current server time, in ISO 8601 format\n */\n\nconst NOT_FOUND = 404;\nexport async function get(\n optionals: RoutingOptions = {}\n):Promise<void | string> {\n return await new Router()\n .get('/time', optionals)\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n }).then(({ body }) => body);\n}\n","import type { RoutingOptions } from 'utils/router';\nimport type { GenericScope } from 'utils/constants';\nimport { Router } from 'utils/index';\n\nenum RETRY_POLICY {\n DO_NOTHING = 'DO_NOTHING', //If the task fails, do nothing (this is the default)\n RESCHEDULE = 'RESCHEDULE', //If the task fails retry at the next scheduled time point\n FIRE_ON_FAIL_SAFE = 'FIRE_ON_FAIL_SAFE', //Will re-execute the task after it fails; how long until this occurs is equal to ttlSeconds\n}\n/**\n * Creates a task; requires support level authentication\n *\n * Base URL: POST `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task`\n * Base URL with pseudonym: POST `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/{scopeBoundary}/{scopeKey}/{userKey}/{name}`\n *\n * @example\n * const scope = {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: session.groupKey,\n * };\n * const name = 'task-1-send-emails'\n * const payload = {\n * method: 'POST',\n * url: 'https://forio.com/app/forio-dev/test-project/send-out-emails',\n * }\n * const trigger = {\n * value: '0 7 15 * * ?', //triggers on day 15 7am of each month\n * objectType: 'cron',\n * }\n *\n * epicenter.taskAdapter.create(scope, name, payload, trigger);\n *\n * @param {object} scope Scope associated with your run\n * @param {string} scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param {string} scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param {string} scope.userKey Key associated with the user. Optional\n * @param {object} payload An HTTP task object that will be executed when the task is triggered\n * @param {string} [payload.method] Type of method to use with the HTTP request (i.e. 'GET', 'POST', 'PATCH', etc.)\n * @param {string} [payload.url] The url the HTTP request will be sent to; Will follow format <host>/app/<account>/<project>/url. host, account, and project are automatically entered\n * @param {object} [payload.body] The body of the HTTP request. This is optional\n * @param {object} [payload.headers] Headers to send along with the HTTP request. Write as key-value pairs like you would with fetch. This is optional\n *\n * @param {object} trigger One of three types of objects that determine when to run the task\n *\n * trigger option 1, Cron Object: Specifies a task that will execute once a set amount of time passes. This is the ONLY trigger that can be repeated\n * @param {string} [trigger.value] Cron order for the task. Should include only time specifications (i.e. '0 7 * * * ?' => trigger at 7am UTC everyday) https://en.wikipedia.org/wiki/Cron\n * @param {string} [trigger.objectType] Specifies object being used. Should be a constant value of 'cron'\n *\n * trigger option 2, Offset Object: Specifies a task that will execute ONCE after the specified offset time has passed\n * @param {number} [trigger.minutes] Number of minutes until the task triggers\n * @param {number} [trigger.hours] Number of hours until the task triggers\n * @param {number} [trigger.days] Number of days until the task triggers\n * @param {string} [trigger.objectType] Specifies object being used. Should be a constant value of 'offset'\n *\n * trigger option 3, Date Object: Specifies a singular date for the task to be carried out; will execute ONCE\n * @param {string} [trigger.value] A string in ISO-8601 date-time format (i.e. 2023-11-05T08:15:30-04:00 => November 5, 2023, 8:15:30 am, US EDT)\n * @param {string} [trigger.objectType] Specifies object being used. Should be a constant value of 'date'\n *\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @param {string} [optionals.retryPolicy] Specifies what to do should the task fail; see RETRY_POLICY\n * @param {string} [optionals.failSafeTermination] The ISO-8601 date-time when the task will be deleted regardless of any tiggers; defaults to null\n * @param {number} [optionals.ttlSeconds] Max life expectancy of the task; used to determine if retrying the task is necessary\n * @returns {taskObject} Returns a promise that resolves to the task object including the taskKey\n */\nexport async function create(\n scope: { userKey?: string } & GenericScope,\n name: string,\n payload: {\n method: string;\n url: string;\n body?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n },\n trigger: Record<string, unknown>,\n optionals: {\n retryPolicy?: keyof typeof RETRY_POLICY;\n failSafeTermination?: number;\n ttlSeconds?: number;\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n retryPolicy,\n failSafeTermination,\n ttlSeconds,\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(\n '/task',\n {\n body: {\n payload: { objectType: 'http', ...payload },\n trigger,\n retryPolicy,\n failSafeTermination,\n ttlSeconds,\n scope,\n name,\n },\n ...routingOptions,\n }\n )\n .then(({ body }) => body);\n}\n\n/**\n * Deletes a task (changes status to cancelled); requires support level authentication\n * Sends a 204 on successful deletion\n * Base URL: DELETE `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/{taskKey}`\n *\n * @memberof taskAdapter\n * @example\n *\n * epicenter.taskAdapter.destroy(taskKey);\n *\n * @param {string} taskKey Unique key associated with a task\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @returns {undefined}\n */\nexport async function destroy(taskKey: string, optionals: RoutingOptions = {}):Promise<void> {\n return await new Router()\n .delete(`/task/${taskKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Gets a task by taskKey; requires support level authentication\n * Base URL: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/{taskKey}`\n *\n * @memberof taskAdapter\n * @example\n *\n * epicenter.taskAdapter.get(taskKey);\n *\n * @param {string} taskKey Unique key associated with a task\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @returns {taskObject} Returns a promise that resolves to the task object including the taskKey\n */\nexport async function get(taskKey: string, optionals: RoutingOptions = {}): Promise<Record<string, unknown>> {\n return await new Router()\n .get(`/task/${taskKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Gets a the history (100 most recent times it has triggered) of a task by taskKey; requires support level authentication\n * Base URL: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/history/{taskKey}`\n *\n * @memberof taskAdapter\n * @example\n *\n * epicenter.taskAdapter.getHistory(taskKey);\n *\n * @param {string} taskKey Unique key associated with a task\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @returns {taskObject} Returns a promise that resolves to the task object including the taskKey\n */\nexport async function getHistory(\n taskKey: string,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n return await new Router()\n .get(`/task/history/${taskKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * TODO: fix this; this call seems to be paginated, but isn't somehow?\n *\n * Gets most recent 100 tasks related to the selected scope; requires support level authentication\n * Base URL: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/in/{scopeBoundary}/{scopeKey}`\n * Base URL with userKey: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/in/{scopeBoundary}/{scopeKey}/{userKey}`\n * Will retrieve all tasks that were CREATED in the specified scope. If something was created with episode scope, it will not be retrievable through group scoping\n * @memberof taskAdapter\n * @example\n *\n * const scope = {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: session.groupKey,\n * };\n * epicenter.taskAdapter.getTaskIn(scope);\n *\n * @param {object} scope Scope associated with your run\n * @param {string} scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param {string} scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @param {string} [optionals.userKey] Key associated with the user; Will retrieve tasks in the scope that were made by the specified user\n * @returns {taskObject} Returns a promise that resolves to the task object including the taskKey\n */\nexport async function getTaskIn(\n scope: { userKey?: string } & GenericScope,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n return await new Router()\n .get(\n `/task/in/${scopeBoundary}/${scopeKey}${\n userKey ? `/${userKey}` : ''\n }`,\n optionals\n )\n .then(({ body }) => body);\n}\n","import type { GenericScope, GenericSearchOptions, Permit } from '../utils/constants';\nimport type { RoutingOptions, Page } from '../utils/router';\n\nimport Router from '../utils/router';\n\ninterface ChatMessage {\n senderKey: string,\n receiverKey: string,\n created: string,\n id: string,\n message: string,\n}\n\ninterface Chat {\n permit: Permit,\n chatKey: string,\n messages: ChatMessage[],\n room: string,\n scope: GenericScope,\n}\n\n/**\n * Updates the permissions of a chat\n * @param chatKey Key associated with the chat\n * @param permit Permit object with the updated permissions\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns the newly updated chat\n */\nexport async function updatePermit(\n chatKey: string,\n permit: Permit,\n optionals: RoutingOptions = {}\n): Promise<Chat> {\n return new Router()\n .patch(`/chat/${chatKey}`, {\n ...optionals,\n body: { permit },\n }).then(({ body }) => body);\n}\n\n/**\n * Creates a chat\n * @example\n * import { chatAdapter, SCOPE_BOUNDARY, ROLE } from 'epicenter-libs';\n * chatAdapter.create(\n * 'my-chat-room',\n * { scopeBoundary: SCOPE_BOUNDARY.GROUP, scopeKey: '00000165ad4e6a3cd22b993340b963820239' },\n * { readLock: ROLE.PARTICIPANT, writeLock: ROLE.PARTICIPANT }\n * );\n * @param room Name of the chat\n * @param scope Scope of the chat; will not accept user scope\n * @param permit Permissions for the chat\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns The chat created\n */\nexport async function create(\n room: string,\n scope: GenericScope,\n permit: Permit,\n optionals: RoutingOptions = {}\n): Promise<Chat> {\n return new Router()\n .post('/chat', {\n body: {\n scope: {\n scopeBoundary: scope.scopeBoundary,\n scopeKey: scope.scopeKey,\n },\n permit,\n room,\n },\n ...optionals,\n }).then(({ body }) => body);\n}\n\n\n/**\n * Gets a chat\n * @example\n * epicenter.chatAdapter.get('00000165ad4e6a3cd22b993340b963820239');\n * @param chatKey Key of the associated chat\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns The chat corresponding with the provided key\n */\nexport async function get(\n chatKey: string,\n optionals: RoutingOptions = {}\n): Promise<Chat> {\n return new Router()\n .get(`/chat/${chatKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Open search for chats, returns a page\n * @example\n * epicenter.chatAdapter.query({\n * filter: [\n * 'room|=my-chat-room|my-other-chat|room-three', // looks for any rooms with the names provided\n * 'scopeBoundary=GROUP', // keeps the search within the group scope\n * // 'scopeKey=00000165ad4e6a3cd22b993340b963820239', // used in conjunction with the scopeBoundary\n * // 'chatKey=0000017dd3bf540e5ada5b1e058f08f20461', // searches for a specific chat\n * // 'accountShortName=acme', // specifies the account, typically unnecessary\n * // 'projectShortName=simulations', // specifies the project, typically unnecessary\n * // 'groupName=my-group-name', // search based on group name\n * // 'episodeName=my-episode-name', // search based on episode name\n * 'created>=2022-01-03T20:30:53.054Z', // looks for any chats created after Jan 3rd 2022\n * ],\n * sort: ['+chat.created'], // sort all findings by the 'created' field (ascending)\n * first: 3, // page should start with the 4th item found (defaults to 0)\n * max: 10, // page should only include the first 10 items\n * });\n * @param searchOptions Search options -- for more on Epicenter search options go [here](NOOP link)\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns A page for the list of chats found\n */\nexport async function query(\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Page<Chat>> {\n const { filter = [], sort = [], first = 0, max } = searchOptions;\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max,\n };\n return await new Router()\n .withSearchParams(searchParams)\n .get('/chat/search', {\n paginated: true,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Sends a message to a chat\n * @example\n * epicenter.chatAdapter.sendMessage('0000017dd3bf540e5ada5b1e058f08f20461', 'hello');\n * epicenter.chatAdapter.sendMessage('0000017dd3bf540e5ada5b1e058f08f20461', 'hello, privately', { userKey: '000001796733eef0842f4d6d960997018a33' });\n * @param chatKey Key associated with the chat\n * @param message Message text to send\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.userKey] Key of the user to send the message to. If omitted, will send as a public message\n * @returns The chat message created\n */\nexport async function sendMessage(\n chatKey: string,\n message: string,\n optionals: { userKey?: string } & RoutingOptions = {}\n): Promise<ChatMessage> {\n const { userKey, ...routingOptions } = optionals;\n const uriComponent = userKey ? `/${userKey}` : '';\n return new Router()\n .put(`/chat/message/${chatKey}${uriComponent}`, {\n body: { message },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n/**\n * Retrieves messages from for a given chat\n * @example\n * // gets the chat message with id: 5\n * epicenter.chatAdapter.getMessages('0000017dd3bf540e5ada5b1e058f08f20461', { horizon: 5, maxRecords: 1 });\n * // gets the 10 chat messages starting from id 5 (inclusive)\n * epicenter.chatAdapter.getMessages('0000017dd3bf540e5ada5b1e058f08f20461', { horizon: 5, maxRecords: 10 });\n * @param chatKey Key associated with the chat\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.maxRecords] Maximum number of messages to get\n * @param [optionals.horizon] The message ID from which to start with; works backwards so if `maxRecords=20` and `horizon=50`, it will get the 20 messages starting from message ID 50, working backwards (50, 49, 48..., etc.). If this value is omitted the platform assumes it is the most recent message in the chat\n * @returns The list chat messages requested\n */\nexport async function getMessages(\n chatKey: string,\n optionals: {\n maxRecords?: number,\n horizon?: number,\n } & RoutingOptions = {}\n): Promise<ChatMessage[]> {\n const { maxRecords, horizon, ...routingOptions } = optionals;\n return new Router()\n .withSearchParams({ maxRecords, horizon })\n .get(`/chat/message/${chatKey}`, routingOptions)\n .then(({ body }) => body);\n}\n","import type { RoutingOptions } from '../utils/router';\n\nimport {\n Router,\n RITUAL,\n} from 'utils';\n\ninterface Consensus {\n instantiated: boolean,\n triggered: boolean,\n closed: boolean,\n transparent: boolean,\n worldKey: string,\n name: string,\n stage: string,\n ttlSeconds: number,\n secondsLeft: number,\n expectedRoles: Record<string, unknown>,\n impendingRoles: Record<string, unknown>,\n arrivedRoles: Record<string, unknown>,\n allowChannel: boolean,\n}\n\n/**\n * Creates a new consensus barrier\n * @example\n * import { consensusAdapter } from 'epicenter-libs';\n * consensusAdapter.create(\n * 00000173078afb05b4ae4c726637167a1a9e,\n * 'SUBMISSIONS',\n * 'ROUND1',\n * {\n * ROLE1: 1,\n * ROLE2: 1,\n * ROLE3: 2,\n * },\n * {\n * ROLE1: [{ name: 'step', arguments: [] }],\n * ROLE2: [{ name: 'step', arguments: [] }],\n * ROLE3: [{ name: 'step', arguments: [] }],\n * }\n * );\n * @param worldKey World key for the world you are making a consensus barrier for\n * @param name Unique string to name a set of consensus barriers\n * @param stage Unique string to name one stage of the set of consensus barriers\n * @param expectedRoles Map where the keys are the names of each role participating and the number of users expected to submit consensus actions for each role\n * @param defaultActions Map defining which actions to take if the role specified in the key does not submit\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.ttlSeconds] How long the consensus barrier lasts for.\n * @param [optionals.transparent] If the barrier has `transparent: false`, then only one of the default actions will be sent. If it has `transparent: true` then they are all sent.\n * @param [optionals.allowChannel] Opt into push notifications for this resource. Applicable to projects with phylogeny >= SILENT\n * @returns promise that resolves to the newly created consensus barrier\n */\nexport async function create(\n worldKey: string,\n name: string,\n stage: string,\n expectedRoles: Record<string, number>,\n defaultActions: Record<string, Record<string, number>[]>,\n optionals: {\n ttlSeconds?: number,\n transparent?: boolean,\n allowChannel?: boolean,\n } & RoutingOptions = {}\n): Promise<Consensus> {\n const {\n ttlSeconds,\n transparent = false,\n allowChannel,\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .post(`/consensus/${worldKey}/${name}/${stage}`, {\n body: {\n expectedRoles,\n ttlSeconds,\n transparent,\n actions: defaultActions,\n allowChannel,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Load one specific consensus barrier by specifying stage\n *\n * @example\n * consensusAdapter.load(00000173078afb05b4ae4c726637167a1a9e, 'SUBMISSIONS', 'ROUND1');\n *\n * @param worldKey World key for the world you are loading a consensus barrier for\n * @param name Unique string that names a set of consensus barriers\n * @param stage Unique string to specify which specific barrier to load\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that returns a 204 if successful\n */\nexport async function load(\n worldKey: string,\n name: string,\n stage: string,\n optionals: RoutingOptions = {}\n): Promise<Consensus> {\n return await new Router()\n .get(`/consensus/${worldKey}/${name}/${stage}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * List all consensus barriers sharing the same name\n *\n * @example\n * consensusAdapter.list(00000173078afb05b4ae4c726637167a1a9e, 'SUBMISSIONS');\n *\n * @param worldKey World key for the world you are loading consensus barriers for\n * @param name Unique string that specifies which set of consensus barriers to retrieve\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that returns a 204 if successful\n */\nexport async function list(\n worldKey: string,\n name: string,\n optionals: RoutingOptions = {}\n): Promise<Consensus> {\n return await new Router()\n .get(`/consensus/${worldKey}/${name}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Facilitator only. Marks current consensus barrier as complete. Closing the barrier will send default actions for anyone who has not arrived. If the barrier is opaque, then only one of the default actions will be sent, and if it's transparent then they are all sent\n *\n * @example\n * consensusAdapter.forceClose(00000173078afb05b4ae4c726637167a1a9e, 'SUBMISSIONS', 'ROUND1');\n *\n * @param worldKey World key for the world you are making a consensus barrier for\n * @param name Unique string that names a set of consensus barriers\n * @param stage Unique string that specifies which stage of the set of consensus barriers to close\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that returns a 204 if successful\n */\nexport async function forceClose(\n worldKey: string,\n name: string,\n stage: string,\n optionals: {\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<unknown> {\n const {\n ritual,\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .post(`/consensus/close/${worldKey}/${name}/${stage}`, {\n body: {\n ritual,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Updates the default actions defined in .create. A user can only update their own default actions, and this call will only work for a barrier that has `transparent: true`\n *\n * @example\n * import { consensusAdapter } from 'epicenter-libs';\n * consensusAdapter.updateDefaults(\n * 00000173078afb05b4ae4c726637167a1a9e,\n * 'SUBMISSIONS',\n * 'ROUND1',\n * [{name: \"message\", value: \"DEFAULT MESSAGE 2\", objectType: \"set\"}]}\n *\n * @param worldKey World key for the world you are making a consensus barrier for\n * @param name Unique string to name a set of consensus barriers\n * @param stage Unique string to name one stage of the set of consensus barriers\n * @param actions List of objects describing the default actions to update for the current user\n * @returns promise that resolves to the newly created consensus barrier\n*/\nexport async function updateDefaults(\n worldKey: string,\n name: string,\n stage: string,\n actions: Record<string, Record<string, number>[]>,\n optionals: RoutingOptions = {}\n): Promise<Consensus> {\n const {\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .patch(`/consensus/actions/${worldKey}/${name}/${stage}`, {\n body: {\n actions,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Submits actions for your turn and marks you as having `submitted`. If `executeActionsImmediately` was set to `true` while creating the consensus barrier, the actions will be immediately sent to the model.\n * Note that you can still call operations from the runAdapter directly, but will bypass the consensus requirements.\n *\n * @example\n * import { consensusAdapter } from 'epicenter-libs';\n * consensusAdapter.submitActions(\n * 00000173078afb05b4ae4c726637167a1a9e,\n * 'SUBMISSIONS',\n * 'ROUND1',\n * [{ name: 'step', arguments: [] }]\n * { message: 'Student side submission!' },\n * );\n *\n * @param worldKey World key for the world you are making a consensus barrier for\n * @param name Unique string to name a set of consensus barriers\n * @param stage Unique string to name one stage of the set of consensus barriers\n * @param actions List of objects describing the actions to send\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.message] Message that is stored in the barrier arrival entity; opportunity to note a description regarding this submission\n * @returns {Promise} Note: the response consensus object will have `triggered: true` for the final user that submits and triggers the barrier. triggered is a virtual field, not stored in the database as part of the barrier entity, so it only appears in the response for the final user submitting\n */\nexport async function submitActions(\n worldKey: string,\n name: string,\n stage: string,\n actions: {\n name: string,\n arguments: string|number|Record<string, unknown>[],\n }[],\n optionals: {\n message?: string,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<unknown> {\n const {\n message,\n ritual,\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/consensus/publish/${worldKey}/${name}/${stage}`, {\n body: {\n ritual,\n actions,\n message,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Deletes the targeted barrier, which allows users to create a new barrier with the same name and stage\n *\n * @example\n * import { consensusAdapter } from 'epicenter-libs';\n * consensusAdapter.deleteBarrier(\n * 00000173078afb05b4ae4c726637167a1a9e,\n * 'SUBMISSIONS',\n * 'ROUND1',\n * );\n *\n * @param worldKey World key for the world you are targeting\n * @param name Unique string that names a set of consensus barriers\n * @param stage Unique string to specify which specific barrier to undo your submission for\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns {Promise}\n */\nexport async function deleteBarrier(\n worldKey: string,\n name: string,\n stage: string,\n optionals: RoutingOptions = {}\n): Promise<Consensus> {\n const {\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .delete(`/consensus/${worldKey}/${name}/${stage}`, {\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Deletes all barriers under the same name, which allows users to create new barriers with the same name and stage\n *\n * @example\n * import { consensusAdapter } from 'epicenter-libs';\n * consensusAdapter.deleteAll(\n * 00000173078afb05b4ae4c726637167a1a9e,\n * 'SUBMISSIONS',\n * );\n *\n * @param worldKey World key for the world you are targeting\n * @param name Unique string that names a set of consensus barriers\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns {Promise}\n */\nexport async function deleteAll(\n worldKey: string,\n name: string,\n optionals: RoutingOptions = {}\n): Promise<Consensus> {\n const {\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .delete(`/consensus/${worldKey}/${name}`, {\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Removes the currently logged in user from the list of users that have arrived at this barrier, thus allowing the user to redo their submission.\n *\n * @example\n * import { consensusAdapter } from 'epicenter-libs';\n * consensusAdapter.undoSubmit(\n * 00000173078afb05b4ae4c726637167a1a9e,\n * 'SUBMISSIONS',\n * 'ROUND1',\n * );\n *\n * @param worldKey World key for the world you are targeting\n * @param name Unique string that names a set of consensus barriers\n * @param stage Unique string to specify which specific barrier to undo your submission for\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns {Promise}\n */\nexport async function undoSubmit(\n worldKey: string,\n name: string,\n stage: string,\n optionals: RoutingOptions = {}\n): Promise<Consensus> {\n const {\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .delete(`/consensus/arrival/${worldKey}/${name}/${stage}`, {\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Facilitator only; artificial triggering of the arrival of a participant to the barrier. Useful for testing or for missing participants\n *\n *\n * @example\n * import { consensusAdapter } from 'epicenter-libs';\n * consensusAdapter.triggerFor(\n * 00000173078afb05b4ae4c726637167a1a9e,\n * 'SUBMISSIONS',\n * 'ROUND1',\n * userKey: 0000017cb60ad697e109dcb11cdd4cfcdd1d,\n * { message: \"Facilitator Triggered this submission!\" },\n *\n * @param worldKey World key for the world you are targeting\n * @param name Unique string that names this set of consensus barriers\n * @param stage Unique string that names the stage of targeted barrier\n * @param userKey userKey of the user the facilitator is triggering for\n * @param actions List of objects describing the default actions to update for the current user\n * @param [optionals.message] message\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns {Promise} ???\n */\nexport async function triggerFor(\n worldKey: string,\n name: string,\n stage: string,\n userKey: string,\n actions: {\n name: string,\n arguments: string|number|Record<string, unknown>[],\n }[],\n optionals: {\n message?: string,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<unknown> {\n const {\n ritual,\n message,\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/consensus/trigger/${worldKey}/${name}/${stage}`, {\n\n body: {\n ritual,\n userKey,\n message,\n actions,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}","import type { GenericSearchOptions } from '../utils/constants';\nimport type { RoutingOptions } from '../utils/router';\nimport { Router } from '../utils';\n/**\n * Adds somebody to an account; somebody is a person who is not a user, but whose information is used in a simulation; requires support level authentication\n *\n * Base URL: POST `https://forio.com/api/v3/{accountShortName}/{projectShortName}/somebody`\n *\n * @example\n * const email = 'test@test.com';\n * const optionals = {\n * givenName: 'Person',\n * familyName: 'Family',\n * acountId: '12345',\n * }\n *\n * epicenter.somebodyAdapter.create(email, optionals);\n *\n * @param {string} email Email of the person being added\n\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.givenName] Given name of new user\n * @param {string} [optionals.familyName] Family name of new user\n * @param {string} [optionals.accountId] Account Id of new user\n * @returns {somebodyObject} Returns a promise that resolves to the newly created somebody\n */\nexport async function create(\n email: string,\n optionals: {\n givenName?: string;\n familyName?: string;\n accountId?: string;\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n givenName,\n familyName,\n accountId,\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(\n '/somebody',\n {\n body: {\n email,\n givenName,\n familyName,\n accountId,\n },\n ...routingOptions,\n }\n )\n .then(({ body }) => body);\n}\n\n/**\n * Open search for somebody, returns a page\n * \n * Base URL: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/somebody/search`\n * \n * @example\n * epicenter.somebodyAdapter.query({\n * filter: [\n * 'email|=email1@email.com|email2@email.com', // searches for a specific email(s)\n * // 'givenName=Person', // searches for somebody by given name (first name)\n * // 'familyName=PersonLastName', // searches for somebody by family name (last name)\n * // 'accountId=0000017dd3bf540e5ada5b1e058f08f20461', // searches for a specific accountId\n * // 'accountShortName=acme', // specifies the account, typically unnecessary\n * // 'projectShortName=simulations', // specifies the project, typically unnecessary\n\n * ],\n * sort: ['+somebody.email'], // sort all findings by the 'email' field (ascending)\n * first: 3, // page should start with the 4th item found (defaults to 0)\n * max: 10, // page should only include the first 10 items\n * count: false, // If set to true this will return the number of items that match the search\n * });\n * @param searchOptions Search options -- for more on Epicenter search options go [here](NOOP link)\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns A page for the list of sombodies found\n */\nexport async function query(\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const { filter = [], sort = [], first = 0, max, count = false } = searchOptions;\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max, count,\n };\n return await new Router()\n .withSearchParams(searchParams)\n .get('/somebody/search', {\n paginated: true,\n ...optionals,\n })\n .then(({ body }) => body);\n}","import type { GenericScope } from '../utils/constants';\nimport type { RoutingOptions } from '../utils/router';\nimport { Router } from '../utils';\n\n/**\n * Creates a matchmaker list; Requires facilitator level authentication\n * @param name The name for the matchmaker list\n * @param partners The number of partners each participant should be assigned\n * @param scope Scope associated with list\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @returns {matchmakerListObject}\n */\nexport async function create(\n name: string,\n partners: number,\n scope: GenericScope,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const { accountShortName, projectShortName, server } = optionals;\n\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .post(`/matchmaker/udome/${name}`, {\n body: {\n scope,\n partners,\n },\n })\n .then(({ body }) => body);\n}\n\n/**\n * Changes the opened/closed status of a matchmaker list; Requires facilitator level authentication\n * @param udomeKey The unique key for the targeted matchmaker list\n * @param closed Whether the matchmaker list is open or closed\n * @returns {matchmakerListObject}\n */\nexport async function edit(\n udomeKey: string,\n closed: boolean,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const { accountShortName, projectShortName, server } = optionals;\n\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .put(`/matchmaker/udome/${udomeKey}`, {\n body: {\n closed,\n },\n })\n .then(({ body }) => body);\n}\n\n/**\n * Adds the user making the request to the matchmaker list provided that it is open; requires partipant authentication\n * @param udomeKey The unique key for the targeted matchmaker list\n * @returns {matchmakerListObject}\n */\nexport async function addUser(\n udomeKey: string,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const { accountShortName, projectShortName, server } = optionals;\n\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .patch('/matchmaker/udome', {\n body: {\n udomeKey,\n },\n })\n .then(({ body }) => body);\n}\n\nconst NOT_FOUND = 404;\n/**\n * Gets a matchmakerList based on a udomeKey; Requires participant level authentication\n * @param udomeKey The unique key for the targeted matchmaker list\n * @returns {matchmakerListObject}\n */\nexport async function get(\n udomeKey: string,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const { accountShortName, projectShortName, server } = optionals;\n\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .get(`/matchmaker/udome/${udomeKey}`)\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n })\n .then(({ body }) => body);\n}\n\n/**\n * Gets a matchmakerList based on name and scope; Requires participant level authentication\n * @param udomeKey The unique key for the targeted matchmaker list\n * @param scope Scope associated with list\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @returns {matchmakerListObject}\n */\nexport async function byName(\n name: string,\n scope: GenericScope,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const { accountShortName, projectShortName, server } = optionals;\n const { scopeBoundary, scopeKey } = scope;\n\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .get(`/matchmaker/udome/${scopeBoundary}/${scopeKey}/${name}`)\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n })\n .then(({ body }) => body);\n}\n","import type { RoutingOptions } from '../utils/router';\nimport {\n Router,\n ROLE,\n Fault,\n} from 'utils';\nimport type { GenericScope } from '../utils/constants';\nimport * as videoAdapter from './video';\n\nenum RECORDING_TYPES {\n 'CLOUD',\n}\n\nenum PRIVACY {\n 'PRIVATE',\n}\n\nenum STREAM_TYPES {\n 'HLS',\n}\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\nconst randRange = (min: number, max: number) => {\n return min + Math.random() * (max - min);\n};\n\n// eslint-disable-next-line no-magic-numbers\nconst RETRY_RANGES = [[6_000, 10_000], [11_000, 20_000], [30_000, 45_000]];\n\nconst RATE_LIMIT_REACHED = 429;\nasync function handleRateLimit(requestFunction: () => Promise<{status: number}>, retryNumber = 0) : Promise<Record<string, unknown>> {\n let response;\n try {\n response = await requestFunction(); \n } catch (error) {\n if (error instanceof Fault && error.status === RATE_LIMIT_REACHED && retryNumber <= RETRY_RANGES.length) {\n const [min, max] = RETRY_RANGES[retryNumber];\n await sleep(randRange(min, max));\n response = await handleRateLimit(requestFunction, retryNumber + 1);\n } else {\n throw error;\n }\n }\n return response;\n}\n\n/**\n * Gets the daily configuration for the epicenter account. Requires Support auth\n * \n * Base URL: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/daily/v1`\n * \n * @example\n * import { dailyAdapter } from 'epicenter-libs';\n * dailyAdapter.getConfig();\n * @returns promise that resolves to the daily object\n */\nexport async function getConfig(\n optionals: RoutingOptions = {}\n): Promise<number> {\n return await new Router()\n .get('/daily/v1', optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Creates a new daily meeting room\n *\n * Base URL: POST `https://forio.com/api/v3/{accountShortName}/{projectShortName}/daily/v1/room`\n *\n * @example\n * import { dailyAdapter, SCOPE_BOUNDARY } from 'epicenter-libs';\n * dailyAdapter.createRoom({\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: '0000017dd3bf540e5ada5b1e058f08f20461'\n * });\n *\n * @param scope Scope associated with your room\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [scope.userKey] Optional key to scope the room to a user\n * @param {object} [optionals={}] Optional parameters\n * @param [optionals.readLock] Role allowed to read\n * @param [optionals.writeLock] Role allowed to write\n * @param [optionals.ttlSeconds] Life span of any recording made (how long before it is deleted); defaults to 604,800 (1 week), max of 31,536,000 (1 year)\n * @param [optionals.privacy] Whether the room is private or not; currently can only be set to PRIVATE\n * @param [optionals.exp] When the room will be deleted in epoch seconds. Defaults to 24 hours. Max of 24 hours.\n * @param [optionals.enable_recording] The type of Daily recording method to use. Only CLOUD is currently permitted.\n * @param [optionals.streaming_endpoints] Details for daily streaming features.\n * @param [optionals.streaming_endpoints.name] name of the stream\n * @param [optionals.streaming_endpoints.type] type of the stream; only HLS is currently permitted\n * @param [optionals.streaming_endpoints.hls_config] options for hls stream\n * @param [optionals.streaming_endpoints.hls_config.save_hls_recording] whether or not to record the hls stream\n * @param [optionals.streaming_endpoints.hls_config.storage] storage details for hls stream\n * @param [optionals.streaming_endpoints.hls_config.path] s3 storage path\n * @param [optionals.streaming_endpoints.hls_config.bucket_region] s3 bucket region\n * @param [optionals.streaming_endpoints.hls_config.assume_role_arn] s3 role ARN for permission to alter S3 resources\n * @param [optionals.streaming_endpoints.hls_config.bucket_name] s3 bucket name\n * @returns {roomDetailsObject} Returns a promise that resolves to the newly created room details\n */\nexport async function createRoom(\n scope: { userKey?: string } & GenericScope,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n privacy?: keyof typeof PRIVACY,\n ttlSeconds?: number,\n exp?: number,\n enable_recording?: keyof typeof RECORDING_TYPES,\n disableRateLimitHandling?: boolean,\n streaming_endpoints?: [{\n name: string,\n type: keyof typeof STREAM_TYPES,\n hls_config: {\n storage: {\n path: string,\n bucket_region?: string,\n assume_role_arn?: string,\n bucket_name?: string,\n },\n save_hls_recording?: boolean,\n },\n }],\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n readLock,\n writeLock,\n ttlSeconds,\n privacy,\n exp,\n enable_recording,\n streaming_endpoints,\n disableRateLimitHandling,\n ...routingOptions\n } = optionals;\n const { PARTICIPANT } = ROLE;\n const callAPI = async() => {\n return await new Router()\n .post(\n '/daily/v1/room',\n {\n body: {\n epicenter: {\n ttlSeconds,\n scope,\n permit: {\n readLock: readLock || PARTICIPANT,\n writeLock: writeLock || PARTICIPANT,\n },\n },\n properties: {\n exp,\n enable_recording,\n streaming_endpoints,\n },\n privacy,\n },\n ...routingOptions,\n }\n )\n .then(({ body }) => body);\n };\n return handleRateLimit(callAPI, disableRateLimitHandling ? RETRY_RANGES.length + 1 : 0);\n}\n\n/**\n * Creates a token for a daily meeting room\n *\n * Base URL: POST `https://forio.com/api/v3/{accountShortName}/{projectShortName}/daily/v1/meetingToken`\n *\n * @example\n * import { dailyAdapter } from 'epicenter-libs';\n * dailyAdapter.createToken('my-room-name');\n *\n * @param room_name Name of the room to create a token for\n * @param {object} [optionals={}] Optional parameters\n * @param [optionals.start_video_off] Whether the user should have their video off upon joining the meeting; defaults to true.\n * @param [optionals.is_owner] Whether the user has owner permissions; owner permissions are required to start a stream (not a recording); defaults to false\n * @param [optionals.user_name] Username to display in daily's system. This is relevant if the daily call is open in a separate window\n * @param [optionals.close_tab_on_exit] Whether to close the tab on the end of the call. This is relevant if the daily call is open in a separate window\n * @param [optionals.exp] When the token will be deleted in epoch seconds. Defaults to 24 hours. Max of 24 hours.\n * @param [optionals.enable_recording] The type of Daily recording method to permit. Only CLOUD is currently permitted.\n * @returns {tokenDetailsObject} Returns a promise that resolves to the newly created token details\n */\nexport async function createToken(\n room_name: string,\n optionals: {\n start_video_off?: boolean,\n is_owner?: boolean,\n user_name?: string,\n close_tab_on_exit?: boolean,\n exp?: number,\n enable_recording?: keyof typeof RECORDING_TYPES,\n disableRateLimitHandling?: boolean,\n selfSign?: boolean,\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n start_video_off,\n is_owner,\n user_name,\n close_tab_on_exit,\n exp,\n enable_recording,\n disableRateLimitHandling,\n selfSign = true,\n ...routingOptions\n } = optionals;\n const callAPI = async() => {\n return await new Router()\n .withSearchParams({ selfSign })\n .post(\n '/daily/v1/meetingToken',\n {\n body: {\n properties: {\n room_name,\n start_video_off,\n is_owner,\n user_name,\n close_tab_on_exit,\n exp,\n enable_recording,\n },\n },\n ...routingOptions,\n }\n )\n .then(({ body }) => body);\n };\n return handleRateLimit(callAPI, disableRateLimitHandling ? RETRY_RANGES.length + 1 : 0);\n}\n\n/**\n * Convenience function for retrieving the most recent recording for a Daily room\n * \n * @example\n * import { dailyAdapter } from 'epicenter-libs';\n * dailyAdapter.getVideoByRecordingId('recording_instance_id');\n * @returns promise that resolves to a url if a video exists or null if it does not\n */\nexport async function getVideoByRecordingId(\n room_name: string,\n recordingId: string,\n scope: { userKey?: string } & GenericScope,\n optionals: RoutingOptions = {}\n): Promise<string | null> {\n const filePathInfo = await videoAdapter.getDirectoryURL({\n scope, \n affiliate: 'DAILY', \n family: room_name,\n ...optionals,\n });\n const filePaths = filePathInfo.contents;\n if (!filePaths?.length) return null;\n filePaths.sort((a, b) => Number(b.split('.')[0]) - Number(a.split('.')[0]));\n const filePath = filePaths.find((p) => p.includes(recordingId) && p.includes('.mp4'));\n if (!filePath) return null;\n return await videoAdapter.getURL(filePath, {\n scope,\n affiliate: 'DAILY',\n family: room_name,\n ...optionals,\n });\n}\n\n/**\n * Sets the daily family/room to a recording status of recorded; necessary to prevent videos from deleting automatically within 1 hour\n * \n * Base URL: DELETE `https://forio.com/api/v3/{accountShortName}/{projectShortName}/daily/v1/meetingToken/{room_name}`\n * \n * @example\n * import { dailyAdapter } from 'epicenter-libs';\n * dailyAdapter.updateRecordingStatus(room_name);\n */\nexport async function updateRecordingStatus(room_name : string,\n optionals: RoutingOptions = {}\n): Promise<number> {\n return await new Router()\n .delete(`/daily/v1/meetingToken/${room_name}`, optionals)\n .then(({ body }) => body);\n}","import type { Page, RoutingOptions } from '../utils/router';\nimport type { GenericScope } from '../utils/constants';\nimport type { User } from './user';\n\nimport {\n Router,\n identification,\n} from '../utils';\nimport { UserSession } from 'epicenter';\n\n\ninterface Item {\n label: string,\n value: string | null,\n}\n\ninterface Wallet {\n items: Item[],\n user: User,\n walletKey: string,\n scope: { userKey: string } & GenericScope,\n}\n\n/**\n * Updates a wallet\n * @example\n * // Add a user's phone number to their wallet\n * epicenter.walletAdapter.update(scope, [{ label: 'phone', value: '555-555-5555' }])\n * @param scope Scope attached to the wallet; userKey is required\n * @param scope.scopeBoundary Can be a couple things, commonly group, project, episode, or world\n * @param scope.scopeKey Key of the resource defined by the scope boundary\n * @param scope.userKey User key for the user creating the entry, if omitted will use the one in current session\n * @param items List of items to update the wallet with\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the updated wallet\n */\nexport async function update(\n scope: { userKey: string | undefined } & GenericScope,\n items: Item[],\n optionals: RoutingOptions = {},\n): Promise<Wallet> {\n const session = identification.session as UserSession;\n scope.userKey ??= session?.userKey;\n return await new Router()\n .post('/wallet', {\n body: {\n items,\n scope,\n },\n ...optionals,\n }).then(({ body }) => body);\n}\n\nconst NOT_FOUND = 404;\n/**\n * Gets a wallet\n * @example\n * // Get a user's wallet\n * const scope = { userKey, scopeBoundary: SCOPE_BOUNDARY.GROUP, scopeKey: groupKey };\n * epicenter.walletAdapter.get(scope)\n * @param scope Scope attached to the wallet; userKey is required\n * @param scope.scopeBoundary Can be a couple things, commonly group, project, episode, or world\n * @param scope.scopeKey Key of the resource defined by the scope boundary\n * @param scope.userKey User key for the user creating the entry, if omitted will use the one in current session\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the wallet\n */\nexport async function get(\n scope: { userKey: string } & GenericScope,\n optionals: RoutingOptions = {}\n): Promise<Wallet> {\n const { scopeBoundary, scopeKey } = scope;\n let { userKey } = scope;\n const session = identification.session as UserSession;\n userKey ??= session?.userKey;\n return await new Router()\n .get(`/wallet/${scopeBoundary}/${scopeKey}/${userKey}`, optionals)\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n }).then(({ body }) => body);\n}\n\n/**\n * Get all wallets under a certain scope\n * @example\n * // Get all wallets under a group\n * const scope = { scopeBoundary: SCOPE_BOUNDARY.GROUP, scopeKey: groupKey };\n * epicenter.walletAdapter.withScope(scope)\n * @param scope Scope attached to the wallets\n * @param scope.scopeBoundary Can be a couple things, commonly group, project, episode, or world\n * @param scope.scopeKey Key of the resource defined by the scope boundary\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a page of wallets\n */\nexport async function withScope(\n scope: GenericScope,\n optionals: {\n first?: number,\n max?: number,\n } & RoutingOptions = {}\n): Promise<Page<Wallet>> {\n const { scopeBoundary, scopeKey } = scope;\n const { first = 0, max, ...routingOptions } = optionals;\n\n return await new Router()\n .withSearchParams({ first, max })\n .get(`/wallet/with/${scopeBoundary}/${scopeKey}`, {\n paginated: true,\n ...routingOptions,\n })\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n }).then(({ body }) => body);\n}\n","import type { Callback, SubscriptionHandle, Message } from 'cometd';\nimport type { GenericScope } from '../utils/constants';\n\nimport { EpicenterError, SCOPE_BOUNDARY, PUSH_CATEGORY } from '../utils';\nimport cometdAdapter from './cometd';\n\ninterface ChannelScope extends GenericScope {\n pushCategory: string,\n}\n\nconst validateScope = (scope: ChannelScope) => {\n if (!scope) throw new EpicenterError('No scope found where one was required');\n const { scopeBoundary, scopeKey, pushCategory } = scope;\n if (!scopeBoundary) throw new EpicenterError('Missing scope component: scopeBoundary');\n if (!scopeKey) throw new EpicenterError('Missing scope component: scopeKey');\n if (!pushCategory) throw new EpicenterError('Missing scope component: pushCategory');\n if (!Object.prototype.hasOwnProperty.call(SCOPE_BOUNDARY, scopeBoundary)) throw new EpicenterError(`Invalid scope boundary: ${scopeBoundary}`);\n if (!Object.prototype.hasOwnProperty.call(PUSH_CATEGORY, pushCategory)) throw new EpicenterError(`Invalid push category: ${pushCategory}`);\n};\n\n/**\n * Used to subscribe to CometD channels. Pass in a channel scope to instantiate, if a subscription to that scope already exists it will use it.\n * */\nexport default class Channel {\n\n path: string;\n update: Callback | undefined;\n subscription: SubscriptionHandle | null = null;\n\n /**\n * Channel constructor\n * @param scope object with the scope boundary, scope key, and push category. Defines the namespace for the channel\n */\n constructor(scope: ChannelScope) {\n const { scopeBoundary, scopeKey, pushCategory } = scope;\n validateScope(scope);\n this.path = `/${scopeBoundary.toLowerCase()}/${scopeKey}/${pushCategory.toLowerCase()}`;\n if (cometdAdapter.subscriptions.has(this.path)) {\n this.subscription = cometdAdapter.subscriptions.get(this.path);\n }\n }\n\n publish(content: FIXME): Promise<Message | Message[]> {\n return cometdAdapter.publish(this, content);\n }\n\n /**\n * Subscribes to the CometD channel, attaching a handler for any channel updates. If a subscription already exists it will first unsubscribe, ensuring that only one subscription is ever attached to the channel.\n * @example\n * import { Channel, authAdapter, SCOPE_BOUNDARY, PUSH_CATEGORY } from 'epicenter-libs';\n * const session = authAdapter.getLocalSession();\n * const channel = new Channel({\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: session.groupKey,\n * pushCategory: PUSH_CATEGORY.CHAT,\n * }).subscribe((data) => {\n * console.log(data.content);\n * })\n * @param update function that is called whenever a channel update occurs.\n * @returns the subscription object returned by CometD after a sucessful subscribe.\n */\n async subscribe(\n update: (data: unknown) => unknown,\n options: { inert?: boolean } = {},\n ): Promise<SubscriptionHandle> {\n if (this.subscription) await cometdAdapter.remove(this.subscription);\n this.update = update;\n this.subscription = await cometdAdapter.add(this, update, options) as SubscriptionHandle;\n return this.subscription;\n }\n\n async unsubscribe(): Promise<void> {\n if (this.subscription) {\n await cometdAdapter.remove(this.subscription);\n this.subscription = null;\n }\n }\n}\n\n\n","import fetch from 'cross-fetch';\nimport config from './utils/config';\nimport { prefix } from './utils/helpers';\n\n\nexport const proxy = async(\n resource: string,\n options?: RequestInit,\n): Promise<Response> => {\n const { accountShortName, projectShortName, isLocal } = config;\n let path = prefix('/', resource);\n if (!isLocal()) path = `/proxy/${accountShortName}/${projectShortName}${path}`;\n return fetch(path, options);\n};","import 'regenerator-runtime/runtime';\n\n/* yes, this string template literal is weird;\n * it's cause rollup does not recogize __VERSION__ as an individual token otherwise */\nconst version = `Epicenter (v${'__VERSION__'}) for __BUILD__ | Build Date: __DATE__`;\n\nimport type { RetryFunction } from './utils/router';\nimport { authAdapter, cometdAdapter } from './adapters';\nimport { errorManager, identification, isBrowser, Fault, EpicenterError } from './utils';\nimport { Handler } from './utils/error-manager';\n\nconst UNAUTHORIZED = 401;\nconst FORBIDDEN = 403;\nexport const DEFAULT_ERROR_HANDLERS: Record<string, Handler> = {};\n\nDEFAULT_ERROR_HANDLERS.cometdReconnected = errorManager.registerHandler(\n (error) => error.code === 'COMETD_RECONNECTED',\n async(error: Fault) => {\n if (isBrowser()) {\n console.warn('Cometd Reconnected. If you wish to react to this reconnection, register an error handler with identifier: error.code === \"COMETD_RECONNECTED\".', error);\n }\n }\n);\n\nDEFAULT_ERROR_HANDLERS.cometdError = errorManager.registerHandler(\n (error) => error.status === FORBIDDEN && error.code === 'COMETD_ERROR',\n async<T>(error: Fault, retry: RetryFunction<T>) => {\n console.warn('Cometd error. Attempting to reconnect.', error);\n await cometdAdapter.disconnect();\n return await retry();\n }\n);\n\nDEFAULT_ERROR_HANDLERS.authExpired = errorManager.registerHandler(\n (error: Fault) => error.status === UNAUTHORIZED && error.code === 'AUTHENTICATION_EXPIRED',\n async(error: Fault) => {\n await authAdapter.removeLocalSession();\n if (isBrowser()) {\n // eslint-disable-next-line no-alert\n alert('Session token has expired, try logging in again.');\n }\n throw error;\n },\n);\n\nDEFAULT_ERROR_HANDLERS.authGroupExpired = errorManager.registerHandler(\n (error: Fault) => error.status === UNAUTHORIZED && error.code === 'AUTHENTICATION_GROUP_EXPIRED',\n async(error: Fault) => {\n if (isBrowser()) {\n // eslint-disable-next-line no-alert\n alert('This group has expired. Try logging into a different group');\n }\n throw error;\n },\n);\n\nDEFAULT_ERROR_HANDLERS.authInvalidated = errorManager.registerHandler(\n (error) => error.status === UNAUTHORIZED && error.code === 'AUTHENTICATION_INVALIDATED',\n async<T>(error: Fault, retry: RetryFunction<T>) => {\n try {\n const session = identification.session;\n if (session?.objectType === 'admin') {\n throw new EpicenterError('Unhandled error: admin session was somehow invalidated');\n }\n const groupKey = session?.groupKey ?? '';\n await authAdapter.regenerate(groupKey, { objectType: 'user', inert: true });\n return await retry();\n } catch (e) {\n await authAdapter.removeLocalSession();\n throw error;\n }\n }\n);\n\nObject.freeze(DEFAULT_ERROR_HANDLERS);\n\n/* Interfaces & Types */\nexport type { Session, UserSession, AdminSession } from './utils/identification';\nexport type { Group, Member } from './adapters/group';\nexport type { Vault } from './adapters/vault';\nexport type { GenericScope } from './utils/constants';\n\n/* Version */\nexport { version };\n\n/* Constants */\nexport {\n SCOPE_BOUNDARY,\n RITUAL,\n PUSH_CATEGORY,\n ROLE,\n} from './utils/constants';\n\n/* Auxilary Singletons/Classes */\nexport {\n config,\n errorManager,\n Router,\n Fault,\n} from './utils';\n\n/* Adapters */\nexport {\n accountAdapter,\n adminAdapter,\n assetAdapter,\n consensusAdapter,\n emailAdapter,\n authAdapter,\n chatAdapter,\n episodeAdapter,\n groupAdapter,\n leaderboardAdapter,\n presenceAdapter,\n projectAdapter,\n recaptchaAdapter,\n runAdapter,\n taskAdapter,\n timeAdapter,\n userAdapter,\n vaultAdapter,\n videoAdapter,\n vonageAdapter,\n worldAdapter,\n somebodyAdapter,\n dailyAdapter,\n matchmakerAdapter,\n walletAdapter,\n Channel,\n} from './adapters';\n\n/* APIs */\nexport {\n videoAPI,\n vonageAPI,\n} from './apis';\n\n/* Utility Functions */\nexport * as utils from './utilities';\n"],"names":["undefined","this","EpicenterError","Error","constructor","message","code","Fault","body","response","information","cause","status","rest","Result","headers","getExpiration","vEnd","Number","Infinity","String","Date","toUTCString","getItem","key","decodeURIComponent","document","cookie","replace","RegExp","encodeURIComponent","setItem","value","options","test","path","domain","end","secure","samesite","expireStr","domainStr","pathStr","secureStr","samesiteStr","removeItem","hasItem","clear","aKeys","split","nLen","length","nIdx","Store","store","_store","nodeMap","Map","NodeStore","get","set","delete","SessionStore","window","sessionStorage","JSON","parse","stringify","CookieStore","hostname","location","defaults","item","cookies","BROWSER_STORAGE_TYPE","SCOPE_BOUNDARY","RITUAL","PUSH_CATEGORY","INTERNAL_ROLE","ACCOUNT_ROLE","PROJECT_ROLE","GROUP_ROLE","ROLE","isBrowser","Function","isNode","prefix","pre","str","startsWith","API_VERSION","Config","loadBrowser","loadNode","apiProtocol","_apiProtocol","endsWith","slice","apiHost","_apiHost","useProjectProxy","_useProjectProxy","apiVersion","_apiVersion","accountShortName","_accountShortName","projectShortName","_projectShortName","isLocal","host","indexOf","protocol","pathname","match","account","project","setContext","context","config","COOKIE","SESSION","SESSION_KEY","EPI_SSO_KEY","Identification","storeType","type","consumeSSO","session","getStore","getStoreOptions","setSessionWithOptions","forcePathInclusion","mySession","objectType","base","isCustomDomain","isEpicenterDomain","cookieContent","charAt","identification","ErrorManager","handlers","_handlers","clearHandlers","registerHandler","identifier","handleFn","handler","handle","unregister","unregisterHandler","unshift","index","findIndex","splice","error","retryFn","promise","catch","err","e","console","remainingHandlers","handleableError","errorManager","MAX_URL_LENGTH","paginate","json","url","parsePage","i","page","values","prev","searchParams","URLSearchParams","search","firstResult","warn","first","maxResults","max","Math","toString","prevPage","request","paginated","then","Object","assign","next","totalResults","nextPage","initialTotal","all","allValues","push","parseQuery","query","entries","reduce","arr","Array","isArray","map","v","createMessage","headersRaw","bodyRaw","includeAuthorization","authorization","FormData","Authorization","token","authOverride","NO_CONTENT","BAD_REQUEST","OK","method","inert","fetch","cache","redirect","resContentType","includes","result","fault","retryOptions","retry","requestArguments","Router","version","_version","server","_server","_authorization","_searchParams","withVersion","withServer","withProjectProxy","withAccountShortName","withProjectShortName","withAuthorization","withSearchParams","getURL","uriComponent","overrides","URL","proxyPathComponent","commonPathComponent","uniquePathComponent","href","from","searchObject","post","patch","put","getAccount","createAccount","view","updateAccount","optionals","removeAccount","teamForAdmin","adminKey","includeAllMembers","filter","routingOptions","createAdmin","getWithHandle","ACCESS_TYPE","WORKER_PARTITION","PHYLOGENY","FILE_TYPE","channelsEnabled","list","AUTH_TOKEN_KEY","DISCONNECTED","CONNECTED","FORBIDDEN","CONNECT_META_CHANNEL","DISCONNECT_META_CHANNEL","COMETD_RECONNECTED","DEFAULT_CHANNEL_PROTOCOL","cometdInstance","CometdAdapter","cometd","instance","startup","logLevel","getProject","channelEnabled","channelProtocol","toLowerCase","CometD","AckExtension","default","ReloadExtension","accountProject","registerExtension","onunload","getStatus","reload","transport","getTransport","abort","configure","listenToMetaChannels","connectListener","Promise","resolve","reject","addListener","isDisconnected","wasConnected","isConnected","successful","disconnectListener","init","initialization","handshake","handshakeProps","ext","ack","websocketEnabled","handshakeReply","errorMessage","disconnect","empty","disconnectReply","add","channel","update","channels","concat","subscriptionProps","handleCometdUpdate","data","promises","batch","forEach","subscription","subscribe","subscribeReply","subscriptions","sub","res","publish","content","publishProps","publishReply","remove","unsubscribe","unsubscribeReply","clearSubscriptions","cometdAdapter","logout","verificationOptionals","presenceOptionals","cleanup","groupKey","allSettled","finally","getSession","getLocalSession","setLocalSession","removeLocalSession","login","credentials","payload","prototype","hasOwnProperty","call","password","secretKey","regenerate","groupOrAccount","sso","getSAMLLink","generateSAMLLINK","ssoOutcome","ltiVersion","outcomeInformation","resetPassword","redirectURL","subject","redirectUrl","verify","create","file","scope","scopeBoundary","scopeKey","userKey","readLock","writeLock","ttlSeconds","permit","USER","assetKey","removeFromScope","getURLWithScope","download","downloadWithScope","CONFLICT","overwrite","fileName","remaining","name","presignedUrl","shouldUpdate","ENCODING","sendEmail","emailBody","familyNameFirst","html","attachments","replyTo","fromUserKey","fromString","sendEmailToAdmin","groupName","draft","runLimit","category","episodeKey","searchOptions","sort","join","forGroup","withName","AUGMENT","augment","MEMBERS","QUANTIZED","destroy","gather","includeExpired","organization","allowSelfRegistration","flightRecorder","event","allowMembershipChanges","pricing","startDate","expirationDate","capacity","allowChannel","group","quantized","withGroupName","forUser","role","isMultiple","roleList","getSessionGroups","whitelistUsers","allow","emails","getWhitelistedUsers","sendRegistrationEmail","email","linkURL","linkUrl","selfRegister","displayName","givenName","familyName","addUser","usersInput","users","u","PARTICIPANT","available","updateUser","removeUser","hasMultiple","statusUpdate","collection","scores","tags","connect","forWorld","worldKey","google","humanKey","model","ephemeral","trackingKey","modelContext","executionContext","WORLD","hasPermit","morphology","modelFile","createSingular","getSingularRunKey","clone","runKey","restore","rewind","steps","rewindCount","marked","hidden","closed","timeout","variables","metadata","episodeName","includeEpisodes","var","meta","run","variableMap","introspect","introspectWithRunKey","operation","args","ritual","EXORCISE","arguments","getVariables","ignorable","mappify","include","additional","keys","getVariable","variable","updateVariables","getMetadata","runKeyArg","bodyAsArray","updateMetadata","action","actionList","retrieveFromWorld","removeFromWorld","getWithStrategy","strategy","lastRun","newRun","migrate","uploadCSV","formdata","append","createUser","modality","vaultKey","items","mutationKey","pop","NOT_FOUND","withScope","byName","define","mutationStrategy","defaultLock","count","AFFILIATE","PROCESSING_TYPE","MEDIA_FORMAT","LANGUAGE_CODE","getVideoURLByKey","videoKey","getVideoURLWith","family","affiliate","userKeyURIComponent","getVideoDirectoryByKey","getVideoDirectoryWith","getVideoSearch","deleteVideoByKey","postVideoProcessor","downloadVideoByKey","downloadVideoWith","videoAPI","getDirectoryURL","processVideo","processors","log","postToken","initialLayoutClassList","postArchive","getInfo","deleteArchiveByID","archiveID","getProjectID","vonageAPI","apiKey","createSession","generateToken","sessionID","sessionId","startArchive","resolution","stopArchive","OBJECTIVE","ORBIT_TYPE","WORLD_NAME_GENERATOR","worldNameGenerator","mine","getAssignments","getSessionWorlds","selfAssign","objective","MINIMUM","populace","autoAssignUsers","assignments","requireAllAssignments","keepEmptyWorlds","editAssignments","getAssignmentsByKey","removeUsers","userKeys","Boolean","getPersonas","boundary","PROJECT","boundaryComponent","scopeKeyComponent","setPersonas","personas","assignRun","RETRY_POLICY","trigger","retryPolicy","failSafeTermination","taskKey","getHistory","getTaskIn","updatePermit","chatKey","room","sendMessage","getMessages","maxRecords","horizon","stage","expectedRoles","defaultActions","transparent","actions","load","forceClose","updateDefaults","submitActions","deleteBarrier","deleteAll","undoSubmit","triggerFor","accountId","partners","edit","udomeKey","RECORDING_TYPES","PRIVACY","STREAM_TYPES","sleep","ms","r","setTimeout","randRange","min","random","RETRY_RANGES","RATE_LIMIT_REACHED","handleRateLimit","requestFunction","retryNumber","getConfig","createRoom","privacy","exp","enable_recording","streaming_endpoints","disableRateLimitHandling","callAPI","epicenter","properties","createToken","room_name","start_video_off","is_owner","user_name","close_tab_on_exit","selfSign","getVideoByRecordingId","recordingId","filePathInfo","videoAdapter","filePaths","contents","a","b","filePath","find","p","updateRecordingStatus","validateScope","pushCategory","Channel","has","proxy","resource","UNAUTHORIZED","DEFAULT_ERROR_HANDLERS","cometdReconnected","cometdError","authExpired","authAdapter","alert","authGroupExpired","authInvalidated","freeze"],"mappings":"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"}
|