@placeos/ts-client 4.8.1 → 4.8.2
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/dist/domains/functions.d.ts +3 -4
- package/dist/index.cjs.js +2 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +207 -207
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/domains/functions.ts +3 -4
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../node_modules/tslib/tslib.es6.mjs","../node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../node_modules/rxjs/dist/esm5/internal/Subscription.js","../node_modules/rxjs/dist/esm5/internal/config.js","../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../node_modules/rxjs/dist/esm5/internal/util/noop.js","../node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../node_modules/rxjs/dist/esm5/internal/Subscriber.js","../node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../node_modules/rxjs/dist/esm5/internal/util/identity.js","../node_modules/rxjs/dist/esm5/internal/util/pipe.js","../node_modules/rxjs/dist/esm5/internal/Observable.js","../node_modules/rxjs/dist/esm5/internal/util/lift.js","../node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../node_modules/rxjs/dist/esm5/internal/Subject.js","../node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js","../node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","../node_modules/rxjs/dist/esm5/internal/ReplaySubject.js","../node_modules/rxjs/dist/esm5/internal/scheduler/Action.js","../node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js","../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js","../node_modules/rxjs/dist/esm5/internal/Scheduler.js","../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js","../node_modules/rxjs/dist/esm5/internal/scheduler/async.js","../node_modules/rxjs/dist/esm5/internal/observable/empty.js","../node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../node_modules/rxjs/dist/esm5/internal/observable/from.js","../node_modules/rxjs/dist/esm5/internal/observable/throwError.js","../node_modules/rxjs/dist/esm5/internal/util/EmptyError.js","../node_modules/rxjs/dist/esm5/internal/lastValueFrom.js","../node_modules/rxjs/dist/esm5/internal/util/isDate.js","../node_modules/rxjs/dist/esm5/internal/operators/map.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../node_modules/rxjs/dist/esm5/internal/observable/timer.js","../node_modules/rxjs/dist/esm5/internal/operators/filter.js","../node_modules/rxjs/dist/esm5/internal/operators/take.js","../node_modules/rxjs/dist/esm5/internal/operators/mapTo.js","../node_modules/rxjs/dist/esm5/internal/operators/delayWhen.js","../node_modules/rxjs/dist/esm5/internal/operators/delay.js","../node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js","../node_modules/rxjs/dist/esm5/internal/operators/retry.js","../node_modules/rxjs/dist/esm5/internal/operators/switchMap.js","../node_modules/rxjs/dist/esm5/internal/observable/dom/fetch.js","../node_modules/byte-base64/lib.es6.js","../node_modules/fast-sha256/sha256.js","../node_modules/ts-md5/dist/index.es.js","../node_modules/date-fns/constants.js","../node_modules/date-fns/constructFrom.js","../node_modules/date-fns/toDate.js","../node_modules/date-fns/addMonths.js","../node_modules/date-fns/addMilliseconds.js","../node_modules/date-fns/addHours.js","../node_modules/date-fns/addSeconds.js","../node_modules/date-fns/addYears.js","../node_modules/date-fns/getUnixTime.js","../node_modules/date-fns/isBefore.js","../src/utilities/general.ts","../src/utilities/abort-controller.ts","../src/utilities/api.ts","../src/utilities/async.ts","../src/auth/interfaces.ts","../src/auth/functions.ts","../src/http/mock.ts","../src/http/functions.ts","../src/resources/resource.ts","../src/alerts/alert.ts","../src/alerts/dashboard.ts","../src/alerts/functions.ts","../src/applications/application.ts","../src/resources/functions.ts","../src/applications/functions.ts","../src/broker/broker.ts","../src/broker/functions.ts","../src/clusters/cluster.ts","../src/clusters/process.ts","../src/clusters/functions.ts","../src/domains/domain.ts","../src/domains/functions.ts","../src/settings/interfaces.ts","../src/settings/settings.ts","../src/drivers/enums.ts","../src/drivers/driver.ts","../src/drivers/functions.ts","../src/edge/edge.ts","../src/edge/functions.ts","../src/ldap-sources/ldap-source.ts","../src/ldap-sources/functions.ts","../src/metadata/metadata.ts","../src/triggers/trigger.ts","../src/zones/zone.ts","../src/metadata/zone-metadata.ts","../src/metadata/functions.ts","../src/systems/system.ts","../src/modules/module.ts","../src/modules/functions.ts","../src/oauth-sources/oauth-source.ts","../src/oauth-sources/functions.ts","../src/repositories/interfaces.ts","../src/repositories/repository.ts","../src/repositories/functions.ts","../src/saml-sources/saml-source.ts","../src/saml-sources/functions.ts","../src/settings/functions.ts","../src/systems/functions.ts","../src/triggers/functions.ts","../src/triggers/interfaces.ts","../src/users/user.ts","../src/users/functions.ts","../src/zones/functions.ts","../src/signage/media.class.ts","../src/signage/playlist.class.ts","../src/signage/plugin.class.ts","../src/signage/functions.ts","../src/staff/answers/model.ts","../src/staff/answers/functions.ts","../src/staff/invitations/model.ts","../src/staff/invitations/functions.ts","../src/staff/questions/model.ts","../src/staff/questions/functions.ts","../src/staff/surveys/model.ts","../src/staff/surveys/functions.ts","../src/assets/assets.class.ts","../src/assets/functions.ts","../src/short-url/short-url.class.ts","../src/short-url/functions.ts","../src/storages/storage.class.ts","../src/storages/functions.ts","../src/webrtc/functions.ts","../node_modules/rxjs/dist/esm5/internal/observable/dom/WebSocketSubject.js","../node_modules/rxjs/dist/esm5/internal/observable/dom/webSocket.js","../src/realtime/interfaces.ts","../src/realtime/mock-module.ts","../src/realtime/mock-system.ts","../src/realtime/mock.ts","../src/realtime/functions.ts","../src/realtime/status-variable.ts","../src/realtime/module.ts","../src/realtime/system.ts","../src/realtime/binding.ts"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return function (source) {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n __extends(OperatorSubscriber, _super);\n function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : _super.prototype._next;\n _this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._error;\n _this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber.prototype.unsubscribe = function () {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar BehaviorSubject = (function (_super) {\n __extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: false,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, (this._value = value));\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map","export var dateTimestampProvider = {\n now: function () {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n//# sourceMappingURL=dateTimestampProvider.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar ReplaySubject = (function (_super) {\n __extends(ReplaySubject, _super);\n function ReplaySubject(_bufferSize, _windowTime, _timestampProvider) {\n if (_bufferSize === void 0) { _bufferSize = Infinity; }\n if (_windowTime === void 0) { _windowTime = Infinity; }\n if (_timestampProvider === void 0) { _timestampProvider = dateTimestampProvider; }\n var _this = _super.call(this) || this;\n _this._bufferSize = _bufferSize;\n _this._windowTime = _windowTime;\n _this._timestampProvider = _timestampProvider;\n _this._buffer = [];\n _this._infiniteTimeWindow = true;\n _this._infiniteTimeWindow = _windowTime === Infinity;\n _this._bufferSize = Math.max(1, _bufferSize);\n _this._windowTime = Math.max(1, _windowTime);\n return _this;\n }\n ReplaySubject.prototype.next = function (value) {\n var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n _super.prototype.next.call(this, value);\n };\n ReplaySubject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._trimBuffer();\n var subscription = this._innerSubscribe(subscriber);\n var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer;\n var copy = _buffer.slice();\n for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i]);\n }\n this._checkFinalizedStatuses(subscriber);\n return subscription;\n };\n ReplaySubject.prototype._trimBuffer = function () {\n var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow;\n var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n if (!_infiniteTimeWindow) {\n var now = _timestampProvider.now();\n var last = 0;\n for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n };\n return ReplaySubject;\n}(Subject));\nexport { ReplaySubject };\n//# sourceMappingURL=ReplaySubject.js.map","import { __extends } from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = (function (_super) {\n __extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) { delay = 0; }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var intervalProvider = {\n setInterval: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = intervalProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearInterval: function (handle) {\n var delegate = intervalProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=intervalProvider.js.map","import { __extends } from \"tslib\";\nimport { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nvar AsyncAction = (function (_super) {\n __extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n var _a;\n if (delay === void 0) { delay = 0; }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n if (delay === void 0) { delay = 0; }\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n if (delay === void 0) { delay = 0; }\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, _delay) {\n var errored = false;\n var errorValue;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype.unsubscribe = function () {\n if (!this.closed) {\n var _a = this, id = _a.id, scheduler = _a.scheduler;\n var actions = scheduler.actions;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n _super.prototype.unsubscribe.call(this);\n }\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar Scheduler = (function () {\n function Scheduler(schedulerActionCtor, now) {\n if (now === void 0) { now = Scheduler.now; }\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) { delay = 0; }\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n };\n Scheduler.now = dateTimestampProvider.now;\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map","import { __extends } from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = (function (_super) {\n __extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) { now = Scheduler.now; }\n var _this = _super.call(this, SchedulerAction, now) || this;\n _this.actions = [];\n _this._active = false;\n return _this;\n }\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this._active) {\n actions.push(action);\n return;\n }\n var error;\n this._active = true;\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()));\n this._active = false;\n if (error) {\n while ((action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n//# sourceMappingURL=async.js.map","import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4: return [2, _b.sent()];\n case 5: return [4, __await(value)];\n case 6: return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8: return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10: return [2];\n }\n });\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(function (subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(function (subscriber) {\n promise\n .then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(function (subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(function (subscriber) {\n process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, e_2_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1: return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3: return [3, 1];\n case 4: return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8: return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10: return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n if (delay === void 0) { delay = 0; }\n if (repeat === void 0) { repeat = false; }\n var scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(function (subscriber) {\n var iterator;\n executeSchedule(subscriber, scheduler, function () {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, function () {\n var _a;\n var value;\n var done;\n try {\n (_a = iterator.next(), value = _a.value, done = _a.done);\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n executeSchedule(subscriber, scheduler, function () {\n var iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function () {\n iterator.next().then(function (result) {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","import { Observable } from '../Observable';\nimport { isFunction } from '../util/isFunction';\nexport function throwError(errorOrErrorFactory, scheduler) {\n var errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : function () { return errorOrErrorFactory; };\n var init = function (subscriber) { return subscriber.error(errorFactory()); };\n return new Observable(scheduler ? function (subscriber) { return scheduler.schedule(init, 0, subscriber); } : init);\n}\n//# sourceMappingURL=throwError.js.map","import { createErrorClass } from './createErrorClass';\nexport var EmptyError = createErrorClass(function (_super) {\n return function EmptyErrorImpl() {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n };\n});\n//# sourceMappingURL=EmptyError.js.map","import { EmptyError } from './util/EmptyError';\nexport function lastValueFrom(source, config) {\n var hasConfig = typeof config === 'object';\n return new Promise(function (resolve, reject) {\n var _hasValue = false;\n var _value;\n source.subscribe({\n next: function (value) {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: function () {\n if (_hasValue) {\n resolve(_value);\n }\n else if (hasConfig) {\n resolve(config.defaultValue);\n }\n else {\n reject(new EmptyError());\n }\n },\n });\n });\n}\n//# sourceMappingURL=lastValueFrom.js.map","export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n//# sourceMappingURL=map.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n var doInnerSub = function (value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, function () {\n innerComplete = true;\n }, undefined, function () {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function () {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n }\n else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n isComplete = true;\n checkComplete();\n }));\n return function () {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n//# sourceMappingURL=mergeInternals.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n if (isFunction(resultSelector)) {\n return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime, intervalOrScheduler, scheduler) {\n if (dueTime === void 0) { dueTime = 0; }\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n }\n else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(function (subscriber) {\n var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n var n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n }\n else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n//# sourceMappingURL=timer.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); }));\n });\n}\n//# sourceMappingURL=filter.js.map","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0\n ?\n function () { return EMPTY; }\n : operate(function (source, subscriber) {\n var seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n//# sourceMappingURL=take.js.map","import { map } from './map';\nexport function mapTo(value) {\n return map(function () { return value; });\n}\n//# sourceMappingURL=mapTo.js.map","import { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\nimport { innerFrom } from '../observable/innerFrom';\nexport function delayWhen(delayDurationSelector, subscriptionDelay) {\n if (subscriptionDelay) {\n return function (source) {\n return concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n };\n }\n return mergeMap(function (value, index) { return innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value)); });\n}\n//# sourceMappingURL=delayWhen.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\nexport function delay(due, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var duration = timer(due, scheduler);\n return delayWhen(function () { return duration; });\n}\n//# sourceMappingURL=delay.js.map","import { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function distinctUntilChanged(comparator, keySelector) {\n if (keySelector === void 0) { keySelector = identity; }\n comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n return operate(function (source, subscriber) {\n var previousKey;\n var first = true;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var currentKey = keySelector(value);\n if (first || !comparator(previousKey, currentKey)) {\n first = false;\n previousKey = currentKey;\n subscriber.next(value);\n }\n }));\n });\n}\nfunction defaultCompare(a, b) {\n return a === b;\n}\n//# sourceMappingURL=distinctUntilChanged.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nimport { timer } from '../observable/timer';\nimport { innerFrom } from '../observable/innerFrom';\nexport function retry(configOrCount) {\n if (configOrCount === void 0) { configOrCount = Infinity; }\n var config;\n if (configOrCount && typeof configOrCount === 'object') {\n config = configOrCount;\n }\n else {\n config = {\n count: configOrCount,\n };\n }\n var _a = config.count, count = _a === void 0 ? Infinity : _a, delay = config.delay, _b = config.resetOnSuccess, resetOnSuccess = _b === void 0 ? false : _b;\n return count <= 0\n ? identity\n : operate(function (source, subscriber) {\n var soFar = 0;\n var innerSub;\n var subscribeForRetry = function () {\n var syncUnsub = false;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (resetOnSuccess) {\n soFar = 0;\n }\n subscriber.next(value);\n }, undefined, function (err) {\n if (soFar++ < count) {\n var resub_1 = function () {\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n }\n else {\n syncUnsub = true;\n }\n };\n if (delay != null) {\n var notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(err, soFar));\n var notifierSubscriber_1 = createOperatorSubscriber(subscriber, function () {\n notifierSubscriber_1.unsubscribe();\n resub_1();\n }, function () {\n subscriber.complete();\n });\n notifier.subscribe(notifierSubscriber_1);\n }\n else {\n resub_1();\n }\n }\n else {\n subscriber.error(err);\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n }\n };\n subscribeForRetry();\n });\n}\n//# sourceMappingURL=retry.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n return operate(function (source, subscriber) {\n var innerSubscriber = null;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n var innerIndex = 0;\n var outerIndex = index++;\n innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () {\n innerSubscriber = null;\n checkComplete();\n })));\n }, function () {\n isComplete = true;\n checkComplete();\n }));\n });\n}\n//# sourceMappingURL=switchMap.js.map","import { __assign, __rest } from \"tslib\";\nimport { createOperatorSubscriber } from '../../operators/OperatorSubscriber';\nimport { Observable } from '../../Observable';\nimport { innerFrom } from '../../observable/innerFrom';\nexport function fromFetch(input, initWithSelector) {\n if (initWithSelector === void 0) { initWithSelector = {}; }\n var selector = initWithSelector.selector, init = __rest(initWithSelector, [\"selector\"]);\n return new Observable(function (subscriber) {\n var controller = new AbortController();\n var signal = controller.signal;\n var abortable = true;\n var outerSignal = init.signal;\n if (outerSignal) {\n if (outerSignal.aborted) {\n controller.abort();\n }\n else {\n var outerSignalHandler_1 = function () {\n if (!signal.aborted) {\n controller.abort();\n }\n };\n outerSignal.addEventListener('abort', outerSignalHandler_1);\n subscriber.add(function () { return outerSignal.removeEventListener('abort', outerSignalHandler_1); });\n }\n }\n var perSubscriberInit = __assign(__assign({}, init), { signal: signal });\n var handleError = function (err) {\n abortable = false;\n subscriber.error(err);\n };\n fetch(input, perSubscriberInit)\n .then(function (response) {\n if (selector) {\n innerFrom(selector(response)).subscribe(createOperatorSubscriber(subscriber, undefined, function () {\n abortable = false;\n subscriber.complete();\n }, handleError));\n }\n else {\n abortable = false;\n subscriber.next(response);\n subscriber.complete();\n }\n })\n .catch(handleError);\n return function () {\n if (abortable) {\n controller.abort();\n }\n };\n });\n}\n//# sourceMappingURL=fetch.js.map","/*\r\nMIT License\r\n\r\nCopyright (c) 2020 Egor Nepomnyaschih\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n*/\r\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst base64abc = [],\r\n A = \"A\".charCodeAt(0),\r\n a = \"a\".charCodeAt(0),\r\n n = \"0\".charCodeAt(0);\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(A + i));\r\n}\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(a + i));\r\n}\r\nfor (let i = 0; i < 10; ++i) {\r\n base64abc.push(String.fromCharCode(n + i));\r\n}\r\nbase64abc.push(\"+\");\r\nbase64abc.push(\"/\");\r\n*/\r\nconst base64abc = [\r\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\",\r\n \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\r\n \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\",\r\n \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\",\r\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"+\", \"/\"\r\n];\r\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst l = 256, base64codes = new Uint8Array(l);\r\nfor (let i = 0; i < l; ++i) {\r\n base64codes[i] = 255; // invalid character\r\n}\r\nbase64abc.forEach((char, index) => {\r\n base64codes[char.charCodeAt(0)] = index;\r\n});\r\nbase64codes[\"=\".charCodeAt(0)] = 0; // ignored anyway, so we just need to prevent an error\r\n*/\r\nconst base64codes = [\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,\r\n 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0, 255, 255,\r\n 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\r\n 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,\r\n 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,\r\n 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51\r\n];\r\nfunction getBase64Code(charCode) {\r\n if (charCode >= base64codes.length) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n const code = base64codes[charCode];\r\n if (code === 255) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n return code;\r\n}\r\nexport function bytesToBase64(bytes) {\r\n let result = '', i, l = bytes.length;\r\n for (i = 2; i < l; i += 3) {\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\r\n result += base64abc[((bytes[i - 1] & 0x0F) << 2) | (bytes[i] >> 6)];\r\n result += base64abc[bytes[i] & 0x3F];\r\n }\r\n if (i === l + 1) { // 1 octet yet to write\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[(bytes[i - 2] & 0x03) << 4];\r\n result += \"==\";\r\n }\r\n if (i === l) { // 2 octets yet to write\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\r\n result += base64abc[(bytes[i - 1] & 0x0F) << 2];\r\n result += \"=\";\r\n }\r\n return result;\r\n}\r\nexport function base64ToBytes(str) {\r\n if (str.length % 4 !== 0) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n const index = str.indexOf(\"=\");\r\n if (index !== -1 && index < str.length - 2) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n let missingOctets = str.endsWith(\"==\") ? 2 : str.endsWith(\"=\") ? 1 : 0, n = str.length, result = new Uint8Array(3 * (n / 4)), buffer;\r\n for (let i = 0, j = 0; i < n; i += 4, j += 3) {\r\n buffer =\r\n getBase64Code(str.charCodeAt(i)) << 18 |\r\n getBase64Code(str.charCodeAt(i + 1)) << 12 |\r\n getBase64Code(str.charCodeAt(i + 2)) << 6 |\r\n getBase64Code(str.charCodeAt(i + 3));\r\n result[j] = buffer >> 16;\r\n result[j + 1] = (buffer >> 8) & 0xFF;\r\n result[j + 2] = buffer & 0xFF;\r\n }\r\n return result.subarray(0, result.length - missingOctets);\r\n}\r\nexport function base64encode(str, encoder = new TextEncoder()) {\r\n return bytesToBase64(encoder.encode(str));\r\n}\r\nexport function base64decode(str, decoder = new TextDecoder()) {\r\n return decoder.decode(base64ToBytes(str));\r\n}\r\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNCRTtBQUVGOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCRTtBQUNGLE1BQU0sU0FBUyxHQUFHO0lBQ2pCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFDL0QsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUMvRCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0lBQy9ELEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFDL0QsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0NBQzFELENBQUM7QUFFRjs7Ozs7Ozs7OztFQVVFO0FBQ0YsTUFBTSxXQUFXLEdBQUc7SUFDbkIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM5RSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0lBQzlFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7SUFDNUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUNsRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3JELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFDbkUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUMvRCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtDQUMxQyxDQUFDO0FBRUYsU0FBUyxhQUFhLENBQUMsUUFBZ0I7SUFDdEMsSUFBSSxRQUFRLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7S0FDbEQ7SUFDRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztLQUNsRDtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBNEI7SUFDekQsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzFCLE1BQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNyQztJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSx1QkFBdUI7UUFDekMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sSUFBSSxJQUFJLENBQUM7S0FDZjtJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLHdCQUF3QjtRQUN0QyxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVc7SUFDeEMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDckUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQ2QsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNwQyxNQUFjLENBQUM7SUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3QyxNQUFNO1lBQ0wsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUN0QyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUMxQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNyQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDOUI7SUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLFVBQThELElBQUksV0FBVyxFQUFFO0lBQ3hILE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFXLEVBQUUsVUFBcUQsSUFBSSxXQUFXLEVBQUU7SUFDL0csT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDIwIEVnb3IgTmVwb21ueWFzY2hpaFxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4qL1xuXG4vKlxuLy8gVGhpcyBjb25zdGFudCBjYW4gYWxzbyBiZSBjb21wdXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOlxuY29uc3QgYmFzZTY0YWJjID0gW10sXG5cdEEgPSBcIkFcIi5jaGFyQ29kZUF0KDApLFxuXHRhID0gXCJhXCIuY2hhckNvZGVBdCgwKSxcblx0biA9IFwiMFwiLmNoYXJDb2RlQXQoMCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IDI2OyArK2kpIHtcblx0YmFzZTY0YWJjLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShBICsgaSkpO1xufVxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNjsgKytpKSB7XG5cdGJhc2U2NGFiYy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSArIGkpKTtcbn1cbmZvciAobGV0IGkgPSAwOyBpIDwgMTA7ICsraSkge1xuXHRiYXNlNjRhYmMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG4gKyBpKSk7XG59XG5iYXNlNjRhYmMucHVzaChcIitcIik7XG5iYXNlNjRhYmMucHVzaChcIi9cIik7XG4qL1xuY29uc3QgYmFzZTY0YWJjID0gW1xuXHRcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSVwiLCBcIkpcIiwgXCJLXCIsIFwiTFwiLCBcIk1cIixcblx0XCJOXCIsIFwiT1wiLCBcIlBcIiwgXCJRXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIsXG5cdFwiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiLCBcImVcIiwgXCJmXCIsIFwiZ1wiLCBcImhcIiwgXCJpXCIsIFwialwiLCBcImtcIiwgXCJsXCIsIFwibVwiLFxuXHRcIm5cIiwgXCJvXCIsIFwicFwiLCBcInFcIiwgXCJyXCIsIFwic1wiLCBcInRcIiwgXCJ1XCIsIFwidlwiLCBcIndcIiwgXCJ4XCIsIFwieVwiLCBcInpcIixcblx0XCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCIsIFwiK1wiLCBcIi9cIlxuXTtcblxuLypcbi8vIFRoaXMgY29uc3RhbnQgY2FuIGFsc28gYmUgY29tcHV0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFsZ29yaXRobTpcbmNvbnN0IGwgPSAyNTYsIGJhc2U2NGNvZGVzID0gbmV3IFVpbnQ4QXJyYXkobCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IGw7ICsraSkge1xuXHRiYXNlNjRjb2Rlc1tpXSA9IDI1NTsgLy8gaW52YWxpZCBjaGFyYWN0ZXJcbn1cbmJhc2U2NGFiYy5mb3JFYWNoKChjaGFyLCBpbmRleCkgPT4ge1xuXHRiYXNlNjRjb2Rlc1tjaGFyLmNoYXJDb2RlQXQoMCldID0gaW5kZXg7XG59KTtcbmJhc2U2NGNvZGVzW1wiPVwiLmNoYXJDb2RlQXQoMCldID0gMDsgLy8gaWdub3JlZCBhbnl3YXksIHNvIHdlIGp1c3QgbmVlZCB0byBwcmV2ZW50IGFuIGVycm9yXG4qL1xuY29uc3QgYmFzZTY0Y29kZXMgPSBbXG5cdDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSxcblx0MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LFxuXHQyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgNjIsIDI1NSwgMjU1LCAyNTUsIDYzLFxuXHQ1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgMjU1LCAyNTUsIDI1NSwgMCwgMjU1LCAyNTUsXG5cdDI1NSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LFxuXHQxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LFxuXHQyNTUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsXG5cdDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MVxuXTtcblxuZnVuY3Rpb24gZ2V0QmFzZTY0Q29kZShjaGFyQ29kZTogbnVtYmVyKSB7XG5cdGlmIChjaGFyQ29kZSA+PSBiYXNlNjRjb2Rlcy5sZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgYmFzZTY0IHN0cmluZy5cIik7XG5cdH1cblx0Y29uc3QgY29kZSA9IGJhc2U2NGNvZGVzW2NoYXJDb2RlXTtcblx0aWYgKGNvZGUgPT09IDI1NSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBiYXNlNjQgc3RyaW5nLlwiKTtcblx0fVxuXHRyZXR1cm4gY29kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVzVG9CYXNlNjQoYnl0ZXM6IG51bWJlcltdIHwgVWludDhBcnJheSkge1xuXHRsZXQgcmVzdWx0ID0gJycsIGksIGwgPSBieXRlcy5sZW5ndGg7XG5cdGZvciAoaSA9IDI7IGkgPCBsOyBpICs9IDMpIHtcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjW2J5dGVzW2kgLSAyXSA+PiAyXTtcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjWygoYnl0ZXNbaSAtIDJdICYgMHgwMykgPDwgNCkgfCAoYnl0ZXNbaSAtIDFdID4+IDQpXTtcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjWygoYnl0ZXNbaSAtIDFdICYgMHgwRikgPDwgMikgfCAoYnl0ZXNbaV0gPj4gNildO1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbYnl0ZXNbaV0gJiAweDNGXTtcblx0fVxuXHRpZiAoaSA9PT0gbCArIDEpIHsgLy8gMSBvY3RldCB5ZXQgdG8gd3JpdGVcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjW2J5dGVzW2kgLSAyXSA+PiAyXTtcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjWyhieXRlc1tpIC0gMl0gJiAweDAzKSA8PCA0XTtcblx0XHRyZXN1bHQgKz0gXCI9PVwiO1xuXHR9XG5cdGlmIChpID09PSBsKSB7IC8vIDIgb2N0ZXRzIHlldCB0byB3cml0ZVxuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbYnl0ZXNbaSAtIDJdID4+IDJdO1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbKChieXRlc1tpIC0gMl0gJiAweDAzKSA8PCA0KSB8IChieXRlc1tpIC0gMV0gPj4gNCldO1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbKGJ5dGVzW2kgLSAxXSAmIDB4MEYpIDw8IDJdO1xuXHRcdHJlc3VsdCArPSBcIj1cIjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyhzdHI6IHN0cmluZykge1xuXHRpZiAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgYmFzZTY0IHN0cmluZy5cIik7XG5cdH1cblx0Y29uc3QgaW5kZXggPSBzdHIuaW5kZXhPZihcIj1cIik7XG5cdGlmIChpbmRleCAhPT0gLTEgJiYgaW5kZXggPCBzdHIubGVuZ3RoIC0gMikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBiYXNlNjQgc3RyaW5nLlwiKTtcblx0fVxuXHRsZXQgbWlzc2luZ09jdGV0cyA9IHN0ci5lbmRzV2l0aChcIj09XCIpID8gMiA6IHN0ci5lbmRzV2l0aChcIj1cIikgPyAxIDogMCxcblx0XHRuID0gc3RyLmxlbmd0aCxcblx0XHRyZXN1bHQgPSBuZXcgVWludDhBcnJheSgzICogKG4gLyA0KSksXG5cdFx0YnVmZmVyOiBudW1iZXI7XG5cdGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IG47IGkgKz0gNCwgaiArPSAzKSB7XG5cdFx0YnVmZmVyID1cblx0XHRcdGdldEJhc2U2NENvZGUoc3RyLmNoYXJDb2RlQXQoaSkpIDw8IDE4IHxcblx0XHRcdGdldEJhc2U2NENvZGUoc3RyLmNoYXJDb2RlQXQoaSArIDEpKSA8PCAxMiB8XG5cdFx0XHRnZXRCYXNlNjRDb2RlKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSkgPDwgNiB8XG5cdFx0XHRnZXRCYXNlNjRDb2RlKHN0ci5jaGFyQ29kZUF0KGkgKyAzKSk7XG5cdFx0cmVzdWx0W2pdID0gYnVmZmVyID4+IDE2O1xuXHRcdHJlc3VsdFtqICsgMV0gPSAoYnVmZmVyID4+IDgpICYgMHhGRjtcblx0XHRyZXN1bHRbaiArIDJdID0gYnVmZmVyICYgMHhGRjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0LnN1YmFycmF5KDAsIHJlc3VsdC5sZW5ndGggLSBtaXNzaW5nT2N0ZXRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NGVuY29kZShzdHI6IHN0cmluZywgZW5jb2RlcjogeyBlbmNvZGU6IChzdHI6IHN0cmluZykgPT4gVWludDhBcnJheSB8IG51bWJlcltdIH0gPSBuZXcgVGV4dEVuY29kZXIoKSkge1xuXHRyZXR1cm4gYnl0ZXNUb0Jhc2U2NChlbmNvZGVyLmVuY29kZShzdHIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NGRlY29kZShzdHI6IHN0cmluZywgZGVjb2RlcjogeyBkZWNvZGU6IChieXRlczogVWludDhBcnJheSkgPT4gc3RyaW5nIH0gPSBuZXcgVGV4dERlY29kZXIoKSkge1xuXHRyZXR1cm4gZGVjb2Rlci5kZWNvZGUoYmFzZTY0VG9CeXRlcyhzdHIpKTtcbn1cbiJdfQ==","(function (root, factory) {\n // Hack to make all exports of this module sha256 function object properties.\n var exports = {};\n factory(exports);\n var sha256 = exports[\"default\"];\n for (var k in exports) {\n sha256[k] = exports[k];\n }\n \n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = sha256;\n } else if (typeof define === 'function' && define.amd) {\n define(function() { return sha256; }); \n } else {\n root.sha256 = sha256;\n }\n})(this, function(exports) {\n\"use strict\";\nexports.__esModule = true;\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexports.digestLength = 32;\nexports.blockSize = 64;\n// SHA-256 constants\nvar K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n var a, b, c, d, e, f, g, h, u, i, j, t1, t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nvar Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = exports.digestLength;\n this.blockSize = exports.blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n var dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n var bytesHashed = this.bytesHashed;\n var left = this.bufferLength;\n var bitLenHi = (bytesHashed / 0x20000000) | 0;\n var bitLenLo = bytesHashed << 3;\n var padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (var i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (var i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nexports.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nvar HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n var pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n }\n else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (var i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n }\n else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nexports.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n var h = (new Hash()).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hash = hash;\n// Function hash is both available as module.hash and as default export.\nexports[\"default\"] = hash;\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n var h = (new HMAC(key)).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n var num = counter[0];\n if (num === 0) {\n throw new Error(\"hkdf: cannot expand more\");\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nvar hkdfSalt = new Uint8Array(exports.digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n var counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n var okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n var hmac_ = new HMAC(okm);\n // Allocate buffer.\n var buffer = new Uint8Array(hmac_.digestLength);\n var bufpos = buffer.length;\n var out = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nexports.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n var prf = new HMAC(password);\n var len = prf.digestLength;\n var ctr = new Uint8Array(4);\n var t = new Uint8Array(len);\n var u = new Uint8Array(len);\n var dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n var c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (var k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nexports.pbkdf2 = pbkdf2;\n});\n","const c = new Int32Array(4);\nclass h {\n static hashStr(i, a = !1) {\n return this.onePassHasher.start().appendStr(i).end(a);\n }\n static hashAsciiStr(i, a = !1) {\n return this.onePassHasher.start().appendAsciiStr(i).end(a);\n }\n // Private Static Variables\n static stateIdentity = new Int32Array([\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ]);\n static buffer32Identity = new Int32Array([\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]);\n static hexChars = \"0123456789abcdef\";\n static hexOut = [];\n // Permanent instance is to use for one-call hashing\n static onePassHasher = new h();\n static _hex(i) {\n const a = h.hexChars, t = h.hexOut;\n let e, s, r, n;\n for (n = 0; n < 4; n += 1)\n for (s = n * 8, e = i[n], r = 0; r < 8; r += 2)\n t[s + 1 + r] = a.charAt(e & 15), e >>>= 4, t[s + 0 + r] = a.charAt(e & 15), e >>>= 4;\n return t.join(\"\");\n }\n static _md5cycle(i, a) {\n let t = i[0], e = i[1], s = i[2], r = i[3];\n t += (e & s | ~e & r) + a[0] - 680876936 | 0, t = (t << 7 | t >>> 25) + e | 0, r += (t & e | ~t & s) + a[1] - 389564586 | 0, r = (r << 12 | r >>> 20) + t | 0, s += (r & t | ~r & e) + a[2] + 606105819 | 0, s = (s << 17 | s >>> 15) + r | 0, e += (s & r | ~s & t) + a[3] - 1044525330 | 0, e = (e << 22 | e >>> 10) + s | 0, t += (e & s | ~e & r) + a[4] - 176418897 | 0, t = (t << 7 | t >>> 25) + e | 0, r += (t & e | ~t & s) + a[5] + 1200080426 | 0, r = (r << 12 | r >>> 20) + t | 0, s += (r & t | ~r & e) + a[6] - 1473231341 | 0, s = (s << 17 | s >>> 15) + r | 0, e += (s & r | ~s & t) + a[7] - 45705983 | 0, e = (e << 22 | e >>> 10) + s | 0, t += (e & s | ~e & r) + a[8] + 1770035416 | 0, t = (t << 7 | t >>> 25) + e | 0, r += (t & e | ~t & s) + a[9] - 1958414417 | 0, r = (r << 12 | r >>> 20) + t | 0, s += (r & t | ~r & e) + a[10] - 42063 | 0, s = (s << 17 | s >>> 15) + r | 0, e += (s & r | ~s & t) + a[11] - 1990404162 | 0, e = (e << 22 | e >>> 10) + s | 0, t += (e & s | ~e & r) + a[12] + 1804603682 | 0, t = (t << 7 | t >>> 25) + e | 0, r += (t & e | ~t & s) + a[13] - 40341101 | 0, r = (r << 12 | r >>> 20) + t | 0, s += (r & t | ~r & e) + a[14] - 1502002290 | 0, s = (s << 17 | s >>> 15) + r | 0, e += (s & r | ~s & t) + a[15] + 1236535329 | 0, e = (e << 22 | e >>> 10) + s | 0, t += (e & r | s & ~r) + a[1] - 165796510 | 0, t = (t << 5 | t >>> 27) + e | 0, r += (t & s | e & ~s) + a[6] - 1069501632 | 0, r = (r << 9 | r >>> 23) + t | 0, s += (r & e | t & ~e) + a[11] + 643717713 | 0, s = (s << 14 | s >>> 18) + r | 0, e += (s & t | r & ~t) + a[0] - 373897302 | 0, e = (e << 20 | e >>> 12) + s | 0, t += (e & r | s & ~r) + a[5] - 701558691 | 0, t = (t << 5 | t >>> 27) + e | 0, r += (t & s | e & ~s) + a[10] + 38016083 | 0, r = (r << 9 | r >>> 23) + t | 0, s += (r & e | t & ~e) + a[15] - 660478335 | 0, s = (s << 14 | s >>> 18) + r | 0, e += (s & t | r & ~t) + a[4] - 405537848 | 0, e = (e << 20 | e >>> 12) + s | 0, t += (e & r | s & ~r) + a[9] + 568446438 | 0, t = (t << 5 | t >>> 27) + e | 0, r += (t & s | e & ~s) + a[14] - 1019803690 | 0, r = (r << 9 | r >>> 23) + t | 0, s += (r & e | t & ~e) + a[3] - 187363961 | 0, s = (s << 14 | s >>> 18) + r | 0, e += (s & t | r & ~t) + a[8] + 1163531501 | 0, e = (e << 20 | e >>> 12) + s | 0, t += (e & r | s & ~r) + a[13] - 1444681467 | 0, t = (t << 5 | t >>> 27) + e | 0, r += (t & s | e & ~s) + a[2] - 51403784 | 0, r = (r << 9 | r >>> 23) + t | 0, s += (r & e | t & ~e) + a[7] + 1735328473 | 0, s = (s << 14 | s >>> 18) + r | 0, e += (s & t | r & ~t) + a[12] - 1926607734 | 0, e = (e << 20 | e >>> 12) + s | 0, t += (e ^ s ^ r) + a[5] - 378558 | 0, t = (t << 4 | t >>> 28) + e | 0, r += (t ^ e ^ s) + a[8] - 2022574463 | 0, r = (r << 11 | r >>> 21) + t | 0, s += (r ^ t ^ e) + a[11] + 1839030562 | 0, s = (s << 16 | s >>> 16) + r | 0, e += (s ^ r ^ t) + a[14] - 35309556 | 0, e = (e << 23 | e >>> 9) + s | 0, t += (e ^ s ^ r) + a[1] - 1530992060 | 0, t = (t << 4 | t >>> 28) + e | 0, r += (t ^ e ^ s) + a[4] + 1272893353 | 0, r = (r << 11 | r >>> 21) + t | 0, s += (r ^ t ^ e) + a[7] - 155497632 | 0, s = (s << 16 | s >>> 16) + r | 0, e += (s ^ r ^ t) + a[10] - 1094730640 | 0, e = (e << 23 | e >>> 9) + s | 0, t += (e ^ s ^ r) + a[13] + 681279174 | 0, t = (t << 4 | t >>> 28) + e | 0, r += (t ^ e ^ s) + a[0] - 358537222 | 0, r = (r << 11 | r >>> 21) + t | 0, s += (r ^ t ^ e) + a[3] - 722521979 | 0, s = (s << 16 | s >>> 16) + r | 0, e += (s ^ r ^ t) + a[6] + 76029189 | 0, e = (e << 23 | e >>> 9) + s | 0, t += (e ^ s ^ r) + a[9] - 640364487 | 0, t = (t << 4 | t >>> 28) + e | 0, r += (t ^ e ^ s) + a[12] - 421815835 | 0, r = (r << 11 | r >>> 21) + t | 0, s += (r ^ t ^ e) + a[15] + 530742520 | 0, s = (s << 16 | s >>> 16) + r | 0, e += (s ^ r ^ t) + a[2] - 995338651 | 0, e = (e << 23 | e >>> 9) + s | 0, t += (s ^ (e | ~r)) + a[0] - 198630844 | 0, t = (t << 6 | t >>> 26) + e | 0, r += (e ^ (t | ~s)) + a[7] + 1126891415 | 0, r = (r << 10 | r >>> 22) + t | 0, s += (t ^ (r | ~e)) + a[14] - 1416354905 | 0, s = (s << 15 | s >>> 17) + r | 0, e += (r ^ (s | ~t)) + a[5] - 57434055 | 0, e = (e << 21 | e >>> 11) + s | 0, t += (s ^ (e | ~r)) + a[12] + 1700485571 | 0, t = (t << 6 | t >>> 26) + e | 0, r += (e ^ (t | ~s)) + a[3] - 1894986606 | 0, r = (r << 10 | r >>> 22) + t | 0, s += (t ^ (r | ~e)) + a[10] - 1051523 | 0, s = (s << 15 | s >>> 17) + r | 0, e += (r ^ (s | ~t)) + a[1] - 2054922799 | 0, e = (e << 21 | e >>> 11) + s | 0, t += (s ^ (e | ~r)) + a[8] + 1873313359 | 0, t = (t << 6 | t >>> 26) + e | 0, r += (e ^ (t | ~s)) + a[15] - 30611744 | 0, r = (r << 10 | r >>> 22) + t | 0, s += (t ^ (r | ~e)) + a[6] - 1560198380 | 0, s = (s << 15 | s >>> 17) + r | 0, e += (r ^ (s | ~t)) + a[13] + 1309151649 | 0, e = (e << 21 | e >>> 11) + s | 0, t += (s ^ (e | ~r)) + a[4] - 145523070 | 0, t = (t << 6 | t >>> 26) + e | 0, r += (e ^ (t | ~s)) + a[11] - 1120210379 | 0, r = (r << 10 | r >>> 22) + t | 0, s += (t ^ (r | ~e)) + a[2] + 718787259 | 0, s = (s << 15 | s >>> 17) + r | 0, e += (r ^ (s | ~t)) + a[9] - 343485551 | 0, e = (e << 21 | e >>> 11) + s | 0, i[0] = t + i[0] | 0, i[1] = e + i[1] | 0, i[2] = s + i[2] | 0, i[3] = r + i[3] | 0;\n }\n _dataLength = 0;\n _bufferLength = 0;\n _state = new Int32Array(4);\n _buffer = new ArrayBuffer(68);\n _buffer8;\n _buffer32;\n constructor() {\n this._buffer8 = new Uint8Array(this._buffer, 0, 68), this._buffer32 = new Uint32Array(this._buffer, 0, 17), this.start();\n }\n /**\n * Initialise buffer to be hashed\n */\n start() {\n return this._dataLength = 0, this._bufferLength = 0, this._state.set(h.stateIdentity), this;\n }\n // Char to code point to to array conversion:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n // #Example.3A_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown\n /**\n * Append a UTF-8 string to the hash buffer\n * @param str String to append\n */\n appendStr(i) {\n const a = this._buffer8, t = this._buffer32;\n let e = this._bufferLength, s, r;\n for (r = 0; r < i.length; r += 1) {\n if (s = i.charCodeAt(r), s < 128)\n a[e++] = s;\n else if (s < 2048)\n a[e++] = (s >>> 6) + 192, a[e++] = s & 63 | 128;\n else if (s < 55296 || s > 56319)\n a[e++] = (s >>> 12) + 224, a[e++] = s >>> 6 & 63 | 128, a[e++] = s & 63 | 128;\n else {\n if (s = (s - 55296) * 1024 + (i.charCodeAt(++r) - 56320) + 65536, s > 1114111)\n throw new Error(\n \"Unicode standard supports code points up to U+10FFFF\"\n );\n a[e++] = (s >>> 18) + 240, a[e++] = s >>> 12 & 63 | 128, a[e++] = s >>> 6 & 63 | 128, a[e++] = s & 63 | 128;\n }\n e >= 64 && (this._dataLength += 64, h._md5cycle(this._state, t), e -= 64, t[0] = t[16]);\n }\n return this._bufferLength = e, this;\n }\n /**\n * Append an ASCII string to the hash buffer\n * @param str String to append\n */\n appendAsciiStr(i) {\n const a = this._buffer8, t = this._buffer32;\n let e = this._bufferLength, s, r = 0;\n for (; ; ) {\n for (s = Math.min(i.length - r, 64 - e); s--; )\n a[e++] = i.charCodeAt(r++);\n if (e < 64)\n break;\n this._dataLength += 64, h._md5cycle(this._state, t), e = 0;\n }\n return this._bufferLength = e, this;\n }\n /**\n * Append a byte array to the hash buffer\n * @param input array to append\n */\n appendByteArray(i) {\n const a = this._buffer8, t = this._buffer32;\n let e = this._bufferLength, s, r = 0;\n for (; ; ) {\n for (s = Math.min(i.length - r, 64 - e); s--; )\n a[e++] = i[r++];\n if (e < 64)\n break;\n this._dataLength += 64, h._md5cycle(this._state, t), e = 0;\n }\n return this._bufferLength = e, this;\n }\n /**\n * Get the state of the hash buffer\n */\n getState() {\n const i = this._state;\n return {\n buffer: String.fromCharCode.apply(null, Array.from(this._buffer8)),\n buflen: this._bufferLength,\n length: this._dataLength,\n state: [i[0], i[1], i[2], i[3]]\n };\n }\n /**\n * Override the current state of the hash buffer\n * @param state New hash buffer state\n */\n setState(i) {\n const a = i.buffer, t = i.state, e = this._state;\n let s;\n for (this._dataLength = i.length, this._bufferLength = i.buflen, e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], s = 0; s < a.length; s += 1)\n this._buffer8[s] = a.charCodeAt(s);\n }\n /**\n * Hash the current state of the hash buffer and return the result\n * @param raw Whether to return the value as an `Int32Array`\n */\n end(i = !1) {\n const a = this._bufferLength, t = this._buffer8, e = this._buffer32, s = (a >> 2) + 1;\n this._dataLength += a;\n const r = this._dataLength * 8;\n if (t[a] = 128, t[a + 1] = t[a + 2] = t[a + 3] = 0, e.set(h.buffer32Identity.subarray(s), s), a > 55 && (h._md5cycle(this._state, e), e.set(h.buffer32Identity)), r <= 4294967295)\n e[14] = r;\n else {\n const n = r.toString(16).match(/(.*?)(.{0,8})$/);\n if (n === null) return i ? c : \"\";\n const o = parseInt(n[2], 16), _ = parseInt(n[1], 16) || 0;\n e[14] = o, e[15] = _;\n }\n return h._md5cycle(this._state, e), i ? this._state : h._hex(this._state);\n }\n}\nif (h.hashStr(\"hello\") !== \"5d41402abc4b2a76b9719d911017c592\")\n throw new Error(\"Md5 self test failed.\");\nclass l {\n constructor(i, a = !0, t = 1048576) {\n this._callback = i, this._async = a, this._partSize = t, this._configureReader();\n }\n _reader;\n _md5;\n _part;\n // private _length!: number;\n _blob;\n /**\n * Hash a blob of data in the worker\n * @param blob Data to hash\n */\n hash(i) {\n const a = this;\n a._blob = i, a._part = 0, a._md5 = new h(), a._processPart();\n }\n _fail() {\n this._callback({\n success: !1,\n result: \"data read failed\"\n });\n }\n _hashData(i) {\n let a = this;\n a._md5.appendByteArray(new Uint8Array(i.target.result)), a._part * a._partSize >= a._blob.size ? a._callback({\n success: !0,\n result: a._md5.end()\n }) : a._processPart();\n }\n _processPart() {\n const i = this;\n let a = 0, t;\n i._part += 1, i._blob.size > i._partSize ? (a = i._part * i._partSize, a > i._blob.size && (a = i._blob.size), t = i._blob.slice(\n (i._part - 1) * i._partSize,\n a\n )) : t = i._blob, i._async ? i._reader.readAsArrayBuffer(t) : setTimeout(() => {\n try {\n i._hashData({\n target: {\n result: i._reader.readAsArrayBuffer(\n t\n )\n }\n });\n } catch {\n i._fail();\n }\n }, 0);\n }\n _configureReader() {\n const i = this;\n i._async ? (i._reader = new FileReader(), i._reader.onload = i._hashData.bind(i), i._reader.onerror = i._fail.bind(i), i._reader.onabort = i._fail.bind(i)) : i._reader = new FileReaderSync();\n }\n}\nclass u {\n _queue = [];\n _hashWorker;\n _processing;\n _ready = !0;\n constructor(i, a) {\n const t = this;\n Worker ? (t._hashWorker = new Worker(i, a), t._hashWorker.onmessage = t._recievedMessage.bind(t), t._hashWorker.onerror = (e) => {\n t._ready = !1, console.error(\"Hash worker failure\", e);\n }) : (t._ready = !1, console.error(\"Web Workers are not supported in this browser\"));\n }\n /**\n * Hash a blob of data in the worker\n * @param blob Data to hash\n * @returns Promise of the Hashed result\n */\n hash(i) {\n const a = this;\n let t;\n return t = new Promise((e, s) => {\n a._queue.push({\n blob: i,\n resolve: e,\n reject: s\n }), a._processNext();\n }), t;\n }\n /** Terminate any existing hash requests */\n terminate() {\n this._ready = !1, this._hashWorker.terminate();\n }\n // Processes the next item in the queue\n _processNext() {\n this._ready && !this._processing && this._queue.length > 0 && (this._processing = this._queue.pop(), this._hashWorker.postMessage(this._processing.blob));\n }\n // Hash result is returned from the worker\n _recievedMessage(i) {\n const a = i.data;\n a.success ? this._processing?.resolve(a.result) : this._processing?.reject(a.result), this._processing = void 0, this._processNext();\n }\n}\nexport {\n h as Md5,\n l as Md5FileHasher,\n u as ParallelHasher\n};\n//# sourceMappingURL=index.es.js.map\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMilliseconds} function options.\n */\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of milliseconds to be added.\n * @param options - The options object\n *\n * @returns The new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport function addMilliseconds(date, amount, options) {\n return constructFrom(options?.in || date, +toDate(date) + amount);\n}\n\n// Fallback for modularized imports:\nexport default addMilliseconds;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n\n/**\n * The {@link addHours} function options.\n */\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be added\n * @param options - An object with options\n *\n * @returns The new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport function addHours(date, amount, options) {\n return addMilliseconds(date, amount * millisecondsInHour, options);\n}\n\n// Fallback for modularized imports:\nexport default addHours;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\n\n/**\n * The {@link addSeconds} function options.\n */\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of seconds to be added.\n * @param options - An object with options\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport function addSeconds(date, amount, options) {\n return addMilliseconds(date, amount * 1000, options);\n}\n\n// Fallback for modularized imports:\nexport default addSeconds;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * @param date - The given date\n *\n * @returns The timestamp\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport function getUnixTime(date) {\n return Math.trunc(+toDate(date) / 1000);\n}\n\n// Fallback for modularized imports:\nexport default getUnixTime;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param date - The date that should be before the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is before the second date\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport function isBefore(date, dateToCompare) {\n return +toDate(date) < +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isBefore;\n","import { HashMap } from './types';\n\ndeclare global {\n interface Window {\n debug: boolean;\n }\n}\n\n/**\n * @hidden\n */\nexport type ConsoleIOStream =\n | 'log'\n | 'warn'\n | 'debug'\n | 'error'\n | 'info'\n | 'group'\n | 'groupCollapsed'\n | 'groupEnd';\n/* istanbul ignore next */\n/**\n * Log message to the console\n * @hidden\n * @param type Where the message is from\n * @param msg Body of the message\n * @param args Javascript data to post after the message\n * @param out IO stream to post message to\n * @param color CSS colour to set the `type` value printed to the console\n */\nexport function log(\n type: string,\n msg: string,\n args?: any,\n out: ConsoleIOStream = 'debug',\n color?: string,\n) {\n if (window.debug) {\n const clr = color ? color : '#009688';\n const COLOURS = ['color: #0288D1', `color:${clr}`, 'color: default'];\n if (args) {\n if (consoleHasColours()) {\n console[out](\n `%c[PlaceOS]%c[${type}] %c${msg}`,\n ...COLOURS,\n args,\n );\n } else {\n console[out](`[PlaceOS][${type}] ${msg}`, args);\n }\n } else {\n if (consoleHasColours()) {\n console[out](`%c[PlaceOS]%c[${type}] %c${msg}`, ...COLOURS);\n } else {\n console[out](`[PlaceOS][${type}] ${msg}`);\n }\n }\n }\n}\n/* istanbul ignore next */\n/**\n * @private\n * Whether the console has colours\n * @hidden\n */\nexport function consoleHasColours() {\n const doc = document as any;\n return !(doc.documentMode || /Edge/.test(navigator.userAgent));\n}\n\n/**\n * Get URL paramters from hash or query string\n */\nexport function getFragments(): HashMap<string> {\n const hash = window.location?.hash\n ? window.location?.hash.slice(1)\n : window.location?.href.split('#')[1] || '';\n let query = window.location?.search\n ? window.location?.search.slice(1)\n : window.location?.href.split('?')[1] || '';\n let hash_fragments = {};\n if (hash) {\n // Hash can also contain the query so we need to check for it\n if (hash.indexOf('?') >= 0) {\n const parts = hash.split('?');\n hash_fragments = convertPairStringToMap(parts[0]);\n /* istanbul ignore else */\n if (!query) {\n query = parts[1];\n }\n } else {\n hash_fragments = convertPairStringToMap(hash);\n }\n }\n let query_fragments = {};\n if (query) {\n query_fragments = convertPairStringToMap(query);\n }\n return { ...hash_fragments, ...query_fragments };\n}\n\n/**\n * @private\n * Convert string of key value pairs to a dictionary object\n * @param str String of values\n */\nexport function convertPairStringToMap(str: string): HashMap<string> {\n const map: HashMap<string> = {};\n const str_pairs = str.split('&');\n for (const str_pair of str_pairs) {\n const split_pair = str_pair.split('=');\n if (split_pair[1]) {\n map[decodeURIComponent(split_pair[0])] = decodeURIComponent(\n split_pair[1],\n );\n }\n }\n return map;\n}\n\n/**\n * @hidden\n */\nconst NONCE_CHARS =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n/**\n * @private\n * Create a nonce with the given length\n * @param length Length of the nonce string. Defaults to 40 characters\n */\nexport function generateNonce(length: number = 40): string {\n let nonce = '';\n for (let i = 0; i < length; i++) {\n nonce += NONCE_CHARS.charAt(\n Math.floor(Math.random() * NONCE_CHARS.length),\n );\n }\n return nonce;\n}\n\n/**\n * @private\n * Replace the URL fragment with the given name\n * @param name Name of the fragment to remove\n */\nexport function removeFragment(name: string) {\n const new_hash = (window.location?.hash || '')\n .replace(new RegExp(`${name}[a-zA-Z0-9_+-.%=]*&?`, 'g'), '')\n .replace(/&&/g, '&')\n .replace(/#&/g, '#')\n .replace(/&$/g, '#');\n const new_search = (window.location?.search || '')\n .replace(new RegExp(`${name}[a-zA-Z0-9_+-.%=]*&?`, 'g'), '')\n .replace(/&&/g, '&')\n .replace(/\\?&/g, '#')\n .replace(/&$/g, '#');\n if (window.history?.replaceState)\n window.history?.replaceState(\n null,\n '',\n `${window.location?.pathname}${new_hash}${new_search}`,\n );\n}\n\n/**\n * Convert byte values into a display string\n * @param bytes Number of bytes\n */\nexport function humanReadableByteCount(bytes: number, si: boolean = false) {\n const unit = si ? 1000.0 : 1024.0;\n\n if (bytes < unit) {\n return bytes + (si ? ' iB' : ' B');\n }\n\n const exp = Math.floor(Math.log(bytes) / Math.log(unit));\n const pre = (si ? 'kMGTPE' : 'KMGTPE').charAt(exp - 1) + (si ? 'iB' : 'B');\n\n return (bytes / Math.pow(unit, exp)).toFixed(2) + ' ' + pre;\n}\n\n/**\n * @private\n * Parse URLs from Link header string\n * @param header Header value\n */\nexport function parseLinkHeader(header: string): HashMap<string> {\n if (header.length === 0) {\n throw new Error('Input must not be of zero length');\n }\n\n // Split parts by comma\n const parts = header.split(',');\n const links: HashMap<string> = {};\n // Parse each part into a named link\n for (const part of parts) {\n const section = part.split(';');\n if (section.length !== 2) {\n throw new Error(\"Section could not be split on ';'\");\n }\n const url = section[0].replace(/<(.*)>/, '$1').trim();\n const name = section[1].replace(/rel=\"(.*)\"/, '$1').trim();\n links[name] = url;\n }\n return links;\n}\n\n/**\n * @private\n * Remove properties from object with given values\n * @param object Object to clean\n * @param delete_values List of property values to remove\n */\nexport function cleanObject(object: HashMap, delete_values: any[]) {\n for (const key in object) {\n if (\n object.hasOwnProperty(key) &&\n delete_values.indexOf(object[key]) >= 0\n ) {\n delete object[key];\n }\n }\n return object;\n}\n\nexport function isMobileSafari() {\n return (\n [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod',\n ].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n );\n}\n\nexport function isNestedFrame() {\n return window.location !== window.parent.location;\n}\n\nexport function simplifiedTime(\n time: number = Date.now(),\n interval: number = 60 * 1000,\n) {\n return Math.floor(time / interval);\n}\n","import { log } from './general';\n\n/* istanbul ignore file */\nexport class AbortControllerStub {\n public abort() {\n log('Stub', 'Aborted');\n }\n}\n","import { HashMap } from './types';\n\n/**\n * Convert map into a query string\n * @param map Key value pairs to convert\n */\nexport function toQueryString(map: HashMap) {\n let str = '';\n if (map) {\n for (const key in map) {\n if (\n map.hasOwnProperty(key) &&\n map[key] !== undefined &&\n map[key] !== null\n ) {\n str += `${str ? '&' : ''}${key}=${encodeURIComponent(\n map[key],\n )}`;\n }\n }\n }\n return str;\n}\n","import { Subscription } from 'rxjs';\n\n/* istanbul ignore file */\n\n/**\n * @private\n * Store for named timers\n */\nconst _timers: { [name: string]: number } = {};\n/**\n * @private\n * Store for named intervals\n */\nconst _intervals: { [name: string]: number } = {};\n/**\n * @private\n * Store for named subscription unsub callbacks\n */\nconst _subscriptions: { [name: string]: Subscription | (() => void) } = {};\n\n/**\n * @private\n * Perform any cleanup actions needed before the item is deleted\n */\nexport function destroyWaitingAsync() {\n // Clear local timers\n for (const key in _timers) {\n if (_timers.hasOwnProperty(key)) {\n clearAsyncTimeout(key);\n }\n }\n // Clear local intervals\n for (const key in _intervals) {\n if (_intervals.hasOwnProperty(key)) {\n clearAsyncInterval(key);\n }\n }\n // Clear local subscriptions\n for (const key in _subscriptions) {\n if (_subscriptions.hasOwnProperty(key)) {\n unsub(key);\n }\n }\n}\n\n/**\n * @private\n * Creates a named timer\n * @param name Name of the timer\n * @param fn Callback function for the timer\n * @param delay Callback delay\n */\nexport function timeout(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n clearAsyncTimeout(name);\n _timers[name] = setTimeout(() => {\n fn();\n delete _timers[name];\n }, delay) as any;\n } else {\n throw new Error(\n name\n ? 'Cannot create named timeout without a name'\n : 'Cannot create a timeout without a callback',\n );\n }\n}\n\n/**\n * @private\n * Clears the named timer\n * @param name Timer name\n */\nexport function clearAsyncTimeout(name: string) {\n if (_timers[name]) {\n clearTimeout(_timers[name]);\n delete _timers[name];\n }\n}\n\n/**\n * @private\n * Creates a named interval\n * @param name Name of the interval\n * @param fn Callback function for the interval\n * @param delay Callback delay\n */\nexport function interval(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n clearAsyncInterval(name);\n _intervals[name] = setInterval(() => fn(), delay) as any;\n } else {\n throw new Error(\n name\n ? 'Cannot create named interval without a name'\n : 'Cannot create a interval without a callback',\n );\n }\n}\n\n/**\n * @private\n * Clears the named interval\n * @param name Timer name\n */\nexport function clearAsyncInterval(name: string) {\n if (_intervals[name]) {\n clearInterval(_intervals[name]);\n delete _intervals[name];\n }\n}\n\n/**\n * @private\n * Store named subscription\n * @param name Name of the subscription\n * @param fn Unsubscribe callback or Subscription object\n */\nexport function subscription(name: string, fn: Subscription | (() => void)) {\n unsub(name);\n _subscriptions[name] = fn;\n}\n\n/**\n * @private\n * Call unsubscribe callback with the given name\n * @param name Name of the subscription\n */\nexport function unsub(name: string) {\n if (_subscriptions && _subscriptions[name]) {\n _subscriptions[name] instanceof Subscription\n ? (_subscriptions[name] as Subscription).unsubscribe()\n : (_subscriptions[name] as any)();\n delete _subscriptions[name];\n }\n}\n","import { HashMap } from '../utilities/types';\n\nexport const MOCK_AUTHORITY = {\n id: 'mock-authority',\n name: 'localhost:4200',\n description: '',\n domain: 'localhost:4200',\n login_url: `/login?continue={{url}}`,\n logout_url: `/logout`,\n session: true,\n production: false,\n config: {},\n version: `2.0.0`,\n};\n\nexport interface AuthorizeDetails {\n /** Access token */\n token?: string;\n /** Token generation code */\n code?: string;\n /** TTL of access token */\n expires_in?: string;\n}\n\nexport interface PlaceAuthority {\n /** Place ID for the Authority */\n readonly id: string;\n /** Authority name */\n readonly name: string;\n /** Description of the authority site */\n readonly description: string;\n /** Domain of the authority */\n readonly domain: string;\n /** URL for user to login for authentication */\n readonly login_url: string;\n /** URL for user to clear authentication details */\n readonly logout_url: string;\n /** Whether the engine instance is a production build */\n readonly production: boolean;\n /** Whether the user has an authentication session */\n readonly session: boolean;\n /** Configuration metadata for the authority */\n readonly config: HashMap;\n /** Version of the PlaceOS API */\n readonly version?: string;\n /** URL to the metrics interface for Place */\n readonly metrics?: string;\n /** DSN for Sentry integration */\n readonly sentry_dsn?: string;\n /** List of email domains associated with the authority */\n readonly email_domains?: string[];\n}\n\nexport interface PlaceAuthOptions {\n auth_type?: 'auth_code' | 'implicit' | 'password';\n /** Host name and port of the engine server */\n host?: string;\n /** Whether application uses TLS/SSL */\n secure?: boolean;\n /** URI for authorizing the user */\n auth_uri: string;\n /** URI for generating new tokens */\n token_uri: string;\n /** URI for handling authentication redirects. e.g. `/assets/oauth-resp.html` */\n redirect_uri: string;\n /** Scope of the user permissions needed to access the application */\n scope: string;\n /** Which keystore to use localStorage or sessionStorage. Defaults to `'local'' */\n storage?: 'local' | 'session';\n /** Whether to perform authentication in an iframe */\n use_iframe?: boolean;\n /** Whether service should handling user login. Defaults to `true` */\n handle_login?: boolean;\n /** Whether system is in mock mode */\n mock?: boolean;\n /** Username of the user to be authorised */\n username?: string;\n /** Password for the user being authorised */\n password?: string;\n /** Application secret */\n client_secret?: string;\n /** Whether access tokens should be injected into request headers */\n token_header?: boolean;\n /** Version of the API endpoints to use */\n version?: 'ACA Engine' | 'PlaceOS';\n /** Whether X-API-KEY values should be ignored */\n ignore_api_key?: boolean;\n /** Delay authentication by X milliseconds */\n delay?: number;\n}\n\nexport interface PlaceTokenResponse {\n /** New access token */\n access_token: string;\n /** New refresh token */\n refresh_token: string;\n /** Time in seconds with which the token expires */\n expires_in: string;\n}\n","import * as base64 from 'byte-base64';\nimport * as sha256 from 'fast-sha256';\nimport { BehaviorSubject, Observable, lastValueFrom, timer } from 'rxjs';\nimport { fromFetch } from 'rxjs/fetch';\nimport { map } from 'rxjs/operators';\nimport { Md5 } from 'ts-md5';\n\nimport { addHours, addSeconds, addYears, isBefore } from 'date-fns';\nimport { AbortControllerStub } from '../utilities/abort-controller';\nimport { toQueryString } from '../utilities/api';\nimport {\n clearAsyncTimeout,\n destroyWaitingAsync,\n timeout,\n} from '../utilities/async';\nimport {\n generateNonce,\n getFragments,\n isNestedFrame,\n log,\n removeFragment,\n} from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n AuthorizeDetails,\n MOCK_AUTHORITY,\n PlaceAuthOptions,\n PlaceAuthority,\n PlaceTokenResponse,\n} from './interfaces';\n\n/**\n * @private\n */\nlet _options: PlaceAuthOptions = {} as any;\n/**\n * @private\n * Browser key store to use for authentication credentials. Defaults to `localStorage`\n */\nlet _storage: Storage = localStorage;\n/**\n * @private\n * Authentication authority of for the current domain\n */\nlet _authority: PlaceAuthority | undefined;\n/**\n * @private\n * Map of promises\n */\nconst _promises: HashMap<Promise<any> | undefined> = {};\n/**\n * @private\n * OAuth 2 client ID for the application\n */\nlet _client_id: string = '';\n/**\n * @private\n * OAuth 2 token generation code\n */\nlet _code: string = '';\n/**\n * @private\n * In memory store for access token\n */\nconst _access_token = new BehaviorSubject('');\n/**\n * @private\n * In memory store for refresh token\n */\nconst _refresh_token = new BehaviorSubject('');\n/**\n * @private\n * Current API route\n */\nlet _route: string = `/api/engine/v2`;\n/**\n * @private\n * Whether PlaceOS is online\n */\nconst _online = new BehaviorSubject(false);\n/**\n * @private\n * Observer for the online state of PlaceOS\n */\nconst _online_observer = _online.asObservable();\n\n/**\n * @private\n */\n\nlet _failed_count = 0;\n\n/**\n * @private\n * Resolve a URL against the authority's domain if it is a relative path.\n * If the URL is already absolute (starts with http:// or https://), return as-is.\n * If the URL is relative (starts with /), prepend the protocol and authority domain.\n */\nfunction resolveAuthorityUrl(url: string): string {\n if (!url || url.startsWith('http://') || url.startsWith('https://')) {\n return url;\n }\n const domain = _authority?.domain;\n if (domain) {\n const secure =\n _options.secure || window.location?.protocol.indexOf('https') >= 0;\n return `${secure ? 'https:' : 'http:'}//${domain}${url}`;\n }\n return url;\n}\n\n/** API Endpoint for the retrieved version of PlaceOS */\nexport function apiEndpoint(): string {\n const secure =\n _options.secure || window.location?.protocol.indexOf('https') >= 0;\n const api_host = `${secure ? 'https:' : 'http:'}//${\n _options.host || window.location?.host\n }`;\n return `${api_host}${httpRoute()}`;\n}\n\n/** Path of the API endpoint */\nexport function httpRoute() {\n return _options.version === 'ACA Engine' ? '/control/api' : _route;\n}\n\n/**\n * @hidden\n * Whether requests need token in the request URL or as a header\n */\nexport function needsTokenHeader(): boolean {\n return !!_options.token_header;\n}\n\n/** OAuth 2 client ID for the application */\nexport function clientId(): string {\n return _client_id;\n}\n\n/** Redirect URI for the OAuth flow */\nexport function redirectUri(): string {\n return _options.redirect_uri;\n}\n\n/** Manually set an X API key */\nexport function setAPI_Key(api_key: string, trusted: boolean = true) {\n _storage.setItem(`${_client_id}_x-api-key`, `${api_key}`);\n _storage.setItem('trusted', `${trusted}`);\n setToken('x-api-key', addYears(new Date(), 5).valueOf());\n}\n\n/** Get X API Key for application */\nexport function apiKey() {\n return checkStoreForAuthParam('x-api-key', false) || '';\n}\n\n/** Manually set an access token */\nexport function setToken(\n new_token: string,\n expires_at: number = addHours(new Date(), 2).valueOf(),\n) {\n if (_options.ignore_api_key && new_token === 'x-api-key') return;\n _storage.setItem(`${_client_id}_expires_at`, `${expires_at}`);\n _storage.setItem(`${_client_id}_access_token`, new_token);\n}\n\n/** Bearer token for authenticating requests to PlaceOS */\nexport function token(return_expired: boolean = true): string {\n if (_options.mock) return 'mock-token';\n if (!_storage) return '';\n if (apiKey() && !_options.ignore_api_key) return 'x-api-key';\n const expires_at = _storage.getItem(`${_client_id}_expires_at`) || '';\n const access_token = _access_token.getValue();\n if (isBefore(+expires_at, new Date())) {\n log('Auth', 'Token expired. Requesting new token...');\n invalidateToken();\n if (!_promises.load_authority) {\n _failed_count += 1;\n timeout(\n 're-authorise',\n async () => {\n delete _promises.authorise;\n await authorise().catch((e) =>\n log('Auth', `Failed to get token: ${e}`),\n );\n },\n 200 * Math.min(20, _failed_count),\n );\n }\n if (!return_expired) {\n return '';\n }\n }\n return access_token || _storage.getItem(`${_client_id}_access_token`) || '';\n}\n\n/** Refresh token for renewing the access token */\nexport function refreshToken(): string {\n return (\n _refresh_token.getValue() ||\n _storage.getItem(`${_client_id}_refresh_token`) ||\n ''\n );\n}\n\n/** Host domain of the PlaceOS server */\nexport function host(): string {\n return _options.host || window.location?.host;\n}\n\n/** Whether the application has an authentication token */\nexport function hasToken(): boolean {\n return !!token();\n}\n\n/** Observable for token state */\nexport function listenForToken(): Observable<boolean> {\n return _access_token.pipe(map((_) => !!hasToken()));\n}\n\n/** Place Authority details */\nexport function authority(): PlaceAuthority | undefined {\n return _authority;\n}\n\n/** Whether PlaceOS is online */\nexport function isOnline(): boolean {\n return _online.getValue();\n}\n\n/** Whether requests should use mock handlers */\nexport function isMock(): boolean {\n return !!_options.mock;\n}\n\n/** Whether PlaceOS connection is secure */\nexport function isSecure(): boolean {\n return !!_options.secure;\n}\n\n/** Observable for the online state of PlaceOS */\nexport function onlineState(): Observable<boolean> {\n return _online_observer;\n}\n\n/** Whether this application is trusted */\nexport function isTrusted(): boolean {\n return (\n checkStoreForAuthParam('trust') === 'true' ||\n checkStoreForAuthParam('trusted') === 'true'\n );\n}\n\n/** Whether this application is on a fixed location device */\nexport function isFixedDevice(): boolean {\n return (\n (!!apiKey() && !_options.ignore_api_key) ||\n checkStoreForAuthParam('fixed_device') === 'true'\n );\n}\n\n/**\n * @hidden\n * Check for an auth related param in the URL or storage\n * @param name Name of the paramater to look for\n */\nexport function checkStoreForAuthParam(\n name: string,\n store: boolean = true,\n): string {\n const fragments = getFragments();\n let param = fragments[name];\n /* istanbul ignore else */\n if (_storage) {\n const key = `${clientId()}_${name}`;\n param = param || _storage.getItem(key) || _storage.getItem(name) || '';\n if (store) _storage.setItem(key, `${param}`);\n }\n return param;\n}\n\n/** Initialise authentication for the http and realtime APIs */\nexport async function setup(options: PlaceAuthOptions): Promise<void> {\n _options = options || _options;\n _options.token_header = _options.token_header ?? isNestedFrame();\n if (!window.AbortController) {\n (window as any).AbortController = AbortControllerStub;\n }\n // Intialise storage\n _storage = _options.storage === 'session' ? sessionStorage : localStorage;\n _client_id = Md5.hashStr(_options.redirect_uri, false);\n if (_options.delay && _options.delay > 0) {\n await lastValueFrom(timer(_options.delay!));\n }\n return loadAuthority();\n}\n\nexport function setStorage(type: 'session' | 'local'): void {\n _storage = type === 'session' ? sessionStorage : localStorage;\n}\n\n/**\n * @private\n */\nexport function cleanupAuth() {\n _options = {} as any;\n _authority = undefined;\n _access_token.next('');\n _refresh_token.next('');\n _online.next(false);\n _client_id = '';\n _code = '';\n _route = `/api/engine/v2`;\n // Clear local subscriptions\n for (const key in _promises) {\n /* istanbul ignore else */\n if (key in _promises) {\n delete _promises[key];\n }\n }\n destroyWaitingAsync();\n}\n\n/**\n * Refresh authentication\n */\nexport function refreshAuthority(): Promise<void> {\n log('Auth', 'Refreshing authorty.');\n _authority = undefined;\n return loadAuthority();\n}\n\n/**\n * Invalidate the current access token\n */\nexport function invalidateToken(): void {\n log('Auth', 'Invalidating tokens.');\n _storage.removeItem(`${_client_id}_access_token`);\n _storage.removeItem(`${_client_id}_expires_at`);\n if (_access_token.getValue()) _access_token.next('');\n}\n\n/* istanbul ignore else */\n/**\n * Check the users authentication credentials and perform actions\n * required for the user to authenticate\n * @param state Additional state information for auth requests\n */\nexport function authorise(\n state?: string,\n api_authority: PlaceAuthority = _authority as PlaceAuthority,\n): Promise<string> {\n /* istanbul ignore else */\n if (!_promises.authorise) {\n _promises.authorise = new Promise<string>((resolve, reject) => {\n if (!api_authority) {\n delete _promises.authorise;\n return reject('Authority is not loaded');\n }\n log('Auth', 'Authorising user...');\n const after_check = () => {\n if (token(false)) {\n log('Auth', 'Valid token found.');\n delete _promises.authorise;\n resolve(token());\n } else {\n const token_handlers = [\n () => {\n log('Auth', 'Successfully generated token.');\n resolve(token());\n delete _promises.authorise;\n },\n () => {\n log('Auth', 'Failed to generate token.');\n reject('Failed to generate token');\n setTimeout(() => delete _promises.authorise, 200);\n },\n ];\n if (_options && _options.auth_type === 'password') {\n log('Auth', 'Logging in with credentials.');\n generateTokenWithCredentials(_options).then(\n ...token_handlers,\n );\n _failed_count = 0;\n } else if (_code || refreshToken()) {\n log(\n 'Auth',\n `Generating token with ${\n _code ? 'code' : 'refresh token'\n }`,\n );\n generateToken().then(...token_handlers);\n _failed_count = 0;\n } else {\n if (api_authority!.session) {\n log(\n 'Auth',\n 'Users has session. Authorising application...',\n );\n sendToAuthorize(state).then(...token_handlers);\n } else {\n log('Auth', 'No user session');\n sendToLogin(api_authority);\n reject('No user session');\n setTimeout(() => delete _promises.authorise, 200);\n }\n }\n }\n };\n checkToken().then(after_check, after_check);\n });\n }\n return _promises.authorise as Promise<string>;\n}\n\n/**\n * Logout and clear user credentials for the application\n */\nexport function logout(): void {\n const url = resolveAuthorityUrl(\n _authority ? _authority.logout_url : '/logout',\n );\n fetch(url, {\n method: 'GET',\n redirect: 'manual',\n headers: {\n Authorization: 'Bearer ' + token(),\n },\n }).then((response) => {\n const location = response.headers.get('Location') || url;\n // Remove user credentials\n for (let i = 0; i < _storage.length; i++) {\n const key = _storage.key(i);\n if (key && key.indexOf(_client_id) >= 0) {\n _storage.removeItem(key);\n }\n }\n window.location?.assign(location);\n });\n}\n\n/**\n * @private\n * Load authority details from engine\n */\nexport function loadAuthority(tries: number = 0): Promise<void> {\n if (!_promises.load_authority) {\n _promises.load_authority = new Promise<void>((resolve) => {\n _online.next(false);\n if (_options.mock) {\n // Setup mock authority\n _authority = MOCK_AUTHORITY;\n log('Auth', `System in mock mode`);\n _online.next(true);\n resolve();\n return;\n }\n log('Auth', `Fixed: ${isFixedDevice()} | Trusted: ${isTrusted()}`);\n log('Auth', `Loading authority...`);\n const secure =\n _options.secure ||\n window.location?.protocol.indexOf('https') >= 0;\n const on_error = (err: any) => {\n log('Auth', `Failed to load authority(${err})`);\n _online.next(false);\n // Retry if authority fails to load\n timeout(\n 'load_authority',\n () => {\n delete _promises.load_authority;\n loadAuthority(tries).then((_) => resolve());\n },\n 300 * Math.min(20, ++tries),\n );\n };\n fromFetch(\n `${secure ? 'https:' : 'http:'}//${host()}/auth/authority`,\n {\n credentials: 'same-origin',\n },\n ).subscribe(async (resp) => {\n if (!resp.ok) {\n return on_error(await resp.text().catch((_) => _));\n }\n _authority = (await resp.json()) as PlaceAuthority;\n _route = !/[2-9]\\.[0-9]+\\.[0-9]+/g.test(\n _authority.version || '',\n )\n ? `/control/api`\n : `/api/engine/v2`;\n\n log('Auth', `Loaded authority.`, [], 'group');\n if (_authority) {\n log('Auth', `Name: ${_authority.name}`);\n log('Auth', `Version: ${_authority.version}`);\n log('Auth', `Domain: ${_authority.domain}`);\n log('Auth', `Session: ${_authority.session}`);\n log('Auth', `Production: ${_authority.production}`);\n log(\n 'Auth',\n `Config Keys: ${\n Object.keys(_authority.config || {}).length\n }`,\n );\n }\n log('Auth', ``, [], 'groupEnd');\n\n const response = () => {\n _online.next(true);\n log('Auth', 'Application set online.');\n resolve();\n };\n delete _promises.load_authority;\n authorise('').then(response, response);\n }, on_error);\n });\n }\n return _promises.load_authority;\n}\n\n/**\n * @private\n * @param state\n */\nexport async function sendToAuthorize(state?: string): Promise<void> {\n const auth_url = createLoginURL(state);\n if (_options.use_iframe) {\n return authorizeWithIFrame(auth_url);\n }\n window.location?.assign(auth_url);\n}\n\n/* istanbul ignore next */\n/**\n * @private\n * @param url Authorization URL\n */\nexport function authorizeWithIFrame(url: string): Promise<void> {\n if (!_promises.iframe_auth) {\n _promises.iframe_auth = new Promise<void>((resolve, reject) => {\n log('Auth', 'Authorizing in an iFrame...');\n const iframe = document.createElement('iframe');\n iframe.style.position = 'absolute';\n iframe.style.top = '0';\n iframe.style.left = '0';\n iframe.style.height = '1px';\n iframe.style.width = '1px';\n iframe.style.zIndex = '-1';\n iframe.id = 'place-authorize';\n iframe.src = `${url}`;\n const callback = (event: MessageEvent) => {\n if (\n event.origin === window.location?.origin &&\n event.data.type === 'place-os'\n ) {\n const data: AuthorizeDetails = event.data;\n log('Auth', 'Received credentials from iFrame...');\n document.body.removeChild(iframe);\n clearAsyncTimeout('iframe_auth');\n window.removeEventListener('message', callback);\n delete _promises.iframe_auth;\n if (data.token) {\n resolve();\n return _storeTokenDetails({\n access_token: data.token,\n ...data,\n } as any);\n }\n _code = data.code || '';\n generateToken().then(\n (_) => resolve(_),\n (_) => reject(_),\n );\n }\n };\n timeout(\n 'iframe_auth',\n () => {\n log('Auth', 'Unable to resolve iFrame after 15 seconds...');\n reject();\n },\n 15 * 1000,\n );\n window.addEventListener('message', callback);\n iframe.onerror = (_) => {\n log('Auth', 'iFrame error.', _);\n delete _promises.iframe_auth;\n reject();\n };\n document.body.appendChild(iframe);\n });\n }\n return _promises.iframe_auth;\n}\n\nlet _redirecting = false;\n\n/**\n * @private\n * @param api_authority\n */\nexport function sendToLogin(api_authority: PlaceAuthority): void {\n /* istanbul ignore else */\n if (_options.handle_login !== false && !_redirecting) {\n log('Auth', 'Redirecting to login page...');\n // Redirect to login form, resolving relative URLs against the authority domain\n const url = resolveAuthorityUrl(\n api_authority!.login_url?.replace(\n '{{url}}',\n encodeURIComponent(window.location?.href),\n ),\n );\n setTimeout(() => window.location?.assign(url), 300);\n _redirecting = true;\n throw new Error('Redirecting to login page...');\n } else {\n log('Auth', 'Login being handled locally.');\n }\n delete _promises.authorise;\n}\n\n/**\n * @private\n * Check authentication token\n */\nexport function checkToken(): Promise<boolean> {\n /* istanbul ignore else */\n if (!_promises.check_token) {\n _promises.check_token = new Promise(async (resolve, reject) => {\n if (token()) {\n log('Auth', 'Valid token found.');\n resolve(token());\n } else {\n log('Auth', 'No token. Checking URL for auth credentials...');\n const success = await checkForAuthParameters();\n success ? resolve(true) : reject();\n }\n delete _promises.check_token;\n });\n }\n return _promises.check_token as Promise<boolean>;\n}\n\n/**\n * @private\n * Check URL for auth parameters\n */\nexport function checkForAuthParameters(): Promise<boolean> {\n /* istanbul ignore else */\n if (!_promises.check_params) {\n _promises.check_params = new Promise((resolve) => {\n log('Auth', 'Checking for auth parameters...');\n let fragments = getFragments();\n if (\n (!fragments || Object.keys(fragments).length <= 0) &&\n sessionStorage\n ) {\n fragments = JSON.parse(\n sessionStorage.getItem('ENGINE.auth.params') || '{}',\n );\n }\n if (\n fragments &&\n (fragments.code ||\n fragments.access_token ||\n fragments.refresh_token)\n ) {\n // Store authorisation code\n if (fragments.code) {\n _code = fragments.code;\n removeFragment('code');\n }\n // Store refresh token\n if (fragments.refresh_token) {\n _storage.setItem(\n `${_client_id}_refresh_token`,\n fragments.refresh_token,\n );\n removeFragment('refresh_token');\n }\n const saved_nonce =\n _storage.getItem(`${_client_id}_nonce`) || '';\n const state_parts = (fragments.state || '').split(';');\n removeFragment('state');\n removeFragment('token_type');\n const nonce = state_parts[0];\n /* istanbul ignore else */\n if (saved_nonce === nonce) {\n _storeTokenDetails(fragments as any);\n resolve(!!fragments.access_token);\n } else {\n resolve(false);\n }\n } else {\n resolve(false);\n }\n timeout(\n 'check_params_promise',\n () => delete _promises.check_params,\n 50,\n );\n });\n }\n return _promises.check_params as Promise<boolean>;\n}\n\n/**\n * @private\n * Generate login URL for the user to authenticate\n * @param state State information to send to the server\n */\nexport function createLoginURL(state?: string): string {\n const nonce = createAndSaveNonce();\n state = state ? `${nonce};${state}` : nonce;\n const has_query = _options\n ? (_options.auth_uri || '').indexOf('?') >= 0\n : false;\n const login_url =\n (_options ? _options.auth_uri : null) || '/auth/oauth/authorize';\n const response_type =\n isTrusted() || _options.auth_type === 'auth_code' ? 'code' : 'token';\n let url =\n `${login_url}${has_query ? '&' : '?'}` +\n `response_type=${encodeURIComponent(response_type)}` +\n `&client_id=${encodeURIComponent(_client_id)}` +\n `&state=${encodeURIComponent(state)}` +\n `&redirect_uri=${encodeURIComponent(_options.redirect_uri)}` +\n `&scope=${encodeURIComponent(_options.scope)}`;\n if (_options.auth_type === 'auth_code') {\n const { challenge, verify } = generateChallenge();\n sessionStorage.setItem(`${_client_id}_challenge`, challenge);\n url += `&code_challenge_method=S256`;\n url += `&code_challenge=${verify}`;\n }\n return url;\n}\n\n/**\n * @private\n */\nconst AVAILABLE_CHARS =\n 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split('');\n/**\n * @private\n * @param length Length of the challenge string\n */\nexport function generateChallenge(length: number = 43) {\n const challenge = new Array(length)\n .fill(0)\n .map(\n () =>\n AVAILABLE_CHARS[\n Math.floor(Math.random() * AVAILABLE_CHARS.length)\n ],\n )\n .join('');\n const uint8array = base64.base64ToBytes(base64.base64encode(challenge));\n const verify = base64\n .bytesToBase64(sha256.hash(uint8array))\n .split('=')[0]\n .replace(/\\//g, '_')\n .replace(/\\+/g, '-');\n return { challenge, verify };\n}\n\n/**\n * @private\n * Generate token generation URL\n */\nexport function createRefreshURL(): [string, string] {\n const refresh_uri = _options.token_uri || '/auth/token';\n let url = refresh_uri + `?client_id=${encodeURIComponent(_client_id)}`;\n let body = '';\n url += `&redirect_uri=${encodeURIComponent(_options.redirect_uri)}`;\n if (refreshToken()) {\n url += `&refresh_token=${encodeURIComponent(refreshToken())}`;\n url += `&grant_type=refresh_token`;\n const parts = url.split('?');\n url = parts[0];\n body = parts[1];\n } else {\n url += `&code=${encodeURIComponent(_code)}`;\n url += `&grant_type=authorization_code`;\n const challenge = sessionStorage.getItem(`${_client_id}_challenge`);\n if (challenge) {\n url += `&code_verifier=${challenge}`;\n sessionStorage.removeItem(`${_client_id}_challenge`);\n }\n _code = '';\n }\n return [url, body];\n}\n\n/**\n * @private\n * Geneate a token URL for basic auth with the given credentials\n * @param options Credentials to add to the token\n */\nexport function createCredentialsURL(options: PlaceAuthOptions) {\n const refresh_uri = options.token_uri || '/auth/token';\n const url = toQueryString({\n grant_type: 'password',\n client_id: _client_id,\n client_secret: options.client_secret,\n redirect_uri: options.redirect_uri,\n authority: _authority?.id,\n scope: options.scope,\n username: options.username,\n password: options.password,\n });\n return `${refresh_uri}?${url}`;\n}\n\n/**\n * @private\n * Revoke the current access token\n */\nexport function revokeToken(): Promise<void> {\n /* istanbul ignore else */\n if (!_promises.revoke_token) {\n _promises.revoke_token = new Promise<void>((resolve, reject) => {\n log('Auth', 'Revoking token...');\n const token_uri = _options.token_uri || '/auth/token';\n const on_error = (err: any) => {\n log('Auth', 'Error revoking token.', err);\n reject(err);\n delete _promises.revoke_token;\n };\n fromFetch(`${token_uri}?token=${token()}`, {\n method: 'POST',\n }).subscribe((r: Response) => {\n if (!r.ok) return on_error(r);\n log('Auth', 'Successfully revoked token.');\n _access_token.next('');\n _refresh_token.next('');\n _storage.removeItem(`${_client_id}_access_token`);\n _storage.removeItem(`${_client_id}_refresh_token`);\n resolve();\n delete _promises.revoke_token;\n }, on_error);\n });\n }\n return _promises.revoke_token;\n}\n\n/**\n * @private\n * Generate new tokens from a auth code or refresh token\n */\nexport function generateToken() {\n return generateTokenWithUrl(...createRefreshURL());\n}\n\n/**\n * @private\n * Generate new tokens from a username and password\n */\nexport function generateTokenWithCredentials(options: PlaceAuthOptions) {\n return generateTokenWithUrl(createCredentialsURL(options));\n}\n\n/**\n * @private\n * Make a request to the tokens endpoint with the given URL\n */\nexport function generateTokenWithUrl(\n url: string,\n body: string = '',\n): Promise<void> {\n /* istanbul ignore else */\n if (!_promises.generate_tokens) {\n _promises.generate_tokens = new Promise<void>((resolve, reject) => {\n log('Auth', 'Generating new token...');\n const on_error = (err: any) => {\n log('Auth', 'Error generating new tokens.', err);\n _storage.removeItem(`${_client_id}_refresh_token`);\n _refresh_token.next('');\n reject();\n delete _promises.generate_tokens;\n };\n fromFetch(url, {\n method: 'POST',\n body,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).subscribe(async (r: Response) => {\n if (!r.ok) return on_error(r);\n const tokens = await r.json();\n _storeTokenDetails(tokens);\n resolve();\n delete _promises.generate_tokens;\n }, on_error);\n });\n }\n return _promises.generate_tokens as Promise<void>;\n}\n\n/* istanbul ignore next */\n/**\n * @private\n * @param details\n */\nexport function _storeTokenDetails(details: PlaceTokenResponse) {\n const expires_at = addSeconds(\n new Date(),\n Math.max(60, parseInt(details.expires_in, 10) - 300),\n );\n log('Auth', 'Tokens generated storing...');\n if (isTrusted()) {\n // Store access token\n if (details.access_token) {\n _storage.setItem(\n `${_client_id}_access_token`,\n details.access_token,\n );\n removeFragment('access_token');\n }\n // Store refresh token\n if (details.refresh_token) {\n _storage.setItem(\n `${_client_id}_refresh_token`,\n details.refresh_token,\n );\n removeFragment('refresh_token');\n }\n }\n // Store token expiry time\n if (details.expires_in) {\n _storage.setItem(`${_client_id}_expires_at`, `${expires_at.valueOf()}`);\n removeFragment('expires_in');\n }\n _online.next(true);\n _access_token.next(details.access_token || '');\n _refresh_token.next(details.refresh_token || '');\n}\n\n/**\n * @private\n * Create nonce and save it to the set key store\n */\nexport function createAndSaveNonce(): string {\n const nonce = generateNonce();\n _storage.setItem(`${_client_id}_nonce`, nonce);\n return nonce;\n}\n","import { from, Observable, throwError } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\nimport { convertPairStringToMap, log } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n HttpVerb,\n MockHttpRequest,\n MockHttpRequestHandler,\n MockHttpRequestHandlerOptions,\n} from './interfaces';\n\n/**\n * @private\n */\nconst _handlers: HashMap<MockHttpRequestHandler> = {};\n\nlet _error_handler: (\n method: HttpVerb,\n url: string,\n) => Observable<never> | null = (method: HttpVerb, url: string) => {\n const error = new Error(`Mock endpoint not found: ${method} ${url}`);\n (error as any).status = 404;\n log('HTTP(M)', `404 ${method}:`, url);\n return throwError(error);\n};\n\n/**\n * Change the handler for not found endpoints\n * Return `null` if you want to make the real request\n * @param handler_fn Function to handle not found mocked endpoints\n */\nexport function setMockNotFoundHandler(\n handler_fn: (method: HttpVerb, url: string) => Observable<never> | null,\n) {\n _error_handler = handler_fn;\n}\n\n/**\n * Register handler for http endpoint\n * @param path URL to be handled\n * @param data Data associated with the results of the endpoint\n * @param method HTTP Verb to listen to\n * @param callback Callback for handling request to the given endpoint\n * @param handler_map Handler map to add the endpoint to. Defaults to the global handler map\n */\nexport function registerMockEndpoint<T>(\n handler_ops: MockHttpRequestHandlerOptions,\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n) {\n deregisterMockEndpoint(handler_ops.method, handler_ops.path, handler_map);\n const key = `${handler_ops.method}|${handler_ops.path}`;\n const path_parts = handler_ops.path\n .replace(/(http|https):\\/\\/[a-zA-Z0-9.-]*:?([0-9]*)?/g, '') // Remove URL origin\n .replace(/^\\//, '')\n .split('/');\n const handler: MockHttpRequestHandler<T> = {\n ...handler_ops,\n path_parts,\n path_structure: path_parts.map((i: string) =>\n i[0] === ':' ? i.replace(':', '') : '',\n ),\n };\n handler_map[key] = handler;\n log('HTTP(M)', `+ ${handler_ops.method} ${handler_ops.path}`);\n}\n\n/**\n * Remove registration of mock endpoint\n * @param method Http Verb\n * @param url URL of the endpoint being mocked\n * @param handler_map Handler map to remove the endpoint from. Defaults to the global handler map\n */\nexport function deregisterMockEndpoint(\n method: string,\n url: string,\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n) {\n const key = `${method}|${url}`;\n if (handler_map[key]) {\n delete handler_map[key];\n log('HTTP(M)', `- ${method} ${url}`);\n }\n}\n\n/**\n * @private\n * Remove mapping of handlers for Mock Http requests\n * @param handler_map Handler map to clear. Defaults to the global handler map\n */\nexport function clearMockEndpoints(\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n) {\n for (const key in handler_map) {\n if (handler_map[key]) {\n delete handler_map[key];\n }\n }\n}\n\n/**\n * @private\n * Perform mock request for the given method and URL.\n * Returns a 404 error if no handler for URL and method\n * @param method Http Verb for request\n * @param url URL to perform request on\n * @param handler_map Handler map to query for the request handler.\n * Defaults to the global handler map\n */\nexport function mockRequest(\n method: HttpVerb,\n url: string,\n body?: any,\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n): Observable<HashMap | string | void> | null {\n const handler = findRequestHandler(method, url, handler_map);\n if (handler) {\n const request = processRequest(url, handler, body);\n return onMockRequest(handler, request);\n }\n // Return 404 error when no handler is found\n return _error_handler(method, url);\n}\n\n/**\n * @private\n * Find a request handler for the given URL and method\n * @param method HTTP verb for the request\n * @param url URL of the request\n * @param handler_map Handler map to clear. Defaults to the global handler map\n */\nexport function findRequestHandler(\n method: HttpVerb,\n url: string,\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n): MockHttpRequestHandler | null {\n const path = url\n .replace(/(http|https):\\/\\/[a-zA-Z0-9.-]*:?([0-9]*)?/g, '')\n .replace(/^\\//, '')\n .split('?')[0];\n const route_parts = path.split('/');\n const method_handlers: MockHttpRequestHandler[] = Object.keys(\n handler_map,\n ).reduce<MockHttpRequestHandler[]>((l, i) => {\n if (i.indexOf(`${method}|`) === 0) {\n l.push(handler_map[i]);\n }\n return l;\n }, []);\n for (const handler of method_handlers) {\n if (handler.path_structure.length === route_parts.length) {\n // Path lengths match\n let match = true;\n for (let i = 0; i < handler.path_structure.length; i++) {\n if (\n !handler.path_structure[i] &&\n handler.path_parts[i] !== route_parts[i]\n ) {\n // Static path fragments don't match\n match = false;\n break;\n }\n }\n if (match) {\n return handler;\n }\n }\n }\n return null;\n}\n\n/**\n * @private\n * Generate mock HTTP request from the given URL and handler\n * @param url URL to mock\n * @param handler Handler for the given URL\n */\nexport function processRequest<T = any>(\n url: string,\n handler: MockHttpRequestHandler<T>,\n body?: any,\n): MockHttpRequest {\n const parts = url\n .replace(/(http|https):\\/\\/[a-zA-Z0-9.-]*:?([0-9]*)?/g, '')\n .split('?');\n const path = parts[0].replace(/^\\//, '');\n const query = parts[1] || '';\n const query_params = convertPairStringToMap(query);\n // Grab route parameters from URL\n const route_parts = path.split('/');\n const route_params: HashMap = {};\n for (let i = 0; i < handler.path_structure.length; i++) {\n const paramName = handler.path_structure[i];\n if (paramName) {\n route_params[paramName] = route_parts[i];\n }\n }\n const request = {\n url,\n path: handler.path,\n method: handler.method,\n metadata: handler.metadata,\n route_params,\n query_params,\n body,\n };\n log('HTTP(M)', `MATCHED ${request.method}:`, request);\n return request;\n}\n\n/**\n * @private\n * Perform request and return an observable for the generated response\n * @param handler Request handler\n * @param request Request contents\n */\nexport function onMockRequest(\n handler: MockHttpRequestHandler,\n request: MockHttpRequest,\n) {\n let result;\n try {\n result = handler.callback\n ? handler.callback(request)\n : handler.metadata;\n } catch (error) {\n log('HTTP(M)', `ERROR ${request.method}:`, [request.url, error]);\n throw error;\n }\n const variance = handler.delay_variance || 100;\n const delay_value = handler.delay || 300;\n const delay_time =\n Math.floor(Math.random() * variance - variance / 2) + delay_value;\n log('HTTP(M)', `RESP ${request.method}:`, [request.url, result]);\n return from([result]).pipe(delay(Math.max(200, delay_time)));\n}\n\n/**\n * Get a list of the method + endpoints that have been mocked\n * @returns List of the method + endpoint that have been mocked\n */\nexport function listMockedEndpoints(): string[] {\n return Object.keys(_handlers);\n}\n","import { Observable, throwError } from 'rxjs';\nimport { fromFetch } from 'rxjs/fetch';\nimport { filter, retry, switchMap, take } from 'rxjs/operators';\n\nimport {\n apiKey,\n authority,\n invalidateToken,\n isMock,\n listenForToken,\n refreshAuthority,\n sendToLogin,\n token,\n} from '../auth/functions';\nimport { log } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n HttpJsonOptions,\n HttpOptions,\n HttpResponse,\n HttpResponseType,\n HttpTextOptions,\n HttpVerb,\n HttpVoidOptions,\n} from './interfaces';\nimport { mockRequest } from './mock';\n\n/**\n * Method store to allow attaching spies for testing\n * @hidden\n */\nexport const engine_http: any = { log };\n\n/**\n * @private\n * Map of headers from the last request made\n */\nconst _response_headers: HashMap<HashMap<string>> = {};\n\nexport function responseHeaders(\n url: string,\n /* istanbul ignore next */\n headers: HashMap<HashMap<string>> = _response_headers,\n): HashMap<string> {\n return headers[url] || {};\n}\n\n/**\n * Perform AJAX HTTP GET request\n * @param url URL of the GET endpoint\n * @param options Options to add to the request\n */\nexport function get(\n url: string,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function get(url: string, options?: HttpTextOptions): Observable<string>;\nexport function get(\n url: string,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'json' };\n }\n return handler('GET', url, { response_type: 'json', ...options });\n}\n\n/**\n * Perform AJAX HTTP POST request\n * @param url URL of the POST endpoint\n * @param body Body contents of the request\n * @param options Options to add to the request\n */\nexport function post(\n url: string,\n body: any,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function post(\n url: string,\n body: any,\n options?: HttpTextOptions,\n): Observable<string>;\nexport function post(\n url: string,\n body: any,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'json' };\n }\n return handler('POST', url, { body, response_type: 'json', ...options });\n}\n\n/**\n * Perform AJAX HTTP PUT request\n * @param url URL of the PUT endpoint\n * @param body Body contents of the request\n * @param options Options to add to the request\n */\nexport function put(\n url: string,\n body: any,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function put(\n url: string,\n body: any,\n options?: HttpTextOptions,\n): Observable<string>;\nexport function put(\n url: string,\n body: any,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'json' };\n }\n return handler('PUT', url, { body, response_type: 'json', ...options });\n}\n\n/**\n * Perform AJAX HTTP PATCH request\n * @param url URL of the PATCH endpoint\n * @param body Body contents of the request\n * @param options Options to add to the request\n */\nexport function patch(\n url: string,\n body: any,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function patch(\n url: string,\n body: any,\n options?: HttpTextOptions,\n): Observable<string>;\nexport function patch(\n url: string,\n body: any,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'json' };\n }\n return handler('PATCH', url, { body, response_type: 'json', ...options });\n}\n\n/**\n * Perform AJAX HTTP DELETE request\n * @param url URL of the DELETE endpoint\n * @param options Options to add to the request\n */\nexport function del(\n url: string,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function del(url: string, options?: HttpTextOptions): Observable<string>;\nexport function del(url: string, options?: HttpVoidOptions): Observable<void>;\nexport function del(\n url: string,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'void' };\n }\n return handler('DELETE', url, { response_type: 'void', ...options });\n}\n\n/**\n * @private\n * Convert response into the format requested\n * @param response Request response contents\n * @param type Type of data to return\n */\nexport async function transform(\n resp: Response,\n type: HttpResponseType,\n headers: HashMap<HashMap<string>> = _response_headers,\n): Promise<HttpResponse> {\n /* istanbul ignore else */\n if (resp.headers) {\n const map: HashMap<string> = {};\n if (resp.headers.forEach) {\n resp.headers.forEach((v, k) => (map[k.toLowerCase()] = v));\n } else {\n Object.keys(resp.headers).forEach(\n (k) => (map[k.toLowerCase()] = (resp as any).headers[k]),\n );\n }\n headers[resp.url || ''] = map;\n }\n switch (type) {\n case 'json':\n return await resp.json().catch(() => ({}));\n case 'text':\n return await resp.text();\n case 'void':\n return;\n default:\n return await resp.json().catch(() => ({}));\n }\n}\n\n/**\n * @private\n */\nconst reloadAuth = (): Promise<void> => {\n invalidateToken();\n return refreshAuthority().then(\n () => Promise.resolve(),\n () =>\n new Promise<void>((resolve) => {\n setTimeout(() => {\n reloadAuth().then(() => resolve());\n }, 1000);\n }),\n );\n};\n\n/**\n * @private\n * Perform fetch request\n * @param method Request verb. `GET`, `POST`, `PUT`, `PATCH`, or `DELETE`\n * @param url URL of the request endpoint\n * @param options Options to add to the request\n */\nexport function request(\n method: HttpVerb,\n url: string,\n options: HttpOptions,\n is_mock: () => boolean = isMock,\n mock_handler: (\n m: HttpVerb,\n url: string,\n body?: any,\n ) => Observable<HashMap | string | void> | null = mockRequest,\n success: (\n e: Response,\n t: HttpResponseType,\n ) => Promise<HttpResponse> = transform,\n): Observable<HttpResponse> {\n if (is_mock()) {\n const request_obs = mock_handler(method, url, options?.body);\n if (request_obs) return request_obs;\n }\n options.headers = options.headers || {};\n if (!options.headers['Content-Type'] && !options.headers['content-type']) {\n options.headers['Content-Type'] = `application/json`;\n }\n return listenForToken().pipe(\n filter((_) => _),\n take(1),\n switchMap((_) => {\n if (token() === 'x-api-key') {\n options.headers!['X-API-Key'] = apiKey();\n } else {\n options.headers!.Authorization = `Bearer ${token()}`;\n }\n const fetchOptions: any = {\n ...options,\n method,\n credentials: 'same-origin',\n };\n\n // Only add body for methods that support it and when body exists\n if (\n ['POST', 'PUT', 'PATCH'].includes(method) &&\n options.body !== undefined\n ) {\n fetchOptions.body =\n typeof options.body === 'string'\n ? options.body\n : JSON.stringify(options.body);\n }\n\n return fromFetch(url, fetchOptions) as Observable<Response>;\n }),\n switchMap((resp: Response) => {\n if (resp.ok) {\n return success(resp, options.response_type as any);\n }\n return throwError(resp);\n }),\n retry({\n count: 4,\n delay: (error, retry_count) => {\n return new Observable<number>((subscriber) => {\n if (error.status === 511) {\n sendToLogin(authority()!);\n subscriber.error(error);\n return;\n }\n if (error.status !== 401) {\n subscriber.error(error || {});\n return;\n }\n log('HTTP', 'Auth error', error);\n // Wait for auth refresh before retrying with exponential backoff\n const delay_ms = Math.pow(2, retry_count - 1) * 1000; // Exponential backoff: 1s, 2s, 4s, 8s\n reloadAuth()\n .then(() => {\n subscriber.next(delay_ms);\n subscriber.complete();\n })\n .catch(() => {\n subscriber.error(error);\n });\n });\n },\n }),\n );\n}\n","import { cleanObject } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\n\nexport abstract class PlaceResource {\n /** Unique Identifier of the object */\n public readonly id: string;\n /** Human readable name of the object */\n public readonly name: string;\n /** Unix epoch in seconds of the creation time of the object */\n public readonly created_at: number;\n /** Unix epoch in seconds of the creation time of the object */\n public readonly updated_at: number;\n /** Version of the data */\n public readonly version: number;\n\n constructor(raw_data: Partial<PlaceResource> = {}) {\n this.id = raw_data.id || '';\n this.name = raw_data.name || '';\n this.created_at = raw_data.created_at || 0;\n this.updated_at = raw_data.updated_at || 0;\n\n this.version = raw_data.version || 0;\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(): HashMap {\n const obj: any = { ...this };\n obj.version = this.version;\n /** Remove unneeded public members */\n delete obj.created_at;\n return cleanObject(obj, [undefined, null, '']);\n }\n}\n","import { PlaceResource } from '../resources/resource';\nimport { TriggerConditions } from '../triggers/interfaces';\nimport { PlaceAlertDashboard } from './dashboard';\n\nexport type AlertSeverity = 'low' | 'medium' | 'high' | 'critical';\nexport type AlertType = 'threshold' | 'status' | 'custom';\n\nexport class PlaceAlert extends PlaceResource {\n // Dashboard to show this alert on\n public readonly alert_dashboard_id: string;\n // Details of the dashboard assigned\n public readonly alert_dashboard_details: PlaceAlertDashboard | undefined;\n // Domain authority that the dashboard exists under\n public readonly authority_id: string;\n // Description of the dashboard's purpose\n public readonly description: string;\n // Whether the dashboard is enabled or not\n public readonly enabled: boolean;\n // Conditions for triggering the alert\n public readonly conditions: TriggerConditions;\n // Severity of the alert\n public readonly severity: AlertSeverity;\n // Type of the alert\n public readonly alert_type: AlertType;\n // How often should this alert should be raised when triggered\n public readonly debounce_period: number;\n // Whether condition checks should match any single condition to pass or all of them\n public readonly any_match: boolean;\n\n constructor(data: Partial<PlaceAlert>) {\n super(data);\n this.authority_id = data.authority_id || '';\n this.description = data.description || '';\n this.enabled = data.enabled || false;\n this.conditions = data.conditions || {\n time_dependents: [],\n comparisons: [],\n };\n this.severity = data.severity || 'low';\n this.alert_type = data.alert_type || 'threshold';\n this.debounce_period = data.debounce_period || 0;\n this.alert_dashboard_id = data.alert_dashboard_id || '';\n this.alert_dashboard_details =\n data.alert_dashboard_details || undefined;\n this.any_match = data.any_match || false;\n }\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport class PlaceAlertDashboard extends PlaceResource {\n // Domain authority that the dashboard exists under\n public readonly authority_id: string;\n // Description of the dashboard's purpose\n public readonly description: string;\n // Whether the dashboard is enabled or not\n public readonly enabled: boolean;\n\n constructor(data: Partial<PlaceAlertDashboard>) {\n super(data);\n this.authority_id = data.authority_id || '';\n this.description = data.description || '';\n this.enabled = data.enabled || false;\n }\n}\n","import { create, query, remove, show, update } from '../api';\nimport { PlaceAlert } from './alert';\nimport { PlaceAlertDashboard } from './dashboard';\nimport {\n PlaceAlertDashboardQueryOptions,\n PlaceAlertQueryOptions,\n PlaceAlertShowOptions,\n} from './interfaces';\n\n///////////////////////////////////////////////////////////////\n///////////////////// Alert Dashboards ////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst DASHBOARD_PATH = 'alert_dashboards';\n\n/** Convert raw server data to an alert dashboard object */\nfunction processDashboard(item: Partial<PlaceAlertDashboard>) {\n return new PlaceAlertDashboard(item);\n}\n\n/**\n * Query the available alert dashboards\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAlertDashboards(\n query_params: PlaceAlertDashboardQueryOptions = {},\n) {\n return query({\n query_params,\n fn: processDashboard,\n path: DASHBOARD_PATH,\n });\n}\n\n/**\n * Get the data for an alert dashboard\n * @param id ID of the alert dashboard to retrieve\n */\nexport function showAlertDashboard(id: string) {\n return show({\n id,\n query_params: {},\n fn: processDashboard,\n path: DASHBOARD_PATH,\n });\n}\n\n/**\n * Update the alert dashboard in the database\n * @param id ID of the alert dashboard\n * @param form_data New values for the alert dashboard\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAlertDashboard(\n id: string,\n form_data: Partial<PlaceAlertDashboard>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processDashboard,\n path: DASHBOARD_PATH,\n });\n}\n\n/**\n * Add a new alert dashboard to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAlertDashboard(form_data: Partial<PlaceAlertDashboard>) {\n return create({\n form_data,\n query_params: {},\n fn: processDashboard,\n path: DASHBOARD_PATH,\n });\n}\n\n/**\n * Remove an alert dashboard from the database\n * @param id ID of the alert dashboard\n */\nexport function removeAlertDashboard(id: string) {\n return remove({ id, query_params: {}, path: DASHBOARD_PATH });\n}\n\n/**\n * Get list of alerts for dashbaord\n * @param id Alert dashboard ID\n */\nexport function listDashboardAlerts(id: string) {\n return query({\n query_params: {},\n fn: processAlert,\n path: `${DASHBOARD_PATH}/${id}/alerts`,\n });\n}\n\n///////////////////////////////////////////////////////////////\n////////////////////////// Alerts /////////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ALERT_PATH = 'alerts';\n\n/** Convert raw server data to an alert object */\nfunction processAlert(item: Partial<PlaceAlert>) {\n return new PlaceAlert(item);\n}\n\n/**\n * Query the available alerts\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAlerts(query_params: PlaceAlertQueryOptions = {}) {\n return query({\n query_params,\n fn: processAlert,\n path: ALERT_PATH,\n });\n}\n\n/**\n * Get the data for an alert\n * @param id ID of the alert to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAlert(id: string, query_params: PlaceAlertShowOptions = {}) {\n return show({\n id,\n query_params,\n fn: processAlert,\n path: ALERT_PATH,\n });\n}\n\n/**\n * Update the alert in the database\n * @param id ID of the alert\n * @param form_data New values for the alert\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAlert(\n id: string,\n form_data: Partial<PlaceAlert>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAlert,\n path: ALERT_PATH,\n });\n}\n\n/**\n * Add a new alert to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAlert(form_data: Partial<PlaceAlert>) {\n return create({\n form_data,\n query_params: {},\n fn: processAlert,\n path: ALERT_PATH,\n });\n}\n\n/**\n * Remove an alert from the database\n * @param id ID of the alert\n */\nexport function removeAlert(id: string) {\n return remove({ id, query_params: {}, path: ALERT_PATH });\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport class PlaceApplication extends PlaceResource {\n /** Unique identifier of the application */\n public readonly uid: string;\n /** Secret associated with the application */\n public readonly secret: string;\n /** ID of the domain that owns this application */\n public readonly owner_id: string;\n /** Access scopes required by users to access the application */\n public readonly scopes: string;\n /** Authentication redirect URI */\n public readonly redirect_uri: string;\n /** Skip authorization checks for the application */\n public readonly skip_authorization: boolean;\n /** Whether Client ID should be updated on changes */\n public readonly preserve_client_id: boolean;\n\n constructor(raw_data: Partial<PlaceApplication> = {}) {\n super(raw_data);\n this.uid = raw_data.uid || '';\n this.secret = raw_data.secret || '';\n this.owner_id = raw_data.owner_id || '';\n this.scopes = raw_data.scopes || '';\n this.redirect_uri = raw_data.redirect_uri || '';\n this.skip_authorization = raw_data.skip_authorization || false;\n this.preserve_client_id = raw_data.preserve_client_id || false;\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth/functions';\nimport { del, get, patch, post, put, responseHeaders } from '../http/functions';\nimport { toQueryString } from '../utilities/api';\nimport { convertPairStringToMap, parseLinkHeader } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n CreateParameters,\n QueryParameters,\n RemoveParameters,\n ShowParameters,\n TaskParameters,\n UpdateParameters,\n} from './interface';\n\n/** Total number of items returned by the last basic index query */\nexport function requestTotal(name: string): number {\n return _total[name] || 0;\n}\n\n/** Total number of items returned by the last basic index query */\nexport function lastRequestTotal(name: string): number {\n return _last_total[name] || 0;\n}\n\n/** URL for the next query page */\nexport function next(): string {\n return _next;\n}\n/**\n * @private\n * Map of promises for Service\n */\nconst _observables: HashMap<Observable<any>> = {};\n/**\n * @private\n * Total number of items returned by the last basic index query\n */\nlet _total: HashMap<number> = {};\n/**\n * @private\n * Total number of items returned by the last index query\n */\nlet _last_total: HashMap<number> = {};\n/**\n * @private\n * URL to get the next page\n */\nlet _next: string = '';\n\nconst pass_fn = (_: any) => _;\n\n/**\n * @private\n */\nexport function cleanupAPI() {\n for (const key in _observables) {\n if (_observables[key]) {\n delete _observables[key];\n }\n }\n _total = {};\n _last_total = {};\n _next = '';\n}\n\nexport type QueryResponse<T> = Observable<{\n total: number;\n next: () => QueryResponse<T> | null;\n data: T[];\n}>;\n\n/**\n * @hidden\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\nexport function query<T>(q: QueryParameters<T>): QueryResponse<T> {\n const { query_params, fn, path, endpoint } = q;\n const query_str = toQueryString(query_params);\n const url = `${endpoint || apiEndpoint()}${path ? '/' + path : ''}${\n query_str ? '?' + query_str : ''\n }`;\n return get(url).pipe(\n map((resp: HashMap) => {\n const details = handleHeaders(url, query_str, path);\n return {\n total: details.total || 0,\n next: details.next\n ? () =>\n query({\n query_params: details.next as HashMap,\n fn,\n endpoint,\n path,\n })\n : null,\n data:\n resp && resp instanceof Array\n ? resp.map((i) => (fn || pass_fn)(i))\n : resp && !(resp instanceof Array) && resp.results\n ? (resp.results as HashMap[]).map((i) => process(i))\n : [],\n } as any;\n }),\n );\n}\n\n/**\n * @hidden\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\nexport function show<T>(details: ShowParameters<T>): Observable<T> {\n const { query_params, id, path, fn, options } = details;\n const query_str = toQueryString(query_params);\n const url = `${apiEndpoint()}/${path}/${id}${\n query_str ? '?' + query_str : ''\n }`;\n return get(url, options).pipe(map((resp: any) => (fn || pass_fn)(resp)));\n}\n\n/**\n * @hidden\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\nexport function create<T>(details: CreateParameters<T>): Observable<T> {\n const { query_params, form_data, path, fn } = details;\n const query_str = toQueryString(query_params);\n const url = `${apiEndpoint()}/${path}${query_str ? '?' + query_str : ''}`;\n const observable = post(url, form_data).pipe(\n map((resp: any) => (fn || pass_fn)(resp)),\n );\n return observable;\n}\n\n/**\n * @hidden\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\nexport function task<T = any>(details: TaskParameters<T>): Observable<T> {\n const { id, task_name, form_data, method, path, callback } = details;\n const query_str = toQueryString(form_data);\n const url = `${apiEndpoint()}/${path}/${id}/${task_name}`;\n const request =\n method === 'post' || method === 'put' || !method\n ? (method === 'put' ? put : post)(url, form_data)\n : (method === 'del' ? del : get)(\n `${url}${query_str ? '?' + query_str : ''}`,\n {\n response_type: 'json',\n },\n );\n return request.pipe(\n map((resp: HashMap) => (callback || ((_: any) => _))(resp)),\n );\n}\n\n/**\n * @hidden\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\nexport function update<T>(details: UpdateParameters<T>): Observable<T> {\n const { id, query_params, form_data, method, path, fn } = details;\n const query_str = toQueryString({\n ...query_params,\n version: form_data.version || 0,\n });\n const url = `${apiEndpoint()}/${path}/${id}${\n query_str ? '?' + query_str : ''\n }`;\n return (method === 'put' ? put : patch)(url, form_data).pipe(\n map((resp: any) => (fn || pass_fn)(resp)),\n );\n}\n\n/**\n * @hidden\n * Make delete request for the given item\n * @param id ID of item\n */\nexport function remove(details: RemoveParameters): Observable<HashMap> {\n const { id, query_params, path } = details;\n const query_str = toQueryString(query_params);\n const url = `${apiEndpoint()}/${path}/${id}${\n query_str ? '?' + query_str : ''\n }`;\n return del(url);\n}\n\n/**\n * @private\n * @param url\n * @param query_str\n * @param name\n */\nexport function handleHeaders(url: string, query_str: string, name: string) {\n const headers = responseHeaders(\n url[0] === '/' ? `${location.origin}${url}` : url,\n );\n const details: { total: number; next: HashMap<string> | null } = {\n total: 0,\n next: null,\n };\n\n if (headers && headers['x-total-count']) {\n const total_value = +(headers['x-total-count'] || 0);\n if (\n query_str.length < 2 ||\n (query_str.length < 12 && query_str.indexOf('offset=') >= 0)\n ) {\n _total[name] = total_value;\n }\n _last_total[name] = total_value;\n details.total = total_value;\n }\n if (headers && headers.link) {\n const link_map = parseLinkHeader(headers.link || '');\n _next = link_map.next;\n details.next = convertPairStringToMap(_next.split('?')[1]);\n }\n return details;\n}\n\nfunction process(data: HashMap) {\n return data as any;\n}\n","import { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceApplication } from './application';\nimport { PlaceApplicationQueryOptions } from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'oauth_apps';\n\n/** Convert raw server data to an application object */\nfunction process(item: Partial<PlaceApplication>) {\n return new PlaceApplication(item);\n}\n\n/**\n * Query the available applications\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryApplications(\n query_params: PlaceApplicationQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for an application\n * @param id ID of the application to retrieve\n */\nexport function showApplication(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the application in the database\n * @param id ID of the application\n * @param form_data New values for the application\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateApplication(\n id: string,\n form_data: Partial<PlaceApplication>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new application to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addApplication(form_data: Partial<PlaceApplication>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove an application from the database\n * @param id ID of the application\n */\nexport function removeApplication(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport enum AuthType {\n Certificate,\n NoAuth,\n UserPassword,\n}\n\nexport class PlaceMQTTBroker extends PlaceResource {\n /** Unique identifier for the Broker */\n public readonly id: string;\n /** Name of the Broker */\n public readonly name: string;\n /** Type of authentication used for connecting to the Broker */\n public readonly auth_type: AuthType;\n /** Details of the Broker */\n public readonly description: string;\n /** Host name of the Broker endpoint */\n public readonly host: string;\n /** Port number of the Broker endpoint */\n public readonly port: number;\n /** Whether connection to the Broker endpoint has TLS */\n public readonly tls: boolean;\n /** Username to use for connecting to Broker */\n public readonly username: string;\n /** Password to use for connecting to Broker */\n public readonly password: string;\n /** Certificate details */\n public readonly certificate: string;\n /** User secret */\n public readonly secret: string;\n /** */\n public readonly filters: string[];\n\n constructor(data: Partial<PlaceMQTTBroker> = {}) {\n super();\n this.id = data.id || '';\n this.name = data.name || '';\n this.auth_type = data.auth_type || AuthType.UserPassword;\n this.description = data.description || '';\n this.host = data.host || '';\n this.port = data.port || 1883;\n this.tls = data.tls || false;\n this.username = data.username || '';\n this.password = data.password || '';\n this.certificate = data.certificate || '';\n this.secret = data.secret || '';\n this.filters = data.filters || [];\n }\n}\n","import { create, query, remove, show, update } from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport { PlaceMQTTBroker } from './broker';\n\n/**\n * @private\n */\nconst PATH = 'brokers';\n\n/** Convert raw server data to a broker object */\nfunction process(item: Partial<PlaceMQTTBroker>) {\n return new PlaceMQTTBroker(item);\n}\n\n/**\n * Query the available MQTT brokers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryBrokers(query_params: HashMap = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a MQTT broker\n * @param id ID of the broker to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showBroker(id: string, query_params: HashMap = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the MQTT broker data\n * @param id ID of the broker\n * @param form_data New values for the broker\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateBroker(\n id: string,\n form_data: Partial<PlaceMQTTBroker>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new MQTT broker to the database\n * @param form_data Broker data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addBroker(form_data: Partial<PlaceMQTTBroker>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a MQTT broker from the database\n * @param id ID of the broker\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeBroker(id: string, query_params: HashMap = {}) {\n return remove({ id, query_params, path: PATH });\n}\n","import { humanReadableByteCount } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\n\ninterface PlaceClusterRunCounts {\n modules: number;\n drivers: number;\n}\nexport interface PlaceClusterNode {\n hostname: string;\n cpu_count: number;\n core_cpu: number;\n total_cpu: number;\n memory_total: number;\n memory_usage: number;\n core_memory: number;\n run_count?: PlaceClusterRunCounts;\n}\n\ninterface PlaceClusterComplete extends PlaceCluster {\n core_id?: string;\n status: HashMap;\n load: {\n local: PlaceClusterNode;\n edge: HashMap<PlaceClusterNode>;\n };\n}\nexport class PlaceCluster {\n /** Unique identifier of the application */\n public readonly id: string;\n /** List of running drivers */\n public readonly compiled_drivers: readonly string[];\n /** List of running drivers */\n public readonly available_repositories: readonly string[];\n /** Number of actively running drivers */\n public readonly running_drivers: number;\n /** Number of actively running drivers */\n public readonly module_instances: number;\n /** List of repositories that are unavailable to the cluster */\n public readonly unavailable_repositories: readonly string[];\n /** List of drivers that are unavailable to the cluster */\n public readonly unavailable_drivers: readonly string[];\n /** Name of the cluster */\n public readonly hostname: string;\n /** Number of CPUs available on the host */\n public readonly cpu_count: number;\n /** Percentage of CPU usage by the cluster's root process */\n public readonly core_cpu: number;\n /** Percentage of CPU usage by the whole cluster */\n public readonly total_cpu: number;\n /** Total amount of available memory on the host in KB */\n public readonly memory_total: number;\n /** Total amount of memory used by the whole cluster in KB */\n public readonly memory_usage: number;\n /** Total amount of memory used by the cluster root process in KB */\n public readonly core_memory: number;\n /** Percentage of memory used by the cluster */\n public readonly memory_percentage: number;\n /** Display string for the memory usage */\n public readonly used_memory: string;\n /** Display string for the memory total */\n public readonly total_memory: string;\n /** List of edge nodes within the cluster */\n public readonly edge_nodes: PlaceClusterNode[];\n\n public readonly run_counts: PlaceClusterRunCounts;\n\n constructor(raw_data: Partial<PlaceClusterComplete> = {}) {\n this.id = raw_data.id || raw_data.core_id || '';\n this.compiled_drivers = raw_data.compiled_drivers || [];\n this.available_repositories =\n raw_data.available_repositories ||\n raw_data.status?.available_repositories ||\n [];\n this.running_drivers =\n raw_data.running_drivers || raw_data.status?.running_drivers || 0;\n this.module_instances =\n raw_data.module_instances || raw_data.status?.module_instances || 0;\n this.unavailable_repositories =\n raw_data.unavailable_repositories ||\n raw_data.status?.unavailable_repositories ||\n [];\n this.unavailable_drivers =\n raw_data.unavailable_drivers ||\n raw_data.status?.unavailable_drivers ||\n [];\n this.hostname =\n raw_data.hostname || raw_data.load?.local.hostname || '';\n this.cpu_count =\n raw_data.cpu_count || raw_data.load?.local.cpu_count || 0;\n this.core_cpu = raw_data.core_cpu || raw_data.load?.local.core_cpu || 0;\n this.total_cpu =\n raw_data.total_cpu || raw_data.load?.local.total_cpu || 0;\n this.memory_total =\n raw_data.memory_total || raw_data.load?.local.memory_total || 0;\n this.memory_usage =\n raw_data.memory_usage || raw_data.load?.local.memory_usage || 0;\n this.core_memory =\n raw_data.core_memory || raw_data.load?.local.core_memory || 0;\n this.run_counts = raw_data.run_counts ||\n raw_data.status?.run_counts?.local || { modules: 0, drivers: 0 };\n this.memory_percentage = +(\n (this.memory_usage / this.memory_total) *\n 100\n ).toFixed(4);\n this.used_memory = humanReadableByteCount(this.memory_usage * 1024);\n this.total_memory = humanReadableByteCount(this.memory_total * 1024);\n const edges = raw_data.load?.edge || {};\n this.edge_nodes =\n raw_data.edge_nodes ||\n Object.keys(edges).map((_) => ({\n id: _,\n ...edges[_],\n run_count: raw_data.status?.run_count?.edge[_] || {},\n })) ||\n [];\n }\n}\n","import { humanReadableByteCount } from '../utilities/general';\n\n/**\n * @hidden\n */\nexport interface PlaceProcessComplete extends Partial<PlaceProcess> {\n driver?: string;\n percentage_cpu?: number;\n local?: { status: PlaceProcessComplete };\n edge?: { status: PlaceProcessComplete };\n}\n\nexport class PlaceProcess {\n /** ID of the cluster associated with the process */\n public readonly cluster_id: string;\n /** Unique identifier of the application */\n public readonly id: string;\n /** List of module IDs that are running in this process */\n public readonly modules: readonly string[];\n /** Whether the process is running */\n public readonly running: boolean;\n /** Number if modules instances running in this process */\n public readonly module_instances: number;\n /** Last exit code of the process */\n public readonly last_exit_code: number;\n /** Number of times this process has been launched */\n public readonly launch_count: number;\n /** Time that the latest instance of the process launched */\n public readonly launch_time: number;\n /** Current CPU usage of the process */\n public readonly cpu_usage: number;\n /** Total amount of available memory on the host in KB */\n public readonly memory_total: number;\n /** Total amount of memory used by the process in KB */\n public readonly memory_usage: number;\n /** Display string for the memory usage */\n public readonly used_memory: string;\n /** Display string for the memory total */\n public readonly total_memory: string;\n\n constructor(_cluster_id: string, raw_data: PlaceProcessComplete = {}) {\n this.cluster_id = _cluster_id;\n this.id = raw_data.id || raw_data.driver || '';\n this.modules = raw_data.modules || [];\n this.running = raw_data.running || false;\n this.module_instances =\n raw_data.module_instances ||\n raw_data.edge?.status?.module_instances ||\n raw_data.local?.status?.module_instances ||\n 0;\n this.last_exit_code =\n raw_data.last_exit_code ||\n raw_data.edge?.status?.last_exit_code ||\n raw_data.local?.status?.last_exit_code ||\n 0;\n this.launch_count =\n raw_data.launch_count ||\n raw_data.edge?.status?.launch_count ||\n raw_data.local?.status?.launch_count ||\n 0;\n this.launch_time =\n raw_data.launch_time ||\n raw_data.edge?.status?.launch_time ||\n raw_data.local?.status?.launch_time ||\n 0;\n this.cpu_usage =\n raw_data.cpu_usage ||\n raw_data.percentage_cpu ||\n raw_data.edge?.status?.percentage_cpu ||\n raw_data.local?.status?.percentage_cpu ||\n 0;\n this.memory_total =\n raw_data.memory_total ||\n raw_data.edge?.status?.memory_total ||\n raw_data.local?.status?.memory_total ||\n 0;\n this.memory_usage =\n raw_data.memory_usage ||\n raw_data.edge?.status?.memory_usage ||\n raw_data.local?.status?.memory_usage ||\n 0;\n this.used_memory = humanReadableByteCount(this.memory_usage * 1024);\n this.total_memory = humanReadableByteCount(this.memory_total * 1024);\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth/functions';\nimport { get, post } from '../http/functions';\nimport { query, remove, show } from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport { PlaceCluster } from './cluster';\nimport {\n PlaceClusterQueryOptions,\n PlaceClusterShowOptions,\n PlaceClusterTerminateOptions,\n PlaceClusterVersions,\n} from './interfaces';\nimport { PlaceProcess } from './process';\n\n/**\n * @private\n */\nconst PATH = 'cluster';\n\n/** Convert raw server data to a cluster object */\nfunction process(item: Partial<PlaceCluster>) {\n return new PlaceCluster(item);\n}\n\n/**\n * Query the available clusters\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryClusters(query_params: PlaceClusterQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the details for a specified cluster\n * @param id ID of the cluster to query\n * @param query_params Query parameters to add the to request URL\n */\nexport function showCluster(\n id: string,\n query_params: PlaceClusterShowOptions = {},\n) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Query the available processes for a cluster\n * @param id ID of the cluster to query\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryProcesses(\n id: string,\n query_params: PlaceClusterShowOptions = {},\n) {\n return show({\n id,\n query_params,\n fn: (list: any) =>\n list.map(\n (item: Partial<PlaceProcess>) => new PlaceProcess(id, item),\n ),\n path: PATH,\n });\n}\n\n/**\n * Terminate a process in a cluster\n * @param id ID of the cluster associated with the process\n * @param query_params Query parameters including driver name (required)\n */\nexport function terminateProcess(\n id: string,\n query_params: PlaceClusterTerminateOptions,\n) {\n return remove({ id, query_params, path: PATH });\n}\n\n/**\n * Force the core nodes to perform a cluster rebalance\n */\nexport function clusterRebalance(): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/rebalance`;\n return post(url, {}).pipe(map(() => undefined));\n}\n\n/**\n * Get the core node versions\n */\nexport function clusterVersions(): Observable<PlaceClusterVersions> {\n const url = `${apiEndpoint()}${PATH}/versions`;\n return get(url).pipe(map((resp: HashMap) => resp as PlaceClusterVersions));\n}\n","import { PlaceResource } from '../resources/resource';\nimport { HashMap } from '../utilities/types';\n\nexport class PlaceDomain extends PlaceResource {\n /** Domain name */\n public readonly domain: string;\n /** Login URL for the domain */\n public readonly login_url: string;\n /** Logout URL for the domain */\n public readonly logout_url: string;\n /** Description of the domain domain */\n public readonly description: string;\n /** Local configuration for the domain */\n public readonly config: HashMap;\n /** Internal settings for the domain */\n public readonly internals: HashMap;\n /** List of email domains associated with the domain */\n public readonly email_domains: string[];\n\n constructor(raw_data: Partial<PlaceDomain> = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this.domain = raw_data.domain || '';\n this.login_url = raw_data.login_url || '';\n this.logout_url = raw_data.logout_url || '';\n this.config = raw_data.config || {};\n this.internals = raw_data.internals || {};\n this.email_domains = raw_data.email_domains || [];\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth/functions';\nimport { get } from '../http/functions';\nimport { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceResourceQueryOptions } from '../resources/interface';\nimport { HashMap } from '../utilities/types';\nimport { PlaceDomain } from './domain';\n\n/**\n * @private\n */\nconst PATH = 'domains';\n\n/** Convert raw server data to a domain object */\nfunction process(item: Partial<PlaceDomain>) {\n return new PlaceDomain(item);\n}\n\n/**\n * Query the available domains\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryDomains(query_params: PlaceResourceQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a domain\n * @param id ID of the domain to retrieve\n */\nexport function showDomain(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the domain in the database\n * @param id ID of the domain\n * @param form_data New values for the domain\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateDomain(\n id: string,\n form_data: Partial<PlaceDomain>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new domain to the database\n * @param form_data Domain data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addDomain(form_data: Partial<PlaceDomain>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a domain from the database\n * @param id ID of the domain\n */\nexport function removeDomain(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Find the domain name by looking into domain registered email domains\n * @param email Email address to lookup\n */\nexport function lookupDomainByEmail(email: string): Observable<PlaceDomain> {\n const url = `${apiEndpoint()}${PATH}/lookup/${encodeURIComponent(email)}`;\n return get(url).pipe(map((resp: HashMap) => process(resp as Partial<PlaceDomain>)));\n}\n","import { PlaceResourceQueryOptions } from '../resources/interface';\n\n/** Access level for the settings string */\nexport enum EncryptionLevel {\n /** Full access to the settings string */\n None = 0,\n /** Only support users are allowed to view the settings contents */\n Support = 1,\n /** Only admin users are allowed to view the settings contents */\n Admin = 2,\n /** Never show the settings contents */\n NeverDisplay = 3,\n}\n\n/** Allowable query parameters for settings index endpoint */\nexport interface PlaceSettingsQueryOptions extends PlaceResourceQueryOptions {\n /** ID of the parent zone, system, module or driver to grab settings for */\n parent_id?: string;\n}\n\n/** Allowable query parameters for settings history endpoint */\nexport interface PlaceSettingsHistoryOptions {\n /** Maximum number of results to return */\n limit?: number;\n /** Starting offset of the result set for pagination */\n offset?: number;\n}\n","import { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from './interfaces';\n\nexport class PlaceSettings extends PlaceResource {\n /** ID of the parent zone/system/module/driver */\n public readonly parent_id: string;\n /** Unix timestamp in seconds of when the settings where last updated */\n public readonly updated_at: number;\n /** Access level for the settings data */\n public readonly encryption_level: EncryptionLevel;\n /** Contents of the settings */\n public readonly settings_string: string;\n /** Top level keys for the parsed settings */\n public readonly keys: string[];\n /** ID of the user that last modified the metadata */\n public readonly modified_by_id: string;\n\n /** Contents of the settings */\n public get value(): string {\n return this.settings_string;\n }\n\n constructor(raw_data: Partial<PlaceSettings> = {}) {\n super(raw_data);\n this.parent_id = raw_data.parent_id || '';\n this.updated_at =\n raw_data.updated_at || Math.floor(new Date().getTime() / 1000);\n this.settings_string = raw_data.settings_string || '';\n this.encryption_level =\n raw_data.encryption_level || EncryptionLevel.None;\n this.keys = raw_data.keys || [];\n this.modified_by_id = raw_data.modified_by_id || '';\n }\n}\n","/** Allowed roles for Place Modules */\nexport enum PlaceDriverRole {\n SSH = 0,\n Device = 1,\n Service = 2,\n Websocket = 3,\n Logic = 99,\n}\n","import { AlertSeverity } from '../alerts/alert';\nimport { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from '../settings/interfaces';\nimport { PlaceSettings } from '../settings/settings';\nimport { PlaceDriverRole } from './enums';\n\nexport class PlaceDriver extends PlaceResource {\n /** Place class name of the driver */\n public readonly class_name: string;\n /** Description of the driver functionality */\n public readonly description: string;\n /** Name to use for modules that inherit this driver */\n public readonly module_name: string;\n /** Role of the driver in engine */\n public readonly role: PlaceDriverRole;\n /** Default URI for the driver */\n public readonly default_uri: string;\n /** Default port number for the driver */\n public readonly default_port: number;\n /** ID of the repository the driver is from */\n public readonly repository_id: string;\n /** Name of the file from the repository to load the driver logic from */\n public readonly file_name: string;\n /** Version of the driver logic to use */\n public readonly commit: string;\n /** Ignore connection issues */\n public readonly ignore_connected: boolean;\n /** Whether newer version of driver is available */\n public readonly update_available: boolean;\n public readonly update_info?: {\n commit: string;\n message: string;\n author: string;\n date: string;\n };\n /** */\n public readonly alert_level: AlertSeverity;\n /** Tuple of user settings of differring encryption levels for the driver */\n public readonly settings: [\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n ];\n\n constructor(raw_data: Partial<PlaceDriver> = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this.module_name = raw_data.module_name || '';\n this.role = raw_data.role ?? PlaceDriverRole.Logic;\n this.default_uri = raw_data.default_uri || '';\n this.default_port = raw_data.default_port || 1;\n this.ignore_connected = raw_data.ignore_connected || false;\n this.class_name = raw_data.class_name || '';\n this.repository_id = raw_data.repository_id || '';\n this.file_name = raw_data.file_name || '';\n this.commit = raw_data.commit || '';\n this.update_available = raw_data.update_available || false;\n this.update_info = raw_data.update_info;\n this.alert_level = raw_data.alert_level || 'medium';\n this.settings = raw_data.settings || [null, null, null, null];\n if (typeof this.settings !== 'object') {\n (this as any).settings = [null, null, null, null];\n }\n for (const level in EncryptionLevel) {\n if (!isNaN(Number(level)) && !this.settings[level]) {\n this.settings[level] = new PlaceSettings({\n parent_id: this.id,\n encryption_level: +level,\n });\n }\n }\n }\n}\n","import {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceDriver } from './driver';\nimport { PlaceDriverQueryOptions, PlaceDriverShowOptions } from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'drivers';\n\n/** Convert raw server data to a driver object */\nfunction process(item: Partial<PlaceDriver>) {\n return new PlaceDriver(item);\n}\n\n/**\n * Query the available drivers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryDrivers(query_params: PlaceDriverQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a driver\n * @param id ID of the driver to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showDriver(id: string, query_params: PlaceDriverShowOptions = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the driver in the database\n * @param id ID of the driver\n * @param form_data New values for the driver\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateDriver(\n id: string,\n form_data: Partial<PlaceDriver>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new driver to the database\n * @param form_data Driver data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addDriver(form_data: Partial<PlaceDriver>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a driver from the database\n * @param id ID of the driver\n */\nexport function removeDriver(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Request a recompilation of the driver's code\n * @param id ID of the driver\n */\nexport function recompileDriver(id: string) {\n return task({ id, task_name: 'recompile', path: PATH });\n}\n\n/**\n * Request a reload of the driver's binary\n * @param id ID of the driver\n */\nexport function reloadDriver(id: string) {\n return task({ id, task_name: 'reload', path: PATH });\n}\n\n/**\n * Query the compiled state of the driver's code\n * @param id ID of the driver\n */\nexport function isDriverCompiled(id: string) {\n return task({ id, task_name: 'compiled', method: 'get', path: PATH });\n}\n\n/**\n * Get the drivers readme file if available\n * @param id ID of the driver\n */\nexport function driverReadme(id: string) {\n return task<string>({ id, task_name: 'readme', method: 'get', path: PATH });\n}\n","import { PlaceResource } from '../resources/resource';\nimport { HashMap } from '../utilities/types';\n\nexport class PlaceEdge extends PlaceResource {\n public readonly description: string;\n public readonly secret: string;\n public readonly x_api_key: string;\n public readonly online: boolean;\n public readonly last_seen: number;\n\n constructor(raw_data: Partial<PlaceEdge> = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this.secret = raw_data.secret || '';\n this.x_api_key = raw_data.x_api_key || '';\n this.last_seen = (raw_data.last_seen || 0) * 1000 || Date.now();\n this.online = raw_data.online || false;\n }\n\n public toJSON(): HashMap {\n const obj = super.toJSON();\n delete obj.last_seen;\n return obj;\n }\n}\n","import { apiEndpoint } from '../auth/functions';\nimport { PlaceAuthSourceQueryOptions } from '../auth-sources/interfaces';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceEdge } from './edge';\n\n/**\n * @private\n */\nconst PATH = 'edges';\n\n/** Convert raw server data to an Edge object */\nfunction process(item: Partial<PlaceEdge>) {\n return new PlaceEdge(item);\n}\n\n/**\n * Query the available Edges\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryEdges(query_params: PlaceAuthSourceQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for an Edge\n * @param id ID of the Edge to retrieve\n */\nexport function showEdge(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the Edge in the database\n * @param id ID of the Edge\n * @param form_data New values for the Edge\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateEdge(\n id: string,\n form_data: Partial<PlaceEdge>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new Edge node to the database\n * @param form_data Edge data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addEdge(form_data: Partial<PlaceEdge>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove an Edge node from the database\n * @param id ID of the Edge\n */\nexport function removeEdge(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Generate token for Edge connection\n * @param id ID of the Edge\n */\nexport function retrieveEdgeToken(id: string) {\n return task<{ token: string }>({\n id,\n task_name: 'token',\n form_data: {},\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get the edge control websocket URL.\n * This is the endpoint that edge devices use to connect to the cluster.\n */\nexport function edgeControlUrl(): string {\n const endpoint = apiEndpoint();\n const wsProtocol = endpoint.startsWith('https') ? 'wss:' : 'ws:';\n const httpProtocol = endpoint.startsWith('https') ? 'https:' : 'http:';\n return endpoint.replace(httpProtocol, wsProtocol) + `${PATH}/control`;\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport class PlaceLDAPSource extends PlaceResource {\n /** Type of auth source */\n public readonly type = 'ldap';\n /** ID of the authority associted with the auth method */\n public readonly authority_id: string;\n /** HTTP URL of the SSO provider */\n public readonly host: string;\n /** Application ID from the SSO provider providing the Ldap services */\n public readonly port: number;\n /** Application secret from the SSO provider providing the Ldap services */\n public readonly auth_method: 'plain' | 'ssl' | 'tls';\n /** Mapping of engine values to SSO provider values */\n public readonly uid: string;\n /** URL from the SSO provider for authorisation */\n public readonly base: string;\n /** Default DN to user when performing a user lookup */\n public readonly bind_dn: string;\n /** Password to access LDAP service */\n public readonly password: string;\n /**\n * LDAP Filter. Can be used instead of `uid`.\n * e.g. (&(uid=%{username})(memberOf=cn=myapp-users,ou=groups,dc=example,dc=com))\n */\n public readonly filter: string;\n\n constructor(raw_data: Partial<PlaceLDAPSource> = {}) {\n super(raw_data);\n this.authority_id = raw_data.authority_id || '';\n this.host = raw_data.host || '';\n this.port = raw_data.port || 636;\n this.auth_method = raw_data.auth_method || 'ssl';\n this.uid = raw_data.uid || '';\n this.base = raw_data.base || '';\n this.bind_dn = raw_data.bind_dn || '';\n this.password = raw_data.password || '';\n this.filter = raw_data.filter || '';\n }\n}\n","import { PlaceAuthSourceQueryOptions } from '../auth-sources/interfaces';\nimport { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceLDAPSource } from './ldap-source';\n\n/**\n * @private\n */\nconst PATH = 'ldap_auths';\n\n/** Convert raw server data to an LDAP source object */\nfunction process(item: Partial<PlaceLDAPSource>) {\n return new PlaceLDAPSource(item);\n}\n\n/**\n * Query the available LDAP sources\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryLDAPSources(\n query_params: PlaceAuthSourceQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for an LDAP source\n * @param id ID of the LDAP source to retrieve\n */\nexport function showLDAPSource(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the LDAP source in the database\n * @param id ID of the LDAP source\n * @param form_data New values for the LDAP source\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateLDAPSource(\n id: string,\n form_data: Partial<PlaceLDAPSource>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new LDAP source to the database\n * @param form_data LDAP source data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addLDAPSource(form_data: Partial<PlaceLDAPSource>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove an LDAP source from the database\n * @param id ID of the LDAP source\n */\nexport function removeLDAPSource(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n","import { HashMap } from '../utilities/types';\n\n/**\n * @hidden\n */\nexport interface PlaceMetadataComplete extends Partial<PlaceMetadata> {\n parent_id?: string;\n}\n\nexport class PlaceMetadata {\n /** ID of the parent resource associated with the metadata */\n public readonly id: string;\n /** Name/ID of the zone metadata */\n public readonly name: string;\n /** Description of what this metadata represents */\n public readonly description: string;\n /** Metadata associated with this key. */\n public readonly details: HashMap | any[];\n /** List user groups allowed to edit the metadata */\n public readonly editors: readonly string[];\n /** JSON schema associated with the metadata details */\n public readonly schema: string;\n /** Unix timestamp that the metadata was last modified at */\n public readonly updated_at: number;\n /** ID of the user that last modified the metadata */\n public readonly modified_by_id: string;\n /** Version of the data */\n public readonly version: number;\n\n constructor(data: PlaceMetadataComplete = {}) {\n this.id = data.id || data.parent_id || '';\n this.name = data.name || '';\n this.description = data.description || '';\n try {\n this.details =\n (typeof data.details === 'string'\n ? JSON.parse(data.details)\n : data.details) || {};\n } catch {\n this.details = data.details || {};\n }\n this.editors = data.editors || [];\n this.schema = data.schema || '';\n this.updated_at = (data.updated_at || 0) * 1000 || Date.now();\n this.modified_by_id = data.modified_by_id || '';\n this.version = data.version || 0;\n }\n}\n","import { HttpVerb } from '../http/interfaces';\nimport { PlaceResource } from '../resources/resource';\nimport { PlaceSystem } from '../systems/system';\nimport { TriggerActions, TriggerConditions } from './interfaces';\n\n/**\n * @hidden\n */\nexport interface PlaceTriggerComplete extends Partial<PlaceTrigger> {\n trigger_count?: number;\n control_system?: PlaceSystem;\n}\n\nexport class PlaceTrigger extends PlaceResource {\n /** Name of the system assocaited with the trigger */\n public readonly system_name: string;\n /** Number of times the trigger has been activated/triggered */\n public readonly activated_count: number;\n /** Description of the trigger */\n public readonly description: string;\n /** Duration with which to ignore sequential activations of the trigger */\n public readonly debounce_period: number;\n /** Whether the trigger should take priority */\n public readonly important: boolean;\n /** Whether trigger is enabled on the associated zone or system */\n public readonly enabled: boolean;\n /** Whether the trigger can call webhooks */\n public readonly enable_webhook: boolean;\n /** Whether the trigger instance can execute methods */\n public readonly exec_enabled: boolean;\n /** Auth key for trigger's webhook */\n public readonly webhook_secret: string;\n /** HTTP verbs supported by the webhook */\n public readonly supported_methods: readonly HttpVerb[];\n /** ID of the system associated with the trigger */\n public readonly control_system_id: string;\n /** ID of the zone associated with the trigger */\n public readonly zone_id: string;\n /** ID of the Parent trigger */\n public readonly trigger_id: string;\n /** List of playlist IDs associated with the system */\n public readonly playlists: readonly string[];\n // Whether condition checks should match any single condition to pass or all of them\n public readonly any_match: boolean;\n\n /** ID of the system associated with the trigger */\n public get system_id(): string {\n return this.control_system_id;\n }\n\n /** Actions to perform when the trigger is activated */\n public get actions(): TriggerActions {\n const actions = this._actions;\n const fn_list = (actions.functions || []).map((i) => ({\n ...i,\n args: { ...i.args },\n }));\n const mail_list = (actions.mailers || []).map((i) => ({\n ...i,\n emails: [...i.emails],\n }));\n return { functions: fn_list, mailers: mail_list };\n }\n /** Conditions for activating the trigger */\n public get conditions(): TriggerConditions {\n const conditions = this._conditions;\n const cmp_list = (conditions.comparisons || []).map((i) => ({\n ...i,\n left: typeof i.left === 'object' ? { ...i.left } : i.left,\n right: typeof i.right === 'object' ? { ...i.right } : i.right,\n }));\n const time_list = (conditions.time_dependents || []).map((i) => ({\n ...i,\n }));\n return { comparisons: cmp_list, time_dependents: time_list };\n }\n\n /** Actions to perform when the trigger is activated */\n private _actions: TriggerActions;\n /** Conditions for activating the trigger */\n private _conditions: TriggerConditions;\n\n constructor(raw_data: PlaceTriggerComplete = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this._actions = raw_data.actions || { functions: [], mailers: [] };\n this._conditions = raw_data.conditions || {\n comparisons: [],\n time_dependents: [],\n };\n this.debounce_period = raw_data.debounce_period || 0;\n this.important = raw_data.important || false;\n this.enabled = raw_data.enabled || false;\n this.webhook_secret = raw_data.webhook_secret || '';\n this.control_system_id =\n raw_data.system_id || raw_data.control_system_id || '';\n this.zone_id = raw_data.zone_id || '';\n this.system_name =\n raw_data.system_name ||\n (raw_data.control_system ? raw_data.control_system.name : '');\n this.enable_webhook = raw_data.enable_webhook || false;\n this.exec_enabled = raw_data.exec_enabled || false;\n this.supported_methods = raw_data.supported_methods || ['POST'];\n this.activated_count =\n raw_data.activated_count || raw_data.trigger_count || 0;\n this.playlists = raw_data.playlists || [];\n this.trigger_id = raw_data.trigger_id || '';\n this.any_match = raw_data.any_match || false;\n }\n}\n","import { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from '../settings/interfaces';\nimport { PlaceSettings } from '../settings/settings';\nimport { PlaceTrigger } from '../triggers/trigger';\n\n/**\n * @hidden\n */\nexport interface PlaceZoneComplete extends Partial<PlaceZone> {\n trigger_data?: PlaceTrigger[];\n}\n\nexport class PlaceZone extends PlaceResource {\n /** Tuple of user settings of differring encryption levels for the zone */\n public readonly settings: [\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n ] = [null, null, null, null];\n /** Description of the zone's purpose */\n public readonly description: string;\n /** ID of the parent zone */\n public readonly parent_id: string;\n /** List of triggers associated with the zone */\n public readonly triggers: readonly string[];\n /** List of tags associated with the zone */\n public readonly tags: string[];\n /** Geo-location details associated with the zone */\n public readonly location: string;\n /** Custom display name for the zone */\n public readonly display_name: string;\n /** Organisational code associated with the zone */\n public readonly code: string;\n /** Organisational categorisation of the zone */\n public readonly type: string;\n /** Count of resources associated with the zone */\n public readonly count: number;\n /** Amount of physical capacity associated with the zone */\n public readonly capacity: number;\n /** ID or URL of or in a map associated with the zone */\n public readonly map_id: string;\n /** List of image URLs */\n public readonly images: string[];\n /** Timezone of the associated real world location */\n public readonly timezone: string;\n /** List of playlist IDs associated with the system */\n public readonly playlists: readonly string[];\n /**\n * List of modules associated with the system.\n * Only available from the show method with the `complete` query parameter\n */\n public readonly trigger_list: readonly PlaceTrigger[] = [];\n\n constructor(raw_data: PlaceZoneComplete = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this.tags = raw_data.tags || [];\n this.triggers = raw_data.triggers || [];\n this.settings = raw_data.settings || [null, null, null, null];\n this.parent_id = raw_data.parent_id || '';\n this.location = raw_data.location || '';\n this.display_name = raw_data.display_name || '';\n this.code = raw_data.code || '';\n this.type = raw_data.type || '';\n this.count = raw_data.count || 0;\n this.capacity = raw_data.capacity || 0;\n this.map_id = raw_data.map_id || '';\n this.timezone = raw_data.timezone || '';\n this.images = raw_data.images || [];\n this.playlists = raw_data.playlists || [];\n if (typeof this.settings !== 'object') {\n (this as any).settings = [null, null, null, null];\n }\n for (const level in EncryptionLevel) {\n if (!isNaN(Number(level)) && !this.settings[level]) {\n this.settings[level] = new PlaceSettings({\n parent_id: this.id,\n encryption_level: +level,\n });\n }\n }\n if (raw_data.trigger_data && raw_data.trigger_data instanceof Array) {\n this.trigger_list = raw_data.trigger_data.map(\n (trigger) => new PlaceTrigger(trigger),\n );\n }\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { PlaceZone } from '../zones/zone';\nimport { PlaceMetadata } from './metadata';\n\nexport class PlaceZoneMetadata {\n /** Zone associated with the metadata */\n public readonly zone: PlaceZone;\n /** Metadata for zone */\n public readonly metadata: HashMap<PlaceMetadata>;\n /** List of the root keys in the metadata */\n public readonly keys: string[];\n\n constructor(data: Partial<PlaceZoneMetadata> = {}) {\n this.zone = new PlaceZone(data.zone);\n this.keys = data.keys || [];\n this.metadata = {};\n const metadata = data.metadata || {};\n for (const key of this.keys) {\n this.metadata[key] = new PlaceMetadata(metadata[key]);\n }\n }\n}\n","import { Observable } from 'rxjs';\nimport { create, remove, show, task, update } from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceMetadataDeleteOptions,\n PlaceMetadataHistoryOptions,\n PlaceMetadataOptions,\n PlaceZoneMetadataOptions,\n} from './interfaces';\nimport { PlaceMetadata } from './metadata';\nimport { PlaceZoneMetadata } from './zone-metadata';\n\n/**\n * @private\n */\nconst PATH = 'metadata';\n\n/** Convert raw server data to a metadata object */\nfunction process(item: Partial<PlaceMetadata>) {\n return new PlaceMetadata(item);\n}\n\n/**\n * List the metadata for a database item\n * @param id ID of the item to retrieve metadata\n * @param query_params Query parameters to add the to request URL.\n */\nexport function listMetadata(\n id: string,\n query_params: PlaceMetadataOptions = {},\n): Observable<PlaceMetadata[]> {\n return show({\n id,\n query_params,\n fn: (list: HashMap) =>\n Object.keys(list).map((key: string) => process(list[key])) as any,\n path: PATH,\n });\n}\n\nfunction flatten<T = any>(an_array: T[]): T {\n const stack = [...an_array];\n const res = [];\n while (stack.length) {\n // pop value from stack\n const next = stack.pop();\n if (Array.isArray(next)) {\n // push back array items, won't modify the original input\n stack.push(...next);\n } else {\n res.push(next);\n }\n }\n // reverse to restore input order\n return res.reverse() as T;\n}\n\n/**\n * List the metadata history for a database item\n * @param id ID of the item to retrieve metadata\n * @param query_params Query parameters to add to the request URL.\n */\nexport function listMetadataHistory(\n id: string,\n query_params: PlaceMetadataHistoryOptions = {},\n): Observable<PlaceMetadata[]> {\n return task({\n id,\n task_name: `history`,\n form_data: query_params,\n method: 'get',\n callback: (list: HashMap) =>\n flatten(\n Object.keys(list).map((key: string) =>\n list[key].map((i: any) => process(i)),\n ) as Array<PlaceMetadata[]>,\n ),\n path: PATH,\n });\n}\n\n/**\n * Get a metadata field for a database item\n * @param id ID of the item to retrieve metadata\n * @param name Name of the metadata field to retrieve\n */\nexport function showMetadata(\n id: string,\n name: string,\n): Observable<PlaceMetadata> {\n return show({\n id,\n query_params: { name },\n fn: (data: HashMap) => process(data[name]),\n path: PATH,\n });\n}\n\n/**\n * Update the metadata in the database\n * @param id ID of the item associated with the metadata\n * @param form_data New values for the metadata\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateMetadata(\n id: string,\n form_data: Partial<PlaceMetadata>,\n method: 'put' | 'patch' = 'put',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\nexport function addMetadata(form_data: Partial<PlaceMetadata>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove metadata from the database\n * @param id ID of the item associated with the metadata\n * @param query_params Query parameters including the metadata key name (required)\n */\nexport function removeMetadata(\n id: string,\n query_params: PlaceMetadataDeleteOptions,\n) {\n return remove({ id, query_params, path: PATH });\n}\n\n/**\n * Query metadata of associated child items\n * @param id ID of the item to get associated child metadata\n * @param query_params Query parameters to add the to request URL\n */\nexport function listChildMetadata(\n id: string,\n query_params: PlaceZoneMetadataOptions,\n) {\n return task({\n id,\n task_name: 'children',\n form_data: query_params,\n method: 'get',\n callback: (list: HashMap[]) =>\n list.map(\n (item) =>\n new PlaceZoneMetadata({\n ...item,\n keys: Object.keys(item.metadata),\n }),\n ),\n path: PATH,\n });\n}\n","import { PlaceModule } from '../modules/module';\nimport { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from '../settings/interfaces';\nimport { PlaceSettings } from '../settings/settings';\n\n/**\n * @hidden\n */\nexport interface PlaceSystemComplete extends Partial<PlaceSystem> {\n module_data?: PlaceModule[];\n}\n\nexport class PlaceSystem extends PlaceResource {\n /** Tuple of user settings of differring encryption levels for the system */\n public readonly settings: [\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n ] = [null, null, null, null];\n /** Display name of the system */\n public readonly display_name: string;\n /** Description of the system */\n public readonly description: string;\n /** Email address associated with the system */\n public readonly email: string;\n /** Email address associated with the system */\n public readonly code: string;\n /** Capacity of the space associated with the system */\n public readonly capacity: number;\n /** Features associated with the system */\n public readonly features: string[];\n /** Whether system is bookable by end users */\n public readonly bookable: boolean;\n /** Whether system is public accessible */\n public readonly public: boolean;\n /** Count of UI devices attached to the system */\n public readonly installed_ui_devices: number;\n /** Support URL for the system */\n public readonly support_url: string;\n /** URL for the timetable UI linked to the system */\n public readonly timetable_url: string;\n /** URLs for requesting snapshots of the assosiated camera */\n public readonly camera_snapshot_url: string;\n /** URLs for requesting snapshots of the assosiated camera */\n public readonly camera_snapshot_urls: string[];\n /** URL for managing the attached camera */\n public readonly camera_url: string;\n /** External booking URL for the system */\n public readonly room_booking_url: string;\n /** ID on the SVG Map associated with this system */\n public readonly map_id: string;\n /** List of module IDs that belong to the system */\n public readonly modules: readonly string[];\n /** List of images associated with the system */\n public readonly images: readonly string[];\n /** List of the zone IDs that the system belongs */\n public readonly zones: readonly string[];\n /** Timezone of the associated real world space */\n public readonly timezone: string;\n /**\n * List of modules associated with the system.\n * Only available from the show method with the `complete` query parameter\n */\n public module_list: readonly PlaceModule[] = [];\n /** Whether the system has signage capabilities */\n public readonly signage: boolean;\n /** List of playlist IDs associated with the system */\n public readonly playlists: readonly string[];\n public readonly approval: boolean;\n /** Orientation of the signage system */\n public readonly orientation:\n | 'unspecified'\n | 'portrait'\n | 'landscape'\n | 'square';\n\n constructor(raw_data: PlaceSystemComplete = {}) {\n super(raw_data);\n this.display_name = raw_data.display_name || '';\n this.description = raw_data.description || '';\n this.email = raw_data.email || '';\n this.code = raw_data.code || '';\n this.capacity = raw_data.capacity || 0;\n this.features = raw_data.features || [];\n this.bookable = raw_data.bookable || false;\n this.public = raw_data.public ?? false;\n this.installed_ui_devices = raw_data.installed_ui_devices || 0;\n this.support_url = raw_data.support_url || '';\n this.camera_snapshot_url = raw_data.camera_snapshot_url || '';\n this.camera_snapshot_urls = raw_data.camera_snapshot_urls || [];\n this.camera_url = raw_data.camera_url || '';\n this.timetable_url = raw_data.timetable_url || '';\n this.room_booking_url = raw_data.room_booking_url || '';\n this.map_id = raw_data.map_id || '';\n this.modules = raw_data.modules || [];\n this.images = raw_data.images || [];\n this.zones = raw_data.zones || [];\n this.settings = raw_data.settings || [null, null, null, null];\n this.timezone = raw_data.timezone || '';\n this.signage = raw_data.signage || false;\n this.playlists = raw_data.playlists || [];\n this.orientation = raw_data.orientation || 'unspecified';\n this.approval = raw_data.approval || false;\n if (typeof this.settings !== 'object') {\n (this as any).settings = [null, null, null, null];\n }\n for (const level in EncryptionLevel) {\n if (!isNaN(Number(level)) && !this.settings[level]) {\n this.settings[level] = new PlaceSettings({\n parent_id: this.id,\n encryption_level: +level,\n });\n }\n }\n if (raw_data.module_data && raw_data.module_data instanceof Array) {\n this.module_list = raw_data.module_data.map(\n (mod) => new PlaceModule(mod),\n );\n }\n }\n}\n","import { AlertSeverity } from '../alerts/alert';\nimport { PlaceDriver } from '../drivers/driver';\nimport { PlaceDriverRole } from '../drivers/enums';\nimport { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from '../settings/interfaces';\nimport { PlaceSettings } from '../settings/settings';\nimport { PlaceSystem } from '../systems/system';\nimport { HashMap } from '../utilities/types';\n\n/**\n * @hidden\n */\nexport interface PlaceModuleComplete extends Partial<PlaceModule> {\n dependency_id?: string;\n dependency?: PlaceDriver;\n control_system?: PlaceSystem;\n}\n\n/** Function to request the server to stop emitting debug events */\nexport type EndDebugFn = () => void;\n\nexport class PlaceModule extends PlaceResource {\n /** Whether the associated hardware is connected */\n public readonly connected: boolean | undefined;\n /** Whether the module driver is running */\n public readonly running: boolean;\n /** Timestamp of last update in ms since UTC epoch */\n public readonly updated_at: number;\n /** ID of the edge associated with the module */\n public readonly edge_id: string;\n /** ID of the driver associated with the module */\n public readonly driver_id: string;\n /** Driver/dependancy associated with the module */\n public readonly driver?: PlaceDriver;\n /** ID of the system associated with the module */\n public readonly control_system_id: string;\n /** System associated with the module */\n public readonly system?: PlaceSystem;\n /** IP address of the hardware associated with the module */\n public readonly ip: string;\n /** Whether the hardware connection requires TLS */\n public readonly tls: boolean;\n /** Whether the hardware connection is over UDP */\n public readonly udp: boolean;\n /** Port number connections to the hardware are made on */\n public readonly port: number;\n /** */\n public readonly makebreak: boolean;\n /** URI associated with the module */\n public readonly uri: string;\n /** Custom name of the module */\n public readonly custom_name: string;\n /** Type of module */\n public readonly role: PlaceDriverRole;\n /** Notes associated with the module */\n public readonly notes: string;\n /** Ignore connection issues */\n public readonly ignore_connected: boolean;\n /** Tuple of user settings of differring encryption levels for the module */\n public readonly settings: [\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n ] = [null, null, null, null];\n /** Whether the module has a runtime error */\n public readonly has_runtime_error: boolean;\n /** Timestamp of the last runtime error in ms since UTC epoch */\n public readonly error_timestamp: number;\n /** */\n public readonly alert_level: AlertSeverity;\n /** ID of the system associated with the module */\n public get system_id(): string {\n return this.control_system_id;\n }\n\n constructor(raw_data: PlaceModuleComplete = {}) {\n super(raw_data);\n this.driver_id = raw_data.driver_id || raw_data.dependency_id || '';\n this.control_system_id = raw_data.control_system_id || '';\n this.edge_id = raw_data.edge_id || '';\n this.ip = raw_data.ip || '';\n this.tls = raw_data.tls || false;\n this.udp = raw_data.udp || false;\n this.port = raw_data.port || 1;\n this.makebreak = raw_data.makebreak || false;\n this.uri = raw_data.uri || '';\n this.custom_name = raw_data.custom_name || '';\n this.role = raw_data.role ?? PlaceDriverRole.Logic;\n this.notes = raw_data.notes || '';\n this.ignore_connected = raw_data.ignore_connected || false;\n this.connected = raw_data.connected;\n this.running = raw_data.running || false;\n this.updated_at = raw_data.updated_at || 0;\n this.system = new PlaceSystem(\n raw_data.control_system || raw_data.system,\n );\n this.has_runtime_error = raw_data.has_runtime_error || false;\n this.error_timestamp = raw_data.error_timestamp || 0;\n this.driver = new PlaceDriver(raw_data.dependency || raw_data.driver);\n this.settings = raw_data.settings || [null, null, null, null];\n this.alert_level = raw_data.alert_level || 'medium';\n if (typeof this.settings !== 'object') {\n (this as any).settings = [null, null, null, null];\n }\n for (const level in EncryptionLevel) {\n if (!isNaN(Number(level)) && !this.settings[level]) {\n this.settings[level] = new PlaceSettings({\n parent_id: this.id,\n encryption_level: +level,\n });\n }\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(keep_system: boolean = false): HashMap {\n const obj = super.toJSON();\n if (\n (obj.role !== PlaceDriverRole.Logic && !keep_system) ||\n !obj.control_system_id\n ) {\n delete obj.control_system_id;\n }\n delete obj.driver;\n delete obj.system;\n delete obj.error_timestamp;\n delete obj.has_runtime_error;\n return obj;\n }\n}\n","import { Observable } from 'rxjs';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceSettings } from '../settings/settings';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceModulePingOptions,\n PlaceModuleQueryOptions,\n PlaceModuleShowOptions,\n} from './interfaces';\nimport { PlaceModule } from './module';\n\n/**\n * @private\n */\nconst PATH = 'modules';\n\n/** Convert raw server data to a module object */\nfunction process(item: Partial<PlaceModule>) {\n return new PlaceModule(item);\n}\n\n/**\n * Query the available moduels\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryModules(query_params: PlaceModuleQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a module\n * @param id ID of the module to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showModule(id: string, query_params: PlaceModuleShowOptions = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the module in the database\n * @param id ID of the module\n * @param form_data New values for the module\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateModule(\n id: string,\n form_data: Partial<PlaceModule>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new module to the database\n * @param form_data Module data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addModule(form_data: Partial<PlaceModule>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a module from the database\n * @param id ID of the module\n */\nexport function removeModule(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Starts the module with the given ID and clears any existing caches\n * @param id Module ID\n */\nexport function startModule(id: string) {\n return task({ id, task_name: 'start', path: PATH });\n}\n\n/**\n * Stops the module with the given ID\n * @param id Module ID\n */\nexport function stopModule(id: string) {\n return task({ id, task_name: 'stop', path: PATH });\n}\n\n/**\n * Pings the IP address of the module with the given ID\n * @param id Module ID\n */\nexport function pingModule(id: string): Observable<PlaceModulePingOptions> {\n return task({ id, task_name: 'ping', method: 'post', path: PATH });\n}\n\n/**\n * Get the internal state of the given module\n * @param id Module ID\n * @param lookup Status variable of interest. If set it will return only the state of this variable\n */\nexport function moduleState(id: string): Observable<HashMap> {\n return task({ id, task_name: 'state', method: 'get', path: PATH });\n}\n\n/**\n * Get the state of the given module\n * @param id Module ID\n * @param key Status variable of interest. If set it will return only the state of this variable\n */\nexport function lookupModuleState(\n id: string,\n key: string,\n): Observable<HashMap> {\n return task({ id, task_name: `state/${key}`, method: 'get', path: PATH });\n}\n\n/**\n * Manually load module into PlaceOS core. Only use if module should be loaded but isn't present.\n * @param id Module ID\n */\nexport function loadModule(id: string): Observable<HashMap> {\n return task({ id, task_name: 'load', method: 'post', path: PATH });\n}\n\n/**\n * Fetch settings of driver associated with the module\n * @param id Module ID\n */\nexport function moduleSettings(id: string) {\n return task({\n id,\n task_name: 'settings',\n method: 'get',\n callback: (list) =>\n list.map((item: Partial<PlaceSettings>) => new PlaceSettings(item)),\n path: PATH,\n });\n}\n\n/**\n * Get the runtime errors of the given module\n * @param id Module ID\n */\nexport function moduleRuntimeError(id: string) {\n return task<string[]>({\n id,\n task_name: 'error',\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Execute a command on a module\n * @param id Module ID\n * @param method Name of the method to execute\n * @param args Array of arguments to pass to the executed method\n */\nexport function executeOnModule(\n id: string,\n method: string,\n args: any[] = [],\n): Observable<HashMap> {\n return task({\n id,\n task_name: `exec/${encodeURIComponent(method)}`,\n form_data: args,\n path: PATH,\n });\n}\n","import { PlaceResource } from '../resources/resource';\nimport { HashMap } from '../utilities/types';\n\nexport class PlaceOAuthSource extends PlaceResource {\n /** Type of auth source */\n public readonly type = 'oauth';\n /** ID of the authority associted with the auth method */\n public readonly authority_id: string;\n /** Application ID from the SSO provider providing the OAuth services */\n public readonly client_id: string;\n /** Application secret from the SSO provider providing the OAuth services */\n public readonly client_secret: string;\n /** Mapping of engine values to SSO provider values */\n public readonly info_mappings: HashMap<string>;\n /** HTTP URL of the SSO provider */\n public readonly site: string;\n /** URL from the SSO provider for authorisation */\n public readonly authorize_url: string;\n /** HTTP Method used to generating tokens */\n public readonly token_method: 'get' | 'post' | 'put';\n /** URL for generating user tokens */\n public readonly token_url: string;\n /** Scheme used to authenticate the user */\n public readonly auth_scheme: 'request_body' | 'basic_auth';\n /** Space seperated access scopes for the user */\n public readonly scope: string;\n /** URL to grab user's profile details with a valid token */\n public readonly raw_info_url: string;\n /** Additional params to be sent as part of the authorization reqest */\n public readonly authorize_params: HashMap<string>;\n /** Security checks to be made on the returned data */\n public readonly ensure_matching: HashMap<string[]>;\n\n constructor(raw_data: Partial<PlaceOAuthSource> = {}) {\n super(raw_data);\n this.authority_id = raw_data.authority_id || '';\n this.client_id = raw_data.client_id || '';\n this.client_secret = raw_data.client_secret || '';\n this.info_mappings = raw_data.info_mappings || {};\n this.authorize_params = raw_data.authorize_params || {};\n this.ensure_matching = raw_data.ensure_matching || {};\n this.site = raw_data.site || '';\n this.authorize_url = raw_data.authorize_url || 'oauth/authorize';\n this.token_method = raw_data.token_method || 'post';\n this.token_url = raw_data.token_url || 'oauth/token';\n this.auth_scheme = raw_data.auth_scheme || 'request_body';\n this.scope = raw_data.scope || '';\n this.raw_info_url = raw_data.raw_info_url || '';\n this.authorize_params = raw_data.authorize_params || {};\n this.ensure_matching = raw_data.ensure_matching || {};\n }\n}\n","import { PlaceAuthSourceQueryOptions } from '../auth-sources/interfaces';\nimport { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceOAuthSource } from './oauth-source';\n\n/**\n * @private\n */\nconst PATH = 'oauth_auths';\n\n/** Convert raw server data to an OAuth source object */\nfunction process(item: Partial<PlaceOAuthSource>) {\n return new PlaceOAuthSource(item);\n}\n\n/**\n * Query the available OAuth sources\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryOAuthSources(\n query_params: PlaceAuthSourceQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for an OAuth source\n * @param id ID of the OAuth source to retrieve\n */\nexport function showOAuthSource(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the OAuth source in the database\n * @param id ID of the OAuth source\n * @param form_data New values for the OAuth source\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateOAuthSource(\n id: string,\n form_data: Partial<PlaceOAuthSource>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new OAuth source to the database\n * @param form_data OAuth source data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addOAuthSource(form_data: Partial<PlaceOAuthSource>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove an OAuth source from the database\n * @param id ID of the OAuth source\n */\nexport function removeOAuthSource(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n","import { PlaceResourceQueryOptions } from '../resources/interface';\n\n/** Type of repository */\nexport enum PlaceRepositoryType {\n /** Repository is a collection of Driver logic */\n Driver = 'driver',\n /** Repository is a collection of interfaces */\n Interface = 'interface',\n}\n\n/** Mapping of available query parameters for the repositories index endpoint */\nexport interface PlaceRepositoryQueryOptions extends PlaceResourceQueryOptions {}\n\n/** Query parameters for repository commit listing */\nexport interface PlaceRepositoryCommitQuery {\n /** URL encoded name of the branch being requested */\n branch?: string;\n /** URL encoded name of the driver being requested */\n driver?: string;\n /** Number of commits to return */\n limit?: number;\n}\n\nexport interface GitCommitDetails {\n /** Name of the commit author */\n author: string;\n /** Short hash of the commit */\n commit: string;\n /** ISO datetime string for commit */\n date: string;\n /** Commit summary */\n subject: string;\n}\n\n/** Query parameters for repository driver details */\nexport interface PlaceRepositoryDetailsQuery {\n /** URL encoded name of the driver being requested (required) */\n driver: string;\n /** Hash of the commit being requested for the driver (required) */\n commit: string;\n}\n\n/** Query parameters for repository pull */\nexport interface PlaceRepositoryPullQuery {\n /** Hash of the commit being requested */\n commit: string;\n}\n\n/** Query parameters for remote repository operations */\nexport interface PlaceRemoteRepositoryQuery {\n /** The git URL that represents the repository (required) */\n repository_url: string;\n /** A username for access if required */\n username?: string;\n /** The password or access token as required */\n password?: string;\n}\n\n/** Query parameters for remote repository commits */\nexport interface PlaceRemoteRepositoryCommitsQuery extends PlaceRemoteRepositoryQuery {\n /** The branch to grab commits from */\n branch?: string;\n /** The number of commits to return */\n depth?: number;\n}\n\n/** Query parameters for repository folders listing */\nexport interface PlaceRepositoryFoldersQuery {\n /** Include dot files and folders */\n include_dots?: boolean;\n}\n\n/** Metadata for a repository commit */\nexport interface PlaceRepositoryCommit {\n /** Hash associated with the commit */\n commit: string;\n /** UTC epoch in seconds of the time the commit was made */\n date: number;\n /** Author of the commit */\n author: string;\n /** Commit subject line */\n subject: string;\n}\n","import { PlaceResource } from '../resources/resource';\nimport { PlaceRepositoryType } from './interfaces';\n\nexport class PlaceRepository extends PlaceResource {\n /** Name of the folder on the server to pull the repository */\n public readonly folder_name: string;\n /** Description of the contents of the repository */\n public readonly description: string;\n /** URI that the repository can be pulled from */\n public readonly uri: string;\n /** Working branch for the repository */\n public readonly branch: string;\n /** Hash of the commit at the head of the repository */\n public readonly commit_hash: string;\n /** Repository type */\n public readonly repo_type: PlaceRepositoryType;\n /** Username to connect to repository with */\n public readonly username: string;\n /** Password to connect to repository with */\n public readonly password: string;\n /** Root path of the repository to serve at the `folder_name` path */\n public readonly root_path: string;\n /** Repository type */\n public get type() {\n return this.repo_type;\n }\n\n constructor(raw_data: Partial<PlaceRepository> = {}) {\n super(raw_data);\n this.folder_name = raw_data.folder_name || '';\n this.description = raw_data.description || '';\n this.uri = raw_data.uri || '';\n this.branch = raw_data.branch || '';\n this.commit_hash = raw_data.commit_hash || '';\n this.repo_type = raw_data.repo_type || PlaceRepositoryType.Driver;\n this.username = raw_data.username || '';\n this.password = raw_data.password || '';\n this.root_path = raw_data.root_path || '';\n }\n}\n","import { Observable } from 'rxjs';\nimport { PlaceDriverDetails } from '../drivers/interfaces';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport {\n GitCommitDetails,\n PlaceRemoteRepositoryCommitsQuery,\n PlaceRemoteRepositoryQuery,\n PlaceRepositoryCommitQuery,\n PlaceRepositoryDetailsQuery,\n PlaceRepositoryFoldersQuery,\n PlaceRepositoryPullQuery,\n PlaceRepositoryQueryOptions,\n} from './interfaces';\nimport { PlaceRepository } from './repository';\n\n/**\n * @private\n */\nconst PATH = 'repositories';\n\n/** Convert raw server data to a repository object */\nfunction process(item: Partial<PlaceRepository>) {\n return new PlaceRepository(item);\n}\n\n/**\n * Query the available repositories\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryRepositories(\n query_params: PlaceRepositoryQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a repository\n * @param id ID of the repository to retrieve\n */\nexport function showRepository(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the repository in the database\n * @param id ID of the repository\n * @param form_data New values for the repository\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateRepository(\n id: string,\n form_data: Partial<PlaceRepository>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new repository to the database\n * @param form_data Repository data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addRepository(form_data: Partial<PlaceRepository>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a repository from the database\n * @param id ID of the repository\n */\nexport function removeRepository(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Get a list of all the interfaces\n */\nexport function listInterfaceRepositories(): Observable<string[]> {\n return show({\n id: 'interfaces',\n query_params: {},\n path: PATH,\n });\n}\n\n/**\n * Get name of the default branch for a new repository\n * @param query_params Details about the repository\n */\nexport function listRemoteRepositoryDefaultBranch(\n query_params: PlaceRemoteRepositoryQuery,\n): Observable<string> {\n return show({\n id: 'remote_default_branch',\n query_params,\n path: PATH,\n });\n}\n\n/**\n * Get a list of branches for a new repository\n * @param query_params Details about the repository\n */\nexport function listRemoteRepositoryBranches(\n query_params: PlaceRemoteRepositoryQuery,\n): Observable<string[]> {\n return show({\n id: 'remote_branches',\n query_params,\n path: PATH,\n });\n}\n\n/**\n * Get a list of branch commits for a new repository\n * @param query_params Details about the repository\n */\nexport function listRemoteRepositoryCommits(\n query_params: PlaceRemoteRepositoryCommitsQuery,\n): Observable<GitCommitDetails[]> {\n return show({\n id: 'remote_commits',\n query_params,\n path: PATH,\n });\n}\n\n/**\n * Get a list of tags for a new repository\n * @param query_params Details about the repository\n */\nexport function listRemoteRepositoryTags(\n query_params: PlaceRemoteRepositoryQuery,\n): Observable<string[]> {\n return show({\n id: 'remote_tags',\n query_params,\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the drivers for a repository\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function listRepositoryDrivers(\n id: string,\n query_params?: HashMap,\n): Observable<string[]> {\n return task({\n id,\n task_name: 'drivers',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the releases for a repository\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function listRepositoryReleases(\n id: string,\n query_params?: HashMap,\n): Observable<string[]> {\n return task({\n id,\n task_name: 'releases',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the commits for a repository\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function listRepositoryCommits(\n id: string,\n query_params?: PlaceRepositoryCommitQuery,\n): Observable<GitCommitDetails[]> {\n return task({\n id,\n task_name: 'commits',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the branches for a repository\n * @param id ID of the repository\n */\nexport function listRepositoryBranches(id: string): Observable<string[]> {\n return task({\n id,\n task_name: 'branches',\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the branches for a repository\n * @param id ID of the repository\n */\nexport function listRepositoryDefaultBranch(id: string): Observable<string> {\n return task({\n id,\n task_name: 'default_branch',\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the tags for a repository\n * @param id ID of the repository\n */\nexport function listRepositoryTags(id: string): Observable<string[]> {\n return task({\n id,\n task_name: 'tags',\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get the details for a given driver\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function listRepositoryDriverDetails(\n id: string,\n query_params: PlaceRepositoryDetailsQuery,\n): Observable<PlaceDriverDetails> {\n return task({\n id,\n task_name: 'details',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Pull remote changes to tshe repository\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function pullRepositoryChanges(\n id: string,\n query_params?: PlaceRepositoryPullQuery,\n): Observable<GitCommitDetails> {\n return task({\n id,\n task_name: 'pull',\n form_data: query_params,\n method: 'post',\n path: PATH,\n });\n}\n\n/**\n * Get the folder tree structure of a repository\n * @param id ID of the repository\n * @param query_params Query parameters to add to the request\n */\nexport function listRepositoryFolders(\n id: string,\n query_params?: PlaceRepositoryFoldersQuery,\n): Observable<string[]> {\n return task({\n id,\n task_name: 'folders',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n","import { PlaceResource } from '../resources/resource';\nimport { HashMap } from '../utilities/types';\n\nexport interface PlaceSamlRequestAttribute {\n name: string;\n name_format: string;\n friendly_name: string;\n}\n\nexport class PlaceSAMLSource extends PlaceResource {\n /** Type of auth source */\n public readonly type = 'saml';\n /** ID of the authority associted with the auth method */\n public readonly authority_id: string;\n /** Name of the application requesting auth */\n public readonly issuer: string;\n /**\n * Mapping of request params that exist during the request\n * phase of OmniAuth that should to be sent to the IdP\n */\n public readonly idp_sso_target_url_runtime_params: HashMap<string>;\n /** Describes the format of the username required by this application */\n public readonly name_identifier_format: string;\n /** Attribute that uniquely identifies the user */\n public readonly uid_attribute: string;\n /** URL at which the SAML assertion should be received (SSO Service => Place URL) */\n public readonly assertion_consumer_service_url: string;\n /** URL to which the authentication request should be sent (Place => SSO Service) */\n public readonly idp_sso_target_url: string;\n /** Identity provider's certificate in PEM format (this or fingerprint is required) */\n public readonly idp_cert: string;\n /** SHA1 fingerprint of the certificate */\n public readonly idp_cert_fingerprint: string;\n /** Name for the attribute service */\n public readonly attribute_service_name: string;\n /** Mapping of Attribute Names in a SAMLResponse to entries in the OmniAuth info hash */\n public readonly attribute_statements: HashMap<string[]>;\n /** Mapping of Attribute Names in a SAMLResponse to entries in the OmniAuth info hash */\n public readonly request_attributes: PlaceSamlRequestAttribute[];\n /** URL to which the single logout request and response should be sent */\n public readonly idp_slo_target_url: string;\n /** Value to use as default RelayState for single log outs */\n public readonly slo_default_relay_state: string;\n\n constructor(raw_data: Partial<PlaceSAMLSource> = {}) {\n super(raw_data);\n this.authority_id = raw_data.authority_id || '';\n this.issuer = raw_data.issuer || '';\n this.idp_sso_target_url_runtime_params =\n raw_data.idp_sso_target_url_runtime_params || {};\n this.name_identifier_format = raw_data.name_identifier_format || '';\n this.uid_attribute = raw_data.uid_attribute || '';\n this.assertion_consumer_service_url =\n raw_data.assertion_consumer_service_url || '';\n this.idp_sso_target_url = raw_data.idp_sso_target_url || '';\n this.idp_cert = raw_data.idp_cert || '';\n this.idp_cert_fingerprint = raw_data.idp_cert_fingerprint || '';\n this.attribute_service_name = raw_data.attribute_service_name || '';\n this.attribute_statements = raw_data.attribute_statements || {};\n this.request_attributes = raw_data.request_attributes || [];\n this.idp_slo_target_url = raw_data.idp_slo_target_url || '';\n this.slo_default_relay_state = raw_data.slo_default_relay_state || '';\n }\n}\n","import { PlaceAuthSourceQueryOptions } from '../auth-sources/interfaces';\nimport { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceSAMLSource } from './saml-source';\n\n/**\n * @private\n */\nconst PATH = 'saml_auths';\n\n/** Convert raw server data to an SAML source object */\nfunction process(item: Partial<PlaceSAMLSource>) {\n return new PlaceSAMLSource(item);\n}\n\n/**\n * Query the available SAML sources\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySAMLSources(\n query_params: PlaceAuthSourceQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a SAML source\n * @param id ID of the SAML source to retrieve\n */\nexport function showSAMLSource(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the SAML source in the database\n * @param id ID of the SAML source\n * @param form_data New values for the SAML source\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSAMLSource(\n id: string,\n form_data: Partial<PlaceSAMLSource>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new SAML source to the database\n * @param form_data SAML source data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSAMLSource(form_data: Partial<PlaceSAMLSource>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a SAML source from the database\n * @param id ID of the SAML source\n */\nexport function removeSAMLSource(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n","import {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceSettingsHistoryOptions,\n PlaceSettingsQueryOptions,\n} from './interfaces';\nimport { PlaceSettings } from './settings';\n\n/**\n * @private\n */\nconst PATH = 'settings';\n\n/** Convert raw server data to an settings object */\nfunction process(item: Partial<PlaceSettings>) {\n return new PlaceSettings(item);\n}\n\n/**\n * Query the available settings\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySettings(query_params: PlaceSettingsQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for settings\n * @param id ID of the settings to retrieve\n */\nexport function showSettings(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the settings in the database\n * @param id ID of the settings\n * @param form_data New values for the settings\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSettings(\n id: string,\n form_data: Partial<PlaceSettings>,\n query_params: HashMap = {},\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params,\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new settings to the database\n * @param form_data Settings data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSettings(\n form_data: Partial<PlaceSettings>,\n query_params: HashMap = {},\n) {\n return create({ form_data, query_params, fn: process, path: PATH });\n}\n\n/**\n * Remove settings from the database\n * @param id ID of the settings\n */\nexport function removeSettings(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Get historical versions of settings\n * @param id ID of the settings to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function settingsHistory(\n id: string,\n query_params: PlaceSettingsHistoryOptions = {},\n) {\n return task({\n id,\n task_name: 'history',\n form_data: query_params,\n method: 'get',\n callback: (resp: HashMap[]) => resp.map((i) => process(i)),\n path: PATH,\n });\n}\n","import { Observable } from 'rxjs';\nimport { apiEndpoint } from '../auth/functions';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceSettings } from '../settings/settings';\nimport { PlaceTrigger } from '../triggers/trigger';\nimport { HashMap } from '../utilities/types';\nimport { PlaceZone } from '../zones/zone';\nimport {\n PlaceModuleFunctionMap,\n PlaceSystemControlOptions,\n PlaceSystemMetadataOptions,\n PlaceSystemShowOptions,\n PlaceSystemsQueryOptions,\n PlaceSystemsWithEmailsOptions,\n PlaceSystemStartStopOptions,\n PlaceSystemTriggerShowOptions,\n PlaceSystemTriggersQueryOptions,\n} from './interfaces';\nimport { PlaceSystem } from './system';\n\n/**\n * @private\n */\nconst PATH = 'systems';\n\n/** Convert raw server data to an system object */\nfunction process(item: Partial<PlaceSystem>) {\n return new PlaceSystem(item);\n}\n\n/**\n * Query the available systems\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySystems(query_params: PlaceSystemsQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Query the available systems by email addresses\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySystemsWithEmails(\n query_params: PlaceSystemsWithEmailsOptions,\n) {\n return query({ query_params, fn: process, path: `${PATH}/with_emails` });\n}\n\n/**\n * Get the data for a system\n * @param id ID of the system to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSystem(\n id: string,\n query_params: PlaceSystemShowOptions = {},\n) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the system in the database\n * @param id ID of the system\n * @param form_data New values for the system\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSystem(\n id: string,\n form_data: Partial<PlaceSystem>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new system to the database\n * @param form_data System data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSystem(form_data: Partial<PlaceSystem>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a system from the database\n * @param id ID of the system\n */\nexport function removeSystem(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Add module to the given system\n * @param id System ID\n * @param module_id ID of the module to add\n */\nexport function addSystemModule(\n id: string,\n module_id: string,\n data: HashMap = {},\n): Observable<PlaceSystem> {\n return task({\n id,\n task_name: `module/${module_id}`,\n form_data: data,\n method: 'put',\n callback: (d) => process(d),\n path: PATH,\n });\n}\n\n/**\n * Remove module from the given system\n * @param id System ID\n * @param module_id ID of the module to remove\n */\nexport function removeSystemModule(\n id: string,\n module_id: string,\n): Observable<PlaceSystem> {\n return task({\n id,\n task_name: `module/${module_id}`,\n form_data: {},\n method: 'del',\n callback: (d) => process(d),\n path: PATH,\n });\n}\n\n/**\n * Start the given system and clears any existing caches\n * @param id System ID\n * @param query_params Query parameters to add the to request URL\n */\nexport function startSystem(\n id: string,\n query_params: PlaceSystemStartStopOptions = {},\n): Observable<void> {\n return task<void>({\n id,\n task_name: 'start',\n form_data: query_params,\n path: PATH,\n });\n}\n\n/**\n * Stops all modules in the given system\n * @param id System ID\n * @param query_params Query parameters to add the to request URL\n */\nexport function stopSystem(\n id: string,\n query_params: PlaceSystemStartStopOptions = {},\n): Observable<void> {\n return task<void>({\n id,\n task_name: 'stop',\n form_data: query_params,\n path: PATH,\n });\n}\n\n/**\n * Execute a function of the given system module\n * @param id System ID\n * @param method Name of the function to execute\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n * @param args Array of arguments to pass to the executed method\n */\nexport function executeOnSystem(\n id: string,\n method: string,\n module: string,\n index: number = 1,\n args: any[] = [],\n): Observable<HashMap> {\n return task({\n id,\n task_name: `${module}_${index}/${encodeURIComponent(method)}`,\n form_data: args,\n path: PATH,\n });\n}\n\n/**\n * Get the state of the given system module\n * @param id System ID\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n * @param lookup Status variable of interest. If set it will return only the state of this variable\n */\nexport function systemModuleState(\n id: string,\n module: string,\n index: number = 1,\n): Observable<HashMap> {\n return task({\n id,\n task_name: `${module}_${index}`,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get the state of the given system module\n * @param id System ID\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n * @param lookup Status variable of interest. If set it will return only the state of this variable\n */\nexport function lookupSystemModuleState(\n id: string,\n module: string,\n index: number = 1,\n lookup: string,\n): Observable<HashMap> {\n return task({\n id,\n task_name: `${module}_${index}/${lookup}`,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get the list of functions for the given system module\n * @param id System ID\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n */\nexport function functionList(\n id: string,\n module: string,\n index: number = 1,\n): Observable<PlaceModuleFunctionMap> {\n return task({\n id,\n task_name: `functions/${module}_${index}`,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Occurances of a particular type of module in the given system\n * @param id System ID\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n */\nexport function moduleCount(\n id: string,\n module: string,\n): Observable<{ count: number }> {\n return task({\n id,\n task_name: 'count',\n form_data: { module },\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * List types of modules and counts in the given system\n * @param id System ID\n */\nexport function moduleTypes(id: string): Observable<HashMap<number>> {\n return task({ id, task_name: 'count', method: 'get', path: PATH });\n}\n\n/**\n * Get list of Zones for system\n * @param id System ID\n */\nexport function listSystemZones(id: string) {\n return query({\n query_params: {},\n fn: (i: HashMap) => new PlaceZone(i),\n path: `${PATH}/${id}/zones`,\n });\n}\n\n/**\n * Get list of triggers for system\n * @param id System ID\n * @param query_params Query parameters to add the to request URL\n */\nexport function listSystemTriggers(\n id: string,\n query_params: PlaceSystemTriggersQueryOptions = {},\n) {\n return query({\n query_params,\n fn: (i: HashMap) => new PlaceTrigger(i),\n path: `${PATH}/${id}/triggers`,\n });\n}\n\n/**\n * Get list of triggers for system\n * @param id System ID\n * @param data Values for trigger properties\n */\nexport function addSystemTrigger(\n id: string,\n data: Partial<PlaceTrigger>,\n): Observable<PlaceTrigger> {\n return task({\n id,\n task_name: 'triggers',\n form_data: data,\n method: 'post',\n callback: (item: Partial<PlaceTrigger>) => new PlaceTrigger(item),\n path: PATH,\n });\n}\n\n/**\n * Remove trigger from system\n * @param id System ID\n * @param trigger_id ID of the trigger\n */\nexport function removeSystemTrigger(\n id: string,\n trigger_id: string,\n): Observable<void> {\n return task({\n id,\n task_name: `triggers/${trigger_id}`,\n method: 'del',\n path: PATH,\n });\n}\n\n/**\n * Fetch settings of modules, zones and drivers associated with the system\n * @param id System ID\n */\nexport function systemSettings(id: string): Observable<PlaceSettings[]> {\n return task({\n id,\n task_name: 'settings',\n method: 'get',\n callback: (list) =>\n list.map((item: Partial<PlaceSettings>) => new PlaceSettings(item)),\n path: PATH,\n });\n}\n\n/**\n * Get the websocket API endpoint URL for system control.\n * @param query_params Query parameters to add to the URL\n */\nexport function systemControlUrl(query_params: PlaceSystemControlOptions = {}): string {\n const endpoint = apiEndpoint();\n const wsProtocol = endpoint.startsWith('https') ? 'wss:' : 'ws:';\n const httpProtocol = endpoint.startsWith('https') ? 'https:' : 'http:';\n let url = endpoint.replace(httpProtocol, wsProtocol) + `${PATH}/control`;\n if (query_params.fixed_device) {\n url += `?fixed_device=${encodeURIComponent(String(query_params.fixed_device))}`;\n }\n return url;\n}\n\n/**\n * Get metadata for the system\n * @param id System ID\n * @param query_params Query parameters to add to the request\n */\nexport function systemMetadata(\n id: string,\n query_params: PlaceSystemMetadataOptions = {},\n): Observable<HashMap> {\n return task({\n id,\n task_name: 'metadata',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a particular trigger instance\n * @param sys_id System ID\n * @param trig_id Trigger ID\n * @param query_params Query parameters to add to the request\n */\nexport function showSystemTrigger(\n sys_id: string,\n trig_id: string,\n query_params: PlaceSystemTriggerShowOptions = {},\n): Observable<PlaceTrigger> {\n return task({\n id: sys_id,\n task_name: `triggers/${encodeURIComponent(trig_id)}`,\n form_data: query_params,\n method: 'get',\n callback: (item: Partial<PlaceTrigger>) => new PlaceTrigger(item),\n path: PATH,\n });\n}\n\n/**\n * Update the details of a trigger instance\n * @param sys_id System ID\n * @param trig_id Trigger ID\n * @param data Values for trigger properties\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSystemTrigger(\n sys_id: string,\n trig_id: string,\n data: Partial<PlaceTrigger>,\n method: 'put' | 'patch' = 'patch',\n): Observable<PlaceTrigger> {\n return task({\n id: sys_id,\n task_name: `triggers/${encodeURIComponent(trig_id)}`,\n form_data: data,\n method,\n callback: (item: Partial<PlaceTrigger>) => new PlaceTrigger(item),\n path: PATH,\n });\n}\n","import { Observable } from 'rxjs';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport {\n PlaceTriggerQueryOptions,\n PlaceTriggerShowOptions,\n} from './interfaces';\nimport { PlaceTrigger } from './trigger';\n\n/**\n * @private\n */\nconst PATH = 'triggers';\n\n/** Convert raw server data to a trigger object */\nfunction process(item: Partial<PlaceTrigger>) {\n return new PlaceTrigger(item);\n}\n\n/**\n * Query the available triggers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryTriggers(query_params: PlaceTriggerQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a trigger\n * @param id ID of the trigger to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showTrigger(\n id: string,\n query_params: PlaceTriggerShowOptions = {},\n) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the trigger in the database\n * @param id ID of the trigger\n * @param form_data New values for the trigger\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateTrigger(\n id: string,\n form_data: Partial<PlaceTrigger>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new trigger to the database\n * @param form_data Trigger data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addTrigger(form_data: Partial<PlaceTrigger>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a trigger from the database\n * @param id ID of the trigger\n */\nexport function removeTrigger(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * List systems that contain instances of a trigger\n * @param id ID of the trigger to grab system instances for\n */\nexport function listTriggerInstances(id: string): Observable<PlaceTrigger[]> {\n return task({\n id,\n task_name: `instances`,\n form_data: {},\n method: 'get',\n callback: (data: Partial<PlaceTrigger>[]) =>\n data.map((i) => new PlaceTrigger(i)),\n path: PATH,\n });\n}\n","import { PlaceResourceQueryOptions } from '../resources/interface';\nimport { HashMap } from '../utilities/types';\n\n/** Mapping of available query parameters for the triggers index endpoint */\nexport interface PlaceTriggerQueryOptions extends PlaceResourceQueryOptions {}\n\n/** Mapping of available query parameters for the triggers show endpoint */\nexport interface PlaceTriggerShowOptions {\n /** Return the instances associated with this trigger */\n instances?: boolean;\n}\n\nexport interface TriggerActions {\n /** List of functions to execute when the trigger is activated */\n functions: TriggerFunction[];\n /** List of emails to send when the trigger is activated */\n mailers: TriggerMailer[];\n}\n\nexport interface TriggerMailer {\n /** List of email addresses to mail to */\n emails: string[];\n /** Contents of the email to send */\n content: string;\n}\n\nexport interface TriggerFunction {\n /** Module to execute the function on */\n mod: string;\n /** Name of the function to execute */\n method: string;\n /** Map of arguments to pass to the function */\n args?: ExecuteArgs;\n}\n\n/** Mapping of method parameters to argument value */\nexport type ExecuteArgs = HashMap;\n\nexport interface TriggerConditions {\n /** List of comparisions used to activate the trigger */\n comparisons: TriggerComparison[];\n /** List of time based activators for the trigger */\n time_dependents: TriggerTimeCondition[];\n}\n\nexport interface TriggerComparison {\n /** Left hand side details for the comparision */\n left: TriggerConditionValue;\n /** Operator to use for comparing both sides */\n operator: TriggerConditionOperator;\n /** Right hand side details for the comparision */\n right: TriggerConditionValue;\n}\n\nexport enum TriggerConditionOperator {\n EQ = 'equal',\n NEQ = 'not_equal',\n GT = 'greater_than',\n GTE = 'greater_than_or_equal',\n LT = 'less_than',\n LTE = 'less_than_or_equal',\n AND = 'and',\n OR = 'or',\n XOR = 'exclusive_or',\n}\n\nexport type TriggerConditionValue =\n | TriggerStatusVariable\n | TriggerConditionConstant;\n\nexport type TriggerConditionConstant = number | string | boolean;\n\nexport interface TriggerStatusVariable {\n /** Module class name associated with the status variable */\n mod: string;\n /** Name of the status variable */\n status: string;\n /** Sub keys to look at in the status variable's data */\n keys: string[];\n}\n\nexport type TriggerTimeCondition =\n | TriggerAtTimeCondition\n | TriggerCronTimeCondition;\n\nexport interface TriggerAtTimeCondition {\n /** Type of time condition. Either a specific time or cron string */\n type: TriggerTimeConditionType.AT;\n /** Unix epoch in seconds */\n time: number;\n}\n\nexport interface TriggerCronTimeCondition {\n /** Type of time condition. Either a specific time or cron string */\n type: TriggerTimeConditionType.CRON;\n /** CRON tab string */\n cron: string;\n /** Timezone associated with the schedule */\n timezone: string;\n}\n\nexport enum TriggerTimeConditionType {\n AT = 'at',\n CRON = 'cron',\n}\n\nexport interface TriggerWebhook {\n type: TriggerWebhookType;\n payload?: string;\n}\n\nexport enum TriggerWebhookType {\n ExecuteBefore,\n ExecuteAfter,\n PayloadOnly,\n IgnorePayload,\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport interface WorktimePreference {\n /* Index of the day of the week. `0` being Sunday */\n day_of_week: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n blocks: WorktimeBlock[];\n}\n\nexport interface WorktimeBlock {\n /* Start time of work hours. e.g. `7.5` being 7:30AM */\n start_time: number;\n /* End time of work hours. e.g. `18.5` being 6:30PM */\n end_time: number;\n /** Name of the location the work is being performed at */\n location?: string;\n}\n\n/**\n * Representation of the user model in Place\n */\nexport class PlaceUser extends PlaceResource {\n /** Hash of the email address of the user */\n public readonly email_digest: string;\n /** ID of the authority associated with the user */\n public readonly authority_id: string;\n /** Email address of the user */\n public readonly email: string;\n /** Phone number of the user */\n public readonly phone: string;\n /** Country that the user resides in */\n public readonly country: string;\n /** Office building the user is associated */\n public readonly building: string;\n /** Access control groups that user is associated */\n public readonly groups: string[];\n /** Avatar image for the user */\n public readonly image: string;\n /** Additional metadata associated with the user */\n public readonly metadata: string;\n /** Username credential of the user */\n public readonly login_name: string;\n /** Organisation ID of the user */\n public readonly staff_id: string;\n /** First name of the user */\n public readonly first_name: string;\n /** Last name of the user */\n public readonly last_name: string;\n /** Whether user is a support role */\n public readonly support: boolean;\n /** Whether user is a system admin role */\n public readonly sys_admin: boolean;\n /** Name of the active theme on the displayed UI */\n public readonly ui_theme: string;\n /** Card Number associated with the user */\n public readonly card_number: string;\n /** Organisational department the user belongs */\n public readonly department: string;\n /** Default worktime preferences for the user */\n public readonly work_preferences: WorktimePreference[];\n /** Overrides of the worktime preferences for the user */\n public readonly work_overrides: Record<string, WorktimePreference>;\n /** ID of the user's photo in the PlaceOS uploads service */\n public readonly photo_upload_id: string;\n /** Whether the user has opted in to location tracking */\n public readonly locatable: boolean;\n /** Password */\n protected password = '';\n /** Password */\n protected confirm_password = '';\n\n constructor(raw_data: Partial<PlaceUser> = {}) {\n super(raw_data);\n this.authority_id = raw_data.authority_id || '';\n this.email = raw_data.email || '';\n this.email_digest = raw_data.email_digest || '';\n this.phone = raw_data.phone || '';\n this.country = raw_data.country || '';\n this.building = raw_data.building || '';\n this.image = raw_data.image || '';\n this.metadata = raw_data.metadata || '';\n this.login_name = raw_data.login_name || '';\n this.staff_id = raw_data.staff_id || '';\n this.first_name = raw_data.first_name || '';\n this.last_name = raw_data.last_name || '';\n this.support = !!raw_data.support;\n this.sys_admin = !!raw_data.sys_admin;\n this.ui_theme = raw_data.ui_theme || '';\n this.card_number = raw_data.card_number || '';\n this.groups = raw_data.groups || [];\n this.department = raw_data.department || '';\n this.photo_upload_id = raw_data.photo_upload_id || '';\n this.work_preferences = raw_data.work_preferences || [];\n this.work_overrides = raw_data.work_overrides || ({} as any);\n this.locatable = raw_data.locatable ?? true;\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth/functions';\nimport { del, get, post } from '../http/functions';\nimport { create, query, remove, show, task, update } from '../resources/functions';\nimport { toQueryString } from '../utilities/api';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceUserDeleteOptions,\n PlaceUserGroupsOptions,\n PlaceUserMetadataOptions,\n PlaceUserMetadataSearchOptions,\n PlaceUserQueryOptions,\n PlaceUserShowOptions,\n} from './interfaces';\nimport { PlaceUser } from './user';\n\n/**\n * @private\n */\nconst PATH = 'users';\n\n/** Convert raw server data to a trigger object */\nfunction process(item: Partial<PlaceUser>) {\n return new PlaceUser(item);\n}\n\n/**\n * Query the available triggers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryUsers(query_params: PlaceUserQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a user\n * @param id ID of the user to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showUser(id: string, query_params: PlaceUserShowOptions = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for the currently logged in user\n * @param query_params Query parameters to add the to request URL\n */\nexport function currentUser(query_params: PlaceUserShowOptions = {}) {\n return show({ id: 'current', query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the trigger in the database\n * @param id ID of the trigger\n * @param form_data New values for the trigger\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateUser(\n id: string,\n form_data: Partial<PlaceUser>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new trigger to the database\n * @param form_data Trigger data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addUser(form_data: Partial<PlaceUser>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a user from the database\n * @param id ID of the user\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeUser(id: string, query_params: PlaceUserDeleteOptions = {}) {\n return remove({ id, query_params, path: PATH });\n}\n\n/**\n * Get the groups that users are in\n * @param query_params Query parameters including email addresses\n */\nexport function queryUserGroups(\n query_params: PlaceUserGroupsOptions,\n): Observable<HashMap<string[]>> {\n const q = toQueryString(query_params);\n const url = `${apiEndpoint()}${PATH}/groups${q ? '?' + q : ''}`;\n return get(url).pipe(map((resp: HashMap) => resp as HashMap<string[]>));\n}\n\n/**\n * Search user metadata with provided JSON Path query\n * @param query_params Query parameters including filter\n */\nexport function searchUserMetadata(\n query_params: PlaceUserMetadataSearchOptions,\n): Observable<HashMap[]> {\n const q = toQueryString(query_params);\n const url = `${apiEndpoint()}${PATH}/metadata/search${q ? '?' + q : ''}`;\n return get(url).pipe(map((resp: HashMap) => resp as HashMap[]));\n}\n\n/**\n * Obtain a token to the current user's SSO resources\n */\nexport function currentUserResourceToken(): Observable<{ token: string }> {\n const url = `${apiEndpoint()}${PATH}/resource_token`;\n return post(url, {}).pipe(map((resp: HashMap) => resp as { token: string }));\n}\n\n/**\n * Get a user's metadata\n * @param id User ID\n * @param query_params Query parameters to add to the request\n */\nexport function userMetadata(\n id: string,\n query_params: PlaceUserMetadataOptions = {},\n): Observable<HashMap> {\n return task({\n id,\n task_name: 'metadata',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Remove the saved resource token of a user\n * @param id User ID\n */\nexport function removeUserResourceToken(id: string): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/resource_token`;\n return del(url, { response_type: 'void' });\n}\n\n/**\n * Obtain a token to the specified user's SSO resources\n * @param id User ID\n */\nexport function userResourceToken(id: string): Observable<{ token: string }> {\n const url = `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/resource_token`;\n return post(url, {}).pipe(map((resp: HashMap) => resp as { token: string }));\n}\n\n/**\n * Undelete a user\n * @param id User ID\n */\nexport function reviveUser(id: string): Observable<PlaceUser> {\n return task({\n id,\n task_name: 'revive',\n form_data: {},\n method: 'post',\n callback: (item: Partial<PlaceUser>) => process(item),\n path: PATH,\n });\n}\n","import { Observable } from 'rxjs';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceResourceQueryOptions } from '../resources/interface';\nimport { PlaceTrigger } from '../triggers/trigger';\nimport { HashMap } from '../utilities/types';\nimport { PlaceZoneMetadataQueryOptions, PlaceZoneQueryOptions, PlaceZoneShowOptions } from './interfaces';\nimport { PlaceZone } from './zone';\n\n/**\n * @private\n */\nconst PATH = 'zones';\n\n/** Convert raw server data to an application object */\nfunction process(item: Partial<PlaceZone>) {\n return new PlaceZone(item);\n}\n\n/**\n * Query the available applications\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryZones(query_params: PlaceZoneQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * List the set of tags on the existing zones\n * @param query_params\n */\nexport function listZoneTags(query_params: PlaceZoneQueryOptions = {}) {\n return show<string[]>({\n id: 'tags',\n query_params,\n fn: (i) => i as string[],\n path: PATH,\n });\n}\n\n/**\n * Get the data for an application\n * @param id ID of the application to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showZone(id: string, query_params: PlaceZoneShowOptions = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the application in the database\n * @param id ID of the application\n * @param form_data New values for the application\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateZone(\n id: string,\n form_data: Partial<PlaceZone>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new application to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addZone(form_data: Partial<PlaceZone>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a zone from the database\n * @param id ID of the zone\n */\nexport function removeZone(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Query the triggers for a zone\n * @param id ID of the zone\n * @param query_params Query parameters to add the to request URL\n */\nexport function listZoneTriggers(\n id: string,\n query_params: PlaceResourceQueryOptions = {},\n) {\n return query({\n query_params,\n fn: (i: Partial<PlaceTrigger>) => new PlaceTrigger(i),\n path: `${PATH}/${id}/triggers`,\n });\n}\n\n/**\n * Execute a function of the system's module under a given zone\n * @param id Zone ID\n * @param method Name of the function to execute\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n * @param args Array of arguments to pass to the executed method\n */\nexport function executeOnZone(\n id: string,\n method: string,\n module: string,\n index: number = 1,\n args: any[] = [],\n): Observable<HashMap> {\n return task({\n id,\n task_name: `exec/${encodeURIComponent(\n module + '_' + index,\n )}/${encodeURIComponent(method)}`,\n form_data: args,\n path: PATH,\n });\n}\n\n/**\n * Get metadata associated with the selected zone\n * @param id Zone ID\n * @param query_params Query parameters to add to the request\n */\nexport function zoneMetadata(\n id: string,\n query_params: PlaceZoneMetadataQueryOptions = {},\n): Observable<HashMap> {\n return task({\n id,\n task_name: 'metadata',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n","import { getUnixTime } from 'date-fns';\nimport { HashMap } from '../utilities/types';\n\nexport type MediaType =\n | 'unknown'\n | 'image'\n | 'video'\n | 'audio'\n | 'plugin'\n | 'webpage'\n | 'externalimage'\n | 'external_image';\n\nexport enum MediaAnimation {\n Default = 0,\n Cut,\n CrossFade,\n SlideTop,\n SlideLeft,\n SlideRight,\n SlideBottom,\n}\n\nexport type MediaOrientation =\n | 'unspecified'\n | 'portrait'\n | 'landscape'\n | 'square';\n\nexport class SignageMedia {\n public readonly id: string;\n public readonly created_at: number;\n public readonly updated_at: number;\n public readonly name: string;\n public readonly description: string;\n public readonly authority_id: string;\n public readonly start_time: number;\n public readonly play_time: number;\n public readonly video_length: number;\n public readonly animation?: MediaAnimation;\n public readonly media_type: MediaType;\n public readonly orientation: MediaOrientation;\n public readonly media_uri: string;\n public readonly media_id: string;\n public readonly thumbnail_id: string;\n public readonly plugin_id: string;\n public readonly plugin_params: HashMap;\n public readonly play_count: number;\n public readonly valid_from?: number;\n public readonly valid_until?: number;\n\n public get media_url() {\n return this.media_id\n ? `/api/engine/v2/uploads/${this.media_id}/url`\n : this.media_uri;\n }\n\n public get thumbnail_url() {\n return `/api/engine/v2/uploads/${this.thumbnail_id}/url`;\n }\n\n constructor(data: Partial<SignageMedia>) {\n this.id = data.id || '';\n this.created_at = data.created_at || getUnixTime(Date.now());\n this.updated_at = data.updated_at || getUnixTime(Date.now());\n this.name = data.name || '';\n this.description = data.description || '';\n this.authority_id = data.authority_id || '';\n this.start_time = data.start_time || 0;\n this.play_time = data.play_time || 0;\n this.video_length = data.video_length || 0;\n this.animation = data.animation;\n this.media_type = data.media_type || 'unknown';\n this.orientation = data.orientation || 'unspecified';\n this.media_uri = data.media_uri || '';\n this.media_id = data.media_id || '';\n this.thumbnail_id = data.thumbnail_id || '';\n this.plugin_id = data.plugin_id || '';\n this.plugin_params = data.plugin_params || {};\n this.play_count = data.play_count || 0;\n this.valid_from = data.valid_from;\n this.valid_until = data.valid_until;\n }\n}\n","import { MediaAnimation } from './media.class';\n\nexport class SignagePlaylistMedia {\n public readonly id: string;\n public readonly playlist_id: string;\n public readonly items: string[];\n public readonly created_at: number;\n public readonly updated_at: number;\n\n public readonly user_id: string;\n public readonly user_name: string;\n public readonly user_email: string;\n\n public readonly approved: boolean;\n public readonly approved_by_id: string;\n public readonly approved_by_email: string;\n public readonly approved_by_name: string;\n\n constructor(data: Partial<SignagePlaylistMedia> = {}) {\n this.id = data.id || '';\n this.playlist_id = data.playlist_id || '';\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n\n this.items = data.items || [];\n\n this.approved = !!data.approved;\n this.approved_by_id = data.approved_by_id || '';\n this.approved_by_email = data.approved_by_email || '';\n this.approved_by_name = data.approved_by_name || '';\n\n this.user_id = data.user_id || '';\n this.user_name = data.user_name || '';\n this.user_email = data.user_email || '';\n }\n}\n\nexport class SignagePlaylist {\n public readonly id: string;\n public readonly created_at: number;\n public readonly updated_at: number;\n public readonly name: string;\n public readonly description: string;\n public readonly authority_id: string;\n public readonly orientation: string;\n public readonly play_count: number;\n public readonly play_through_count: number;\n public readonly default_animation: MediaAnimation;\n public readonly random: boolean;\n public readonly enabled: boolean;\n public readonly default_duration: number;\n public readonly play_hours: string;\n public readonly play_at: string;\n public readonly play_cron: string;\n public readonly valid_from?: number;\n public readonly valid_until?: number;\n\n constructor(data: Partial<SignagePlaylist>) {\n this.id = data.id || '';\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n this.name = data.name || '';\n this.description = data.description || '';\n this.authority_id = data.authority_id || '';\n this.orientation = data.orientation || '';\n this.play_count = data.play_count || 0;\n this.play_through_count = data.play_through_count || 0;\n this.default_animation = data.default_animation || MediaAnimation.Cut;\n this.random = data.random || false;\n this.enabled = data.enabled ?? true;\n this.default_duration = data.default_duration ?? 15 * 1000;\n this.valid_from = data.valid_from;\n this.valid_until = data.valid_until;\n this.play_hours = data.play_hours || '';\n this.play_at = data.play_at || '';\n this.play_cron = data.play_cron || '';\n }\n}\n","import { HashMap } from '../utilities/types';\n\nexport type SignagePlaybackType = 'static' | 'interactive' | 'playsthrough';\n\nexport class SignagePlugin {\n public readonly id: string;\n public readonly created_at: number;\n public readonly updated_at: number;\n public readonly name: string;\n public readonly description: string;\n public readonly uri: string;\n public readonly playback_type: SignagePlaybackType;\n public readonly authority_id: string;\n public readonly enabled: boolean;\n public readonly params: HashMap;\n public readonly defaults: HashMap;\n\n constructor(data: Partial<SignagePlugin> = {}) {\n this.id = data.id || '';\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n this.name = data.name || '';\n this.description = data.description || '';\n this.uri = data.uri || '';\n this.playback_type = data.playback_type || 'static';\n this.authority_id = data.authority_id || '';\n this.enabled = data.enabled ?? true;\n this.params = data.params || {};\n this.defaults = data.defaults || {};\n }\n}\n","import { create, query, remove, show, update } from '../api';\nimport { apiEndpoint } from '../auth';\nimport { HttpJsonOptions } from '../http/interfaces';\nimport { task } from '../resources/functions';\nimport {\n SignageMediaQueryOptions,\n SignageMetrics,\n SignagePluginQueryOptions,\n} from './interfaces';\nimport { SignageMedia } from './media.class';\nimport { SignagePlaylist, SignagePlaylistMedia } from './playlist.class';\nimport { SignagePlugin } from './plugin.class';\n\n/**\n * @private\n */\nconst PATH = 'signage';\n\n/**\n * Get the data for a signage item\n * @param id ID of the signage item to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignage(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n options?: HttpJsonOptions,\n) {\n return show({ id, query_params, fn: (r) => r, path: `${PATH}`, options });\n}\n\n/**\n * Get the data for a signage item\n * @param id ID of the signage item to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignageMetrics(id: string) {\n return task({\n id,\n task_name: `metrics`,\n form_data: {},\n method: 'post',\n callback: (d) => d as SignageMetrics,\n path: PATH,\n });\n}\n\n/**\n * @private\n */\nconst MEDIA_PATH = 'signage/media';\n\n/** Convert raw server data to an signagemedia object */\nfunction processMedia(item: Partial<SignageMedia>) {\n return new SignageMedia(item);\n}\n\n/**\n * Query the available media\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySignageMedia(query_params: SignageMediaQueryOptions = {}) {\n return query({ query_params, fn: processMedia, path: MEDIA_PATH });\n}\n\n/**\n * Get the data for a media item\n * @param id ID of the media item to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignageMedia(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n) {\n return show({ id, query_params, fn: processMedia, path: MEDIA_PATH });\n}\n\n/**\n * Update the media item in the database\n * @param id ID of the media item\n * @param form_data New values for the media item\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSignageMedia(\n id: string,\n form_data: Partial<SignageMedia>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processMedia,\n path: MEDIA_PATH,\n });\n}\n\n/**\n * Add a new media item to the database\n * @param form_data Media item data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSignageMedia(form_data: Partial<SignageMedia>) {\n return create({\n form_data,\n query_params: {},\n fn: processMedia,\n path: MEDIA_PATH,\n });\n}\n\n/**\n * Remove an media item from the database\n * @param id ID of the media item\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeSignageMedia(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: MEDIA_PATH });\n}\n\n/**\n * Get the thumbnail URL for a media item.\n * This is the endpoint resolves to the image for the media item's thumbnail.\n */\nexport function mediaThumbnail(id: string): string {\n return `${apiEndpoint()}/${MEDIA_PATH}/${id}/thumbnail`;\n}\n\n/**\n * @private\n */\nconst PLAYLISTS_PATH = 'signage/playlists';\n\n/** Convert raw server data to an playlist object */\nfunction processPlaylist(item: Partial<SignagePlaylist>) {\n return new SignagePlaylist(item);\n}\n\n/**\n * Query the available playlists\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySignagePlaylists(\n query_params: SignageMediaQueryOptions = {},\n) {\n return query({ query_params, fn: processPlaylist, path: PLAYLISTS_PATH });\n}\n\n/**\n * Get the data for a playlist\n * @param id ID of the playlist to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignagePlaylist(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n) {\n return show({\n id,\n query_params,\n fn: processPlaylist,\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Update the playlist in the database\n * @param id ID of the playlist\n * @param form_data New values for the playlist\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSignagePlaylist(\n id: string,\n form_data: Partial<SignagePlaylist>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processPlaylist,\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Add a new playlist to the database\n * @param form_data Playlist data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSignagePlaylist(form_data: Partial<SignagePlaylist>) {\n return create({\n form_data,\n query_params: {},\n fn: processPlaylist,\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Remove an playlist from the database\n * @param id ID of the playlist\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeSignagePlaylist(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: PLAYLISTS_PATH });\n}\n\n/**\n * Get media for a playlist\n * @param id ID of the playlist\n * @param query_params Query parameters to add the to request URL\n */\nexport function listSignagePlaylistMedia(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n) {\n return task({\n id,\n task_name: 'media',\n form_data: query_params,\n method: 'get',\n callback: (value: SignagePlaylistMedia) =>\n new SignagePlaylistMedia(value),\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * List all versions of the media lists for a playlist\n * @param id ID of the playlist\n * @param query_params Query parameters to add the to request URL\n */\nexport function listSignagePlaylistMediaRevisions(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n) {\n return task({\n id,\n task_name: 'media/revisions',\n form_data: query_params,\n method: 'get',\n callback: (list: SignagePlaylistMedia[]) =>\n list.map(\n (item: SignagePlaylistMedia) => new SignagePlaylistMedia(item),\n ),\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Approve the latest revision of the media list for a playlist\n * @param id ID of the playlist to approve\n */\nexport function approveSignagePlaylist(id: string) {\n return task({\n id,\n task_name: 'media/approve',\n method: 'post',\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Update the media for a playlist\n * @param id ID of the playlist\n * @param form_data New list of media IDs for the playlist\n */\nexport function updateSignagePlaylistMedia(id: string, form_data: string[]) {\n return task({\n id,\n task_name: 'media',\n form_data,\n method: 'post',\n path: PLAYLISTS_PATH,\n callback: (value: SignagePlaylistMedia) =>\n new SignagePlaylistMedia(value),\n });\n}\n\n/**\n * @private\n */\nconst PLUGINS_PATH = 'signage/plugins';\n\n/** Convert raw server data to a signage plugin object */\nfunction processPlugin(item: Partial<SignagePlugin>) {\n return new SignagePlugin(item);\n}\n\n/**\n * Query the available signage plugins\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySignagePlugins(\n query_params: SignagePluginQueryOptions = {},\n) {\n return query({ query_params, fn: processPlugin, path: PLUGINS_PATH });\n}\n\n/**\n * Get the data for a signage plugin\n * @param id ID of the signage plugin to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignagePlugin(\n id: string,\n query_params: SignagePluginQueryOptions = {},\n) {\n return show({\n id,\n query_params,\n fn: processPlugin,\n path: PLUGINS_PATH,\n });\n}\n\n/**\n * Update the signage plugin in the database\n * @param id ID of the signage plugin\n * @param form_data New values for the signage plugin\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSignagePlugin(\n id: string,\n form_data: Partial<SignagePlugin>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processPlugin,\n path: PLUGINS_PATH,\n });\n}\n\n/**\n * Add a new signage plugin to the database\n * @param form_data Signage plugin data\n */\nexport function addSignagePlugin(form_data: Partial<SignagePlugin>) {\n return create({\n form_data,\n query_params: {},\n fn: processPlugin,\n path: PLUGINS_PATH,\n });\n}\n\n/**\n * Remove a signage plugin from the database\n * @param id ID of the signage plugin\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeSignagePlugin(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: PLUGINS_PATH });\n}\n","export class SurveyAnswer {\n id: number;\n question_id: number;\n survey_id: number;\n type: string;\n answer_json: Record<string, any>;\n\n constructor(_data: Partial<SurveyAnswer>) {\n this.id = _data.id || 0;\n this.question_id = _data.question_id || 0;\n this.survey_id = _data.survey_id || 0;\n this.type = _data.type || '';\n this.answer_json = _data.answer_json || {};\n }\n}\n","import { map } from 'rxjs/operators';\nimport { get, post } from '../../api';\nimport { toQueryString } from '../../utilities/api';\nimport { AnswerQueryOptions } from './interfaces';\nimport { SurveyAnswer } from './model';\n\n/**\n * @private\n */\nconst PATH = '/api/staff/v1/surveys/answers';\n\n/**\n * Query the available answers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAnswers(query_params: AnswerQueryOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}${query ? '?' + query : ''}`).pipe(\n map((l: any) => l.map((_: any) => new SurveyAnswer(_))),\n );\n}\n\n/**\n * Add a new answer to the database\n * @param form_data Answer data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAnswer(form_data: Partial<SurveyAnswer>[]) {\n return post(`${PATH}`, form_data).pipe(\n map((l: any) => l.map((_: any) => new SurveyAnswer(_))),\n );\n}\n","export class SurveyInvitation {\n id: number;\n survey_id: number;\n token: string;\n email: string;\n sent: boolean;\n\n constructor(_data: Partial<SurveyInvitation>) {\n this.id = _data.id || 0;\n this.survey_id = _data.survey_id || 0;\n this.token = _data.token || '';\n this.email = _data.email || '';\n this.sent = _data.sent ?? false;\n }\n}\n","import { map } from 'rxjs/operators';\nimport { del, get, patch, post, put } from '../../api';\nimport { toQueryString } from '../../utilities/api';\nimport { InvitationQueryOptions, InvitationShowOptions } from './interfaces';\nimport { SurveyInvitation } from './model';\n\n/**\n * @private\n */\nconst PATH = '/api/staff/v1/surveys/invitations';\n\n/**\n * Query the available invitations\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryInvitations(query_params: InvitationQueryOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}${query ? '?' + query : ''}`).pipe(\n map((l: any) => l.map((_: any) => new SurveyInvitation(_))),\n );\n}\n\n/**\n * Get the data for an invitation\n * @param id ID of the surveyinvitation to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showInvitation(\n token: string,\n query_params: InvitationShowOptions = {},\n) {\n const query = toQueryString(query_params);\n return get(`${PATH}/${token}${query ? '?' + query : ''}`).pipe(\n map((l: any) => new SurveyInvitation(l)),\n );\n}\n\n/**\n * Update the surveyinvitation in the database\n * @param id ID of the invitation\n * @param form_data New values for the invitation\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateInvitation(\n token: string,\n form_data: Partial<SurveyInvitation>,\n method: 'put' | 'patch' = 'patch',\n) {\n return (method === 'put' ? put : patch)(`${PATH}/${token}`, form_data).pipe(\n map((l: any) => new SurveyInvitation(l)),\n );\n}\n\n/**\n * Add a new surveyinvitation to the database\n * @param form_data SurveyInvitation data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addInvitation(form_data: Partial<SurveyInvitation>) {\n return post(`${PATH}`, form_data).pipe(\n map((l: any) => new SurveyInvitation(l)),\n );\n}\n\n/**\n * Remove an surveyinvitation from the database\n * @param id ID of the invitation\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeInvitation(\n token: string,\n query_params: Record<string, any> = {},\n) {\n const query = toQueryString(query_params);\n return del(`${PATH}/${token}${query ? '?' + query : ''}`);\n}\n","export class SurveyQuestion {\n id: number;\n title: string;\n description?: string;\n type: string;\n options: any;\n required: boolean;\n max_rating: number;\n choices: Array<any>;\n tags: Array<string>;\n deleted: boolean;\n\n constructor(_data: Partial<SurveyQuestion>) {\n this.id = _data.id || 0;\n this.title = _data.title || '';\n this.description = _data.description || '';\n this.type = _data.type || '';\n this.options = _data.options || {};\n this.required = _data.required || false;\n this.max_rating = _data.max_rating || 0;\n this.choices = _data.choices || [];\n this.tags = _data.tags || [];\n this.deleted = _data.deleted || false;\n }\n}\n","import { map } from 'rxjs/operators';\nimport { del, get, patch, post, put } from '../../api';\nimport { toQueryString } from '../../utilities/api';\nimport { QuestionQueryOptions, QuestionShowOptions } from './interfaces';\nimport { SurveyQuestion } from './model';\n\n/**\n * @private\n */\nconst PATH = '/api/staff/v1/surveys/questions';\n\n/**\n * Query the available questions\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryQuestions(query_params: QuestionQueryOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}${query ? '?' + query : ''}`).pipe(\n map((l: any) => l.map((_: any) => new SurveyQuestion(_))),\n );\n}\n\n/**\n * Get the data for an question\n * @param id ID of the surveyquestion to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showQuestion(\n id: string,\n query_params: QuestionShowOptions = {},\n) {\n const query = toQueryString(query_params);\n return get(`${PATH}/${id}${query ? '?' + query : ''}`).pipe(\n map((l: any) => new SurveyQuestion(l)),\n );\n}\n\n/**\n * Add a new surveyquestion to the database\n * @param form_data SurveyQuestion data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addQuestion(form_data: Partial<SurveyQuestion>) {\n return post(`${PATH}`, form_data).pipe(\n map((l: any) => new SurveyQuestion(l)),\n );\n}\n\n/**\n * Update the question in the database\n * @param id ID of the question\n * @param form_data New values for the question\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateQuestion(\n id: string,\n form_data: Partial<SurveyQuestion>,\n method: 'put' | 'patch' = 'patch',\n) {\n return (method === 'put' ? put : patch)(`${PATH}/${id}`, form_data).pipe(\n map((l: any) => new SurveyQuestion(l)),\n );\n}\n\n/**\n * Remove an surveyquestion from the database\n * @param id ID of the question\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeQuestion(\n id: string,\n query_params: Record<string, any> = {},\n) {\n const query = toQueryString(query_params);\n return del(`${PATH}/${id}${query ? '?' + query : ''}`);\n}\n","export class Survey {\n public readonly id: number;\n public readonly title: string;\n public readonly description?: string;\n public readonly trigger: string;\n public readonly building_id: string;\n public readonly zone_id: string;\n public readonly pages: SurveyPage[];\n\n constructor(_data: Partial<Survey>) {\n this.id = _data.id || 0;\n this.title = _data.title || '';\n this.description = _data.description || '';\n this.building_id = _data.building_id || '';\n this.zone_id = _data.zone_id || '';\n this.pages = _data.pages || [];\n this.trigger = _data.trigger || 'NONE';\n }\n}\n\nexport interface SurveyPage {\n title: string;\n description?: string;\n question_order: number[];\n}\n","import { map } from 'rxjs/operators';\nimport { del, get, patch, post, put } from '../../api';\nimport { toQueryString } from '../../utilities/api';\nimport { SurveyQueryOptions, SurveyShowOptions } from './interfaces';\nimport { Survey } from './model';\n\n/**\n * @private\n */\nconst PATH = '/api/staff/v1/surveys';\n\n/**\n * Query the available surveys\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySurveys(query_params: SurveyQueryOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}${query ? '?' + query : ''}`).pipe(\n map((l: any) => l.map((_: any) => new Survey(_))),\n );\n}\n\n/**\n * Get the data for an survey\n * @param id ID of the survey to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSurvey(id: string, query_params: SurveyShowOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}/${id}${query ? '?' + query : ''}`).pipe(\n map((l: any) => new Survey(l)),\n );\n}\n\n/**\n * Update the survey in the database\n * @param id ID of the survey\n * @param form_data New values for the survey\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSurvey(\n id: string,\n form_data: Partial<Survey>,\n method: 'put' | 'patch' = 'patch',\n) {\n return (method === 'put' ? put : patch)(`${PATH}/${id}`, form_data).pipe(\n map((l: any) => new Survey(l)),\n );\n}\n\n/**\n * Add a new survey to the database\n * @param form_data Survey data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSurvey(form_data: Partial<Survey>) {\n return post(`${PATH}`, form_data).pipe(map((l: any) => new Survey(l)));\n}\n\n/**\n * Remove an survey from the database\n * @param id ID of the survey\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeSurvey(\n id: string,\n query_params: Record<string, any> = {},\n) {\n const query = toQueryString(query_params);\n return del(`${PATH}/${id}${query ? '?' + query : ''}`);\n}\n","export class PlaceAssetCategory {\n readonly id: string;\n readonly parent_category_id: string;\n readonly name: string;\n readonly description: string;\n readonly hidden: boolean;\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceAssetCategory>) {\n this.id = data.id || '';\n this.parent_category_id = data.parent_category_id || '';\n this.name = data.name || '';\n this.description = data.description || '';\n this.hidden = data.hidden || false;\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n\nexport class PlaceAssetPurchaseOrder {\n readonly id: string;\n readonly purchase_order_number: string;\n readonly invoice_number: string;\n readonly supplier_details: Record<string, string>;\n readonly purchase_date: number;\n readonly unit_price: number;\n readonly expected_service_start_date: number;\n readonly expected_service_end_date: number;\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceAssetPurchaseOrder>) {\n this.id = data.id || '';\n this.purchase_order_number = data.purchase_order_number || '';\n this.invoice_number = data.invoice_number || '';\n this.supplier_details = data.supplier_details || {};\n this.purchase_date = data.purchase_date || 0;\n this.unit_price = data.unit_price || 0;\n this.expected_service_start_date = data.expected_service_start_date || 0;\n this.expected_service_end_date = data.expected_service_end_date || 0;\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n\nexport class PlaceAssetType {\n readonly id: string;\n readonly category_id: string;\n readonly name: string;\n readonly brand: string;\n readonly description: string;\n readonly model_number: string;\n readonly images: string[];\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceAssetType>) {\n this.id = data.id || '';\n this.category_id = data.category_id || '';\n this.name = data.name || '';\n this.brand = data.brand || '';\n this.description = data.description || '';\n this.model_number = data.model_number || '';\n this.images = data.images || [];\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n\nexport class PlaceAsset {\n readonly id: string;\n readonly parent_id: string;\n readonly asset_type_id: string;\n readonly purchase_order_id: string;\n readonly zone_id: string;\n readonly identifier: string;\n readonly serial_number: string;\n readonly other_data: Record<string, string>;\n readonly barcode: string;\n readonly name: string;\n readonly client_ids: Record<string, string>;\n readonly map_id: string;\n readonly bookable: boolean;\n readonly accessible: boolean;\n readonly zones: string[];\n readonly place_groups: string[];\n readonly assigned_to: string;\n readonly assigned_name: string;\n readonly features: string[];\n readonly images: string[];\n readonly notes: string;\n readonly security_system_groups: string[];\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceAsset>) {\n this.id = data.id || '';\n this.parent_id = data.parent_id || '';\n this.asset_type_id = data.asset_type_id || '';\n this.purchase_order_id = data.purchase_order_id || '';\n this.zone_id = data.zone_id || '';\n this.identifier = data.identifier || '';\n this.serial_number = data.serial_number || '';\n this.other_data = data.other_data || {};\n this.barcode = data.barcode || '';\n this.name = data.name || '';\n this.client_ids = data.client_ids || {};\n this.map_id = data.map_id || '';\n this.bookable = data.bookable || false;\n this.accessible = data.accessible || false;\n this.zones = data.zones || [];\n this.place_groups = data.place_groups || [];\n this.assigned_to = data.assigned_to || '';\n this.assigned_name = data.assigned_name || '';\n this.features = data.features || [];\n this.images = data.images || [];\n this.notes = data.notes || '';\n this.security_system_groups = data.security_system_groups || [];\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n","import { map } from 'rxjs';\nimport {\n create,\n del,\n patch,\n post,\n put,\n query,\n remove,\n show,\n update,\n} from '../api';\nimport { apiEndpoint } from '../auth';\nimport { toQueryString } from '../utilities/api';\nimport {\n PlaceAsset,\n PlaceAssetCategory,\n PlaceAssetPurchaseOrder,\n PlaceAssetType,\n} from './assets.class';\nimport {\n PlaceAssetCategoryQueryOptions,\n PlaceAssetPurchaseOrderQueryOptions,\n PlaceAssetQueryOptions,\n PlaceAssetTypeQueryOptions,\n} from './interfaces';\n\n///////////////////////////////////////////////////////////////\n////////////////////////// Assets /////////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ASSET_PATH = 'assets';\n\n/** Convert raw server data to an asset object */\nfunction processAsset(item: Partial<PlaceAsset>) {\n return new PlaceAsset(item);\n}\n\n/**\n * Query the available assets\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAssets(query_params: PlaceAssetQueryOptions = {}) {\n return query({\n query_params,\n fn: processAsset,\n path: ASSET_PATH,\n });\n}\n\n/**\n * Get the data for an asset\n * @param id ID of the asset to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAsset(id: string, query_params: Record<string, any> = {}) {\n return show({\n id,\n query_params,\n fn: processAsset,\n path: ASSET_PATH,\n });\n}\n\n/**\n * Update the asset in the database\n * @param id ID of the asset\n * @param form_data New values for the asset\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAsset(\n id: string,\n form_data: Partial<PlaceAsset>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAsset,\n path: ASSET_PATH,\n });\n}\n\n/**\n * Add a new asset to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAsset(form_data: Partial<PlaceAsset>) {\n return create({\n form_data,\n query_params: {},\n fn: processAsset,\n path: ASSET_PATH,\n });\n}\n\n/**\n * Remove an asset from the database\n * @param id ID of the asset\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAsset(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: ASSET_PATH });\n}\n\n/**\n * Add a list of new assets to the database\n * @param form_data List of asset data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAssets(form_data: Partial<PlaceAsset>[]) {\n return post(\n `${apiEndpoint()}${ASSET_PATH}/bulk`,\n JSON.stringify(form_data),\n {},\n ).pipe(map((l: any) => l.map((_: any) => processAsset(_))));\n}\n\n/**\n * Update a list of assets in the database\n * @param id ID of the asset\n * @param form_data New values for the asset\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAssets(\n form_data: Partial<PlaceAsset>[],\n method: 'put' | 'patch' = 'patch',\n) {\n const verb = method === 'put' ? put : patch;\n return verb(\n `${apiEndpoint()}${ASSET_PATH}/bulk`,\n JSON.stringify(form_data),\n {},\n ).pipe(map((l: any) => l.map((_: any) => processAsset(_))));\n}\n\n/**\n * Remove an asset from the database\n * @param id ID of the asset\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAssets(\n id_list: string[],\n query_params: Record<string, any> = {},\n) {\n const q = toQueryString(query_params);\n return del(`${apiEndpoint()}${ASSET_PATH}/bulk${q ? '?' + q : ''}`, {\n body: JSON.stringify(id_list),\n }).pipe(map((l: any) => l.map((_: any) => processAsset(_))));\n}\n\n///////////////////////////////////////////////////////////////\n//////////////////////// Asset Types //////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ASSET_TYPE_PATH = 'asset_types';\n\n/** Convert raw server data to an asset type object */\nfunction processAssetType(item: Partial<PlaceAssetType>) {\n return new PlaceAssetType(item);\n}\n\n/**\n * Query the available asset types\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAssetTypes(query_params: PlaceAssetTypeQueryOptions = {}) {\n return query({\n query_params,\n fn: processAssetType,\n path: ASSET_TYPE_PATH,\n });\n}\n\n/**\n * Get the data for an asset type\n * @param id ID of the asset type to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAssetType(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processAssetType,\n path: ASSET_TYPE_PATH,\n });\n}\n\n/**\n * Update the asset type in the database\n * @param id ID of the asset type\n * @param form_data New values for the asset\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAssetType(\n id: string,\n form_data: Partial<PlaceAssetType>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAssetType,\n path: ASSET_TYPE_PATH,\n });\n}\n\n/**\n * Add a new asset type to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAssetType(form_data: Partial<PlaceAssetType>) {\n return create({\n form_data,\n query_params: {},\n fn: processAssetType,\n path: ASSET_TYPE_PATH,\n });\n}\n\n/**\n * Remove an asset type from the database\n * @param id ID of the asset type\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAssetType(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: ASSET_TYPE_PATH });\n}\n\n///////////////////////////////////////////////////////////////\n///////////////////// Asset Categories ////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ASSET_CATEGORY_PATH = 'asset_categories';\n\n/** Convert raw server data to an asset category object */\nfunction processAssetCategory(item: Partial<PlaceAssetCategory>) {\n return new PlaceAssetCategory(item);\n}\n\n/**\n * Query the available asset categories\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAssetCategories(\n query_params: PlaceAssetCategoryQueryOptions = {},\n) {\n return query({\n query_params,\n fn: processAssetCategory,\n path: ASSET_CATEGORY_PATH,\n });\n}\n\n/**\n * Get the data for an asset category\n * @param id ID of the asset category to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAssetCategory(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processAssetCategory,\n path: ASSET_CATEGORY_PATH,\n });\n}\n\n/**\n * Update the asset category in the database\n * @param id ID of the asset category\n * @param form_data New values for the asset category\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAssetCategory(\n id: string,\n form_data: Partial<PlaceAssetCategory>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAssetCategory,\n path: ASSET_CATEGORY_PATH,\n });\n}\n\n/**\n * Add a new asset category to the database\n * @param form_data Asset category data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAssetCategory(form_data: Partial<PlaceAssetCategory>) {\n return create({\n form_data,\n query_params: {},\n fn: processAssetCategory,\n path: ASSET_CATEGORY_PATH,\n });\n}\n\n/**\n * Remove an asset category from the database\n * @param id ID of the asset category\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAssetCategory(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: ASSET_CATEGORY_PATH });\n}\n\n///////////////////////////////////////////////////////////////\n////////////////// Asset Purchase Orders //////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ASSET_PURCHASE_ORDER_PATH = 'asset_purchase_orders';\n\n/** Convert raw server data to an asset purchase order object */\nfunction processAssetPurchaseOrder(item: Partial<PlaceAssetPurchaseOrder>) {\n return new PlaceAssetPurchaseOrder(item);\n}\n\n/**\n * Query the available asset purchase orders\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAssetPurchaseOrders(\n query_params: PlaceAssetPurchaseOrderQueryOptions = {},\n) {\n return query({\n query_params,\n fn: processAssetPurchaseOrder,\n path: ASSET_PURCHASE_ORDER_PATH,\n });\n}\n\n/**\n * Get the data for an asset purchase order\n * @param id ID of the asset purchase order to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAssetPurchaseOrder(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processAssetPurchaseOrder,\n path: ASSET_PURCHASE_ORDER_PATH,\n });\n}\n\n/**\n * Update the asset purchase order in the database\n * @param id ID of the asset purchase order\n * @param form_data New values for the asset purchase order\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAssetPurchaseOrder(\n id: string,\n form_data: Partial<PlaceAssetPurchaseOrder>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAssetPurchaseOrder,\n path: ASSET_PURCHASE_ORDER_PATH,\n });\n}\n\n/**\n * Add a new asset purchase order to the database\n * @param form_data Asset purchase order data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAssetPurchaseOrder(\n form_data: Partial<PlaceAssetPurchaseOrder>,\n) {\n return create({\n form_data,\n query_params: {},\n fn: processAssetPurchaseOrder,\n path: ASSET_PURCHASE_ORDER_PATH,\n });\n}\n\n/**\n * Remove an asset purchase order from the database\n * @param id ID of the asset purchase order\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAssetPurchaseOrder(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: ASSET_PURCHASE_ORDER_PATH });\n}\n","export class PlaceShortUrl {\n readonly id: string;\n readonly name: string;\n readonly uri: string;\n readonly description: string;\n readonly user_id: string;\n readonly user_email: string;\n readonly user_name: string;\n readonly redirect_count: number;\n readonly enabled: boolean;\n readonly valid_from: string;\n readonly valid_until: string;\n readonly authority_id: string;\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceShortUrl>) {\n this.id = data.id || '';\n this.name = data.name || '';\n this.uri = data.uri || '';\n this.description = data.description || '';\n this.user_id = data.user_id || '';\n this.user_email = data.user_email || '';\n this.user_name = data.user_name || '';\n this.redirect_count = data.redirect_count || 0;\n this.enabled = data.enabled ?? true;\n this.valid_from = data.valid_from || '';\n this.valid_until = data.valid_until || '';\n this.authority_id = data.authority_id || '';\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n","import { create, query, remove, show, update } from '../api';\nimport { apiEndpoint } from '../auth';\nimport { get } from '../http/functions';\nimport { toQueryString } from '../utilities/api';\nimport { PlaceShortUrl } from './short-url.class';\nimport {\n PlaceQrCodeOptions,\n PlaceShortUrlPngQrOptions,\n PlaceShortUrlQueryOptions,\n} from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'short_url';\n\n/** Convert raw server data to a short URL object */\nfunction processShortUrl(item: Partial<PlaceShortUrl>) {\n return new PlaceShortUrl(item);\n}\n\n/**\n * Query the available short URLs\n * @param query_params Query parameters to add to the request URL\n */\nexport function queryShortUrls(query_params: PlaceShortUrlQueryOptions = {}) {\n return query({\n query_params,\n fn: processShortUrl,\n path: PATH,\n });\n}\n\n/**\n * Get the data for a short URL\n * @param id ID of the short URL to retrieve\n * @param query_params Query parameters to add to the request URL\n */\nexport function showShortUrl(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processShortUrl,\n path: PATH,\n });\n}\n\n/**\n * Update a short URL in the database\n * @param id ID of the short URL\n * @param form_data New values for the short URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateShortUrl(\n id: string,\n form_data: Partial<PlaceShortUrl>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processShortUrl,\n path: PATH,\n });\n}\n\n/**\n * Add a new short URL to the database\n * @param form_data Short URL data\n */\nexport function addShortUrl(form_data: Partial<PlaceShortUrl>) {\n return create({\n form_data,\n query_params: {},\n fn: processShortUrl,\n path: PATH,\n });\n}\n\n/**\n * Remove a short URL from the database\n * @param id ID of the short URL\n * @param query_params Query parameters to add to the request URL\n */\nexport function removeShortUrl(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: PATH });\n}\n\n/**\n * Get the redirect URL for a short URL.\n * Returns the full redirect URL that can be used to navigate to the short URL destination.\n * @param id ID of the short URL\n */\nexport function shortUrlRedirectUrl(\n id: string,\n): string {\n return `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/redirect`;\n}\n\n/**\n * Get an SVG QR code for a short URL\n * @param id ID of the short URL\n */\nexport function getShortUrlQrCodeSvg(id: string) {\n return get(\n `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/qr_code.svg`,\n { response_type: 'text' },\n );\n}\n\n/**\n * Get the URL for a PNG QR code for a short URL.\n * Use this URL directly in an img tag or fetch it separately.\n * @param id ID of the short URL\n * @param options Options including size (between 72px and 512px)\n */\nexport function shortUrlQrCodePngUrl(\n id: string,\n options: PlaceShortUrlPngQrOptions = {},\n): string {\n const q = toQueryString(options);\n return `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/qr_code.png${q ? '?' + q : ''}`;\n}\n\n/**\n * Get the URL for generating a QR code with user-defined content.\n * @param options Options for QR code generation including content, format, and size\n */\nexport function qrCodeUrl(options: PlaceQrCodeOptions): string {\n const { format = 'svg', ...params } = options;\n const query_params = { ...params, format };\n const q = toQueryString(query_params);\n return `${apiEndpoint()}${PATH}/qr_code${q ? '?' + q : ''}`;\n}\n\n/**\n * Generate an SVG QR code with user-defined content.\n * For PNG format, use qrCodeUrl() and fetch the URL directly.\n * @param options Options for QR code generation including content and size\n */\nexport function generateQrCode(options: Omit<PlaceQrCodeOptions, 'format'>) {\n const query_params = { ...options, format: 'svg' };\n const q = toQueryString(query_params);\n return get(`${apiEndpoint()}${PATH}/qr_code${q ? '?' + q : ''}`, {\n response_type: 'text',\n });\n}\n","/** Storage type enumeration */\nexport type StorageType = 's3' | 'azure' | 'google';\n\nexport class PlaceStorage {\n readonly id: string;\n readonly storage_type: StorageType | null;\n readonly bucket_name: string;\n readonly region: string;\n readonly access_key: string;\n readonly access_secret: string;\n readonly authority_id: string;\n readonly endpoint: string;\n readonly is_default: boolean;\n readonly ext_filter: string[];\n readonly mime_filter: string[];\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceStorage>) {\n this.id = data.id || '';\n this.storage_type = data.storage_type || null;\n this.bucket_name = data.bucket_name || '';\n this.region = data.region || '';\n this.access_key = data.access_key || '';\n this.access_secret = data.access_secret || '';\n this.authority_id = data.authority_id || '';\n this.endpoint = data.endpoint || '';\n this.is_default = data.is_default ?? false;\n this.ext_filter = data.ext_filter || [];\n this.mime_filter = data.mime_filter || [];\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n","import { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceStorage } from './storage.class';\nimport { PlaceStorageQueryOptions } from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'storages';\n\n/** Convert raw server data to a storage object */\nfunction processStorage(item: Partial<PlaceStorage>) {\n return new PlaceStorage(item);\n}\n\n/**\n * Query the available storages\n * @param query_params Query parameters to add to the request URL\n */\nexport function queryStorages(query_params: PlaceStorageQueryOptions = {}) {\n return query({\n query_params,\n fn: processStorage,\n path: PATH,\n });\n}\n\n/**\n * Get the data for a storage\n * @param id ID of the storage to retrieve\n * @param query_params Query parameters to add to the request URL\n */\nexport function showStorage(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processStorage,\n path: PATH,\n });\n}\n\n/**\n * Update a storage in the database\n * @param id ID of the storage\n * @param form_data New values for the storage\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateStorage(\n id: string,\n form_data: Partial<PlaceStorage>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processStorage,\n path: PATH,\n });\n}\n\n/**\n * Add a new storage to the database\n * @param form_data Storage data\n */\nexport function addStorage(form_data: Partial<PlaceStorage>) {\n return create({\n form_data,\n query_params: {},\n fn: processStorage,\n path: PATH,\n });\n}\n\n/**\n * Remove a storage from the database\n * @param id ID of the storage\n * @param query_params Query parameters to add to the request URL\n */\nexport function removeStorage(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: PATH });\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth';\nimport { get, post } from '../http/functions';\nimport { toQueryString } from '../utilities/api';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceGuestParticipant,\n PlaceKickReason,\n PlaceWebrtcMember,\n PlaceWebrtcRoomDetails,\n PlaceWebrtcRoomsQueryOptions,\n} from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'webrtc';\n\n/**\n * Query the list of public chat rooms for the current domain\n * @param query_params Query parameters to add to the request URL\n */\nexport function queryWebrtcRooms(\n query_params: PlaceWebrtcRoomsQueryOptions = {},\n): Observable<PlaceWebrtcRoomDetails[]> {\n const query = toQueryString(query_params);\n const url = `${apiEndpoint()}${PATH}/rooms${query ? '?' + query : ''}`;\n return get(url).pipe(map((resp: HashMap) => resp as PlaceWebrtcRoomDetails[]));\n}\n\n/**\n * Get the details of a public chat room\n * @param system_id Either a system ID or a unique permalink\n */\nexport function showWebrtcRoom(\n system_id: string,\n): Observable<PlaceWebrtcRoomDetails> {\n const url = `${apiEndpoint()}${PATH}/room/${encodeURIComponent(system_id)}`;\n return get(url).pipe(map((resp: HashMap) => resp as PlaceWebrtcRoomDetails));\n}\n\n/**\n * Get a list of connected users in a chat session\n * @param session_id ID of the chat session\n */\nexport function webrtcSessionMembers(\n session_id: string,\n): Observable<PlaceWebrtcMember[]> {\n const url = `${apiEndpoint()}${PATH}/members/${encodeURIComponent(session_id)}`;\n return get(url).pipe(map((resp: HashMap) => resp as PlaceWebrtcMember[]));\n}\n\n/**\n * Request guest access to an anonymous chat room.\n * The guest participant details will be forwarded to any listening systems.\n * Additional fields provided as part of the guest post will also be forwarded.\n * @param system_id Either a system ID or a unique permalink\n * @param participant Guest participant details\n */\nexport function webrtcGuestEntry(\n system_id: string,\n participant: PlaceGuestParticipant,\n): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/guest_entry/${encodeURIComponent(system_id)}`;\n return post(url, participant).pipe(map(() => undefined));\n}\n\n/**\n * End a guest call gracefully.\n * This will remove the authentication token and close any open websockets.\n */\nexport function webrtcGuestExit(): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/guest/exit`;\n return post(url, {}).pipe(map(() => undefined));\n}\n\n/**\n * Kick a user from a chat session.\n * Similar to guest exit without the token expiration.\n * Other members of the call will stop communicating with them.\n * @param user_id ID of the user to kick\n * @param session_id ID of the chat session\n * @param reason Reason for kicking the user\n */\nexport function webrtcKickUser(\n user_id: string,\n session_id: string,\n reason: PlaceKickReason,\n): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/kick/${encodeURIComponent(user_id)}/${encodeURIComponent(session_id)}`;\n return post(url, reason).pipe(map(() => undefined));\n}\n\n/**\n * Transfer a user from one chat to another.\n * For authorized users to move people from one chat to another.\n * @param user_id ID of the user to transfer\n * @param session_id ID of the current chat session\n * @param connection_details Optional custom connection details for the transfer\n */\nexport function webrtcTransferUser(\n user_id: string,\n session_id: string,\n connection_details?: Record<string, unknown>,\n): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/transfer/${encodeURIComponent(user_id)}/${encodeURIComponent(session_id)}`;\n return post(url, connection_details || {}).pipe(map(() => undefined));\n}\n\n/**\n * Get the WebRTC signaller websocket URL.\n * This is the endpoint for managing call participants.\n */\nexport function webrtcSignallerUrl(): string {\n const endpoint = apiEndpoint();\n const wsProtocol = endpoint.startsWith('https') ? 'wss:' : 'ws:';\n const httpProtocol = endpoint.startsWith('https') ? 'https:' : 'http:';\n return endpoint.replace(httpProtocol, wsProtocol) + `${PATH}/signaller`;\n}\n","import { __assign, __extends } from \"tslib\";\nimport { Subject, AnonymousSubject } from '../../Subject';\nimport { Subscriber } from '../../Subscriber';\nimport { Observable } from '../../Observable';\nimport { Subscription } from '../../Subscription';\nimport { ReplaySubject } from '../../ReplaySubject';\nvar DEFAULT_WEBSOCKET_CONFIG = {\n url: '',\n deserializer: function (e) { return JSON.parse(e.data); },\n serializer: function (value) { return JSON.stringify(value); },\n};\nvar WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT = 'WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }';\nvar WebSocketSubject = (function (_super) {\n __extends(WebSocketSubject, _super);\n function WebSocketSubject(urlConfigOrSource, destination) {\n var _this = _super.call(this) || this;\n _this._socket = null;\n if (urlConfigOrSource instanceof Observable) {\n _this.destination = destination;\n _this.source = urlConfigOrSource;\n }\n else {\n var config = (_this._config = __assign({}, DEFAULT_WEBSOCKET_CONFIG));\n _this._output = new Subject();\n if (typeof urlConfigOrSource === 'string') {\n config.url = urlConfigOrSource;\n }\n else {\n for (var key in urlConfigOrSource) {\n if (urlConfigOrSource.hasOwnProperty(key)) {\n config[key] = urlConfigOrSource[key];\n }\n }\n }\n if (!config.WebSocketCtor && WebSocket) {\n config.WebSocketCtor = WebSocket;\n }\n else if (!config.WebSocketCtor) {\n throw new Error('no WebSocket constructor can be found');\n }\n _this.destination = new ReplaySubject();\n }\n return _this;\n }\n WebSocketSubject.prototype.lift = function (operator) {\n var sock = new WebSocketSubject(this._config, this.destination);\n sock.operator = operator;\n sock.source = this;\n return sock;\n };\n WebSocketSubject.prototype._resetState = function () {\n this._socket = null;\n if (!this.source) {\n this.destination = new ReplaySubject();\n }\n this._output = new Subject();\n };\n WebSocketSubject.prototype.multiplex = function (subMsg, unsubMsg, messageFilter) {\n var self = this;\n return new Observable(function (observer) {\n try {\n self.next(subMsg());\n }\n catch (err) {\n observer.error(err);\n }\n var subscription = self.subscribe({\n next: function (x) {\n try {\n if (messageFilter(x)) {\n observer.next(x);\n }\n }\n catch (err) {\n observer.error(err);\n }\n },\n error: function (err) { return observer.error(err); },\n complete: function () { return observer.complete(); },\n });\n return function () {\n try {\n self.next(unsubMsg());\n }\n catch (err) {\n observer.error(err);\n }\n subscription.unsubscribe();\n };\n });\n };\n WebSocketSubject.prototype._connectSocket = function () {\n var _this = this;\n var _a = this._config, WebSocketCtor = _a.WebSocketCtor, protocol = _a.protocol, url = _a.url, binaryType = _a.binaryType;\n var observer = this._output;\n var socket = null;\n try {\n socket = protocol ? new WebSocketCtor(url, protocol) : new WebSocketCtor(url);\n this._socket = socket;\n if (binaryType) {\n this._socket.binaryType = binaryType;\n }\n }\n catch (e) {\n observer.error(e);\n return;\n }\n var subscription = new Subscription(function () {\n _this._socket = null;\n if (socket && socket.readyState === 1) {\n socket.close();\n }\n });\n socket.onopen = function (evt) {\n var _socket = _this._socket;\n if (!_socket) {\n socket.close();\n _this._resetState();\n return;\n }\n var openObserver = _this._config.openObserver;\n if (openObserver) {\n openObserver.next(evt);\n }\n var queue = _this.destination;\n _this.destination = Subscriber.create(function (x) {\n if (socket.readyState === 1) {\n try {\n var serializer = _this._config.serializer;\n socket.send(serializer(x));\n }\n catch (e) {\n _this.destination.error(e);\n }\n }\n }, function (err) {\n var closingObserver = _this._config.closingObserver;\n if (closingObserver) {\n closingObserver.next(undefined);\n }\n if (err && err.code) {\n socket.close(err.code, err.reason);\n }\n else {\n observer.error(new TypeError(WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT));\n }\n _this._resetState();\n }, function () {\n var closingObserver = _this._config.closingObserver;\n if (closingObserver) {\n closingObserver.next(undefined);\n }\n socket.close();\n _this._resetState();\n });\n if (queue && queue instanceof ReplaySubject) {\n subscription.add(queue.subscribe(_this.destination));\n }\n };\n socket.onerror = function (e) {\n _this._resetState();\n observer.error(e);\n };\n socket.onclose = function (e) {\n if (socket === _this._socket) {\n _this._resetState();\n }\n var closeObserver = _this._config.closeObserver;\n if (closeObserver) {\n closeObserver.next(e);\n }\n if (e.wasClean) {\n observer.complete();\n }\n else {\n observer.error(e);\n }\n };\n socket.onmessage = function (e) {\n try {\n var deserializer = _this._config.deserializer;\n observer.next(deserializer(e));\n }\n catch (err) {\n observer.error(err);\n }\n };\n };\n WebSocketSubject.prototype._subscribe = function (subscriber) {\n var _this = this;\n var source = this.source;\n if (source) {\n return source.subscribe(subscriber);\n }\n if (!this._socket) {\n this._connectSocket();\n }\n this._output.subscribe(subscriber);\n subscriber.add(function () {\n var _socket = _this._socket;\n if (_this._output.observers.length === 0) {\n if (_socket && (_socket.readyState === 1 || _socket.readyState === 0)) {\n _socket.close();\n }\n _this._resetState();\n }\n });\n return subscriber;\n };\n WebSocketSubject.prototype.unsubscribe = function () {\n var _socket = this._socket;\n if (_socket && (_socket.readyState === 1 || _socket.readyState === 0)) {\n _socket.close();\n }\n this._resetState();\n _super.prototype.unsubscribe.call(this);\n };\n return WebSocketSubject;\n}(AnonymousSubject));\nexport { WebSocketSubject };\n//# sourceMappingURL=WebSocketSubject.js.map","import { WebSocketSubject } from './WebSocketSubject';\nexport function webSocket(urlConfigOrSource) {\n return new WebSocketSubject(urlConfigOrSource);\n}\n//# sourceMappingURL=webSocket.js.map","/** Commands allowed by Place */\nexport type PlaceCommand = 'bind' | 'unbind' | 'debug' | 'ignore' | 'exec';\n\n/** General Place websocket request metadata */\nexport interface PlaceCommandRequest {\n /** Unique request identifier */\n id: string | number;\n /** Type of the command to send to engine */\n cmd: PlaceCommand;\n /** System ID to perform the command */\n sys: string;\n /** Module on the given system to perform the command */\n mod: string;\n /** Index of the module in the system */\n index: number;\n /** Name of variable to `bind` or method to `exec` on the given module */\n name: string;\n /** Aruguments to pass to the method executed on the module */\n args?: any[];\n}\n\n/** Additional management metadata for a Place request */\nexport interface PlaceCommandRequestMetadata extends PlaceCommandRequest {\n /** Request and binding identifier */\n key: string;\n /** Request promise */\n promise?: Promise<any>;\n /** Resolve function for the request promise */\n resolve?: (_?: any) => void;\n /** Reject function for the request promise */\n reject?: (_?: any) => void;\n}\n\n/** Metadata describing the actor the request should be performed on */\nexport interface PlaceRequestOptions {\n /** System ID to perform the command */\n sys: string;\n /** Module on the given system to perform the command */\n mod: string;\n /** Index of the module in the system */\n index: number;\n /** Name of variable to `bind` or method to `exec` on the given module */\n name: string;\n}\n\n/** Place websocket exec request metadata */\nexport interface PlaceExecRequestOptions extends PlaceRequestOptions {\n args?: any[];\n}\n\n/** Websocket initialisation options */\nexport interface PlaceWebsocketOptions {\n /** Domain and port of the engine server */\n host?: string;\n /** Whether this endpoint is a fixed device */\n fixed?: boolean;\n /** Whether to use the secure communcations protocol */\n secure?: boolean;\n}\n\n/** Place webscoket API response */\nexport interface PlaceResponse {\n /** ID of the associated request */\n id: string | number;\n /** Response type */\n type: 'success' | 'error' | 'notify' | 'debug';\n /** Error code */\n code?: number;\n /** New value of binding if `notify` or return value from an `exec */\n value?: any;\n /** Request metadata */\n meta?: PlaceRequestOptions;\n /** Debug module */\n mod?: string;\n /** Debug module */\n klass?: string;\n /** Log message level */\n level?: PlaceLogLevel;\n /** Debug message */\n msg?: string;\n}\n\n/** Possible error codes returned by Place */\nexport enum PlaceErrorCodes {\n PARSE_ERROR = 0,\n BAD_REQUEST = 1,\n ACCESS_DENIED = 2,\n REQUEST_FAILED = 3,\n UNKNOWN_CMD = 4,\n SYS_NOT_FOUND = 5,\n MOD_NOT_FOUND = 6,\n UNEXPECTED_FAILURE = 7,\n}\n\n/** Simple interface for a network error response */\nexport interface SimpleNetworkError {\n /** Status code of the error */\n status: number;\n /** Details aboun the error */\n message: string;\n}\n\n/** Logging levels of debug messages */\nexport enum PlaceLogLevel {\n Info = 'info',\n Debug = 'debug',\n Warning = 'warn',\n Error = 'error',\n Fatal = 'fatal',\n Trace = 'trace',\n}\n\n/** Metadata associated with Place Debug events */\nexport interface PlaceDebugEvent {\n /** ID of the module associated with the event */\n mod_id: string;\n /** Module associated with the event */\n module: string;\n /** Logically class name of the module driver */\n class_name: string;\n /** Logging level of the message */\n level: PlaceLogLevel;\n /** Contents of the debug event */\n message: string;\n /** Unix epoch of the message arrival in seconds */\n time: number;\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nimport { HashMap } from '../utilities/types';\nimport { MockPlaceWebsocketSystem } from './mock-system';\n\nexport class MockPlaceWebsocketModule {\n [name: string]: any;\n\n constructor(\n protected _system: MockPlaceWebsocketSystem,\n properties: HashMap,\n ) {\n const proto_fn = Object.getOwnPropertyNames(\n Object.getPrototypeOf(properties),\n ).filter((_) => _.startsWith('$'));\n for (const key in properties) {\n /* istanbul ignore else */\n if (\n properties.hasOwnProperty(key) &&\n properties[key] !== undefined\n ) {\n if (properties[key] instanceof Function) {\n this.addMethod(key, properties[key]);\n } else {\n this.addProperty(key, properties[key]);\n }\n }\n }\n for (const fn of proto_fn) {\n if (properties[fn] instanceof Function) {\n this.addMethod(fn, properties[fn]);\n }\n }\n }\n\n /**\n * Call method on the module\n * @param command Name of the method to call on the module\n * @param args Array of arguments to pass to the method being called\n */\n public call<T = any>(command: string, args: any[] = []): T | null {\n if (this[`$${command}`] instanceof Function) {\n return this[`$${command}`](...args) as T;\n }\n return null;\n }\n\n /**\n * Subscribe to value changes on the given property\n * @param prop_name Name of the property\n * @param next Callback for changes to the property\n */\n public listen<T = any>(prop_name: string): Observable<T> {\n if (\n !this[`_${prop_name}`] &&\n !(this[`_${prop_name}_obs`] instanceof Observable) &&\n !this[prop_name]\n ) {\n this.addProperty<T>(prop_name, null);\n }\n const observer = this[`_${prop_name}_obs`] as Observable<T>;\n return observer;\n }\n\n /**\n * Add method to module\n * @param prop_name Name of the method\n * @param fn Method logic\n */\n private addMethod(prop_name: string, fn: (...args: any[]) => any) {\n if (prop_name[0] !== '$') {\n prop_name = `$${prop_name}`;\n }\n this[prop_name] = fn;\n }\n\n /**\n * Add observable property to module\n * @param prop_name Name of the property\n * @param value Initial value of the property\n */\n private addProperty<T = any>(prop_name: string, value: any) {\n if (prop_name[0] === '$') {\n prop_name = prop_name.replace('$', '');\n }\n this[`_${prop_name}`] = new BehaviorSubject<T>(value);\n this[`_${prop_name}_obs`] = this[`_${prop_name}`].asObservable();\n Object.defineProperty(this, prop_name, {\n get: () => this[`_${prop_name}`].getValue(),\n set: (v) => this[`_${prop_name}`].next(v),\n });\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { MockPlaceWebsocketModule } from './mock-module';\n\nexport class MockPlaceWebsocketSystem {\n [name: string]: any;\n\n constructor(properties: HashMap) {\n for (const key in properties) {\n /* istanbul ignore else */\n if (properties.hasOwnProperty(key) && properties[key]) {\n /* istanbul ignore else */\n if (properties[key] instanceof Array) {\n properties[key].forEach((i: HashMap) => {\n this.addModule(key, i);\n });\n }\n }\n }\n }\n\n /**\n * Add new module to the system\n * @param mod_name Module class\n * @param properties Properties of the new module\n */\n private addModule(mod_name: string, properties: HashMap) {\n if (!this[mod_name]) {\n this[mod_name] = [];\n }\n this[mod_name].push(new MockPlaceWebsocketModule(this, properties));\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { MockPlaceWebsocketSystem } from './mock-system';\n\n/**\n * @private\n * List of registered mock systems for websocket bindings\n */\nconst _mock_systems: HashMap<MockPlaceWebsocketSystem> = {};\n\n/** Register a mock system for websocket bindings */\nexport function registerSystem(\n id: string,\n details: HashMap<HashMap[]>,\n): MockPlaceWebsocketSystem {\n _mock_systems[id] = new MockPlaceWebsocketSystem(details);\n return _mock_systems[id];\n}\n\n/** Retrieve a mock system for websocket bindings */\nexport function mockSystem(id: string): MockPlaceWebsocketSystem {\n return _mock_systems[id];\n}\n\n/** Remove a mock system for websocket bindings */\nexport function deregisterSystem(id: string): void {\n delete _mock_systems[id];\n}\n","import { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\n\nimport {\n apiEndpoint,\n apiKey,\n authority,\n host,\n httpRoute,\n invalidateToken,\n isFixedDevice,\n isMock,\n isSecure,\n needsTokenHeader,\n refreshAuthority,\n token,\n} from '../auth/functions';\nimport {\n clearAsyncTimeout,\n destroyWaitingAsync,\n timeout,\n} from '../utilities/async';\nimport { isMobileSafari, log, simplifiedTime } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceCommandRequest,\n PlaceCommandRequestMetadata,\n PlaceDebugEvent,\n PlaceErrorCodes,\n PlaceExecRequestOptions,\n PlaceLogLevel,\n PlaceRequestOptions,\n PlaceResponse,\n SimpleNetworkError,\n} from './interfaces';\nimport { mockSystem } from './mock';\nimport { MockPlaceWebsocketModule } from './mock-module';\nimport { MockPlaceWebsocketSystem } from './mock-system';\n\n/**\n * @private\n * Time in seconds to ping the server to keep the websocket connection alive\n */\nconst KEEP_ALIVE = 15;\n/**\n * @private\n * Global counter for websocket request IDs\n */\nlet REQUEST_COUNT = 0;\n/**\n * @private\n * Websocket for connecting to engine\n */\nlet _websocket: WebSocketSubject<any> | Subject<any> | undefined;\nlet _websocket_id = 0;\n/**\n * @private\n * Request promises\n */\nconst _requests: { [id: string]: PlaceCommandRequestMetadata } = {};\n/**\n * @private\n * Subjects for listening to values of bindings\n */\nconst _binding: { [id: string]: BehaviorSubject<any> } = {};\n/**\n * @private\n * Observers for the binding subjects\n */\nconst _observers: { [id: string]: Observable<any> } = {};\n/**\n * @private\n * Observers for the binding subjects\n */\nconst _listeners: { [id: string]: Subscription } = {};\n/**\n * @private\n * BehaviorSubject holding the connection status of the websocket\n */\nconst _status = new BehaviorSubject<boolean>(false);\n_observers._place_os_status = _status.asObservable();\n/**\n * @private\n * BehaviorSubject holding the connection past websocket\n */\nconst _sync = new BehaviorSubject<[number, number]>([0, 0]);\n_observers._place_os_sync = _sync.asObservable();\nlet _connect_time = Date.now();\n/**\n * @private\n * Interval ID for the server ping callback\n */\nlet _keep_alive: number | undefined;\n/**\n * @private\n * Number of connection attempts made before the session is established\n */\nlet _connection_attempts: number = 0;\n/**\n * @private\n * Promise to handle connections to the websocket API\n */\nlet _connection_promise: Promise<void> | null = null;\n/**\n * @private\n * Timer to check the initial health of the websocket connection\n */\nlet _health_check: number | undefined;\nlet _last_pong = 0;\n/**\n * @private\n * Delay in milliseconds to cancel a request\n */\nexport const REQUEST_TIMEOUT = 10 * 1000;\n\n/** Listener for debugging events */\nexport const debug_events = new Subject<PlaceDebugEvent>();\n_observers._place_os_debug_events = debug_events.asObservable();\n\n/* istanbul ignore next */\n/**\n * @private\n * Cleanup websocket connection in tests\n */\nexport function cleanupRealtime() {\n _websocket?.complete();\n _websocket = undefined;\n REQUEST_COUNT = 0;\n for (const key in _binding) {\n if (_binding[key]) {\n delete _binding[key];\n }\n }\n for (const key in _observers) {\n if (_observers[key]) {\n delete _observers[key];\n }\n }\n _observers._place_os_status = _status.asObservable();\n for (const key in _listeners) {\n if (_listeners[key]) {\n delete _listeners[key];\n }\n }\n for (const key in _requests) {\n if (_requests[key]) {\n delete _requests[key];\n }\n }\n _status.next(false);\n clearInterval(_keep_alive);\n clearTimeout(_health_check);\n destroyWaitingAsync();\n}\n\nexport function websocketRoute() {\n return apiEndpoint().indexOf('/control/') >= 0\n ? '/control/websocket'\n : `${httpRoute()}/systems/control`;\n}\n\n/** Whether the websocket is connected */\nexport function isConnected(): boolean {\n return _status.getValue();\n}\n\n/**\n * Listen to websocket status changes\n */\nexport function status(): Observable<boolean> {\n return _observers._place_os_status;\n}\n\n/**\n * Listen to details about the connection status.\n * First value is the number of the current websocket connection.\n * Second value is the time the successful websocket connection was alive.\n * @returns\n */\nexport function connectionState(): Observable<[number, number]> {\n return _observers._place_os_sync;\n}\n\n/**\n * Listen to binding changes on the given status variable. DOES NOT BIND TO VARIABLE\n * @param binding_details Binding details\n */\nexport function listen<T = any>(\n binding_details: PlaceRequestOptions,\n): Observable<T>;\nexport function listen<T = any>(\n binding_details: PlaceRequestOptions,\n bindings: HashMap<BehaviorSubject<T>> = _binding,\n observers: HashMap<Observable<T>> = _observers,\n): Observable<T> {\n const key = `${binding_details.sys}|${binding_details.mod}_${binding_details.index}|${binding_details.name}`;\n /* istanbul ignore else */\n if (!bindings[key]) {\n bindings[key] = new BehaviorSubject<T>(undefined as any);\n observers[key] = bindings[key].asObservable();\n }\n return observers[key];\n}\n\n/**\n * Get current binding value\n * @param options Binding details\n */\nexport function value<T = any>(options: PlaceRequestOptions): T | undefined;\nexport function value<T = any>(\n options: PlaceRequestOptions,\n bindings: HashMap<BehaviorSubject<T>> = _binding,\n): T | void {\n const key = `${options.sys}|${options.mod}_${options.index}|${options.name}`;\n if (bindings[key]) {\n return bindings[key].getValue() as T;\n }\n return;\n}\n\n/**\n * Bind to status variable on the given system module\n * @param options Binding request options\n */\nexport function bind(\n options: PlaceRequestOptions,\n timeout_delay?: number,\n): Promise<void>;\nexport function bind(\n options: PlaceRequestOptions,\n timeout_delay: number = 0,\n post: (_: PlaceCommandRequest, t?: number) => Promise<void> = send,\n): Promise<void> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'bind',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * Unbind from a status variable on the given system module\n * @param options Unbind request options\n */\nexport function unbind(\n options: PlaceRequestOptions,\n timeout_delay?: number,\n): Promise<void>;\nexport function unbind(\n options: PlaceRequestOptions,\n timeout_delay: number = 0,\n post: (_: PlaceCommandRequest, t?: number) => Promise<void> = send,\n): Promise<void> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'unbind',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * Execute method on the given system module\n * @param options Exec request options\n */\nexport function execute<T = void>(\n options: PlaceExecRequestOptions,\n timeout_delay: number = REQUEST_TIMEOUT,\n post: (_: PlaceCommandRequest, t?: number) => Promise<T> = send,\n): Promise<T> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'exec',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * Listen to debug logging for on the given system module binding\n * @param options Debug request options\n */\nexport function debug(\n options: PlaceRequestOptions,\n timeout_delay?: number,\n): Promise<void>;\nexport function debug(\n options: PlaceRequestOptions,\n timeout_delay: number = REQUEST_TIMEOUT,\n post: (_: PlaceCommandRequest, t?: number) => Promise<void> = send,\n): Promise<void> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'debug',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * Stop debug logging on the given system module binding\n * @param options Debug request options\n */\nexport function ignore(\n options: PlaceRequestOptions,\n timeout_delay?: number,\n): Promise<void>;\nexport function ignore(\n options: PlaceRequestOptions,\n timeout_delay: number = REQUEST_TIMEOUT,\n post: (_: PlaceCommandRequest, t?: number) => Promise<void> = send,\n): Promise<void> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'ignore',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * @private\n * Send request to engine through the websocket connection\n * @param request New request to post to the server\n */\nexport function send<T = any>(\n request: PlaceCommandRequest,\n timeout_delay: number = REQUEST_TIMEOUT,\n tries: number = 0,\n): Promise<T> {\n const key = `${request.cmd}|${request.sys}|${request.mod}${request.index}|${\n request.name\n }|${request.args}|${simplifiedTime()}`;\n /* istanbul ignore else */\n if (!_requests[key]) {\n const req: PlaceCommandRequestMetadata = { ...request, key };\n req.promise = new Promise((resolve, reject) => {\n const retry = () => {\n delete _requests[key];\n (_requests[key] as any) = null;\n send(request, timeout_delay, tries).then(\n (_) => resolve(_),\n (_) => reject(_),\n );\n };\n if (_websocket && isConnected()) {\n if (isMock()) handleMockSend(request, _websocket, _listeners);\n req.resolve = resolve;\n req.reject = reject;\n const binding = `${request.sys}, ${request.mod}_${request.index}, ${request.name}`;\n log(\n 'WS',\n `[${request.cmd.toUpperCase()}](${request.id}) ${binding}`,\n request.args,\n );\n _websocket.next(request);\n if (timeout_delay > 0) {\n timeout(\n `${key}`,\n () => {\n reject('Request timed out.');\n delete _requests[key];\n (_requests[key] as any) = null;\n },\n timeout_delay,\n );\n }\n } else if (!_connection_promise) {\n connect().then(() => retry());\n } else {\n setTimeout(() => retry(), 1000);\n }\n });\n _requests[key] = req;\n } else {\n log('WS', `Request already in progress. Waiting...`, request);\n }\n return _requests[key].promise as Promise<any>;\n}\n\n/**\n * @private\n * Callback for messages from the server\n * @param message Message from the engine server\n */\nexport function onMessage(message: PlaceResponse | 'pong'): void {\n if (message !== 'pong' && message instanceof Object) {\n if (message.type === 'notify' && message.meta) {\n handleNotify(message.meta, message.value);\n } else if (message.type === 'success') {\n handleSuccess(message);\n } else if (message.type === 'debug') {\n log(\n 'WS',\n `[DEBUG] ${message.mod}${message.klass || ''} →`,\n message.msg,\n );\n const meta = message.meta || { mod: '', index: '' };\n debug_events.next({\n mod_id: message.mod || '<empty>',\n module: `${meta.mod}_${meta.index}`,\n class_name: message.klass || '<empty>',\n message: message.msg || '<empty>',\n level: message.level || PlaceLogLevel.Debug,\n time: Math.floor(new Date().getTime() / 1000),\n });\n } else if (message.type === 'error') {\n handleError(message);\n } else if (!(message as any).cmd) {\n // Not mock message\n log('WS', 'Invalid websocket message', message, 'error');\n }\n clearAsyncTimeout(`${message.id}`);\n } else if (message === 'pong') {\n _last_pong = Date.now();\n log('WS', `Pong!`);\n }\n}\n\n/**\n * @private\n * Handle websocket success response\n * @param message Success message\n */\nexport function handleSuccess(message: PlaceResponse) {\n const request = Object.keys(_requests)\n .map((i) => _requests[i])\n .find((item) => item?.id === message.id);\n log('WS', `[SUCCESS](${message.id})`);\n /* istanbul ignore else */\n if (request && request.resolve) {\n request.resolve(message.value);\n delete _requests[request.key];\n }\n}\n\n/**\n * @private\n * Handle websocket request error\n * @param message Error response\n */\nexport function handleError(message: PlaceResponse) {\n let type = 'UNEXPECTED FAILURE';\n switch (message.code) {\n case PlaceErrorCodes.ACCESS_DENIED:\n type = 'ACCESS DENIED';\n break;\n case PlaceErrorCodes.BAD_REQUEST:\n type = 'BAD REQUEST';\n break;\n case PlaceErrorCodes.MOD_NOT_FOUND:\n type = 'MODULE NOT FOUND';\n break;\n case PlaceErrorCodes.SYS_NOT_FOUND:\n type = 'SYSTEM NOT FOUND';\n break;\n case PlaceErrorCodes.PARSE_ERROR:\n type = 'PARSE ERROR';\n break;\n case PlaceErrorCodes.REQUEST_FAILED:\n type = 'REQUEST FAILED';\n break;\n case PlaceErrorCodes.UNKNOWN_CMD:\n type = 'UNKNOWN COMMAND';\n break;\n }\n log(\n 'WS',\n `[ERROR] ${type}(${message.id}): ${message.msg}`,\n undefined,\n 'error',\n );\n const request = Object.keys(_requests)\n .map((key) => _requests[key])\n .filter((_) => _)\n .find((request) => request.id === message.id);\n if (request && request.reject) {\n request.reject(message);\n clearAsyncTimeout(`${request.key}`);\n delete _requests[request.key];\n }\n}\n\n/**\n * @private\n * Update the current value of the binding\n * @param options Binding details\n * @param updated_value New binding value\n */\nexport function handleNotify<T = any>(\n options: PlaceRequestOptions,\n updated_value: T,\n bindings: HashMap<BehaviorSubject<T>> = _binding,\n observers: HashMap<Observable<T>> = _observers,\n): void {\n const key = `${options.sys}|${options.mod}_${options.index}|${options.name}`;\n if (!bindings[key]) {\n bindings[key] = new BehaviorSubject<T>(null as any);\n observers[key] = bindings[key].asObservable();\n }\n const binding = `${options.sys}, ${options.mod}_${options.index}, ${options.name}`;\n log('WS', `[NOTIFY] ${binding} changed`, [\n bindings[key].getValue(),\n '→',\n updated_value,\n ]);\n bindings[key].next(updated_value);\n}\n\n/**\n * @private\n * Connect to engine websocket\n */\nexport function connect(tries: number = 0): Promise<void> {\n if (_connection_promise == null) {\n _connection_promise = new Promise<void>((resolve) => {\n if (tries > 40) {\n return location.reload();\n }\n _connection_attempts++;\n _connect_time = Date.now();\n _websocket = (\n isMock() ? createMockWebSocket() : createWebsocket()\n ) as any;\n if (_websocket) {\n log('WS(Debug)', `Authority:`, [authority()]);\n log('WS', `Connecting to websocket...`);\n _websocket.subscribe(\n (resp: PlaceResponse) => {\n if (!_status.getValue()) {\n log('WS', `Connection established.`);\n resolve();\n }\n _status.next(true);\n _connection_attempts = 0;\n clearHealthCheck();\n onMessage(resp);\n },\n (err: SimpleNetworkError) => {\n _websocket = undefined;\n _connection_promise = null;\n _clearRequests();\n clearHealthCheck();\n onWebSocketError(err);\n },\n () => {\n _websocket = undefined;\n _connection_promise = null;\n _clearRequests();\n log('WS', `Connection closed by browser.`);\n _status.next(false);\n // Try reconnecting after 1 second\n reconnect();\n },\n );\n if (_keep_alive) clearInterval(_keep_alive);\n _last_pong = Date.now();\n ping();\n _keep_alive = setInterval(\n () => ping(),\n KEEP_ALIVE * 1000,\n ) as any;\n clearHealthCheck();\n _websocket_id += 1;\n _health_check = setTimeout(() => {\n log('WS', 'Unhealthy connection. Reconnecting...');\n _status.next(false);\n _connection_promise = null;\n reconnect();\n }, 30 * 1000) as any;\n } else {\n /* istanbul ignore else */\n if (!_websocket) {\n log(\n 'WS',\n `Failed to create websocket(${tries}). Retrying in ${\n 1000 * Math.min(10, tries + 1)\n }ms...`,\n undefined,\n 'error',\n );\n } else {\n log(\n 'WS',\n `Waiting on auth(${tries}). Retrying in ${\n 1000 * Math.min(10, tries + 1)\n }ms...`,\n [!!token(), !!authority()],\n 'info',\n );\n }\n setTimeout(\n () => {\n _connection_promise = null;\n connect(tries).then((_) => resolve(_));\n },\n 1000 * Math.min(10, ++tries),\n );\n }\n });\n }\n return _connection_promise;\n}\n\n/**\n * @private\n * Create websocket connection\n */\nexport function createWebsocket() {\n /* istanbul ignore if */\n if (!authority() || !token()) return null;\n const secure = isSecure() || location.protocol.indexOf('https') >= 0;\n let url = `ws${secure ? 's' : ''}://${host()}${websocketRoute()}${\n isFixedDevice() ? '?fixed_device=true' : ''\n }`;\n const tkn = token();\n let query =\n tkn === 'x-api-key' ? `api-key=${apiKey()}` : `bearer_token=${tkn}`;\n if (!needsTokenHeader() && !isMobileSafari()) {\n log('WS', `Authenticating through cookie...`);\n query += `;max-age=120;path=${websocketRoute()};`;\n query += `${secure ? 'secure;' : ''}samesite=strict`;\n document.cookie = query;\n log('WS', `Cookies:`, [document.cookie, query]);\n } else {\n log('WS', `Authenticating through URL query parameter...`);\n url += `${url.indexOf('?') >= 0 ? '&' : '?'}${query}`;\n }\n log(\n 'WS',\n `Creating websocket connection to ws${\n secure ? 's' : ''\n }://${host()}${websocketRoute()}`,\n );\n /* istanbul ignore next */\n return webSocket<any>({\n url,\n serializer: (data) =>\n typeof data === 'object' ? JSON.stringify(data) : data,\n deserializer: (data) => {\n let return_value = data.data;\n if (return_value === 'pong') return return_value;\n try {\n return JSON.parse(data.data);\n } catch (e) {\n return return_value;\n }\n },\n });\n}\n\n/**\n * @private\n * Close old websocket connect and open a new one\n */\nexport function reconnect() {\n _sync.next([_websocket_id, Date.now() - _connect_time]);\n /* istanbul ignore else */\n if (_websocket && isConnected()) {\n _websocket.complete();\n /* istanbul ignore else */\n if (_keep_alive) {\n clearInterval(_keep_alive);\n _keep_alive = undefined;\n }\n }\n log(\n 'WS',\n `Reconnecting in ${Math.min(\n 5000,\n _connection_attempts * 300 || 1000,\n )}ms...`,\n );\n timeout(\n 'reconnect',\n () => connect(),\n Math.min(5000, (_connection_attempts + 1) * 300 || 1000),\n );\n}\n\n/**\n * @private\n * Send ping through the websocket\n */\nexport function ping() {\n if (Date.now() - _last_pong > 4 * KEEP_ALIVE * 1000) {\n return reconnect();\n }\n _websocket?.next('ping');\n}\n\n/**\n * @private\n * Handle errors on the websocket\n * @param err Network error response\n */\nexport function onWebSocketError(err: SimpleNetworkError) {\n _status.next(false);\n log('WS', 'Websocket error:', err, undefined, 'error');\n /* istanbul ignore else */\n if (err.status === 401) {\n invalidateToken();\n }\n refreshAuthority();\n // Try reconnecting after 1 second\n reconnect();\n}\n\n/**\n * @private\n * Clear health check timer\n */\nexport function clearHealthCheck() {\n if (_health_check) {\n clearTimeout(_health_check);\n _health_check = undefined;\n }\n}\n\n/**\n * @private\n * Connect to engine websocket\n */\nexport function createMockWebSocket() {\n const websocket = new Subject<PlaceResponse | PlaceCommandRequest>();\n websocket.subscribe((resp: PlaceResponse | PlaceCommandRequest) =>\n onMessage(resp as PlaceResponse),\n );\n return websocket;\n}\n\n/**\n * @private\n * Send request to engine through the websocket connection\n * @param request New request to post to the server\n */\nexport function handleMockSend(\n request: PlaceCommandRequest,\n websocket: Subject<any>,\n listeners: HashMap<Subscription>,\n) {\n const key = `${request.sys}|${request.mod}_${request.index}|${request.name}`;\n const system: MockPlaceWebsocketSystem = mockSystem(request.sys);\n const module: MockPlaceWebsocketModule =\n system && system[request.mod]\n ? system[request.mod][request.index - 1 || 0]\n : null;\n if (module) {\n switch (request.cmd) {\n case 'bind':\n listeners[key] = module\n .listen(request.name)\n .subscribe((new_value) => {\n setTimeout(\n () => {\n websocket.next({\n type: 'notify',\n value: new_value,\n meta: request,\n });\n },\n Math.floor(Math.random() * 100 + 50), // Add natural delay before response\n );\n });\n break;\n case 'unbind':\n /* istanbul ignore else */\n if (listeners[key]) {\n listeners[key].unsubscribe();\n delete listeners[key];\n clearAsyncTimeout(`${key}`);\n }\n break;\n }\n timeout(\n `${request.id}-response`,\n () => {\n const resp = {\n id: request.id,\n type: 'success',\n value:\n request.cmd === 'exec'\n ? module.call(request.name, request.args)\n : null,\n } as PlaceResponse;\n websocket.next(resp);\n },\n 10,\n );\n } else {\n // Error determining system or module\n timeout(\n `${request.id}-error`,\n () =>\n websocket.next({\n id: request.id,\n type: 'error',\n code: system\n ? PlaceErrorCodes.SYS_NOT_FOUND\n : PlaceErrorCodes.MOD_NOT_FOUND,\n } as PlaceResponse),\n 10,\n );\n }\n}\n\nfunction _clearRequests() {\n for (const key in _requests) {\n if (_requests[key]) delete _requests[key];\n }\n}\n","import { Observable, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { clearAsyncTimeout, timeout } from '../utilities/async';\nimport { log } from '../utilities/general';\n\nimport { bind, listen, status, unbind, value } from './functions';\nimport { PlaceRequestOptions } from './interfaces';\nimport { PlaceModuleBinding } from './module';\n\nenum PENDING {\n NONE,\n BIND,\n UNBIND,\n}\n\nexport class PlaceVariableBinding<T = any> {\n /** Status variable name */\n public readonly name: string;\n /** Active pending state of the variable binding */\n private _pending = PENDING.NONE;\n /** Number of active bindings to this variable */\n private _binding_count: number = 0;\n /** Number of bindings to restore on reconnection */\n private _stale_bindings: number = 0;\n\n constructor(\n private _module: PlaceModuleBinding,\n _name: string,\n ) {\n this.name = _name;\n // Listen for state changes in the websocket connection\n status()\n .pipe(distinctUntilChanged())\n .subscribe((connected: boolean) => {\n if (\n connected &&\n (this._stale_bindings || this._pending === PENDING.BIND)\n ) {\n log('VAR', 'Re-binding to status variable', this.binding());\n this.rebind();\n } else if (!connected) {\n clearAsyncTimeout(\n `rebind:${JSON.stringify(this.binding())}`,\n );\n log(\n 'VAR',\n 'Binding dropped due to disconnection, re-binding when possible.',\n this.binding(),\n );\n this._stale_bindings =\n this._binding_count || this._stale_bindings;\n this._binding_count = 0;\n }\n });\n }\n\n /** Number of bindings to this status variable */\n public get count(): number {\n return this._binding_count;\n }\n\n /** Current value of the binding */\n public get value(): T | undefined {\n return value<T>(this.binding());\n }\n\n /**\n * Get an observable that emits the current value of the binding\n */\n public listen(): Observable<T> {\n return listen(this.binding());\n }\n\n /**\n * Subscribe to changes of the variable's binding value.\n * Note: Initial value emitted may be `undefined`\n * @param next Callback for changes to the bindings value\n */\n public subscribe(next: (value: T) => void): Subscription {\n return this.listen().subscribe(next);\n }\n\n public bindThenSubscribe(next: (value: T) => void): Subscription {\n const unbind = this.bind();\n return this.listen().subscribe({\n next,\n complete: () => unbind(),\n error: () => unbind(),\n });\n }\n\n /**\n * Bind to the status variable's value\n */\n public bind(): () => void {\n /* istanbul ignore else */\n if (\n (this._binding_count <= 0 && this._stale_bindings <= 0) ||\n this._pending === PENDING.UNBIND\n ) {\n this._pending = PENDING.BIND;\n bind(this.binding())\n .then(() => {\n this._binding_count++;\n this._pending = PENDING.NONE;\n })\n .catch(() => null);\n }\n return () => this.unbind();\n }\n\n /**\n * Unbind from status variable\n */\n public unbind() {\n if (this._binding_count === 1 && this._pending === PENDING.NONE) {\n this._pending = PENDING.UNBIND;\n unbind(this.binding()).then(() => {\n if (this._pending === PENDING.UNBIND)\n this._pending = PENDING.NONE;\n this._binding_count--;\n });\n } else {\n this._binding_count = Math.max(this._binding_count - 1, 0);\n }\n }\n\n /**\n * Rebind to the status variable\n */\n private async rebind() {\n if (!this._stale_bindings && this._pending !== PENDING.BIND) return;\n timeout(\n `rebind:${JSON.stringify(this.binding())}`,\n async () => {\n await bind(this.binding());\n this._binding_count = this._stale_bindings || 1;\n this._stale_bindings = 0;\n },\n 100,\n );\n }\n\n /**\n * Generate binding details for the status variable\n */\n private binding(): PlaceRequestOptions {\n return {\n sys: this._module.system.id,\n mod: this._module.name,\n index: this._module.index,\n name: this.name,\n };\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { execute, REQUEST_TIMEOUT } from './functions';\nimport { PlaceVariableBinding } from './status-variable';\nimport { PlaceSystemBinding } from './system';\n\nexport class PlaceModuleBinding {\n /** Mapping of module bindings */\n private _bindings: HashMap<PlaceVariableBinding> = {};\n\n constructor(\n private _system: PlaceSystemBinding,\n private _id: string,\n ) {}\n\n public get id(): string {\n return `${this.name}_${this.index}`;\n }\n\n /** Parent system of the module */\n public get system(): PlaceSystemBinding {\n return this._system;\n }\n\n /** Module index */\n public get index(): number {\n const parts = this._id.split('_');\n const index = parts.pop();\n return parseInt(index || '', 10) || 1;\n }\n\n /** Module name */\n public get name(): string {\n const parts = this._id.split('_');\n parts.pop();\n return parts.join('_');\n }\n\n /**\n * Get binding with the given name\n * @param name Name of the binding\n * @deprecated Use `variable` instead\n */\n public binding<T = any>(name: string) {\n if (!this._bindings[name]) {\n this._bindings[name] = new PlaceVariableBinding<T>(this, name);\n }\n return this._bindings[name] as PlaceVariableBinding<T>;\n }\n\n /**\n * Get binding with the given name\n * @param name Name of the binding\n */\n public variable<T = any>(name: string) {\n if (!this._bindings[name]) {\n this._bindings[name] = new PlaceVariableBinding<T>(this, name);\n }\n return this._bindings[name] as PlaceVariableBinding<T>;\n }\n\n /**\n * Execute method on the engine module\n * @param method Name of the method\n * @param args Array of arguments to pass to the method\n */\n public execute<T = any>(\n method: string,\n args?: any[],\n timeout_delay: number = REQUEST_TIMEOUT,\n ): Promise<T> {\n return execute<T>(\n {\n sys: this._system.id,\n mod: this.name,\n index: this.index,\n name: method,\n args,\n },\n timeout_delay,\n );\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { PlaceModuleBinding } from './module';\n\nexport class PlaceSystemBinding {\n /** Unique idetifier of the system */\n public readonly id: string;\n /** Mapping of engine modules within the system */\n private _module_list: HashMap<PlaceModuleBinding[]> = {};\n\n constructor(_id: string) {\n this.id = _id;\n }\n\n /**\n * Get binding interface for the given module\n * @param module_id ID of the module\n * @param index Index of the module within the system\n */\n public module(module_id: string, index: number = 1) {\n if (!module_id) {\n throw new Error('Invalid module ID');\n }\n const parts = module_id.split('_');\n // Check if module index is part of given ID\n if (parts.length > 1 && Number.isInteger(+parts[parts.length - 1])) {\n index = +parts[parts.length - 1];\n parts.pop();\n }\n // Make sure index is not invalid\n if (index < 1) {\n index = 1;\n }\n const module = parts.join('_');\n // Initialise module list for type\n if (!this._module_list[module]) {\n this._module_list[module] = [];\n }\n // Initialise module if it does not exist\n while (this._module_list[module].length < index) {\n this._module_list[module].push(\n new PlaceModuleBinding(\n this,\n `${module}_${this._module_list[module].length + 1}`,\n ),\n );\n }\n return this._module_list[module][index - 1];\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { PlaceModuleBinding } from './module';\nimport { PlaceSystemBinding } from './system';\n\n/**\n * @private\n * Mapping of system IDs to binding interfaces\n */\nconst _system_list: HashMap<PlaceSystemBinding> = {};\n\n/**\n * Get binding interface for an engine system\n * @param system_id ID of the system\n */\nexport function getSystem(system_id: string): PlaceSystemBinding {\n if (!_system_list[system_id]) {\n _system_list[system_id] = new PlaceSystemBinding(system_id);\n }\n return _system_list[system_id];\n}\n\n/**\n * Get binding interface for an engine module\n * @param system_id ID of the system\n * @param module_id ID of the module withing the system\n * @param index Index of the module within the system\n */\nexport function getModule(\n system_id: string,\n module_id: string,\n index: number = 1,\n): PlaceModuleBinding {\n const system = getSystem(system_id);\n return system.module(module_id, index);\n}\n"],"names":["extendStatics","d","b","p","__extends","__","__assign","t","s","i","n","__rest","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","__generator","body","_","f","y","g","verb","v","op","__values","o","m","__read","r","ar","error","__spreadArray","to","from","pack","l","__await","__asyncGenerator","q","awaitReturn","a","resume","settle","fulfill","__asyncValues","isFunction","createErrorClass","createImpl","_super","instance","ctorFunc","UnsubscriptionError","errors","err","arrRemove","arr","item","index","Subscription","initialTeardown","e_1","_a","e_2","_b","_parentage","_parentage_1","_parentage_1_1","parent_1","e_1_1","initialFinalizer","_finalizers","_finalizers_1","_finalizers_1_1","finalizer","execFinalizer","e_2_1","teardown","parent","empty","EMPTY_SUBSCRIPTION","isSubscription","config","timeoutProvider","handler","timeout","args","_i","handle","reportUnhandledError","noop","errorContext","cb","Subscriber","destination","_this","EMPTY_OBSERVER","next","complete","SafeSubscriber","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","defaultErrorHandler","observable","identity","x","pipeFromArray","fns","input","prev","fn","Observable","subscribe","operator","subscriber","isSubscriber","source","sink","promiseCtor","getPromiseCtor","Symbol_observable","operations","isObserver","hasLift","operate","init","liftedSource","createOperatorSubscriber","onNext","onComplete","onError","onFinalize","OperatorSubscriber","shouldUnsubscribe","closed_1","ObjectUnsubscribedError","Subject","subject","AnonymousSubject","_c","observer","observers","hasError","isStopped","thrownError","BehaviorSubject","_value","subscription","dateTimestampProvider","ReplaySubject","_bufferSize","_windowTime","_timestampProvider","_buffer","_infiniteTimeWindow","copy","adjustedBufferSize","now","last","Action","scheduler","work","state","delay","intervalProvider","AsyncAction","id","_id","_scheduler","_delay","errored","errorValue","actions","Scheduler","schedulerActionCtor","AsyncScheduler","SchedulerAction","action","asyncScheduler","async","EMPTY","isScheduler","isArrayLike","isPromise","isInteropObservable","isAsyncIterable","obj","createInvalidObservableTypeError","getSymbolIterator","iterator","isIterable","Symbol_iterator","readableStreamLikeToAsyncGenerator","readableStream","reader","done","isReadableStreamLike","innerFrom","fromInteropObservable","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","fromReadableStreamLike","obs","array","promise","iterable","iterable_1","iterable_1_1","asyncIterable","process","asyncIterable_1","asyncIterable_1_1","executeSchedule","parentSubscription","repeat","scheduleSubscription","observeOn","subscribeOn","scheduleObservable","schedulePromise","scheduleArray","scheduleIterable","scheduleAsyncIterable","scheduleReadableStreamLike","scheduled","throwError","errorOrErrorFactory","errorFactory","EmptyError","lastValueFrom","_hasValue","isValidDate","map","project","mergeInternals","concurrent","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","buffer","active","isComplete","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","_loop_1","bufferedValue","mergeMap","resultSelector","ii","timer","dueTime","intervalOrScheduler","intervalDuration","due","filter","predicate","take","count","seen","mapTo","delayWhen","delayDurationSelector","subscriptionDelay","duration","distinctUntilChanged","comparator","keySelector","defaultCompare","previousKey","first","currentKey","retry","configOrCount","resetOnSuccess","soFar","innerSub","subscribeForRetry","syncUnsub","resub_1","notifier","notifierSubscriber_1","switchMap","innerSubscriber","innerIndex","outerIndex","fromFetch","initWithSelector","selector","controller","signal","abortable","outerSignal","outerSignalHandler_1","perSubscriberInit","handleError","response","base64abc","base64codes","getBase64Code","charCode","code","bytesToBase64","bytes","base64ToBytes","str","missingOctets","j","base64encode","encoder","root","factory","exports","sha256","k","module","this","K","hashBlocks","w","pos","len","c","h","u","t1","t2","Hash","data","dataLength","dataPos","out","bytesHashed","left","bitLenHi","bitLenLo","padLength","HMAC","key","pad","hash","digest","hmac","fillBuffer","info","counter","num","hkdfSalt","hkdf","salt","length","okm","hmac_","bufpos","pbkdf2","password","iterations","dkLen","prf","ctr","dk","millisecondsInHour","constructFromSymbol","constructFrom","date","toDate","argument","context","addMonths","amount","options","_date","dayOfMonth","endOfDesiredMonth","daysInMonth","addMilliseconds","addHours","addSeconds","addYears","getUnixTime","isBefore","dateToCompare","log","type","msg","color","COLOURS","consoleHasColours","getFragments","query","hash_fragments","parts","convertPairStringToMap","query_fragments","str_pairs","str_pair","split_pair","NONCE_CHARS","generateNonce","nonce","removeFragment","name","new_hash","new_search","humanReadableByteCount","si","unit","exp","pre","parseLinkHeader","header","links","part","section","url","cleanObject","object","delete_values","isMobileSafari","isNestedFrame","simplifiedTime","time","interval","AbortControllerStub","toQueryString","_timers","_intervals","_subscriptions","destroyWaitingAsync","clearAsyncTimeout","clearAsyncInterval","unsub","MOCK_AUTHORITY","_options","_storage","_authority","_promises","_client_id","_code","_access_token","_refresh_token","_route","_online","_online_observer","_failed_count","resolveAuthorityUrl","domain","apiEndpoint","httpRoute","needsTokenHeader","clientId","redirectUri","setAPI_Key","api_key","trusted","setToken","apiKey","checkStoreForAuthParam","new_token","expires_at","token","return_expired","access_token","invalidateToken","authorise","refreshToken","host","hasToken","listenForToken","authority","isOnline","isMock","isSecure","onlineState","isTrusted","isFixedDevice","store","param","setup","Md5","loadAuthority","setStorage","cleanupAuth","refreshAuthority","api_authority","after_check","token_handlers","generateTokenWithCredentials","generateToken","sendToAuthorize","sendToLogin","checkToken","logout","location","tries","secure","on_error","resp","auth_url","createLoginURL","authorizeWithIFrame","iframe","callback","event","_storeTokenDetails","_redirecting","checkForAuthParameters","fragments","saved_nonce","state_parts","createAndSaveNonce","has_query","login_url","response_type","challenge","verify","generateChallenge","AVAILABLE_CHARS","uint8array","base64.base64ToBytes","base64.base64encode","base64.bytesToBase64","sha256.hash","createRefreshURL","createCredentialsURL","refresh_uri","generateTokenWithUrl","tokens","details","_handlers","_error_handler","method","setMockNotFoundHandler","handler_fn","registerMockEndpoint","handler_ops","handler_map","deregisterMockEndpoint","path_parts","mockRequest","findRequestHandler","request","processRequest","onMockRequest","route_parts","method_handlers","match","path","query_params","route_params","paramName","variance","delay_value","delay_time","_response_headers","responseHeaders","headers","get","post","put","patch","del","transform","reloadAuth","is_mock","mock_handler","success","request_obs","fetchOptions","retry_count","delay_ms","PlaceResource","raw_data","PlaceAlert","PlaceAlertDashboard","DASHBOARD_PATH","processDashboard","queryAlertDashboards","showAlertDashboard","show","updateAlertDashboard","form_data","update","addAlertDashboard","create","removeAlertDashboard","remove","listDashboardAlerts","processAlert","ALERT_PATH","queryAlerts","showAlert","updateAlert","addAlert","removeAlert","PlaceApplication","requestTotal","_total","lastRequestTotal","_last_total","_next","pass_fn","endpoint","query_str","handleHeaders","task","task_name","total_value","PATH","queryApplications","showApplication","updateApplication","addApplication","removeApplication","AuthType","AuthType2","PlaceMQTTBroker","queryBrokers","showBroker","updateBroker","addBroker","removeBroker","PlaceCluster","edges","PlaceProcess","_cluster_id","queryClusters","showCluster","queryProcesses","list","terminateProcess","clusterRebalance","clusterVersions","PlaceDomain","queryDomains","showDomain","updateDomain","addDomain","removeDomain","lookupDomainByEmail","email","EncryptionLevel","PlaceSettings","PlaceDriverRole","PlaceDriver","level","queryDrivers","showDriver","updateDriver","addDriver","removeDriver","recompileDriver","reloadDriver","isDriverCompiled","driverReadme","PlaceEdge","queryEdges","showEdge","updateEdge","addEdge","removeEdge","retrieveEdgeToken","edgeControlUrl","wsProtocol","httpProtocol","PlaceLDAPSource","queryLDAPSources","showLDAPSource","updateLDAPSource","addLDAPSource","removeLDAPSource","PlaceMetadata","PlaceTrigger","fn_list","mail_list","conditions","cmp_list","time_list","PlaceZone","trigger","PlaceZoneMetadata","metadata","listMetadata","flatten","an_array","stack","res","listMetadataHistory","showMetadata","updateMetadata","addMetadata","removeMetadata","listChildMetadata","PlaceSystem","mod","PlaceModule","keep_system","queryModules","showModule","updateModule","addModule","removeModule","startModule","stopModule","moduleState","lookupModuleState","loadModule","moduleSettings","moduleRuntimeError","executeOnModule","PlaceOAuthSource","queryOAuthSources","showOAuthSource","updateOAuthSource","addOAuthSource","removeOAuthSource","PlaceRepositoryType","PlaceRepository","queryRepositories","showRepository","updateRepository","addRepository","removeRepository","listInterfaceRepositories","listRemoteRepositoryDefaultBranch","listRemoteRepositoryBranches","listRemoteRepositoryCommits","listRepositoryDrivers","listRepositoryCommits","listRepositoryBranches","listRepositoryDefaultBranch","listRepositoryDriverDetails","pullRepositoryChanges","listRepositoryFolders","PlaceSAMLSource","querySAMLSources","showSAMLSource","updateSAMLSource","addSAMLSource","removeSAMLSource","querySettings","showSettings","updateSettings","addSettings","removeSettings","settingsHistory","querySystems","querySystemsWithEmails","showSystem","updateSystem","addSystem","removeSystem","addSystemModule","module_id","removeSystemModule","startSystem","stopSystem","executeOnSystem","systemModuleState","lookupSystemModuleState","lookup","functionList","listSystemZones","listSystemTriggers","addSystemTrigger","removeSystemTrigger","trigger_id","systemSettings","systemControlUrl","systemMetadata","showSystemTrigger","sys_id","trig_id","updateSystemTrigger","queryTriggers","showTrigger","updateTrigger","addTrigger","removeTrigger","listTriggerInstances","TriggerConditionOperator","TriggerTimeConditionType","TriggerWebhookType","TriggerWebhookType2","PlaceUser","queryUsers","showUser","currentUser","updateUser","addUser","removeUser","queryUserGroups","searchUserMetadata","currentUserResourceToken","userMetadata","removeUserResourceToken","userResourceToken","reviveUser","queryZones","listZoneTags","showZone","updateZone","addZone","removeZone","listZoneTriggers","executeOnZone","zoneMetadata","MediaAnimation","MediaAnimation2","SignageMedia","SignagePlaylistMedia","SignagePlaylist","SignagePlugin","showSignage","showSignageMetrics","MEDIA_PATH","processMedia","querySignageMedia","showSignageMedia","updateSignageMedia","addSignageMedia","removeSignageMedia","mediaThumbnail","PLAYLISTS_PATH","processPlaylist","querySignagePlaylists","showSignagePlaylist","updateSignagePlaylist","addSignagePlaylist","removeSignagePlaylist","listSignagePlaylistMedia","listSignagePlaylistMediaRevisions","approveSignagePlaylist","updateSignagePlaylistMedia","PLUGINS_PATH","processPlugin","querySignagePlugins","showSignagePlugin","updateSignagePlugin","addSignagePlugin","removeSignagePlugin","SurveyAnswer","_data","queryAnswers","addAnswer","SurveyInvitation","queryInvitations","showInvitation","updateInvitation","addInvitation","removeInvitation","SurveyQuestion","queryQuestions","showQuestion","addQuestion","updateQuestion","removeQuestion","Survey","querySurveys","showSurvey","updateSurvey","addSurvey","removeSurvey","PlaceAssetCategory","PlaceAssetPurchaseOrder","PlaceAssetType","PlaceAsset","ASSET_PATH","processAsset","queryAssets","showAsset","updateAsset","addAsset","removeAsset","addAssets","updateAssets","removeAssets","id_list","ASSET_TYPE_PATH","processAssetType","queryAssetTypes","showAssetType","updateAssetType","addAssetType","removeAssetType","ASSET_CATEGORY_PATH","processAssetCategory","queryAssetCategories","showAssetCategory","updateAssetCategory","addAssetCategory","removeAssetCategory","ASSET_PURCHASE_ORDER_PATH","processAssetPurchaseOrder","queryAssetPurchaseOrders","showAssetPurchaseOrder","updateAssetPurchaseOrder","addAssetPurchaseOrder","removeAssetPurchaseOrder","PlaceShortUrl","processShortUrl","queryShortUrls","showShortUrl","updateShortUrl","addShortUrl","removeShortUrl","shortUrlRedirectUrl","getShortUrlQrCodeSvg","shortUrlQrCodePngUrl","qrCodeUrl","format","params","generateQrCode","PlaceStorage","processStorage","queryStorages","showStorage","updateStorage","addStorage","removeStorage","queryWebrtcRooms","showWebrtcRoom","system_id","webrtcSessionMembers","session_id","webrtcGuestEntry","participant","webrtcGuestExit","webrtcKickUser","user_id","reason","webrtcTransferUser","connection_details","webrtcSignallerUrl","DEFAULT_WEBSOCKET_CONFIG","WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT","WebSocketSubject","urlConfigOrSource","sock","subMsg","unsubMsg","messageFilter","self","WebSocketCtor","protocol","binaryType","socket","evt","_socket","openObserver","queue","serializer","closingObserver","closeObserver","deserializer","webSocket","PlaceErrorCodes","PlaceLogLevel","MockPlaceWebsocketModule","_system","properties","proto_fn","command","prop_name","MockPlaceWebsocketSystem","mod_name","_mock_systems","registerSystem","mockSystem","deregisterSystem","KEEP_ALIVE","REQUEST_COUNT","_websocket","_websocket_id","_requests","_binding","_observers","_listeners","_status","_sync","_connect_time","_keep_alive","_connection_attempts","_connection_promise","_health_check","_last_pong","REQUEST_TIMEOUT","debug_events","websocketRoute","isConnected","status","connectionState","listen","binding_details","bindings","bind","timeout_delay","send","unbind","execute","debug","ignore","req","handleMockSend","binding","connect","onMessage","message","handleNotify","handleSuccess","meta","updated_value","createMockWebSocket","createWebsocket","clearHealthCheck","_clearRequests","onWebSocketError","reconnect","ping","tkn","return_value","websocket","listeners","system","new_value","PlaceVariableBinding","_module","_name","connected","PlaceModuleBinding","PlaceSystemBinding","_system_list","getSystem","getModule"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,153,154]}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../node_modules/tslib/tslib.es6.mjs","../node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../node_modules/rxjs/dist/esm5/internal/Subscription.js","../node_modules/rxjs/dist/esm5/internal/config.js","../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../node_modules/rxjs/dist/esm5/internal/util/noop.js","../node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../node_modules/rxjs/dist/esm5/internal/Subscriber.js","../node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../node_modules/rxjs/dist/esm5/internal/util/identity.js","../node_modules/rxjs/dist/esm5/internal/util/pipe.js","../node_modules/rxjs/dist/esm5/internal/Observable.js","../node_modules/rxjs/dist/esm5/internal/util/lift.js","../node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../node_modules/rxjs/dist/esm5/internal/Subject.js","../node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js","../node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","../node_modules/rxjs/dist/esm5/internal/ReplaySubject.js","../node_modules/rxjs/dist/esm5/internal/scheduler/Action.js","../node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js","../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js","../node_modules/rxjs/dist/esm5/internal/Scheduler.js","../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js","../node_modules/rxjs/dist/esm5/internal/scheduler/async.js","../node_modules/rxjs/dist/esm5/internal/observable/empty.js","../node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../node_modules/rxjs/dist/esm5/internal/observable/from.js","../node_modules/rxjs/dist/esm5/internal/observable/throwError.js","../node_modules/rxjs/dist/esm5/internal/util/EmptyError.js","../node_modules/rxjs/dist/esm5/internal/lastValueFrom.js","../node_modules/rxjs/dist/esm5/internal/util/isDate.js","../node_modules/rxjs/dist/esm5/internal/operators/map.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../node_modules/rxjs/dist/esm5/internal/observable/timer.js","../node_modules/rxjs/dist/esm5/internal/operators/filter.js","../node_modules/rxjs/dist/esm5/internal/operators/take.js","../node_modules/rxjs/dist/esm5/internal/operators/mapTo.js","../node_modules/rxjs/dist/esm5/internal/operators/delayWhen.js","../node_modules/rxjs/dist/esm5/internal/operators/delay.js","../node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js","../node_modules/rxjs/dist/esm5/internal/operators/retry.js","../node_modules/rxjs/dist/esm5/internal/operators/switchMap.js","../node_modules/rxjs/dist/esm5/internal/observable/dom/fetch.js","../node_modules/byte-base64/lib.es6.js","../node_modules/fast-sha256/sha256.js","../node_modules/ts-md5/dist/index.es.js","../node_modules/date-fns/constants.js","../node_modules/date-fns/constructFrom.js","../node_modules/date-fns/toDate.js","../node_modules/date-fns/addMonths.js","../node_modules/date-fns/addMilliseconds.js","../node_modules/date-fns/addHours.js","../node_modules/date-fns/addSeconds.js","../node_modules/date-fns/addYears.js","../node_modules/date-fns/getUnixTime.js","../node_modules/date-fns/isBefore.js","../src/utilities/general.ts","../src/utilities/abort-controller.ts","../src/utilities/api.ts","../src/utilities/async.ts","../src/auth/interfaces.ts","../src/auth/functions.ts","../src/http/mock.ts","../src/http/functions.ts","../src/resources/resource.ts","../src/alerts/alert.ts","../src/alerts/dashboard.ts","../src/alerts/functions.ts","../src/applications/application.ts","../src/resources/functions.ts","../src/applications/functions.ts","../src/broker/broker.ts","../src/broker/functions.ts","../src/clusters/cluster.ts","../src/clusters/process.ts","../src/clusters/functions.ts","../src/domains/domain.ts","../src/domains/functions.ts","../src/settings/interfaces.ts","../src/settings/settings.ts","../src/drivers/enums.ts","../src/drivers/driver.ts","../src/drivers/functions.ts","../src/edge/edge.ts","../src/edge/functions.ts","../src/ldap-sources/ldap-source.ts","../src/ldap-sources/functions.ts","../src/metadata/metadata.ts","../src/triggers/trigger.ts","../src/zones/zone.ts","../src/metadata/zone-metadata.ts","../src/metadata/functions.ts","../src/systems/system.ts","../src/modules/module.ts","../src/modules/functions.ts","../src/oauth-sources/oauth-source.ts","../src/oauth-sources/functions.ts","../src/repositories/interfaces.ts","../src/repositories/repository.ts","../src/repositories/functions.ts","../src/saml-sources/saml-source.ts","../src/saml-sources/functions.ts","../src/settings/functions.ts","../src/systems/functions.ts","../src/triggers/functions.ts","../src/triggers/interfaces.ts","../src/users/user.ts","../src/users/functions.ts","../src/zones/functions.ts","../src/signage/media.class.ts","../src/signage/playlist.class.ts","../src/signage/plugin.class.ts","../src/signage/functions.ts","../src/staff/answers/model.ts","../src/staff/answers/functions.ts","../src/staff/invitations/model.ts","../src/staff/invitations/functions.ts","../src/staff/questions/model.ts","../src/staff/questions/functions.ts","../src/staff/surveys/model.ts","../src/staff/surveys/functions.ts","../src/assets/assets.class.ts","../src/assets/functions.ts","../src/short-url/short-url.class.ts","../src/short-url/functions.ts","../src/storages/storage.class.ts","../src/storages/functions.ts","../src/webrtc/functions.ts","../node_modules/rxjs/dist/esm5/internal/observable/dom/WebSocketSubject.js","../node_modules/rxjs/dist/esm5/internal/observable/dom/webSocket.js","../src/realtime/interfaces.ts","../src/realtime/mock-module.ts","../src/realtime/mock-system.ts","../src/realtime/mock.ts","../src/realtime/functions.ts","../src/realtime/status-variable.ts","../src/realtime/module.ts","../src/realtime/system.ts","../src/realtime/binding.ts"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return function (source) {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n __extends(OperatorSubscriber, _super);\n function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : _super.prototype._next;\n _this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._error;\n _this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber.prototype.unsubscribe = function () {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar BehaviorSubject = (function (_super) {\n __extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: false,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, (this._value = value));\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map","export var dateTimestampProvider = {\n now: function () {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n//# sourceMappingURL=dateTimestampProvider.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar ReplaySubject = (function (_super) {\n __extends(ReplaySubject, _super);\n function ReplaySubject(_bufferSize, _windowTime, _timestampProvider) {\n if (_bufferSize === void 0) { _bufferSize = Infinity; }\n if (_windowTime === void 0) { _windowTime = Infinity; }\n if (_timestampProvider === void 0) { _timestampProvider = dateTimestampProvider; }\n var _this = _super.call(this) || this;\n _this._bufferSize = _bufferSize;\n _this._windowTime = _windowTime;\n _this._timestampProvider = _timestampProvider;\n _this._buffer = [];\n _this._infiniteTimeWindow = true;\n _this._infiniteTimeWindow = _windowTime === Infinity;\n _this._bufferSize = Math.max(1, _bufferSize);\n _this._windowTime = Math.max(1, _windowTime);\n return _this;\n }\n ReplaySubject.prototype.next = function (value) {\n var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n _super.prototype.next.call(this, value);\n };\n ReplaySubject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._trimBuffer();\n var subscription = this._innerSubscribe(subscriber);\n var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer;\n var copy = _buffer.slice();\n for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i]);\n }\n this._checkFinalizedStatuses(subscriber);\n return subscription;\n };\n ReplaySubject.prototype._trimBuffer = function () {\n var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow;\n var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n if (!_infiniteTimeWindow) {\n var now = _timestampProvider.now();\n var last = 0;\n for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n };\n return ReplaySubject;\n}(Subject));\nexport { ReplaySubject };\n//# sourceMappingURL=ReplaySubject.js.map","import { __extends } from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = (function (_super) {\n __extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) { delay = 0; }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var intervalProvider = {\n setInterval: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = intervalProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearInterval: function (handle) {\n var delegate = intervalProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=intervalProvider.js.map","import { __extends } from \"tslib\";\nimport { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nvar AsyncAction = (function (_super) {\n __extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n var _a;\n if (delay === void 0) { delay = 0; }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n if (delay === void 0) { delay = 0; }\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n if (delay === void 0) { delay = 0; }\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, _delay) {\n var errored = false;\n var errorValue;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype.unsubscribe = function () {\n if (!this.closed) {\n var _a = this, id = _a.id, scheduler = _a.scheduler;\n var actions = scheduler.actions;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n _super.prototype.unsubscribe.call(this);\n }\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar Scheduler = (function () {\n function Scheduler(schedulerActionCtor, now) {\n if (now === void 0) { now = Scheduler.now; }\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) { delay = 0; }\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n };\n Scheduler.now = dateTimestampProvider.now;\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map","import { __extends } from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = (function (_super) {\n __extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) { now = Scheduler.now; }\n var _this = _super.call(this, SchedulerAction, now) || this;\n _this.actions = [];\n _this._active = false;\n return _this;\n }\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this._active) {\n actions.push(action);\n return;\n }\n var error;\n this._active = true;\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()));\n this._active = false;\n if (error) {\n while ((action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n//# sourceMappingURL=async.js.map","import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4: return [2, _b.sent()];\n case 5: return [4, __await(value)];\n case 6: return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8: return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10: return [2];\n }\n });\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(function (subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(function (subscriber) {\n promise\n .then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(function (subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(function (subscriber) {\n process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, e_2_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1: return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3: return [3, 1];\n case 4: return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8: return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10: return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n if (delay === void 0) { delay = 0; }\n if (repeat === void 0) { repeat = false; }\n var scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(function (subscriber) {\n var iterator;\n executeSchedule(subscriber, scheduler, function () {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, function () {\n var _a;\n var value;\n var done;\n try {\n (_a = iterator.next(), value = _a.value, done = _a.done);\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n executeSchedule(subscriber, scheduler, function () {\n var iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function () {\n iterator.next().then(function (result) {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","import { Observable } from '../Observable';\nimport { isFunction } from '../util/isFunction';\nexport function throwError(errorOrErrorFactory, scheduler) {\n var errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : function () { return errorOrErrorFactory; };\n var init = function (subscriber) { return subscriber.error(errorFactory()); };\n return new Observable(scheduler ? function (subscriber) { return scheduler.schedule(init, 0, subscriber); } : init);\n}\n//# sourceMappingURL=throwError.js.map","import { createErrorClass } from './createErrorClass';\nexport var EmptyError = createErrorClass(function (_super) {\n return function EmptyErrorImpl() {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n };\n});\n//# sourceMappingURL=EmptyError.js.map","import { EmptyError } from './util/EmptyError';\nexport function lastValueFrom(source, config) {\n var hasConfig = typeof config === 'object';\n return new Promise(function (resolve, reject) {\n var _hasValue = false;\n var _value;\n source.subscribe({\n next: function (value) {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: function () {\n if (_hasValue) {\n resolve(_value);\n }\n else if (hasConfig) {\n resolve(config.defaultValue);\n }\n else {\n reject(new EmptyError());\n }\n },\n });\n });\n}\n//# sourceMappingURL=lastValueFrom.js.map","export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n//# sourceMappingURL=map.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n var doInnerSub = function (value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, function () {\n innerComplete = true;\n }, undefined, function () {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function () {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n }\n else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n isComplete = true;\n checkComplete();\n }));\n return function () {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n//# sourceMappingURL=mergeInternals.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n if (isFunction(resultSelector)) {\n return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime, intervalOrScheduler, scheduler) {\n if (dueTime === void 0) { dueTime = 0; }\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n }\n else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(function (subscriber) {\n var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n var n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n }\n else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n//# sourceMappingURL=timer.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); }));\n });\n}\n//# sourceMappingURL=filter.js.map","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0\n ?\n function () { return EMPTY; }\n : operate(function (source, subscriber) {\n var seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n//# sourceMappingURL=take.js.map","import { map } from './map';\nexport function mapTo(value) {\n return map(function () { return value; });\n}\n//# sourceMappingURL=mapTo.js.map","import { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\nimport { innerFrom } from '../observable/innerFrom';\nexport function delayWhen(delayDurationSelector, subscriptionDelay) {\n if (subscriptionDelay) {\n return function (source) {\n return concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n };\n }\n return mergeMap(function (value, index) { return innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value)); });\n}\n//# sourceMappingURL=delayWhen.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\nexport function delay(due, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var duration = timer(due, scheduler);\n return delayWhen(function () { return duration; });\n}\n//# sourceMappingURL=delay.js.map","import { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function distinctUntilChanged(comparator, keySelector) {\n if (keySelector === void 0) { keySelector = identity; }\n comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n return operate(function (source, subscriber) {\n var previousKey;\n var first = true;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var currentKey = keySelector(value);\n if (first || !comparator(previousKey, currentKey)) {\n first = false;\n previousKey = currentKey;\n subscriber.next(value);\n }\n }));\n });\n}\nfunction defaultCompare(a, b) {\n return a === b;\n}\n//# sourceMappingURL=distinctUntilChanged.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nimport { timer } from '../observable/timer';\nimport { innerFrom } from '../observable/innerFrom';\nexport function retry(configOrCount) {\n if (configOrCount === void 0) { configOrCount = Infinity; }\n var config;\n if (configOrCount && typeof configOrCount === 'object') {\n config = configOrCount;\n }\n else {\n config = {\n count: configOrCount,\n };\n }\n var _a = config.count, count = _a === void 0 ? Infinity : _a, delay = config.delay, _b = config.resetOnSuccess, resetOnSuccess = _b === void 0 ? false : _b;\n return count <= 0\n ? identity\n : operate(function (source, subscriber) {\n var soFar = 0;\n var innerSub;\n var subscribeForRetry = function () {\n var syncUnsub = false;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (resetOnSuccess) {\n soFar = 0;\n }\n subscriber.next(value);\n }, undefined, function (err) {\n if (soFar++ < count) {\n var resub_1 = function () {\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n }\n else {\n syncUnsub = true;\n }\n };\n if (delay != null) {\n var notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(err, soFar));\n var notifierSubscriber_1 = createOperatorSubscriber(subscriber, function () {\n notifierSubscriber_1.unsubscribe();\n resub_1();\n }, function () {\n subscriber.complete();\n });\n notifier.subscribe(notifierSubscriber_1);\n }\n else {\n resub_1();\n }\n }\n else {\n subscriber.error(err);\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n }\n };\n subscribeForRetry();\n });\n}\n//# sourceMappingURL=retry.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n return operate(function (source, subscriber) {\n var innerSubscriber = null;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n var innerIndex = 0;\n var outerIndex = index++;\n innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () {\n innerSubscriber = null;\n checkComplete();\n })));\n }, function () {\n isComplete = true;\n checkComplete();\n }));\n });\n}\n//# sourceMappingURL=switchMap.js.map","import { __assign, __rest } from \"tslib\";\nimport { createOperatorSubscriber } from '../../operators/OperatorSubscriber';\nimport { Observable } from '../../Observable';\nimport { innerFrom } from '../../observable/innerFrom';\nexport function fromFetch(input, initWithSelector) {\n if (initWithSelector === void 0) { initWithSelector = {}; }\n var selector = initWithSelector.selector, init = __rest(initWithSelector, [\"selector\"]);\n return new Observable(function (subscriber) {\n var controller = new AbortController();\n var signal = controller.signal;\n var abortable = true;\n var outerSignal = init.signal;\n if (outerSignal) {\n if (outerSignal.aborted) {\n controller.abort();\n }\n else {\n var outerSignalHandler_1 = function () {\n if (!signal.aborted) {\n controller.abort();\n }\n };\n outerSignal.addEventListener('abort', outerSignalHandler_1);\n subscriber.add(function () { return outerSignal.removeEventListener('abort', outerSignalHandler_1); });\n }\n }\n var perSubscriberInit = __assign(__assign({}, init), { signal: signal });\n var handleError = function (err) {\n abortable = false;\n subscriber.error(err);\n };\n fetch(input, perSubscriberInit)\n .then(function (response) {\n if (selector) {\n innerFrom(selector(response)).subscribe(createOperatorSubscriber(subscriber, undefined, function () {\n abortable = false;\n subscriber.complete();\n }, handleError));\n }\n else {\n abortable = false;\n subscriber.next(response);\n subscriber.complete();\n }\n })\n .catch(handleError);\n return function () {\n if (abortable) {\n controller.abort();\n }\n };\n });\n}\n//# sourceMappingURL=fetch.js.map","/*\r\nMIT License\r\n\r\nCopyright (c) 2020 Egor Nepomnyaschih\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n*/\r\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst base64abc = [],\r\n A = \"A\".charCodeAt(0),\r\n a = \"a\".charCodeAt(0),\r\n n = \"0\".charCodeAt(0);\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(A + i));\r\n}\r\nfor (let i = 0; i < 26; ++i) {\r\n base64abc.push(String.fromCharCode(a + i));\r\n}\r\nfor (let i = 0; i < 10; ++i) {\r\n base64abc.push(String.fromCharCode(n + i));\r\n}\r\nbase64abc.push(\"+\");\r\nbase64abc.push(\"/\");\r\n*/\r\nconst base64abc = [\r\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\",\r\n \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\",\r\n \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\",\r\n \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\",\r\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"+\", \"/\"\r\n];\r\n/*\r\n// This constant can also be computed with the following algorithm:\r\nconst l = 256, base64codes = new Uint8Array(l);\r\nfor (let i = 0; i < l; ++i) {\r\n base64codes[i] = 255; // invalid character\r\n}\r\nbase64abc.forEach((char, index) => {\r\n base64codes[char.charCodeAt(0)] = index;\r\n});\r\nbase64codes[\"=\".charCodeAt(0)] = 0; // ignored anyway, so we just need to prevent an error\r\n*/\r\nconst base64codes = [\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,\r\n 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0, 255, 255,\r\n 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\r\n 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,\r\n 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,\r\n 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51\r\n];\r\nfunction getBase64Code(charCode) {\r\n if (charCode >= base64codes.length) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n const code = base64codes[charCode];\r\n if (code === 255) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n return code;\r\n}\r\nexport function bytesToBase64(bytes) {\r\n let result = '', i, l = bytes.length;\r\n for (i = 2; i < l; i += 3) {\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\r\n result += base64abc[((bytes[i - 1] & 0x0F) << 2) | (bytes[i] >> 6)];\r\n result += base64abc[bytes[i] & 0x3F];\r\n }\r\n if (i === l + 1) { // 1 octet yet to write\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[(bytes[i - 2] & 0x03) << 4];\r\n result += \"==\";\r\n }\r\n if (i === l) { // 2 octets yet to write\r\n result += base64abc[bytes[i - 2] >> 2];\r\n result += base64abc[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];\r\n result += base64abc[(bytes[i - 1] & 0x0F) << 2];\r\n result += \"=\";\r\n }\r\n return result;\r\n}\r\nexport function base64ToBytes(str) {\r\n if (str.length % 4 !== 0) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n const index = str.indexOf(\"=\");\r\n if (index !== -1 && index < str.length - 2) {\r\n throw new Error(\"Unable to parse base64 string.\");\r\n }\r\n let missingOctets = str.endsWith(\"==\") ? 2 : str.endsWith(\"=\") ? 1 : 0, n = str.length, result = new Uint8Array(3 * (n / 4)), buffer;\r\n for (let i = 0, j = 0; i < n; i += 4, j += 3) {\r\n buffer =\r\n getBase64Code(str.charCodeAt(i)) << 18 |\r\n getBase64Code(str.charCodeAt(i + 1)) << 12 |\r\n getBase64Code(str.charCodeAt(i + 2)) << 6 |\r\n getBase64Code(str.charCodeAt(i + 3));\r\n result[j] = buffer >> 16;\r\n result[j + 1] = (buffer >> 8) & 0xFF;\r\n result[j + 2] = buffer & 0xFF;\r\n }\r\n return result.subarray(0, result.length - missingOctets);\r\n}\r\nexport function base64encode(str, encoder = new TextEncoder()) {\r\n return bytesToBase64(encoder.encode(str));\r\n}\r\nexport function base64decode(str, decoder = new TextDecoder()) {\r\n return decoder.decode(base64ToBytes(str));\r\n}\r\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNCRTtBQUVGOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCRTtBQUNGLE1BQU0sU0FBUyxHQUFHO0lBQ2pCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFDL0QsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUMvRCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0lBQy9ELEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFDL0QsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0NBQzFELENBQUM7QUFFRjs7Ozs7Ozs7OztFQVVFO0FBQ0YsTUFBTSxXQUFXLEdBQUc7SUFDbkIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM5RSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0lBQzlFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7SUFDNUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUNsRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3JELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFDbkUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUMvRCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtDQUMxQyxDQUFDO0FBRUYsU0FBUyxhQUFhLENBQUMsUUFBZ0I7SUFDdEMsSUFBSSxRQUFRLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7S0FDbEQ7SUFDRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztLQUNsRDtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBNEI7SUFDekQsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzFCLE1BQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNyQztJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSx1QkFBdUI7UUFDekMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sSUFBSSxJQUFJLENBQUM7S0FDZjtJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLHdCQUF3QjtRQUN0QyxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVc7SUFDeEMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDckUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQ2QsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNwQyxNQUFjLENBQUM7SUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3QyxNQUFNO1lBQ0wsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUN0QyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUMxQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNyQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDOUI7SUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLFVBQThELElBQUksV0FBVyxFQUFFO0lBQ3hILE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFXLEVBQUUsVUFBcUQsSUFBSSxXQUFXLEVBQUU7SUFDL0csT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDIwIEVnb3IgTmVwb21ueWFzY2hpaFxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4qL1xuXG4vKlxuLy8gVGhpcyBjb25zdGFudCBjYW4gYWxzbyBiZSBjb21wdXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOlxuY29uc3QgYmFzZTY0YWJjID0gW10sXG5cdEEgPSBcIkFcIi5jaGFyQ29kZUF0KDApLFxuXHRhID0gXCJhXCIuY2hhckNvZGVBdCgwKSxcblx0biA9IFwiMFwiLmNoYXJDb2RlQXQoMCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IDI2OyArK2kpIHtcblx0YmFzZTY0YWJjLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShBICsgaSkpO1xufVxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNjsgKytpKSB7XG5cdGJhc2U2NGFiYy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSArIGkpKTtcbn1cbmZvciAobGV0IGkgPSAwOyBpIDwgMTA7ICsraSkge1xuXHRiYXNlNjRhYmMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG4gKyBpKSk7XG59XG5iYXNlNjRhYmMucHVzaChcIitcIik7XG5iYXNlNjRhYmMucHVzaChcIi9cIik7XG4qL1xuY29uc3QgYmFzZTY0YWJjID0gW1xuXHRcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSVwiLCBcIkpcIiwgXCJLXCIsIFwiTFwiLCBcIk1cIixcblx0XCJOXCIsIFwiT1wiLCBcIlBcIiwgXCJRXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIsXG5cdFwiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiLCBcImVcIiwgXCJmXCIsIFwiZ1wiLCBcImhcIiwgXCJpXCIsIFwialwiLCBcImtcIiwgXCJsXCIsIFwibVwiLFxuXHRcIm5cIiwgXCJvXCIsIFwicFwiLCBcInFcIiwgXCJyXCIsIFwic1wiLCBcInRcIiwgXCJ1XCIsIFwidlwiLCBcIndcIiwgXCJ4XCIsIFwieVwiLCBcInpcIixcblx0XCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCIsIFwiK1wiLCBcIi9cIlxuXTtcblxuLypcbi8vIFRoaXMgY29uc3RhbnQgY2FuIGFsc28gYmUgY29tcHV0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFsZ29yaXRobTpcbmNvbnN0IGwgPSAyNTYsIGJhc2U2NGNvZGVzID0gbmV3IFVpbnQ4QXJyYXkobCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IGw7ICsraSkge1xuXHRiYXNlNjRjb2Rlc1tpXSA9IDI1NTsgLy8gaW52YWxpZCBjaGFyYWN0ZXJcbn1cbmJhc2U2NGFiYy5mb3JFYWNoKChjaGFyLCBpbmRleCkgPT4ge1xuXHRiYXNlNjRjb2Rlc1tjaGFyLmNoYXJDb2RlQXQoMCldID0gaW5kZXg7XG59KTtcbmJhc2U2NGNvZGVzW1wiPVwiLmNoYXJDb2RlQXQoMCldID0gMDsgLy8gaWdub3JlZCBhbnl3YXksIHNvIHdlIGp1c3QgbmVlZCB0byBwcmV2ZW50IGFuIGVycm9yXG4qL1xuY29uc3QgYmFzZTY0Y29kZXMgPSBbXG5cdDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSxcblx0MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LFxuXHQyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgNjIsIDI1NSwgMjU1LCAyNTUsIDYzLFxuXHQ1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgMjU1LCAyNTUsIDI1NSwgMCwgMjU1LCAyNTUsXG5cdDI1NSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LFxuXHQxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LFxuXHQyNTUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsXG5cdDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MVxuXTtcblxuZnVuY3Rpb24gZ2V0QmFzZTY0Q29kZShjaGFyQ29kZTogbnVtYmVyKSB7XG5cdGlmIChjaGFyQ29kZSA+PSBiYXNlNjRjb2Rlcy5sZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgYmFzZTY0IHN0cmluZy5cIik7XG5cdH1cblx0Y29uc3QgY29kZSA9IGJhc2U2NGNvZGVzW2NoYXJDb2RlXTtcblx0aWYgKGNvZGUgPT09IDI1NSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBiYXNlNjQgc3RyaW5nLlwiKTtcblx0fVxuXHRyZXR1cm4gY29kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVzVG9CYXNlNjQoYnl0ZXM6IG51bWJlcltdIHwgVWludDhBcnJheSkge1xuXHRsZXQgcmVzdWx0ID0gJycsIGksIGwgPSBieXRlcy5sZW5ndGg7XG5cdGZvciAoaSA9IDI7IGkgPCBsOyBpICs9IDMpIHtcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjW2J5dGVzW2kgLSAyXSA+PiAyXTtcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjWygoYnl0ZXNbaSAtIDJdICYgMHgwMykgPDwgNCkgfCAoYnl0ZXNbaSAtIDFdID4+IDQpXTtcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjWygoYnl0ZXNbaSAtIDFdICYgMHgwRikgPDwgMikgfCAoYnl0ZXNbaV0gPj4gNildO1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbYnl0ZXNbaV0gJiAweDNGXTtcblx0fVxuXHRpZiAoaSA9PT0gbCArIDEpIHsgLy8gMSBvY3RldCB5ZXQgdG8gd3JpdGVcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjW2J5dGVzW2kgLSAyXSA+PiAyXTtcblx0XHRyZXN1bHQgKz0gYmFzZTY0YWJjWyhieXRlc1tpIC0gMl0gJiAweDAzKSA8PCA0XTtcblx0XHRyZXN1bHQgKz0gXCI9PVwiO1xuXHR9XG5cdGlmIChpID09PSBsKSB7IC8vIDIgb2N0ZXRzIHlldCB0byB3cml0ZVxuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbYnl0ZXNbaSAtIDJdID4+IDJdO1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbKChieXRlc1tpIC0gMl0gJiAweDAzKSA8PCA0KSB8IChieXRlc1tpIC0gMV0gPj4gNCldO1xuXHRcdHJlc3VsdCArPSBiYXNlNjRhYmNbKGJ5dGVzW2kgLSAxXSAmIDB4MEYpIDw8IDJdO1xuXHRcdHJlc3VsdCArPSBcIj1cIjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyhzdHI6IHN0cmluZykge1xuXHRpZiAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gcGFyc2UgYmFzZTY0IHN0cmluZy5cIik7XG5cdH1cblx0Y29uc3QgaW5kZXggPSBzdHIuaW5kZXhPZihcIj1cIik7XG5cdGlmIChpbmRleCAhPT0gLTEgJiYgaW5kZXggPCBzdHIubGVuZ3RoIC0gMikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBwYXJzZSBiYXNlNjQgc3RyaW5nLlwiKTtcblx0fVxuXHRsZXQgbWlzc2luZ09jdGV0cyA9IHN0ci5lbmRzV2l0aChcIj09XCIpID8gMiA6IHN0ci5lbmRzV2l0aChcIj1cIikgPyAxIDogMCxcblx0XHRuID0gc3RyLmxlbmd0aCxcblx0XHRyZXN1bHQgPSBuZXcgVWludDhBcnJheSgzICogKG4gLyA0KSksXG5cdFx0YnVmZmVyOiBudW1iZXI7XG5cdGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IG47IGkgKz0gNCwgaiArPSAzKSB7XG5cdFx0YnVmZmVyID1cblx0XHRcdGdldEJhc2U2NENvZGUoc3RyLmNoYXJDb2RlQXQoaSkpIDw8IDE4IHxcblx0XHRcdGdldEJhc2U2NENvZGUoc3RyLmNoYXJDb2RlQXQoaSArIDEpKSA8PCAxMiB8XG5cdFx0XHRnZXRCYXNlNjRDb2RlKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSkgPDwgNiB8XG5cdFx0XHRnZXRCYXNlNjRDb2RlKHN0ci5jaGFyQ29kZUF0KGkgKyAzKSk7XG5cdFx0cmVzdWx0W2pdID0gYnVmZmVyID4+IDE2O1xuXHRcdHJlc3VsdFtqICsgMV0gPSAoYnVmZmVyID4+IDgpICYgMHhGRjtcblx0XHRyZXN1bHRbaiArIDJdID0gYnVmZmVyICYgMHhGRjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0LnN1YmFycmF5KDAsIHJlc3VsdC5sZW5ndGggLSBtaXNzaW5nT2N0ZXRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NGVuY29kZShzdHI6IHN0cmluZywgZW5jb2RlcjogeyBlbmNvZGU6IChzdHI6IHN0cmluZykgPT4gVWludDhBcnJheSB8IG51bWJlcltdIH0gPSBuZXcgVGV4dEVuY29kZXIoKSkge1xuXHRyZXR1cm4gYnl0ZXNUb0Jhc2U2NChlbmNvZGVyLmVuY29kZShzdHIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NGRlY29kZShzdHI6IHN0cmluZywgZGVjb2RlcjogeyBkZWNvZGU6IChieXRlczogVWludDhBcnJheSkgPT4gc3RyaW5nIH0gPSBuZXcgVGV4dERlY29kZXIoKSkge1xuXHRyZXR1cm4gZGVjb2Rlci5kZWNvZGUoYmFzZTY0VG9CeXRlcyhzdHIpKTtcbn1cbiJdfQ==","(function (root, factory) {\n // Hack to make all exports of this module sha256 function object properties.\n var exports = {};\n factory(exports);\n var sha256 = exports[\"default\"];\n for (var k in exports) {\n sha256[k] = exports[k];\n }\n \n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = sha256;\n } else if (typeof define === 'function' && define.amd) {\n define(function() { return sha256; }); \n } else {\n root.sha256 = sha256;\n }\n})(this, function(exports) {\n\"use strict\";\nexports.__esModule = true;\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexports.digestLength = 32;\nexports.blockSize = 64;\n// SHA-256 constants\nvar K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n var a, b, c, d, e, f, g, h, u, i, j, t1, t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nvar Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = exports.digestLength;\n this.blockSize = exports.blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n var dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n var bytesHashed = this.bytesHashed;\n var left = this.bufferLength;\n var bitLenHi = (bytesHashed / 0x20000000) | 0;\n var bitLenLo = bytesHashed << 3;\n var padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (var i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (var i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nexports.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nvar HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n var pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n }\n else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (var i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n }\n else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nexports.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n var h = (new Hash()).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hash = hash;\n// Function hash is both available as module.hash and as default export.\nexports[\"default\"] = hash;\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n var h = (new HMAC(key)).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n var num = counter[0];\n if (num === 0) {\n throw new Error(\"hkdf: cannot expand more\");\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nvar hkdfSalt = new Uint8Array(exports.digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n var counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n var okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n var hmac_ = new HMAC(okm);\n // Allocate buffer.\n var buffer = new Uint8Array(hmac_.digestLength);\n var bufpos = buffer.length;\n var out = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nexports.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n var prf = new HMAC(password);\n var len = prf.digestLength;\n var ctr = new Uint8Array(4);\n var t = new Uint8Array(len);\n var u = new Uint8Array(len);\n var dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n var c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (var k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nexports.pbkdf2 = pbkdf2;\n});\n","const c = new Int32Array(4);\nclass h {\n static hashStr(i, a = !1) {\n return this.onePassHasher.start().appendStr(i).end(a);\n }\n static hashAsciiStr(i, a = !1) {\n return this.onePassHasher.start().appendAsciiStr(i).end(a);\n }\n // Private Static Variables\n static stateIdentity = new Int32Array([\n 1732584193,\n -271733879,\n -1732584194,\n 271733878\n ]);\n static buffer32Identity = new Int32Array([\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]);\n static hexChars = \"0123456789abcdef\";\n static hexOut = [];\n // Permanent instance is to use for one-call hashing\n static onePassHasher = new h();\n static _hex(i) {\n const a = h.hexChars, t = h.hexOut;\n let e, s, r, n;\n for (n = 0; n < 4; n += 1)\n for (s = n * 8, e = i[n], r = 0; r < 8; r += 2)\n t[s + 1 + r] = a.charAt(e & 15), e >>>= 4, t[s + 0 + r] = a.charAt(e & 15), e >>>= 4;\n return t.join(\"\");\n }\n static _md5cycle(i, a) {\n let t = i[0], e = i[1], s = i[2], r = i[3];\n t += (e & s | ~e & r) + a[0] - 680876936 | 0, t = (t << 7 | t >>> 25) + e | 0, r += (t & e | ~t & s) + a[1] - 389564586 | 0, r = (r << 12 | r >>> 20) + t | 0, s += (r & t | ~r & e) + a[2] + 606105819 | 0, s = (s << 17 | s >>> 15) + r | 0, e += (s & r | ~s & t) + a[3] - 1044525330 | 0, e = (e << 22 | e >>> 10) + s | 0, t += (e & s | ~e & r) + a[4] - 176418897 | 0, t = (t << 7 | t >>> 25) + e | 0, r += (t & e | ~t & s) + a[5] + 1200080426 | 0, r = (r << 12 | r >>> 20) + t | 0, s += (r & t | ~r & e) + a[6] - 1473231341 | 0, s = (s << 17 | s >>> 15) + r | 0, e += (s & r | ~s & t) + a[7] - 45705983 | 0, e = (e << 22 | e >>> 10) + s | 0, t += (e & s | ~e & r) + a[8] + 1770035416 | 0, t = (t << 7 | t >>> 25) + e | 0, r += (t & e | ~t & s) + a[9] - 1958414417 | 0, r = (r << 12 | r >>> 20) + t | 0, s += (r & t | ~r & e) + a[10] - 42063 | 0, s = (s << 17 | s >>> 15) + r | 0, e += (s & r | ~s & t) + a[11] - 1990404162 | 0, e = (e << 22 | e >>> 10) + s | 0, t += (e & s | ~e & r) + a[12] + 1804603682 | 0, t = (t << 7 | t >>> 25) + e | 0, r += (t & e | ~t & s) + a[13] - 40341101 | 0, r = (r << 12 | r >>> 20) + t | 0, s += (r & t | ~r & e) + a[14] - 1502002290 | 0, s = (s << 17 | s >>> 15) + r | 0, e += (s & r | ~s & t) + a[15] + 1236535329 | 0, e = (e << 22 | e >>> 10) + s | 0, t += (e & r | s & ~r) + a[1] - 165796510 | 0, t = (t << 5 | t >>> 27) + e | 0, r += (t & s | e & ~s) + a[6] - 1069501632 | 0, r = (r << 9 | r >>> 23) + t | 0, s += (r & e | t & ~e) + a[11] + 643717713 | 0, s = (s << 14 | s >>> 18) + r | 0, e += (s & t | r & ~t) + a[0] - 373897302 | 0, e = (e << 20 | e >>> 12) + s | 0, t += (e & r | s & ~r) + a[5] - 701558691 | 0, t = (t << 5 | t >>> 27) + e | 0, r += (t & s | e & ~s) + a[10] + 38016083 | 0, r = (r << 9 | r >>> 23) + t | 0, s += (r & e | t & ~e) + a[15] - 660478335 | 0, s = (s << 14 | s >>> 18) + r | 0, e += (s & t | r & ~t) + a[4] - 405537848 | 0, e = (e << 20 | e >>> 12) + s | 0, t += (e & r | s & ~r) + a[9] + 568446438 | 0, t = (t << 5 | t >>> 27) + e | 0, r += (t & s | e & ~s) + a[14] - 1019803690 | 0, r = (r << 9 | r >>> 23) + t | 0, s += (r & e | t & ~e) + a[3] - 187363961 | 0, s = (s << 14 | s >>> 18) + r | 0, e += (s & t | r & ~t) + a[8] + 1163531501 | 0, e = (e << 20 | e >>> 12) + s | 0, t += (e & r | s & ~r) + a[13] - 1444681467 | 0, t = (t << 5 | t >>> 27) + e | 0, r += (t & s | e & ~s) + a[2] - 51403784 | 0, r = (r << 9 | r >>> 23) + t | 0, s += (r & e | t & ~e) + a[7] + 1735328473 | 0, s = (s << 14 | s >>> 18) + r | 0, e += (s & t | r & ~t) + a[12] - 1926607734 | 0, e = (e << 20 | e >>> 12) + s | 0, t += (e ^ s ^ r) + a[5] - 378558 | 0, t = (t << 4 | t >>> 28) + e | 0, r += (t ^ e ^ s) + a[8] - 2022574463 | 0, r = (r << 11 | r >>> 21) + t | 0, s += (r ^ t ^ e) + a[11] + 1839030562 | 0, s = (s << 16 | s >>> 16) + r | 0, e += (s ^ r ^ t) + a[14] - 35309556 | 0, e = (e << 23 | e >>> 9) + s | 0, t += (e ^ s ^ r) + a[1] - 1530992060 | 0, t = (t << 4 | t >>> 28) + e | 0, r += (t ^ e ^ s) + a[4] + 1272893353 | 0, r = (r << 11 | r >>> 21) + t | 0, s += (r ^ t ^ e) + a[7] - 155497632 | 0, s = (s << 16 | s >>> 16) + r | 0, e += (s ^ r ^ t) + a[10] - 1094730640 | 0, e = (e << 23 | e >>> 9) + s | 0, t += (e ^ s ^ r) + a[13] + 681279174 | 0, t = (t << 4 | t >>> 28) + e | 0, r += (t ^ e ^ s) + a[0] - 358537222 | 0, r = (r << 11 | r >>> 21) + t | 0, s += (r ^ t ^ e) + a[3] - 722521979 | 0, s = (s << 16 | s >>> 16) + r | 0, e += (s ^ r ^ t) + a[6] + 76029189 | 0, e = (e << 23 | e >>> 9) + s | 0, t += (e ^ s ^ r) + a[9] - 640364487 | 0, t = (t << 4 | t >>> 28) + e | 0, r += (t ^ e ^ s) + a[12] - 421815835 | 0, r = (r << 11 | r >>> 21) + t | 0, s += (r ^ t ^ e) + a[15] + 530742520 | 0, s = (s << 16 | s >>> 16) + r | 0, e += (s ^ r ^ t) + a[2] - 995338651 | 0, e = (e << 23 | e >>> 9) + s | 0, t += (s ^ (e | ~r)) + a[0] - 198630844 | 0, t = (t << 6 | t >>> 26) + e | 0, r += (e ^ (t | ~s)) + a[7] + 1126891415 | 0, r = (r << 10 | r >>> 22) + t | 0, s += (t ^ (r | ~e)) + a[14] - 1416354905 | 0, s = (s << 15 | s >>> 17) + r | 0, e += (r ^ (s | ~t)) + a[5] - 57434055 | 0, e = (e << 21 | e >>> 11) + s | 0, t += (s ^ (e | ~r)) + a[12] + 1700485571 | 0, t = (t << 6 | t >>> 26) + e | 0, r += (e ^ (t | ~s)) + a[3] - 1894986606 | 0, r = (r << 10 | r >>> 22) + t | 0, s += (t ^ (r | ~e)) + a[10] - 1051523 | 0, s = (s << 15 | s >>> 17) + r | 0, e += (r ^ (s | ~t)) + a[1] - 2054922799 | 0, e = (e << 21 | e >>> 11) + s | 0, t += (s ^ (e | ~r)) + a[8] + 1873313359 | 0, t = (t << 6 | t >>> 26) + e | 0, r += (e ^ (t | ~s)) + a[15] - 30611744 | 0, r = (r << 10 | r >>> 22) + t | 0, s += (t ^ (r | ~e)) + a[6] - 1560198380 | 0, s = (s << 15 | s >>> 17) + r | 0, e += (r ^ (s | ~t)) + a[13] + 1309151649 | 0, e = (e << 21 | e >>> 11) + s | 0, t += (s ^ (e | ~r)) + a[4] - 145523070 | 0, t = (t << 6 | t >>> 26) + e | 0, r += (e ^ (t | ~s)) + a[11] - 1120210379 | 0, r = (r << 10 | r >>> 22) + t | 0, s += (t ^ (r | ~e)) + a[2] + 718787259 | 0, s = (s << 15 | s >>> 17) + r | 0, e += (r ^ (s | ~t)) + a[9] - 343485551 | 0, e = (e << 21 | e >>> 11) + s | 0, i[0] = t + i[0] | 0, i[1] = e + i[1] | 0, i[2] = s + i[2] | 0, i[3] = r + i[3] | 0;\n }\n _dataLength = 0;\n _bufferLength = 0;\n _state = new Int32Array(4);\n _buffer = new ArrayBuffer(68);\n _buffer8;\n _buffer32;\n constructor() {\n this._buffer8 = new Uint8Array(this._buffer, 0, 68), this._buffer32 = new Uint32Array(this._buffer, 0, 17), this.start();\n }\n /**\n * Initialise buffer to be hashed\n */\n start() {\n return this._dataLength = 0, this._bufferLength = 0, this._state.set(h.stateIdentity), this;\n }\n // Char to code point to to array conversion:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n // #Example.3A_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown\n /**\n * Append a UTF-8 string to the hash buffer\n * @param str String to append\n */\n appendStr(i) {\n const a = this._buffer8, t = this._buffer32;\n let e = this._bufferLength, s, r;\n for (r = 0; r < i.length; r += 1) {\n if (s = i.charCodeAt(r), s < 128)\n a[e++] = s;\n else if (s < 2048)\n a[e++] = (s >>> 6) + 192, a[e++] = s & 63 | 128;\n else if (s < 55296 || s > 56319)\n a[e++] = (s >>> 12) + 224, a[e++] = s >>> 6 & 63 | 128, a[e++] = s & 63 | 128;\n else {\n if (s = (s - 55296) * 1024 + (i.charCodeAt(++r) - 56320) + 65536, s > 1114111)\n throw new Error(\n \"Unicode standard supports code points up to U+10FFFF\"\n );\n a[e++] = (s >>> 18) + 240, a[e++] = s >>> 12 & 63 | 128, a[e++] = s >>> 6 & 63 | 128, a[e++] = s & 63 | 128;\n }\n e >= 64 && (this._dataLength += 64, h._md5cycle(this._state, t), e -= 64, t[0] = t[16]);\n }\n return this._bufferLength = e, this;\n }\n /**\n * Append an ASCII string to the hash buffer\n * @param str String to append\n */\n appendAsciiStr(i) {\n const a = this._buffer8, t = this._buffer32;\n let e = this._bufferLength, s, r = 0;\n for (; ; ) {\n for (s = Math.min(i.length - r, 64 - e); s--; )\n a[e++] = i.charCodeAt(r++);\n if (e < 64)\n break;\n this._dataLength += 64, h._md5cycle(this._state, t), e = 0;\n }\n return this._bufferLength = e, this;\n }\n /**\n * Append a byte array to the hash buffer\n * @param input array to append\n */\n appendByteArray(i) {\n const a = this._buffer8, t = this._buffer32;\n let e = this._bufferLength, s, r = 0;\n for (; ; ) {\n for (s = Math.min(i.length - r, 64 - e); s--; )\n a[e++] = i[r++];\n if (e < 64)\n break;\n this._dataLength += 64, h._md5cycle(this._state, t), e = 0;\n }\n return this._bufferLength = e, this;\n }\n /**\n * Get the state of the hash buffer\n */\n getState() {\n const i = this._state;\n return {\n buffer: String.fromCharCode.apply(null, Array.from(this._buffer8)),\n buflen: this._bufferLength,\n length: this._dataLength,\n state: [i[0], i[1], i[2], i[3]]\n };\n }\n /**\n * Override the current state of the hash buffer\n * @param state New hash buffer state\n */\n setState(i) {\n const a = i.buffer, t = i.state, e = this._state;\n let s;\n for (this._dataLength = i.length, this._bufferLength = i.buflen, e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], s = 0; s < a.length; s += 1)\n this._buffer8[s] = a.charCodeAt(s);\n }\n /**\n * Hash the current state of the hash buffer and return the result\n * @param raw Whether to return the value as an `Int32Array`\n */\n end(i = !1) {\n const a = this._bufferLength, t = this._buffer8, e = this._buffer32, s = (a >> 2) + 1;\n this._dataLength += a;\n const r = this._dataLength * 8;\n if (t[a] = 128, t[a + 1] = t[a + 2] = t[a + 3] = 0, e.set(h.buffer32Identity.subarray(s), s), a > 55 && (h._md5cycle(this._state, e), e.set(h.buffer32Identity)), r <= 4294967295)\n e[14] = r;\n else {\n const n = r.toString(16).match(/(.*?)(.{0,8})$/);\n if (n === null) return i ? c : \"\";\n const o = parseInt(n[2], 16), _ = parseInt(n[1], 16) || 0;\n e[14] = o, e[15] = _;\n }\n return h._md5cycle(this._state, e), i ? this._state : h._hex(this._state);\n }\n}\nif (h.hashStr(\"hello\") !== \"5d41402abc4b2a76b9719d911017c592\")\n throw new Error(\"Md5 self test failed.\");\nclass l {\n constructor(i, a = !0, t = 1048576) {\n this._callback = i, this._async = a, this._partSize = t, this._configureReader();\n }\n _reader;\n _md5;\n _part;\n // private _length!: number;\n _blob;\n /**\n * Hash a blob of data in the worker\n * @param blob Data to hash\n */\n hash(i) {\n const a = this;\n a._blob = i, a._part = 0, a._md5 = new h(), a._processPart();\n }\n _fail() {\n this._callback({\n success: !1,\n result: \"data read failed\"\n });\n }\n _hashData(i) {\n let a = this;\n a._md5.appendByteArray(new Uint8Array(i.target.result)), a._part * a._partSize >= a._blob.size ? a._callback({\n success: !0,\n result: a._md5.end()\n }) : a._processPart();\n }\n _processPart() {\n const i = this;\n let a = 0, t;\n i._part += 1, i._blob.size > i._partSize ? (a = i._part * i._partSize, a > i._blob.size && (a = i._blob.size), t = i._blob.slice(\n (i._part - 1) * i._partSize,\n a\n )) : t = i._blob, i._async ? i._reader.readAsArrayBuffer(t) : setTimeout(() => {\n try {\n i._hashData({\n target: {\n result: i._reader.readAsArrayBuffer(\n t\n )\n }\n });\n } catch {\n i._fail();\n }\n }, 0);\n }\n _configureReader() {\n const i = this;\n i._async ? (i._reader = new FileReader(), i._reader.onload = i._hashData.bind(i), i._reader.onerror = i._fail.bind(i), i._reader.onabort = i._fail.bind(i)) : i._reader = new FileReaderSync();\n }\n}\nclass u {\n _queue = [];\n _hashWorker;\n _processing;\n _ready = !0;\n constructor(i, a) {\n const t = this;\n Worker ? (t._hashWorker = new Worker(i, a), t._hashWorker.onmessage = t._recievedMessage.bind(t), t._hashWorker.onerror = (e) => {\n t._ready = !1, console.error(\"Hash worker failure\", e);\n }) : (t._ready = !1, console.error(\"Web Workers are not supported in this browser\"));\n }\n /**\n * Hash a blob of data in the worker\n * @param blob Data to hash\n * @returns Promise of the Hashed result\n */\n hash(i) {\n const a = this;\n let t;\n return t = new Promise((e, s) => {\n a._queue.push({\n blob: i,\n resolve: e,\n reject: s\n }), a._processNext();\n }), t;\n }\n /** Terminate any existing hash requests */\n terminate() {\n this._ready = !1, this._hashWorker.terminate();\n }\n // Processes the next item in the queue\n _processNext() {\n this._ready && !this._processing && this._queue.length > 0 && (this._processing = this._queue.pop(), this._hashWorker.postMessage(this._processing.blob));\n }\n // Hash result is returned from the worker\n _recievedMessage(i) {\n const a = i.data;\n a.success ? this._processing?.resolve(a.result) : this._processing?.reject(a.result), this._processing = void 0, this._processNext();\n }\n}\nexport {\n h as Md5,\n l as Md5FileHasher,\n u as ParallelHasher\n};\n//# sourceMappingURL=index.es.js.map\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMilliseconds} function options.\n */\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of milliseconds to be added.\n * @param options - The options object\n *\n * @returns The new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport function addMilliseconds(date, amount, options) {\n return constructFrom(options?.in || date, +toDate(date) + amount);\n}\n\n// Fallback for modularized imports:\nexport default addMilliseconds;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\nimport { millisecondsInHour } from \"./constants.js\";\n\n/**\n * The {@link addHours} function options.\n */\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be added\n * @param options - An object with options\n *\n * @returns The new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport function addHours(date, amount, options) {\n return addMilliseconds(date, amount * millisecondsInHour, options);\n}\n\n// Fallback for modularized imports:\nexport default addHours;\n","import { addMilliseconds } from \"./addMilliseconds.js\";\n\n/**\n * The {@link addSeconds} function options.\n */\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of seconds to be added.\n * @param options - An object with options\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport function addSeconds(date, amount, options) {\n return addMilliseconds(date, amount * 1000, options);\n}\n\n// Fallback for modularized imports:\nexport default addSeconds;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * @param date - The given date\n *\n * @returns The timestamp\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport function getUnixTime(date) {\n return Math.trunc(+toDate(date) / 1000);\n}\n\n// Fallback for modularized imports:\nexport default getUnixTime;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param date - The date that should be before the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is before the second date\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport function isBefore(date, dateToCompare) {\n return +toDate(date) < +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isBefore;\n","import { HashMap } from './types';\n\ndeclare global {\n interface Window {\n debug: boolean;\n }\n}\n\n/**\n * @hidden\n */\nexport type ConsoleIOStream =\n | 'log'\n | 'warn'\n | 'debug'\n | 'error'\n | 'info'\n | 'group'\n | 'groupCollapsed'\n | 'groupEnd';\n/* istanbul ignore next */\n/**\n * Log message to the console\n * @hidden\n * @param type Where the message is from\n * @param msg Body of the message\n * @param args Javascript data to post after the message\n * @param out IO stream to post message to\n * @param color CSS colour to set the `type` value printed to the console\n */\nexport function log(\n type: string,\n msg: string,\n args?: any,\n out: ConsoleIOStream = 'debug',\n color?: string,\n) {\n if (window.debug) {\n const clr = color ? color : '#009688';\n const COLOURS = ['color: #0288D1', `color:${clr}`, 'color: default'];\n if (args) {\n if (consoleHasColours()) {\n console[out](\n `%c[PlaceOS]%c[${type}] %c${msg}`,\n ...COLOURS,\n args,\n );\n } else {\n console[out](`[PlaceOS][${type}] ${msg}`, args);\n }\n } else {\n if (consoleHasColours()) {\n console[out](`%c[PlaceOS]%c[${type}] %c${msg}`, ...COLOURS);\n } else {\n console[out](`[PlaceOS][${type}] ${msg}`);\n }\n }\n }\n}\n/* istanbul ignore next */\n/**\n * @private\n * Whether the console has colours\n * @hidden\n */\nexport function consoleHasColours() {\n const doc = document as any;\n return !(doc.documentMode || /Edge/.test(navigator.userAgent));\n}\n\n/**\n * Get URL paramters from hash or query string\n */\nexport function getFragments(): HashMap<string> {\n const hash = window.location?.hash\n ? window.location?.hash.slice(1)\n : window.location?.href.split('#')[1] || '';\n let query = window.location?.search\n ? window.location?.search.slice(1)\n : window.location?.href.split('?')[1] || '';\n let hash_fragments = {};\n if (hash) {\n // Hash can also contain the query so we need to check for it\n if (hash.indexOf('?') >= 0) {\n const parts = hash.split('?');\n hash_fragments = convertPairStringToMap(parts[0]);\n /* istanbul ignore else */\n if (!query) {\n query = parts[1];\n }\n } else {\n hash_fragments = convertPairStringToMap(hash);\n }\n }\n let query_fragments = {};\n if (query) {\n query_fragments = convertPairStringToMap(query);\n }\n return { ...hash_fragments, ...query_fragments };\n}\n\n/**\n * @private\n * Convert string of key value pairs to a dictionary object\n * @param str String of values\n */\nexport function convertPairStringToMap(str: string): HashMap<string> {\n const map: HashMap<string> = {};\n const str_pairs = str.split('&');\n for (const str_pair of str_pairs) {\n const split_pair = str_pair.split('=');\n if (split_pair[1]) {\n map[decodeURIComponent(split_pair[0])] = decodeURIComponent(\n split_pair[1],\n );\n }\n }\n return map;\n}\n\n/**\n * @hidden\n */\nconst NONCE_CHARS =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n/**\n * @private\n * Create a nonce with the given length\n * @param length Length of the nonce string. Defaults to 40 characters\n */\nexport function generateNonce(length: number = 40): string {\n let nonce = '';\n for (let i = 0; i < length; i++) {\n nonce += NONCE_CHARS.charAt(\n Math.floor(Math.random() * NONCE_CHARS.length),\n );\n }\n return nonce;\n}\n\n/**\n * @private\n * Replace the URL fragment with the given name\n * @param name Name of the fragment to remove\n */\nexport function removeFragment(name: string) {\n const new_hash = (window.location?.hash || '')\n .replace(new RegExp(`${name}[a-zA-Z0-9_+-.%=]*&?`, 'g'), '')\n .replace(/&&/g, '&')\n .replace(/#&/g, '#')\n .replace(/&$/g, '#');\n const new_search = (window.location?.search || '')\n .replace(new RegExp(`${name}[a-zA-Z0-9_+-.%=]*&?`, 'g'), '')\n .replace(/&&/g, '&')\n .replace(/\\?&/g, '#')\n .replace(/&$/g, '#');\n if (window.history?.replaceState)\n window.history?.replaceState(\n null,\n '',\n `${window.location?.pathname}${new_hash}${new_search}`,\n );\n}\n\n/**\n * Convert byte values into a display string\n * @param bytes Number of bytes\n */\nexport function humanReadableByteCount(bytes: number, si: boolean = false) {\n const unit = si ? 1000.0 : 1024.0;\n\n if (bytes < unit) {\n return bytes + (si ? ' iB' : ' B');\n }\n\n const exp = Math.floor(Math.log(bytes) / Math.log(unit));\n const pre = (si ? 'kMGTPE' : 'KMGTPE').charAt(exp - 1) + (si ? 'iB' : 'B');\n\n return (bytes / Math.pow(unit, exp)).toFixed(2) + ' ' + pre;\n}\n\n/**\n * @private\n * Parse URLs from Link header string\n * @param header Header value\n */\nexport function parseLinkHeader(header: string): HashMap<string> {\n if (header.length === 0) {\n throw new Error('Input must not be of zero length');\n }\n\n // Split parts by comma\n const parts = header.split(',');\n const links: HashMap<string> = {};\n // Parse each part into a named link\n for (const part of parts) {\n const section = part.split(';');\n if (section.length !== 2) {\n throw new Error(\"Section could not be split on ';'\");\n }\n const url = section[0].replace(/<(.*)>/, '$1').trim();\n const name = section[1].replace(/rel=\"(.*)\"/, '$1').trim();\n links[name] = url;\n }\n return links;\n}\n\n/**\n * @private\n * Remove properties from object with given values\n * @param object Object to clean\n * @param delete_values List of property values to remove\n */\nexport function cleanObject(object: HashMap, delete_values: any[]) {\n for (const key in object) {\n if (\n object.hasOwnProperty(key) &&\n delete_values.indexOf(object[key]) >= 0\n ) {\n delete object[key];\n }\n }\n return object;\n}\n\nexport function isMobileSafari() {\n return (\n [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod',\n ].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n );\n}\n\nexport function isNestedFrame() {\n return window.location !== window.parent.location;\n}\n\nexport function simplifiedTime(\n time: number = Date.now(),\n interval: number = 60 * 1000,\n) {\n return Math.floor(time / interval);\n}\n","import { log } from './general';\n\n/* istanbul ignore file */\nexport class AbortControllerStub {\n public abort() {\n log('Stub', 'Aborted');\n }\n}\n","import { HashMap } from './types';\n\n/**\n * Convert map into a query string\n * @param map Key value pairs to convert\n */\nexport function toQueryString(map: HashMap) {\n let str = '';\n if (map) {\n for (const key in map) {\n if (\n map.hasOwnProperty(key) &&\n map[key] !== undefined &&\n map[key] !== null\n ) {\n str += `${str ? '&' : ''}${key}=${encodeURIComponent(\n map[key],\n )}`;\n }\n }\n }\n return str;\n}\n","import { Subscription } from 'rxjs';\n\n/* istanbul ignore file */\n\n/**\n * @private\n * Store for named timers\n */\nconst _timers: { [name: string]: number } = {};\n/**\n * @private\n * Store for named intervals\n */\nconst _intervals: { [name: string]: number } = {};\n/**\n * @private\n * Store for named subscription unsub callbacks\n */\nconst _subscriptions: { [name: string]: Subscription | (() => void) } = {};\n\n/**\n * @private\n * Perform any cleanup actions needed before the item is deleted\n */\nexport function destroyWaitingAsync() {\n // Clear local timers\n for (const key in _timers) {\n if (_timers.hasOwnProperty(key)) {\n clearAsyncTimeout(key);\n }\n }\n // Clear local intervals\n for (const key in _intervals) {\n if (_intervals.hasOwnProperty(key)) {\n clearAsyncInterval(key);\n }\n }\n // Clear local subscriptions\n for (const key in _subscriptions) {\n if (_subscriptions.hasOwnProperty(key)) {\n unsub(key);\n }\n }\n}\n\n/**\n * @private\n * Creates a named timer\n * @param name Name of the timer\n * @param fn Callback function for the timer\n * @param delay Callback delay\n */\nexport function timeout(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n clearAsyncTimeout(name);\n _timers[name] = setTimeout(() => {\n fn();\n delete _timers[name];\n }, delay) as any;\n } else {\n throw new Error(\n name\n ? 'Cannot create named timeout without a name'\n : 'Cannot create a timeout without a callback',\n );\n }\n}\n\n/**\n * @private\n * Clears the named timer\n * @param name Timer name\n */\nexport function clearAsyncTimeout(name: string) {\n if (_timers[name]) {\n clearTimeout(_timers[name]);\n delete _timers[name];\n }\n}\n\n/**\n * @private\n * Creates a named interval\n * @param name Name of the interval\n * @param fn Callback function for the interval\n * @param delay Callback delay\n */\nexport function interval(name: string, fn: () => void, delay: number = 300) {\n if (name && fn && fn instanceof Function) {\n clearAsyncInterval(name);\n _intervals[name] = setInterval(() => fn(), delay) as any;\n } else {\n throw new Error(\n name\n ? 'Cannot create named interval without a name'\n : 'Cannot create a interval without a callback',\n );\n }\n}\n\n/**\n * @private\n * Clears the named interval\n * @param name Timer name\n */\nexport function clearAsyncInterval(name: string) {\n if (_intervals[name]) {\n clearInterval(_intervals[name]);\n delete _intervals[name];\n }\n}\n\n/**\n * @private\n * Store named subscription\n * @param name Name of the subscription\n * @param fn Unsubscribe callback or Subscription object\n */\nexport function subscription(name: string, fn: Subscription | (() => void)) {\n unsub(name);\n _subscriptions[name] = fn;\n}\n\n/**\n * @private\n * Call unsubscribe callback with the given name\n * @param name Name of the subscription\n */\nexport function unsub(name: string) {\n if (_subscriptions && _subscriptions[name]) {\n _subscriptions[name] instanceof Subscription\n ? (_subscriptions[name] as Subscription).unsubscribe()\n : (_subscriptions[name] as any)();\n delete _subscriptions[name];\n }\n}\n","import { HashMap } from '../utilities/types';\n\nexport const MOCK_AUTHORITY = {\n id: 'mock-authority',\n name: 'localhost:4200',\n description: '',\n domain: 'localhost:4200',\n login_url: `/login?continue={{url}}`,\n logout_url: `/logout`,\n session: true,\n production: false,\n config: {},\n version: `2.0.0`,\n};\n\nexport interface AuthorizeDetails {\n /** Access token */\n token?: string;\n /** Token generation code */\n code?: string;\n /** TTL of access token */\n expires_in?: string;\n}\n\nexport interface PlaceAuthority {\n /** Place ID for the Authority */\n readonly id: string;\n /** Authority name */\n readonly name: string;\n /** Description of the authority site */\n readonly description: string;\n /** Domain of the authority */\n readonly domain: string;\n /** URL for user to login for authentication */\n readonly login_url: string;\n /** URL for user to clear authentication details */\n readonly logout_url: string;\n /** Whether the engine instance is a production build */\n readonly production: boolean;\n /** Whether the user has an authentication session */\n readonly session: boolean;\n /** Configuration metadata for the authority */\n readonly config: HashMap;\n /** Version of the PlaceOS API */\n readonly version?: string;\n /** URL to the metrics interface for Place */\n readonly metrics?: string;\n /** DSN for Sentry integration */\n readonly sentry_dsn?: string;\n /** List of email domains associated with the authority */\n readonly email_domains?: string[];\n}\n\nexport interface PlaceAuthOptions {\n auth_type?: 'auth_code' | 'implicit' | 'password';\n /** Host name and port of the engine server */\n host?: string;\n /** Whether application uses TLS/SSL */\n secure?: boolean;\n /** URI for authorizing the user */\n auth_uri: string;\n /** URI for generating new tokens */\n token_uri: string;\n /** URI for handling authentication redirects. e.g. `/assets/oauth-resp.html` */\n redirect_uri: string;\n /** Scope of the user permissions needed to access the application */\n scope: string;\n /** Which keystore to use localStorage or sessionStorage. Defaults to `'local'' */\n storage?: 'local' | 'session';\n /** Whether to perform authentication in an iframe */\n use_iframe?: boolean;\n /** Whether service should handling user login. Defaults to `true` */\n handle_login?: boolean;\n /** Whether system is in mock mode */\n mock?: boolean;\n /** Username of the user to be authorised */\n username?: string;\n /** Password for the user being authorised */\n password?: string;\n /** Application secret */\n client_secret?: string;\n /** Whether access tokens should be injected into request headers */\n token_header?: boolean;\n /** Version of the API endpoints to use */\n version?: 'ACA Engine' | 'PlaceOS';\n /** Whether X-API-KEY values should be ignored */\n ignore_api_key?: boolean;\n /** Delay authentication by X milliseconds */\n delay?: number;\n}\n\nexport interface PlaceTokenResponse {\n /** New access token */\n access_token: string;\n /** New refresh token */\n refresh_token: string;\n /** Time in seconds with which the token expires */\n expires_in: string;\n}\n","import * as base64 from 'byte-base64';\nimport * as sha256 from 'fast-sha256';\nimport { BehaviorSubject, Observable, lastValueFrom, timer } from 'rxjs';\nimport { fromFetch } from 'rxjs/fetch';\nimport { map } from 'rxjs/operators';\nimport { Md5 } from 'ts-md5';\n\nimport { addHours, addSeconds, addYears, isBefore } from 'date-fns';\nimport { AbortControllerStub } from '../utilities/abort-controller';\nimport { toQueryString } from '../utilities/api';\nimport {\n clearAsyncTimeout,\n destroyWaitingAsync,\n timeout,\n} from '../utilities/async';\nimport {\n generateNonce,\n getFragments,\n isNestedFrame,\n log,\n removeFragment,\n} from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n AuthorizeDetails,\n MOCK_AUTHORITY,\n PlaceAuthOptions,\n PlaceAuthority,\n PlaceTokenResponse,\n} from './interfaces';\n\n/**\n * @private\n */\nlet _options: PlaceAuthOptions = {} as any;\n/**\n * @private\n * Browser key store to use for authentication credentials. Defaults to `localStorage`\n */\nlet _storage: Storage = localStorage;\n/**\n * @private\n * Authentication authority of for the current domain\n */\nlet _authority: PlaceAuthority | undefined;\n/**\n * @private\n * Map of promises\n */\nconst _promises: HashMap<Promise<any> | undefined> = {};\n/**\n * @private\n * OAuth 2 client ID for the application\n */\nlet _client_id: string = '';\n/**\n * @private\n * OAuth 2 token generation code\n */\nlet _code: string = '';\n/**\n * @private\n * In memory store for access token\n */\nconst _access_token = new BehaviorSubject('');\n/**\n * @private\n * In memory store for refresh token\n */\nconst _refresh_token = new BehaviorSubject('');\n/**\n * @private\n * Current API route\n */\nlet _route: string = `/api/engine/v2`;\n/**\n * @private\n * Whether PlaceOS is online\n */\nconst _online = new BehaviorSubject(false);\n/**\n * @private\n * Observer for the online state of PlaceOS\n */\nconst _online_observer = _online.asObservable();\n\n/**\n * @private\n */\n\nlet _failed_count = 0;\n\n/**\n * @private\n * Resolve a URL against the authority's domain if it is a relative path.\n * If the URL is already absolute (starts with http:// or https://), return as-is.\n * If the URL is relative (starts with /), prepend the protocol and authority domain.\n */\nfunction resolveAuthorityUrl(url: string): string {\n if (!url || url.startsWith('http://') || url.startsWith('https://')) {\n return url;\n }\n const domain = _authority?.domain;\n if (domain) {\n const secure =\n _options.secure || window.location?.protocol.indexOf('https') >= 0;\n return `${secure ? 'https:' : 'http:'}//${domain}${url}`;\n }\n return url;\n}\n\n/** API Endpoint for the retrieved version of PlaceOS */\nexport function apiEndpoint(): string {\n const secure =\n _options.secure || window.location?.protocol.indexOf('https') >= 0;\n const api_host = `${secure ? 'https:' : 'http:'}//${\n _options.host || window.location?.host\n }`;\n return `${api_host}${httpRoute()}`;\n}\n\n/** Path of the API endpoint */\nexport function httpRoute() {\n return _options.version === 'ACA Engine' ? '/control/api' : _route;\n}\n\n/**\n * @hidden\n * Whether requests need token in the request URL or as a header\n */\nexport function needsTokenHeader(): boolean {\n return !!_options.token_header;\n}\n\n/** OAuth 2 client ID for the application */\nexport function clientId(): string {\n return _client_id;\n}\n\n/** Redirect URI for the OAuth flow */\nexport function redirectUri(): string {\n return _options.redirect_uri;\n}\n\n/** Manually set an X API key */\nexport function setAPI_Key(api_key: string, trusted: boolean = true) {\n _storage.setItem(`${_client_id}_x-api-key`, `${api_key}`);\n _storage.setItem('trusted', `${trusted}`);\n setToken('x-api-key', addYears(new Date(), 5).valueOf());\n}\n\n/** Get X API Key for application */\nexport function apiKey() {\n return checkStoreForAuthParam('x-api-key', false) || '';\n}\n\n/** Manually set an access token */\nexport function setToken(\n new_token: string,\n expires_at: number = addHours(new Date(), 2).valueOf(),\n) {\n if (_options.ignore_api_key && new_token === 'x-api-key') return;\n _storage.setItem(`${_client_id}_expires_at`, `${expires_at}`);\n _storage.setItem(`${_client_id}_access_token`, new_token);\n}\n\n/** Bearer token for authenticating requests to PlaceOS */\nexport function token(return_expired: boolean = true): string {\n if (_options.mock) return 'mock-token';\n if (!_storage) return '';\n if (apiKey() && !_options.ignore_api_key) return 'x-api-key';\n const expires_at = _storage.getItem(`${_client_id}_expires_at`) || '';\n const access_token = _access_token.getValue();\n if (isBefore(+expires_at, new Date())) {\n log('Auth', 'Token expired. Requesting new token...');\n invalidateToken();\n if (!_promises.load_authority) {\n _failed_count += 1;\n timeout(\n 're-authorise',\n async () => {\n delete _promises.authorise;\n await authorise().catch((e) =>\n log('Auth', `Failed to get token: ${e}`),\n );\n },\n 200 * Math.min(20, _failed_count),\n );\n }\n if (!return_expired) {\n return '';\n }\n }\n return access_token || _storage.getItem(`${_client_id}_access_token`) || '';\n}\n\n/** Refresh token for renewing the access token */\nexport function refreshToken(): string {\n return (\n _refresh_token.getValue() ||\n _storage.getItem(`${_client_id}_refresh_token`) ||\n ''\n );\n}\n\n/** Host domain of the PlaceOS server */\nexport function host(): string {\n return _options.host || window.location?.host;\n}\n\n/** Whether the application has an authentication token */\nexport function hasToken(): boolean {\n return !!token();\n}\n\n/** Observable for token state */\nexport function listenForToken(): Observable<boolean> {\n return _access_token.pipe(map((_) => !!hasToken()));\n}\n\n/** Place Authority details */\nexport function authority(): PlaceAuthority | undefined {\n return _authority;\n}\n\n/** Whether PlaceOS is online */\nexport function isOnline(): boolean {\n return _online.getValue();\n}\n\n/** Whether requests should use mock handlers */\nexport function isMock(): boolean {\n return !!_options.mock;\n}\n\n/** Whether PlaceOS connection is secure */\nexport function isSecure(): boolean {\n return !!_options.secure;\n}\n\n/** Observable for the online state of PlaceOS */\nexport function onlineState(): Observable<boolean> {\n return _online_observer;\n}\n\n/** Whether this application is trusted */\nexport function isTrusted(): boolean {\n return (\n checkStoreForAuthParam('trust') === 'true' ||\n checkStoreForAuthParam('trusted') === 'true'\n );\n}\n\n/** Whether this application is on a fixed location device */\nexport function isFixedDevice(): boolean {\n return (\n (!!apiKey() && !_options.ignore_api_key) ||\n checkStoreForAuthParam('fixed_device') === 'true'\n );\n}\n\n/**\n * @hidden\n * Check for an auth related param in the URL or storage\n * @param name Name of the paramater to look for\n */\nexport function checkStoreForAuthParam(\n name: string,\n store: boolean = true,\n): string {\n const fragments = getFragments();\n let param = fragments[name];\n /* istanbul ignore else */\n if (_storage) {\n const key = `${clientId()}_${name}`;\n param = param || _storage.getItem(key) || _storage.getItem(name) || '';\n if (store) _storage.setItem(key, `${param}`);\n }\n return param;\n}\n\n/** Initialise authentication for the http and realtime APIs */\nexport async function setup(options: PlaceAuthOptions): Promise<void> {\n _options = options || _options;\n _options.token_header = _options.token_header ?? isNestedFrame();\n if (!window.AbortController) {\n (window as any).AbortController = AbortControllerStub;\n }\n // Intialise storage\n _storage = _options.storage === 'session' ? sessionStorage : localStorage;\n _client_id = Md5.hashStr(_options.redirect_uri, false);\n if (_options.delay && _options.delay > 0) {\n await lastValueFrom(timer(_options.delay!));\n }\n return loadAuthority();\n}\n\nexport function setStorage(type: 'session' | 'local'): void {\n _storage = type === 'session' ? sessionStorage : localStorage;\n}\n\n/**\n * @private\n */\nexport function cleanupAuth() {\n _options = {} as any;\n _authority = undefined;\n _access_token.next('');\n _refresh_token.next('');\n _online.next(false);\n _client_id = '';\n _code = '';\n _route = `/api/engine/v2`;\n // Clear local subscriptions\n for (const key in _promises) {\n /* istanbul ignore else */\n if (key in _promises) {\n delete _promises[key];\n }\n }\n destroyWaitingAsync();\n}\n\n/**\n * Refresh authentication\n */\nexport function refreshAuthority(): Promise<void> {\n log('Auth', 'Refreshing authorty.');\n _authority = undefined;\n return loadAuthority();\n}\n\n/**\n * Invalidate the current access token\n */\nexport function invalidateToken(): void {\n log('Auth', 'Invalidating tokens.');\n _storage.removeItem(`${_client_id}_access_token`);\n _storage.removeItem(`${_client_id}_expires_at`);\n if (_access_token.getValue()) _access_token.next('');\n}\n\n/* istanbul ignore else */\n/**\n * Check the users authentication credentials and perform actions\n * required for the user to authenticate\n * @param state Additional state information for auth requests\n */\nexport function authorise(\n state?: string,\n api_authority: PlaceAuthority = _authority as PlaceAuthority,\n): Promise<string> {\n /* istanbul ignore else */\n if (!_promises.authorise) {\n _promises.authorise = new Promise<string>((resolve, reject) => {\n if (!api_authority) {\n delete _promises.authorise;\n return reject('Authority is not loaded');\n }\n log('Auth', 'Authorising user...');\n const after_check = () => {\n if (token(false)) {\n log('Auth', 'Valid token found.');\n delete _promises.authorise;\n resolve(token());\n } else {\n const token_handlers = [\n () => {\n log('Auth', 'Successfully generated token.');\n resolve(token());\n delete _promises.authorise;\n },\n () => {\n log('Auth', 'Failed to generate token.');\n reject('Failed to generate token');\n setTimeout(() => delete _promises.authorise, 200);\n },\n ];\n if (_options && _options.auth_type === 'password') {\n log('Auth', 'Logging in with credentials.');\n generateTokenWithCredentials(_options).then(\n ...token_handlers,\n );\n _failed_count = 0;\n } else if (_code || refreshToken()) {\n log(\n 'Auth',\n `Generating token with ${\n _code ? 'code' : 'refresh token'\n }`,\n );\n generateToken().then(...token_handlers);\n _failed_count = 0;\n } else {\n if (api_authority!.session) {\n log(\n 'Auth',\n 'Users has session. Authorising application...',\n );\n sendToAuthorize(state).then(...token_handlers);\n } else {\n log('Auth', 'No user session');\n sendToLogin(api_authority);\n reject('No user session');\n setTimeout(() => delete _promises.authorise, 200);\n }\n }\n }\n };\n checkToken().then(after_check, after_check);\n });\n }\n return _promises.authorise as Promise<string>;\n}\n\n/**\n * Logout and clear user credentials for the application\n */\nexport function logout(): void {\n const url = resolveAuthorityUrl(\n _authority ? _authority.logout_url : '/logout',\n );\n fetch(url, {\n method: 'GET',\n redirect: 'manual',\n headers: {\n Authorization: 'Bearer ' + token(),\n },\n }).then((response) => {\n const location = response.headers.get('Location') || url;\n // Remove user credentials\n for (let i = 0; i < _storage.length; i++) {\n const key = _storage.key(i);\n if (key && key.indexOf(_client_id) >= 0) {\n _storage.removeItem(key);\n }\n }\n window.location?.assign(location);\n });\n}\n\n/**\n * @private\n * Load authority details from engine\n */\nexport function loadAuthority(tries: number = 0): Promise<void> {\n if (!_promises.load_authority) {\n _promises.load_authority = new Promise<void>((resolve) => {\n _online.next(false);\n if (_options.mock) {\n // Setup mock authority\n _authority = MOCK_AUTHORITY;\n log('Auth', `System in mock mode`);\n _online.next(true);\n resolve();\n return;\n }\n log('Auth', `Fixed: ${isFixedDevice()} | Trusted: ${isTrusted()}`);\n log('Auth', `Loading authority...`);\n const secure =\n _options.secure ||\n window.location?.protocol.indexOf('https') >= 0;\n const on_error = (err: any) => {\n log('Auth', `Failed to load authority(${err})`);\n _online.next(false);\n // Retry if authority fails to load\n timeout(\n 'load_authority',\n () => {\n delete _promises.load_authority;\n loadAuthority(tries).then((_) => resolve());\n },\n 300 * Math.min(20, ++tries),\n );\n };\n fromFetch(\n `${secure ? 'https:' : 'http:'}//${host()}/auth/authority`,\n {\n credentials: 'same-origin',\n },\n ).subscribe(async (resp) => {\n if (!resp.ok) {\n return on_error(await resp.text().catch((_) => _));\n }\n _authority = (await resp.json()) as PlaceAuthority;\n _route = !/[2-9]\\.[0-9]+\\.[0-9]+/g.test(\n _authority.version || '',\n )\n ? `/control/api`\n : `/api/engine/v2`;\n\n log('Auth', `Loaded authority.`, [], 'group');\n if (_authority) {\n log('Auth', `Name: ${_authority.name}`);\n log('Auth', `Version: ${_authority.version}`);\n log('Auth', `Domain: ${_authority.domain}`);\n log('Auth', `Session: ${_authority.session}`);\n log('Auth', `Production: ${_authority.production}`);\n log(\n 'Auth',\n `Config Keys: ${\n Object.keys(_authority.config || {}).length\n }`,\n );\n }\n log('Auth', ``, [], 'groupEnd');\n\n const response = () => {\n _online.next(true);\n log('Auth', 'Application set online.');\n resolve();\n };\n delete _promises.load_authority;\n authorise('').then(response, response);\n }, on_error);\n });\n }\n return _promises.load_authority;\n}\n\n/**\n * @private\n * @param state\n */\nexport async function sendToAuthorize(state?: string): Promise<void> {\n const auth_url = createLoginURL(state);\n if (_options.use_iframe) {\n return authorizeWithIFrame(auth_url);\n }\n window.location?.assign(auth_url);\n}\n\n/* istanbul ignore next */\n/**\n * @private\n * @param url Authorization URL\n */\nexport function authorizeWithIFrame(url: string): Promise<void> {\n if (!_promises.iframe_auth) {\n _promises.iframe_auth = new Promise<void>((resolve, reject) => {\n log('Auth', 'Authorizing in an iFrame...');\n const iframe = document.createElement('iframe');\n iframe.style.position = 'absolute';\n iframe.style.top = '0';\n iframe.style.left = '0';\n iframe.style.height = '1px';\n iframe.style.width = '1px';\n iframe.style.zIndex = '-1';\n iframe.id = 'place-authorize';\n iframe.src = `${url}`;\n const callback = (event: MessageEvent) => {\n if (\n event.origin === window.location?.origin &&\n event.data.type === 'place-os'\n ) {\n const data: AuthorizeDetails = event.data;\n log('Auth', 'Received credentials from iFrame...');\n document.body.removeChild(iframe);\n clearAsyncTimeout('iframe_auth');\n window.removeEventListener('message', callback);\n delete _promises.iframe_auth;\n if (data.token) {\n resolve();\n return _storeTokenDetails({\n access_token: data.token,\n ...data,\n } as any);\n }\n _code = data.code || '';\n generateToken().then(\n (_) => resolve(_),\n (_) => reject(_),\n );\n }\n };\n timeout(\n 'iframe_auth',\n () => {\n log('Auth', 'Unable to resolve iFrame after 15 seconds...');\n reject();\n },\n 15 * 1000,\n );\n window.addEventListener('message', callback);\n iframe.onerror = (_) => {\n log('Auth', 'iFrame error.', _);\n delete _promises.iframe_auth;\n reject();\n };\n document.body.appendChild(iframe);\n });\n }\n return _promises.iframe_auth;\n}\n\nlet _redirecting = false;\n\n/**\n * @private\n * @param api_authority\n */\nexport function sendToLogin(api_authority: PlaceAuthority): void {\n /* istanbul ignore else */\n if (_options.handle_login !== false && !_redirecting) {\n log('Auth', 'Redirecting to login page...');\n // Redirect to login form, resolving relative URLs against the authority domain\n const url = resolveAuthorityUrl(\n api_authority!.login_url?.replace(\n '{{url}}',\n encodeURIComponent(window.location?.href),\n ),\n );\n setTimeout(() => window.location?.assign(url), 300);\n _redirecting = true;\n throw new Error('Redirecting to login page...');\n } else {\n log('Auth', 'Login being handled locally.');\n }\n delete _promises.authorise;\n}\n\n/**\n * @private\n * Check authentication token\n */\nexport function checkToken(): Promise<boolean> {\n /* istanbul ignore else */\n if (!_promises.check_token) {\n _promises.check_token = new Promise(async (resolve, reject) => {\n if (token()) {\n log('Auth', 'Valid token found.');\n resolve(token());\n } else {\n log('Auth', 'No token. Checking URL for auth credentials...');\n const success = await checkForAuthParameters();\n success ? resolve(true) : reject();\n }\n delete _promises.check_token;\n });\n }\n return _promises.check_token as Promise<boolean>;\n}\n\n/**\n * @private\n * Check URL for auth parameters\n */\nexport function checkForAuthParameters(): Promise<boolean> {\n /* istanbul ignore else */\n if (!_promises.check_params) {\n _promises.check_params = new Promise((resolve) => {\n log('Auth', 'Checking for auth parameters...');\n let fragments = getFragments();\n if (\n (!fragments || Object.keys(fragments).length <= 0) &&\n sessionStorage\n ) {\n fragments = JSON.parse(\n sessionStorage.getItem('ENGINE.auth.params') || '{}',\n );\n }\n if (\n fragments &&\n (fragments.code ||\n fragments.access_token ||\n fragments.refresh_token)\n ) {\n // Store authorisation code\n if (fragments.code) {\n _code = fragments.code;\n removeFragment('code');\n }\n // Store refresh token\n if (fragments.refresh_token) {\n _storage.setItem(\n `${_client_id}_refresh_token`,\n fragments.refresh_token,\n );\n removeFragment('refresh_token');\n }\n const saved_nonce =\n _storage.getItem(`${_client_id}_nonce`) || '';\n const state_parts = (fragments.state || '').split(';');\n removeFragment('state');\n removeFragment('token_type');\n const nonce = state_parts[0];\n /* istanbul ignore else */\n if (saved_nonce === nonce) {\n _storeTokenDetails(fragments as any);\n resolve(!!fragments.access_token);\n } else {\n resolve(false);\n }\n } else {\n resolve(false);\n }\n timeout(\n 'check_params_promise',\n () => delete _promises.check_params,\n 50,\n );\n });\n }\n return _promises.check_params as Promise<boolean>;\n}\n\n/**\n * @private\n * Generate login URL for the user to authenticate\n * @param state State information to send to the server\n */\nexport function createLoginURL(state?: string): string {\n const nonce = createAndSaveNonce();\n state = state ? `${nonce};${state}` : nonce;\n const has_query = _options\n ? (_options.auth_uri || '').indexOf('?') >= 0\n : false;\n const login_url =\n (_options ? _options.auth_uri : null) || '/auth/oauth/authorize';\n const response_type =\n isTrusted() || _options.auth_type === 'auth_code' ? 'code' : 'token';\n let url =\n `${login_url}${has_query ? '&' : '?'}` +\n `response_type=${encodeURIComponent(response_type)}` +\n `&client_id=${encodeURIComponent(_client_id)}` +\n `&state=${encodeURIComponent(state)}` +\n `&redirect_uri=${encodeURIComponent(_options.redirect_uri)}` +\n `&scope=${encodeURIComponent(_options.scope)}`;\n if (_options.auth_type === 'auth_code') {\n const { challenge, verify } = generateChallenge();\n sessionStorage.setItem(`${_client_id}_challenge`, challenge);\n url += `&code_challenge_method=S256`;\n url += `&code_challenge=${verify}`;\n }\n return url;\n}\n\n/**\n * @private\n */\nconst AVAILABLE_CHARS =\n 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split('');\n/**\n * @private\n * @param length Length of the challenge string\n */\nexport function generateChallenge(length: number = 43) {\n const challenge = new Array(length)\n .fill(0)\n .map(\n () =>\n AVAILABLE_CHARS[\n Math.floor(Math.random() * AVAILABLE_CHARS.length)\n ],\n )\n .join('');\n const uint8array = base64.base64ToBytes(base64.base64encode(challenge));\n const verify = base64\n .bytesToBase64(sha256.hash(uint8array))\n .split('=')[0]\n .replace(/\\//g, '_')\n .replace(/\\+/g, '-');\n return { challenge, verify };\n}\n\n/**\n * @private\n * Generate token generation URL\n */\nexport function createRefreshURL(): [string, string] {\n const refresh_uri = _options.token_uri || '/auth/token';\n let url = refresh_uri + `?client_id=${encodeURIComponent(_client_id)}`;\n let body = '';\n url += `&redirect_uri=${encodeURIComponent(_options.redirect_uri)}`;\n if (refreshToken()) {\n url += `&refresh_token=${encodeURIComponent(refreshToken())}`;\n url += `&grant_type=refresh_token`;\n const parts = url.split('?');\n url = parts[0];\n body = parts[1];\n } else {\n url += `&code=${encodeURIComponent(_code)}`;\n url += `&grant_type=authorization_code`;\n const challenge = sessionStorage.getItem(`${_client_id}_challenge`);\n if (challenge) {\n url += `&code_verifier=${challenge}`;\n sessionStorage.removeItem(`${_client_id}_challenge`);\n }\n _code = '';\n }\n return [url, body];\n}\n\n/**\n * @private\n * Geneate a token URL for basic auth with the given credentials\n * @param options Credentials to add to the token\n */\nexport function createCredentialsURL(options: PlaceAuthOptions) {\n const refresh_uri = options.token_uri || '/auth/token';\n const url = toQueryString({\n grant_type: 'password',\n client_id: _client_id,\n client_secret: options.client_secret,\n redirect_uri: options.redirect_uri,\n authority: _authority?.id,\n scope: options.scope,\n username: options.username,\n password: options.password,\n });\n return `${refresh_uri}?${url}`;\n}\n\n/**\n * @private\n * Revoke the current access token\n */\nexport function revokeToken(): Promise<void> {\n /* istanbul ignore else */\n if (!_promises.revoke_token) {\n _promises.revoke_token = new Promise<void>((resolve, reject) => {\n log('Auth', 'Revoking token...');\n const token_uri = _options.token_uri || '/auth/token';\n const on_error = (err: any) => {\n log('Auth', 'Error revoking token.', err);\n reject(err);\n delete _promises.revoke_token;\n };\n fromFetch(`${token_uri}?token=${token()}`, {\n method: 'POST',\n }).subscribe((r: Response) => {\n if (!r.ok) return on_error(r);\n log('Auth', 'Successfully revoked token.');\n _access_token.next('');\n _refresh_token.next('');\n _storage.removeItem(`${_client_id}_access_token`);\n _storage.removeItem(`${_client_id}_refresh_token`);\n resolve();\n delete _promises.revoke_token;\n }, on_error);\n });\n }\n return _promises.revoke_token;\n}\n\n/**\n * @private\n * Generate new tokens from a auth code or refresh token\n */\nexport function generateToken() {\n return generateTokenWithUrl(...createRefreshURL());\n}\n\n/**\n * @private\n * Generate new tokens from a username and password\n */\nexport function generateTokenWithCredentials(options: PlaceAuthOptions) {\n return generateTokenWithUrl(createCredentialsURL(options));\n}\n\n/**\n * @private\n * Make a request to the tokens endpoint with the given URL\n */\nexport function generateTokenWithUrl(\n url: string,\n body: string = '',\n): Promise<void> {\n /* istanbul ignore else */\n if (!_promises.generate_tokens) {\n _promises.generate_tokens = new Promise<void>((resolve, reject) => {\n log('Auth', 'Generating new token...');\n const on_error = (err: any) => {\n log('Auth', 'Error generating new tokens.', err);\n _storage.removeItem(`${_client_id}_refresh_token`);\n _refresh_token.next('');\n reject();\n delete _promises.generate_tokens;\n };\n fromFetch(url, {\n method: 'POST',\n body,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n }).subscribe(async (r: Response) => {\n if (!r.ok) return on_error(r);\n const tokens = await r.json();\n _storeTokenDetails(tokens);\n resolve();\n delete _promises.generate_tokens;\n }, on_error);\n });\n }\n return _promises.generate_tokens as Promise<void>;\n}\n\n/* istanbul ignore next */\n/**\n * @private\n * @param details\n */\nexport function _storeTokenDetails(details: PlaceTokenResponse) {\n const expires_at = addSeconds(\n new Date(),\n Math.max(60, parseInt(details.expires_in, 10) - 300),\n );\n log('Auth', 'Tokens generated storing...');\n if (isTrusted()) {\n // Store access token\n if (details.access_token) {\n _storage.setItem(\n `${_client_id}_access_token`,\n details.access_token,\n );\n removeFragment('access_token');\n }\n // Store refresh token\n if (details.refresh_token) {\n _storage.setItem(\n `${_client_id}_refresh_token`,\n details.refresh_token,\n );\n removeFragment('refresh_token');\n }\n }\n // Store token expiry time\n if (details.expires_in) {\n _storage.setItem(`${_client_id}_expires_at`, `${expires_at.valueOf()}`);\n removeFragment('expires_in');\n }\n _online.next(true);\n _access_token.next(details.access_token || '');\n _refresh_token.next(details.refresh_token || '');\n}\n\n/**\n * @private\n * Create nonce and save it to the set key store\n */\nexport function createAndSaveNonce(): string {\n const nonce = generateNonce();\n _storage.setItem(`${_client_id}_nonce`, nonce);\n return nonce;\n}\n","import { from, Observable, throwError } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\nimport { convertPairStringToMap, log } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n HttpVerb,\n MockHttpRequest,\n MockHttpRequestHandler,\n MockHttpRequestHandlerOptions,\n} from './interfaces';\n\n/**\n * @private\n */\nconst _handlers: HashMap<MockHttpRequestHandler> = {};\n\nlet _error_handler: (\n method: HttpVerb,\n url: string,\n) => Observable<never> | null = (method: HttpVerb, url: string) => {\n const error = new Error(`Mock endpoint not found: ${method} ${url}`);\n (error as any).status = 404;\n log('HTTP(M)', `404 ${method}:`, url);\n return throwError(error);\n};\n\n/**\n * Change the handler for not found endpoints\n * Return `null` if you want to make the real request\n * @param handler_fn Function to handle not found mocked endpoints\n */\nexport function setMockNotFoundHandler(\n handler_fn: (method: HttpVerb, url: string) => Observable<never> | null,\n) {\n _error_handler = handler_fn;\n}\n\n/**\n * Register handler for http endpoint\n * @param path URL to be handled\n * @param data Data associated with the results of the endpoint\n * @param method HTTP Verb to listen to\n * @param callback Callback for handling request to the given endpoint\n * @param handler_map Handler map to add the endpoint to. Defaults to the global handler map\n */\nexport function registerMockEndpoint<T>(\n handler_ops: MockHttpRequestHandlerOptions,\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n) {\n deregisterMockEndpoint(handler_ops.method, handler_ops.path, handler_map);\n const key = `${handler_ops.method}|${handler_ops.path}`;\n const path_parts = handler_ops.path\n .replace(/(http|https):\\/\\/[a-zA-Z0-9.-]*:?([0-9]*)?/g, '') // Remove URL origin\n .replace(/^\\//, '')\n .split('/');\n const handler: MockHttpRequestHandler<T> = {\n ...handler_ops,\n path_parts,\n path_structure: path_parts.map((i: string) =>\n i[0] === ':' ? i.replace(':', '') : '',\n ),\n };\n handler_map[key] = handler;\n log('HTTP(M)', `+ ${handler_ops.method} ${handler_ops.path}`);\n}\n\n/**\n * Remove registration of mock endpoint\n * @param method Http Verb\n * @param url URL of the endpoint being mocked\n * @param handler_map Handler map to remove the endpoint from. Defaults to the global handler map\n */\nexport function deregisterMockEndpoint(\n method: string,\n url: string,\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n) {\n const key = `${method}|${url}`;\n if (handler_map[key]) {\n delete handler_map[key];\n log('HTTP(M)', `- ${method} ${url}`);\n }\n}\n\n/**\n * @private\n * Remove mapping of handlers for Mock Http requests\n * @param handler_map Handler map to clear. Defaults to the global handler map\n */\nexport function clearMockEndpoints(\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n) {\n for (const key in handler_map) {\n if (handler_map[key]) {\n delete handler_map[key];\n }\n }\n}\n\n/**\n * @private\n * Perform mock request for the given method and URL.\n * Returns a 404 error if no handler for URL and method\n * @param method Http Verb for request\n * @param url URL to perform request on\n * @param handler_map Handler map to query for the request handler.\n * Defaults to the global handler map\n */\nexport function mockRequest(\n method: HttpVerb,\n url: string,\n body?: any,\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n): Observable<HashMap | string | void> | null {\n const handler = findRequestHandler(method, url, handler_map);\n if (handler) {\n const request = processRequest(url, handler, body);\n return onMockRequest(handler, request);\n }\n // Return 404 error when no handler is found\n return _error_handler(method, url);\n}\n\n/**\n * @private\n * Find a request handler for the given URL and method\n * @param method HTTP verb for the request\n * @param url URL of the request\n * @param handler_map Handler map to clear. Defaults to the global handler map\n */\nexport function findRequestHandler(\n method: HttpVerb,\n url: string,\n handler_map: HashMap<MockHttpRequestHandler> = _handlers,\n): MockHttpRequestHandler | null {\n const path = url\n .replace(/(http|https):\\/\\/[a-zA-Z0-9.-]*:?([0-9]*)?/g, '')\n .replace(/^\\//, '')\n .split('?')[0];\n const route_parts = path.split('/');\n const method_handlers: MockHttpRequestHandler[] = Object.keys(\n handler_map,\n ).reduce<MockHttpRequestHandler[]>((l, i) => {\n if (i.indexOf(`${method}|`) === 0) {\n l.push(handler_map[i]);\n }\n return l;\n }, []);\n for (const handler of method_handlers) {\n if (handler.path_structure.length === route_parts.length) {\n // Path lengths match\n let match = true;\n for (let i = 0; i < handler.path_structure.length; i++) {\n if (\n !handler.path_structure[i] &&\n handler.path_parts[i] !== route_parts[i]\n ) {\n // Static path fragments don't match\n match = false;\n break;\n }\n }\n if (match) {\n return handler;\n }\n }\n }\n return null;\n}\n\n/**\n * @private\n * Generate mock HTTP request from the given URL and handler\n * @param url URL to mock\n * @param handler Handler for the given URL\n */\nexport function processRequest<T = any>(\n url: string,\n handler: MockHttpRequestHandler<T>,\n body?: any,\n): MockHttpRequest {\n const parts = url\n .replace(/(http|https):\\/\\/[a-zA-Z0-9.-]*:?([0-9]*)?/g, '')\n .split('?');\n const path = parts[0].replace(/^\\//, '');\n const query = parts[1] || '';\n const query_params = convertPairStringToMap(query);\n // Grab route parameters from URL\n const route_parts = path.split('/');\n const route_params: HashMap = {};\n for (let i = 0; i < handler.path_structure.length; i++) {\n const paramName = handler.path_structure[i];\n if (paramName) {\n route_params[paramName] = route_parts[i];\n }\n }\n const request = {\n url,\n path: handler.path,\n method: handler.method,\n metadata: handler.metadata,\n route_params,\n query_params,\n body,\n };\n log('HTTP(M)', `MATCHED ${request.method}:`, request);\n return request;\n}\n\n/**\n * @private\n * Perform request and return an observable for the generated response\n * @param handler Request handler\n * @param request Request contents\n */\nexport function onMockRequest(\n handler: MockHttpRequestHandler,\n request: MockHttpRequest,\n) {\n let result;\n try {\n result = handler.callback\n ? handler.callback(request)\n : handler.metadata;\n } catch (error) {\n log('HTTP(M)', `ERROR ${request.method}:`, [request.url, error]);\n throw error;\n }\n const variance = handler.delay_variance || 100;\n const delay_value = handler.delay || 300;\n const delay_time =\n Math.floor(Math.random() * variance - variance / 2) + delay_value;\n log('HTTP(M)', `RESP ${request.method}:`, [request.url, result]);\n return from([result]).pipe(delay(Math.max(200, delay_time)));\n}\n\n/**\n * Get a list of the method + endpoints that have been mocked\n * @returns List of the method + endpoint that have been mocked\n */\nexport function listMockedEndpoints(): string[] {\n return Object.keys(_handlers);\n}\n","import { Observable, throwError } from 'rxjs';\nimport { fromFetch } from 'rxjs/fetch';\nimport { filter, retry, switchMap, take } from 'rxjs/operators';\n\nimport {\n apiKey,\n authority,\n invalidateToken,\n isMock,\n listenForToken,\n refreshAuthority,\n sendToLogin,\n token,\n} from '../auth/functions';\nimport { log } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n HttpJsonOptions,\n HttpOptions,\n HttpResponse,\n HttpResponseType,\n HttpTextOptions,\n HttpVerb,\n HttpVoidOptions,\n} from './interfaces';\nimport { mockRequest } from './mock';\n\n/**\n * Method store to allow attaching spies for testing\n * @hidden\n */\nexport const engine_http: any = { log };\n\n/**\n * @private\n * Map of headers from the last request made\n */\nconst _response_headers: HashMap<HashMap<string>> = {};\n\nexport function responseHeaders(\n url: string,\n /* istanbul ignore next */\n headers: HashMap<HashMap<string>> = _response_headers,\n): HashMap<string> {\n return headers[url] || {};\n}\n\n/**\n * Perform AJAX HTTP GET request\n * @param url URL of the GET endpoint\n * @param options Options to add to the request\n */\nexport function get(\n url: string,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function get(url: string, options?: HttpTextOptions): Observable<string>;\nexport function get(\n url: string,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'json' };\n }\n return handler('GET', url, { response_type: 'json', ...options });\n}\n\n/**\n * Perform AJAX HTTP POST request\n * @param url URL of the POST endpoint\n * @param body Body contents of the request\n * @param options Options to add to the request\n */\nexport function post(\n url: string,\n body: any,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function post(\n url: string,\n body: any,\n options?: HttpTextOptions,\n): Observable<string>;\nexport function post(\n url: string,\n body: any,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'json' };\n }\n return handler('POST', url, { body, response_type: 'json', ...options });\n}\n\n/**\n * Perform AJAX HTTP PUT request\n * @param url URL of the PUT endpoint\n * @param body Body contents of the request\n * @param options Options to add to the request\n */\nexport function put(\n url: string,\n body: any,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function put(\n url: string,\n body: any,\n options?: HttpTextOptions,\n): Observable<string>;\nexport function put(\n url: string,\n body: any,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'json' };\n }\n return handler('PUT', url, { body, response_type: 'json', ...options });\n}\n\n/**\n * Perform AJAX HTTP PATCH request\n * @param url URL of the PATCH endpoint\n * @param body Body contents of the request\n * @param options Options to add to the request\n */\nexport function patch(\n url: string,\n body: any,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function patch(\n url: string,\n body: any,\n options?: HttpTextOptions,\n): Observable<string>;\nexport function patch(\n url: string,\n body: any,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'json' };\n }\n return handler('PATCH', url, { body, response_type: 'json', ...options });\n}\n\n/**\n * Perform AJAX HTTP DELETE request\n * @param url URL of the DELETE endpoint\n * @param options Options to add to the request\n */\nexport function del(\n url: string,\n options?: HttpJsonOptions,\n): Observable<HashMap>;\nexport function del(url: string, options?: HttpTextOptions): Observable<string>;\nexport function del(url: string, options?: HttpVoidOptions): Observable<void>;\nexport function del(\n url: string,\n options?: HttpOptions,\n handler: (\n m: HttpVerb,\n url: string,\n opts: HttpOptions,\n ) => Observable<HttpResponse> = request,\n): Observable<HttpResponse> {\n /* istanbul ignore else */\n if (!options) {\n options = { response_type: 'void' };\n }\n return handler('DELETE', url, { response_type: 'void', ...options });\n}\n\n/**\n * @private\n * Convert response into the format requested\n * @param response Request response contents\n * @param type Type of data to return\n */\nexport async function transform(\n resp: Response,\n type: HttpResponseType,\n headers: HashMap<HashMap<string>> = _response_headers,\n): Promise<HttpResponse> {\n /* istanbul ignore else */\n if (resp.headers) {\n const map: HashMap<string> = {};\n if (resp.headers.forEach) {\n resp.headers.forEach((v, k) => (map[k.toLowerCase()] = v));\n } else {\n Object.keys(resp.headers).forEach(\n (k) => (map[k.toLowerCase()] = (resp as any).headers[k]),\n );\n }\n headers[resp.url || ''] = map;\n }\n switch (type) {\n case 'json':\n return await resp.json().catch(() => ({}));\n case 'text':\n return await resp.text();\n case 'void':\n return;\n default:\n return await resp.json().catch(() => ({}));\n }\n}\n\n/**\n * @private\n */\nconst reloadAuth = (): Promise<void> => {\n invalidateToken();\n return refreshAuthority().then(\n () => Promise.resolve(),\n () =>\n new Promise<void>((resolve) => {\n setTimeout(() => {\n reloadAuth().then(() => resolve());\n }, 1000);\n }),\n );\n};\n\n/**\n * @private\n * Perform fetch request\n * @param method Request verb. `GET`, `POST`, `PUT`, `PATCH`, or `DELETE`\n * @param url URL of the request endpoint\n * @param options Options to add to the request\n */\nexport function request(\n method: HttpVerb,\n url: string,\n options: HttpOptions,\n is_mock: () => boolean = isMock,\n mock_handler: (\n m: HttpVerb,\n url: string,\n body?: any,\n ) => Observable<HashMap | string | void> | null = mockRequest,\n success: (\n e: Response,\n t: HttpResponseType,\n ) => Promise<HttpResponse> = transform,\n): Observable<HttpResponse> {\n if (is_mock()) {\n const request_obs = mock_handler(method, url, options?.body);\n if (request_obs) return request_obs;\n }\n options.headers = options.headers || {};\n if (!options.headers['Content-Type'] && !options.headers['content-type']) {\n options.headers['Content-Type'] = `application/json`;\n }\n return listenForToken().pipe(\n filter((_) => _),\n take(1),\n switchMap((_) => {\n if (token() === 'x-api-key') {\n options.headers!['X-API-Key'] = apiKey();\n } else {\n options.headers!.Authorization = `Bearer ${token()}`;\n }\n const fetchOptions: any = {\n ...options,\n method,\n credentials: 'same-origin',\n };\n\n // Only add body for methods that support it and when body exists\n if (\n ['POST', 'PUT', 'PATCH'].includes(method) &&\n options.body !== undefined\n ) {\n fetchOptions.body =\n typeof options.body === 'string'\n ? options.body\n : JSON.stringify(options.body);\n }\n\n return fromFetch(url, fetchOptions) as Observable<Response>;\n }),\n switchMap((resp: Response) => {\n if (resp.ok) {\n return success(resp, options.response_type as any);\n }\n return throwError(resp);\n }),\n retry({\n count: 4,\n delay: (error, retry_count) => {\n return new Observable<number>((subscriber) => {\n if (error.status === 511) {\n sendToLogin(authority()!);\n subscriber.error(error);\n return;\n }\n if (error.status !== 401) {\n subscriber.error(error || {});\n return;\n }\n log('HTTP', 'Auth error', error);\n // Wait for auth refresh before retrying with exponential backoff\n const delay_ms = Math.pow(2, retry_count - 1) * 1000; // Exponential backoff: 1s, 2s, 4s, 8s\n reloadAuth()\n .then(() => {\n subscriber.next(delay_ms);\n subscriber.complete();\n })\n .catch(() => {\n subscriber.error(error);\n });\n });\n },\n }),\n );\n}\n","import { cleanObject } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\n\nexport abstract class PlaceResource {\n /** Unique Identifier of the object */\n public readonly id: string;\n /** Human readable name of the object */\n public readonly name: string;\n /** Unix epoch in seconds of the creation time of the object */\n public readonly created_at: number;\n /** Unix epoch in seconds of the creation time of the object */\n public readonly updated_at: number;\n /** Version of the data */\n public readonly version: number;\n\n constructor(raw_data: Partial<PlaceResource> = {}) {\n this.id = raw_data.id || '';\n this.name = raw_data.name || '';\n this.created_at = raw_data.created_at || 0;\n this.updated_at = raw_data.updated_at || 0;\n\n this.version = raw_data.version || 0;\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(): HashMap {\n const obj: any = { ...this };\n obj.version = this.version;\n /** Remove unneeded public members */\n delete obj.created_at;\n return cleanObject(obj, [undefined, null, '']);\n }\n}\n","import { PlaceResource } from '../resources/resource';\nimport { TriggerConditions } from '../triggers/interfaces';\nimport { PlaceAlertDashboard } from './dashboard';\n\nexport type AlertSeverity = 'low' | 'medium' | 'high' | 'critical';\nexport type AlertType = 'threshold' | 'status' | 'custom';\n\nexport class PlaceAlert extends PlaceResource {\n // Dashboard to show this alert on\n public readonly alert_dashboard_id: string;\n // Details of the dashboard assigned\n public readonly alert_dashboard_details: PlaceAlertDashboard | undefined;\n // Domain authority that the dashboard exists under\n public readonly authority_id: string;\n // Description of the dashboard's purpose\n public readonly description: string;\n // Whether the dashboard is enabled or not\n public readonly enabled: boolean;\n // Conditions for triggering the alert\n public readonly conditions: TriggerConditions;\n // Severity of the alert\n public readonly severity: AlertSeverity;\n // Type of the alert\n public readonly alert_type: AlertType;\n // How often should this alert should be raised when triggered\n public readonly debounce_period: number;\n // Whether condition checks should match any single condition to pass or all of them\n public readonly any_match: boolean;\n\n constructor(data: Partial<PlaceAlert>) {\n super(data);\n this.authority_id = data.authority_id || '';\n this.description = data.description || '';\n this.enabled = data.enabled || false;\n this.conditions = data.conditions || {\n time_dependents: [],\n comparisons: [],\n };\n this.severity = data.severity || 'low';\n this.alert_type = data.alert_type || 'threshold';\n this.debounce_period = data.debounce_period || 0;\n this.alert_dashboard_id = data.alert_dashboard_id || '';\n this.alert_dashboard_details =\n data.alert_dashboard_details || undefined;\n this.any_match = data.any_match || false;\n }\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport class PlaceAlertDashboard extends PlaceResource {\n // Domain authority that the dashboard exists under\n public readonly authority_id: string;\n // Description of the dashboard's purpose\n public readonly description: string;\n // Whether the dashboard is enabled or not\n public readonly enabled: boolean;\n\n constructor(data: Partial<PlaceAlertDashboard>) {\n super(data);\n this.authority_id = data.authority_id || '';\n this.description = data.description || '';\n this.enabled = data.enabled || false;\n }\n}\n","import { create, query, remove, show, update } from '../api';\nimport { PlaceAlert } from './alert';\nimport { PlaceAlertDashboard } from './dashboard';\nimport {\n PlaceAlertDashboardQueryOptions,\n PlaceAlertQueryOptions,\n PlaceAlertShowOptions,\n} from './interfaces';\n\n///////////////////////////////////////////////////////////////\n///////////////////// Alert Dashboards ////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst DASHBOARD_PATH = 'alert_dashboards';\n\n/** Convert raw server data to an alert dashboard object */\nfunction processDashboard(item: Partial<PlaceAlertDashboard>) {\n return new PlaceAlertDashboard(item);\n}\n\n/**\n * Query the available alert dashboards\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAlertDashboards(\n query_params: PlaceAlertDashboardQueryOptions = {},\n) {\n return query({\n query_params,\n fn: processDashboard,\n path: DASHBOARD_PATH,\n });\n}\n\n/**\n * Get the data for an alert dashboard\n * @param id ID of the alert dashboard to retrieve\n */\nexport function showAlertDashboard(id: string) {\n return show({\n id,\n query_params: {},\n fn: processDashboard,\n path: DASHBOARD_PATH,\n });\n}\n\n/**\n * Update the alert dashboard in the database\n * @param id ID of the alert dashboard\n * @param form_data New values for the alert dashboard\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAlertDashboard(\n id: string,\n form_data: Partial<PlaceAlertDashboard>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processDashboard,\n path: DASHBOARD_PATH,\n });\n}\n\n/**\n * Add a new alert dashboard to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAlertDashboard(form_data: Partial<PlaceAlertDashboard>) {\n return create({\n form_data,\n query_params: {},\n fn: processDashboard,\n path: DASHBOARD_PATH,\n });\n}\n\n/**\n * Remove an alert dashboard from the database\n * @param id ID of the alert dashboard\n */\nexport function removeAlertDashboard(id: string) {\n return remove({ id, query_params: {}, path: DASHBOARD_PATH });\n}\n\n/**\n * Get list of alerts for dashbaord\n * @param id Alert dashboard ID\n */\nexport function listDashboardAlerts(id: string) {\n return query({\n query_params: {},\n fn: processAlert,\n path: `${DASHBOARD_PATH}/${id}/alerts`,\n });\n}\n\n///////////////////////////////////////////////////////////////\n////////////////////////// Alerts /////////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ALERT_PATH = 'alerts';\n\n/** Convert raw server data to an alert object */\nfunction processAlert(item: Partial<PlaceAlert>) {\n return new PlaceAlert(item);\n}\n\n/**\n * Query the available alerts\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAlerts(query_params: PlaceAlertQueryOptions = {}) {\n return query({\n query_params,\n fn: processAlert,\n path: ALERT_PATH,\n });\n}\n\n/**\n * Get the data for an alert\n * @param id ID of the alert to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAlert(id: string, query_params: PlaceAlertShowOptions = {}) {\n return show({\n id,\n query_params,\n fn: processAlert,\n path: ALERT_PATH,\n });\n}\n\n/**\n * Update the alert in the database\n * @param id ID of the alert\n * @param form_data New values for the alert\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAlert(\n id: string,\n form_data: Partial<PlaceAlert>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAlert,\n path: ALERT_PATH,\n });\n}\n\n/**\n * Add a new alert to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAlert(form_data: Partial<PlaceAlert>) {\n return create({\n form_data,\n query_params: {},\n fn: processAlert,\n path: ALERT_PATH,\n });\n}\n\n/**\n * Remove an alert from the database\n * @param id ID of the alert\n */\nexport function removeAlert(id: string) {\n return remove({ id, query_params: {}, path: ALERT_PATH });\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport class PlaceApplication extends PlaceResource {\n /** Unique identifier of the application */\n public readonly uid: string;\n /** Secret associated with the application */\n public readonly secret: string;\n /** ID of the domain that owns this application */\n public readonly owner_id: string;\n /** Access scopes required by users to access the application */\n public readonly scopes: string;\n /** Authentication redirect URI */\n public readonly redirect_uri: string;\n /** Skip authorization checks for the application */\n public readonly skip_authorization: boolean;\n /** Whether Client ID should be updated on changes */\n public readonly preserve_client_id: boolean;\n\n constructor(raw_data: Partial<PlaceApplication> = {}) {\n super(raw_data);\n this.uid = raw_data.uid || '';\n this.secret = raw_data.secret || '';\n this.owner_id = raw_data.owner_id || '';\n this.scopes = raw_data.scopes || '';\n this.redirect_uri = raw_data.redirect_uri || '';\n this.skip_authorization = raw_data.skip_authorization || false;\n this.preserve_client_id = raw_data.preserve_client_id || false;\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth/functions';\nimport { del, get, patch, post, put, responseHeaders } from '../http/functions';\nimport { toQueryString } from '../utilities/api';\nimport { convertPairStringToMap, parseLinkHeader } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n CreateParameters,\n QueryParameters,\n RemoveParameters,\n ShowParameters,\n TaskParameters,\n UpdateParameters,\n} from './interface';\n\n/** Total number of items returned by the last basic index query */\nexport function requestTotal(name: string): number {\n return _total[name] || 0;\n}\n\n/** Total number of items returned by the last basic index query */\nexport function lastRequestTotal(name: string): number {\n return _last_total[name] || 0;\n}\n\n/** URL for the next query page */\nexport function next(): string {\n return _next;\n}\n/**\n * @private\n * Map of promises for Service\n */\nconst _observables: HashMap<Observable<any>> = {};\n/**\n * @private\n * Total number of items returned by the last basic index query\n */\nlet _total: HashMap<number> = {};\n/**\n * @private\n * Total number of items returned by the last index query\n */\nlet _last_total: HashMap<number> = {};\n/**\n * @private\n * URL to get the next page\n */\nlet _next: string = '';\n\nconst pass_fn = (_: any) => _;\n\n/**\n * @private\n */\nexport function cleanupAPI() {\n for (const key in _observables) {\n if (_observables[key]) {\n delete _observables[key];\n }\n }\n _total = {};\n _last_total = {};\n _next = '';\n}\n\nexport type QueryResponse<T> = Observable<{\n total: number;\n next: () => QueryResponse<T> | null;\n data: T[];\n}>;\n\n/**\n * @hidden\n * Query the index of the API route associated with this service\n * @param query_params Map of query paramaters to add to the request URL\n */\nexport function query<T>(q: QueryParameters<T>): QueryResponse<T> {\n const { query_params, fn, path, endpoint } = q;\n const query_str = toQueryString(query_params);\n const url = `${endpoint || apiEndpoint()}${path ? '/' + path : ''}${\n query_str ? '?' + query_str : ''\n }`;\n return get(url).pipe(\n map((resp: HashMap) => {\n const details = handleHeaders(url, query_str, path);\n return {\n total: details.total || 0,\n next: details.next\n ? () =>\n query({\n query_params: details.next as HashMap,\n fn,\n endpoint,\n path,\n })\n : null,\n data:\n resp && resp instanceof Array\n ? resp.map((i) => (fn || pass_fn)(i))\n : resp && !(resp instanceof Array) && resp.results\n ? (resp.results as HashMap[]).map((i) => process(i))\n : [],\n } as any;\n }),\n );\n}\n\n/**\n * @hidden\n * Query the API route for a sepecific item\n * @param id ID of the item\n * @param query_params Map of query paramaters to add to the request URL\n */\nexport function show<T>(details: ShowParameters<T>): Observable<T> {\n const { query_params, id, path, fn, options } = details;\n const query_str = toQueryString(query_params);\n const url = `${apiEndpoint()}/${path}/${id}${\n query_str ? '?' + query_str : ''\n }`;\n return get(url, options).pipe(map((resp: any) => (fn || pass_fn)(resp)));\n}\n\n/**\n * @hidden\n * Make post request for a new item to the service\n * @param form_data Data to post to the server\n * @param query_params Map of query paramaters to add to the request URL\n */\nexport function create<T>(details: CreateParameters<T>): Observable<T> {\n const { query_params, form_data, path, fn } = details;\n const query_str = toQueryString(query_params);\n const url = `${apiEndpoint()}/${path}${query_str ? '?' + query_str : ''}`;\n const observable = post(url, form_data).pipe(\n map((resp: any) => (fn || pass_fn)(resp)),\n );\n return observable;\n}\n\n/**\n * @hidden\n * Perform API task for the given item ID\n * @param id ID of the item\n * @param task_name Name of the task\n * @param form_data Map of data to pass to the API\n * @param method Verb to use for request\n */\nexport function task<T = any>(details: TaskParameters<T>): Observable<T> {\n const { id, task_name, form_data, method, path, callback } = details;\n const query_str = toQueryString(form_data);\n const url = `${apiEndpoint()}/${path}/${id}/${task_name}`;\n const request =\n method === 'post' || method === 'put' || !method\n ? (method === 'put' ? put : post)(url, form_data)\n : (method === 'del' ? del : get)(\n `${url}${query_str ? '?' + query_str : ''}`,\n {\n response_type: 'json',\n },\n );\n return request.pipe(\n map((resp: HashMap) => (callback || ((_: any) => _))(resp)),\n );\n}\n\n/**\n * @hidden\n * Make put request for changes to the item with the given id\n * @param id ID of the item being updated\n * @param form_data New values for the item\n * @param query_params Map of query paramaters to add to the request URL\n */\nexport function update<T>(details: UpdateParameters<T>): Observable<T> {\n const { id, query_params, form_data, method, path, fn } = details;\n const query_str = toQueryString({\n ...query_params,\n version: form_data.version || 0,\n });\n const url = `${apiEndpoint()}/${path}/${id}${\n query_str ? '?' + query_str : ''\n }`;\n return (method === 'put' ? put : patch)(url, form_data).pipe(\n map((resp: any) => (fn || pass_fn)(resp)),\n );\n}\n\n/**\n * @hidden\n * Make delete request for the given item\n * @param id ID of item\n */\nexport function remove(details: RemoveParameters): Observable<HashMap> {\n const { id, query_params, path } = details;\n const query_str = toQueryString(query_params);\n const url = `${apiEndpoint()}/${path}/${id}${\n query_str ? '?' + query_str : ''\n }`;\n return del(url);\n}\n\n/**\n * @private\n * @param url\n * @param query_str\n * @param name\n */\nexport function handleHeaders(url: string, query_str: string, name: string) {\n const headers = responseHeaders(\n url[0] === '/' ? `${location.origin}${url}` : url,\n );\n const details: { total: number; next: HashMap<string> | null } = {\n total: 0,\n next: null,\n };\n\n if (headers && headers['x-total-count']) {\n const total_value = +(headers['x-total-count'] || 0);\n if (\n query_str.length < 2 ||\n (query_str.length < 12 && query_str.indexOf('offset=') >= 0)\n ) {\n _total[name] = total_value;\n }\n _last_total[name] = total_value;\n details.total = total_value;\n }\n if (headers && headers.link) {\n const link_map = parseLinkHeader(headers.link || '');\n _next = link_map.next;\n details.next = convertPairStringToMap(_next.split('?')[1]);\n }\n return details;\n}\n\nfunction process(data: HashMap) {\n return data as any;\n}\n","import { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceApplication } from './application';\nimport { PlaceApplicationQueryOptions } from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'oauth_apps';\n\n/** Convert raw server data to an application object */\nfunction process(item: Partial<PlaceApplication>) {\n return new PlaceApplication(item);\n}\n\n/**\n * Query the available applications\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryApplications(\n query_params: PlaceApplicationQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for an application\n * @param id ID of the application to retrieve\n */\nexport function showApplication(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the application in the database\n * @param id ID of the application\n * @param form_data New values for the application\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateApplication(\n id: string,\n form_data: Partial<PlaceApplication>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new application to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addApplication(form_data: Partial<PlaceApplication>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove an application from the database\n * @param id ID of the application\n */\nexport function removeApplication(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport enum AuthType {\n Certificate,\n NoAuth,\n UserPassword,\n}\n\nexport class PlaceMQTTBroker extends PlaceResource {\n /** Unique identifier for the Broker */\n public readonly id: string;\n /** Name of the Broker */\n public readonly name: string;\n /** Type of authentication used for connecting to the Broker */\n public readonly auth_type: AuthType;\n /** Details of the Broker */\n public readonly description: string;\n /** Host name of the Broker endpoint */\n public readonly host: string;\n /** Port number of the Broker endpoint */\n public readonly port: number;\n /** Whether connection to the Broker endpoint has TLS */\n public readonly tls: boolean;\n /** Username to use for connecting to Broker */\n public readonly username: string;\n /** Password to use for connecting to Broker */\n public readonly password: string;\n /** Certificate details */\n public readonly certificate: string;\n /** User secret */\n public readonly secret: string;\n /** */\n public readonly filters: string[];\n\n constructor(data: Partial<PlaceMQTTBroker> = {}) {\n super();\n this.id = data.id || '';\n this.name = data.name || '';\n this.auth_type = data.auth_type || AuthType.UserPassword;\n this.description = data.description || '';\n this.host = data.host || '';\n this.port = data.port || 1883;\n this.tls = data.tls || false;\n this.username = data.username || '';\n this.password = data.password || '';\n this.certificate = data.certificate || '';\n this.secret = data.secret || '';\n this.filters = data.filters || [];\n }\n}\n","import { create, query, remove, show, update } from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport { PlaceMQTTBroker } from './broker';\n\n/**\n * @private\n */\nconst PATH = 'brokers';\n\n/** Convert raw server data to a broker object */\nfunction process(item: Partial<PlaceMQTTBroker>) {\n return new PlaceMQTTBroker(item);\n}\n\n/**\n * Query the available MQTT brokers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryBrokers(query_params: HashMap = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a MQTT broker\n * @param id ID of the broker to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showBroker(id: string, query_params: HashMap = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the MQTT broker data\n * @param id ID of the broker\n * @param form_data New values for the broker\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateBroker(\n id: string,\n form_data: Partial<PlaceMQTTBroker>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new MQTT broker to the database\n * @param form_data Broker data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addBroker(form_data: Partial<PlaceMQTTBroker>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a MQTT broker from the database\n * @param id ID of the broker\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeBroker(id: string, query_params: HashMap = {}) {\n return remove({ id, query_params, path: PATH });\n}\n","import { humanReadableByteCount } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\n\ninterface PlaceClusterRunCounts {\n modules: number;\n drivers: number;\n}\nexport interface PlaceClusterNode {\n hostname: string;\n cpu_count: number;\n core_cpu: number;\n total_cpu: number;\n memory_total: number;\n memory_usage: number;\n core_memory: number;\n run_count?: PlaceClusterRunCounts;\n}\n\ninterface PlaceClusterComplete extends PlaceCluster {\n core_id?: string;\n status: HashMap;\n load: {\n local: PlaceClusterNode;\n edge: HashMap<PlaceClusterNode>;\n };\n}\nexport class PlaceCluster {\n /** Unique identifier of the application */\n public readonly id: string;\n /** List of running drivers */\n public readonly compiled_drivers: readonly string[];\n /** List of running drivers */\n public readonly available_repositories: readonly string[];\n /** Number of actively running drivers */\n public readonly running_drivers: number;\n /** Number of actively running drivers */\n public readonly module_instances: number;\n /** List of repositories that are unavailable to the cluster */\n public readonly unavailable_repositories: readonly string[];\n /** List of drivers that are unavailable to the cluster */\n public readonly unavailable_drivers: readonly string[];\n /** Name of the cluster */\n public readonly hostname: string;\n /** Number of CPUs available on the host */\n public readonly cpu_count: number;\n /** Percentage of CPU usage by the cluster's root process */\n public readonly core_cpu: number;\n /** Percentage of CPU usage by the whole cluster */\n public readonly total_cpu: number;\n /** Total amount of available memory on the host in KB */\n public readonly memory_total: number;\n /** Total amount of memory used by the whole cluster in KB */\n public readonly memory_usage: number;\n /** Total amount of memory used by the cluster root process in KB */\n public readonly core_memory: number;\n /** Percentage of memory used by the cluster */\n public readonly memory_percentage: number;\n /** Display string for the memory usage */\n public readonly used_memory: string;\n /** Display string for the memory total */\n public readonly total_memory: string;\n /** List of edge nodes within the cluster */\n public readonly edge_nodes: PlaceClusterNode[];\n\n public readonly run_counts: PlaceClusterRunCounts;\n\n constructor(raw_data: Partial<PlaceClusterComplete> = {}) {\n this.id = raw_data.id || raw_data.core_id || '';\n this.compiled_drivers = raw_data.compiled_drivers || [];\n this.available_repositories =\n raw_data.available_repositories ||\n raw_data.status?.available_repositories ||\n [];\n this.running_drivers =\n raw_data.running_drivers || raw_data.status?.running_drivers || 0;\n this.module_instances =\n raw_data.module_instances || raw_data.status?.module_instances || 0;\n this.unavailable_repositories =\n raw_data.unavailable_repositories ||\n raw_data.status?.unavailable_repositories ||\n [];\n this.unavailable_drivers =\n raw_data.unavailable_drivers ||\n raw_data.status?.unavailable_drivers ||\n [];\n this.hostname =\n raw_data.hostname || raw_data.load?.local.hostname || '';\n this.cpu_count =\n raw_data.cpu_count || raw_data.load?.local.cpu_count || 0;\n this.core_cpu = raw_data.core_cpu || raw_data.load?.local.core_cpu || 0;\n this.total_cpu =\n raw_data.total_cpu || raw_data.load?.local.total_cpu || 0;\n this.memory_total =\n raw_data.memory_total || raw_data.load?.local.memory_total || 0;\n this.memory_usage =\n raw_data.memory_usage || raw_data.load?.local.memory_usage || 0;\n this.core_memory =\n raw_data.core_memory || raw_data.load?.local.core_memory || 0;\n this.run_counts = raw_data.run_counts ||\n raw_data.status?.run_counts?.local || { modules: 0, drivers: 0 };\n this.memory_percentage = +(\n (this.memory_usage / this.memory_total) *\n 100\n ).toFixed(4);\n this.used_memory = humanReadableByteCount(this.memory_usage * 1024);\n this.total_memory = humanReadableByteCount(this.memory_total * 1024);\n const edges = raw_data.load?.edge || {};\n this.edge_nodes =\n raw_data.edge_nodes ||\n Object.keys(edges).map((_) => ({\n id: _,\n ...edges[_],\n run_count: raw_data.status?.run_count?.edge[_] || {},\n })) ||\n [];\n }\n}\n","import { humanReadableByteCount } from '../utilities/general';\n\n/**\n * @hidden\n */\nexport interface PlaceProcessComplete extends Partial<PlaceProcess> {\n driver?: string;\n percentage_cpu?: number;\n local?: { status: PlaceProcessComplete };\n edge?: { status: PlaceProcessComplete };\n}\n\nexport class PlaceProcess {\n /** ID of the cluster associated with the process */\n public readonly cluster_id: string;\n /** Unique identifier of the application */\n public readonly id: string;\n /** List of module IDs that are running in this process */\n public readonly modules: readonly string[];\n /** Whether the process is running */\n public readonly running: boolean;\n /** Number if modules instances running in this process */\n public readonly module_instances: number;\n /** Last exit code of the process */\n public readonly last_exit_code: number;\n /** Number of times this process has been launched */\n public readonly launch_count: number;\n /** Time that the latest instance of the process launched */\n public readonly launch_time: number;\n /** Current CPU usage of the process */\n public readonly cpu_usage: number;\n /** Total amount of available memory on the host in KB */\n public readonly memory_total: number;\n /** Total amount of memory used by the process in KB */\n public readonly memory_usage: number;\n /** Display string for the memory usage */\n public readonly used_memory: string;\n /** Display string for the memory total */\n public readonly total_memory: string;\n\n constructor(_cluster_id: string, raw_data: PlaceProcessComplete = {}) {\n this.cluster_id = _cluster_id;\n this.id = raw_data.id || raw_data.driver || '';\n this.modules = raw_data.modules || [];\n this.running = raw_data.running || false;\n this.module_instances =\n raw_data.module_instances ||\n raw_data.edge?.status?.module_instances ||\n raw_data.local?.status?.module_instances ||\n 0;\n this.last_exit_code =\n raw_data.last_exit_code ||\n raw_data.edge?.status?.last_exit_code ||\n raw_data.local?.status?.last_exit_code ||\n 0;\n this.launch_count =\n raw_data.launch_count ||\n raw_data.edge?.status?.launch_count ||\n raw_data.local?.status?.launch_count ||\n 0;\n this.launch_time =\n raw_data.launch_time ||\n raw_data.edge?.status?.launch_time ||\n raw_data.local?.status?.launch_time ||\n 0;\n this.cpu_usage =\n raw_data.cpu_usage ||\n raw_data.percentage_cpu ||\n raw_data.edge?.status?.percentage_cpu ||\n raw_data.local?.status?.percentage_cpu ||\n 0;\n this.memory_total =\n raw_data.memory_total ||\n raw_data.edge?.status?.memory_total ||\n raw_data.local?.status?.memory_total ||\n 0;\n this.memory_usage =\n raw_data.memory_usage ||\n raw_data.edge?.status?.memory_usage ||\n raw_data.local?.status?.memory_usage ||\n 0;\n this.used_memory = humanReadableByteCount(this.memory_usage * 1024);\n this.total_memory = humanReadableByteCount(this.memory_total * 1024);\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth/functions';\nimport { get, post } from '../http/functions';\nimport { query, remove, show } from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport { PlaceCluster } from './cluster';\nimport {\n PlaceClusterQueryOptions,\n PlaceClusterShowOptions,\n PlaceClusterTerminateOptions,\n PlaceClusterVersions,\n} from './interfaces';\nimport { PlaceProcess } from './process';\n\n/**\n * @private\n */\nconst PATH = 'cluster';\n\n/** Convert raw server data to a cluster object */\nfunction process(item: Partial<PlaceCluster>) {\n return new PlaceCluster(item);\n}\n\n/**\n * Query the available clusters\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryClusters(query_params: PlaceClusterQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the details for a specified cluster\n * @param id ID of the cluster to query\n * @param query_params Query parameters to add the to request URL\n */\nexport function showCluster(\n id: string,\n query_params: PlaceClusterShowOptions = {},\n) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Query the available processes for a cluster\n * @param id ID of the cluster to query\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryProcesses(\n id: string,\n query_params: PlaceClusterShowOptions = {},\n) {\n return show({\n id,\n query_params,\n fn: (list: any) =>\n list.map(\n (item: Partial<PlaceProcess>) => new PlaceProcess(id, item),\n ),\n path: PATH,\n });\n}\n\n/**\n * Terminate a process in a cluster\n * @param id ID of the cluster associated with the process\n * @param query_params Query parameters including driver name (required)\n */\nexport function terminateProcess(\n id: string,\n query_params: PlaceClusterTerminateOptions,\n) {\n return remove({ id, query_params, path: PATH });\n}\n\n/**\n * Force the core nodes to perform a cluster rebalance\n */\nexport function clusterRebalance(): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/rebalance`;\n return post(url, {}).pipe(map(() => undefined));\n}\n\n/**\n * Get the core node versions\n */\nexport function clusterVersions(): Observable<PlaceClusterVersions> {\n const url = `${apiEndpoint()}${PATH}/versions`;\n return get(url).pipe(map((resp: HashMap) => resp as PlaceClusterVersions));\n}\n","import { PlaceResource } from '../resources/resource';\nimport { HashMap } from '../utilities/types';\n\nexport class PlaceDomain extends PlaceResource {\n /** Domain name */\n public readonly domain: string;\n /** Login URL for the domain */\n public readonly login_url: string;\n /** Logout URL for the domain */\n public readonly logout_url: string;\n /** Description of the domain domain */\n public readonly description: string;\n /** Local configuration for the domain */\n public readonly config: HashMap;\n /** Internal settings for the domain */\n public readonly internals: HashMap;\n /** List of email domains associated with the domain */\n public readonly email_domains: string[];\n\n constructor(raw_data: Partial<PlaceDomain> = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this.domain = raw_data.domain || '';\n this.login_url = raw_data.login_url || '';\n this.logout_url = raw_data.logout_url || '';\n this.config = raw_data.config || {};\n this.internals = raw_data.internals || {};\n this.email_domains = raw_data.email_domains || [];\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth/functions';\nimport { get } from '../http/functions';\nimport { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceResourceQueryOptions } from '../resources/interface';\nimport { PlaceDomain } from './domain';\n\n/**\n * @private\n */\nconst PATH = 'domains';\n\n/** Convert raw server data to a domain object */\nfunction process(item: Partial<PlaceDomain>) {\n return new PlaceDomain(item);\n}\n\n/**\n * Query the available domains\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryDomains(query_params: PlaceResourceQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a domain\n * @param id ID of the domain to retrieve\n */\nexport function showDomain(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the domain in the database\n * @param id ID of the domain\n * @param form_data New values for the domain\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateDomain(\n id: string,\n form_data: Partial<PlaceDomain>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new domain to the database\n * @param form_data Domain data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addDomain(form_data: Partial<PlaceDomain>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a domain from the database\n * @param id ID of the domain\n */\nexport function removeDomain(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Find the domain associated with a user's email address\n * @param email Email address to lookup\n */\nexport function lookupDomainByEmail(email: string): Observable<string> {\n const url = `${apiEndpoint()}${PATH}/lookup/${encodeURIComponent(email)}`;\n return get(url).pipe(map((resp) => `${resp}`));\n}\n","import { PlaceResourceQueryOptions } from '../resources/interface';\n\n/** Access level for the settings string */\nexport enum EncryptionLevel {\n /** Full access to the settings string */\n None = 0,\n /** Only support users are allowed to view the settings contents */\n Support = 1,\n /** Only admin users are allowed to view the settings contents */\n Admin = 2,\n /** Never show the settings contents */\n NeverDisplay = 3,\n}\n\n/** Allowable query parameters for settings index endpoint */\nexport interface PlaceSettingsQueryOptions extends PlaceResourceQueryOptions {\n /** ID of the parent zone, system, module or driver to grab settings for */\n parent_id?: string;\n}\n\n/** Allowable query parameters for settings history endpoint */\nexport interface PlaceSettingsHistoryOptions {\n /** Maximum number of results to return */\n limit?: number;\n /** Starting offset of the result set for pagination */\n offset?: number;\n}\n","import { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from './interfaces';\n\nexport class PlaceSettings extends PlaceResource {\n /** ID of the parent zone/system/module/driver */\n public readonly parent_id: string;\n /** Unix timestamp in seconds of when the settings where last updated */\n public readonly updated_at: number;\n /** Access level for the settings data */\n public readonly encryption_level: EncryptionLevel;\n /** Contents of the settings */\n public readonly settings_string: string;\n /** Top level keys for the parsed settings */\n public readonly keys: string[];\n /** ID of the user that last modified the metadata */\n public readonly modified_by_id: string;\n\n /** Contents of the settings */\n public get value(): string {\n return this.settings_string;\n }\n\n constructor(raw_data: Partial<PlaceSettings> = {}) {\n super(raw_data);\n this.parent_id = raw_data.parent_id || '';\n this.updated_at =\n raw_data.updated_at || Math.floor(new Date().getTime() / 1000);\n this.settings_string = raw_data.settings_string || '';\n this.encryption_level =\n raw_data.encryption_level || EncryptionLevel.None;\n this.keys = raw_data.keys || [];\n this.modified_by_id = raw_data.modified_by_id || '';\n }\n}\n","/** Allowed roles for Place Modules */\nexport enum PlaceDriverRole {\n SSH = 0,\n Device = 1,\n Service = 2,\n Websocket = 3,\n Logic = 99,\n}\n","import { AlertSeverity } from '../alerts/alert';\nimport { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from '../settings/interfaces';\nimport { PlaceSettings } from '../settings/settings';\nimport { PlaceDriverRole } from './enums';\n\nexport class PlaceDriver extends PlaceResource {\n /** Place class name of the driver */\n public readonly class_name: string;\n /** Description of the driver functionality */\n public readonly description: string;\n /** Name to use for modules that inherit this driver */\n public readonly module_name: string;\n /** Role of the driver in engine */\n public readonly role: PlaceDriverRole;\n /** Default URI for the driver */\n public readonly default_uri: string;\n /** Default port number for the driver */\n public readonly default_port: number;\n /** ID of the repository the driver is from */\n public readonly repository_id: string;\n /** Name of the file from the repository to load the driver logic from */\n public readonly file_name: string;\n /** Version of the driver logic to use */\n public readonly commit: string;\n /** Ignore connection issues */\n public readonly ignore_connected: boolean;\n /** Whether newer version of driver is available */\n public readonly update_available: boolean;\n public readonly update_info?: {\n commit: string;\n message: string;\n author: string;\n date: string;\n };\n /** */\n public readonly alert_level: AlertSeverity;\n /** Tuple of user settings of differring encryption levels for the driver */\n public readonly settings: [\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n ];\n\n constructor(raw_data: Partial<PlaceDriver> = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this.module_name = raw_data.module_name || '';\n this.role = raw_data.role ?? PlaceDriverRole.Logic;\n this.default_uri = raw_data.default_uri || '';\n this.default_port = raw_data.default_port || 1;\n this.ignore_connected = raw_data.ignore_connected || false;\n this.class_name = raw_data.class_name || '';\n this.repository_id = raw_data.repository_id || '';\n this.file_name = raw_data.file_name || '';\n this.commit = raw_data.commit || '';\n this.update_available = raw_data.update_available || false;\n this.update_info = raw_data.update_info;\n this.alert_level = raw_data.alert_level || 'medium';\n this.settings = raw_data.settings || [null, null, null, null];\n if (typeof this.settings !== 'object') {\n (this as any).settings = [null, null, null, null];\n }\n for (const level in EncryptionLevel) {\n if (!isNaN(Number(level)) && !this.settings[level]) {\n this.settings[level] = new PlaceSettings({\n parent_id: this.id,\n encryption_level: +level,\n });\n }\n }\n }\n}\n","import {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceDriver } from './driver';\nimport { PlaceDriverQueryOptions, PlaceDriverShowOptions } from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'drivers';\n\n/** Convert raw server data to a driver object */\nfunction process(item: Partial<PlaceDriver>) {\n return new PlaceDriver(item);\n}\n\n/**\n * Query the available drivers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryDrivers(query_params: PlaceDriverQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a driver\n * @param id ID of the driver to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showDriver(id: string, query_params: PlaceDriverShowOptions = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the driver in the database\n * @param id ID of the driver\n * @param form_data New values for the driver\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateDriver(\n id: string,\n form_data: Partial<PlaceDriver>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new driver to the database\n * @param form_data Driver data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addDriver(form_data: Partial<PlaceDriver>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a driver from the database\n * @param id ID of the driver\n */\nexport function removeDriver(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Request a recompilation of the driver's code\n * @param id ID of the driver\n */\nexport function recompileDriver(id: string) {\n return task({ id, task_name: 'recompile', path: PATH });\n}\n\n/**\n * Request a reload of the driver's binary\n * @param id ID of the driver\n */\nexport function reloadDriver(id: string) {\n return task({ id, task_name: 'reload', path: PATH });\n}\n\n/**\n * Query the compiled state of the driver's code\n * @param id ID of the driver\n */\nexport function isDriverCompiled(id: string) {\n return task({ id, task_name: 'compiled', method: 'get', path: PATH });\n}\n\n/**\n * Get the drivers readme file if available\n * @param id ID of the driver\n */\nexport function driverReadme(id: string) {\n return task<string>({ id, task_name: 'readme', method: 'get', path: PATH });\n}\n","import { PlaceResource } from '../resources/resource';\nimport { HashMap } from '../utilities/types';\n\nexport class PlaceEdge extends PlaceResource {\n public readonly description: string;\n public readonly secret: string;\n public readonly x_api_key: string;\n public readonly online: boolean;\n public readonly last_seen: number;\n\n constructor(raw_data: Partial<PlaceEdge> = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this.secret = raw_data.secret || '';\n this.x_api_key = raw_data.x_api_key || '';\n this.last_seen = (raw_data.last_seen || 0) * 1000 || Date.now();\n this.online = raw_data.online || false;\n }\n\n public toJSON(): HashMap {\n const obj = super.toJSON();\n delete obj.last_seen;\n return obj;\n }\n}\n","import { apiEndpoint } from '../auth/functions';\nimport { PlaceAuthSourceQueryOptions } from '../auth-sources/interfaces';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceEdge } from './edge';\n\n/**\n * @private\n */\nconst PATH = 'edges';\n\n/** Convert raw server data to an Edge object */\nfunction process(item: Partial<PlaceEdge>) {\n return new PlaceEdge(item);\n}\n\n/**\n * Query the available Edges\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryEdges(query_params: PlaceAuthSourceQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for an Edge\n * @param id ID of the Edge to retrieve\n */\nexport function showEdge(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the Edge in the database\n * @param id ID of the Edge\n * @param form_data New values for the Edge\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateEdge(\n id: string,\n form_data: Partial<PlaceEdge>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new Edge node to the database\n * @param form_data Edge data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addEdge(form_data: Partial<PlaceEdge>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove an Edge node from the database\n * @param id ID of the Edge\n */\nexport function removeEdge(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Generate token for Edge connection\n * @param id ID of the Edge\n */\nexport function retrieveEdgeToken(id: string) {\n return task<{ token: string }>({\n id,\n task_name: 'token',\n form_data: {},\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get the edge control websocket URL.\n * This is the endpoint that edge devices use to connect to the cluster.\n */\nexport function edgeControlUrl(): string {\n const endpoint = apiEndpoint();\n const wsProtocol = endpoint.startsWith('https') ? 'wss:' : 'ws:';\n const httpProtocol = endpoint.startsWith('https') ? 'https:' : 'http:';\n return endpoint.replace(httpProtocol, wsProtocol) + `${PATH}/control`;\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport class PlaceLDAPSource extends PlaceResource {\n /** Type of auth source */\n public readonly type = 'ldap';\n /** ID of the authority associted with the auth method */\n public readonly authority_id: string;\n /** HTTP URL of the SSO provider */\n public readonly host: string;\n /** Application ID from the SSO provider providing the Ldap services */\n public readonly port: number;\n /** Application secret from the SSO provider providing the Ldap services */\n public readonly auth_method: 'plain' | 'ssl' | 'tls';\n /** Mapping of engine values to SSO provider values */\n public readonly uid: string;\n /** URL from the SSO provider for authorisation */\n public readonly base: string;\n /** Default DN to user when performing a user lookup */\n public readonly bind_dn: string;\n /** Password to access LDAP service */\n public readonly password: string;\n /**\n * LDAP Filter. Can be used instead of `uid`.\n * e.g. (&(uid=%{username})(memberOf=cn=myapp-users,ou=groups,dc=example,dc=com))\n */\n public readonly filter: string;\n\n constructor(raw_data: Partial<PlaceLDAPSource> = {}) {\n super(raw_data);\n this.authority_id = raw_data.authority_id || '';\n this.host = raw_data.host || '';\n this.port = raw_data.port || 636;\n this.auth_method = raw_data.auth_method || 'ssl';\n this.uid = raw_data.uid || '';\n this.base = raw_data.base || '';\n this.bind_dn = raw_data.bind_dn || '';\n this.password = raw_data.password || '';\n this.filter = raw_data.filter || '';\n }\n}\n","import { PlaceAuthSourceQueryOptions } from '../auth-sources/interfaces';\nimport { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceLDAPSource } from './ldap-source';\n\n/**\n * @private\n */\nconst PATH = 'ldap_auths';\n\n/** Convert raw server data to an LDAP source object */\nfunction process(item: Partial<PlaceLDAPSource>) {\n return new PlaceLDAPSource(item);\n}\n\n/**\n * Query the available LDAP sources\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryLDAPSources(\n query_params: PlaceAuthSourceQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for an LDAP source\n * @param id ID of the LDAP source to retrieve\n */\nexport function showLDAPSource(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the LDAP source in the database\n * @param id ID of the LDAP source\n * @param form_data New values for the LDAP source\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateLDAPSource(\n id: string,\n form_data: Partial<PlaceLDAPSource>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new LDAP source to the database\n * @param form_data LDAP source data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addLDAPSource(form_data: Partial<PlaceLDAPSource>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove an LDAP source from the database\n * @param id ID of the LDAP source\n */\nexport function removeLDAPSource(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n","import { HashMap } from '../utilities/types';\n\n/**\n * @hidden\n */\nexport interface PlaceMetadataComplete extends Partial<PlaceMetadata> {\n parent_id?: string;\n}\n\nexport class PlaceMetadata {\n /** ID of the parent resource associated with the metadata */\n public readonly id: string;\n /** Name/ID of the zone metadata */\n public readonly name: string;\n /** Description of what this metadata represents */\n public readonly description: string;\n /** Metadata associated with this key. */\n public readonly details: HashMap | any[];\n /** List user groups allowed to edit the metadata */\n public readonly editors: readonly string[];\n /** JSON schema associated with the metadata details */\n public readonly schema: string;\n /** Unix timestamp that the metadata was last modified at */\n public readonly updated_at: number;\n /** ID of the user that last modified the metadata */\n public readonly modified_by_id: string;\n /** Version of the data */\n public readonly version: number;\n\n constructor(data: PlaceMetadataComplete = {}) {\n this.id = data.id || data.parent_id || '';\n this.name = data.name || '';\n this.description = data.description || '';\n try {\n this.details =\n (typeof data.details === 'string'\n ? JSON.parse(data.details)\n : data.details) || {};\n } catch {\n this.details = data.details || {};\n }\n this.editors = data.editors || [];\n this.schema = data.schema || '';\n this.updated_at = (data.updated_at || 0) * 1000 || Date.now();\n this.modified_by_id = data.modified_by_id || '';\n this.version = data.version || 0;\n }\n}\n","import { HttpVerb } from '../http/interfaces';\nimport { PlaceResource } from '../resources/resource';\nimport { PlaceSystem } from '../systems/system';\nimport { TriggerActions, TriggerConditions } from './interfaces';\n\n/**\n * @hidden\n */\nexport interface PlaceTriggerComplete extends Partial<PlaceTrigger> {\n trigger_count?: number;\n control_system?: PlaceSystem;\n}\n\nexport class PlaceTrigger extends PlaceResource {\n /** Name of the system assocaited with the trigger */\n public readonly system_name: string;\n /** Number of times the trigger has been activated/triggered */\n public readonly activated_count: number;\n /** Description of the trigger */\n public readonly description: string;\n /** Duration with which to ignore sequential activations of the trigger */\n public readonly debounce_period: number;\n /** Whether the trigger should take priority */\n public readonly important: boolean;\n /** Whether trigger is enabled on the associated zone or system */\n public readonly enabled: boolean;\n /** Whether the trigger can call webhooks */\n public readonly enable_webhook: boolean;\n /** Whether the trigger instance can execute methods */\n public readonly exec_enabled: boolean;\n /** Auth key for trigger's webhook */\n public readonly webhook_secret: string;\n /** HTTP verbs supported by the webhook */\n public readonly supported_methods: readonly HttpVerb[];\n /** ID of the system associated with the trigger */\n public readonly control_system_id: string;\n /** ID of the zone associated with the trigger */\n public readonly zone_id: string;\n /** ID of the Parent trigger */\n public readonly trigger_id: string;\n /** List of playlist IDs associated with the system */\n public readonly playlists: readonly string[];\n // Whether condition checks should match any single condition to pass or all of them\n public readonly any_match: boolean;\n\n /** ID of the system associated with the trigger */\n public get system_id(): string {\n return this.control_system_id;\n }\n\n /** Actions to perform when the trigger is activated */\n public get actions(): TriggerActions {\n const actions = this._actions;\n const fn_list = (actions.functions || []).map((i) => ({\n ...i,\n args: { ...i.args },\n }));\n const mail_list = (actions.mailers || []).map((i) => ({\n ...i,\n emails: [...i.emails],\n }));\n return { functions: fn_list, mailers: mail_list };\n }\n /** Conditions for activating the trigger */\n public get conditions(): TriggerConditions {\n const conditions = this._conditions;\n const cmp_list = (conditions.comparisons || []).map((i) => ({\n ...i,\n left: typeof i.left === 'object' ? { ...i.left } : i.left,\n right: typeof i.right === 'object' ? { ...i.right } : i.right,\n }));\n const time_list = (conditions.time_dependents || []).map((i) => ({\n ...i,\n }));\n return { comparisons: cmp_list, time_dependents: time_list };\n }\n\n /** Actions to perform when the trigger is activated */\n private _actions: TriggerActions;\n /** Conditions for activating the trigger */\n private _conditions: TriggerConditions;\n\n constructor(raw_data: PlaceTriggerComplete = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this._actions = raw_data.actions || { functions: [], mailers: [] };\n this._conditions = raw_data.conditions || {\n comparisons: [],\n time_dependents: [],\n };\n this.debounce_period = raw_data.debounce_period || 0;\n this.important = raw_data.important || false;\n this.enabled = raw_data.enabled || false;\n this.webhook_secret = raw_data.webhook_secret || '';\n this.control_system_id =\n raw_data.system_id || raw_data.control_system_id || '';\n this.zone_id = raw_data.zone_id || '';\n this.system_name =\n raw_data.system_name ||\n (raw_data.control_system ? raw_data.control_system.name : '');\n this.enable_webhook = raw_data.enable_webhook || false;\n this.exec_enabled = raw_data.exec_enabled || false;\n this.supported_methods = raw_data.supported_methods || ['POST'];\n this.activated_count =\n raw_data.activated_count || raw_data.trigger_count || 0;\n this.playlists = raw_data.playlists || [];\n this.trigger_id = raw_data.trigger_id || '';\n this.any_match = raw_data.any_match || false;\n }\n}\n","import { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from '../settings/interfaces';\nimport { PlaceSettings } from '../settings/settings';\nimport { PlaceTrigger } from '../triggers/trigger';\n\n/**\n * @hidden\n */\nexport interface PlaceZoneComplete extends Partial<PlaceZone> {\n trigger_data?: PlaceTrigger[];\n}\n\nexport class PlaceZone extends PlaceResource {\n /** Tuple of user settings of differring encryption levels for the zone */\n public readonly settings: [\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n ] = [null, null, null, null];\n /** Description of the zone's purpose */\n public readonly description: string;\n /** ID of the parent zone */\n public readonly parent_id: string;\n /** List of triggers associated with the zone */\n public readonly triggers: readonly string[];\n /** List of tags associated with the zone */\n public readonly tags: string[];\n /** Geo-location details associated with the zone */\n public readonly location: string;\n /** Custom display name for the zone */\n public readonly display_name: string;\n /** Organisational code associated with the zone */\n public readonly code: string;\n /** Organisational categorisation of the zone */\n public readonly type: string;\n /** Count of resources associated with the zone */\n public readonly count: number;\n /** Amount of physical capacity associated with the zone */\n public readonly capacity: number;\n /** ID or URL of or in a map associated with the zone */\n public readonly map_id: string;\n /** List of image URLs */\n public readonly images: string[];\n /** Timezone of the associated real world location */\n public readonly timezone: string;\n /** List of playlist IDs associated with the system */\n public readonly playlists: readonly string[];\n /**\n * List of modules associated with the system.\n * Only available from the show method with the `complete` query parameter\n */\n public readonly trigger_list: readonly PlaceTrigger[] = [];\n\n constructor(raw_data: PlaceZoneComplete = {}) {\n super(raw_data);\n this.description = raw_data.description || '';\n this.tags = raw_data.tags || [];\n this.triggers = raw_data.triggers || [];\n this.settings = raw_data.settings || [null, null, null, null];\n this.parent_id = raw_data.parent_id || '';\n this.location = raw_data.location || '';\n this.display_name = raw_data.display_name || '';\n this.code = raw_data.code || '';\n this.type = raw_data.type || '';\n this.count = raw_data.count || 0;\n this.capacity = raw_data.capacity || 0;\n this.map_id = raw_data.map_id || '';\n this.timezone = raw_data.timezone || '';\n this.images = raw_data.images || [];\n this.playlists = raw_data.playlists || [];\n if (typeof this.settings !== 'object') {\n (this as any).settings = [null, null, null, null];\n }\n for (const level in EncryptionLevel) {\n if (!isNaN(Number(level)) && !this.settings[level]) {\n this.settings[level] = new PlaceSettings({\n parent_id: this.id,\n encryption_level: +level,\n });\n }\n }\n if (raw_data.trigger_data && raw_data.trigger_data instanceof Array) {\n this.trigger_list = raw_data.trigger_data.map(\n (trigger) => new PlaceTrigger(trigger),\n );\n }\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { PlaceZone } from '../zones/zone';\nimport { PlaceMetadata } from './metadata';\n\nexport class PlaceZoneMetadata {\n /** Zone associated with the metadata */\n public readonly zone: PlaceZone;\n /** Metadata for zone */\n public readonly metadata: HashMap<PlaceMetadata>;\n /** List of the root keys in the metadata */\n public readonly keys: string[];\n\n constructor(data: Partial<PlaceZoneMetadata> = {}) {\n this.zone = new PlaceZone(data.zone);\n this.keys = data.keys || [];\n this.metadata = {};\n const metadata = data.metadata || {};\n for (const key of this.keys) {\n this.metadata[key] = new PlaceMetadata(metadata[key]);\n }\n }\n}\n","import { Observable } from 'rxjs';\nimport { create, remove, show, task, update } from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceMetadataDeleteOptions,\n PlaceMetadataHistoryOptions,\n PlaceMetadataOptions,\n PlaceZoneMetadataOptions,\n} from './interfaces';\nimport { PlaceMetadata } from './metadata';\nimport { PlaceZoneMetadata } from './zone-metadata';\n\n/**\n * @private\n */\nconst PATH = 'metadata';\n\n/** Convert raw server data to a metadata object */\nfunction process(item: Partial<PlaceMetadata>) {\n return new PlaceMetadata(item);\n}\n\n/**\n * List the metadata for a database item\n * @param id ID of the item to retrieve metadata\n * @param query_params Query parameters to add the to request URL.\n */\nexport function listMetadata(\n id: string,\n query_params: PlaceMetadataOptions = {},\n): Observable<PlaceMetadata[]> {\n return show({\n id,\n query_params,\n fn: (list: HashMap) =>\n Object.keys(list).map((key: string) => process(list[key])) as any,\n path: PATH,\n });\n}\n\nfunction flatten<T = any>(an_array: T[]): T {\n const stack = [...an_array];\n const res = [];\n while (stack.length) {\n // pop value from stack\n const next = stack.pop();\n if (Array.isArray(next)) {\n // push back array items, won't modify the original input\n stack.push(...next);\n } else {\n res.push(next);\n }\n }\n // reverse to restore input order\n return res.reverse() as T;\n}\n\n/**\n * List the metadata history for a database item\n * @param id ID of the item to retrieve metadata\n * @param query_params Query parameters to add to the request URL.\n */\nexport function listMetadataHistory(\n id: string,\n query_params: PlaceMetadataHistoryOptions = {},\n): Observable<PlaceMetadata[]> {\n return task({\n id,\n task_name: `history`,\n form_data: query_params,\n method: 'get',\n callback: (list: HashMap) =>\n flatten(\n Object.keys(list).map((key: string) =>\n list[key].map((i: any) => process(i)),\n ) as Array<PlaceMetadata[]>,\n ),\n path: PATH,\n });\n}\n\n/**\n * Get a metadata field for a database item\n * @param id ID of the item to retrieve metadata\n * @param name Name of the metadata field to retrieve\n */\nexport function showMetadata(\n id: string,\n name: string,\n): Observable<PlaceMetadata> {\n return show({\n id,\n query_params: { name },\n fn: (data: HashMap) => process(data[name]),\n path: PATH,\n });\n}\n\n/**\n * Update the metadata in the database\n * @param id ID of the item associated with the metadata\n * @param form_data New values for the metadata\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateMetadata(\n id: string,\n form_data: Partial<PlaceMetadata>,\n method: 'put' | 'patch' = 'put',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\nexport function addMetadata(form_data: Partial<PlaceMetadata>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove metadata from the database\n * @param id ID of the item associated with the metadata\n * @param query_params Query parameters including the metadata key name (required)\n */\nexport function removeMetadata(\n id: string,\n query_params: PlaceMetadataDeleteOptions,\n) {\n return remove({ id, query_params, path: PATH });\n}\n\n/**\n * Query metadata of associated child items\n * @param id ID of the item to get associated child metadata\n * @param query_params Query parameters to add the to request URL\n */\nexport function listChildMetadata(\n id: string,\n query_params: PlaceZoneMetadataOptions,\n) {\n return task({\n id,\n task_name: 'children',\n form_data: query_params,\n method: 'get',\n callback: (list: HashMap[]) =>\n list.map(\n (item) =>\n new PlaceZoneMetadata({\n ...item,\n keys: Object.keys(item.metadata),\n }),\n ),\n path: PATH,\n });\n}\n","import { PlaceModule } from '../modules/module';\nimport { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from '../settings/interfaces';\nimport { PlaceSettings } from '../settings/settings';\n\n/**\n * @hidden\n */\nexport interface PlaceSystemComplete extends Partial<PlaceSystem> {\n module_data?: PlaceModule[];\n}\n\nexport class PlaceSystem extends PlaceResource {\n /** Tuple of user settings of differring encryption levels for the system */\n public readonly settings: [\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n ] = [null, null, null, null];\n /** Display name of the system */\n public readonly display_name: string;\n /** Description of the system */\n public readonly description: string;\n /** Email address associated with the system */\n public readonly email: string;\n /** Email address associated with the system */\n public readonly code: string;\n /** Capacity of the space associated with the system */\n public readonly capacity: number;\n /** Features associated with the system */\n public readonly features: string[];\n /** Whether system is bookable by end users */\n public readonly bookable: boolean;\n /** Whether system is public accessible */\n public readonly public: boolean;\n /** Count of UI devices attached to the system */\n public readonly installed_ui_devices: number;\n /** Support URL for the system */\n public readonly support_url: string;\n /** URL for the timetable UI linked to the system */\n public readonly timetable_url: string;\n /** URLs for requesting snapshots of the assosiated camera */\n public readonly camera_snapshot_url: string;\n /** URLs for requesting snapshots of the assosiated camera */\n public readonly camera_snapshot_urls: string[];\n /** URL for managing the attached camera */\n public readonly camera_url: string;\n /** External booking URL for the system */\n public readonly room_booking_url: string;\n /** ID on the SVG Map associated with this system */\n public readonly map_id: string;\n /** List of module IDs that belong to the system */\n public readonly modules: readonly string[];\n /** List of images associated with the system */\n public readonly images: readonly string[];\n /** List of the zone IDs that the system belongs */\n public readonly zones: readonly string[];\n /** Timezone of the associated real world space */\n public readonly timezone: string;\n /**\n * List of modules associated with the system.\n * Only available from the show method with the `complete` query parameter\n */\n public module_list: readonly PlaceModule[] = [];\n /** Whether the system has signage capabilities */\n public readonly signage: boolean;\n /** List of playlist IDs associated with the system */\n public readonly playlists: readonly string[];\n public readonly approval: boolean;\n /** Orientation of the signage system */\n public readonly orientation:\n | 'unspecified'\n | 'portrait'\n | 'landscape'\n | 'square';\n\n constructor(raw_data: PlaceSystemComplete = {}) {\n super(raw_data);\n this.display_name = raw_data.display_name || '';\n this.description = raw_data.description || '';\n this.email = raw_data.email || '';\n this.code = raw_data.code || '';\n this.capacity = raw_data.capacity || 0;\n this.features = raw_data.features || [];\n this.bookable = raw_data.bookable || false;\n this.public = raw_data.public ?? false;\n this.installed_ui_devices = raw_data.installed_ui_devices || 0;\n this.support_url = raw_data.support_url || '';\n this.camera_snapshot_url = raw_data.camera_snapshot_url || '';\n this.camera_snapshot_urls = raw_data.camera_snapshot_urls || [];\n this.camera_url = raw_data.camera_url || '';\n this.timetable_url = raw_data.timetable_url || '';\n this.room_booking_url = raw_data.room_booking_url || '';\n this.map_id = raw_data.map_id || '';\n this.modules = raw_data.modules || [];\n this.images = raw_data.images || [];\n this.zones = raw_data.zones || [];\n this.settings = raw_data.settings || [null, null, null, null];\n this.timezone = raw_data.timezone || '';\n this.signage = raw_data.signage || false;\n this.playlists = raw_data.playlists || [];\n this.orientation = raw_data.orientation || 'unspecified';\n this.approval = raw_data.approval || false;\n if (typeof this.settings !== 'object') {\n (this as any).settings = [null, null, null, null];\n }\n for (const level in EncryptionLevel) {\n if (!isNaN(Number(level)) && !this.settings[level]) {\n this.settings[level] = new PlaceSettings({\n parent_id: this.id,\n encryption_level: +level,\n });\n }\n }\n if (raw_data.module_data && raw_data.module_data instanceof Array) {\n this.module_list = raw_data.module_data.map(\n (mod) => new PlaceModule(mod),\n );\n }\n }\n}\n","import { AlertSeverity } from '../alerts/alert';\nimport { PlaceDriver } from '../drivers/driver';\nimport { PlaceDriverRole } from '../drivers/enums';\nimport { PlaceResource } from '../resources/resource';\nimport { EncryptionLevel } from '../settings/interfaces';\nimport { PlaceSettings } from '../settings/settings';\nimport { PlaceSystem } from '../systems/system';\nimport { HashMap } from '../utilities/types';\n\n/**\n * @hidden\n */\nexport interface PlaceModuleComplete extends Partial<PlaceModule> {\n dependency_id?: string;\n dependency?: PlaceDriver;\n control_system?: PlaceSystem;\n}\n\n/** Function to request the server to stop emitting debug events */\nexport type EndDebugFn = () => void;\n\nexport class PlaceModule extends PlaceResource {\n /** Whether the associated hardware is connected */\n public readonly connected: boolean | undefined;\n /** Whether the module driver is running */\n public readonly running: boolean;\n /** Timestamp of last update in ms since UTC epoch */\n public readonly updated_at: number;\n /** ID of the edge associated with the module */\n public readonly edge_id: string;\n /** ID of the driver associated with the module */\n public readonly driver_id: string;\n /** Driver/dependancy associated with the module */\n public readonly driver?: PlaceDriver;\n /** ID of the system associated with the module */\n public readonly control_system_id: string;\n /** System associated with the module */\n public readonly system?: PlaceSystem;\n /** IP address of the hardware associated with the module */\n public readonly ip: string;\n /** Whether the hardware connection requires TLS */\n public readonly tls: boolean;\n /** Whether the hardware connection is over UDP */\n public readonly udp: boolean;\n /** Port number connections to the hardware are made on */\n public readonly port: number;\n /** */\n public readonly makebreak: boolean;\n /** URI associated with the module */\n public readonly uri: string;\n /** Custom name of the module */\n public readonly custom_name: string;\n /** Type of module */\n public readonly role: PlaceDriverRole;\n /** Notes associated with the module */\n public readonly notes: string;\n /** Ignore connection issues */\n public readonly ignore_connected: boolean;\n /** Tuple of user settings of differring encryption levels for the module */\n public readonly settings: [\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n PlaceSettings | null,\n ] = [null, null, null, null];\n /** Whether the module has a runtime error */\n public readonly has_runtime_error: boolean;\n /** Timestamp of the last runtime error in ms since UTC epoch */\n public readonly error_timestamp: number;\n /** */\n public readonly alert_level: AlertSeverity;\n /** ID of the system associated with the module */\n public get system_id(): string {\n return this.control_system_id;\n }\n\n constructor(raw_data: PlaceModuleComplete = {}) {\n super(raw_data);\n this.driver_id = raw_data.driver_id || raw_data.dependency_id || '';\n this.control_system_id = raw_data.control_system_id || '';\n this.edge_id = raw_data.edge_id || '';\n this.ip = raw_data.ip || '';\n this.tls = raw_data.tls || false;\n this.udp = raw_data.udp || false;\n this.port = raw_data.port || 1;\n this.makebreak = raw_data.makebreak || false;\n this.uri = raw_data.uri || '';\n this.custom_name = raw_data.custom_name || '';\n this.role = raw_data.role ?? PlaceDriverRole.Logic;\n this.notes = raw_data.notes || '';\n this.ignore_connected = raw_data.ignore_connected || false;\n this.connected = raw_data.connected;\n this.running = raw_data.running || false;\n this.updated_at = raw_data.updated_at || 0;\n this.system = new PlaceSystem(\n raw_data.control_system || raw_data.system,\n );\n this.has_runtime_error = raw_data.has_runtime_error || false;\n this.error_timestamp = raw_data.error_timestamp || 0;\n this.driver = new PlaceDriver(raw_data.dependency || raw_data.driver);\n this.settings = raw_data.settings || [null, null, null, null];\n this.alert_level = raw_data.alert_level || 'medium';\n if (typeof this.settings !== 'object') {\n (this as any).settings = [null, null, null, null];\n }\n for (const level in EncryptionLevel) {\n if (!isNaN(Number(level)) && !this.settings[level]) {\n this.settings[level] = new PlaceSettings({\n parent_id: this.id,\n encryption_level: +level,\n });\n }\n }\n }\n\n /**\n * Convert object into plain object\n */\n public toJSON(keep_system: boolean = false): HashMap {\n const obj = super.toJSON();\n if (\n (obj.role !== PlaceDriverRole.Logic && !keep_system) ||\n !obj.control_system_id\n ) {\n delete obj.control_system_id;\n }\n delete obj.driver;\n delete obj.system;\n delete obj.error_timestamp;\n delete obj.has_runtime_error;\n return obj;\n }\n}\n","import { Observable } from 'rxjs';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceSettings } from '../settings/settings';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceModulePingOptions,\n PlaceModuleQueryOptions,\n PlaceModuleShowOptions,\n} from './interfaces';\nimport { PlaceModule } from './module';\n\n/**\n * @private\n */\nconst PATH = 'modules';\n\n/** Convert raw server data to a module object */\nfunction process(item: Partial<PlaceModule>) {\n return new PlaceModule(item);\n}\n\n/**\n * Query the available moduels\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryModules(query_params: PlaceModuleQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a module\n * @param id ID of the module to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showModule(id: string, query_params: PlaceModuleShowOptions = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the module in the database\n * @param id ID of the module\n * @param form_data New values for the module\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateModule(\n id: string,\n form_data: Partial<PlaceModule>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new module to the database\n * @param form_data Module data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addModule(form_data: Partial<PlaceModule>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a module from the database\n * @param id ID of the module\n */\nexport function removeModule(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Starts the module with the given ID and clears any existing caches\n * @param id Module ID\n */\nexport function startModule(id: string) {\n return task({ id, task_name: 'start', path: PATH });\n}\n\n/**\n * Stops the module with the given ID\n * @param id Module ID\n */\nexport function stopModule(id: string) {\n return task({ id, task_name: 'stop', path: PATH });\n}\n\n/**\n * Pings the IP address of the module with the given ID\n * @param id Module ID\n */\nexport function pingModule(id: string): Observable<PlaceModulePingOptions> {\n return task({ id, task_name: 'ping', method: 'post', path: PATH });\n}\n\n/**\n * Get the internal state of the given module\n * @param id Module ID\n * @param lookup Status variable of interest. If set it will return only the state of this variable\n */\nexport function moduleState(id: string): Observable<HashMap> {\n return task({ id, task_name: 'state', method: 'get', path: PATH });\n}\n\n/**\n * Get the state of the given module\n * @param id Module ID\n * @param key Status variable of interest. If set it will return only the state of this variable\n */\nexport function lookupModuleState(\n id: string,\n key: string,\n): Observable<HashMap> {\n return task({ id, task_name: `state/${key}`, method: 'get', path: PATH });\n}\n\n/**\n * Manually load module into PlaceOS core. Only use if module should be loaded but isn't present.\n * @param id Module ID\n */\nexport function loadModule(id: string): Observable<HashMap> {\n return task({ id, task_name: 'load', method: 'post', path: PATH });\n}\n\n/**\n * Fetch settings of driver associated with the module\n * @param id Module ID\n */\nexport function moduleSettings(id: string) {\n return task({\n id,\n task_name: 'settings',\n method: 'get',\n callback: (list) =>\n list.map((item: Partial<PlaceSettings>) => new PlaceSettings(item)),\n path: PATH,\n });\n}\n\n/**\n * Get the runtime errors of the given module\n * @param id Module ID\n */\nexport function moduleRuntimeError(id: string) {\n return task<string[]>({\n id,\n task_name: 'error',\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Execute a command on a module\n * @param id Module ID\n * @param method Name of the method to execute\n * @param args Array of arguments to pass to the executed method\n */\nexport function executeOnModule(\n id: string,\n method: string,\n args: any[] = [],\n): Observable<HashMap> {\n return task({\n id,\n task_name: `exec/${encodeURIComponent(method)}`,\n form_data: args,\n path: PATH,\n });\n}\n","import { PlaceResource } from '../resources/resource';\nimport { HashMap } from '../utilities/types';\n\nexport class PlaceOAuthSource extends PlaceResource {\n /** Type of auth source */\n public readonly type = 'oauth';\n /** ID of the authority associted with the auth method */\n public readonly authority_id: string;\n /** Application ID from the SSO provider providing the OAuth services */\n public readonly client_id: string;\n /** Application secret from the SSO provider providing the OAuth services */\n public readonly client_secret: string;\n /** Mapping of engine values to SSO provider values */\n public readonly info_mappings: HashMap<string>;\n /** HTTP URL of the SSO provider */\n public readonly site: string;\n /** URL from the SSO provider for authorisation */\n public readonly authorize_url: string;\n /** HTTP Method used to generating tokens */\n public readonly token_method: 'get' | 'post' | 'put';\n /** URL for generating user tokens */\n public readonly token_url: string;\n /** Scheme used to authenticate the user */\n public readonly auth_scheme: 'request_body' | 'basic_auth';\n /** Space seperated access scopes for the user */\n public readonly scope: string;\n /** URL to grab user's profile details with a valid token */\n public readonly raw_info_url: string;\n /** Additional params to be sent as part of the authorization reqest */\n public readonly authorize_params: HashMap<string>;\n /** Security checks to be made on the returned data */\n public readonly ensure_matching: HashMap<string[]>;\n\n constructor(raw_data: Partial<PlaceOAuthSource> = {}) {\n super(raw_data);\n this.authority_id = raw_data.authority_id || '';\n this.client_id = raw_data.client_id || '';\n this.client_secret = raw_data.client_secret || '';\n this.info_mappings = raw_data.info_mappings || {};\n this.authorize_params = raw_data.authorize_params || {};\n this.ensure_matching = raw_data.ensure_matching || {};\n this.site = raw_data.site || '';\n this.authorize_url = raw_data.authorize_url || 'oauth/authorize';\n this.token_method = raw_data.token_method || 'post';\n this.token_url = raw_data.token_url || 'oauth/token';\n this.auth_scheme = raw_data.auth_scheme || 'request_body';\n this.scope = raw_data.scope || '';\n this.raw_info_url = raw_data.raw_info_url || '';\n this.authorize_params = raw_data.authorize_params || {};\n this.ensure_matching = raw_data.ensure_matching || {};\n }\n}\n","import { PlaceAuthSourceQueryOptions } from '../auth-sources/interfaces';\nimport { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceOAuthSource } from './oauth-source';\n\n/**\n * @private\n */\nconst PATH = 'oauth_auths';\n\n/** Convert raw server data to an OAuth source object */\nfunction process(item: Partial<PlaceOAuthSource>) {\n return new PlaceOAuthSource(item);\n}\n\n/**\n * Query the available OAuth sources\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryOAuthSources(\n query_params: PlaceAuthSourceQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for an OAuth source\n * @param id ID of the OAuth source to retrieve\n */\nexport function showOAuthSource(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the OAuth source in the database\n * @param id ID of the OAuth source\n * @param form_data New values for the OAuth source\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateOAuthSource(\n id: string,\n form_data: Partial<PlaceOAuthSource>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new OAuth source to the database\n * @param form_data OAuth source data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addOAuthSource(form_data: Partial<PlaceOAuthSource>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove an OAuth source from the database\n * @param id ID of the OAuth source\n */\nexport function removeOAuthSource(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n","import { PlaceResourceQueryOptions } from '../resources/interface';\n\n/** Type of repository */\nexport enum PlaceRepositoryType {\n /** Repository is a collection of Driver logic */\n Driver = 'driver',\n /** Repository is a collection of interfaces */\n Interface = 'interface',\n}\n\n/** Mapping of available query parameters for the repositories index endpoint */\nexport interface PlaceRepositoryQueryOptions extends PlaceResourceQueryOptions {}\n\n/** Query parameters for repository commit listing */\nexport interface PlaceRepositoryCommitQuery {\n /** URL encoded name of the branch being requested */\n branch?: string;\n /** URL encoded name of the driver being requested */\n driver?: string;\n /** Number of commits to return */\n limit?: number;\n}\n\nexport interface GitCommitDetails {\n /** Name of the commit author */\n author: string;\n /** Short hash of the commit */\n commit: string;\n /** ISO datetime string for commit */\n date: string;\n /** Commit summary */\n subject: string;\n}\n\n/** Query parameters for repository driver details */\nexport interface PlaceRepositoryDetailsQuery {\n /** URL encoded name of the driver being requested (required) */\n driver: string;\n /** Hash of the commit being requested for the driver (required) */\n commit: string;\n}\n\n/** Query parameters for repository pull */\nexport interface PlaceRepositoryPullQuery {\n /** Hash of the commit being requested */\n commit: string;\n}\n\n/** Query parameters for remote repository operations */\nexport interface PlaceRemoteRepositoryQuery {\n /** The git URL that represents the repository (required) */\n repository_url: string;\n /** A username for access if required */\n username?: string;\n /** The password or access token as required */\n password?: string;\n}\n\n/** Query parameters for remote repository commits */\nexport interface PlaceRemoteRepositoryCommitsQuery extends PlaceRemoteRepositoryQuery {\n /** The branch to grab commits from */\n branch?: string;\n /** The number of commits to return */\n depth?: number;\n}\n\n/** Query parameters for repository folders listing */\nexport interface PlaceRepositoryFoldersQuery {\n /** Include dot files and folders */\n include_dots?: boolean;\n}\n\n/** Metadata for a repository commit */\nexport interface PlaceRepositoryCommit {\n /** Hash associated with the commit */\n commit: string;\n /** UTC epoch in seconds of the time the commit was made */\n date: number;\n /** Author of the commit */\n author: string;\n /** Commit subject line */\n subject: string;\n}\n","import { PlaceResource } from '../resources/resource';\nimport { PlaceRepositoryType } from './interfaces';\n\nexport class PlaceRepository extends PlaceResource {\n /** Name of the folder on the server to pull the repository */\n public readonly folder_name: string;\n /** Description of the contents of the repository */\n public readonly description: string;\n /** URI that the repository can be pulled from */\n public readonly uri: string;\n /** Working branch for the repository */\n public readonly branch: string;\n /** Hash of the commit at the head of the repository */\n public readonly commit_hash: string;\n /** Repository type */\n public readonly repo_type: PlaceRepositoryType;\n /** Username to connect to repository with */\n public readonly username: string;\n /** Password to connect to repository with */\n public readonly password: string;\n /** Root path of the repository to serve at the `folder_name` path */\n public readonly root_path: string;\n /** Repository type */\n public get type() {\n return this.repo_type;\n }\n\n constructor(raw_data: Partial<PlaceRepository> = {}) {\n super(raw_data);\n this.folder_name = raw_data.folder_name || '';\n this.description = raw_data.description || '';\n this.uri = raw_data.uri || '';\n this.branch = raw_data.branch || '';\n this.commit_hash = raw_data.commit_hash || '';\n this.repo_type = raw_data.repo_type || PlaceRepositoryType.Driver;\n this.username = raw_data.username || '';\n this.password = raw_data.password || '';\n this.root_path = raw_data.root_path || '';\n }\n}\n","import { Observable } from 'rxjs';\nimport { PlaceDriverDetails } from '../drivers/interfaces';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport {\n GitCommitDetails,\n PlaceRemoteRepositoryCommitsQuery,\n PlaceRemoteRepositoryQuery,\n PlaceRepositoryCommitQuery,\n PlaceRepositoryDetailsQuery,\n PlaceRepositoryFoldersQuery,\n PlaceRepositoryPullQuery,\n PlaceRepositoryQueryOptions,\n} from './interfaces';\nimport { PlaceRepository } from './repository';\n\n/**\n * @private\n */\nconst PATH = 'repositories';\n\n/** Convert raw server data to a repository object */\nfunction process(item: Partial<PlaceRepository>) {\n return new PlaceRepository(item);\n}\n\n/**\n * Query the available repositories\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryRepositories(\n query_params: PlaceRepositoryQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a repository\n * @param id ID of the repository to retrieve\n */\nexport function showRepository(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the repository in the database\n * @param id ID of the repository\n * @param form_data New values for the repository\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateRepository(\n id: string,\n form_data: Partial<PlaceRepository>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new repository to the database\n * @param form_data Repository data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addRepository(form_data: Partial<PlaceRepository>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a repository from the database\n * @param id ID of the repository\n */\nexport function removeRepository(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Get a list of all the interfaces\n */\nexport function listInterfaceRepositories(): Observable<string[]> {\n return show({\n id: 'interfaces',\n query_params: {},\n path: PATH,\n });\n}\n\n/**\n * Get name of the default branch for a new repository\n * @param query_params Details about the repository\n */\nexport function listRemoteRepositoryDefaultBranch(\n query_params: PlaceRemoteRepositoryQuery,\n): Observable<string> {\n return show({\n id: 'remote_default_branch',\n query_params,\n path: PATH,\n });\n}\n\n/**\n * Get a list of branches for a new repository\n * @param query_params Details about the repository\n */\nexport function listRemoteRepositoryBranches(\n query_params: PlaceRemoteRepositoryQuery,\n): Observable<string[]> {\n return show({\n id: 'remote_branches',\n query_params,\n path: PATH,\n });\n}\n\n/**\n * Get a list of branch commits for a new repository\n * @param query_params Details about the repository\n */\nexport function listRemoteRepositoryCommits(\n query_params: PlaceRemoteRepositoryCommitsQuery,\n): Observable<GitCommitDetails[]> {\n return show({\n id: 'remote_commits',\n query_params,\n path: PATH,\n });\n}\n\n/**\n * Get a list of tags for a new repository\n * @param query_params Details about the repository\n */\nexport function listRemoteRepositoryTags(\n query_params: PlaceRemoteRepositoryQuery,\n): Observable<string[]> {\n return show({\n id: 'remote_tags',\n query_params,\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the drivers for a repository\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function listRepositoryDrivers(\n id: string,\n query_params?: HashMap,\n): Observable<string[]> {\n return task({\n id,\n task_name: 'drivers',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the releases for a repository\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function listRepositoryReleases(\n id: string,\n query_params?: HashMap,\n): Observable<string[]> {\n return task({\n id,\n task_name: 'releases',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the commits for a repository\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function listRepositoryCommits(\n id: string,\n query_params?: PlaceRepositoryCommitQuery,\n): Observable<GitCommitDetails[]> {\n return task({\n id,\n task_name: 'commits',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the branches for a repository\n * @param id ID of the repository\n */\nexport function listRepositoryBranches(id: string): Observable<string[]> {\n return task({\n id,\n task_name: 'branches',\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the branches for a repository\n * @param id ID of the repository\n */\nexport function listRepositoryDefaultBranch(id: string): Observable<string> {\n return task({\n id,\n task_name: 'default_branch',\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a list of all the tags for a repository\n * @param id ID of the repository\n */\nexport function listRepositoryTags(id: string): Observable<string[]> {\n return task({\n id,\n task_name: 'tags',\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get the details for a given driver\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function listRepositoryDriverDetails(\n id: string,\n query_params: PlaceRepositoryDetailsQuery,\n): Observable<PlaceDriverDetails> {\n return task({\n id,\n task_name: 'details',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Pull remote changes to tshe repository\n * @param id ID of the repository\n * @param query Addition query parameters to pass to the request\n */\nexport function pullRepositoryChanges(\n id: string,\n query_params?: PlaceRepositoryPullQuery,\n): Observable<GitCommitDetails> {\n return task({\n id,\n task_name: 'pull',\n form_data: query_params,\n method: 'post',\n path: PATH,\n });\n}\n\n/**\n * Get the folder tree structure of a repository\n * @param id ID of the repository\n * @param query_params Query parameters to add to the request\n */\nexport function listRepositoryFolders(\n id: string,\n query_params?: PlaceRepositoryFoldersQuery,\n): Observable<string[]> {\n return task({\n id,\n task_name: 'folders',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n","import { PlaceResource } from '../resources/resource';\nimport { HashMap } from '../utilities/types';\n\nexport interface PlaceSamlRequestAttribute {\n name: string;\n name_format: string;\n friendly_name: string;\n}\n\nexport class PlaceSAMLSource extends PlaceResource {\n /** Type of auth source */\n public readonly type = 'saml';\n /** ID of the authority associted with the auth method */\n public readonly authority_id: string;\n /** Name of the application requesting auth */\n public readonly issuer: string;\n /**\n * Mapping of request params that exist during the request\n * phase of OmniAuth that should to be sent to the IdP\n */\n public readonly idp_sso_target_url_runtime_params: HashMap<string>;\n /** Describes the format of the username required by this application */\n public readonly name_identifier_format: string;\n /** Attribute that uniquely identifies the user */\n public readonly uid_attribute: string;\n /** URL at which the SAML assertion should be received (SSO Service => Place URL) */\n public readonly assertion_consumer_service_url: string;\n /** URL to which the authentication request should be sent (Place => SSO Service) */\n public readonly idp_sso_target_url: string;\n /** Identity provider's certificate in PEM format (this or fingerprint is required) */\n public readonly idp_cert: string;\n /** SHA1 fingerprint of the certificate */\n public readonly idp_cert_fingerprint: string;\n /** Name for the attribute service */\n public readonly attribute_service_name: string;\n /** Mapping of Attribute Names in a SAMLResponse to entries in the OmniAuth info hash */\n public readonly attribute_statements: HashMap<string[]>;\n /** Mapping of Attribute Names in a SAMLResponse to entries in the OmniAuth info hash */\n public readonly request_attributes: PlaceSamlRequestAttribute[];\n /** URL to which the single logout request and response should be sent */\n public readonly idp_slo_target_url: string;\n /** Value to use as default RelayState for single log outs */\n public readonly slo_default_relay_state: string;\n\n constructor(raw_data: Partial<PlaceSAMLSource> = {}) {\n super(raw_data);\n this.authority_id = raw_data.authority_id || '';\n this.issuer = raw_data.issuer || '';\n this.idp_sso_target_url_runtime_params =\n raw_data.idp_sso_target_url_runtime_params || {};\n this.name_identifier_format = raw_data.name_identifier_format || '';\n this.uid_attribute = raw_data.uid_attribute || '';\n this.assertion_consumer_service_url =\n raw_data.assertion_consumer_service_url || '';\n this.idp_sso_target_url = raw_data.idp_sso_target_url || '';\n this.idp_cert = raw_data.idp_cert || '';\n this.idp_cert_fingerprint = raw_data.idp_cert_fingerprint || '';\n this.attribute_service_name = raw_data.attribute_service_name || '';\n this.attribute_statements = raw_data.attribute_statements || {};\n this.request_attributes = raw_data.request_attributes || [];\n this.idp_slo_target_url = raw_data.idp_slo_target_url || '';\n this.slo_default_relay_state = raw_data.slo_default_relay_state || '';\n }\n}\n","import { PlaceAuthSourceQueryOptions } from '../auth-sources/interfaces';\nimport { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceSAMLSource } from './saml-source';\n\n/**\n * @private\n */\nconst PATH = 'saml_auths';\n\n/** Convert raw server data to an SAML source object */\nfunction process(item: Partial<PlaceSAMLSource>) {\n return new PlaceSAMLSource(item);\n}\n\n/**\n * Query the available SAML sources\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySAMLSources(\n query_params: PlaceAuthSourceQueryOptions = {},\n) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a SAML source\n * @param id ID of the SAML source to retrieve\n */\nexport function showSAMLSource(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the SAML source in the database\n * @param id ID of the SAML source\n * @param form_data New values for the SAML source\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSAMLSource(\n id: string,\n form_data: Partial<PlaceSAMLSource>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new SAML source to the database\n * @param form_data SAML source data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSAMLSource(form_data: Partial<PlaceSAMLSource>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a SAML source from the database\n * @param id ID of the SAML source\n */\nexport function removeSAMLSource(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n","import {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceSettingsHistoryOptions,\n PlaceSettingsQueryOptions,\n} from './interfaces';\nimport { PlaceSettings } from './settings';\n\n/**\n * @private\n */\nconst PATH = 'settings';\n\n/** Convert raw server data to an settings object */\nfunction process(item: Partial<PlaceSettings>) {\n return new PlaceSettings(item);\n}\n\n/**\n * Query the available settings\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySettings(query_params: PlaceSettingsQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for settings\n * @param id ID of the settings to retrieve\n */\nexport function showSettings(id: string) {\n return show({ id, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Update the settings in the database\n * @param id ID of the settings\n * @param form_data New values for the settings\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSettings(\n id: string,\n form_data: Partial<PlaceSettings>,\n query_params: HashMap = {},\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params,\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new settings to the database\n * @param form_data Settings data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSettings(\n form_data: Partial<PlaceSettings>,\n query_params: HashMap = {},\n) {\n return create({ form_data, query_params, fn: process, path: PATH });\n}\n\n/**\n * Remove settings from the database\n * @param id ID of the settings\n */\nexport function removeSettings(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Get historical versions of settings\n * @param id ID of the settings to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function settingsHistory(\n id: string,\n query_params: PlaceSettingsHistoryOptions = {},\n) {\n return task({\n id,\n task_name: 'history',\n form_data: query_params,\n method: 'get',\n callback: (resp: HashMap[]) => resp.map((i) => process(i)),\n path: PATH,\n });\n}\n","import { Observable } from 'rxjs';\nimport { apiEndpoint } from '../auth/functions';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceSettings } from '../settings/settings';\nimport { PlaceTrigger } from '../triggers/trigger';\nimport { HashMap } from '../utilities/types';\nimport { PlaceZone } from '../zones/zone';\nimport {\n PlaceModuleFunctionMap,\n PlaceSystemControlOptions,\n PlaceSystemMetadataOptions,\n PlaceSystemShowOptions,\n PlaceSystemsQueryOptions,\n PlaceSystemsWithEmailsOptions,\n PlaceSystemStartStopOptions,\n PlaceSystemTriggerShowOptions,\n PlaceSystemTriggersQueryOptions,\n} from './interfaces';\nimport { PlaceSystem } from './system';\n\n/**\n * @private\n */\nconst PATH = 'systems';\n\n/** Convert raw server data to an system object */\nfunction process(item: Partial<PlaceSystem>) {\n return new PlaceSystem(item);\n}\n\n/**\n * Query the available systems\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySystems(query_params: PlaceSystemsQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Query the available systems by email addresses\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySystemsWithEmails(\n query_params: PlaceSystemsWithEmailsOptions,\n) {\n return query({ query_params, fn: process, path: `${PATH}/with_emails` });\n}\n\n/**\n * Get the data for a system\n * @param id ID of the system to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSystem(\n id: string,\n query_params: PlaceSystemShowOptions = {},\n) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the system in the database\n * @param id ID of the system\n * @param form_data New values for the system\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSystem(\n id: string,\n form_data: Partial<PlaceSystem>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new system to the database\n * @param form_data System data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSystem(form_data: Partial<PlaceSystem>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a system from the database\n * @param id ID of the system\n */\nexport function removeSystem(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Add module to the given system\n * @param id System ID\n * @param module_id ID of the module to add\n */\nexport function addSystemModule(\n id: string,\n module_id: string,\n data: HashMap = {},\n): Observable<PlaceSystem> {\n return task({\n id,\n task_name: `module/${module_id}`,\n form_data: data,\n method: 'put',\n callback: (d) => process(d),\n path: PATH,\n });\n}\n\n/**\n * Remove module from the given system\n * @param id System ID\n * @param module_id ID of the module to remove\n */\nexport function removeSystemModule(\n id: string,\n module_id: string,\n): Observable<PlaceSystem> {\n return task({\n id,\n task_name: `module/${module_id}`,\n form_data: {},\n method: 'del',\n callback: (d) => process(d),\n path: PATH,\n });\n}\n\n/**\n * Start the given system and clears any existing caches\n * @param id System ID\n * @param query_params Query parameters to add the to request URL\n */\nexport function startSystem(\n id: string,\n query_params: PlaceSystemStartStopOptions = {},\n): Observable<void> {\n return task<void>({\n id,\n task_name: 'start',\n form_data: query_params,\n path: PATH,\n });\n}\n\n/**\n * Stops all modules in the given system\n * @param id System ID\n * @param query_params Query parameters to add the to request URL\n */\nexport function stopSystem(\n id: string,\n query_params: PlaceSystemStartStopOptions = {},\n): Observable<void> {\n return task<void>({\n id,\n task_name: 'stop',\n form_data: query_params,\n path: PATH,\n });\n}\n\n/**\n * Execute a function of the given system module\n * @param id System ID\n * @param method Name of the function to execute\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n * @param args Array of arguments to pass to the executed method\n */\nexport function executeOnSystem(\n id: string,\n method: string,\n module: string,\n index: number = 1,\n args: any[] = [],\n): Observable<HashMap> {\n return task({\n id,\n task_name: `${module}_${index}/${encodeURIComponent(method)}`,\n form_data: args,\n path: PATH,\n });\n}\n\n/**\n * Get the state of the given system module\n * @param id System ID\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n * @param lookup Status variable of interest. If set it will return only the state of this variable\n */\nexport function systemModuleState(\n id: string,\n module: string,\n index: number = 1,\n): Observable<HashMap> {\n return task({\n id,\n task_name: `${module}_${index}`,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get the state of the given system module\n * @param id System ID\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n * @param lookup Status variable of interest. If set it will return only the state of this variable\n */\nexport function lookupSystemModuleState(\n id: string,\n module: string,\n index: number = 1,\n lookup: string,\n): Observable<HashMap> {\n return task({\n id,\n task_name: `${module}_${index}/${lookup}`,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get the list of functions for the given system module\n * @param id System ID\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n */\nexport function functionList(\n id: string,\n module: string,\n index: number = 1,\n): Observable<PlaceModuleFunctionMap> {\n return task({\n id,\n task_name: `functions/${module}_${index}`,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Occurances of a particular type of module in the given system\n * @param id System ID\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n */\nexport function moduleCount(\n id: string,\n module: string,\n): Observable<{ count: number }> {\n return task({\n id,\n task_name: 'count',\n form_data: { module },\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * List types of modules and counts in the given system\n * @param id System ID\n */\nexport function moduleTypes(id: string): Observable<HashMap<number>> {\n return task({ id, task_name: 'count', method: 'get', path: PATH });\n}\n\n/**\n * Get list of Zones for system\n * @param id System ID\n */\nexport function listSystemZones(id: string) {\n return query({\n query_params: {},\n fn: (i: HashMap) => new PlaceZone(i),\n path: `${PATH}/${id}/zones`,\n });\n}\n\n/**\n * Get list of triggers for system\n * @param id System ID\n * @param query_params Query parameters to add the to request URL\n */\nexport function listSystemTriggers(\n id: string,\n query_params: PlaceSystemTriggersQueryOptions = {},\n) {\n return query({\n query_params,\n fn: (i: HashMap) => new PlaceTrigger(i),\n path: `${PATH}/${id}/triggers`,\n });\n}\n\n/**\n * Get list of triggers for system\n * @param id System ID\n * @param data Values for trigger properties\n */\nexport function addSystemTrigger(\n id: string,\n data: Partial<PlaceTrigger>,\n): Observable<PlaceTrigger> {\n return task({\n id,\n task_name: 'triggers',\n form_data: data,\n method: 'post',\n callback: (item: Partial<PlaceTrigger>) => new PlaceTrigger(item),\n path: PATH,\n });\n}\n\n/**\n * Remove trigger from system\n * @param id System ID\n * @param trigger_id ID of the trigger\n */\nexport function removeSystemTrigger(\n id: string,\n trigger_id: string,\n): Observable<void> {\n return task({\n id,\n task_name: `triggers/${trigger_id}`,\n method: 'del',\n path: PATH,\n });\n}\n\n/**\n * Fetch settings of modules, zones and drivers associated with the system\n * @param id System ID\n */\nexport function systemSettings(id: string): Observable<PlaceSettings[]> {\n return task({\n id,\n task_name: 'settings',\n method: 'get',\n callback: (list) =>\n list.map((item: Partial<PlaceSettings>) => new PlaceSettings(item)),\n path: PATH,\n });\n}\n\n/**\n * Get the websocket API endpoint URL for system control.\n * @param query_params Query parameters to add to the URL\n */\nexport function systemControlUrl(query_params: PlaceSystemControlOptions = {}): string {\n const endpoint = apiEndpoint();\n const wsProtocol = endpoint.startsWith('https') ? 'wss:' : 'ws:';\n const httpProtocol = endpoint.startsWith('https') ? 'https:' : 'http:';\n let url = endpoint.replace(httpProtocol, wsProtocol) + `${PATH}/control`;\n if (query_params.fixed_device) {\n url += `?fixed_device=${encodeURIComponent(String(query_params.fixed_device))}`;\n }\n return url;\n}\n\n/**\n * Get metadata for the system\n * @param id System ID\n * @param query_params Query parameters to add to the request\n */\nexport function systemMetadata(\n id: string,\n query_params: PlaceSystemMetadataOptions = {},\n): Observable<HashMap> {\n return task({\n id,\n task_name: 'metadata',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Get a particular trigger instance\n * @param sys_id System ID\n * @param trig_id Trigger ID\n * @param query_params Query parameters to add to the request\n */\nexport function showSystemTrigger(\n sys_id: string,\n trig_id: string,\n query_params: PlaceSystemTriggerShowOptions = {},\n): Observable<PlaceTrigger> {\n return task({\n id: sys_id,\n task_name: `triggers/${encodeURIComponent(trig_id)}`,\n form_data: query_params,\n method: 'get',\n callback: (item: Partial<PlaceTrigger>) => new PlaceTrigger(item),\n path: PATH,\n });\n}\n\n/**\n * Update the details of a trigger instance\n * @param sys_id System ID\n * @param trig_id Trigger ID\n * @param data Values for trigger properties\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSystemTrigger(\n sys_id: string,\n trig_id: string,\n data: Partial<PlaceTrigger>,\n method: 'put' | 'patch' = 'patch',\n): Observable<PlaceTrigger> {\n return task({\n id: sys_id,\n task_name: `triggers/${encodeURIComponent(trig_id)}`,\n form_data: data,\n method,\n callback: (item: Partial<PlaceTrigger>) => new PlaceTrigger(item),\n path: PATH,\n });\n}\n","import { Observable } from 'rxjs';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport {\n PlaceTriggerQueryOptions,\n PlaceTriggerShowOptions,\n} from './interfaces';\nimport { PlaceTrigger } from './trigger';\n\n/**\n * @private\n */\nconst PATH = 'triggers';\n\n/** Convert raw server data to a trigger object */\nfunction process(item: Partial<PlaceTrigger>) {\n return new PlaceTrigger(item);\n}\n\n/**\n * Query the available triggers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryTriggers(query_params: PlaceTriggerQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a trigger\n * @param id ID of the trigger to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showTrigger(\n id: string,\n query_params: PlaceTriggerShowOptions = {},\n) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the trigger in the database\n * @param id ID of the trigger\n * @param form_data New values for the trigger\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateTrigger(\n id: string,\n form_data: Partial<PlaceTrigger>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new trigger to the database\n * @param form_data Trigger data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addTrigger(form_data: Partial<PlaceTrigger>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a trigger from the database\n * @param id ID of the trigger\n */\nexport function removeTrigger(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * List systems that contain instances of a trigger\n * @param id ID of the trigger to grab system instances for\n */\nexport function listTriggerInstances(id: string): Observable<PlaceTrigger[]> {\n return task({\n id,\n task_name: `instances`,\n form_data: {},\n method: 'get',\n callback: (data: Partial<PlaceTrigger>[]) =>\n data.map((i) => new PlaceTrigger(i)),\n path: PATH,\n });\n}\n","import { PlaceResourceQueryOptions } from '../resources/interface';\nimport { HashMap } from '../utilities/types';\n\n/** Mapping of available query parameters for the triggers index endpoint */\nexport interface PlaceTriggerQueryOptions extends PlaceResourceQueryOptions {}\n\n/** Mapping of available query parameters for the triggers show endpoint */\nexport interface PlaceTriggerShowOptions {\n /** Return the instances associated with this trigger */\n instances?: boolean;\n}\n\nexport interface TriggerActions {\n /** List of functions to execute when the trigger is activated */\n functions: TriggerFunction[];\n /** List of emails to send when the trigger is activated */\n mailers: TriggerMailer[];\n}\n\nexport interface TriggerMailer {\n /** List of email addresses to mail to */\n emails: string[];\n /** Contents of the email to send */\n content: string;\n}\n\nexport interface TriggerFunction {\n /** Module to execute the function on */\n mod: string;\n /** Name of the function to execute */\n method: string;\n /** Map of arguments to pass to the function */\n args?: ExecuteArgs;\n}\n\n/** Mapping of method parameters to argument value */\nexport type ExecuteArgs = HashMap;\n\nexport interface TriggerConditions {\n /** List of comparisions used to activate the trigger */\n comparisons: TriggerComparison[];\n /** List of time based activators for the trigger */\n time_dependents: TriggerTimeCondition[];\n}\n\nexport interface TriggerComparison {\n /** Left hand side details for the comparision */\n left: TriggerConditionValue;\n /** Operator to use for comparing both sides */\n operator: TriggerConditionOperator;\n /** Right hand side details for the comparision */\n right: TriggerConditionValue;\n}\n\nexport enum TriggerConditionOperator {\n EQ = 'equal',\n NEQ = 'not_equal',\n GT = 'greater_than',\n GTE = 'greater_than_or_equal',\n LT = 'less_than',\n LTE = 'less_than_or_equal',\n AND = 'and',\n OR = 'or',\n XOR = 'exclusive_or',\n}\n\nexport type TriggerConditionValue =\n | TriggerStatusVariable\n | TriggerConditionConstant;\n\nexport type TriggerConditionConstant = number | string | boolean;\n\nexport interface TriggerStatusVariable {\n /** Module class name associated with the status variable */\n mod: string;\n /** Name of the status variable */\n status: string;\n /** Sub keys to look at in the status variable's data */\n keys: string[];\n}\n\nexport type TriggerTimeCondition =\n | TriggerAtTimeCondition\n | TriggerCronTimeCondition;\n\nexport interface TriggerAtTimeCondition {\n /** Type of time condition. Either a specific time or cron string */\n type: TriggerTimeConditionType.AT;\n /** Unix epoch in seconds */\n time: number;\n}\n\nexport interface TriggerCronTimeCondition {\n /** Type of time condition. Either a specific time or cron string */\n type: TriggerTimeConditionType.CRON;\n /** CRON tab string */\n cron: string;\n /** Timezone associated with the schedule */\n timezone: string;\n}\n\nexport enum TriggerTimeConditionType {\n AT = 'at',\n CRON = 'cron',\n}\n\nexport interface TriggerWebhook {\n type: TriggerWebhookType;\n payload?: string;\n}\n\nexport enum TriggerWebhookType {\n ExecuteBefore,\n ExecuteAfter,\n PayloadOnly,\n IgnorePayload,\n}\n","import { PlaceResource } from '../resources/resource';\n\nexport interface WorktimePreference {\n /* Index of the day of the week. `0` being Sunday */\n day_of_week: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n blocks: WorktimeBlock[];\n}\n\nexport interface WorktimeBlock {\n /* Start time of work hours. e.g. `7.5` being 7:30AM */\n start_time: number;\n /* End time of work hours. e.g. `18.5` being 6:30PM */\n end_time: number;\n /** Name of the location the work is being performed at */\n location?: string;\n}\n\n/**\n * Representation of the user model in Place\n */\nexport class PlaceUser extends PlaceResource {\n /** Hash of the email address of the user */\n public readonly email_digest: string;\n /** ID of the authority associated with the user */\n public readonly authority_id: string;\n /** Email address of the user */\n public readonly email: string;\n /** Phone number of the user */\n public readonly phone: string;\n /** Country that the user resides in */\n public readonly country: string;\n /** Office building the user is associated */\n public readonly building: string;\n /** Access control groups that user is associated */\n public readonly groups: string[];\n /** Avatar image for the user */\n public readonly image: string;\n /** Additional metadata associated with the user */\n public readonly metadata: string;\n /** Username credential of the user */\n public readonly login_name: string;\n /** Organisation ID of the user */\n public readonly staff_id: string;\n /** First name of the user */\n public readonly first_name: string;\n /** Last name of the user */\n public readonly last_name: string;\n /** Whether user is a support role */\n public readonly support: boolean;\n /** Whether user is a system admin role */\n public readonly sys_admin: boolean;\n /** Name of the active theme on the displayed UI */\n public readonly ui_theme: string;\n /** Card Number associated with the user */\n public readonly card_number: string;\n /** Organisational department the user belongs */\n public readonly department: string;\n /** Default worktime preferences for the user */\n public readonly work_preferences: WorktimePreference[];\n /** Overrides of the worktime preferences for the user */\n public readonly work_overrides: Record<string, WorktimePreference>;\n /** ID of the user's photo in the PlaceOS uploads service */\n public readonly photo_upload_id: string;\n /** Whether the user has opted in to location tracking */\n public readonly locatable: boolean;\n /** Password */\n protected password = '';\n /** Password */\n protected confirm_password = '';\n\n constructor(raw_data: Partial<PlaceUser> = {}) {\n super(raw_data);\n this.authority_id = raw_data.authority_id || '';\n this.email = raw_data.email || '';\n this.email_digest = raw_data.email_digest || '';\n this.phone = raw_data.phone || '';\n this.country = raw_data.country || '';\n this.building = raw_data.building || '';\n this.image = raw_data.image || '';\n this.metadata = raw_data.metadata || '';\n this.login_name = raw_data.login_name || '';\n this.staff_id = raw_data.staff_id || '';\n this.first_name = raw_data.first_name || '';\n this.last_name = raw_data.last_name || '';\n this.support = !!raw_data.support;\n this.sys_admin = !!raw_data.sys_admin;\n this.ui_theme = raw_data.ui_theme || '';\n this.card_number = raw_data.card_number || '';\n this.groups = raw_data.groups || [];\n this.department = raw_data.department || '';\n this.photo_upload_id = raw_data.photo_upload_id || '';\n this.work_preferences = raw_data.work_preferences || [];\n this.work_overrides = raw_data.work_overrides || ({} as any);\n this.locatable = raw_data.locatable ?? true;\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth/functions';\nimport { del, get, post } from '../http/functions';\nimport { create, query, remove, show, task, update } from '../resources/functions';\nimport { toQueryString } from '../utilities/api';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceUserDeleteOptions,\n PlaceUserGroupsOptions,\n PlaceUserMetadataOptions,\n PlaceUserMetadataSearchOptions,\n PlaceUserQueryOptions,\n PlaceUserShowOptions,\n} from './interfaces';\nimport { PlaceUser } from './user';\n\n/**\n * @private\n */\nconst PATH = 'users';\n\n/** Convert raw server data to a trigger object */\nfunction process(item: Partial<PlaceUser>) {\n return new PlaceUser(item);\n}\n\n/**\n * Query the available triggers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryUsers(query_params: PlaceUserQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for a user\n * @param id ID of the user to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showUser(id: string, query_params: PlaceUserShowOptions = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Get the data for the currently logged in user\n * @param query_params Query parameters to add the to request URL\n */\nexport function currentUser(query_params: PlaceUserShowOptions = {}) {\n return show({ id: 'current', query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the trigger in the database\n * @param id ID of the trigger\n * @param form_data New values for the trigger\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateUser(\n id: string,\n form_data: Partial<PlaceUser>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new trigger to the database\n * @param form_data Trigger data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addUser(form_data: Partial<PlaceUser>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a user from the database\n * @param id ID of the user\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeUser(id: string, query_params: PlaceUserDeleteOptions = {}) {\n return remove({ id, query_params, path: PATH });\n}\n\n/**\n * Get the groups that users are in\n * @param query_params Query parameters including email addresses\n */\nexport function queryUserGroups(\n query_params: PlaceUserGroupsOptions,\n): Observable<HashMap<string[]>> {\n const q = toQueryString(query_params);\n const url = `${apiEndpoint()}${PATH}/groups${q ? '?' + q : ''}`;\n return get(url).pipe(map((resp: HashMap) => resp as HashMap<string[]>));\n}\n\n/**\n * Search user metadata with provided JSON Path query\n * @param query_params Query parameters including filter\n */\nexport function searchUserMetadata(\n query_params: PlaceUserMetadataSearchOptions,\n): Observable<HashMap[]> {\n const q = toQueryString(query_params);\n const url = `${apiEndpoint()}${PATH}/metadata/search${q ? '?' + q : ''}`;\n return get(url).pipe(map((resp: HashMap) => resp as HashMap[]));\n}\n\n/**\n * Obtain a token to the current user's SSO resources\n */\nexport function currentUserResourceToken(): Observable<{ token: string }> {\n const url = `${apiEndpoint()}${PATH}/resource_token`;\n return post(url, {}).pipe(map((resp: HashMap) => resp as { token: string }));\n}\n\n/**\n * Get a user's metadata\n * @param id User ID\n * @param query_params Query parameters to add to the request\n */\nexport function userMetadata(\n id: string,\n query_params: PlaceUserMetadataOptions = {},\n): Observable<HashMap> {\n return task({\n id,\n task_name: 'metadata',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n\n/**\n * Remove the saved resource token of a user\n * @param id User ID\n */\nexport function removeUserResourceToken(id: string): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/resource_token`;\n return del(url, { response_type: 'void' });\n}\n\n/**\n * Obtain a token to the specified user's SSO resources\n * @param id User ID\n */\nexport function userResourceToken(id: string): Observable<{ token: string }> {\n const url = `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/resource_token`;\n return post(url, {}).pipe(map((resp: HashMap) => resp as { token: string }));\n}\n\n/**\n * Undelete a user\n * @param id User ID\n */\nexport function reviveUser(id: string): Observable<PlaceUser> {\n return task({\n id,\n task_name: 'revive',\n form_data: {},\n method: 'post',\n callback: (item: Partial<PlaceUser>) => process(item),\n path: PATH,\n });\n}\n","import { Observable } from 'rxjs';\nimport {\n create,\n query,\n remove,\n show,\n task,\n update,\n} from '../resources/functions';\nimport { PlaceResourceQueryOptions } from '../resources/interface';\nimport { PlaceTrigger } from '../triggers/trigger';\nimport { HashMap } from '../utilities/types';\nimport { PlaceZoneMetadataQueryOptions, PlaceZoneQueryOptions, PlaceZoneShowOptions } from './interfaces';\nimport { PlaceZone } from './zone';\n\n/**\n * @private\n */\nconst PATH = 'zones';\n\n/** Convert raw server data to an application object */\nfunction process(item: Partial<PlaceZone>) {\n return new PlaceZone(item);\n}\n\n/**\n * Query the available applications\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryZones(query_params: PlaceZoneQueryOptions = {}) {\n return query({ query_params, fn: process, path: PATH });\n}\n\n/**\n * List the set of tags on the existing zones\n * @param query_params\n */\nexport function listZoneTags(query_params: PlaceZoneQueryOptions = {}) {\n return show<string[]>({\n id: 'tags',\n query_params,\n fn: (i) => i as string[],\n path: PATH,\n });\n}\n\n/**\n * Get the data for an application\n * @param id ID of the application to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showZone(id: string, query_params: PlaceZoneShowOptions = {}) {\n return show({ id, query_params, fn: process, path: PATH });\n}\n\n/**\n * Update the application in the database\n * @param id ID of the application\n * @param form_data New values for the application\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateZone(\n id: string,\n form_data: Partial<PlaceZone>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: process,\n path: PATH,\n });\n}\n\n/**\n * Add a new application to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addZone(form_data: Partial<PlaceZone>) {\n return create({ form_data, query_params: {}, fn: process, path: PATH });\n}\n\n/**\n * Remove a zone from the database\n * @param id ID of the zone\n */\nexport function removeZone(id: string) {\n return remove({ id, query_params: {}, path: PATH });\n}\n\n/**\n * Query the triggers for a zone\n * @param id ID of the zone\n * @param query_params Query parameters to add the to request URL\n */\nexport function listZoneTriggers(\n id: string,\n query_params: PlaceResourceQueryOptions = {},\n) {\n return query({\n query_params,\n fn: (i: Partial<PlaceTrigger>) => new PlaceTrigger(i),\n path: `${PATH}/${id}/triggers`,\n });\n}\n\n/**\n * Execute a function of the system's module under a given zone\n * @param id Zone ID\n * @param method Name of the function to execute\n * @param module Class name of the Module e.g. `Display`, `Lighting` etc.\n * @param index Module index. Defaults to `1`\n * @param args Array of arguments to pass to the executed method\n */\nexport function executeOnZone(\n id: string,\n method: string,\n module: string,\n index: number = 1,\n args: any[] = [],\n): Observable<HashMap> {\n return task({\n id,\n task_name: `exec/${encodeURIComponent(\n module + '_' + index,\n )}/${encodeURIComponent(method)}`,\n form_data: args,\n path: PATH,\n });\n}\n\n/**\n * Get metadata associated with the selected zone\n * @param id Zone ID\n * @param query_params Query parameters to add to the request\n */\nexport function zoneMetadata(\n id: string,\n query_params: PlaceZoneMetadataQueryOptions = {},\n): Observable<HashMap> {\n return task({\n id,\n task_name: 'metadata',\n form_data: query_params,\n method: 'get',\n path: PATH,\n });\n}\n","import { getUnixTime } from 'date-fns';\nimport { HashMap } from '../utilities/types';\n\nexport type MediaType =\n | 'unknown'\n | 'image'\n | 'video'\n | 'audio'\n | 'plugin'\n | 'webpage'\n | 'externalimage'\n | 'external_image';\n\nexport enum MediaAnimation {\n Default = 0,\n Cut,\n CrossFade,\n SlideTop,\n SlideLeft,\n SlideRight,\n SlideBottom,\n}\n\nexport type MediaOrientation =\n | 'unspecified'\n | 'portrait'\n | 'landscape'\n | 'square';\n\nexport class SignageMedia {\n public readonly id: string;\n public readonly created_at: number;\n public readonly updated_at: number;\n public readonly name: string;\n public readonly description: string;\n public readonly authority_id: string;\n public readonly start_time: number;\n public readonly play_time: number;\n public readonly video_length: number;\n public readonly animation?: MediaAnimation;\n public readonly media_type: MediaType;\n public readonly orientation: MediaOrientation;\n public readonly media_uri: string;\n public readonly media_id: string;\n public readonly thumbnail_id: string;\n public readonly plugin_id: string;\n public readonly plugin_params: HashMap;\n public readonly play_count: number;\n public readonly valid_from?: number;\n public readonly valid_until?: number;\n\n public get media_url() {\n return this.media_id\n ? `/api/engine/v2/uploads/${this.media_id}/url`\n : this.media_uri;\n }\n\n public get thumbnail_url() {\n return `/api/engine/v2/uploads/${this.thumbnail_id}/url`;\n }\n\n constructor(data: Partial<SignageMedia>) {\n this.id = data.id || '';\n this.created_at = data.created_at || getUnixTime(Date.now());\n this.updated_at = data.updated_at || getUnixTime(Date.now());\n this.name = data.name || '';\n this.description = data.description || '';\n this.authority_id = data.authority_id || '';\n this.start_time = data.start_time || 0;\n this.play_time = data.play_time || 0;\n this.video_length = data.video_length || 0;\n this.animation = data.animation;\n this.media_type = data.media_type || 'unknown';\n this.orientation = data.orientation || 'unspecified';\n this.media_uri = data.media_uri || '';\n this.media_id = data.media_id || '';\n this.thumbnail_id = data.thumbnail_id || '';\n this.plugin_id = data.plugin_id || '';\n this.plugin_params = data.plugin_params || {};\n this.play_count = data.play_count || 0;\n this.valid_from = data.valid_from;\n this.valid_until = data.valid_until;\n }\n}\n","import { MediaAnimation } from './media.class';\n\nexport class SignagePlaylistMedia {\n public readonly id: string;\n public readonly playlist_id: string;\n public readonly items: string[];\n public readonly created_at: number;\n public readonly updated_at: number;\n\n public readonly user_id: string;\n public readonly user_name: string;\n public readonly user_email: string;\n\n public readonly approved: boolean;\n public readonly approved_by_id: string;\n public readonly approved_by_email: string;\n public readonly approved_by_name: string;\n\n constructor(data: Partial<SignagePlaylistMedia> = {}) {\n this.id = data.id || '';\n this.playlist_id = data.playlist_id || '';\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n\n this.items = data.items || [];\n\n this.approved = !!data.approved;\n this.approved_by_id = data.approved_by_id || '';\n this.approved_by_email = data.approved_by_email || '';\n this.approved_by_name = data.approved_by_name || '';\n\n this.user_id = data.user_id || '';\n this.user_name = data.user_name || '';\n this.user_email = data.user_email || '';\n }\n}\n\nexport class SignagePlaylist {\n public readonly id: string;\n public readonly created_at: number;\n public readonly updated_at: number;\n public readonly name: string;\n public readonly description: string;\n public readonly authority_id: string;\n public readonly orientation: string;\n public readonly play_count: number;\n public readonly play_through_count: number;\n public readonly default_animation: MediaAnimation;\n public readonly random: boolean;\n public readonly enabled: boolean;\n public readonly default_duration: number;\n public readonly play_hours: string;\n public readonly play_at: string;\n public readonly play_cron: string;\n public readonly valid_from?: number;\n public readonly valid_until?: number;\n\n constructor(data: Partial<SignagePlaylist>) {\n this.id = data.id || '';\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n this.name = data.name || '';\n this.description = data.description || '';\n this.authority_id = data.authority_id || '';\n this.orientation = data.orientation || '';\n this.play_count = data.play_count || 0;\n this.play_through_count = data.play_through_count || 0;\n this.default_animation = data.default_animation || MediaAnimation.Cut;\n this.random = data.random || false;\n this.enabled = data.enabled ?? true;\n this.default_duration = data.default_duration ?? 15 * 1000;\n this.valid_from = data.valid_from;\n this.valid_until = data.valid_until;\n this.play_hours = data.play_hours || '';\n this.play_at = data.play_at || '';\n this.play_cron = data.play_cron || '';\n }\n}\n","import { HashMap } from '../utilities/types';\n\nexport type SignagePlaybackType = 'static' | 'interactive' | 'playsthrough';\n\nexport class SignagePlugin {\n public readonly id: string;\n public readonly created_at: number;\n public readonly updated_at: number;\n public readonly name: string;\n public readonly description: string;\n public readonly uri: string;\n public readonly playback_type: SignagePlaybackType;\n public readonly authority_id: string;\n public readonly enabled: boolean;\n public readonly params: HashMap;\n public readonly defaults: HashMap;\n\n constructor(data: Partial<SignagePlugin> = {}) {\n this.id = data.id || '';\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n this.name = data.name || '';\n this.description = data.description || '';\n this.uri = data.uri || '';\n this.playback_type = data.playback_type || 'static';\n this.authority_id = data.authority_id || '';\n this.enabled = data.enabled ?? true;\n this.params = data.params || {};\n this.defaults = data.defaults || {};\n }\n}\n","import { create, query, remove, show, update } from '../api';\nimport { apiEndpoint } from '../auth';\nimport { HttpJsonOptions } from '../http/interfaces';\nimport { task } from '../resources/functions';\nimport {\n SignageMediaQueryOptions,\n SignageMetrics,\n SignagePluginQueryOptions,\n} from './interfaces';\nimport { SignageMedia } from './media.class';\nimport { SignagePlaylist, SignagePlaylistMedia } from './playlist.class';\nimport { SignagePlugin } from './plugin.class';\n\n/**\n * @private\n */\nconst PATH = 'signage';\n\n/**\n * Get the data for a signage item\n * @param id ID of the signage item to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignage(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n options?: HttpJsonOptions,\n) {\n return show({ id, query_params, fn: (r) => r, path: `${PATH}`, options });\n}\n\n/**\n * Get the data for a signage item\n * @param id ID of the signage item to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignageMetrics(id: string) {\n return task({\n id,\n task_name: `metrics`,\n form_data: {},\n method: 'post',\n callback: (d) => d as SignageMetrics,\n path: PATH,\n });\n}\n\n/**\n * @private\n */\nconst MEDIA_PATH = 'signage/media';\n\n/** Convert raw server data to an signagemedia object */\nfunction processMedia(item: Partial<SignageMedia>) {\n return new SignageMedia(item);\n}\n\n/**\n * Query the available media\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySignageMedia(query_params: SignageMediaQueryOptions = {}) {\n return query({ query_params, fn: processMedia, path: MEDIA_PATH });\n}\n\n/**\n * Get the data for a media item\n * @param id ID of the media item to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignageMedia(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n) {\n return show({ id, query_params, fn: processMedia, path: MEDIA_PATH });\n}\n\n/**\n * Update the media item in the database\n * @param id ID of the media item\n * @param form_data New values for the media item\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSignageMedia(\n id: string,\n form_data: Partial<SignageMedia>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processMedia,\n path: MEDIA_PATH,\n });\n}\n\n/**\n * Add a new media item to the database\n * @param form_data Media item data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSignageMedia(form_data: Partial<SignageMedia>) {\n return create({\n form_data,\n query_params: {},\n fn: processMedia,\n path: MEDIA_PATH,\n });\n}\n\n/**\n * Remove an media item from the database\n * @param id ID of the media item\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeSignageMedia(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: MEDIA_PATH });\n}\n\n/**\n * Get the thumbnail URL for a media item.\n * This is the endpoint resolves to the image for the media item's thumbnail.\n */\nexport function mediaThumbnail(id: string): string {\n return `${apiEndpoint()}/${MEDIA_PATH}/${id}/thumbnail`;\n}\n\n/**\n * @private\n */\nconst PLAYLISTS_PATH = 'signage/playlists';\n\n/** Convert raw server data to an playlist object */\nfunction processPlaylist(item: Partial<SignagePlaylist>) {\n return new SignagePlaylist(item);\n}\n\n/**\n * Query the available playlists\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySignagePlaylists(\n query_params: SignageMediaQueryOptions = {},\n) {\n return query({ query_params, fn: processPlaylist, path: PLAYLISTS_PATH });\n}\n\n/**\n * Get the data for a playlist\n * @param id ID of the playlist to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignagePlaylist(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n) {\n return show({\n id,\n query_params,\n fn: processPlaylist,\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Update the playlist in the database\n * @param id ID of the playlist\n * @param form_data New values for the playlist\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSignagePlaylist(\n id: string,\n form_data: Partial<SignagePlaylist>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processPlaylist,\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Add a new playlist to the database\n * @param form_data Playlist data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSignagePlaylist(form_data: Partial<SignagePlaylist>) {\n return create({\n form_data,\n query_params: {},\n fn: processPlaylist,\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Remove an playlist from the database\n * @param id ID of the playlist\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeSignagePlaylist(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: PLAYLISTS_PATH });\n}\n\n/**\n * Get media for a playlist\n * @param id ID of the playlist\n * @param query_params Query parameters to add the to request URL\n */\nexport function listSignagePlaylistMedia(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n) {\n return task({\n id,\n task_name: 'media',\n form_data: query_params,\n method: 'get',\n callback: (value: SignagePlaylistMedia) =>\n new SignagePlaylistMedia(value),\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * List all versions of the media lists for a playlist\n * @param id ID of the playlist\n * @param query_params Query parameters to add the to request URL\n */\nexport function listSignagePlaylistMediaRevisions(\n id: string,\n query_params: SignageMediaQueryOptions = {},\n) {\n return task({\n id,\n task_name: 'media/revisions',\n form_data: query_params,\n method: 'get',\n callback: (list: SignagePlaylistMedia[]) =>\n list.map(\n (item: SignagePlaylistMedia) => new SignagePlaylistMedia(item),\n ),\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Approve the latest revision of the media list for a playlist\n * @param id ID of the playlist to approve\n */\nexport function approveSignagePlaylist(id: string) {\n return task({\n id,\n task_name: 'media/approve',\n method: 'post',\n path: PLAYLISTS_PATH,\n });\n}\n\n/**\n * Update the media for a playlist\n * @param id ID of the playlist\n * @param form_data New list of media IDs for the playlist\n */\nexport function updateSignagePlaylistMedia(id: string, form_data: string[]) {\n return task({\n id,\n task_name: 'media',\n form_data,\n method: 'post',\n path: PLAYLISTS_PATH,\n callback: (value: SignagePlaylistMedia) =>\n new SignagePlaylistMedia(value),\n });\n}\n\n/**\n * @private\n */\nconst PLUGINS_PATH = 'signage/plugins';\n\n/** Convert raw server data to a signage plugin object */\nfunction processPlugin(item: Partial<SignagePlugin>) {\n return new SignagePlugin(item);\n}\n\n/**\n * Query the available signage plugins\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySignagePlugins(\n query_params: SignagePluginQueryOptions = {},\n) {\n return query({ query_params, fn: processPlugin, path: PLUGINS_PATH });\n}\n\n/**\n * Get the data for a signage plugin\n * @param id ID of the signage plugin to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSignagePlugin(\n id: string,\n query_params: SignagePluginQueryOptions = {},\n) {\n return show({\n id,\n query_params,\n fn: processPlugin,\n path: PLUGINS_PATH,\n });\n}\n\n/**\n * Update the signage plugin in the database\n * @param id ID of the signage plugin\n * @param form_data New values for the signage plugin\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSignagePlugin(\n id: string,\n form_data: Partial<SignagePlugin>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processPlugin,\n path: PLUGINS_PATH,\n });\n}\n\n/**\n * Add a new signage plugin to the database\n * @param form_data Signage plugin data\n */\nexport function addSignagePlugin(form_data: Partial<SignagePlugin>) {\n return create({\n form_data,\n query_params: {},\n fn: processPlugin,\n path: PLUGINS_PATH,\n });\n}\n\n/**\n * Remove a signage plugin from the database\n * @param id ID of the signage plugin\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeSignagePlugin(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: PLUGINS_PATH });\n}\n","export class SurveyAnswer {\n id: number;\n question_id: number;\n survey_id: number;\n type: string;\n answer_json: Record<string, any>;\n\n constructor(_data: Partial<SurveyAnswer>) {\n this.id = _data.id || 0;\n this.question_id = _data.question_id || 0;\n this.survey_id = _data.survey_id || 0;\n this.type = _data.type || '';\n this.answer_json = _data.answer_json || {};\n }\n}\n","import { map } from 'rxjs/operators';\nimport { get, post } from '../../api';\nimport { toQueryString } from '../../utilities/api';\nimport { AnswerQueryOptions } from './interfaces';\nimport { SurveyAnswer } from './model';\n\n/**\n * @private\n */\nconst PATH = '/api/staff/v1/surveys/answers';\n\n/**\n * Query the available answers\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAnswers(query_params: AnswerQueryOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}${query ? '?' + query : ''}`).pipe(\n map((l: any) => l.map((_: any) => new SurveyAnswer(_))),\n );\n}\n\n/**\n * Add a new answer to the database\n * @param form_data Answer data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAnswer(form_data: Partial<SurveyAnswer>[]) {\n return post(`${PATH}`, form_data).pipe(\n map((l: any) => l.map((_: any) => new SurveyAnswer(_))),\n );\n}\n","export class SurveyInvitation {\n id: number;\n survey_id: number;\n token: string;\n email: string;\n sent: boolean;\n\n constructor(_data: Partial<SurveyInvitation>) {\n this.id = _data.id || 0;\n this.survey_id = _data.survey_id || 0;\n this.token = _data.token || '';\n this.email = _data.email || '';\n this.sent = _data.sent ?? false;\n }\n}\n","import { map } from 'rxjs/operators';\nimport { del, get, patch, post, put } from '../../api';\nimport { toQueryString } from '../../utilities/api';\nimport { InvitationQueryOptions, InvitationShowOptions } from './interfaces';\nimport { SurveyInvitation } from './model';\n\n/**\n * @private\n */\nconst PATH = '/api/staff/v1/surveys/invitations';\n\n/**\n * Query the available invitations\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryInvitations(query_params: InvitationQueryOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}${query ? '?' + query : ''}`).pipe(\n map((l: any) => l.map((_: any) => new SurveyInvitation(_))),\n );\n}\n\n/**\n * Get the data for an invitation\n * @param id ID of the surveyinvitation to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showInvitation(\n token: string,\n query_params: InvitationShowOptions = {},\n) {\n const query = toQueryString(query_params);\n return get(`${PATH}/${token}${query ? '?' + query : ''}`).pipe(\n map((l: any) => new SurveyInvitation(l)),\n );\n}\n\n/**\n * Update the surveyinvitation in the database\n * @param id ID of the invitation\n * @param form_data New values for the invitation\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateInvitation(\n token: string,\n form_data: Partial<SurveyInvitation>,\n method: 'put' | 'patch' = 'patch',\n) {\n return (method === 'put' ? put : patch)(`${PATH}/${token}`, form_data).pipe(\n map((l: any) => new SurveyInvitation(l)),\n );\n}\n\n/**\n * Add a new surveyinvitation to the database\n * @param form_data SurveyInvitation data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addInvitation(form_data: Partial<SurveyInvitation>) {\n return post(`${PATH}`, form_data).pipe(\n map((l: any) => new SurveyInvitation(l)),\n );\n}\n\n/**\n * Remove an surveyinvitation from the database\n * @param id ID of the invitation\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeInvitation(\n token: string,\n query_params: Record<string, any> = {},\n) {\n const query = toQueryString(query_params);\n return del(`${PATH}/${token}${query ? '?' + query : ''}`);\n}\n","export class SurveyQuestion {\n id: number;\n title: string;\n description?: string;\n type: string;\n options: any;\n required: boolean;\n max_rating: number;\n choices: Array<any>;\n tags: Array<string>;\n deleted: boolean;\n\n constructor(_data: Partial<SurveyQuestion>) {\n this.id = _data.id || 0;\n this.title = _data.title || '';\n this.description = _data.description || '';\n this.type = _data.type || '';\n this.options = _data.options || {};\n this.required = _data.required || false;\n this.max_rating = _data.max_rating || 0;\n this.choices = _data.choices || [];\n this.tags = _data.tags || [];\n this.deleted = _data.deleted || false;\n }\n}\n","import { map } from 'rxjs/operators';\nimport { del, get, patch, post, put } from '../../api';\nimport { toQueryString } from '../../utilities/api';\nimport { QuestionQueryOptions, QuestionShowOptions } from './interfaces';\nimport { SurveyQuestion } from './model';\n\n/**\n * @private\n */\nconst PATH = '/api/staff/v1/surveys/questions';\n\n/**\n * Query the available questions\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryQuestions(query_params: QuestionQueryOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}${query ? '?' + query : ''}`).pipe(\n map((l: any) => l.map((_: any) => new SurveyQuestion(_))),\n );\n}\n\n/**\n * Get the data for an question\n * @param id ID of the surveyquestion to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showQuestion(\n id: string,\n query_params: QuestionShowOptions = {},\n) {\n const query = toQueryString(query_params);\n return get(`${PATH}/${id}${query ? '?' + query : ''}`).pipe(\n map((l: any) => new SurveyQuestion(l)),\n );\n}\n\n/**\n * Add a new surveyquestion to the database\n * @param form_data SurveyQuestion data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addQuestion(form_data: Partial<SurveyQuestion>) {\n return post(`${PATH}`, form_data).pipe(\n map((l: any) => new SurveyQuestion(l)),\n );\n}\n\n/**\n * Update the question in the database\n * @param id ID of the question\n * @param form_data New values for the question\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateQuestion(\n id: string,\n form_data: Partial<SurveyQuestion>,\n method: 'put' | 'patch' = 'patch',\n) {\n return (method === 'put' ? put : patch)(`${PATH}/${id}`, form_data).pipe(\n map((l: any) => new SurveyQuestion(l)),\n );\n}\n\n/**\n * Remove an surveyquestion from the database\n * @param id ID of the question\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeQuestion(\n id: string,\n query_params: Record<string, any> = {},\n) {\n const query = toQueryString(query_params);\n return del(`${PATH}/${id}${query ? '?' + query : ''}`);\n}\n","export class Survey {\n public readonly id: number;\n public readonly title: string;\n public readonly description?: string;\n public readonly trigger: string;\n public readonly building_id: string;\n public readonly zone_id: string;\n public readonly pages: SurveyPage[];\n\n constructor(_data: Partial<Survey>) {\n this.id = _data.id || 0;\n this.title = _data.title || '';\n this.description = _data.description || '';\n this.building_id = _data.building_id || '';\n this.zone_id = _data.zone_id || '';\n this.pages = _data.pages || [];\n this.trigger = _data.trigger || 'NONE';\n }\n}\n\nexport interface SurveyPage {\n title: string;\n description?: string;\n question_order: number[];\n}\n","import { map } from 'rxjs/operators';\nimport { del, get, patch, post, put } from '../../api';\nimport { toQueryString } from '../../utilities/api';\nimport { SurveyQueryOptions, SurveyShowOptions } from './interfaces';\nimport { Survey } from './model';\n\n/**\n * @private\n */\nconst PATH = '/api/staff/v1/surveys';\n\n/**\n * Query the available surveys\n * @param query_params Query parameters to add the to request URL\n */\nexport function querySurveys(query_params: SurveyQueryOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}${query ? '?' + query : ''}`).pipe(\n map((l: any) => l.map((_: any) => new Survey(_))),\n );\n}\n\n/**\n * Get the data for an survey\n * @param id ID of the survey to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showSurvey(id: string, query_params: SurveyShowOptions = {}) {\n const query = toQueryString(query_params);\n return get(`${PATH}/${id}${query ? '?' + query : ''}`).pipe(\n map((l: any) => new Survey(l)),\n );\n}\n\n/**\n * Update the survey in the database\n * @param id ID of the survey\n * @param form_data New values for the survey\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateSurvey(\n id: string,\n form_data: Partial<Survey>,\n method: 'put' | 'patch' = 'patch',\n) {\n return (method === 'put' ? put : patch)(`${PATH}/${id}`, form_data).pipe(\n map((l: any) => new Survey(l)),\n );\n}\n\n/**\n * Add a new survey to the database\n * @param form_data Survey data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addSurvey(form_data: Partial<Survey>) {\n return post(`${PATH}`, form_data).pipe(map((l: any) => new Survey(l)));\n}\n\n/**\n * Remove an survey from the database\n * @param id ID of the survey\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeSurvey(\n id: string,\n query_params: Record<string, any> = {},\n) {\n const query = toQueryString(query_params);\n return del(`${PATH}/${id}${query ? '?' + query : ''}`);\n}\n","export class PlaceAssetCategory {\n readonly id: string;\n readonly parent_category_id: string;\n readonly name: string;\n readonly description: string;\n readonly hidden: boolean;\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceAssetCategory>) {\n this.id = data.id || '';\n this.parent_category_id = data.parent_category_id || '';\n this.name = data.name || '';\n this.description = data.description || '';\n this.hidden = data.hidden || false;\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n\nexport class PlaceAssetPurchaseOrder {\n readonly id: string;\n readonly purchase_order_number: string;\n readonly invoice_number: string;\n readonly supplier_details: Record<string, string>;\n readonly purchase_date: number;\n readonly unit_price: number;\n readonly expected_service_start_date: number;\n readonly expected_service_end_date: number;\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceAssetPurchaseOrder>) {\n this.id = data.id || '';\n this.purchase_order_number = data.purchase_order_number || '';\n this.invoice_number = data.invoice_number || '';\n this.supplier_details = data.supplier_details || {};\n this.purchase_date = data.purchase_date || 0;\n this.unit_price = data.unit_price || 0;\n this.expected_service_start_date = data.expected_service_start_date || 0;\n this.expected_service_end_date = data.expected_service_end_date || 0;\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n\nexport class PlaceAssetType {\n readonly id: string;\n readonly category_id: string;\n readonly name: string;\n readonly brand: string;\n readonly description: string;\n readonly model_number: string;\n readonly images: string[];\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceAssetType>) {\n this.id = data.id || '';\n this.category_id = data.category_id || '';\n this.name = data.name || '';\n this.brand = data.brand || '';\n this.description = data.description || '';\n this.model_number = data.model_number || '';\n this.images = data.images || [];\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n\nexport class PlaceAsset {\n readonly id: string;\n readonly parent_id: string;\n readonly asset_type_id: string;\n readonly purchase_order_id: string;\n readonly zone_id: string;\n readonly identifier: string;\n readonly serial_number: string;\n readonly other_data: Record<string, string>;\n readonly barcode: string;\n readonly name: string;\n readonly client_ids: Record<string, string>;\n readonly map_id: string;\n readonly bookable: boolean;\n readonly accessible: boolean;\n readonly zones: string[];\n readonly place_groups: string[];\n readonly assigned_to: string;\n readonly assigned_name: string;\n readonly features: string[];\n readonly images: string[];\n readonly notes: string;\n readonly security_system_groups: string[];\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceAsset>) {\n this.id = data.id || '';\n this.parent_id = data.parent_id || '';\n this.asset_type_id = data.asset_type_id || '';\n this.purchase_order_id = data.purchase_order_id || '';\n this.zone_id = data.zone_id || '';\n this.identifier = data.identifier || '';\n this.serial_number = data.serial_number || '';\n this.other_data = data.other_data || {};\n this.barcode = data.barcode || '';\n this.name = data.name || '';\n this.client_ids = data.client_ids || {};\n this.map_id = data.map_id || '';\n this.bookable = data.bookable || false;\n this.accessible = data.accessible || false;\n this.zones = data.zones || [];\n this.place_groups = data.place_groups || [];\n this.assigned_to = data.assigned_to || '';\n this.assigned_name = data.assigned_name || '';\n this.features = data.features || [];\n this.images = data.images || [];\n this.notes = data.notes || '';\n this.security_system_groups = data.security_system_groups || [];\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n","import { map } from 'rxjs';\nimport {\n create,\n del,\n patch,\n post,\n put,\n query,\n remove,\n show,\n update,\n} from '../api';\nimport { apiEndpoint } from '../auth';\nimport { toQueryString } from '../utilities/api';\nimport {\n PlaceAsset,\n PlaceAssetCategory,\n PlaceAssetPurchaseOrder,\n PlaceAssetType,\n} from './assets.class';\nimport {\n PlaceAssetCategoryQueryOptions,\n PlaceAssetPurchaseOrderQueryOptions,\n PlaceAssetQueryOptions,\n PlaceAssetTypeQueryOptions,\n} from './interfaces';\n\n///////////////////////////////////////////////////////////////\n////////////////////////// Assets /////////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ASSET_PATH = 'assets';\n\n/** Convert raw server data to an asset object */\nfunction processAsset(item: Partial<PlaceAsset>) {\n return new PlaceAsset(item);\n}\n\n/**\n * Query the available assets\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAssets(query_params: PlaceAssetQueryOptions = {}) {\n return query({\n query_params,\n fn: processAsset,\n path: ASSET_PATH,\n });\n}\n\n/**\n * Get the data for an asset\n * @param id ID of the asset to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAsset(id: string, query_params: Record<string, any> = {}) {\n return show({\n id,\n query_params,\n fn: processAsset,\n path: ASSET_PATH,\n });\n}\n\n/**\n * Update the asset in the database\n * @param id ID of the asset\n * @param form_data New values for the asset\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAsset(\n id: string,\n form_data: Partial<PlaceAsset>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAsset,\n path: ASSET_PATH,\n });\n}\n\n/**\n * Add a new asset to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAsset(form_data: Partial<PlaceAsset>) {\n return create({\n form_data,\n query_params: {},\n fn: processAsset,\n path: ASSET_PATH,\n });\n}\n\n/**\n * Remove an asset from the database\n * @param id ID of the asset\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAsset(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: ASSET_PATH });\n}\n\n/**\n * Add a list of new assets to the database\n * @param form_data List of asset data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAssets(form_data: Partial<PlaceAsset>[]) {\n return post(\n `${apiEndpoint()}${ASSET_PATH}/bulk`,\n JSON.stringify(form_data),\n {},\n ).pipe(map((l: any) => l.map((_: any) => processAsset(_))));\n}\n\n/**\n * Update a list of assets in the database\n * @param id ID of the asset\n * @param form_data New values for the asset\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAssets(\n form_data: Partial<PlaceAsset>[],\n method: 'put' | 'patch' = 'patch',\n) {\n const verb = method === 'put' ? put : patch;\n return verb(\n `${apiEndpoint()}${ASSET_PATH}/bulk`,\n JSON.stringify(form_data),\n {},\n ).pipe(map((l: any) => l.map((_: any) => processAsset(_))));\n}\n\n/**\n * Remove an asset from the database\n * @param id ID of the asset\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAssets(\n id_list: string[],\n query_params: Record<string, any> = {},\n) {\n const q = toQueryString(query_params);\n return del(`${apiEndpoint()}${ASSET_PATH}/bulk${q ? '?' + q : ''}`, {\n body: JSON.stringify(id_list),\n }).pipe(map((l: any) => l.map((_: any) => processAsset(_))));\n}\n\n///////////////////////////////////////////////////////////////\n//////////////////////// Asset Types //////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ASSET_TYPE_PATH = 'asset_types';\n\n/** Convert raw server data to an asset type object */\nfunction processAssetType(item: Partial<PlaceAssetType>) {\n return new PlaceAssetType(item);\n}\n\n/**\n * Query the available asset types\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAssetTypes(query_params: PlaceAssetTypeQueryOptions = {}) {\n return query({\n query_params,\n fn: processAssetType,\n path: ASSET_TYPE_PATH,\n });\n}\n\n/**\n * Get the data for an asset type\n * @param id ID of the asset type to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAssetType(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processAssetType,\n path: ASSET_TYPE_PATH,\n });\n}\n\n/**\n * Update the asset type in the database\n * @param id ID of the asset type\n * @param form_data New values for the asset\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAssetType(\n id: string,\n form_data: Partial<PlaceAssetType>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAssetType,\n path: ASSET_TYPE_PATH,\n });\n}\n\n/**\n * Add a new asset type to the database\n * @param form_data Application data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAssetType(form_data: Partial<PlaceAssetType>) {\n return create({\n form_data,\n query_params: {},\n fn: processAssetType,\n path: ASSET_TYPE_PATH,\n });\n}\n\n/**\n * Remove an asset type from the database\n * @param id ID of the asset type\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAssetType(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: ASSET_TYPE_PATH });\n}\n\n///////////////////////////////////////////////////////////////\n///////////////////// Asset Categories ////////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ASSET_CATEGORY_PATH = 'asset_categories';\n\n/** Convert raw server data to an asset category object */\nfunction processAssetCategory(item: Partial<PlaceAssetCategory>) {\n return new PlaceAssetCategory(item);\n}\n\n/**\n * Query the available asset categories\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAssetCategories(\n query_params: PlaceAssetCategoryQueryOptions = {},\n) {\n return query({\n query_params,\n fn: processAssetCategory,\n path: ASSET_CATEGORY_PATH,\n });\n}\n\n/**\n * Get the data for an asset category\n * @param id ID of the asset category to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAssetCategory(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processAssetCategory,\n path: ASSET_CATEGORY_PATH,\n });\n}\n\n/**\n * Update the asset category in the database\n * @param id ID of the asset category\n * @param form_data New values for the asset category\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAssetCategory(\n id: string,\n form_data: Partial<PlaceAssetCategory>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAssetCategory,\n path: ASSET_CATEGORY_PATH,\n });\n}\n\n/**\n * Add a new asset category to the database\n * @param form_data Asset category data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAssetCategory(form_data: Partial<PlaceAssetCategory>) {\n return create({\n form_data,\n query_params: {},\n fn: processAssetCategory,\n path: ASSET_CATEGORY_PATH,\n });\n}\n\n/**\n * Remove an asset category from the database\n * @param id ID of the asset category\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAssetCategory(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: ASSET_CATEGORY_PATH });\n}\n\n///////////////////////////////////////////////////////////////\n////////////////// Asset Purchase Orders //////////////////\n///////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nconst ASSET_PURCHASE_ORDER_PATH = 'asset_purchase_orders';\n\n/** Convert raw server data to an asset purchase order object */\nfunction processAssetPurchaseOrder(item: Partial<PlaceAssetPurchaseOrder>) {\n return new PlaceAssetPurchaseOrder(item);\n}\n\n/**\n * Query the available asset purchase orders\n * @param query_params Query parameters to add the to request URL\n */\nexport function queryAssetPurchaseOrders(\n query_params: PlaceAssetPurchaseOrderQueryOptions = {},\n) {\n return query({\n query_params,\n fn: processAssetPurchaseOrder,\n path: ASSET_PURCHASE_ORDER_PATH,\n });\n}\n\n/**\n * Get the data for an asset purchase order\n * @param id ID of the asset purchase order to retrieve\n * @param query_params Query parameters to add the to request URL\n */\nexport function showAssetPurchaseOrder(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processAssetPurchaseOrder,\n path: ASSET_PURCHASE_ORDER_PATH,\n });\n}\n\n/**\n * Update the asset purchase order in the database\n * @param id ID of the asset purchase order\n * @param form_data New values for the asset purchase order\n * @param query_params Query parameters to add the to request URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateAssetPurchaseOrder(\n id: string,\n form_data: Partial<PlaceAssetPurchaseOrder>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processAssetPurchaseOrder,\n path: ASSET_PURCHASE_ORDER_PATH,\n });\n}\n\n/**\n * Add a new asset purchase order to the database\n * @param form_data Asset purchase order data\n * @param query_params Query parameters to add the to request URL\n */\nexport function addAssetPurchaseOrder(\n form_data: Partial<PlaceAssetPurchaseOrder>,\n) {\n return create({\n form_data,\n query_params: {},\n fn: processAssetPurchaseOrder,\n path: ASSET_PURCHASE_ORDER_PATH,\n });\n}\n\n/**\n * Remove an asset purchase order from the database\n * @param id ID of the asset purchase order\n * @param query_params Query parameters to add the to request URL\n */\nexport function removeAssetPurchaseOrder(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: ASSET_PURCHASE_ORDER_PATH });\n}\n","export class PlaceShortUrl {\n readonly id: string;\n readonly name: string;\n readonly uri: string;\n readonly description: string;\n readonly user_id: string;\n readonly user_email: string;\n readonly user_name: string;\n readonly redirect_count: number;\n readonly enabled: boolean;\n readonly valid_from: string;\n readonly valid_until: string;\n readonly authority_id: string;\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceShortUrl>) {\n this.id = data.id || '';\n this.name = data.name || '';\n this.uri = data.uri || '';\n this.description = data.description || '';\n this.user_id = data.user_id || '';\n this.user_email = data.user_email || '';\n this.user_name = data.user_name || '';\n this.redirect_count = data.redirect_count || 0;\n this.enabled = data.enabled ?? true;\n this.valid_from = data.valid_from || '';\n this.valid_until = data.valid_until || '';\n this.authority_id = data.authority_id || '';\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n","import { create, query, remove, show, update } from '../api';\nimport { apiEndpoint } from '../auth';\nimport { get } from '../http/functions';\nimport { toQueryString } from '../utilities/api';\nimport { PlaceShortUrl } from './short-url.class';\nimport {\n PlaceQrCodeOptions,\n PlaceShortUrlPngQrOptions,\n PlaceShortUrlQueryOptions,\n} from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'short_url';\n\n/** Convert raw server data to a short URL object */\nfunction processShortUrl(item: Partial<PlaceShortUrl>) {\n return new PlaceShortUrl(item);\n}\n\n/**\n * Query the available short URLs\n * @param query_params Query parameters to add to the request URL\n */\nexport function queryShortUrls(query_params: PlaceShortUrlQueryOptions = {}) {\n return query({\n query_params,\n fn: processShortUrl,\n path: PATH,\n });\n}\n\n/**\n * Get the data for a short URL\n * @param id ID of the short URL to retrieve\n * @param query_params Query parameters to add to the request URL\n */\nexport function showShortUrl(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processShortUrl,\n path: PATH,\n });\n}\n\n/**\n * Update a short URL in the database\n * @param id ID of the short URL\n * @param form_data New values for the short URL\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateShortUrl(\n id: string,\n form_data: Partial<PlaceShortUrl>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processShortUrl,\n path: PATH,\n });\n}\n\n/**\n * Add a new short URL to the database\n * @param form_data Short URL data\n */\nexport function addShortUrl(form_data: Partial<PlaceShortUrl>) {\n return create({\n form_data,\n query_params: {},\n fn: processShortUrl,\n path: PATH,\n });\n}\n\n/**\n * Remove a short URL from the database\n * @param id ID of the short URL\n * @param query_params Query parameters to add to the request URL\n */\nexport function removeShortUrl(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: PATH });\n}\n\n/**\n * Get the redirect URL for a short URL.\n * Returns the full redirect URL that can be used to navigate to the short URL destination.\n * @param id ID of the short URL\n */\nexport function shortUrlRedirectUrl(\n id: string,\n): string {\n return `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/redirect`;\n}\n\n/**\n * Get an SVG QR code for a short URL\n * @param id ID of the short URL\n */\nexport function getShortUrlQrCodeSvg(id: string) {\n return get(\n `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/qr_code.svg`,\n { response_type: 'text' },\n );\n}\n\n/**\n * Get the URL for a PNG QR code for a short URL.\n * Use this URL directly in an img tag or fetch it separately.\n * @param id ID of the short URL\n * @param options Options including size (between 72px and 512px)\n */\nexport function shortUrlQrCodePngUrl(\n id: string,\n options: PlaceShortUrlPngQrOptions = {},\n): string {\n const q = toQueryString(options);\n return `${apiEndpoint()}${PATH}/${encodeURIComponent(id)}/qr_code.png${q ? '?' + q : ''}`;\n}\n\n/**\n * Get the URL for generating a QR code with user-defined content.\n * @param options Options for QR code generation including content, format, and size\n */\nexport function qrCodeUrl(options: PlaceQrCodeOptions): string {\n const { format = 'svg', ...params } = options;\n const query_params = { ...params, format };\n const q = toQueryString(query_params);\n return `${apiEndpoint()}${PATH}/qr_code${q ? '?' + q : ''}`;\n}\n\n/**\n * Generate an SVG QR code with user-defined content.\n * For PNG format, use qrCodeUrl() and fetch the URL directly.\n * @param options Options for QR code generation including content and size\n */\nexport function generateQrCode(options: Omit<PlaceQrCodeOptions, 'format'>) {\n const query_params = { ...options, format: 'svg' };\n const q = toQueryString(query_params);\n return get(`${apiEndpoint()}${PATH}/qr_code${q ? '?' + q : ''}`, {\n response_type: 'text',\n });\n}\n","/** Storage type enumeration */\nexport type StorageType = 's3' | 'azure' | 'google';\n\nexport class PlaceStorage {\n readonly id: string;\n readonly storage_type: StorageType | null;\n readonly bucket_name: string;\n readonly region: string;\n readonly access_key: string;\n readonly access_secret: string;\n readonly authority_id: string;\n readonly endpoint: string;\n readonly is_default: boolean;\n readonly ext_filter: string[];\n readonly mime_filter: string[];\n readonly created_at: number;\n readonly updated_at: number;\n\n constructor(data: Partial<PlaceStorage>) {\n this.id = data.id || '';\n this.storage_type = data.storage_type || null;\n this.bucket_name = data.bucket_name || '';\n this.region = data.region || '';\n this.access_key = data.access_key || '';\n this.access_secret = data.access_secret || '';\n this.authority_id = data.authority_id || '';\n this.endpoint = data.endpoint || '';\n this.is_default = data.is_default ?? false;\n this.ext_filter = data.ext_filter || [];\n this.mime_filter = data.mime_filter || [];\n this.created_at = data.created_at || 0;\n this.updated_at = data.updated_at || 0;\n }\n}\n","import { create, query, remove, show, update } from '../resources/functions';\nimport { PlaceStorage } from './storage.class';\nimport { PlaceStorageQueryOptions } from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'storages';\n\n/** Convert raw server data to a storage object */\nfunction processStorage(item: Partial<PlaceStorage>) {\n return new PlaceStorage(item);\n}\n\n/**\n * Query the available storages\n * @param query_params Query parameters to add to the request URL\n */\nexport function queryStorages(query_params: PlaceStorageQueryOptions = {}) {\n return query({\n query_params,\n fn: processStorage,\n path: PATH,\n });\n}\n\n/**\n * Get the data for a storage\n * @param id ID of the storage to retrieve\n * @param query_params Query parameters to add to the request URL\n */\nexport function showStorage(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return show({\n id,\n query_params,\n fn: processStorage,\n path: PATH,\n });\n}\n\n/**\n * Update a storage in the database\n * @param id ID of the storage\n * @param form_data New values for the storage\n * @param method HTTP verb to use on request. Defaults to `patch`\n */\nexport function updateStorage(\n id: string,\n form_data: Partial<PlaceStorage>,\n method: 'put' | 'patch' = 'patch',\n) {\n return update({\n id,\n form_data,\n query_params: {},\n method,\n fn: processStorage,\n path: PATH,\n });\n}\n\n/**\n * Add a new storage to the database\n * @param form_data Storage data\n */\nexport function addStorage(form_data: Partial<PlaceStorage>) {\n return create({\n form_data,\n query_params: {},\n fn: processStorage,\n path: PATH,\n });\n}\n\n/**\n * Remove a storage from the database\n * @param id ID of the storage\n * @param query_params Query parameters to add to the request URL\n */\nexport function removeStorage(\n id: string,\n query_params: Record<string, any> = {},\n) {\n return remove({ id, query_params, path: PATH });\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { apiEndpoint } from '../auth';\nimport { get, post } from '../http/functions';\nimport { toQueryString } from '../utilities/api';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceGuestParticipant,\n PlaceKickReason,\n PlaceWebrtcMember,\n PlaceWebrtcRoomDetails,\n PlaceWebrtcRoomsQueryOptions,\n} from './interfaces';\n\n/**\n * @private\n */\nconst PATH = 'webrtc';\n\n/**\n * Query the list of public chat rooms for the current domain\n * @param query_params Query parameters to add to the request URL\n */\nexport function queryWebrtcRooms(\n query_params: PlaceWebrtcRoomsQueryOptions = {},\n): Observable<PlaceWebrtcRoomDetails[]> {\n const query = toQueryString(query_params);\n const url = `${apiEndpoint()}${PATH}/rooms${query ? '?' + query : ''}`;\n return get(url).pipe(map((resp: HashMap) => resp as PlaceWebrtcRoomDetails[]));\n}\n\n/**\n * Get the details of a public chat room\n * @param system_id Either a system ID or a unique permalink\n */\nexport function showWebrtcRoom(\n system_id: string,\n): Observable<PlaceWebrtcRoomDetails> {\n const url = `${apiEndpoint()}${PATH}/room/${encodeURIComponent(system_id)}`;\n return get(url).pipe(map((resp: HashMap) => resp as PlaceWebrtcRoomDetails));\n}\n\n/**\n * Get a list of connected users in a chat session\n * @param session_id ID of the chat session\n */\nexport function webrtcSessionMembers(\n session_id: string,\n): Observable<PlaceWebrtcMember[]> {\n const url = `${apiEndpoint()}${PATH}/members/${encodeURIComponent(session_id)}`;\n return get(url).pipe(map((resp: HashMap) => resp as PlaceWebrtcMember[]));\n}\n\n/**\n * Request guest access to an anonymous chat room.\n * The guest participant details will be forwarded to any listening systems.\n * Additional fields provided as part of the guest post will also be forwarded.\n * @param system_id Either a system ID or a unique permalink\n * @param participant Guest participant details\n */\nexport function webrtcGuestEntry(\n system_id: string,\n participant: PlaceGuestParticipant,\n): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/guest_entry/${encodeURIComponent(system_id)}`;\n return post(url, participant).pipe(map(() => undefined));\n}\n\n/**\n * End a guest call gracefully.\n * This will remove the authentication token and close any open websockets.\n */\nexport function webrtcGuestExit(): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/guest/exit`;\n return post(url, {}).pipe(map(() => undefined));\n}\n\n/**\n * Kick a user from a chat session.\n * Similar to guest exit without the token expiration.\n * Other members of the call will stop communicating with them.\n * @param user_id ID of the user to kick\n * @param session_id ID of the chat session\n * @param reason Reason for kicking the user\n */\nexport function webrtcKickUser(\n user_id: string,\n session_id: string,\n reason: PlaceKickReason,\n): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/kick/${encodeURIComponent(user_id)}/${encodeURIComponent(session_id)}`;\n return post(url, reason).pipe(map(() => undefined));\n}\n\n/**\n * Transfer a user from one chat to another.\n * For authorized users to move people from one chat to another.\n * @param user_id ID of the user to transfer\n * @param session_id ID of the current chat session\n * @param connection_details Optional custom connection details for the transfer\n */\nexport function webrtcTransferUser(\n user_id: string,\n session_id: string,\n connection_details?: Record<string, unknown>,\n): Observable<void> {\n const url = `${apiEndpoint()}${PATH}/transfer/${encodeURIComponent(user_id)}/${encodeURIComponent(session_id)}`;\n return post(url, connection_details || {}).pipe(map(() => undefined));\n}\n\n/**\n * Get the WebRTC signaller websocket URL.\n * This is the endpoint for managing call participants.\n */\nexport function webrtcSignallerUrl(): string {\n const endpoint = apiEndpoint();\n const wsProtocol = endpoint.startsWith('https') ? 'wss:' : 'ws:';\n const httpProtocol = endpoint.startsWith('https') ? 'https:' : 'http:';\n return endpoint.replace(httpProtocol, wsProtocol) + `${PATH}/signaller`;\n}\n","import { __assign, __extends } from \"tslib\";\nimport { Subject, AnonymousSubject } from '../../Subject';\nimport { Subscriber } from '../../Subscriber';\nimport { Observable } from '../../Observable';\nimport { Subscription } from '../../Subscription';\nimport { ReplaySubject } from '../../ReplaySubject';\nvar DEFAULT_WEBSOCKET_CONFIG = {\n url: '',\n deserializer: function (e) { return JSON.parse(e.data); },\n serializer: function (value) { return JSON.stringify(value); },\n};\nvar WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT = 'WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }';\nvar WebSocketSubject = (function (_super) {\n __extends(WebSocketSubject, _super);\n function WebSocketSubject(urlConfigOrSource, destination) {\n var _this = _super.call(this) || this;\n _this._socket = null;\n if (urlConfigOrSource instanceof Observable) {\n _this.destination = destination;\n _this.source = urlConfigOrSource;\n }\n else {\n var config = (_this._config = __assign({}, DEFAULT_WEBSOCKET_CONFIG));\n _this._output = new Subject();\n if (typeof urlConfigOrSource === 'string') {\n config.url = urlConfigOrSource;\n }\n else {\n for (var key in urlConfigOrSource) {\n if (urlConfigOrSource.hasOwnProperty(key)) {\n config[key] = urlConfigOrSource[key];\n }\n }\n }\n if (!config.WebSocketCtor && WebSocket) {\n config.WebSocketCtor = WebSocket;\n }\n else if (!config.WebSocketCtor) {\n throw new Error('no WebSocket constructor can be found');\n }\n _this.destination = new ReplaySubject();\n }\n return _this;\n }\n WebSocketSubject.prototype.lift = function (operator) {\n var sock = new WebSocketSubject(this._config, this.destination);\n sock.operator = operator;\n sock.source = this;\n return sock;\n };\n WebSocketSubject.prototype._resetState = function () {\n this._socket = null;\n if (!this.source) {\n this.destination = new ReplaySubject();\n }\n this._output = new Subject();\n };\n WebSocketSubject.prototype.multiplex = function (subMsg, unsubMsg, messageFilter) {\n var self = this;\n return new Observable(function (observer) {\n try {\n self.next(subMsg());\n }\n catch (err) {\n observer.error(err);\n }\n var subscription = self.subscribe({\n next: function (x) {\n try {\n if (messageFilter(x)) {\n observer.next(x);\n }\n }\n catch (err) {\n observer.error(err);\n }\n },\n error: function (err) { return observer.error(err); },\n complete: function () { return observer.complete(); },\n });\n return function () {\n try {\n self.next(unsubMsg());\n }\n catch (err) {\n observer.error(err);\n }\n subscription.unsubscribe();\n };\n });\n };\n WebSocketSubject.prototype._connectSocket = function () {\n var _this = this;\n var _a = this._config, WebSocketCtor = _a.WebSocketCtor, protocol = _a.protocol, url = _a.url, binaryType = _a.binaryType;\n var observer = this._output;\n var socket = null;\n try {\n socket = protocol ? new WebSocketCtor(url, protocol) : new WebSocketCtor(url);\n this._socket = socket;\n if (binaryType) {\n this._socket.binaryType = binaryType;\n }\n }\n catch (e) {\n observer.error(e);\n return;\n }\n var subscription = new Subscription(function () {\n _this._socket = null;\n if (socket && socket.readyState === 1) {\n socket.close();\n }\n });\n socket.onopen = function (evt) {\n var _socket = _this._socket;\n if (!_socket) {\n socket.close();\n _this._resetState();\n return;\n }\n var openObserver = _this._config.openObserver;\n if (openObserver) {\n openObserver.next(evt);\n }\n var queue = _this.destination;\n _this.destination = Subscriber.create(function (x) {\n if (socket.readyState === 1) {\n try {\n var serializer = _this._config.serializer;\n socket.send(serializer(x));\n }\n catch (e) {\n _this.destination.error(e);\n }\n }\n }, function (err) {\n var closingObserver = _this._config.closingObserver;\n if (closingObserver) {\n closingObserver.next(undefined);\n }\n if (err && err.code) {\n socket.close(err.code, err.reason);\n }\n else {\n observer.error(new TypeError(WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT));\n }\n _this._resetState();\n }, function () {\n var closingObserver = _this._config.closingObserver;\n if (closingObserver) {\n closingObserver.next(undefined);\n }\n socket.close();\n _this._resetState();\n });\n if (queue && queue instanceof ReplaySubject) {\n subscription.add(queue.subscribe(_this.destination));\n }\n };\n socket.onerror = function (e) {\n _this._resetState();\n observer.error(e);\n };\n socket.onclose = function (e) {\n if (socket === _this._socket) {\n _this._resetState();\n }\n var closeObserver = _this._config.closeObserver;\n if (closeObserver) {\n closeObserver.next(e);\n }\n if (e.wasClean) {\n observer.complete();\n }\n else {\n observer.error(e);\n }\n };\n socket.onmessage = function (e) {\n try {\n var deserializer = _this._config.deserializer;\n observer.next(deserializer(e));\n }\n catch (err) {\n observer.error(err);\n }\n };\n };\n WebSocketSubject.prototype._subscribe = function (subscriber) {\n var _this = this;\n var source = this.source;\n if (source) {\n return source.subscribe(subscriber);\n }\n if (!this._socket) {\n this._connectSocket();\n }\n this._output.subscribe(subscriber);\n subscriber.add(function () {\n var _socket = _this._socket;\n if (_this._output.observers.length === 0) {\n if (_socket && (_socket.readyState === 1 || _socket.readyState === 0)) {\n _socket.close();\n }\n _this._resetState();\n }\n });\n return subscriber;\n };\n WebSocketSubject.prototype.unsubscribe = function () {\n var _socket = this._socket;\n if (_socket && (_socket.readyState === 1 || _socket.readyState === 0)) {\n _socket.close();\n }\n this._resetState();\n _super.prototype.unsubscribe.call(this);\n };\n return WebSocketSubject;\n}(AnonymousSubject));\nexport { WebSocketSubject };\n//# sourceMappingURL=WebSocketSubject.js.map","import { WebSocketSubject } from './WebSocketSubject';\nexport function webSocket(urlConfigOrSource) {\n return new WebSocketSubject(urlConfigOrSource);\n}\n//# sourceMappingURL=webSocket.js.map","/** Commands allowed by Place */\nexport type PlaceCommand = 'bind' | 'unbind' | 'debug' | 'ignore' | 'exec';\n\n/** General Place websocket request metadata */\nexport interface PlaceCommandRequest {\n /** Unique request identifier */\n id: string | number;\n /** Type of the command to send to engine */\n cmd: PlaceCommand;\n /** System ID to perform the command */\n sys: string;\n /** Module on the given system to perform the command */\n mod: string;\n /** Index of the module in the system */\n index: number;\n /** Name of variable to `bind` or method to `exec` on the given module */\n name: string;\n /** Aruguments to pass to the method executed on the module */\n args?: any[];\n}\n\n/** Additional management metadata for a Place request */\nexport interface PlaceCommandRequestMetadata extends PlaceCommandRequest {\n /** Request and binding identifier */\n key: string;\n /** Request promise */\n promise?: Promise<any>;\n /** Resolve function for the request promise */\n resolve?: (_?: any) => void;\n /** Reject function for the request promise */\n reject?: (_?: any) => void;\n}\n\n/** Metadata describing the actor the request should be performed on */\nexport interface PlaceRequestOptions {\n /** System ID to perform the command */\n sys: string;\n /** Module on the given system to perform the command */\n mod: string;\n /** Index of the module in the system */\n index: number;\n /** Name of variable to `bind` or method to `exec` on the given module */\n name: string;\n}\n\n/** Place websocket exec request metadata */\nexport interface PlaceExecRequestOptions extends PlaceRequestOptions {\n args?: any[];\n}\n\n/** Websocket initialisation options */\nexport interface PlaceWebsocketOptions {\n /** Domain and port of the engine server */\n host?: string;\n /** Whether this endpoint is a fixed device */\n fixed?: boolean;\n /** Whether to use the secure communcations protocol */\n secure?: boolean;\n}\n\n/** Place webscoket API response */\nexport interface PlaceResponse {\n /** ID of the associated request */\n id: string | number;\n /** Response type */\n type: 'success' | 'error' | 'notify' | 'debug';\n /** Error code */\n code?: number;\n /** New value of binding if `notify` or return value from an `exec */\n value?: any;\n /** Request metadata */\n meta?: PlaceRequestOptions;\n /** Debug module */\n mod?: string;\n /** Debug module */\n klass?: string;\n /** Log message level */\n level?: PlaceLogLevel;\n /** Debug message */\n msg?: string;\n}\n\n/** Possible error codes returned by Place */\nexport enum PlaceErrorCodes {\n PARSE_ERROR = 0,\n BAD_REQUEST = 1,\n ACCESS_DENIED = 2,\n REQUEST_FAILED = 3,\n UNKNOWN_CMD = 4,\n SYS_NOT_FOUND = 5,\n MOD_NOT_FOUND = 6,\n UNEXPECTED_FAILURE = 7,\n}\n\n/** Simple interface for a network error response */\nexport interface SimpleNetworkError {\n /** Status code of the error */\n status: number;\n /** Details aboun the error */\n message: string;\n}\n\n/** Logging levels of debug messages */\nexport enum PlaceLogLevel {\n Info = 'info',\n Debug = 'debug',\n Warning = 'warn',\n Error = 'error',\n Fatal = 'fatal',\n Trace = 'trace',\n}\n\n/** Metadata associated with Place Debug events */\nexport interface PlaceDebugEvent {\n /** ID of the module associated with the event */\n mod_id: string;\n /** Module associated with the event */\n module: string;\n /** Logically class name of the module driver */\n class_name: string;\n /** Logging level of the message */\n level: PlaceLogLevel;\n /** Contents of the debug event */\n message: string;\n /** Unix epoch of the message arrival in seconds */\n time: number;\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nimport { HashMap } from '../utilities/types';\nimport { MockPlaceWebsocketSystem } from './mock-system';\n\nexport class MockPlaceWebsocketModule {\n [name: string]: any;\n\n constructor(\n protected _system: MockPlaceWebsocketSystem,\n properties: HashMap,\n ) {\n const proto_fn = Object.getOwnPropertyNames(\n Object.getPrototypeOf(properties),\n ).filter((_) => _.startsWith('$'));\n for (const key in properties) {\n /* istanbul ignore else */\n if (\n properties.hasOwnProperty(key) &&\n properties[key] !== undefined\n ) {\n if (properties[key] instanceof Function) {\n this.addMethod(key, properties[key]);\n } else {\n this.addProperty(key, properties[key]);\n }\n }\n }\n for (const fn of proto_fn) {\n if (properties[fn] instanceof Function) {\n this.addMethod(fn, properties[fn]);\n }\n }\n }\n\n /**\n * Call method on the module\n * @param command Name of the method to call on the module\n * @param args Array of arguments to pass to the method being called\n */\n public call<T = any>(command: string, args: any[] = []): T | null {\n if (this[`$${command}`] instanceof Function) {\n return this[`$${command}`](...args) as T;\n }\n return null;\n }\n\n /**\n * Subscribe to value changes on the given property\n * @param prop_name Name of the property\n * @param next Callback for changes to the property\n */\n public listen<T = any>(prop_name: string): Observable<T> {\n if (\n !this[`_${prop_name}`] &&\n !(this[`_${prop_name}_obs`] instanceof Observable) &&\n !this[prop_name]\n ) {\n this.addProperty<T>(prop_name, null);\n }\n const observer = this[`_${prop_name}_obs`] as Observable<T>;\n return observer;\n }\n\n /**\n * Add method to module\n * @param prop_name Name of the method\n * @param fn Method logic\n */\n private addMethod(prop_name: string, fn: (...args: any[]) => any) {\n if (prop_name[0] !== '$') {\n prop_name = `$${prop_name}`;\n }\n this[prop_name] = fn;\n }\n\n /**\n * Add observable property to module\n * @param prop_name Name of the property\n * @param value Initial value of the property\n */\n private addProperty<T = any>(prop_name: string, value: any) {\n if (prop_name[0] === '$') {\n prop_name = prop_name.replace('$', '');\n }\n this[`_${prop_name}`] = new BehaviorSubject<T>(value);\n this[`_${prop_name}_obs`] = this[`_${prop_name}`].asObservable();\n Object.defineProperty(this, prop_name, {\n get: () => this[`_${prop_name}`].getValue(),\n set: (v) => this[`_${prop_name}`].next(v),\n });\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { MockPlaceWebsocketModule } from './mock-module';\n\nexport class MockPlaceWebsocketSystem {\n [name: string]: any;\n\n constructor(properties: HashMap) {\n for (const key in properties) {\n /* istanbul ignore else */\n if (properties.hasOwnProperty(key) && properties[key]) {\n /* istanbul ignore else */\n if (properties[key] instanceof Array) {\n properties[key].forEach((i: HashMap) => {\n this.addModule(key, i);\n });\n }\n }\n }\n }\n\n /**\n * Add new module to the system\n * @param mod_name Module class\n * @param properties Properties of the new module\n */\n private addModule(mod_name: string, properties: HashMap) {\n if (!this[mod_name]) {\n this[mod_name] = [];\n }\n this[mod_name].push(new MockPlaceWebsocketModule(this, properties));\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { MockPlaceWebsocketSystem } from './mock-system';\n\n/**\n * @private\n * List of registered mock systems for websocket bindings\n */\nconst _mock_systems: HashMap<MockPlaceWebsocketSystem> = {};\n\n/** Register a mock system for websocket bindings */\nexport function registerSystem(\n id: string,\n details: HashMap<HashMap[]>,\n): MockPlaceWebsocketSystem {\n _mock_systems[id] = new MockPlaceWebsocketSystem(details);\n return _mock_systems[id];\n}\n\n/** Retrieve a mock system for websocket bindings */\nexport function mockSystem(id: string): MockPlaceWebsocketSystem {\n return _mock_systems[id];\n}\n\n/** Remove a mock system for websocket bindings */\nexport function deregisterSystem(id: string): void {\n delete _mock_systems[id];\n}\n","import { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\n\nimport {\n apiEndpoint,\n apiKey,\n authority,\n host,\n httpRoute,\n invalidateToken,\n isFixedDevice,\n isMock,\n isSecure,\n needsTokenHeader,\n refreshAuthority,\n token,\n} from '../auth/functions';\nimport {\n clearAsyncTimeout,\n destroyWaitingAsync,\n timeout,\n} from '../utilities/async';\nimport { isMobileSafari, log, simplifiedTime } from '../utilities/general';\nimport { HashMap } from '../utilities/types';\nimport {\n PlaceCommandRequest,\n PlaceCommandRequestMetadata,\n PlaceDebugEvent,\n PlaceErrorCodes,\n PlaceExecRequestOptions,\n PlaceLogLevel,\n PlaceRequestOptions,\n PlaceResponse,\n SimpleNetworkError,\n} from './interfaces';\nimport { mockSystem } from './mock';\nimport { MockPlaceWebsocketModule } from './mock-module';\nimport { MockPlaceWebsocketSystem } from './mock-system';\n\n/**\n * @private\n * Time in seconds to ping the server to keep the websocket connection alive\n */\nconst KEEP_ALIVE = 15;\n/**\n * @private\n * Global counter for websocket request IDs\n */\nlet REQUEST_COUNT = 0;\n/**\n * @private\n * Websocket for connecting to engine\n */\nlet _websocket: WebSocketSubject<any> | Subject<any> | undefined;\nlet _websocket_id = 0;\n/**\n * @private\n * Request promises\n */\nconst _requests: { [id: string]: PlaceCommandRequestMetadata } = {};\n/**\n * @private\n * Subjects for listening to values of bindings\n */\nconst _binding: { [id: string]: BehaviorSubject<any> } = {};\n/**\n * @private\n * Observers for the binding subjects\n */\nconst _observers: { [id: string]: Observable<any> } = {};\n/**\n * @private\n * Observers for the binding subjects\n */\nconst _listeners: { [id: string]: Subscription } = {};\n/**\n * @private\n * BehaviorSubject holding the connection status of the websocket\n */\nconst _status = new BehaviorSubject<boolean>(false);\n_observers._place_os_status = _status.asObservable();\n/**\n * @private\n * BehaviorSubject holding the connection past websocket\n */\nconst _sync = new BehaviorSubject<[number, number]>([0, 0]);\n_observers._place_os_sync = _sync.asObservable();\nlet _connect_time = Date.now();\n/**\n * @private\n * Interval ID for the server ping callback\n */\nlet _keep_alive: number | undefined;\n/**\n * @private\n * Number of connection attempts made before the session is established\n */\nlet _connection_attempts: number = 0;\n/**\n * @private\n * Promise to handle connections to the websocket API\n */\nlet _connection_promise: Promise<void> | null = null;\n/**\n * @private\n * Timer to check the initial health of the websocket connection\n */\nlet _health_check: number | undefined;\nlet _last_pong = 0;\n/**\n * @private\n * Delay in milliseconds to cancel a request\n */\nexport const REQUEST_TIMEOUT = 10 * 1000;\n\n/** Listener for debugging events */\nexport const debug_events = new Subject<PlaceDebugEvent>();\n_observers._place_os_debug_events = debug_events.asObservable();\n\n/* istanbul ignore next */\n/**\n * @private\n * Cleanup websocket connection in tests\n */\nexport function cleanupRealtime() {\n _websocket?.complete();\n _websocket = undefined;\n REQUEST_COUNT = 0;\n for (const key in _binding) {\n if (_binding[key]) {\n delete _binding[key];\n }\n }\n for (const key in _observers) {\n if (_observers[key]) {\n delete _observers[key];\n }\n }\n _observers._place_os_status = _status.asObservable();\n for (const key in _listeners) {\n if (_listeners[key]) {\n delete _listeners[key];\n }\n }\n for (const key in _requests) {\n if (_requests[key]) {\n delete _requests[key];\n }\n }\n _status.next(false);\n clearInterval(_keep_alive);\n clearTimeout(_health_check);\n destroyWaitingAsync();\n}\n\nexport function websocketRoute() {\n return apiEndpoint().indexOf('/control/') >= 0\n ? '/control/websocket'\n : `${httpRoute()}/systems/control`;\n}\n\n/** Whether the websocket is connected */\nexport function isConnected(): boolean {\n return _status.getValue();\n}\n\n/**\n * Listen to websocket status changes\n */\nexport function status(): Observable<boolean> {\n return _observers._place_os_status;\n}\n\n/**\n * Listen to details about the connection status.\n * First value is the number of the current websocket connection.\n * Second value is the time the successful websocket connection was alive.\n * @returns\n */\nexport function connectionState(): Observable<[number, number]> {\n return _observers._place_os_sync;\n}\n\n/**\n * Listen to binding changes on the given status variable. DOES NOT BIND TO VARIABLE\n * @param binding_details Binding details\n */\nexport function listen<T = any>(\n binding_details: PlaceRequestOptions,\n): Observable<T>;\nexport function listen<T = any>(\n binding_details: PlaceRequestOptions,\n bindings: HashMap<BehaviorSubject<T>> = _binding,\n observers: HashMap<Observable<T>> = _observers,\n): Observable<T> {\n const key = `${binding_details.sys}|${binding_details.mod}_${binding_details.index}|${binding_details.name}`;\n /* istanbul ignore else */\n if (!bindings[key]) {\n bindings[key] = new BehaviorSubject<T>(undefined as any);\n observers[key] = bindings[key].asObservable();\n }\n return observers[key];\n}\n\n/**\n * Get current binding value\n * @param options Binding details\n */\nexport function value<T = any>(options: PlaceRequestOptions): T | undefined;\nexport function value<T = any>(\n options: PlaceRequestOptions,\n bindings: HashMap<BehaviorSubject<T>> = _binding,\n): T | void {\n const key = `${options.sys}|${options.mod}_${options.index}|${options.name}`;\n if (bindings[key]) {\n return bindings[key].getValue() as T;\n }\n return;\n}\n\n/**\n * Bind to status variable on the given system module\n * @param options Binding request options\n */\nexport function bind(\n options: PlaceRequestOptions,\n timeout_delay?: number,\n): Promise<void>;\nexport function bind(\n options: PlaceRequestOptions,\n timeout_delay: number = 0,\n post: (_: PlaceCommandRequest, t?: number) => Promise<void> = send,\n): Promise<void> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'bind',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * Unbind from a status variable on the given system module\n * @param options Unbind request options\n */\nexport function unbind(\n options: PlaceRequestOptions,\n timeout_delay?: number,\n): Promise<void>;\nexport function unbind(\n options: PlaceRequestOptions,\n timeout_delay: number = 0,\n post: (_: PlaceCommandRequest, t?: number) => Promise<void> = send,\n): Promise<void> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'unbind',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * Execute method on the given system module\n * @param options Exec request options\n */\nexport function execute<T = void>(\n options: PlaceExecRequestOptions,\n timeout_delay: number = REQUEST_TIMEOUT,\n post: (_: PlaceCommandRequest, t?: number) => Promise<T> = send,\n): Promise<T> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'exec',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * Listen to debug logging for on the given system module binding\n * @param options Debug request options\n */\nexport function debug(\n options: PlaceRequestOptions,\n timeout_delay?: number,\n): Promise<void>;\nexport function debug(\n options: PlaceRequestOptions,\n timeout_delay: number = REQUEST_TIMEOUT,\n post: (_: PlaceCommandRequest, t?: number) => Promise<void> = send,\n): Promise<void> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'debug',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * Stop debug logging on the given system module binding\n * @param options Debug request options\n */\nexport function ignore(\n options: PlaceRequestOptions,\n timeout_delay?: number,\n): Promise<void>;\nexport function ignore(\n options: PlaceRequestOptions,\n timeout_delay: number = REQUEST_TIMEOUT,\n post: (_: PlaceCommandRequest, t?: number) => Promise<void> = send,\n): Promise<void> {\n const request: PlaceCommandRequest = {\n id: ++REQUEST_COUNT,\n cmd: 'ignore',\n ...options,\n };\n return post(request, timeout_delay);\n}\n\n/**\n * @private\n * Send request to engine through the websocket connection\n * @param request New request to post to the server\n */\nexport function send<T = any>(\n request: PlaceCommandRequest,\n timeout_delay: number = REQUEST_TIMEOUT,\n tries: number = 0,\n): Promise<T> {\n const key = `${request.cmd}|${request.sys}|${request.mod}${request.index}|${\n request.name\n }|${request.args}|${simplifiedTime()}`;\n /* istanbul ignore else */\n if (!_requests[key]) {\n const req: PlaceCommandRequestMetadata = { ...request, key };\n req.promise = new Promise((resolve, reject) => {\n const retry = () => {\n delete _requests[key];\n (_requests[key] as any) = null;\n send(request, timeout_delay, tries).then(\n (_) => resolve(_),\n (_) => reject(_),\n );\n };\n if (_websocket && isConnected()) {\n if (isMock()) handleMockSend(request, _websocket, _listeners);\n req.resolve = resolve;\n req.reject = reject;\n const binding = `${request.sys}, ${request.mod}_${request.index}, ${request.name}`;\n log(\n 'WS',\n `[${request.cmd.toUpperCase()}](${request.id}) ${binding}`,\n request.args,\n );\n _websocket.next(request);\n if (timeout_delay > 0) {\n timeout(\n `${key}`,\n () => {\n reject('Request timed out.');\n delete _requests[key];\n (_requests[key] as any) = null;\n },\n timeout_delay,\n );\n }\n } else if (!_connection_promise) {\n connect().then(() => retry());\n } else {\n setTimeout(() => retry(), 1000);\n }\n });\n _requests[key] = req;\n } else {\n log('WS', `Request already in progress. Waiting...`, request);\n }\n return _requests[key].promise as Promise<any>;\n}\n\n/**\n * @private\n * Callback for messages from the server\n * @param message Message from the engine server\n */\nexport function onMessage(message: PlaceResponse | 'pong'): void {\n if (message !== 'pong' && message instanceof Object) {\n if (message.type === 'notify' && message.meta) {\n handleNotify(message.meta, message.value);\n } else if (message.type === 'success') {\n handleSuccess(message);\n } else if (message.type === 'debug') {\n log(\n 'WS',\n `[DEBUG] ${message.mod}${message.klass || ''} →`,\n message.msg,\n );\n const meta = message.meta || { mod: '', index: '' };\n debug_events.next({\n mod_id: message.mod || '<empty>',\n module: `${meta.mod}_${meta.index}`,\n class_name: message.klass || '<empty>',\n message: message.msg || '<empty>',\n level: message.level || PlaceLogLevel.Debug,\n time: Math.floor(new Date().getTime() / 1000),\n });\n } else if (message.type === 'error') {\n handleError(message);\n } else if (!(message as any).cmd) {\n // Not mock message\n log('WS', 'Invalid websocket message', message, 'error');\n }\n clearAsyncTimeout(`${message.id}`);\n } else if (message === 'pong') {\n _last_pong = Date.now();\n log('WS', `Pong!`);\n }\n}\n\n/**\n * @private\n * Handle websocket success response\n * @param message Success message\n */\nexport function handleSuccess(message: PlaceResponse) {\n const request = Object.keys(_requests)\n .map((i) => _requests[i])\n .find((item) => item?.id === message.id);\n log('WS', `[SUCCESS](${message.id})`);\n /* istanbul ignore else */\n if (request && request.resolve) {\n request.resolve(message.value);\n delete _requests[request.key];\n }\n}\n\n/**\n * @private\n * Handle websocket request error\n * @param message Error response\n */\nexport function handleError(message: PlaceResponse) {\n let type = 'UNEXPECTED FAILURE';\n switch (message.code) {\n case PlaceErrorCodes.ACCESS_DENIED:\n type = 'ACCESS DENIED';\n break;\n case PlaceErrorCodes.BAD_REQUEST:\n type = 'BAD REQUEST';\n break;\n case PlaceErrorCodes.MOD_NOT_FOUND:\n type = 'MODULE NOT FOUND';\n break;\n case PlaceErrorCodes.SYS_NOT_FOUND:\n type = 'SYSTEM NOT FOUND';\n break;\n case PlaceErrorCodes.PARSE_ERROR:\n type = 'PARSE ERROR';\n break;\n case PlaceErrorCodes.REQUEST_FAILED:\n type = 'REQUEST FAILED';\n break;\n case PlaceErrorCodes.UNKNOWN_CMD:\n type = 'UNKNOWN COMMAND';\n break;\n }\n log(\n 'WS',\n `[ERROR] ${type}(${message.id}): ${message.msg}`,\n undefined,\n 'error',\n );\n const request = Object.keys(_requests)\n .map((key) => _requests[key])\n .filter((_) => _)\n .find((request) => request.id === message.id);\n if (request && request.reject) {\n request.reject(message);\n clearAsyncTimeout(`${request.key}`);\n delete _requests[request.key];\n }\n}\n\n/**\n * @private\n * Update the current value of the binding\n * @param options Binding details\n * @param updated_value New binding value\n */\nexport function handleNotify<T = any>(\n options: PlaceRequestOptions,\n updated_value: T,\n bindings: HashMap<BehaviorSubject<T>> = _binding,\n observers: HashMap<Observable<T>> = _observers,\n): void {\n const key = `${options.sys}|${options.mod}_${options.index}|${options.name}`;\n if (!bindings[key]) {\n bindings[key] = new BehaviorSubject<T>(null as any);\n observers[key] = bindings[key].asObservable();\n }\n const binding = `${options.sys}, ${options.mod}_${options.index}, ${options.name}`;\n log('WS', `[NOTIFY] ${binding} changed`, [\n bindings[key].getValue(),\n '→',\n updated_value,\n ]);\n bindings[key].next(updated_value);\n}\n\n/**\n * @private\n * Connect to engine websocket\n */\nexport function connect(tries: number = 0): Promise<void> {\n if (_connection_promise == null) {\n _connection_promise = new Promise<void>((resolve) => {\n if (tries > 40) {\n return location.reload();\n }\n _connection_attempts++;\n _connect_time = Date.now();\n _websocket = (\n isMock() ? createMockWebSocket() : createWebsocket()\n ) as any;\n if (_websocket) {\n log('WS(Debug)', `Authority:`, [authority()]);\n log('WS', `Connecting to websocket...`);\n _websocket.subscribe(\n (resp: PlaceResponse) => {\n if (!_status.getValue()) {\n log('WS', `Connection established.`);\n resolve();\n }\n _status.next(true);\n _connection_attempts = 0;\n clearHealthCheck();\n onMessage(resp);\n },\n (err: SimpleNetworkError) => {\n _websocket = undefined;\n _connection_promise = null;\n _clearRequests();\n clearHealthCheck();\n onWebSocketError(err);\n },\n () => {\n _websocket = undefined;\n _connection_promise = null;\n _clearRequests();\n log('WS', `Connection closed by browser.`);\n _status.next(false);\n // Try reconnecting after 1 second\n reconnect();\n },\n );\n if (_keep_alive) clearInterval(_keep_alive);\n _last_pong = Date.now();\n ping();\n _keep_alive = setInterval(\n () => ping(),\n KEEP_ALIVE * 1000,\n ) as any;\n clearHealthCheck();\n _websocket_id += 1;\n _health_check = setTimeout(() => {\n log('WS', 'Unhealthy connection. Reconnecting...');\n _status.next(false);\n _connection_promise = null;\n reconnect();\n }, 30 * 1000) as any;\n } else {\n /* istanbul ignore else */\n if (!_websocket) {\n log(\n 'WS',\n `Failed to create websocket(${tries}). Retrying in ${\n 1000 * Math.min(10, tries + 1)\n }ms...`,\n undefined,\n 'error',\n );\n } else {\n log(\n 'WS',\n `Waiting on auth(${tries}). Retrying in ${\n 1000 * Math.min(10, tries + 1)\n }ms...`,\n [!!token(), !!authority()],\n 'info',\n );\n }\n setTimeout(\n () => {\n _connection_promise = null;\n connect(tries).then((_) => resolve(_));\n },\n 1000 * Math.min(10, ++tries),\n );\n }\n });\n }\n return _connection_promise;\n}\n\n/**\n * @private\n * Create websocket connection\n */\nexport function createWebsocket() {\n /* istanbul ignore if */\n if (!authority() || !token()) return null;\n const secure = isSecure() || location.protocol.indexOf('https') >= 0;\n let url = `ws${secure ? 's' : ''}://${host()}${websocketRoute()}${\n isFixedDevice() ? '?fixed_device=true' : ''\n }`;\n const tkn = token();\n let query =\n tkn === 'x-api-key' ? `api-key=${apiKey()}` : `bearer_token=${tkn}`;\n if (!needsTokenHeader() && !isMobileSafari()) {\n log('WS', `Authenticating through cookie...`);\n query += `;max-age=120;path=${websocketRoute()};`;\n query += `${secure ? 'secure;' : ''}samesite=strict`;\n document.cookie = query;\n log('WS', `Cookies:`, [document.cookie, query]);\n } else {\n log('WS', `Authenticating through URL query parameter...`);\n url += `${url.indexOf('?') >= 0 ? '&' : '?'}${query}`;\n }\n log(\n 'WS',\n `Creating websocket connection to ws${\n secure ? 's' : ''\n }://${host()}${websocketRoute()}`,\n );\n /* istanbul ignore next */\n return webSocket<any>({\n url,\n serializer: (data) =>\n typeof data === 'object' ? JSON.stringify(data) : data,\n deserializer: (data) => {\n let return_value = data.data;\n if (return_value === 'pong') return return_value;\n try {\n return JSON.parse(data.data);\n } catch (e) {\n return return_value;\n }\n },\n });\n}\n\n/**\n * @private\n * Close old websocket connect and open a new one\n */\nexport function reconnect() {\n _sync.next([_websocket_id, Date.now() - _connect_time]);\n /* istanbul ignore else */\n if (_websocket && isConnected()) {\n _websocket.complete();\n /* istanbul ignore else */\n if (_keep_alive) {\n clearInterval(_keep_alive);\n _keep_alive = undefined;\n }\n }\n log(\n 'WS',\n `Reconnecting in ${Math.min(\n 5000,\n _connection_attempts * 300 || 1000,\n )}ms...`,\n );\n timeout(\n 'reconnect',\n () => connect(),\n Math.min(5000, (_connection_attempts + 1) * 300 || 1000),\n );\n}\n\n/**\n * @private\n * Send ping through the websocket\n */\nexport function ping() {\n if (Date.now() - _last_pong > 4 * KEEP_ALIVE * 1000) {\n return reconnect();\n }\n _websocket?.next('ping');\n}\n\n/**\n * @private\n * Handle errors on the websocket\n * @param err Network error response\n */\nexport function onWebSocketError(err: SimpleNetworkError) {\n _status.next(false);\n log('WS', 'Websocket error:', err, undefined, 'error');\n /* istanbul ignore else */\n if (err.status === 401) {\n invalidateToken();\n }\n refreshAuthority();\n // Try reconnecting after 1 second\n reconnect();\n}\n\n/**\n * @private\n * Clear health check timer\n */\nexport function clearHealthCheck() {\n if (_health_check) {\n clearTimeout(_health_check);\n _health_check = undefined;\n }\n}\n\n/**\n * @private\n * Connect to engine websocket\n */\nexport function createMockWebSocket() {\n const websocket = new Subject<PlaceResponse | PlaceCommandRequest>();\n websocket.subscribe((resp: PlaceResponse | PlaceCommandRequest) =>\n onMessage(resp as PlaceResponse),\n );\n return websocket;\n}\n\n/**\n * @private\n * Send request to engine through the websocket connection\n * @param request New request to post to the server\n */\nexport function handleMockSend(\n request: PlaceCommandRequest,\n websocket: Subject<any>,\n listeners: HashMap<Subscription>,\n) {\n const key = `${request.sys}|${request.mod}_${request.index}|${request.name}`;\n const system: MockPlaceWebsocketSystem = mockSystem(request.sys);\n const module: MockPlaceWebsocketModule =\n system && system[request.mod]\n ? system[request.mod][request.index - 1 || 0]\n : null;\n if (module) {\n switch (request.cmd) {\n case 'bind':\n listeners[key] = module\n .listen(request.name)\n .subscribe((new_value) => {\n setTimeout(\n () => {\n websocket.next({\n type: 'notify',\n value: new_value,\n meta: request,\n });\n },\n Math.floor(Math.random() * 100 + 50), // Add natural delay before response\n );\n });\n break;\n case 'unbind':\n /* istanbul ignore else */\n if (listeners[key]) {\n listeners[key].unsubscribe();\n delete listeners[key];\n clearAsyncTimeout(`${key}`);\n }\n break;\n }\n timeout(\n `${request.id}-response`,\n () => {\n const resp = {\n id: request.id,\n type: 'success',\n value:\n request.cmd === 'exec'\n ? module.call(request.name, request.args)\n : null,\n } as PlaceResponse;\n websocket.next(resp);\n },\n 10,\n );\n } else {\n // Error determining system or module\n timeout(\n `${request.id}-error`,\n () =>\n websocket.next({\n id: request.id,\n type: 'error',\n code: system\n ? PlaceErrorCodes.SYS_NOT_FOUND\n : PlaceErrorCodes.MOD_NOT_FOUND,\n } as PlaceResponse),\n 10,\n );\n }\n}\n\nfunction _clearRequests() {\n for (const key in _requests) {\n if (_requests[key]) delete _requests[key];\n }\n}\n","import { Observable, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { clearAsyncTimeout, timeout } from '../utilities/async';\nimport { log } from '../utilities/general';\n\nimport { bind, listen, status, unbind, value } from './functions';\nimport { PlaceRequestOptions } from './interfaces';\nimport { PlaceModuleBinding } from './module';\n\nenum PENDING {\n NONE,\n BIND,\n UNBIND,\n}\n\nexport class PlaceVariableBinding<T = any> {\n /** Status variable name */\n public readonly name: string;\n /** Active pending state of the variable binding */\n private _pending = PENDING.NONE;\n /** Number of active bindings to this variable */\n private _binding_count: number = 0;\n /** Number of bindings to restore on reconnection */\n private _stale_bindings: number = 0;\n\n constructor(\n private _module: PlaceModuleBinding,\n _name: string,\n ) {\n this.name = _name;\n // Listen for state changes in the websocket connection\n status()\n .pipe(distinctUntilChanged())\n .subscribe((connected: boolean) => {\n if (\n connected &&\n (this._stale_bindings || this._pending === PENDING.BIND)\n ) {\n log('VAR', 'Re-binding to status variable', this.binding());\n this.rebind();\n } else if (!connected) {\n clearAsyncTimeout(\n `rebind:${JSON.stringify(this.binding())}`,\n );\n log(\n 'VAR',\n 'Binding dropped due to disconnection, re-binding when possible.',\n this.binding(),\n );\n this._stale_bindings =\n this._binding_count || this._stale_bindings;\n this._binding_count = 0;\n }\n });\n }\n\n /** Number of bindings to this status variable */\n public get count(): number {\n return this._binding_count;\n }\n\n /** Current value of the binding */\n public get value(): T | undefined {\n return value<T>(this.binding());\n }\n\n /**\n * Get an observable that emits the current value of the binding\n */\n public listen(): Observable<T> {\n return listen(this.binding());\n }\n\n /**\n * Subscribe to changes of the variable's binding value.\n * Note: Initial value emitted may be `undefined`\n * @param next Callback for changes to the bindings value\n */\n public subscribe(next: (value: T) => void): Subscription {\n return this.listen().subscribe(next);\n }\n\n public bindThenSubscribe(next: (value: T) => void): Subscription {\n const unbind = this.bind();\n return this.listen().subscribe({\n next,\n complete: () => unbind(),\n error: () => unbind(),\n });\n }\n\n /**\n * Bind to the status variable's value\n */\n public bind(): () => void {\n /* istanbul ignore else */\n if (\n (this._binding_count <= 0 && this._stale_bindings <= 0) ||\n this._pending === PENDING.UNBIND\n ) {\n this._pending = PENDING.BIND;\n bind(this.binding())\n .then(() => {\n this._binding_count++;\n this._pending = PENDING.NONE;\n })\n .catch(() => null);\n }\n return () => this.unbind();\n }\n\n /**\n * Unbind from status variable\n */\n public unbind() {\n if (this._binding_count === 1 && this._pending === PENDING.NONE) {\n this._pending = PENDING.UNBIND;\n unbind(this.binding()).then(() => {\n if (this._pending === PENDING.UNBIND)\n this._pending = PENDING.NONE;\n this._binding_count--;\n });\n } else {\n this._binding_count = Math.max(this._binding_count - 1, 0);\n }\n }\n\n /**\n * Rebind to the status variable\n */\n private async rebind() {\n if (!this._stale_bindings && this._pending !== PENDING.BIND) return;\n timeout(\n `rebind:${JSON.stringify(this.binding())}`,\n async () => {\n await bind(this.binding());\n this._binding_count = this._stale_bindings || 1;\n this._stale_bindings = 0;\n },\n 100,\n );\n }\n\n /**\n * Generate binding details for the status variable\n */\n private binding(): PlaceRequestOptions {\n return {\n sys: this._module.system.id,\n mod: this._module.name,\n index: this._module.index,\n name: this.name,\n };\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { execute, REQUEST_TIMEOUT } from './functions';\nimport { PlaceVariableBinding } from './status-variable';\nimport { PlaceSystemBinding } from './system';\n\nexport class PlaceModuleBinding {\n /** Mapping of module bindings */\n private _bindings: HashMap<PlaceVariableBinding> = {};\n\n constructor(\n private _system: PlaceSystemBinding,\n private _id: string,\n ) {}\n\n public get id(): string {\n return `${this.name}_${this.index}`;\n }\n\n /** Parent system of the module */\n public get system(): PlaceSystemBinding {\n return this._system;\n }\n\n /** Module index */\n public get index(): number {\n const parts = this._id.split('_');\n const index = parts.pop();\n return parseInt(index || '', 10) || 1;\n }\n\n /** Module name */\n public get name(): string {\n const parts = this._id.split('_');\n parts.pop();\n return parts.join('_');\n }\n\n /**\n * Get binding with the given name\n * @param name Name of the binding\n * @deprecated Use `variable` instead\n */\n public binding<T = any>(name: string) {\n if (!this._bindings[name]) {\n this._bindings[name] = new PlaceVariableBinding<T>(this, name);\n }\n return this._bindings[name] as PlaceVariableBinding<T>;\n }\n\n /**\n * Get binding with the given name\n * @param name Name of the binding\n */\n public variable<T = any>(name: string) {\n if (!this._bindings[name]) {\n this._bindings[name] = new PlaceVariableBinding<T>(this, name);\n }\n return this._bindings[name] as PlaceVariableBinding<T>;\n }\n\n /**\n * Execute method on the engine module\n * @param method Name of the method\n * @param args Array of arguments to pass to the method\n */\n public execute<T = any>(\n method: string,\n args?: any[],\n timeout_delay: number = REQUEST_TIMEOUT,\n ): Promise<T> {\n return execute<T>(\n {\n sys: this._system.id,\n mod: this.name,\n index: this.index,\n name: method,\n args,\n },\n timeout_delay,\n );\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { PlaceModuleBinding } from './module';\n\nexport class PlaceSystemBinding {\n /** Unique idetifier of the system */\n public readonly id: string;\n /** Mapping of engine modules within the system */\n private _module_list: HashMap<PlaceModuleBinding[]> = {};\n\n constructor(_id: string) {\n this.id = _id;\n }\n\n /**\n * Get binding interface for the given module\n * @param module_id ID of the module\n * @param index Index of the module within the system\n */\n public module(module_id: string, index: number = 1) {\n if (!module_id) {\n throw new Error('Invalid module ID');\n }\n const parts = module_id.split('_');\n // Check if module index is part of given ID\n if (parts.length > 1 && Number.isInteger(+parts[parts.length - 1])) {\n index = +parts[parts.length - 1];\n parts.pop();\n }\n // Make sure index is not invalid\n if (index < 1) {\n index = 1;\n }\n const module = parts.join('_');\n // Initialise module list for type\n if (!this._module_list[module]) {\n this._module_list[module] = [];\n }\n // Initialise module if it does not exist\n while (this._module_list[module].length < index) {\n this._module_list[module].push(\n new PlaceModuleBinding(\n this,\n `${module}_${this._module_list[module].length + 1}`,\n ),\n );\n }\n return this._module_list[module][index - 1];\n }\n}\n","import { HashMap } from '../utilities/types';\nimport { PlaceModuleBinding } from './module';\nimport { PlaceSystemBinding } from './system';\n\n/**\n * @private\n * Mapping of system IDs to binding interfaces\n */\nconst _system_list: HashMap<PlaceSystemBinding> = {};\n\n/**\n * Get binding interface for an engine system\n * @param system_id ID of the system\n */\nexport function getSystem(system_id: string): PlaceSystemBinding {\n if (!_system_list[system_id]) {\n _system_list[system_id] = new PlaceSystemBinding(system_id);\n }\n return _system_list[system_id];\n}\n\n/**\n * Get binding interface for an engine module\n * @param system_id ID of the system\n * @param module_id ID of the module withing the system\n * @param index Index of the module within the system\n */\nexport function getModule(\n system_id: string,\n module_id: string,\n index: number = 1,\n): PlaceModuleBinding {\n const system = getSystem(system_id);\n return system.module(module_id, index);\n}\n"],"names":["extendStatics","d","b","p","__extends","__","__assign","t","s","i","n","__rest","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","__generator","body","_","f","y","g","verb","v","op","__values","o","m","__read","r","ar","error","__spreadArray","to","from","pack","l","__await","__asyncGenerator","q","awaitReturn","a","resume","settle","fulfill","__asyncValues","isFunction","createErrorClass","createImpl","_super","instance","ctorFunc","UnsubscriptionError","errors","err","arrRemove","arr","item","index","Subscription","initialTeardown","e_1","_a","e_2","_b","_parentage","_parentage_1","_parentage_1_1","parent_1","e_1_1","initialFinalizer","_finalizers","_finalizers_1","_finalizers_1_1","finalizer","execFinalizer","e_2_1","teardown","parent","empty","EMPTY_SUBSCRIPTION","isSubscription","config","timeoutProvider","handler","timeout","args","_i","handle","reportUnhandledError","noop","errorContext","cb","Subscriber","destination","_this","EMPTY_OBSERVER","next","complete","SafeSubscriber","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","defaultErrorHandler","observable","identity","x","pipeFromArray","fns","input","prev","fn","Observable","subscribe","operator","subscriber","isSubscriber","source","sink","promiseCtor","getPromiseCtor","Symbol_observable","operations","isObserver","hasLift","operate","init","liftedSource","createOperatorSubscriber","onNext","onComplete","onError","onFinalize","OperatorSubscriber","shouldUnsubscribe","closed_1","ObjectUnsubscribedError","Subject","subject","AnonymousSubject","_c","observer","observers","hasError","isStopped","thrownError","BehaviorSubject","_value","subscription","dateTimestampProvider","ReplaySubject","_bufferSize","_windowTime","_timestampProvider","_buffer","_infiniteTimeWindow","copy","adjustedBufferSize","now","last","Action","scheduler","work","state","delay","intervalProvider","AsyncAction","id","_id","_scheduler","_delay","errored","errorValue","actions","Scheduler","schedulerActionCtor","AsyncScheduler","SchedulerAction","action","asyncScheduler","async","EMPTY","isScheduler","isArrayLike","isPromise","isInteropObservable","isAsyncIterable","obj","createInvalidObservableTypeError","getSymbolIterator","iterator","isIterable","Symbol_iterator","readableStreamLikeToAsyncGenerator","readableStream","reader","done","isReadableStreamLike","innerFrom","fromInteropObservable","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","fromReadableStreamLike","obs","array","promise","iterable","iterable_1","iterable_1_1","asyncIterable","process","asyncIterable_1","asyncIterable_1_1","executeSchedule","parentSubscription","repeat","scheduleSubscription","observeOn","subscribeOn","scheduleObservable","schedulePromise","scheduleArray","scheduleIterable","scheduleAsyncIterable","scheduleReadableStreamLike","scheduled","throwError","errorOrErrorFactory","errorFactory","EmptyError","lastValueFrom","_hasValue","isValidDate","map","project","mergeInternals","concurrent","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","buffer","active","isComplete","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","_loop_1","bufferedValue","mergeMap","resultSelector","ii","timer","dueTime","intervalOrScheduler","intervalDuration","due","filter","predicate","take","count","seen","mapTo","delayWhen","delayDurationSelector","subscriptionDelay","duration","distinctUntilChanged","comparator","keySelector","defaultCompare","previousKey","first","currentKey","retry","configOrCount","resetOnSuccess","soFar","innerSub","subscribeForRetry","syncUnsub","resub_1","notifier","notifierSubscriber_1","switchMap","innerSubscriber","innerIndex","outerIndex","fromFetch","initWithSelector","selector","controller","signal","abortable","outerSignal","outerSignalHandler_1","perSubscriberInit","handleError","response","base64abc","base64codes","getBase64Code","charCode","code","bytesToBase64","bytes","base64ToBytes","str","missingOctets","j","base64encode","encoder","root","factory","exports","sha256","k","module","this","K","hashBlocks","w","pos","len","c","h","u","t1","t2","Hash","data","dataLength","dataPos","out","bytesHashed","left","bitLenHi","bitLenLo","padLength","HMAC","key","pad","hash","digest","hmac","fillBuffer","info","counter","num","hkdfSalt","hkdf","salt","length","okm","hmac_","bufpos","pbkdf2","password","iterations","dkLen","prf","ctr","dk","millisecondsInHour","constructFromSymbol","constructFrom","date","toDate","argument","context","addMonths","amount","options","_date","dayOfMonth","endOfDesiredMonth","daysInMonth","addMilliseconds","addHours","addSeconds","addYears","getUnixTime","isBefore","dateToCompare","log","type","msg","color","COLOURS","consoleHasColours","getFragments","query","hash_fragments","parts","convertPairStringToMap","query_fragments","str_pairs","str_pair","split_pair","NONCE_CHARS","generateNonce","nonce","removeFragment","name","new_hash","new_search","humanReadableByteCount","si","unit","exp","pre","parseLinkHeader","header","links","part","section","url","cleanObject","object","delete_values","isMobileSafari","isNestedFrame","simplifiedTime","time","interval","AbortControllerStub","toQueryString","_timers","_intervals","_subscriptions","destroyWaitingAsync","clearAsyncTimeout","clearAsyncInterval","unsub","MOCK_AUTHORITY","_options","_storage","_authority","_promises","_client_id","_code","_access_token","_refresh_token","_route","_online","_online_observer","_failed_count","resolveAuthorityUrl","domain","apiEndpoint","httpRoute","needsTokenHeader","clientId","redirectUri","setAPI_Key","api_key","trusted","setToken","apiKey","checkStoreForAuthParam","new_token","expires_at","token","return_expired","access_token","invalidateToken","authorise","refreshToken","host","hasToken","listenForToken","authority","isOnline","isMock","isSecure","onlineState","isTrusted","isFixedDevice","store","param","setup","Md5","loadAuthority","setStorage","cleanupAuth","refreshAuthority","api_authority","after_check","token_handlers","generateTokenWithCredentials","generateToken","sendToAuthorize","sendToLogin","checkToken","logout","location","tries","secure","on_error","resp","auth_url","createLoginURL","authorizeWithIFrame","iframe","callback","event","_storeTokenDetails","_redirecting","checkForAuthParameters","fragments","saved_nonce","state_parts","createAndSaveNonce","has_query","login_url","response_type","challenge","verify","generateChallenge","AVAILABLE_CHARS","uint8array","base64.base64ToBytes","base64.base64encode","base64.bytesToBase64","sha256.hash","createRefreshURL","createCredentialsURL","refresh_uri","generateTokenWithUrl","tokens","details","_handlers","_error_handler","method","setMockNotFoundHandler","handler_fn","registerMockEndpoint","handler_ops","handler_map","deregisterMockEndpoint","path_parts","mockRequest","findRequestHandler","request","processRequest","onMockRequest","route_parts","method_handlers","match","path","query_params","route_params","paramName","variance","delay_value","delay_time","_response_headers","responseHeaders","headers","get","post","put","patch","del","transform","reloadAuth","is_mock","mock_handler","success","request_obs","fetchOptions","retry_count","delay_ms","PlaceResource","raw_data","PlaceAlert","PlaceAlertDashboard","DASHBOARD_PATH","processDashboard","queryAlertDashboards","showAlertDashboard","show","updateAlertDashboard","form_data","update","addAlertDashboard","create","removeAlertDashboard","remove","listDashboardAlerts","processAlert","ALERT_PATH","queryAlerts","showAlert","updateAlert","addAlert","removeAlert","PlaceApplication","requestTotal","_total","lastRequestTotal","_last_total","_next","pass_fn","endpoint","query_str","handleHeaders","task","task_name","total_value","PATH","queryApplications","showApplication","updateApplication","addApplication","removeApplication","AuthType","AuthType2","PlaceMQTTBroker","queryBrokers","showBroker","updateBroker","addBroker","removeBroker","PlaceCluster","edges","PlaceProcess","_cluster_id","queryClusters","showCluster","queryProcesses","list","terminateProcess","clusterRebalance","clusterVersions","PlaceDomain","queryDomains","showDomain","updateDomain","addDomain","removeDomain","lookupDomainByEmail","email","EncryptionLevel","PlaceSettings","PlaceDriverRole","PlaceDriver","level","queryDrivers","showDriver","updateDriver","addDriver","removeDriver","recompileDriver","reloadDriver","isDriverCompiled","driverReadme","PlaceEdge","queryEdges","showEdge","updateEdge","addEdge","removeEdge","retrieveEdgeToken","edgeControlUrl","wsProtocol","httpProtocol","PlaceLDAPSource","queryLDAPSources","showLDAPSource","updateLDAPSource","addLDAPSource","removeLDAPSource","PlaceMetadata","PlaceTrigger","fn_list","mail_list","conditions","cmp_list","time_list","PlaceZone","trigger","PlaceZoneMetadata","metadata","listMetadata","flatten","an_array","stack","res","listMetadataHistory","showMetadata","updateMetadata","addMetadata","removeMetadata","listChildMetadata","PlaceSystem","mod","PlaceModule","keep_system","queryModules","showModule","updateModule","addModule","removeModule","startModule","stopModule","moduleState","lookupModuleState","loadModule","moduleSettings","moduleRuntimeError","executeOnModule","PlaceOAuthSource","queryOAuthSources","showOAuthSource","updateOAuthSource","addOAuthSource","removeOAuthSource","PlaceRepositoryType","PlaceRepository","queryRepositories","showRepository","updateRepository","addRepository","removeRepository","listInterfaceRepositories","listRemoteRepositoryDefaultBranch","listRemoteRepositoryBranches","listRemoteRepositoryCommits","listRepositoryDrivers","listRepositoryCommits","listRepositoryBranches","listRepositoryDefaultBranch","listRepositoryDriverDetails","pullRepositoryChanges","listRepositoryFolders","PlaceSAMLSource","querySAMLSources","showSAMLSource","updateSAMLSource","addSAMLSource","removeSAMLSource","querySettings","showSettings","updateSettings","addSettings","removeSettings","settingsHistory","querySystems","querySystemsWithEmails","showSystem","updateSystem","addSystem","removeSystem","addSystemModule","module_id","removeSystemModule","startSystem","stopSystem","executeOnSystem","systemModuleState","lookupSystemModuleState","lookup","functionList","listSystemZones","listSystemTriggers","addSystemTrigger","removeSystemTrigger","trigger_id","systemSettings","systemControlUrl","systemMetadata","showSystemTrigger","sys_id","trig_id","updateSystemTrigger","queryTriggers","showTrigger","updateTrigger","addTrigger","removeTrigger","listTriggerInstances","TriggerConditionOperator","TriggerTimeConditionType","TriggerWebhookType","TriggerWebhookType2","PlaceUser","queryUsers","showUser","currentUser","updateUser","addUser","removeUser","queryUserGroups","searchUserMetadata","currentUserResourceToken","userMetadata","removeUserResourceToken","userResourceToken","reviveUser","queryZones","listZoneTags","showZone","updateZone","addZone","removeZone","listZoneTriggers","executeOnZone","zoneMetadata","MediaAnimation","MediaAnimation2","SignageMedia","SignagePlaylistMedia","SignagePlaylist","SignagePlugin","showSignage","showSignageMetrics","MEDIA_PATH","processMedia","querySignageMedia","showSignageMedia","updateSignageMedia","addSignageMedia","removeSignageMedia","mediaThumbnail","PLAYLISTS_PATH","processPlaylist","querySignagePlaylists","showSignagePlaylist","updateSignagePlaylist","addSignagePlaylist","removeSignagePlaylist","listSignagePlaylistMedia","listSignagePlaylistMediaRevisions","approveSignagePlaylist","updateSignagePlaylistMedia","PLUGINS_PATH","processPlugin","querySignagePlugins","showSignagePlugin","updateSignagePlugin","addSignagePlugin","removeSignagePlugin","SurveyAnswer","_data","queryAnswers","addAnswer","SurveyInvitation","queryInvitations","showInvitation","updateInvitation","addInvitation","removeInvitation","SurveyQuestion","queryQuestions","showQuestion","addQuestion","updateQuestion","removeQuestion","Survey","querySurveys","showSurvey","updateSurvey","addSurvey","removeSurvey","PlaceAssetCategory","PlaceAssetPurchaseOrder","PlaceAssetType","PlaceAsset","ASSET_PATH","processAsset","queryAssets","showAsset","updateAsset","addAsset","removeAsset","addAssets","updateAssets","removeAssets","id_list","ASSET_TYPE_PATH","processAssetType","queryAssetTypes","showAssetType","updateAssetType","addAssetType","removeAssetType","ASSET_CATEGORY_PATH","processAssetCategory","queryAssetCategories","showAssetCategory","updateAssetCategory","addAssetCategory","removeAssetCategory","ASSET_PURCHASE_ORDER_PATH","processAssetPurchaseOrder","queryAssetPurchaseOrders","showAssetPurchaseOrder","updateAssetPurchaseOrder","addAssetPurchaseOrder","removeAssetPurchaseOrder","PlaceShortUrl","processShortUrl","queryShortUrls","showShortUrl","updateShortUrl","addShortUrl","removeShortUrl","shortUrlRedirectUrl","getShortUrlQrCodeSvg","shortUrlQrCodePngUrl","qrCodeUrl","format","params","generateQrCode","PlaceStorage","processStorage","queryStorages","showStorage","updateStorage","addStorage","removeStorage","queryWebrtcRooms","showWebrtcRoom","system_id","webrtcSessionMembers","session_id","webrtcGuestEntry","participant","webrtcGuestExit","webrtcKickUser","user_id","reason","webrtcTransferUser","connection_details","webrtcSignallerUrl","DEFAULT_WEBSOCKET_CONFIG","WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT","WebSocketSubject","urlConfigOrSource","sock","subMsg","unsubMsg","messageFilter","self","WebSocketCtor","protocol","binaryType","socket","evt","_socket","openObserver","queue","serializer","closingObserver","closeObserver","deserializer","webSocket","PlaceErrorCodes","PlaceLogLevel","MockPlaceWebsocketModule","_system","properties","proto_fn","command","prop_name","MockPlaceWebsocketSystem","mod_name","_mock_systems","registerSystem","mockSystem","deregisterSystem","KEEP_ALIVE","REQUEST_COUNT","_websocket","_websocket_id","_requests","_binding","_observers","_listeners","_status","_sync","_connect_time","_keep_alive","_connection_attempts","_connection_promise","_health_check","_last_pong","REQUEST_TIMEOUT","debug_events","websocketRoute","isConnected","status","connectionState","listen","binding_details","bindings","bind","timeout_delay","send","unbind","execute","debug","ignore","req","handleMockSend","binding","connect","onMessage","message","handleNotify","handleSuccess","meta","updated_value","createMockWebSocket","createWebsocket","clearHealthCheck","_clearRequests","onWebSocketError","reconnect","ping","tkn","return_value","websocket","listeners","system","new_value","PlaceVariableBinding","_module","_name","connected","PlaceModuleBinding","PlaceSystemBinding","_system_list","getSystem","getModule"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,153,154]}
|