bruce-models 2.8.0 → 2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"bruce-models.umd.js","sources":["../src/api/api.ts","../node_modules/localforage/dist/localforage.js","../src/common/cache.ts","../src/api/abstract-api.ts","../src/server/message-broker.ts","../src/api/guardian-api.ts","../src/account/account.ts","../src/server/hosting-location.ts","../src/api/bruce-api.ts","../src/api/cam-api.ts","../src/api/global-api.ts","../src/api/idm-api.ts","../src/api/api-getters.ts","../src/environment.ts","../src/ann-document/ann-document.ts","../src/custom-form/custom-form.ts","../src/custom-form/custom-form-content.ts","../src/common/color.ts","../src/util/object-utils.ts","../src/util/path-utils.ts","../src/entity/entity.ts","../src/common/bruce-variable.ts","../src/calculator/calculator.ts","../src/common/geometry.ts","../src/common/bounds.ts","../src/common/bruce-event.ts","../src/common/camera.ts","../src/common/cartes.ts","../src/common/carto.ts","../src/common/delay-queue.ts","../src/common/utc.ts","../src/common/lru-cache.ts","../src/entity/entity-attachment-type.ts","../src/entity/entity-attachment.ts","../src/entity/entity-comment.ts","../src/entity/entity-link.ts","../src/entity/entity-lod.ts","../src/entity/entity-lod-category.ts","../src/entity/entity-relation-type.ts","../src/entity/entity-relation.ts","../src/entity/entity-source.ts","../src/entity/entity-tag.ts","../src/entity/entity-type.ts","../src/entity/getters/entity-globe.ts","../src/entity/getters/entity-filter-getter.ts","../src/entity/getters/batched-data-getter.ts","../src/util/math-utils.ts","../src/entity/entity-coords.ts","../src/entity/entity-type-visual-settings.ts","../src/entity/entity-attribute.ts","../src/internal/uploader.ts","../src/client-file/client-file.ts","../src/program-key/program-key.ts","../src/project/zoom-control.ts","../src/tileset/tileset.ts","../src/project/menu-item.ts","../src/project/project-view-bookmark.ts","../src/project/project-view.ts","../src/project/project-view-legacy-tile.ts","../src/project/project-view-tile.ts","../src/server/pending-action.ts","../src/style/style.ts","../src/user/permission.ts","../src/user/session.ts","../src/user/user-group.ts","../src/user/user.ts","../src/account/account-invite.ts","../src/util/encrypt-utils.ts","../src/util/url-utils.ts","../src/data-lab/data-lab.ts","../src/import/import-cad.ts","../src/import/import-csv.ts","../src/import/import-json.ts","../src/import/import-kml.ts","../src/import/imported-file.ts","../src/markup/markup.ts","../src/plugin/plugin.ts","../src/data-source/data-source.ts","../src/bruce-models.ts"],"sourcesContent":["import { IDictionary } from \"../common/dictionary\";\n\n/**\n * Contains generic descriptions used for Bruce requests.\n */\nexport namespace Api {\n export enum ECacheKey {\n Id = \":\",\n Entity = \"entity\",\n EntityType = \"entitytype\",\n ProjectView = \"projectview\",\n ProjectViewBookmark = \"pvbookmark\",\n Tileset = \"tileset\",\n ClientFile = \"clientfile\",\n Session = \"session\",\n PendingAction = \"pendingaction\",\n EntitySource = \"entitysource\",\n DataSource = \"datasource\",\n ProgramKey = \"programkey\",\n EntityCoords = \"entitycoords\",\n Tag = \"tag\",\n Attachment = \"attachment\",\n Comment = \"comment\",\n Link = \"link\",\n AnnDocument = \"anndocument\",\n AttachmentType = \"attachmenttype\",\n Relation = \"relation\",\n RelationType = \"relationtype\",\n Lod = \"lod\",\n LodCategory = \"lodcategory\",\n Style = \"style\",\n PublishTileset = \"publishtileset\",\n TilesetAccess = \"tilesetaccess\",\n User = \"user\",\n UserSettings = \"usersettings\",\n UserEmail = \"useremail\",\n AccessToken = \"accesstoken\",\n UserGroup = \"usergroup\",\n Account = \"account\",\n DatabaseRegion = \"databaseregion\",\n CustomForm = \"customform\",\n ImportedFile = \"importedfile\",\n Plugin = \"plugin\"\n }\n export const DEFAULT_CACHE_DURATION = 60 * 1000; // 1 minute.\n export const TEMPLATE_ACCOUNT_ID = \"template\";\n export const ACCESS_TOKEN_HEADER = \"X-Access-Token\";\n\n /**\n * Possible environments we host Bruce apps on.\n * When these are matched, they should be case-insensitive.\n */\n export enum EEnv {\n DEV = \"DEV\",\n STG = \"STG\",\n UAT = \"UAT\",\n PROD = \"PROD\"\n }\n export type Env = EEnv | string;\n // False = cache is enabled by default for req-params.\n export let DEFAULT_NO_CACHE = false;\n\n /**\n * Prepares a string to be included in a url.\n * @param str\n * @returns\n */\n export function Encode(str: string): string {\n return encodeURIComponent(str.replace(/\\+/g, \"%2B\").replace(/\\./g, \"%2E\"));\n }\n\n export interface IList<T> {\n Items: T[];\n TotalCount?: number;\n }\n\n export enum ESortOrder {\n None = 0,\n Asc = 1,\n Desc = -1\n }\n\n export enum EEncoding {\n UTF8 = \"UTF-8\",\n UTF16 = \"UTF-16BE\"\n }\n\n export interface IReqParams {\n // Default is Api.DEFAULT_CACHE_STATE.\n // If true then local cache check will be skipped.\n noCache?: boolean;\n // Request headers.\n headers?: IDictionary<string>;\n }\n\n export interface IRes {\n\n }\n\n /**\n * Prepares default settings for a request to Bruce Api.\n * Our requests WRONGLY have utf-16 for 95% of them. Please be wary of that.\n * @param base\n * @returns\n */\n export function PrepReqParams(base?: Api.IReqParams | IUploadReqParams): IReqParams | IUploadReqParams {\n base = {\n ...base\n };\n return base;\n }\n\n export interface IUploadReqParams extends IReqParams {\n onProgress?: (e: ProgressEvent) => void;\n formData?: IDictionary<string> | FormData;\n }\n}","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","import localforage from \"localforage\";\n\ntype Key = string | number;\ntype Persistence = \"memory\" | \"storage\";\nconst DEFAULT_DURATION = 60 * 1000; // 1 minute.\nconst VERSION = 4;\n\ninterface IRecord {\n // The id of the item.\n id: string;\n // The data of the item.\n data: any;\n // The time when the item was added to the cache.\n expires: number;\n}\n\nexport class CacheControl<T> {\n private storage: LocalForage;\n private _storageKeys: string[] = null;\n private async getStorageKeys() {\n if (this._storageKeys == null) {\n this._storageKeys = await this.storage.keys();\n }\n return this._storageKeys;\n }\n\n private memory: Map<Key, IRecord> = new Map<Key, IRecord>();\n public Disabled: boolean = false;\n\n constructor(id: string) {\n if (!id) {\n id = \"default\";\n }\n this.storage = localforage.createInstance({\n name: `v${VERSION}_${id}`,\n });\n }\n\n /**\n * Sets item to cache.\n * @param id\n * @param data\n * @param duration\n */\n public async Set(params: {\n id: string,\n data: any,\n persistence?: Persistence,\n // Optional, default is 1 minute.\n // Value is in milliseconds and if it's set to 0 or lower then it'll be set to 1 minute.\n duration?: number\n }): Promise<void> {\n if (this.Disabled) {\n return;\n }\n let { id, data, persistence, duration } = params;\n if (!duration || duration < 0) {\n duration = DEFAULT_DURATION;\n }\n id = String(id);\n this._storageKeys = null;\n\n const expires = Date.now() + duration;\n const record: IRecord = {\n id,\n data,\n expires\n };\n\n if (persistence == \"storage\") {\n let putIntoStorage = true;\n // Cannot store promises, so will need to wait for them to resolve.\n if (data instanceof Promise) {\n // Store in memory until resolved, that way we can return the data if requested again.\n this.memory.set(id, record);\n try {\n data = await data;\n record.data = data;\n }\n catch (e) {\n // If it failed then we keep it in memory so that requesting it will retain the promise exception.\n putIntoStorage = false;\n }\n }\n if (putIntoStorage) {\n await this.storage.setItem(id, record);\n if (this.memory.has(id)) {\n this.memory.delete(id);\n }\n }\n }\n else {\n this.memory.set(id, record);\n await this.storage.removeItem(id);\n }\n }\n\n /**\n * Returns the item with the given id.\n * @param id\n * @returns\n */\n public async Get(id: Key): Promise<{\n data: T,\n found: boolean\n }> {\n if (this.Disabled) {\n return null;\n }\n id = String(id);\n\n // Prioritize memory over storage because it's faster to access.\n let record = this.memory.get(id);\n if (!record) {\n record = await this.storage.getItem(id);\n }\n if (!record) {\n return {\n data: null,\n found: false\n };\n }\n if (record.expires < Date.now()) {\n if (this.memory.has(id)) {\n this.memory.delete(id);\n }\n await this.storage.removeItem(id);\n return {\n data: null,\n found: false\n };\n }\n return {\n data: record.data,\n found: true\n };\n }\n\n /**\n * Removes all items from the cache.\n */\n public async Clear(): Promise<void> {\n this.memory.clear();\n await this.storage.clear();\n this._storageKeys = null;\n }\n\n /**\n * Removes the item with the given id.\n * @param id\n */\n public async Remove(id: Key): Promise<void> {\n id = String(id);\n this.memory.delete(id);\n await this.storage.removeItem(id);\n this._storageKeys = null;\n }\n\n /**\n * Removes all items that match the callback.\n * If callback returns true then the item is removed.\n * @param callback\n */\n public async RemoveBy(callback: (key: Key) => boolean): Promise<void> {\n const storageKeys = await this.getStorageKeys();\n for (const key of storageKeys) {\n if (callback(key)) {\n await this.storage.removeItem(key);\n }\n }\n const memoryKeys = Array.from(this.memory.keys());\n for (const key of memoryKeys) {\n if (callback(key)) {\n this.memory.delete(key);\n }\n }\n this._storageKeys = null;\n }\n\n /**\n * Removes all items that start with the given text.\n * @param text\n */\n public async RemoveByStartsWith(text: Key): Promise<void> {\n await this.RemoveBy(key => String(key).startsWith(String(text)));\n }\n\n /**\n * Removes all items that contain the given text.\n * @param text\n */\n public async RemoveByContains(text: Key): Promise<void> {\n await this.RemoveBy(key => String(key).includes(String(text)));\n }\n}","import { CacheControl } from \"../common/cache\";\nimport { Api } from \"./api\";\n\n// TODO: Currently checks for CSV vs json specifically,\n// Need to see if our api is generally good at setting content-type headers.\n// Make it less specific to CSV.\nasync function parseResult(data: Response): Promise<any> {\n if (data.status !== 200) {\n const error = await data.json();\n throw(error);\n }\n\n let type = data.headers.get(\"Content-Type\")?.trim().toLowerCase();\n let encoding = type?.split(\";\").find((x) => x.startsWith(\"charset=\"))?.split(\"=\")[1].toLowerCase();\n if (encoding === \"utf-16\") {\n encoding = Api.EEncoding.UTF16;\n }\n\n const text = await (encoding && encoding !== \"utf-8\" \n ? new TextDecoder(encoding).decode(await data.arrayBuffer()) \n : data.text());\n\n if (!text?.trim()) {\n return null;\n }\n return type?.includes(\"text/csv\") ? text : JSON.parse(text);\n}\n\n/**\n * This is a base class for communication with an arbitrary Bruce Api.\n */\nexport class AbstractApi {\n private ssidHeader: string;\n private ssid: string = \"\";\n protected baseUrl: string = \"\";\n public Cache: CacheControl<any>;\n\n constructor(params: {\n ssidHeader?: string,\n cacheId?: string\n }) {\n this.ssidHeader = params?.ssidHeader;\n this.Cache = new CacheControl<any>(params?.cacheId);\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GetCacheItem(key: string, reqParams?: Api.IReqParams) {\n let noCache = reqParams?.noCache;\n if (noCache == null) {\n noCache = Api.DEFAULT_NO_CACHE;\n }\n if (noCache) {\n return null;\n }\n return this.Cache.Get(key);\n }\n\n public async SetCacheItem(params: {\n key: string,\n value: any,\n duration?: number,\n req?: Api.IReqParams\n }) {\n let {key, value, duration, req} = params;\n let noCache = req?.noCache;\n if (noCache == null) {\n noCache = Api.DEFAULT_NO_CACHE;\n }\n if (noCache) {\n return;\n }\n if (isNaN(duration)) {\n duration = Api.DEFAULT_CACHE_DURATION;\n }\n await this.Cache.Set({\n id: key,\n data: value,\n duration,\n persistence: \"memory\"\n });\n }\n\n public GetSessionId(): string {\n return this.ssid;\n }\n\n public SetSessionId(value: string): void {\n this.ssid = value;\n }\n\n public GetSessionHeader(): string {\n return this.ssidHeader;\n }\n\n public SetSessionHeader(value: string): void {\n this.ssidHeader = value;\n }\n\n public async get(url: string, params?: Api.IReqParams): Promise<any> {\n if (!params) {\n params = {};\n }\n params.headers = params.headers || {};\n params.headers = {\n \"Content-Type\": \"application/json;\",\n ...params.headers\n };\n if (this.ssidHeader && this.ssid) {\n params.headers[this.ssidHeader] = this.ssid;\n }\n const res = await fetch(url, {\n headers: params.headers\n });\n return parseResult(res);\n }\n\n public async delete(url: string, params?: Api.IReqParams): Promise<any> {\n if (!params) {\n params = {};\n }\n params.headers = params.headers || {};\n params.headers = {\n \"Content-Type\": \"application/json;\",\n ...params.headers\n };\n if (this.ssidHeader && this.ssid) {\n params.headers[this.ssidHeader] = this.ssid;\n }\n const res = await fetch(url, {\n headers: params.headers,\n method: \"DELETE\"\n });\n return parseResult(res);\n }\n\n public async post(url: string, data: any, params?: Api.IReqParams): Promise<any> {\n if (!params) {\n params = {};\n }\n params.headers = params.headers || {};\n params.headers = {\n \"Content-Type\": \"application/json;\",\n ...params.headers\n };\n if (this.ssidHeader && this.ssid) {\n params.headers[this.ssidHeader] = this.ssid;\n }\n if (!data) {\n data = {};\n }\n if (typeof data != \"string\") {\n data = JSON.stringify(data);\n }\n const res = await fetch(url, {\n headers: params.headers,\n method: \"POST\",\n body: data\n });\n return parseResult(res);\n }\n\n public async put(url: string, data: any, params?: Api.IReqParams): Promise<any> {\n if (!params) {\n params = {};\n }\n params.headers = params.headers || {};\n params.headers = {\n \"Content-Type\": \"application/json;\",\n ...params.headers\n };\n if (this.ssidHeader && this.ssid) {\n params.headers[this.ssidHeader] = this.ssid;\n }\n if (!data) {\n data = {};\n }\n if (typeof data != \"string\") {\n data = JSON.stringify(data);\n }\n const res = await fetch(url, {\n headers: params.headers,\n method: \"PUT\",\n body: data\n });\n return parseResult(res);\n }\n\n public async upload(url: string, blob: Blob, params?: Api.IUploadReqParams): Promise<any> {\n return new Promise((res, rej) => {\n try {\n let xhr = new XMLHttpRequest();\n const headers = <any>params?.headers;\n if (headers) {\n const headerKeys = Object.keys(headers);\n for (let i = 0; i < headerKeys.length; i++) {\n const key = headerKeys[i];\n const value = headers[key];\n xhr.setRequestHeader(key, value);\n }\n }\n if (params?.onProgress) {\n if (xhr.upload) {\n xhr.upload.onprogress = params?.onProgress;\n }\n else {\n xhr.addEventListener(\"progress\", params?.onProgress);\n }\n }\n xhr.onreadystatechange = (e) => {\n if (xhr.readyState == 4) {\n if (xhr.status >= 400) {\n rej(e);\n }\n else {\n try {\n res(JSON.parse(xhr.responseText));\n }\n catch (e) {\n console.error(e, xhr.responseText);\n res(xhr.responseText);\n }\n }\n }\n };\n xhr.open(\"POST\", url, true);\n if (this.ssidHeader && this.ssid) {\n xhr.setRequestHeader(this.ssidHeader, this.ssid);\n }\n let formData;\n if (params?.formData instanceof FormData) {\n formData = params?.formData;\n }\n else {\n formData = new FormData();\n if (params?.formData) {\n for (const key in params.formData) {\n formData.append(key, params.formData[key]);\n }\n }\n }\n formData.append(\"file\", blob);\n xhr.send(formData);\n }\n catch (e) {\n rej(e);\n }\n });\n }\n}","import { Api } from \"../api/api\";\n\nexport namespace MessageBroker {\n export enum EAction {\n // Subscribes a client to topic messages on a server side.\n SUBSCRIBE = \"subscribe\",\n // Subscribes a client to a topic without notifying other clients.\n SUBSCRIBE_SHADOW = \"subscribeShadow\",\n // Unsubscribes clients from topic messages on a server side\n UNSUBSCRIBE = \"unsubscribe\",\n // Sends a message to all topic subscribers.\n BROADCAST = \"broadcast\",\n // Requests topic subscribers without subscribing.\n GET_TOPIC_SUBSCRIBERS = \"getTopicSubscribers\"\n }\n\n export type SubscribeType = EAction.SUBSCRIBE | EAction.SUBSCRIBE_SHADOW;\n\n export interface IMessageBase {\n topic: string;\n event?: string;\n data?: any;\n }\n\n export interface IMessage extends IMessageBase {\n // Timestamp of message.\n time?: number;\n // User id of message sender.\n user?: string;\n action: EAction;\n }\n\n export interface IBroker {\n /**\n * Add a subscriber to a topic.\n * @param topic \n * @param callback \n * @param action \n */\n Subscribe: (topic: string, callback: (msg: IMessage) => void, type?: SubscribeType) => void,\n /**\n * Remove a subscriber from a topic.\n * @param topic \n * @param callback \n */\n Unsubscribe: (topic: string, callback: (msg: IMessage) => void) => void,\n /**\n * Send message to server.\n * @param base \n * @returns \n */\n SendMessage: (base: IMessageBase | IMessage) => void;\n SetUserId: (userId: string) => void;\n IsConnected: boolean;\n }\n\n /**\n * Communicates with a server message broker.\n */\n export class WebSocketBroker implements IBroker {\n private subscriptions = new Map<string, ((msg: IMessage) => void)[]>();\n private ws: WebSocket;\n private reconnects: number = 0;\n private maxReconnects: number = 5;\n private userId: string;\n private uri: string;\n private env: Api.Env;\n\n public constructor(uri: string, env?: Api.Env) {\n this.uri = uri;\n this.env = env ? env : Api.EEnv.PROD;\n this.connect();\n }\n\n public get IsConnected(): boolean {\n return this.ws.readyState === WebSocket.OPEN;\n }\n\n public SetUserId(userId: string): void {\n this.userId = this.userId ? this.userId : userId;\n }\n\n private connect() {\n try {\n if (!WebSocket) {\n throw new Error(\"WebSocket is not supported by this browser\");\n }\n this.ws = new WebSocket(this.formatApiUri(this.uri));\n this.ws.onopen = this.onOpen.bind(this);\n this.ws.onmessage = this.onMessage.bind(this);\n this.ws.onerror = this.onError.bind(this);\n this.ws.onclose = this.onClose.bind(this);\n } \n catch (e) {\n console.error(e);\n }\n }\n\n private formatApiUri(uri: string): string {\n const ws = document.location.protocol === \"https:\" ? \"wss\" : \"ws\";\n return uri.replace(/^(https|http)/, ws) + \"websocket\";\n }\n\n private onOpen(ev: any): void {\n if (this.env === Api.EEnv.DEV) {\n console.log(\"MessageBroker connection opened: \", ev);\n }\n }\n\n private onClose(ev: any): void {\n if (this.env === Api.EEnv.DEV) {\n console.log(\"MessageBroker connection closed, trying to reconnect: \", ev);\n }\n if (this.reconnects < this.maxReconnects) {\n this.reconnects += 1;\n setTimeout(() => this.connect(), 5000 * this.reconnects);\n }\n }\n\n private onMessage(ev: any): void {\n const data: IMessage = JSON.parse(ev.data);\n this.subscriptions.get(data.topic)?.forEach(cb => cb(data));\n }\n\n private onError(ev: any): void {\n console.error(\"MessageBroker connection error: \", ev);\n }\n\n private addSubscriber(topic: string, callback: (msg: IMessage) => void): void {\n const subscribers = this.subscriptions.get(topic) || [];\n if (subscribers.includes(callback)) {\n return;\n }\n subscribers.push(callback);\n this.subscriptions.set(topic, subscribers);\n }\n\n /**\n * Send message to server.\n * @param base \n * @returns \n */\n public SendMessage(base: IMessageBase | IMessage): void {\n if (this.ws.readyState !== WebSocket.OPEN) {\n return;\n }\n try {\n const msg = base as IMessage;\n if (!msg.event) {\n msg.event = EAction.BROADCAST;\n }\n let message = base.data ? base.data : {};\n if (typeof message == \"object\") {\n message = JSON.stringify(message);\n }\n msg.data = message;\n\n const outgoingMessage: IMessage = { ...msg, user: this.userId, time: Date.now() };\n this.ws.send(JSON.stringify(outgoingMessage));\n } \n catch (e) {\n console.warn(e);\n }\n }\n\n /**\n * Add a subscriber to a topic.\n * @param topic \n * @param callback \n * @param action \n */\n public Subscribe(topic: string, callback: (msg: IMessage) => void, action?: SubscribeType): void {\n if (!action) {\n action = EAction.SUBSCRIBE;\n }\n this.addSubscriber(topic, callback);\n this.SendMessage({ topic, action });\n }\n\n /**\n * Remove a subscriber from a topic.\n * @param topic \n * @param callback \n */\n public Unsubscribe(topic: string, callback: (msg: IMessage) => void): void {\n const subscribers = this.subscriptions.get(topic) || [];\n this.subscriptions.set(topic, subscribers.filter(fn => fn != callback));\n this.SendMessage({ topic, action: EAction.UNSUBSCRIBE });\n }\n\n public RequestTopicUsers(topic: string, callback: (msg: IMessage) => void): void {\n this.addSubscriber(topic, callback);\n this.SendMessage({ topic, event: EAction.GET_TOPIC_SUBSCRIBERS });\n }\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\n\n/**\n * This is the request handler for Cam/Idm Api,\n * it should be passed to any method that wants to communicate with this particular api.\n */\nexport namespace GuardianApi {\n export interface IGetter {\n // Default settings the getter's app is running on.\n env: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (env?: A.EEnv) => GuardianApi.Api;\n }\n\n export class Api extends AbstractApi {\n private env: A.Env;\n\n constructor(params: {\n env?: A.Env\n }) {\n super({\n ssidHeader: \"x-sessionid\",\n cacheId: `GUARDIAN_API_${params?.env}_`\n });\n this.env = params?.env ? params.env : A.EEnv.PROD;\n this.setBaseUrl();\n }\n\n private setBaseUrl(): void {\n let url = \"https://guardian.nextspace\";\n const env = this.env.toUpperCase();\n switch (env) {\n case A.EEnv.DEV:\n url += \"-dev.net/\";\n break;\n case A.EEnv.STG:\n url += \"-stg.net/\";\n break;\n case A.EEnv.UAT:\n url += \"-uat.net/\";\n break;\n case A.EEnv.PROD:\n url += \".host/\";\n break;\n default:\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n this.baseUrl = url;\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return this.get(this.baseUrl + url, params);\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return this.delete(this.baseUrl + url, params);\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return this.post(this.baseUrl + url, data, params);\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return this.upload(this.baseUrl + url, blob, params);\n }\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { CamApi } from \"../api/cam-api\";\r\nimport { GuardianApi } from \"../api/guardian-api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\nimport { AccountSettings } from \"./account-settings\";\r\n\r\nconst ACCOUNT_EXCLUSIONS = [\"hyperportal\", \"hypeportal\", \"bviewer\"];\r\n\r\n/**\r\n * Describes the \"Client Account\" concept within Bruce.\r\n * A client account is a database instance that holds one or many users.\r\n */\r\nexport namespace Account {\r\n export function GetCacheKey(accountId: string, appSettingsId?: string): string {\r\n if (appSettingsId) {\r\n return Api.ECacheKey.Account + Api.ECacheKey.Id + accountId + Api.ECacheKey + appSettingsId;\r\n }\r\n return Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export function GetListCacheKey(ssid: string): string {\r\n return Api.ECacheKey.Account + Api.ECacheKey.Session + Api.ECacheKey.Id + ssid;\r\n }\r\n\r\n export function GetDbRegionListCacheKey() {\r\n return Api.ECacheKey.DatabaseRegion;\r\n }\r\n\r\n export enum EAppId {\r\n BruceApi = \"BruceAPI\",\r\n Navigator = \"Navigator\",\r\n }\r\n\r\n export type AppId = EAppId | string;\r\n\r\n export enum EStarterContent {\r\n Default = \"default\",\r\n None = \"none\"\r\n }\r\n\r\n export interface IAccount {\r\n ID?: string;\r\n Name?: string;\r\n \"ClientAccount.ID\"?: string;\r\n \"Application.ID\"?: string;\r\n \"BruceAPI\"?: string;\r\n \"Settings\"?: any;\r\n \"OwnerUser.ID\"?: string;\r\n // This will depend on what \"appSettingsId\" you request for.\r\n \"Application.Settings\"?: AccountSettings.Settings;\r\n }\r\n\r\n export async function Get(params: {\r\n api?: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n account: IAccount\r\n }> {\r\n let { api, accountId: id, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const cache = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const req = await api.GET(`account/${id}`, reqParams);\r\n const resData = {\r\n account: req\r\n };\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: resData,\r\n req: reqParams\r\n });\r\n return resData;\r\n }\r\n\r\n export async function GetRelatedList(params: {\r\n api?: IdmApi.Api | GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n accounts: IAccount[]\r\n }> {\r\n let { api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const cache = await api.GetCacheItem(GetListCacheKey(api.GetSessionId()), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const req = api.GET(\"user/relatedClientAccounts\", reqParams);\r\n const prom: Promise<{ accounts: IAccount[] }> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n const items = data.Items.filter((x: IAccount) => !ACCOUNT_EXCLUSIONS.includes(<string>x.ID))\r\n res({\r\n accounts: items\r\n });\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(api.GetSessionId()),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetAppSettings(params: {\r\n api?: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n appId: AppId,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: AccountSettings.Settings\r\n }> {\r\n let { api, accountId: id, appId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const cache = await api.GetCacheItem(GetCacheKey(id, appId), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const req = await api.GET(`account/${id}?ApplicationID=${appId}`, reqParams);\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n const settings = data?.[ \"Application.Settings\" ] ?? {};\r\n res({\r\n settings: settings\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id, appId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * WARNING: Do not update API settings without knowing what you're doing.\r\n * @param params\r\n * @returns\r\n */\r\n export async function UpdateAppSettings(params: {\r\n api?: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n appId: string,\r\n settings: AccountSettings.Settings,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: AccountSettings.Settings\r\n }> {\r\n let { api, accountId: id, appId, settings: data, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const res = await api.POST(`account/${id}/applicationSettings/${appId}`, data, reqParams);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Account + Api.ECacheKey.Id + id);\r\n return {\r\n settings: res\r\n };\r\n }\r\n\r\n /**\r\n * Creates a new Bruce account using given details.\r\n * @param params\r\n * @returns\r\n */\r\n export async function Create(params: {\r\n api?: BruceApi.Api,\r\n accountId: string,\r\n name: string,\r\n hostingLocationKey: string,\r\n starterContent?: EStarterContent,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n account: IAccount\r\n }> {\r\n let { api, accountId: id, name, hostingLocationKey, starterContent, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!id || !name || !hostingLocationKey) {\r\n throw new Error(\"Id, Name and hostingLocationKey are required.\");\r\n }\r\n if (!starterContent) {\r\n starterContent = EStarterContent.None;\r\n }\r\n const reqData = {\r\n \"Name\": name,\r\n \"HostingLocation.Key\": hostingLocationKey,\r\n \"StarterContent\": starterContent\r\n }\r\n const res = await api.POST(`clientAccount/${id}`, reqData, Api.PrepReqParams(reqParams));\r\n const resData = {\r\n account: res\r\n };\r\n api.Cache.Remove(GetListCacheKey(api.GetSessionId()));\r\n return resData;\r\n }\r\n}","import { Account } from \"../account/account\";\nimport { AccountSettings } from \"../account/account-settings\";\nimport { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * A hosting location is a record for a possible bruce-api server configuration.\n * A hosting location will have one or many database servers as well, this is an additional setting.\n */\nexport namespace HostingLocation {\n export interface ILocation {\n // Internal ID.\n ID: number;\n // External ID.\n Key: string;\n // Indicates if creation of a new bruce account is allowed in this region.\n // This should dictate if the record is visible in UI dropdowns as well for non-super-admins.\n IsEnabledForNewAccounts: boolean;\n DisplayName?: string;\n Description?: string;\n // Eg: \"us-west-1\".\n AWSRegion?: string;\n // Eg: \"Singapore\".\n Country?: string;\n // Eg: \"Vultr\".\n Hoster?: string;\n // Eg: \"San Francisco\".\n City?: string;\n // URL template to the corresponding API instance.\n // Eg: \"https://<ACCOUNTID>.api.nextspace-us.host/\".\n BruceAPIURL?: string;\n // Comma separated list of Api.EEnv.\n Environment?: string;\n // Arbitrary settings for the particular location.\n // For example this may include CDN template URLs.\n Settings?: any;\n }\n\n /**\n * @Warning: This will not return the Settings property.\n * @param params\n * @returns\n */\n export async function GetList(params: {\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n locations: ILocation[]\n }> {\n let { api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const res = await api.GET(\"hostinglocations\", Api.PrepReqParams(req));\n return {\n locations: res.Items\n };\n }\n\n export async function GetById(params: {\n id: number,\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n location: ILocation\n }> {\n let { id, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!id) {\n throw(\"Invalid id\");\n }\n const res = await api.GET(`hostinglocation/id/${id}`, Api.PrepReqParams(req));\n return {\n location: res\n };\n }\n\n export async function GetByKey(params: {\n key: string,\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n location: ILocation\n }> {\n let { key, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!key) {\n throw(\"Invalid key\");\n }\n const res = await api.GET(`hostinglocation/key/${key}`, Api.PrepReqParams(req));\n return {\n location: res\n };\n }\n\n /**\n * Returns hostingLocationKey from given db url.\n * Some older accounts don't have this set, so we need to guess it.\n * @param params\n * @returns\n */\n export function GuessKey(params: {\n // Database connection string.\n DBServer?: string\n }) {\n const { DBServer: databaseUrl } = params;\n if (databaseUrl.includes(\"hyperfarm-prod-instance-1\")) {\n return \"HYPERFARM\";\n }\n if (databaseUrl.includes(\"prod-syd1.nextspace.host\")) {\n return \"AU-VULTR-FIRST\";\n }\n else if (databaseUrl.includes(\"prod-nyc1.nextspace.host\")) {\n return \"US-VULTR-FIRST\";\n }\n else if (databaseUrl.includes(\"prod-ams1.nextspace.host\")) {\n return \"EU-VULTR-FIRST\";\n }\n else if (databaseUrl.includes(\"prod-sing1.nextspace.host\")) {\n return \"SE-VULTR-FIRST\";\n }\n else if (databaseUrl.includes(\"dev-first\")) {\n return \"DEV-FIRST\";\n }\n else if (databaseUrl.includes(\".ap-southeast-1.\")) {\n return \"SE\";\n }\n else if (databaseUrl.includes(\".us-west-1.\")) {\n return \"US\";\n }\n else if (databaseUrl.includes(\".eu-west-3.\")) {\n return \"EU\";\n }\n else if (databaseUrl.includes(\"bruce-prod-au\")) {\n return \"AU\";\n }\n else if (databaseUrl.includes(\"bruce-dev\")) {\n return \"DEV\";\n }\n return null;\n }\n\n export async function GetKeyByAccountId(params: {\n // Either accountId or apiSettings must be provided.\n accountId?: string,\n apiSettings?: AccountSettings.IBruceApi,\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n key: string,\n // Indicates if the key was inferred by legacy data.\n isLegacy?: boolean\n }> {\n let { accountId, apiSettings, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId && !apiSettings) {\n throw(\"Invalid accountId or apiSettings\");\n }\n const settings = apiSettings ? apiSettings : (await Account.GetAppSettings({\n api,\n accountId,\n appId: Account.EAppId.BruceApi\n })).settings as AccountSettings.IBruceApi;\n let hostingKey = settings[\"HostingLocation.Key\"];\n let isLegacy = false;\n if (!hostingKey) {\n hostingKey = settings.DBLocation;\n isLegacy = true;\n }\n if (!hostingKey) {\n hostingKey = GuessKey({\n DBServer: settings.DBServer\n });\n isLegacy = true;\n }\n return {\n key: hostingKey,\n isLegacy\n };\n }\n\n export async function GetByAccountId(params: {\n // Either accountId or apiSettings must be provided.\n accountId?: string,\n apiSettings?: AccountSettings.IBruceApi,\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n location: ILocation\n }> {\n let { accountId, apiSettings, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const data = await GetKeyByAccountId({\n accountId,\n apiSettings,\n api,\n req\n });\n if (!data?.key) {\n return null;\n }\n const key = await GetByKey({\n key: data.key,\n api,\n req\n });\n return key;\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\nimport { MessageBroker } from \"../server/message-broker\";\nimport { GuardianApi } from \"./guardian-api\";\nimport { HostingLocation } from \"../server/hosting-location\";\n\nexport namespace BruceApi {\n export interface IGetter {\n accountId: string;\n // Default settings the getter's app is running on.\n env?: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (accountId?: string, env?: A.EEnv) => BruceApi.Api;\n }\n\n /**\n * This is the request handler for Bruce Api,\n * it should be passed to any method that wants to communicate with this particular api.\n */\n export class Api extends AbstractApi {\n private accountId: string;\n public get AccountId(): string {\n return this.accountId;\n }\n\n private env: A.Env;\n private loadProm: Promise<void>;\n private loadCancelled: boolean = false;\n private messageBroker: MessageBroker.IBroker;\n public get MessageBroker(): MessageBroker.IBroker {\n return this.messageBroker;\n }\n\n // The regional base url for the account.\n // When using the CDN base url you MUST include a query param for accountId.\n private cdnBaseUrl: string;\n\n // Used for entity GET list-by-filter requests.\n // When set and viaCdn = true when performing an entity request, this will be used in place for base-url.\n // Eg: \"https://d3pb232f6pp9if.cloudfront.net/entitiesListForCDN/alex\"\n public EntityCdnUrl: string;\n // Works only for static/dynamic tilesets.\n // When set and viaCdn = true when getting a legacy tileset file, this will be used in place for base-url.\n // Eg: \"https://d15gsaz0jz5ika.cloudfront.net/alex/<TILESETID>/file/<FILEPATH>\"\n public LegacyTilesetCdnUrl: string;\n // Works for all tilesets including older ones.\n // Eg: \"https://blah.cloudfront.net/tilesets/<TILESETID>/files/<FILEPATH>?accountId=<ACCOUNT>\"\n public TilesetCdnUrl: string;\n\n // Indicates if the init process has finished loading.\n // This means the regional base url has been set and message broker is ready.\n public get Loading(): Promise<void> {\n return this.loadProm;\n }\n\n /**\n * @param params\n */\n constructor(params: {\n // Required client account to connect to.\n accountId: string,\n // Default is PROD.\n env?: A.Env,\n // @Deprecated, use loadConfig instead.\n loadRegionalBaseUrl?: boolean\n // True to load settings for regional base url and CDN.\n /// Default = false.\n loadConfig?: boolean\n // True to load message broker.\n // Default = true.\n loadWebSocket?: boolean,\n // Guardian instance used for regional url loading.\n // If not provided then a new instance of the API is made.\n guardian?: GuardianApi.Api,\n }) {\n super({\n ssidHeader: \"x-sessionid\",\n cacheId: `BRUCE_API_${params?.env}_${params?.accountId}_`\n });\n let {accountId, env, guardian, loadRegionalBaseUrl, loadConfig, loadWebSocket} = params;\n this.accountId = accountId;\n this.env = env ?? A.EEnv.PROD;\n\n if (loadRegionalBaseUrl) {\n loadConfig = true;\n }\n if (!guardian && loadConfig) {\n guardian = new GuardianApi.Api({\n env: this.env\n });\n }\n this.loadProm = this.init(guardian, loadConfig, loadWebSocket);\n }\n\n /**\n * Loads regional base url and sets up message broker.\n * @param guardian Required for loading regional base url.\n * @param loadConfig\n * @returns\n */\n private async init(\n guardian?: GuardianApi.Api,\n loadConfig?: boolean,\n loadWebSocket?: boolean\n ): Promise<void> {\n if (!this.accountId) {\n throw(\"accountId is required.\");\n }\n\n const env = this.env.toUpperCase();\n let domain = \"nextspace.host\";\n switch (env) {\n case A.EEnv.DEV:\n domain = \"nextspace-dev.net\";\n break;\n case A.EEnv.STG:\n domain = \"nextspace-stg.net\";\n break;\n case A.EEnv.UAT:\n domain = \"nextspace-uat.net\";\n break;\n case A.EEnv.PROD:\n domain = \"nextspace.host\";\n break;\n default:\n console.error(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n\n // Set using a stable default.\n this.baseUrl = `https://${this.accountId}.api.${domain}/`;\n\n if (guardian && loadConfig) {\n try {\n const host = await HostingLocation.GetByAccountId({\n accountId: this.accountId,\n api: guardian\n });\n if (host?.location) {\n const settings = host.location.Settings;\n\n // Attempt to load regional base url.\n // First try go through settings.\n let urlSet = false;\n if (settings?.BruceAPIURL) {\n let envUrl = settings.BruceAPIURL[env];\n if (envUrl) {\n envUrl = envUrl\n .replace(\"<ACCOUNTID>\", this.accountId)\n .replace(\"<ACCOUNT>\", this.accountId)\n if (envUrl && envUrl.length > 1) {\n this.baseUrl = envUrl;\n urlSet = true;\n }\n }\n }\n // Try go through host location's base url.\n // This may be wrong env which is why it's used as fallback right now.\n if (!urlSet && host.location.BruceAPIURL) {\n const regionalUrl = host.location.BruceAPIURL\n .replace(\"<ACCOUNTID>\", this.accountId)\n .replace(\"<ACCOUNT>\", this.accountId)\n .replace(\"<DOMAIN>\", domain);\n if (regionalUrl && regionalUrl.length > 1) {\n this.baseUrl = regionalUrl;\n urlSet = true;\n }\n }\n\n // Attempt to load CDN settings.\n if (settings?.CDN) {\n this.EntityCdnUrl = settings.CDN.entityURL?.[env];\n // We need to fix our configs.\n if (this.EntityCdnUrl) {\n if (this.EntityCdnUrl.includes(\"entitiesListForCDN\")) {\n this.EntityCdnUrl = this.EntityCdnUrl.replace(\"<ACCOUNT>\", this.accountId);\n }\n else {\n this.EntityCdnUrl = this.EntityCdnUrl.replace(\"<ACCOUNT>\", \"entitiesListForCDN/\" + this.accountId);\n }\n }\n this.LegacyTilesetCdnUrl = settings.CDN.legacyTilesetURL?.[env];\n this.TilesetCdnUrl = settings.CDN.tilesetURL?.[env];\n if (this.TilesetCdnUrl) {\n this.TilesetCdnUrl = this.TilesetCdnUrl.replace(\"<ACCOUNT>\", this.accountId);\n }\n\n // TilesetCdnUrl example: \"https://blah.cloudfront.net/tilesets/<TILESETID>/files/<FILEPATH>?accountId=<ACCOUNT>\".\n // Lazy at the moment to go around updating every region we have, I'll interpret the url from tilesetCdnUrl.\n if (this.TilesetCdnUrl) {\n try {\n const url = new URL(this.TilesetCdnUrl);\n this.cdnBaseUrl = `${url.protocol}//${url.hostname}/`;\n } \n catch (e) {\n console.error(e);\n }\n }\n \n }\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n\n if (loadWebSocket != false) {\n try {\n this.messageBroker = new MessageBroker.WebSocketBroker(this.baseUrl, this.env);\n }\n catch (e) {\n console.warn(\"BruceApi: Failed to create message broker.\", e);\n }\n }\n }\n\n /**\n * Warning: This method does not wait for init to finish loading.\n * This means the url could be changed once fully initialized.\n * The url will be valid either way, but the loaded one may be faster as it is region specific.\n * Await the \"Loading\" promise if you care about this.\n * @returns\n */\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n /**\n * Warning: Wait the \"Loading\" promise before using this url.\n * @returns \n */\n public GetCdnBaseUrl(): string {\n return this.cdnBaseUrl;\n }\n\n /**\n * Warning: This will cancel the init process.\n * The init process loads a region specific endpoint.\n * Setting a base url will stop that process from completing.\n * @param url\n */\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n this.loadCancelled = true;\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.get(this.baseUrl + url, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.delete(this.baseUrl + url, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.post(this.baseUrl + url, data, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n\n public async PUT(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.put(this.baseUrl + url, data, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.upload(this.baseUrl + url, blob, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\n\n/**\n * This is the request handler for Cam Api,\n * it should be passed to any method that wants to communicate with this particular api.\n * @deprecated Please use GuardianApi instead.\n */\nexport namespace CamApi {\n export interface IGetter {\n // Default settings the getter's app is running on.\n env: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (env?: A.EEnv) => CamApi.Api;\n }\n\n export class Api extends AbstractApi {\n private env: A.Env;\n\n constructor(params: {\n env?: A.Env\n }) {\n super({\n ssidHeader: \"x-sessionid\",\n cacheId: `CAM_API_${params?.env}_`\n });\n this.env = params?.env ? params.env : A.EEnv.PROD;\n this.setBaseUrl();\n }\n\n private setBaseUrl(): void {\n let codeWord = \"cam\"\n let url = \"https://<CODEWORD>.nextspace\";\n const env = this.env.toUpperCase();\n switch (env) {\n case A.EEnv.DEV:\n codeWord = \"guardian\";\n url += \"-dev.net/\";\n break;\n case A.EEnv.STG:\n codeWord = \"guardian\";\n url += \"-stg.net/\";\n break;\n case A.EEnv.UAT:\n codeWord = \"guardian\";\n url += \"-uat.net/\";\n break;\n case A.EEnv.PROD:\n url += \".host/\";\n break;\n default:\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n url = url.replace(\"<CODEWORD>\", codeWord);\n this.baseUrl = url;\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return this.get(this.baseUrl + url, params);\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return this.delete(this.baseUrl + url, params);\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return this.post(this.baseUrl + url, data, params);\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return this.upload(this.baseUrl + url, blob, params);\n }\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\n\nexport namespace GlobalApi {\n export interface IGetter {\n // Default settings the getter's app is running on.\n env: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (env?: A.EEnv) => GlobalApi.Api;\n }\n\n /**\n * This is the request handler for Global Api,\n * it should be passed to any method that wants to communicate with this particular api.\n */\n export class Api extends AbstractApi {\n private env: A.Env;\n\n constructor(params: {\n env?: A.Env\n }) {\n super({\n ssidHeader: \"x-sessionid\",\n cacheId: `GLOBAL_API_${params?.env}_`\n });\n this.env = params?.env ? params.env : A.EEnv.PROD;\n this.setBaseUrl();\n }\n\n private setBaseUrl(): void {\n let url: string;\n const env = this.env.toUpperCase();\n switch (env) {\n case A.EEnv.DEV:\n url = \"https://bruceglobal.nextspace-dev.net/\";\n break;\n case A.EEnv.STG:\n url = \"https://bruceglobal.nextspace-stg.net/\";\n break;\n case A.EEnv.UAT:\n url = \"https://bruceglobal.api.nextspace-uat.net/\";\n break;\n case A.EEnv.PROD:\n url = \"https://bruceglobal.api.nextspace.host/\";\n break;\n default:\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n this.baseUrl = url;\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return this.get(this.baseUrl + url, params);\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return this.delete(this.baseUrl + url, params);\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return this.post(this.baseUrl + url, data, params);\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return this.upload(this.baseUrl + url, blob, params);\n }\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\n\n/**\n * * @deprecated Please use GuardianApi instead.\n */\nexport namespace IdmApi {\n export interface IGetter {\n // Default settings the getter's app is running on.\n env: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (env?: A.EEnv) => IdmApi.Api;\n }\n\n /**\n * This is the request handler for Idm Api,\n * it should be passed to any method that wants to communicate with this particular api.\n */\n export class Api extends AbstractApi {\n private env: A.Env;\n\n constructor(params: {\n env?: A.Env\n }) {\n super({\n ssidHeader: \"SSID\",\n cacheId: `IDM_API_${params?.env}_`\n });\n this.env = params?.env ? params.env : A.EEnv.PROD;\n this.setBaseUrl();\n }\n\n private setBaseUrl(): void {\n let codeWord = \"idm\"\n let url = \"https://<CODEWORD>.nextspace\";\n const env = this.env.toUpperCase();\n switch (env) {\n case A.EEnv.DEV:\n codeWord = \"guardian\";\n url += \"-dev.net/\";\n break;\n case A.EEnv.STG:\n codeWord = \"guardian\";\n url += \"-stg.net/\";\n break;\n case A.EEnv.UAT:\n codeWord = \"guardian\";\n url += \"-uat.net/\";\n break;\n case A.EEnv.PROD:\n url += \".host/\";\n break;\n default:\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n url = url.replace(\"<CODEWORD>\", codeWord);\n this.baseUrl = url;\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return this.get(this.baseUrl + url, params);\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return this.delete(this.baseUrl + url, params);\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return this.post(this.baseUrl + url, data, params);\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return this.upload(this.baseUrl + url, blob, params);\n }\n }\n}","import { IDictionary } from \"../common/dictionary\";\nimport { Api } from \"./api\";\nimport { BruceApi } from \"./bruce-api\";\nimport { CamApi } from \"./cam-api\";\nimport { GlobalApi } from \"./global-api\";\nimport { GuardianApi } from \"./guardian-api\";\nimport { IdmApi } from \"./idm-api\";\n\nexport class ApiGetters {\n private bruce: IDictionary<BruceApi.Api> = {};\n private idm: IDictionary<IdmApi.Api> = {};\n private cam: IDictionary<CamApi.Api> = {};\n private guardian: IDictionary<GuardianApi.Api> = {};\n private global: IDictionary<GlobalApi.Api> = {};\n private accountId: string;\n private env: Api.EEnv;\n private sessionId: string;\n\n constructor(params: {\n accountId: string,\n env?: Api.EEnv,\n sessionId?: string\n }) {\n this.accountId = params?.accountId;\n this.env = params?.env ? params.env : Api.EEnv.PROD;\n this.sessionId = params?.sessionId;\n }\n\n public ClearCache() {\n for (const key in this.bruce) {\n this.bruce[key]?.Cache?.Clear();\n }\n for (const key in this.idm) {\n this.idm[key]?.Cache?.Clear();\n }\n for (const key in this.cam) {\n this.cam[key]?.Cache?.Clear();\n }\n for (const key in this.guardian) {\n this.guardian[key]?.Cache?.Clear();\n }\n for (const key in this.global) {\n this.global[key]?.Cache?.Clear();\n }\n }\n\n public SetAccountId(accountId: string) {\n this.accountId = accountId;\n }\n\n public GetAccountId(): string {\n return this.accountId;\n }\n\n public SetEnv(env: Api.EEnv) {\n this.env = env;\n }\n\n public GetEnv(): Api.EEnv {\n return this.env;\n }\n\n public SetSessionId(sessionId: string) {\n this.sessionId = sessionId;\n for (const key in this.bruce) {\n this.bruce[key].SetSessionId(sessionId);\n }\n for (const key in this.idm) {\n this.idm[key].SetSessionId(sessionId);\n }\n for (const key in this.cam) {\n this.cam[key].SetSessionId(sessionId);\n }\n for (const key in this.global) {\n this.global[key].SetSessionId(sessionId);\n }\n this.ClearCache();\n }\n\n public GetSessionId(): string {\n return this.sessionId;\n }\n\n public GetBruceApi(params?: {\n accountId?: string,\n env?: Api.EEnv\n }): BruceApi.Api {\n if (!params) {\n params = {};\n }\n let {accountId, env} = params;\n accountId = accountId ? accountId : this.accountId;\n env = env ? env : this.env;\n const key = `${accountId}-${env}`;\n if (!this.bruce[key]) {\n this.bruce[key] = new BruceApi.Api({\n accountId,\n env,\n loadRegionalBaseUrl: true\n });\n this.bruce[key].SetSessionId(this.sessionId);\n }\n return this.bruce[key];\n }\n\n public GetBruceGetter(): BruceApi.IGetter {\n return {\n accountId: this.accountId,\n env: this.env,\n getApi: (accountId?: string, env?: Api.EEnv) => {\n return this.GetBruceApi({accountId, env});\n }\n }\n }\n\n /**\n * Deprecated: Use GetGuardianApi instead.\n * @returns\n */\n public GetIdmApi(params?: {\n env?: Api.EEnv\n }): IdmApi.Api {\n if (!params) {\n params = {};\n }\n let {env} = params;\n env = env ? env : this.env;\n const key = `${env}`;\n if (!this.idm[key]) {\n this.idm[key] = new IdmApi.Api({\n env\n });\n this.idm[key].SetSessionId(this.sessionId);\n }\n return this.idm[key];\n }\n\n /**\n * Deprecated: Use GetGuardianGetter instead.\n * @returns\n */\n public GetIdmGetter(): IdmApi.IGetter {\n return {\n env: this.env,\n getApi: (env?: Api.EEnv) => {\n return this.GetIdmApi({env});\n }\n }\n }\n\n /**\n * Deprecated: Use GetGuardianApi instead.\n * @returns\n */\n public GetCamApi(params?: {\n env?: Api.EEnv\n }): CamApi.Api {\n if (!params) {\n params = {};\n }\n let {env} = params;\n env = env ? env : this.env;\n const key = `${env}`;\n if (!this.cam[key]) {\n this.cam[key] = new CamApi.Api({\n env\n });\n this.cam[key].SetSessionId(this.sessionId);\n }\n return this.cam[key];\n }\n\n /**\n * Deprecated: Use GetGuardianGetter instead.\n * @returns\n */\n public GetCamGetter(): CamApi.IGetter {\n return {\n env: this.env,\n getApi: (env?: Api.EEnv) => {\n return this.GetCamApi({env});\n }\n }\n }\n\n public GetGlobalApi(params?: {\n env?: Api.EEnv\n }): GlobalApi.Api {\n if (!params) {\n params = {};\n }\n let {env} = params;\n env = env ? env : this.env;\n const key = `${env}`;\n if (!this.global[key]) {\n this.global[key] = new GlobalApi.Api({\n env\n });\n this.global[key].SetSessionId(this.sessionId);\n }\n return this.global[key];\n }\n\n public GetGlobalGetter(): GlobalApi.IGetter {\n return {\n env: this.env,\n getApi: (env?: Api.EEnv) => {\n return this.GetGlobalApi({env});\n }\n }\n }\n\n public GetGuardianApi(params?: {\n env?: Api.EEnv\n }): GuardianApi.Api {\n if (!params) {\n params = {};\n }\n let {env} = params;\n env = env ? env : this.env;\n const key = `${env}`;\n if (!this.guardian[key]) {\n this.guardian[key] = new GuardianApi.Api({\n env\n });\n this.guardian[key].SetSessionId(this.sessionId);\n }\n return this.guardian[key];\n }\n\n public GetGuardianGetter(): GuardianApi.IGetter {\n return {\n env: this.env,\n getApi: (env?: Api.EEnv) => {\n return this.GetGuardianApi({env});\n }\n }\n }\n}","import { Api as A } from \"./api/api\";\r\nimport { ApiGetters } from \"./api/api-getters\";\r\n\r\ninterface IParams {\r\n isSelfManaged?: boolean;\r\n accountId?: string;\r\n env?: A.EEnv;\r\n sessionId?: string;\r\n apiGetters?: ApiGetters;\r\n}\r\n\r\n// Global instance for smaller use-cases where you don't want to manage the getters yourself.\r\nlet _getters: ApiGetters;\r\n\r\nexport namespace ENVIRONMENT {\r\n // If true, then defaults are not touched and it's assumed this is being managed.\r\n export let IS_SELF_MANAGED = false;\r\n // Unused if IS_SELF_MANAGED is false.\r\n export let PARAMS: IParams = {\r\n accountId: \"\",\r\n env: A.EEnv.UAT,\r\n sessionId: \"\"\r\n };\r\n\r\n export function Api() {\r\n if (IS_SELF_MANAGED) {\r\n throw(\"Self managed mode ON. You are getting this error because you didn't pass an Api instance to a function.\");\r\n }\r\n if (!PARAMS.accountId) {\r\n console.warn(\"No accountId set. This is required for the getters to work properly.\");\r\n }\r\n if (!_getters) {\r\n _getters = new ApiGetters({\r\n accountId: PARAMS.accountId,\r\n env: PARAMS.env ? PARAMS.env : A.EEnv.UAT,\r\n sessionId: PARAMS.sessionId\r\n });\r\n }\r\n return _getters;\r\n }\r\n\r\n export function Reset(params?: IParams) {\r\n if (IS_SELF_MANAGED) {\r\n throw(\"Self managed mode ON. You are getting this error because you didn't pass an Api instance to a function.\");\r\n }\r\n if (_getters) {\r\n _getters.ClearCache();\r\n if (params.accountId) {\r\n _getters.SetAccountId(params.accountId);\r\n }\r\n if (params.sessionId) {\r\n _getters.SetSessionId(params.sessionId);\r\n }\r\n if (params.env) {\r\n _getters.SetEnv(params.env);\r\n }\r\n }\r\n PARAMS = {\r\n ...PARAMS,\r\n ...params\r\n };\r\n }\r\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype Type = AnnDocument.EType | string;\n\n/**\n * Describes communication with the \"Annotated Document\" concept in Bruce.\n * Annotated documents are files with hotspots that can link to Entity records.\n */\nexport namespace AnnDocument {\n export function GetCacheKey(id: number) {\n return `${Api.ECacheKey.AnnDocument}${Api.ECacheKey.Id}${id}`;\n }\n\n export function GetListCacheKey(type: Type) {\n return Api.ECacheKey.AnnDocument + type;\n }\n\n export interface IHotspot {\n X: number;\n Y: number;\n Key: string;\n Description?: string;\n LinkedEntity?: {\n \"Entity.ID\": string;\n };\n }\n\n export interface ISettings {\n Hotspots?: IHotspot[];\n DrawingScaleFactorX?: number;\n DrawingScaleFactorY?: number;\n }\n\n export interface IDocument {\n ID?: number;\n Type: Type;\n Name: string;\n \"ClientFile.ID\": string;\n Settings?: ISettings;\n }\n\n export enum EType {\n SVG = \"SVG\"\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n docId: number,\n req?: Api.IReqParams\n }): Promise<{\n document: IDocument\n }> {\n let { api, docId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!docId) {\n throw(\"Doc ID is required.\");\n }\n const key = GetCacheKey(docId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`documentView/${docId}`, Api.PrepReqParams(reqParams));\n res({\n document: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n docType?: Type,\n req?: Api.IReqParams\n }): Promise<{\n documents: IDocument[]\n }> {\n let { api, docType: type, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!type) {\n type = \"\";\n }\n const cache = await api.GetCacheItem(GetListCacheKey(type), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const url = \"documentViews\" + (type ? \"?type=\" + type : \"\");\n const data = await api.GET(url, Api.PrepReqParams(reqParams));\n res({\n documents: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(type),\n value: req,\n req: reqParams\n });\n return req;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Markup } from \"../markup/markup\";\nimport { CustomFormContent } from \"./custom-form-content\";\n\n/**\n * Describes the \"Custom Form\" concept within Bruce.\n * Custom forms are dynamic dialogs that get populated with Entity data.\n */\nexport namespace CustomForm {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.CustomForm + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(typeId: string): string {\n if (typeId) {\n return Api.ECacheKey.CustomForm + Api.ECacheKey.EntityType + Api.ECacheKey.Id + typeId;\n }\n return Api.ECacheKey.CustomForm;\n }\n\n export interface IForm {\n ID?: number;\n \"EntityType.ID\"?: string;\n Name?: string;\n Settings?: CustomFormContent.ISection | Markup.IMarkup;\n Type?: EType;\n }\n\n export enum EType {\n Form = \"GENERIC\",\n Markup = \"MARKUP\"\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n formId: number,\n req?: Api.IReqParams\n }): Promise<{\n form: IForm\n }> {\n let { api, formId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n \n if (!id) {\n throw(\"Id is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(id), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`customForm/${id}`, Api.PrepReqParams(reqParams));\n res({\n form: data\n });\n } catch (err) {\n rej(err);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n formId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, formId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Id is required.\");\n }\n await api.DELETE(`customForm/${id}`, Api.PrepReqParams(reqParams))\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n entityTypeId: string,\n req?: Api.IReqParams\n }): Promise<{\n forms: IForm[]\n }> {\n let { api, entityTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const url = typeId ? `entityType/${typeId}/customForms` : \"customForms\";\n const cache = await api.GetCacheItem(GetListCacheKey(typeId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req = api.GET(url, Api.PrepReqParams(reqParams));\n const prom = req.then((data) => {\n return {\n forms: data.Items\n };\n });\n await api.SetCacheItem({\n key: GetListCacheKey(typeId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n form: IForm,\n reqParams?: Api.IReqParams\n }): Promise<{\n form: IForm\n }> {\n let { api, form: data, reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data.ID) {\n data.ID = 0;\n }\n const res = await api.POST(`customForm/${data.ID}`, data, Api.PrepReqParams(reqParams));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\n return {\n form: res\n };\n }\n}","/**\n * Describes content of a GENERIC type custom form.\n * The alternative type is MARKUP (Markup.IMarkup).\n */\nexport namespace CustomFormContent {\n export enum ECellType {\n // Description-like text box that the user types in.\n StaticText = 0,\n // Label + Value pair of an entity attribute.\n DataValue = 1,\n // Static picture.\n StaticPicture = 2,\n // Sub-section of the form. Contains other sections.\n SubSection = 3,\n // Button that opens another form (or info view).\n ButtonMore = 4,\n // Entity gallery.\n EntityPhoto = 5,\n // Embedded media frame. Eg: youtube video.\n EmbeddedMedia = 6,\n // Deprecated\n Chart = 7,\n // Similar to DataValue, except it populates a description-like text-box.\n EntityText = 8,\n // Icon and optional action associated with it.\n Icon = 9\n }\n\n export enum EFlowDirection {\n Vertically = \"v\",\n Horizontally = \"h\"\n }\n\n export interface ISection extends ICell {\n Heading?: {\n Icon?: string;\n Caption?: string;\n };\n Direction?: EFlowDirection;\n Entries?: CellContent.Content[];\n // Width of section.\n Width?: number;\n WidthUnits?: \"px\" | \"%\";\n }\n\n export interface ICell {\n Type?: ECellType;\n Style?: {\n BackgroundColor?: string;\n TextColor?: string;\n };\n }\n\n export namespace CellContent {\n export type Content = IStatic | IDataValue | IStaticImage | IMoreButton | IEntityPhoto | IEmbeddedMedia;\n\n export interface IStatic extends ICell {\n Text?: string;\n }\n \n export interface IDataValue extends ICell {\n LabelIcon?: string;\n LabelText?: string;\n ValuePath?: string;\n }\n \n export interface IStaticImage extends ICell {\n ImageUrl?: string;\n }\n \n export interface IMoreButton extends ICell {\n ReferredCustomFormID?: number;\n }\n \n export interface IEntityPhoto extends ICell {}\n \n export interface IEmbeddedMedia {\n HTML?: string;\n }\n\n export interface IEntryEntityText extends ICell {\n ValuePath?: string;\n }\n \n export interface IEntryIcon extends ICell {\n // Similar data layout to markup.\n // Icon is expected to be a font-awesome icon, eg: <i class=\"fas fa-cube\"></i>.\n icon?: string;\n // Icon color. Should be valid css.\n color?: string;\n action?: {\n type: \"NONE\" | \"LINK\" | \"RELATIONSHIPS\";\n params?: {\n URL?: string;\n };\n };\n }\n }\n}","export namespace Color {\n export interface IColor {\n // Max: 255, Min: 0.\n red: number;\n green: number;\n blue: number;\n // Max: 1, Min: 0.\n alpha: number ;\n }\n\n export enum EBlendMode {\n HIGHLIGHT,\n REPLACE,\n MIX\n }\n\n export interface IBlendSettings {\n blendMode?: EBlendMode;\n // 1 = 100% new color. 0 = original color.\n blendPercent?: number;\n }\n\n export function RandomColor(): IColor {\n // https://stackoverflow.com/a/7352887\n const brightness = 4;\n const rgb = [Math.random() * 256, Math.random() * 256, Math.random() * 256];\n const mix = [brightness * 51, brightness * 51, brightness * 51];\n const mixedrgb = [rgb[0] + mix[0], rgb[1] + mix[1], rgb[2] + mix[2]].map(function(x){\n return Math.round(x / 2.0);\n });\n const str = \"rgba(\" + mixedrgb.join(\",\") + \",0.9\" + \")\";\n return ColorFromStr(str);\n }\n\n /**\n * Attempts to parse a given color string into a model.\n * @param str \n * @returns \n */\n export function ColorFromStr(str: string): IColor {\n let r,g,b,a;\n const rgba = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([^\\)]+)\\s*)?\\)$/.exec(str);\n if (rgba) {\n r = parseInt(rgba[1]);\n g = parseInt(rgba[2]);\n b = parseInt(rgba[3]);\n a = rgba[4] != null ? parseFloat(rgba[4]) : 1;\n return {\n red: r,\n green: g,\n blue: b,\n alpha: a\n }\n }\n if (str.charAt(0) == \"#\") {\n str = str.substring(1);\n }\n if (str.length == 6) {\n // rgb.\n const parsed = /^(.{2})(.{2})(.{2})/.exec(str);\n if (!parsed) {\n return <any>null;\n }\n r = parseInt(parsed[1], 16);\n g = parseInt(parsed[2], 16);\n b = parseInt(parsed[3], 16);\n a = 1;\n }\n else if (str.length == 8) {\n // rgba.\n const parsed = /^(.{2})(.{2})(.{2})(.{2})/.exec(str);\n if (!parsed) {\n return <any>null;\n }\n r = parseInt(parsed[1], 16);\n g = parseInt(parsed[2], 16);\n b = parseInt(parsed[3], 16);\n a = parseInt(parsed[4], 16);\n if (a != 0) {\n a = a/255;\n }\n }\n else {\n return <any>null;\n }\n if (a == null) {\n a = 1;\n }\n return {\n red: r,\n blue: b,\n green: g,\n alpha: a\n }\n }\n}","export namespace ObjectUtils {\n /**\n * Generates a Bruce compatible UID.\n * @returns \n */\n export function UId(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n}","/**\n * Utility to help with parsing and wrapping Bruce paths.\n */\nexport namespace PathUtils {\n export function Parse(str: string): string[] {\n if (!str) {\n return [];\n }\n const broken: string[] = str.split(\"\\\"/\\\"\");\n if (broken.length > 0) {\n let top = broken[0];\n if (top.length > 0) {\n if (top.charAt(0) == \"\\\"\") {\n top = top.substring(1);\n }\n broken[0] = top;\n }\n const endIndex = broken.length - 1;\n let bot = broken[endIndex];\n if (bot.length > 0) {\n if (bot.charAt(bot.length - 1) == \"\\\"\") {\n bot = bot.substring(0, bot.length - 1);\n }\n broken[endIndex] = bot;\n }\n }\n return broken;\n }\n\n export function Wrap(path: string[]): string {\n let tmp: string = \"\\\"\";\n for (let i = 0; i < path.length; i++) {\n let section = path[i];\n tmp += section;\n if (i < path.length - 1) {\n tmp += \"\\\"/\\\"\";\n }\n }\n tmp += \"\\\"\";\n return tmp;\n }\n\n export function ParseLegacy(str: string): string[] {\n const broken: string[] = str.split(\".\");\n for (let i = 0; i < broken.length; i++) {\n let piece = broken[0];\n if (piece.charAt(0) == \"\\\"\") {\n piece = broken[0] = piece.substring(1);\n }\n if (piece.charAt(piece.length - 1) == \"\\\"\") {\n broken[0] = piece.substring(0, piece.length - 1);\n }\n }\n return broken;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { Bounds } from \"../common/bounds\";\nimport { Geometry } from \"../common/geometry\";\nimport { ObjectUtils } from \"../util/object-utils\";\nimport { Transform } from \"../common/transform\";\nimport { UTC } from \"../common/utc\";\nimport { EntityType } from \"./entity-type\";\nimport { PathUtils } from \"../util/path-utils\";\nimport { IDictionary } from \"../common/dictionary\";\nimport { Carto } from \"../bruce-models\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype _any = any;\n\n/**\n * Describes the \"Entity\" concept within Bruce.\n * An entity is a JSON blob containing both internal data and user-defined data.\n * Entity records have many thinks linked to them through their UIDs such as links, files and relationships.\n */\nexport namespace Entity {\n export function GetCacheKey(entityId: string, entityTypeId?: string, expandLocation?: boolean): string {\n if (!entityTypeId) {\n entityTypeId = \"\";\n }\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}${String(entityTypeId)}${String(Boolean(expandLocation))}`;\n }\n\n export function GetStartsWithKey(entityId: string) {\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}`;\n }\n\n export interface IEntity extends _any {\n Bruce: {\n \"CreatedBy.User.ID\"?: string;\n CreatedTime?: UTC.IUTC;\n \"EntityType.ID\": string;\n ID?: string;\n \"Layer.ID\"?: number[];\n };\n location?: Carto.ICarto;\n boundaries?: Bounds.IBounds;\n transform?: Transform.ITransform;\n position?: number[][];\n geometry?: Geometry.IGeometry;\n // Available if expandLocation is true.\n // Related tileset ids if any.\n tilesetID?: string[];\n // Available if expandLocation is true.\n // Relative offset to parent node.\n worldPosition?: number[][];\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n entityId: string,\n // (Optional) Entity type ID to load specific schema.\n entityTypeId?: string;\n expandLocation?: boolean,\n req?: Api.IReqParams\n }): Promise<{\n entity: IEntity\n }> {\n let { api, entityId, req: reqParams, expandLocation, entityTypeId } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const key = GetCacheKey(entityId, entityTypeId, expandLocation);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const urlParams = new URLSearchParams();\n if (expandLocation) {\n urlParams.append(\"$expand\", \"location\");\n }\n if (entityTypeId) {\n urlParams.append(\"BruceEntityType\", entityTypeId);\n }\n const data = await api.GET(\n `entity/${entityId}?${urlParams.toString()}`,\n Api.PrepReqParams(reqParams)\n );\n res({\n entity: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetListByIds(params: {\n api?: BruceApi.Api,\n entityIds: string[],\n req?: Api.IReqParams\n }): Promise<{\n entities: IEntity[]\n }> {\n let { api, entityIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!entityIds.length) {\n throw(\"Entity IDs are required.\");\n }\n const reqs: Promise<{ entity: IEntity }>[] = [];\n const reqIds: string[] = [];\n for (let i = 0; i < entityIds.length; i++) {\n const entityId = entityIds[i];\n const key = GetCacheKey(entityId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n reqs.push(cache.data);\n }\n else {\n reqIds.push(entityId);\n }\n }\n const reqData = {\n Filter: {\n ID: {\n in: reqIds\n }\n },\n PageSize: reqIds.length\n };\n if (reqIds.length > 0) {\n const req: Promise<Api.IList<Entity.IEntity>> = api.POST(\"entities\", reqData, Api.PrepReqParams(reqParams));\n for (let i = 0; i < reqIds.length; i++) {\n const entityId = reqIds[i];\n const key = GetCacheKey(entityId);\n const prom: Promise<{ entity: IEntity }> = new Promise(async (res) => {\n try {\n const data = await req;\n const item = data.Items.find(x => x.Bruce.ID == entityId);\n res({\n entity: item\n });\n }\n catch (e) {\n // No showing error as we don't want to see it 2000 times.\n }\n res(<any>null);\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n reqs.push(prom);\n }\n }\n return {\n entities: (await Promise.all(reqs)).map(x => x?.entity).filter(x => !!x)\n };\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n await api.DELETE(`entity/${entityId}`, Api.PrepReqParams(reqParams));\n api.Cache.RemoveByStartsWith(GetStartsWithKey(entityId));\n }\n\n export async function DeleteList(params: {\n api?: BruceApi.Api,\n entityIds: string[],\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!entityIds?.length) {\n throw(\"Entity IDs are required.\");\n }\n await api.POST(\"deleteEntities\", {\n Items: entityIds\n }, Api.PrepReqParams(reqParams));\n for (let i = 0; i < entityIds.length; i++) {\n const entityId = entityIds[i];\n api.Cache.RemoveByStartsWith(GetStartsWithKey(entityId));\n }\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n entity: IEntity,\n override: boolean,\n req?: Api.IReqParams\n }): Promise<{\n entity: IEntity\n }> {\n let { api, entity: data, override, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!data?.Bruce?.[\"EntityType.ID\"]) {\n throw(\"Entity Type ID is required.\");\n }\n if (!data?.Bruce?.ID) {\n data.Bruce = {\n ...data.Bruce,\n ID: ObjectUtils.UId()\n };\n }\n const reqUrl = `entity/${data.Bruce.ID}/?dataoverride=${override}&BruceEntityType=${data.Bruce[\"EntityType.ID\"]}`;\n const res = await api.POST(reqUrl, data, Api.PrepReqParams(reqParams));\n api.Cache.RemoveByStartsWith(GetStartsWithKey(<string>data.Bruce.ID));\n return {\n entity: res\n };\n }\n\n export function RemoveTag(params: {\n entity: IEntity,\n tagId: number\n }): void {\n const { entity: data, tagId } = params;\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\n const index = tags.indexOf(tagId);\n if (index >= 0) {\n tags.splice(index, 1);\n data.Bruce[\"Layer.ID\"] = tags;\n }\n }\n\n export function AddTag(params: {\n entity: IEntity,\n tagId: number\n }): void {\n const { entity: data, tagId } = params;\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\n if (!tags.includes(tagId)) {\n tags.push(tagId);\n data.Bruce[\"Layer.ID\"] = tags;\n }\n }\n\n export function SetValue(params: {\n entity: IEntity,\n path: string[],\n value: any\n }): void {\n const { entity: data, path, value } = params;\n let curData = data;\n for (let i = 0; i < path.length; i++) {\n const step = path[i];\n if (!curData[step] || typeof curData[step] != \"object\") {\n curData[step] = {};\n }\n if (i >= path.length - 1) {\n curData[step] = value;\n break;\n }\n curData = curData[step];\n }\n }\n\n export function GetValue(params: {\n entity: IEntity,\n path: string[]\n }): any {\n const { entity: data, path } = params;\n // Backwards compatibility.\n if (path.length == 1 && path[0] == \"ID\") {\n return data.Bruce?.ID;\n }\n let curData = data;\n for (let i = 0; i < path.length; i++) {\n const step = path[i];\n if (!curData[step]) {\n return null;\n }\n if (i >= path.length - 1) {\n return curData[step];\n }\n curData = curData[step];\n }\n return null;\n }\n\n /**\n * Calculates an entity's name based on attribute priority set in the type.\n * @param params\n * If true, will return the entity ID if no name can be calculated.\n * Otherwise it returns null.\n * @returns\n */\n export function CalculateName(params: {\n entity: IEntity,\n type: EntityType.IEntityType,\n defaultToId?: boolean\n }): string {\n const { entity, type, defaultToId = true } = params;\n const attrStr = type.DisplayNameAttributePath;\n if (attrStr) {\n const attrPaths = attrStr.split(\",\");\n for (let i = 0; i < attrPaths.length; i++) {\n const pathStr = attrPaths[i];\n const path = PathUtils.Parse(pathStr);\n const name = Entity.GetValue({\n entity: entity,\n path\n });\n if (name && typeof name != \"object\") {\n return name;\n }\n }\n }\n return defaultToId ? entity.Bruce.ID : null;\n }\n\n export interface IFilter {\n orderBy?: any;\n entityTypeId?: string;\n layerIds?: number[];\n bounds?: Bounds.IReqBounds;\n pageSize?: number;\n pageIndex?: number;\n lodCategoryId?: string;\n sortOrder?: Api.ESortOrder;\n entityTypeConditions?: IDictionary<any>;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n filter: IFilter,\n // Default = false.\n viaCdn?: boolean;\n // (Optional) Cache killing token to append to the request url.\n viaCdnCacheToken?: number | string;\n req?: Api.IReqParams\n }): Promise<{\n entities: IEntity[]\n }> {\n let { api, filter, req: reqParams, viaCdn, viaCdnCacheToken } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n let requestFilter: any = {};\n if (filter.entityTypeConditions) {\n requestFilter = {\n ...filter.entityTypeConditions\n };\n }\n if (filter.layerIds != null && filter.layerIds.length > 0) {\n requestFilter[\"Bruce.Layer.ID\"] = {\n equals: filter.layerIds\n };\n }\n if (filter.bounds) {\n requestFilter[\"geometry\"] = {\n \"intersects\": [\n filter.bounds.south,\n filter.bounds.north,\n filter.bounds.west,\n filter.bounds.east\n ]\n };\n }\n\n const body = {\n SortOrder: filter.sortOrder == Api.ESortOrder.Asc ? \"ASC\" : \"DESC\",\n OrderBy: filter.orderBy,\n Filter: requestFilter,\n LODType: filter.lodCategoryId,\n BruceEntityType: filter.entityTypeId,\n PageIndex: filter.pageIndex,\n PageSize: filter.pageSize\n };\n\n let entities = [];\n if (viaCdn && api.EntityCdnUrl) {\n const url = new URL(api.EntityCdnUrl);\n const urlParams = new URLSearchParams(url.search);\n urlParams.set(\"cacheToken\", String(viaCdnCacheToken ? viaCdnCacheToken : 0));\n if (body.SortOrder) {\n urlParams.set(\"SortOrder\", body.SortOrder);\n }\n if (body.OrderBy) {\n urlParams.set(\"OrderBy\", body.OrderBy);\n }\n if (body.Filter) {\n urlParams.set(\"Filter\", JSON.stringify(body.Filter));\n }\n if (body.LODType) {\n urlParams.set(\"LODType\", body.LODType);\n }\n if (body.BruceEntityType) {\n urlParams.set(\"BruceEntityType\", body.BruceEntityType);\n }\n if (body.PageIndex) {\n urlParams.set(\"PageIndex\", String(body.PageIndex));\n }\n if (body.PageSize) {\n urlParams.set(\"PageSize\", String(body.PageSize));\n }\n const urlStr = url.toString() + \"?\" + urlParams.toString();\n const data = await api.get(urlStr, Api.PrepReqParams(reqParams));\n entities = data.Items;\n }\n else {\n const data = await api.POST(\"entities\", body, Api.PrepReqParams(reqParams));\n entities = data.Items;\n // Only caching when non-CDN.\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n const id = entity.Bruce.ID;\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: {\n entity: entity\n },\n req: reqParams\n });\n }\n }\n return {\n entities\n };\n }\n}","import { Entity } from \"../entity/entity\";\nimport { PathUtils } from \"../util/path-utils\";\n\nfunction getVariable(str: string): { text: string, path: string } {\n const start = str.indexOf(\"${\");\n if (start > -1) {\n const end = str.indexOf(\"}\");\n if (end > -1) {\n if (start < end) {\n const path = str.substring(start + 2, end);\n const txt = str.substring(start, end + 1);\n return { path: path, text: txt };\n }\n }\n }\n return <any>null;\n}\n\n/**\n * Utilities for parsing \"Bruce variables\", typically within strings.\n *\n * A Bruce variable is a string that starts with \"${\" and ends with \"}\".\n * Within those brackets is a path to an attribute in an entity.\n */\nexport namespace BruceVariable {\n /**\n * Replaces all Bruce variables in a string with the value of the attribute.\n * @param str\n * @param data\n * @param legacyParse\n * @returns\n */\n export function SwapValues(params: {\n str: string,\n entity: Entity.IEntity,\n legacyParse?: boolean\n }): string {\n let { str, entity: data, legacyParse } = params;\n if (!legacyParse) {\n legacyParse = false;\n }\n while (true) {\n const variable = getVariable(str);\n if (variable) {\n const path = legacyParse ? PathUtils.ParseLegacy(variable.path) : PathUtils.Parse(variable.path);\n let value = \"\";\n if (path.length > 0) {\n value = Entity.GetValue({\n entity: data,\n path: path\n });\n }\n str = str.replace(variable.text, value);\n }\n else {\n break;\n }\n }\n return str;\n }\n}","import { Color } from \"../common/color\";\r\nimport { Entity } from \"../entity/entity\";\r\nimport { BruceVariable } from \"../common/bruce-variable\";\r\nimport { PathUtils } from \"../util/path-utils\";\r\n\r\n/**\r\n * Example: ${Test.Test1}\r\n * Needs to become [\"Test\", \"Test1\"].\r\n * We need to cull this in admin-ui.\r\n * @param path\r\n * @returns Possible paths this legacy one could mean.\r\n */\r\nfunction parseLegacyPath(path: string): string[][] {\r\n if (!path) {\r\n return [];\r\n }\r\n let paths = [];\r\n if (path.startsWith(\"${\") && path.endsWith(\"}\")) {\r\n path = path.replace(\"${\", \"\");\r\n path = path.replace(\"}\", \"\");\r\n }\r\n // Split by dots.\r\n paths.push(PathUtils.ParseLegacy(path));\r\n // Take string as is.\r\n paths.push([path]);\r\n // Split by backslashes.\r\n paths.push(PathUtils.Parse(path));\r\n // Remove duplicates.\r\n const tmpPaths = [];\r\n for (let i = 0; i < paths.length; i++) {\r\n const path = paths[i];\r\n let found = false;\r\n for (let j = 0; j < tmpPaths.length; j++) {\r\n const tmpPath = tmpPaths[j];\r\n if (tmpPath.length == path.length) {\r\n let match = true;\r\n for (let k = 0; k < tmpPath.length; k++) {\r\n const tmpPathPart = tmpPath[k];\r\n const pathPart = path[k];\r\n if (tmpPathPart != pathPart) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n if (match) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!found) {\r\n tmpPaths.push(path);\r\n }\r\n }\r\n paths = tmpPaths;\r\n return paths;\r\n}\r\n\r\n/**\r\n * Utility for calculating values from Bruce fields.\r\n * These fields are typically found in entity styles.\r\n */\r\nexport namespace Calculator {\r\n export enum EValueType {\r\n Color,\r\n Input,\r\n Gradient,\r\n Mapping,\r\n TagColor,\r\n RandomColor\r\n }\r\n\r\n export interface IMappingOption {\r\n fieldValue: string;\r\n appliedValue: string;\r\n }\r\n\r\n export interface IMappingValue {\r\n field: string;\r\n values: IMappingOption[];\r\n }\r\n\r\n export interface IGradientPoint {\r\n position: number;\r\n color: string;\r\n }\r\n\r\n export interface IGradientValue {\r\n field: string;\r\n min: number;\r\n max: number;\r\n points: IGradientPoint[];\r\n }\r\n\r\n export interface IField {\r\n value: IGradientValue | IMappingValue | string | number;\r\n type: EValueType;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options.\r\n * The context calling this should validate results and parse stuff if needed.\r\n * @deprecated use specific calls: eg GetColor or GetNumber.\r\n * @param fields\r\n * @param entity\r\n * @param tags\r\n * @returns\r\n */\r\n export function GetValue(fields: IField[], entity: Entity.IEntity, tags: any[]): string | number | Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n if (value) {\r\n value = Color.ColorFromStr(value);\r\n }\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options with assumption that desired result is a color.\r\n * Will return null if a color is not found.\r\n * @param fields\r\n * @param entity\r\n * @param tags\r\n */\r\n export function GetColor(fields: IField[], entity: Entity.IEntity, tags: any[]): Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (typeof value === \"string\") {\r\n value = Color.ColorFromStr(value);\r\n }\r\n if (value && typeof value === \"object\" && (value.red || value.red == 0)) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetNumber(fields: IField[], entity: Entity.IEntity, tags: any[]): number {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n }\r\n if (value != \"\" && value != null && value != undefined) {\r\n value = Number(value);\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetString(fields: IField[], entity: Entity.IEntity, tags: any[]): string {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Gradient:\r\n value = String(GetGradientValue(<IGradientValue>field.value, entity));\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n value = String(GetInputValue(<string>field.value, entity));\r\n break;\r\n case EValueType.Mapping:\r\n value = String(GetMappingValue(<IMappingValue>field.value, entity));\r\n break;\r\n case EValueType.RandomColor:\r\n var color = Color.RandomColor();\r\n value = `rgba(${color.red},${color.green},${color.blue},${color.alpha})`;\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = tag.Color;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetMappingValue(value: IMappingValue, entity: Entity.IEntity): string | number {\r\n const attrPaths: string[][] = parseLegacyPath(value.field);\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const attrPath = attrPaths[i];\r\n let eValue: any = Entity.GetValue({\r\n entity: entity,\r\n path: attrPath\r\n });\r\n const isValueNum = !isNaN(+eValue);\r\n\r\n for (let i = 0; i < value.values.length; i++) {\r\n const option = value.values[i];\r\n const mapValue = option.fieldValue;\r\n const isMapValueNum = !isNaN(+mapValue);\r\n\r\n if (isValueNum && (isMapValueNum || mapValue.includes(\"-\"))) {\r\n if (+mapValue == +eValue) {\r\n return option.appliedValue;\r\n }\r\n const mapSplit = mapValue.split(\"-\");\r\n if (mapSplit.length == 2) {\r\n const min = mapSplit[0];\r\n const max = mapSplit[1];\r\n if (min != \"\") {\r\n if (+eValue < +min) {\r\n continue;\r\n }\r\n }\r\n if (max != \"\") {\r\n if (+eValue > +max) {\r\n continue;\r\n }\r\n }\r\n if (min == \"\" && max == \"\") {\r\n continue;\r\n }\r\n return option.appliedValue;\r\n }\r\n }\r\n else {\r\n if (mapValue == eValue) {\r\n return option.appliedValue;\r\n }\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetGradientValue(value: IGradientValue, entity: Entity.IEntity): Color.IColor {\r\n const attrPaths: string[][] = parseLegacyPath(value.field);\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const attrPath = attrPaths[i];\r\n let eValue: any = Entity.GetValue({\r\n entity: entity,\r\n path: attrPath\r\n });\r\n eValue = Math.min(Math.max(eValue, value.min), value.max);\r\n if (eValue < value.points[0].position) {\r\n return Color.ColorFromStr(value.points[0].color);\r\n }\r\n for (let i = 0; i < value.points.length - 1; i++) {\r\n const pointA = value.points[i];\r\n const pointB = value.points[i+1];\r\n\r\n if (eValue >= pointA.position && eValue <= pointB.position) {\r\n if (pointA.position == pointB.position) {\r\n return Color.ColorFromStr(pointA.color);\r\n }\r\n const distance = (eValue - pointA.position)/(pointB.position - pointA.position);\r\n const colorA = Color.ColorFromStr(pointA.color);\r\n const colorB = Color.ColorFromStr(pointB.color);\r\n return {\r\n red: colorA.red + (colorB.red - colorA.red) * distance,\r\n green: colorA.green + (colorB.green - colorA.green) * distance,\r\n blue: colorA.blue + (colorB.blue - colorA.blue) * distance,\r\n alpha: colorA.alpha + (colorB.alpha - colorA.alpha) * distance\r\n }\r\n }\r\n }\r\n }\r\n return Color.ColorFromStr(value.points[value.points.length - 1].color);\r\n }\r\n\r\n export function GetInputValue(value: string, entity: Entity.IEntity): string | number {\r\n if (typeof value == \"string\") {\r\n try {\r\n value = BruceVariable.SwapValues({\r\n str: value,\r\n entity: entity\r\n });\r\n // Check if it includes a math operation.\r\n const MATH_REGEX = /(\\d+\\.?\\d*|\\.\\d+)([+\\-*/])(\\d+\\.?\\d*|\\.\\d+)/;\r\n if (MATH_REGEX.test(value)) {\r\n // https://rollupjs.org/guide/en/#avoiding-eval\r\n // This stops eval warning.\r\n const eval2 = eval;\r\n return eval2(value);\r\n }\r\n }\r\n catch (exception) {\r\n const e = exception as any;\r\n let suppress: boolean = false;\r\n if (e && typeof e == \"object\") {\r\n const msg: string = e.message;\r\n suppress = !!msg && (msg.includes(\"Unexpected end\") || msg.includes(\"got end of script\"));\r\n }\r\n if (!suppress) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n}","import { Carto } from \"./carto\";\n\n/**\n * Describes vector geometry that Bruce uses.\n */\nexport namespace Geometry {\n export interface IGeometry {\n // Polygon array is an array of rings.\n // There should be 1 outer ring and 0 or more inner rings.\n Polygon?: IPolygonRing[];\n MultiGeometry?: IGeometry[];\n Point?: string;\n LineString?: string;\n MultiSurface?: string;\n }\n\n export interface IPolygonRing {\n LinearRing: string;\n Facing: EPolygonRingType;\n Height?: number;\n }\n\n export enum EPolygonRingType {\n Boundaries = \"out\",\n Hole = \"in\"\n }\n\n /**\n * Turns an array of points into string vector geometry that Bruce can use.\n * This is used for saving polyline and polygon data.\n * @param points \n * @returns \n */\n export function LineStrFromPoints(points: Carto.ICarto[]): string {\n if (!points.length) {\n throw(\"points is empty.\");\n }\n let carto: Carto.ICarto = points[0];\n let lineString = `${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\n for (let i = 1; i < points.length; i++) {\n carto = points[i];\n lineString += ` ${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\n }\n return lineString;\n }\n\n /**\n * Removes same points that occur in a row.\n * This will not modify the original array.\n * @param positions \n * @returns \n */\n export function RemoveRepeatPoints(positions: Carto.ICarto[]): Carto.ICarto[] {\n const filteredList = [];\n for (let i = 0; i < positions.length; i++) {\n const pos = positions[i];\n const lastPos = filteredList.length > 0 ? filteredList[filteredList.length - 1] : null;\n if (!lastPos || (pos.latitude != lastPos.latitude || pos.longitude != lastPos.longitude || pos.altitude != lastPos.altitude)) {\n filteredList.push(pos); \n }\n }\n return filteredList;\n }\n\n export function ParsePoints(pointsStr: string): Carto.ICarto[] {\n pointsStr = pointsStr.replace(/[^\\d.,-\\s]/g, \"\");\n\n let splitterCoordinates = \" \";\n let splitterAxis = \",\";\n const commaIndex = pointsStr.indexOf(\",\");\n const spaceIndex = pointsStr.indexOf(\" \");\n if ((spaceIndex > -1 && commaIndex > spaceIndex) || commaIndex <= -1) {\n splitterCoordinates = \",\";\n splitterAxis = \" \";\n }\n\n let points = pointsStr.trim().split(splitterCoordinates);\n points = points.filter(a => a != \"\");\n\n const result: Carto.ICarto[] = [];\n for (let i = 0; i < points.length; i++) {\n const pointData = points[i];\n const coords = pointData.trim().split(splitterAxis);\n if (coords.length == 2 || coords.length == 3) {\n const longitude = Number(coords[0]);\n const latitude = Number(coords[1]);\n const altitude = Number(coords.length >= 3 ? coords[2] : 0);\n if (longitude != null && latitude != null) {\n result.push({\n altitude: altitude,\n latitude: latitude,\n longitude: longitude\n });\n }\n else {\n console.warn(\"Invalid point data detected.\", pointData);\n }\n }\n }\n return result;\n }\n\n /**\n * Parses both string and object Bruce geometry.\n * String geometry is legacy Bruce data.\n * @param geometry \n * @returns \n */\n export function ParseGeometry(geometry: any): IGeometry {\n if (typeof geometry == \"string\") {\n let positions: Carto.ICarto[] = [];\n const geometryParsed: string[] = (geometry || \"\").split(\";\");\n for (let i = 0; i < geometryParsed.length; i++) {\n const data = geometryParsed[i];\n const points = ParsePoints(data);\n if (points && points.length > 0) {\n positions = positions.concat(points);\n }\n }\n positions = RemoveRepeatPoints(positions);\n const newGeometry: IGeometry = {};\n if (positions.length > 0) {\n const topPoint = positions[0];\n newGeometry.Point = `${topPoint.latitude},${topPoint.longitude}` + (topPoint.altitude != null ? `,${topPoint.altitude}` : \"\");\n if (positions.length > 1) {\n newGeometry.Polygon = [{ Facing: EPolygonRingType.Boundaries, LinearRing: LineStrFromPoints(positions) }];\n }\n if (positions.length > 2) {\n newGeometry.LineString = LineStrFromPoints(positions);\n }\n }\n return newGeometry;\n }\n return geometry;\n }\n}","import { Entity } from \"../entity/entity\";\nimport { Carto } from \"./carto\";\nimport { Geometry } from \"./geometry\";\n\nexport namespace Bounds {\n /**\n * Description of an entity's bounding box.\n */\n export interface IBounds {\n maxLatitude: number;\n maxLongitude: number;\n minLatitude: number;\n minLongitude: number;\n maxAltitude: number;\n minAltitude: number;\n }\n\n /**\n * Describes the boundaries used in entity requests.\n */\n export interface IReqBounds {\n south: number;\n west: number;\n north: number;\n east: number;\n\n // Used to exclude requests from UI that fall outside of min-max boundaries.\n // TODO: Migrate into \"entity-filter-getter.ts\", \"entity-globe.ts\" and then remove from here.\n alt?: number;\n }\n\n /**\n * Calculates boundaries from entity.\n * This will not use the set entity boundaries and instead calculate from geometry and location.\n * @param entity \n */\n export function FromEntity(entity: Entity.IEntity): IBounds {\n const bounds: IBounds = {\n maxAltitude: null,\n maxLatitude: null,\n maxLongitude: null,\n minAltitude: null,\n minLatitude: null,\n minLongitude: null\n };\n const points: Carto.ICarto[] = [];\n if (entity.location) {\n points.push(entity.location);\n }\n if (entity.geometry) {\n if (entity.geometry.Point) {\n points.push(...Geometry.ParsePoints(entity.geometry.Point));\n }\n if (entity.geometry.LineString) {\n points.push(...Geometry.ParsePoints(entity.geometry.LineString));\n }\n if (entity.geometry.Polygon) {\n for (const ring of entity.geometry.Polygon) {\n points.push(...Geometry.ParsePoints(ring.LinearRing));\n }\n }\n }\n for (const point of points) {\n if (bounds.maxLatitude == null || point.latitude > bounds.maxLatitude) {\n bounds.maxLatitude = point.latitude;\n }\n if (bounds.maxLongitude == null || point.longitude > bounds.maxLongitude) {\n bounds.maxLongitude = point.longitude;\n }\n if (bounds.maxAltitude == null || point.altitude > bounds.maxAltitude) {\n bounds.maxAltitude = point.altitude;\n }\n if (bounds.minLatitude == null || point.latitude < bounds.minLatitude) {\n bounds.minLatitude = point.latitude;\n }\n if (bounds.minLongitude == null || point.longitude < bounds.minLongitude) {\n bounds.minLongitude = point.longitude;\n }\n if (bounds.minAltitude == null || point.altitude < bounds.minAltitude) {\n bounds.minAltitude = point.altitude;\n }\n }\n return bounds;\n }\n}","interface IBruceEventCallback {\n _id: number;\n removeCallback: () => void;\n callback: (data: any) => void;\n}\n\n/**\n * Simple event utility.\n * Instantiate the model, then subscribe and trigger events.\n */\nexport class BruceEvent<TArgs> {\n // Counter to help differentiate subscriptions.\n private _counter: number = 0;\n\n // Record of all callback subscriptions for this event.\n private callbacks: IBruceEventCallback[] = [];\n\n\n public Subscribe(callback: (data: TArgs) => void): (() => void) {\n let id = this._counter++;\n let newBruceEventCallback: IBruceEventCallback = {\n \t_id: id,\n \tremoveCallback: () => {\n \t\tthis.Unsubscribe(id);\n \t},\n \tcallback: callback\n };\n this.callbacks.push(newBruceEventCallback);\n return newBruceEventCallback.removeCallback;\n }\n\n public Unsubscribe(id: number): void {\n let index = this.callbacks.findIndex(x => x._id == id);\n if (index > -1) {\n this.callbacks.splice(index, 1);\n }\n }\n\n public Trigger(data?: TArgs): void {\n let callbacks = this.callbacks;\n for (let i = 0; i < callbacks.length; i++) {\n let callback = callbacks[i];\n if (callback.callback) {\n callback.callback(data);\n }\n }\n }\n\n public Clear(): void {\n this.callbacks = [];\n }\n}","export namespace Camera {\n export enum EFrustum {\n Perspective,\n Orthographic\n }\n}","/**\n * Describes 2d and 3d coordinates.\n * \n * In 2d the x/y typically refers to a window left/top offset.\n * In 3d the x/y/z, the units are in meters.\n */\nexport namespace Cartes {\n export interface ICartes2 {\n x: number;\n y: number;\n }\n\n export interface ICartes3 extends ICartes2 {\n z: number;\n }\n\n export function ValidateCartes2(cartes: ICartes2): boolean {\n if (!cartes) {\n return false;\n }\n else if (!cartes.x && cartes.x != 0) {\n return false;\n }\n else if (!cartes.y && cartes.y != 0) {\n return false;\n }\n return true;\n }\n\n export function ValidateCartes3(cartes: ICartes3): boolean {\n if (!ValidateCartes2(cartes)) {\n return false;\n }\n else if (!cartes.z && cartes.z != 0) {\n return false;\n }\n return true;\n }\n\n export function IsEqualCartes2(a: ICartes2, b: ICartes2): boolean {\n if (a.x != b.x) {\n return false;\n }\n else if (a.y != b.y) {\n return false;\n }\n return true;\n }\n\n export function IsEqualCartes3(a: ICartes3, b: ICartes3): boolean {\n if (!IsEqualCartes2(a, b)) {\n return false;\n }\n else if (a.z != b.z) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the given ring is closed.\n * A ring is closed if the first and last point are equal.\n * A ring with less than 2 points is not closed.\n * @param points \n * @returns \n */\n export function IsRing2Closed(points: ICartes2[]) {\n if (points.length < 2) {\n return false;\n }\n else if (!IsEqualCartes2(points[0], points[points.length - 1])) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the given ring is closed.\n * A ring is closed if the first and last point are equal.\n * A ring with less than 2 points is not closed.\n * @param points \n * @returns \n */\n export function IsRing3Closed(points: ICartes3[]) {\n if (points.length < 2) {\n return false;\n }\n else if (!IsEqualCartes3(points[0], points[points.length - 1])) {\n return false;\n }\n return true;\n }\n\n /**\n * Closes given ring by adding the first point to the end of the array.\n * This will mutate the given array.\n * Will not do anything if the ring is already closed.\n * @param points \n * @returns \n */\n export function CloseRing2(points: ICartes2[]) {\n if (points.length < 2) {\n return;\n }\n else if (IsRing2Closed(points)) {\n return;\n }\n points.push(points[0]);\n }\n\n /**\n * Closes given ring by adding the first point to the end of the array.\n * This will mutate the given array.\n * Will not do anything if the ring is already closed.\n * @param points \n * @returns \n */\n export function CloseRing3(points: ICartes3[]) {\n if (points.length < 2) {\n return;\n }\n else if (IsRing3Closed(points)) {\n return;\n }\n points.push(points[0]);\n }\n}","/**\n * Describes a geographic point.\n * The units of the stored data should be in Degrees.\n * Utilities may use this in Radians for temporary calculations.\n */\nexport namespace Carto {\n export interface ICarto {\n latitude: number;\n longitude: number;\n altitude: number;\n }\n\n export function ValidateCarto(carto: ICarto): boolean {\n if (!carto) {\n return false;\n }\n else if (!carto.longitude && carto.longitude != 0) {\n return false;\n }\n else if (!carto.latitude && carto.latitude != 0) {\n return false;\n }\n return true;\n }\n\n export function IsEqual(a: ICarto, b: ICarto): boolean {\n if (a.longitude != b.longitude) {\n return false;\n }\n else if (a.latitude != b.latitude) {\n return false;\n }\n return true;\n }\n\n export function GetCenter(list: ICarto[]): ICarto {\n let center = { \n longitude: 0, \n latitude: 0, \n altitude: 0 \n };\n for (let i = 0; i < list.length; i++) {\n const carto = list[i];\n center.longitude += carto.longitude;\n center.latitude += carto.latitude;\n if (carto.altitude) {\n center.altitude += carto.altitude;\n }\n }\n if (center.longitude) {\n center.longitude /= list.length;\n }\n if (center.latitude) {\n center.latitude /= list.length;\n }\n if (center.altitude) {\n center.altitude /= list.length;\n }\n return center;\n }\n}","/**\n * Controls the flow of method calls.\n * If you have a method that may be called often, but you don't want it to run often, use this.\n */\nexport class DelayQueue {\n // The callback is the method we want to control queue for.\n private callback: () => void;\n\n // Millisecond delay.\n public delay: number = 200;\n\n // Date-time stamp for the last callback call.\n private lastCallTime: number = <any>null;\n\n // The delay timeout for calling update.\n private delayTimeout: any;\n\n\n constructor(callback: () => void, delay: number = 200) {\n this.callback = callback;\n this.delay = delay;\n }\n\n public Call(force: boolean = false): void {\n if (this.lastCallTime == null) {\n force = true;\n }\n if (force) {\n let endDate = new Date().getTime();\n this.doCall(endDate);\n }\n else {\n const endDate = new Date().getTime();\n const seconds = (endDate - this.lastCallTime) / 1000;\n const delay = this.delay / 1000;\n if (seconds > delay) {\n this.doCall(endDate);\n }\n else if (this.delayTimeout == null) {\n const diff = (delay - seconds) * 1000;\n this.delayTimeout = setTimeout(() => {\n this.delayTimeout = null;\n this.Call();\n }, diff + 0.02);\n }\n }\n }\n\n private doCall(endDate: number): void {\n if (this.delayTimeout != null) {\n clearTimeout(this.delayTimeout);\n this.delayTimeout = null;\n }\n this.lastCallTime = endDate;\n this.callback();\n }\n\n public Dispose(): void {\n if (this.delayTimeout != null) {\n clearTimeout(this.delayTimeout);\n this.delayTimeout = null;\n }\n }\n}","/**\n * Describes a Bruce stored date.\n */\nexport namespace UTC {\n export enum EMonth {\n January = 1,\n February = 2,\n March = 3,\n April = 4,\n May = 5,\n June = 6,\n July = 7,\n August = 8,\n September = 9,\n October = 10,\n November = 11,\n December = 12\n }\n\n export interface IUTC {\n d: number;\n hh: number;\n m: EMonth | number;\n mm: number;\n ss: number;\n y: number;\n }\n\n export function ToDate(utc: IUTC): Date {\n return new Date(utc.y, utc.m - 1, utc.d, utc.hh, utc.mm, utc.ss, 0);\n }\n\n export function FromDate(date: Date): IUTC {\n return {\n y: date.getUTCFullYear(),\n m: date.getUTCMonth() + 1,\n d: date.getUTCDate(),\n hh: date.getUTCHours(),\n mm: date.getUTCMinutes(),\n ss: date.getUTCSeconds()\n };\n }\n}","export class LRUCache<TKey, TValue> {\n private readonly capacity: number;\n private readonly cache: Map<TKey, TValue>;\n\n constructor(capacity: number) {\n this.capacity = capacity;\n this.cache = new Map<TKey, TValue>();\n }\n\n public Get(key: TKey): TValue | undefined {\n const value = this.cache.get(key);\n if (value) {\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n public Set(key: TKey, value: TValue): void {\n if (this.cache.size >= this.capacity) {\n const leastRecentlyUsedKey = this.cache.keys().next().value;\n this.cache.delete(leastRecentlyUsedKey);\n }\n this.cache.set(key, value);\n }\n}\n","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype Type = EntityAttachmentType.EType | string;\n\n/**\n * Describes the \"Entity Attachment Type\" concept within Bruce.\n * It is a record that describes the purpose of an attachment.\n */\nexport namespace EntityAttachmentType {\n export function GetCacheKey(id: Type): string {\n return Api.ECacheKey.AttachmentType + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.AttachmentType;\n }\n\n export interface IType {\n Description: string;\n ID: string | EType;\n Name: string;\n }\n\n export enum EType {\n Photo = \"photo\",\n Document = \"document\"\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n attachmentTypeId: Type,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, attachmentTypeId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Type ID is required.\");\n }\n await api.DELETE(`entityAttachmentType/${id}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(id));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n attachmentType: IType,\n req?: Api.IReqParams\n }): Promise<{\n attachmentType: IType\n }> {\n let { api, attachmentType: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.ID) {\n throw(\"Type ID is required.\");\n }\n const res = await api.POST(`entityAttachmentType/${data.ID}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n attachmentType: res\n };\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n reqParams?: Api.IReqParams\n }): Promise<{\n attachmentTypes: IType[]\n }> {\n let { api, reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entityAttachmentTypes`, Api.PrepReqParams(reqParams));\n res({\n attachmentTypes: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ClientFile } from \"../client-file/client-file\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { EntityAttachmentType } from \"./entity-attachment-type\";\n\ntype Type = EntityAttachmentType.EType | string;\n\n/**\n * Describes the \"Entity Attachment\" concept within Bruce.\n * An entity attachment is an arbitrary file record that is linked to an entity record.\n * The same file can be attached to multiple entities.\n */\nexport namespace EntityAttachment {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.Attachment + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(entityId: string): string {\n return Api.ECacheKey.Attachment + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface IAttachment {\n ID: number;\n ClientFile?: ClientFile.IClientFile;\n Group?: string;\n \"ClientFile.ID\": string;\n DisplayOrder?: number;\n \"Entity.ID\": string;\n \"EntityAttachmentType.ID\": Type;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n entityId: string,\n attachments: IAttachment[],\n req?: Api.IReqParams\n }): Promise<{\n attachments: IAttachment[]\n }> {\n let { api, attachments, req, entityId } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!attachments?.length) {\n return {\n attachments: []\n };\n }\n const res = await api.POST(`entity/${entityId}/attachments`, {\n attachments\n }, Api.PrepReqParams(req));\n for (let i = 0; i < attachments.length; i++) {\n if (attachments[i].ID) {\n api.Cache.Remove(GetCacheKey(attachments[i].ID));\n }\n }\n await api.Cache.Remove(GetListCacheKey(entityId));\n return {\n attachments: res.attachments\n };\n }\n\n export async function UpdateOrder(params: {\n api?: BruceApi.Api,\n entityId: string,\n attachmentTypeId: Type,\n attachments: IAttachment[],\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, attachmentTypeId: typeId, attachments, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId || !typeId || !attachments?.length) {\n throw(\"Entity ID, Type ID, and Attachments are required.\");\n }\n const reqData = {\n \t\"DisplayOrder.Start\": 0,\n \t\"ClientFile.ID\": attachments.map(x => x[\"ClientFile.ID\"])\n };\n await api.POST(`entity/${entityId}/attachments/${typeId}/setOrder`, reqData, Api.PrepReqParams(reqParams));\n for (let i = 0; i < attachments.length; i++) {\n api.Cache.Remove(GetCacheKey(attachments[i].ID));\n }\n await api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n attachmentId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, attachmentId, entityId, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!attachmentId || !entityId) {\n throw(\"Entity id and attachment id.\");\n }\n await api.DELETE(`entity/${entityId}/attachments/${attachmentId}`, Api.PrepReqParams(req));\n await api.Cache.Remove(GetCacheKey(attachmentId));\n await api.Cache.Remove(GetListCacheKey(params.entityId));\n }\n\n export async function GetListByEntityId(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n attachments: IAttachment[]\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const cache = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/${entityId}/attachments`, Api.PrepReqParams(reqParams));\n res({\n attachments: (data.attachments ? data.attachments : data.Items)\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityId),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Upload(params: {\n api?: BruceApi.Api,\n file: Blob,\n entityId: string,\n attachmentTypeId: Type,\n req?: Api.IUploadReqParams\n }): Promise<{\n attachment: IAttachment\n }> {\n let { api, file, entityId, attachmentTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId || !typeId || !file) {\n throw(\"Entity ID, Type ID, and File are required.\");\n }\n const url = `entity/${entityId}/attachment/${typeId}`;\n const res = await api.UPLOAD(url, file, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetListCacheKey(entityId));\n return {\n attachment: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Entity Comment\" concept within Bruce.\n * An entity comment is a user written message that is linked to an entity record.\n */\nexport namespace EntityComment {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.Comment + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(entityId: string): string {\n return Api.ECacheKey.Comment + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface IComment {\n Comment: string;\n \"Created.ByUser.ID\": string;\n \"Created.Date\": UTC.IUTC;\n ID: number;\n RepliesCount: number;\n \"ReplyTo.Comment.ID\": number;\n \"TargetObject.ID\": string;\n \"TargetObject.Type\": string;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n comment: IComment,\n req?: Api.IReqParams\n }): Promise<{\n comment: IComment\n }> {\n let { api, comment: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.[\"TargetObject.ID\"]) {\n throw(\"TargetObject.ID (entity id) is required.\");\n }\n const url = `entity/${data[\"TargetObject.ID\"]}/comment` + (data.ID == null ? \"\" : \"/\" + data.ID);\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\n return {\n comment: res\n };\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n commentId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, commentId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!commentId) {\n throw(\"Comment ID is required.\");\n }\n await api.DELETE(`entity/${entityId}/comment/${commentId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(commentId));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\n }\n\n export async function GetListByEntityId(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n comments: IComment[]\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const cache = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/${entityId}/comments`, Api.PrepReqParams(reqParams));\n res({\n comments: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityId),\n value: req,\n req: reqParams\n });\n return req;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Entity Link\" concept within Bruce.\n * An entity link is a URL linked to an entity record.\n */\nexport namespace EntityLink {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.Link + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(entityId: string): string {\n return Api.ECacheKey.Link + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface ILink {\n DisplayName: string;\n ID?: number;\n \"Entity.ID\": string;\n URL: string;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n link: ILink,\n req?: Api.IReqParams\n }): Promise<{\n link: ILink\n }> {\n let { api, link: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.[\"Entity.ID\"]) {\n throw(\"Entity ID is required.\");\n }\n const url = `entity/${data[\"Entity.ID\"]}/link` + (data.ID == null ? \"\" : \"/\" + data.ID);\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(<number>data.ID));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\n return {\n link: res\n };\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n linkId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, linkId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n \n if (!linkId) {\n throw(\"Link ID is required.\");\n }\n await api.DELETE(`entity/${entityId}/link/${linkId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(linkId));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\n }\n\n export async function GetListByEntityId(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n links: ILink[]\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const cache = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/${entityId}/links`, Api.PrepReqParams(reqParams));\n res({\n links: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityId),\n value: req,\n req: reqParams\n });\n return req;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ClientFile } from \"../client-file/client-file\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Entity LOD\" concept within Bruce.\n * LOD stands for Level of Detail.\n * An lod record is a possible 2d/3d visualization of the entity record.\n * The most common kind is a GLB.\n */\nexport namespace EntityLod {\n export function GetCacheKey(url: string): string {\n return Api.ECacheKey.Lod + Api.ECacheKey.Id + url;\n }\n\n export function GetTypeListKey(typeId: string, group: string): string {\n return Api.ECacheKey.Lod + Api.ECacheKey.EntityType + typeId + Api.ECacheKey.Id + group;\n }\n\n export function GetEntityListKey(entityId: string): string {\n return Api.ECacheKey.Lod + Api.ECacheKey.Entity + entityId;\n }\n\n export interface ILod {\n ClientFile?: ClientFile.IClientFile;\n \"ClientFile.ID\": string;\n \"Entity.ID\": string;\n \"LODCategory.Key\": string;\n Level: number;\n Group?: string;\n }\n\n export interface IEntityLodUpdate {\n \"ClientFile.ID\": string;\n \"LODCategory.Key\": string;\n Level: number;\n }\n\n export function GetUrl(params: {\n api?: BruceApi.Api,\n entityId: string,\n categoryId: string,\n level: number,\n strict?: boolean\n }): {\n url: string\n } {\n let { api, entityId, categoryId, level, strict } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n if (!categoryId) {\n categoryId = \"GLB\";\n }\n if (!level) {\n level = 0;\n }\n let url: string = api.GetBaseUrl() + `entity/${entityId}/lod/${categoryId}/${level}`;\n if (strict) {\n url = url + \"?strict=true\";\n }\n return {\n url: url\n };\n }\n\n export async function GetUrlFileId(params: {\n api?: BruceApi.Api,\n url: string,\n req?: Api.IReqParams\n }): Promise<{\n clientFileId: string\n }> {\n let { api, url, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!url) {\n throw(\"Url is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(url), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const record: ILod = await api.get(url, Api.PrepReqParams(reqParams));\n res({\n clientFileId: record[\"ClientFile.ID\"]\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(url),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function GetLods(params: {\n api?: BruceApi.Api,\n filter: Filter.IListParams,\n req?: Api.IReqParams\n }): Promise<{\n lods: Filter.IListResItem[]\n }> {\n let { api, filter, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!filter?.Items?.length) {\n throw(\"Items are required.\");\n }\n const data = await api.POST(\"entity/getlods\", filter, reqParams);\n return {\n lods: data.Items\n };\n }\n\n export async function GetEntityLods(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n lods: ILod[]\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity id is required.\");\n }\n const cache = await api.GetCacheItem(GetEntityListKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req = api.GET(`entity/${entityId}/lods?includeClientFiles=yes`, Api.PrepReqParams(reqParams));\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n lods: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetEntityListKey(entityId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n /**\n * Returns lods for a specified entity type.\n * @param params\n */\n export async function GetTypeLods(params: {\n api?: BruceApi.Api,\n entityTypeId: string,\n group?: string,\n req?: Api.IReqParams\n }): Promise<{\n lods: ILod[]\n }> {\n let { api, entityTypeId: typeId, group, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!group) {\n group = \"DEFAULT\";\n }\n const cache = await api.GetCacheItem(GetTypeListKey(typeId, group), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const url = `entityType/${typeId}/lods?includeClientFiles=yes` + (group ? \"&group=\" + group : \"\");\n const req = api.GET(url, Api.PrepReqParams(reqParams));\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n lods: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetTypeListKey(typeId, group),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n } & IEntityLodUpdate): Promise<void> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!params[\"ClientFile.ID\"] || !params[\"LODCategory.Key\"] || (!params.Level && params.Level !== 0)) {\n throw(\"ClientFile.ID, LODCategory.Key and Level are required.\");\n }\n const res = await api.POST(`entity/${entityId}/lod/${params[\"LODCategory.Key\"]}/${params.Level}`, {\n \"Level\": params.Level,\n \"ClientFile.ID\": params[\"ClientFile.ID\"]\n }, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetEntityListKey(entityId));\n return res;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n lodCategoryId: string,\n level: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, lodCategoryId, level, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId || !lodCategoryId) {\n throw(\"Entity ID and LOD Category ID are required.\");\n }\n level = +level;\n if (isNaN(level)) {\n throw(\"Level is required. It must be a number.\");\n }\n await api.POST(`entity/${entityId}/deleteLODs`, {\n Items: [{ \"LODCategory.Key\": lodCategoryId, \"Level\": level }]\n }, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetEntityListKey(entityId));\n }\n\n export namespace Filter {\n export interface IListParamsItem {\n \"entityId\": string,\n \"categoryId\": string,\n \"group\"?: string,\n \"level\"?: number\n }\n\n export interface IListParams {\n \"strict\": boolean,\n \"externalSources\": boolean,\n \"Items\": IListParamsItem[]\n }\n\n export interface IListResItem {\n clientFileId: string;\n entityId: string;\n accountId: string;\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\nexport namespace EntityLodCategory {\n export function GetCacheKey(id: string): string {\n return Api.ECacheKey.LodCategory + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.LodCategory;\n }\n\n export interface ICategory {\n Description?: string;\n Key: string;\n Name: string;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n categories: ICategory[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"lodCategories\", Api.PrepReqParams(reqParams));\n res({\n categories: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n categoryId: string,\n req?: Api.IReqParams\n }): Promise<{\n category: ICategory\n }> {\n let { api, categoryId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Lod category id is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(id), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`lodCategory/${id}`, Api.PrepReqParams(reqParams));\n res({\n category: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n categoryId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, categoryId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Lod category id is required.\");\n }\n await api.DELETE(`lodCategory/${id}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(id));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n category: ICategory,\n req?: Api.IReqParams\n }): Promise<{\n category: ICategory\n }> {\n let { api, category: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data.Key || !data.Name) {\n throw(\"Lod category key and name are required.\");\n }\n const res = await api.POST(`lodCategory/${data.Key}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.Key));\n api.Cache.Remove(GetListCacheKey());\n return {\n category: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { ObjectUtils } from \"../util/object-utils\";\n\n/**\n * Describes the \"Entity Relationship Type\" concept within Bruce.\n * A relationship type record describes the purpose of a relationship.\n */\nexport namespace EntityRelationType {\n export function GetCacheKey(id: string): string {\n return Api.ECacheKey.RelationType + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.RelationType;\n }\n\n export interface IType {\n ID: string;\n ForwardName: string;\n ReverseName: string;\n Name: string;\n FlipDisplayDirection?: boolean;\n EntityDisplaySettingID?: string;\n \"Relation.EntityType.ID\"?: string;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n relationTypeId: string,\n req?: Api.IReqParams\n }): Promise<{\n relationType: IType\n }> {\n let { api, relationTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!typeId) {\n throw(\"Type ID is required.\");\n }\n const key = GetCacheKey(typeId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entityRelationType/${typeId}`, Api.PrepReqParams(reqParams));\n res({\n relationType: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n relationTypeId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, relationTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!typeId) {\n throw(\"Type ID is required.\");\n }\n await api.DELETE(`entityRelationType/${typeId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(typeId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n relationTypes: IType[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"entityRelationTypes\", Api.PrepReqParams(reqParams));\n res({\n relationTypes: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n relationType: IType,\n req?: Api.IReqParams\n }): Promise<{\n relationType: IType\n }> {\n let { api, relationType: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.ForwardName || !data?.ReverseName) {\n throw(\"Forward and reverse names are required.\");\n }\n if (!data.ID) {\n data.ID = ObjectUtils.UId();\n }\n const res = await api.POST(`entityRelationType/${data.ID}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n relationType: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Entity } from \"./entity\";\n\n/**\n * Describes the \"Entity Relationship\" concept within Bruce.\n * An entity relationship is an arbitrary link between two entity records.\n * The relationship can have a \"data entity\" linked to it as well for the relationship to store arbitrary data about itself.\n */\nexport namespace EntityRelation {\n export function GetCacheKey(entityA: string, entityB: string, typeId: string): string {\n return `${Api.ECacheKey.Relation}${Api.ECacheKey.Id}${entityA}${Api.ECacheKey.Id}${entityB}${Api.ECacheKey.Id}${typeId}`;\n }\n\n export function GetEntityCacheKey(entityId: string): string {\n return Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export function GetListCacheKey(entityId: string, params: IListParams): string {\n return Api.ECacheKey.Relation + Api.ECacheKey.RelationType +\n Api.ECacheKey.Id + params.relationTypeId +\n Api.ECacheKey.Id + params.oneWayOnly +\n Api.ECacheKey.Id + params.loadEntityData +\n Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface IRelation {\n \"Principal.Entity.ID\": string;\n \"Related.Entity.ID\": string;\n RelatedEntity?: Entity.IEntity;\n PrincipalEntity?: Entity.IEntity;\n \"Relation.Type.ID\": string;\n RelationType?: any;\n \"Data.Entity.ID\"?: string;\n }\n\n export interface IListParams {\n relationTypeId?: string;\n oneWayOnly?: boolean;\n loadEntityData?: boolean;\n }\n\n export async function Create(params: {\n api?: BruceApi.Api,\n relation: IRelation,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, relation: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data[\"Principal.Entity.ID\"] || !data[\"Related.Entity.ID\"] || !data[\"Relation.Type.ID\"]) {\n throw(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\n }\n const reqData = {\n \"Related.Entity.ID\": [data[\"Related.Entity.ID\"]]\n };\n const url = `entity/${data[\"Principal.Entity.ID\"]}/relation/${data[\"Relation.Type.ID\"]}/add`;\n await api.POST(url, reqData, Api.PrepReqParams(reqParams));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + data[\"Relation.Type.ID\"]);\n if (data[\"Data.Entity.ID\"]) {\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + data[\"Data.Entity.ID\"]);\n }\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n principalEntityId: string,\n relatedEntityId: string,\n relationTypeId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, principalEntityId, relatedEntityId, relationTypeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!principalEntityId || !relatedEntityId || !relationTypeId) {\n throw new Error(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\n }\n const url = `entity/${principalEntityId}/relation/${relationTypeId}/delete`;\n await api.POST(url, {\n \"Related.Entity.ID\": [relatedEntityId]\n }, Api.PrepReqParams(reqParams));\n\n // Remove related cache entries\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + principalEntityId);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + relatedEntityId);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + relationTypeId);\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n relation: IRelation,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, relation: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data[\"Principal.Entity.ID\"] || !data[\"Related.Entity.ID\"] || !data[\"Relation.Type.ID\"]) {\n throw(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\n }\n const url = `entity/${data[\"Principal.Entity.ID\"]}/otherEntityID/${data[\"Related.Entity.ID\"]}/relation/${data[\"Relation.Type.ID\"]}/update`;\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + data[\"Relation.Type.ID\"]);\n if (data[\"Data.Entity.ID\"]) {\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + data[\"Data.Entity.ID\"]);\n }\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n entityId: string,\n filter: IListParams,\n req?: Api.IReqParams\n }): Promise<{\n relations: IRelation[]\n }> {\n let { api, entityId, filter, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n filter = {\n relationTypeId: \"\",\n oneWayOnly: false,\n loadEntityData: false,\n ...filter\n }\n const cache = await api.GetCacheItem(GetListCacheKey(entityId, filter), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n let url = `entity/${entityId}/relations`;\n if (filter.relationTypeId) {\n url += \"/\" + filter.relationTypeId;\n }\n url += `?Oneway=${filter.oneWayOnly}&LoadInfo=${filter.loadEntityData}`;\n const data = await api.GET(url, Api.PrepReqParams(reqParams));\n res({\n relations: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityId, filter),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function GetByDataEntityId(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n relation: IRelation\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const cache = await api.GetCacheItem(GetEntityCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/relation/${entityId}/dataentity`, Api.PrepReqParams(reqParams));\n res({\n relation: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetEntityCacheKey(entityId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { IDictionary } from \"../common/dictionary\";\nimport { ENVIRONMENT } from \"../environment\";\n/**\n * Describes the \"Entity Source\" concept within Bruce.\n * An entity source is a record which links an arbitrary source id to a Bruce entity id.\n * For example an OSM building id to a Bruce entity id.\n */\nexport namespace EntitySource {\n export function GetCacheKey(sourceId: number, sourceKey: string): string {\n return `${Api.ECacheKey.EntitySource}${Api.ECacheKey.Id}${sourceId}${Api.ECacheKey.Id}${sourceKey}`;\n }\n\n export interface ISource {\n \"Entity.ID\": string;\n \"Source.ID\": number;\n \"SourceRecord.Key\": string;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n sourceId: number,\n sourceKey: string,\n req?: Api.IReqParams\n }): Promise<{\n source: ISource\n }> {\n let { api, sourceId, sourceKey, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!sourceId || !sourceKey) {\n throw(\"Source ID and Source Key are required.\");\n }\n const res = await GetListByKeys({\n api: api,\n sourceId: sourceId,\n sourceKeys: [sourceKey],\n req: reqParams\n })\n return {\n source: res.sources?.length ? res.sources[0] : null\n };\n }\n\n export async function GetListByKeys(params: {\n api?: BruceApi.Api,\n sourceId: number,\n sourceKeys: string[],\n req?: Api.IReqParams\n }): Promise<{\n sources: ISource[]\n }> {\n let { api, sourceId, sourceKeys, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!sourceId || !sourceKeys.length) {\n throw(\"Source ID and Source Keys are required.\");\n }\n const reqKeys: string[] = [];\n const reqs: Promise<ISource>[] = [];\n for (let i = 0; i < sourceKeys.length; i++) {\n const sourceKey = sourceKeys[i];\n const cache = await api.GetCacheItem(GetCacheKey(sourceId, sourceKey), reqParams);\n if (cache?.found) {\n reqs.push(cache.data);\n }\n else {\n reqKeys.push(sourceKey);\n }\n }\n if (reqKeys.length) {\n const prom: Promise<ISource[]> = new Promise(async (res, rej) => {\n try {\n const data = await api.POST(`entitysource/${sourceId}`, { SourceRecordKeys: reqKeys }, Api.PrepReqParams(reqParams));\n res(data.Items);\n }\n catch (e) {\n rej(e);\n }\n });\n for (let i = 0; i < reqKeys.length; i++) {\n const req: Promise<ISource> = new Promise(async (res, rej) => {\n try {\n const sources = await prom;\n res(<ISource>sources.find((s: ISource) => s[\"SourceRecord.Key\"] === reqKeys[i]));\n }\n catch (e) {\n rej(<any>e);\n }\n });\n reqs.push(req);\n }\n }\n return {\n sources: (await Promise.all(reqs)).filter(x => !!x)\n };\n }\n\n export async function GetEntityIdsBySourceKeys(params: {\n api?: BruceApi.Api,\n sourceId: number,\n sourceKeys: string[],\n req?: Api.IReqParams\n }): Promise<{\n // Source key to entity id mapping.\n idMapping: IDictionary<string>\n }> {\n let { api, sourceId, sourceKeys, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!sourceId || !sourceKeys.length) {\n throw(\"Source ID and Source Keys are required.\");\n }\n const result: IDictionary<string> = {};\n if (sourceKeys.length > 0) {\n const {sources} = await GetListByKeys({\n api,\n sourceId,\n sourceKeys,\n req: reqParams\n });\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i];\n for (let i = 0; i < sourceKeys.length; i++) {\n const key = sourceKeys[i];\n if (key == source[\"SourceRecord.Key\"]) {\n result[key] = source[\"Entity.ID\"];\n }\n }\n }\n }\n return {\n idMapping: result\n };\n }\n\n export async function CreateLink(params: {\n api?: BruceApi.Api\n source: ISource\n }): Promise<{\n source: ISource\n }> {\n let {source, api} = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!source[\"Entity.ID\"] || !source[\"Source.ID\"] || !source[\"SourceRecord.Key\"]) {\n throw(\"Entity ID, Source ID and Source Key are required.\");\n }\n const res = await api.POST(\"entitysource\", source);\n const cacheKey = GetCacheKey(source[\"Source.ID\"], source[\"SourceRecord.Key\"]);\n await api.Cache.Remove(cacheKey);\n return {\n source: res\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Entity Tag\" concept within Bruce.\n * An entity tag is used to categorize an entity record.\n * Entity tags can be used in filters, or to restrict entity access.\n */\nexport namespace EntityTag {\n export function GetCacheKey(tagId: number): string {\n return `${Api.ECacheKey.Tag}${Api.ECacheKey.Id}${tagId}`;\n }\n\n export function GetListCacheKey(entityTypeId?: string): string {\n if (entityTypeId) {\n return Api.ECacheKey.Tag + Api.ECacheKey.EntityType + Api.ECacheKey.Id + entityTypeId;\n }\n return Api.ECacheKey.Tag;\n }\n\n export interface ITag {\n ID: number;\n Name?: string;\n Description?: string;\n IsAccessRestricted?: boolean;\n \"EntityType.ID\"?: string;\n Color?: string;\n \"Parent.Layer.ID\"?: number;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n tagId: number,\n req?: Api.IReqParams\n }): Promise<{\n tag: ITag\n }> {\n let { api, tagId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tagId) {\n throw(\"Tag ID is required.\");\n }\n const {tags} = await GetListByIds({\n api,\n tagIds: [tagId],\n req: reqParams\n });\n return {\n tag: tags.length ? tags[0] : null\n };\n }\n\n export async function GetListByIds(params: {\n api?: BruceApi.Api,\n tagIds: number[],\n req?: Api.IReqParams\n }): Promise<{\n tags: ITag[]\n }> {\n let { api, tagIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tagIds.length) {\n throw(\"Tag Ids are empty.\");\n }\n const reqIds: number[] = [];\n const reqs: Promise<{ tag: ITag }>[] = [];\n for (let i = 0; i < tagIds.length; i++) {\n const tagId = tagIds[i];\n const cache = await api.GetCacheItem(GetCacheKey(tagId), reqParams);\n if (cache?.found) {\n reqs.push(cache.data);\n }\n else {\n reqIds.push(tagId);\n }\n }\n if (reqIds.length) {\n const prom: Promise<ITag[]> = new Promise(async (res, rej) => {\n try {\n const data = await api.POST(\"layers/get\", { layerIds: reqIds }, Api.PrepReqParams(reqParams));\n res(data.Items);\n }\n catch (e) {\n rej(e);\n }\n });\n for (let i = 0; i < reqIds.length; i++) {\n const id = reqIds[i];\n const req: Promise<{ tag: ITag }> = new Promise(async (res, rej) => {\n try {\n const tags = await prom;\n const tag = tags.find((t: ITag) => t.ID === id);\n res({\n tag: tag\n });\n }\n catch (e) {\n rej(<any>e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: req,\n req: reqParams\n });\n reqs.push(req);\n }\n }\n return {\n tags: (await Promise.all(reqs)).map(x => x?.tag).filter(x => !!x)\n };\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n entityTypeId?: string,\n req?: Api.IReqParams\n }): Promise<{\n tags: ITag[]\n }> {\n let { api, entityTypeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(entityTypeId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(entityTypeId ? `entityType/${entityTypeId}/layers` : \"layers\", Api.PrepReqParams(reqParams));\n res({\n tags: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityTypeId),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n tagId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tagId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tagId) {\n throw(\"Tag ID is required.\");\n }\n await api.DELETE(`layer/${tagId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(tagId));\n await api.Cache.RemoveByStartsWith(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n tag: ITag,\n req?: Api.IReqParams\n }): Promise<{\n tag: ITag\n }> {\n let { api, tag: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n \n const url = data.ID ? `layer/${data.ID}` : \"layer\";\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n await api.Cache.RemoveByStartsWith(GetListCacheKey());\n return {\n tag: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { ObjectUtils } from \"../util/object-utils\";\nimport { Entity } from \"./entity\";\nimport { EntityAttribute } from \"./entity-attribute\";\nimport { EntityTypeVisualSettings } from \"./entity-type-visual-settings\";\n\n/**\n * Describes the \"Entity Type\" concept within Bruce.\n * An entity type is an \"expectation\" of what data \"should\" look like in a particular entity record.\n * The schema is stencils onto entity data to filter out what we should display or search against.\n */\nexport namespace EntityType {\n export function GetCacheKey(typeId: string): string {\n return `${Api.ECacheKey.EntityType}${Api.ECacheKey.Id}${typeId}`;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.EntityType;\n }\n\n export interface IEntityType {\n ID?: string;\n IsDeleted?: boolean;\n Name: string;\n Description?: string;\n Data?: Entity.IEntity;\n IsAccessRestricted?: boolean;\n DataSchema?: {\n Key: \"root\",\n Name?: \"Root\",\n Structure: EntityAttribute.IAttribute[],\n Type: EntityAttribute.EType.Structure\n };\n DisplayNameAttributePath?: string;\n IsStrictSchema?: boolean;\n \"DisplaySetting.ID\"?: number;\n AuthoringSettings?: {\n enabledTools: string[];\n defaultTool: string;\n };\n \"LastUpdate.Time\"?: UTC.IUTC;\n \"Parent.EntityType.ID\"?: string;\n VisualSettings?: EntityTypeVisualSettings.ISettings;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n entityTypeId: string,\n req?: Api.IReqParams\n }): Promise<{\n entityType: IEntityType\n }> {\n let { api, entityTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!typeId) {\n throw(\"Type ID is required.\");\n }\n const key = GetCacheKey(typeId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entitytype/${typeId}`, Api.PrepReqParams(reqParams));\n res({\n entityType: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityTypeId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!typeId) {\n throw(\"Type ID is required.\");\n }\n await api.DELETE(`entitytype/${typeId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(typeId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n entityTypes: IEntityType[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"entitytypes\", Api.PrepReqParams(reqParams));\n res({\n entityTypes: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams,\n duration: 60 * 5 // 5 minutes.\n });\n return req;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n entityType: IEntityType,\n req?: Api.IReqParams\n }): Promise<{\n entityType: IEntityType\n }> {\n let { api, entityType: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data) {\n data = <any>{};\n }\n if (!data.ID) {\n data.ID = ObjectUtils.UId();\n }\n if (!data.Name) {\n data.Name = data.ID;\n }\n const res = await api.POST(`entitytype/${data.ID}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(<string>data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n entityType: res\n };\n }\n}","import { Bounds } from \"../../common/bounds\";\nimport { Carto } from \"../../common/carto\";\nimport { IDictionary } from \"../../common/dictionary\";\n\n/**\n * This is a helper for making entity requests based on a grid area.\n * It will return grid cells based on given view-area then will remember when stuff-\n * was fully-fetched for those cells to avoid making duplicate requests.\n */\nexport namespace EntityGlobe {\n export class Cell {\n public Fetched: boolean = false;\n public IsFetched: () => boolean = <any>null;\n public FetchPageIndex: number = 0;\n public Boundaries: Bounds.IBounds = <any>null;\n public Fetching: boolean = false;\n\n public GetBounds(): Bounds.IReqBounds {\n // Entity data works in -180 to 180 range.\n function prepareRangeForBounds(range: number): number {\n if (range > 180) {\n return range - 360;\n }\n return range;\n }\n\n // Add minor decimal as API crashes when giving it whole numbers.\n const maxLon = prepareRangeForBounds(this.Boundaries.maxLongitude) + 0.00001;\n const minLon = prepareRangeForBounds(this.Boundaries.minLongitude) - 0.00001;\n const maxLat = prepareRangeForBounds(this.Boundaries.maxLatitude) + 0.00001;\n const minLat = prepareRangeForBounds(this.Boundaries.minLatitude) - 0.00001;\n return {\n east: maxLon,\n north: maxLat,\n south: minLat,\n west: minLon\n };\n }\n }\n\n export class Grid {\n private cells: IDictionary<Cell> = {};\n\n public GetCellsForView(cameraPos: Carto.ICarto, viewRect: Bounds.IReqBounds): Cell[] {\n const cells: Cell[] = [];\n const minLat = viewRect.south;\n const minLon = viewRect.west;\n const maxLat = viewRect.north;\n const maxLon = viewRect.east;\n const MAX_CELLS = 150;\n const cellDegreeSize = getCellSizeFromHeight(<number>viewRect.alt);\n\n let curMinLon = floorValueToCellSize(cellDegreeSize, minLon);\n let curMinLat = floorValueToCellSize(cellDegreeSize, minLat);\n // For larger views we add additional padding because our view-area culling is too strong.\n if (cellDegreeSize >= 2) {\n curMinLon -= cellDegreeSize;\n curMinLat -= cellDegreeSize;\n }\n\n let centerX = cameraPos?.longitude;\n let centerY = cameraPos?.latitude;\n if (isNaN(centerX) || isNaN(centerY)) {\n centerX = (minLon + maxLon) / 2;\n centerY = (minLat + maxLat) / 2;\n }\n\n let width = Math.ceil((maxLon - curMinLon) / cellDegreeSize);\n let height = Math.ceil((maxLat - curMinLat) / cellDegreeSize);\n // For larger views we add additional padding because our view-area culling is too strong.\n if (cellDegreeSize >= 2) {\n width += 1;\n height += 1;\n }\n\n const cellDistances: { x: number, y: number, dist: number }[] = [];\n\n for (let x = 0; x < width; x++) {\n for (let y = 0; y < height; y++) {\n const lon = x * cellDegreeSize + curMinLon;\n const lat = y * cellDegreeSize + curMinLat;\n const cellCenterX = lon + cellDegreeSize / 2;\n const cellCenterY = lat + cellDegreeSize / 2;\n const dist = Math.sqrt(Math.pow(cellCenterX - centerX, 2) + Math.pow(cellCenterY - centerY, 2));\n cellDistances.push({ x, y, dist });\n }\n }\n\n cellDistances.sort((a, b) => a.dist - b.dist);\n\n for (const { x, y } of cellDistances) {\n const lon = x * cellDegreeSize + curMinLon;\n const lat = y * cellDegreeSize + curMinLat;\n const [id, cell] = getOrCreateCell(this.cells, cellDegreeSize, lon, lon + cellDegreeSize, lat, lat + cellDegreeSize);\n cells.push(cell);\n if (cells.length >= MAX_CELLS) {\n break;\n }\n }\n\n return cells;\n }\n }\n}\n\nfunction intersects(l: Bounds.IReqBounds, r: Bounds.IReqBounds): boolean {\n const { west: w, south: s, north: n, east: e } = l;\n const { west: wr, south: sr, north: nr, east: er } = r;\n return !(e <= wr || w >= er || n <= sr || s >= nr);\n}\n\nfunction contains(l: Bounds.IReqBounds, r: Bounds.IReqBounds): boolean {\n const { west: w, south: s, north: n, east: e } = l;\n const { west: wr, south: sr, north: nr, east: er } = r;\n return !(er < e || wr > w || nr > n || sr < s);\n}\n\nfunction crop(rect: Bounds.IReqBounds, by: Bounds.IReqBounds): Bounds.IReqBounds {\n let { west: w, south: s, north: n, east: e } = rect;\n const { west: wc, south: sc, north: nc, east: ec } = by;\n w = Math.max(w, ec);\n e = Math.min(e, wc);\n s = Math.max(s, nc);\n n = Math.min(n, sc);\n return { west: w, south: s, north: n, east: e };\n}\n\nfunction intersection(l: Bounds.IReqBounds, r: Bounds.IReqBounds): number {\n const { west: w, south: s, north: n, east: e } = l;\n const { west: wr, south: sr, north: nr, east: er } = r;\n const x = Math.min(e, er) - Math.max(w, wr);\n const y = Math.min(n, nr) - Math.max(s, sr);\n return (x > 0 && y > 0) ? x * y : 0;\n}\n\nfunction area(rect: Bounds.IReqBounds): number {\n let { west: w, south: s, north: n, east: e } = rect;\n return Math.abs((e - w) * (n - s));\n}\n\nfunction floorValueToCellSize(size: number, value: number): number {\n return Math.floor(value / size) * size;\n}\n\nfunction getCellSizeFromHeight(height: number): number {\n if (height < 1000) {\n return 0.01;\n }\n if (height < 5000) {\n return 0.025;\n }\n else if (height < 10000) {\n return 0.05;\n }\n else if (height < 30000) {\n return 0.1;\n }\n else if (height < 70000) {\n return 0.2;\n }\n else if (height < 100000) {\n return 0.3;\n }\n else if (height < 150000) {\n return 0.4;\n }\n else if (height < 200000) {\n return 0.5;\n }\n else if (height < 300000) {\n return 0.6;\n }\n else if (height < 500000) {\n return 1;\n }\n else if (height < 1000000) {\n return 1.3;\n }\n else if (height < 1200000) {\n return 1.8;\n }\n return 4;\n}\n\nfunction isCellFetched(cell: EntityGlobe.Cell): boolean {\n if (cell.Fetched) {\n return true;\n }\n return false;\n}\n\nfunction getOrCreateCell(cells: IDictionary<EntityGlobe.Cell>, cellSize: number, lon: number, maxLon: number, lat: number, maxLat: number): [string, EntityGlobe.Cell] {\n const id = cellSize + \"_\" + lon + \"_\" + maxLon + \"_\" + lat + \"_\" + maxLat;\n let cell = cells[id];\n if (!cell) {\n cell = cells[id] = new EntityGlobe.Cell();\n cell.Boundaries = <Bounds.IBounds>{\n minLatitude: lat,\n maxLatitude: maxLat,\n minLongitude: lon,\n maxLongitude: maxLon\n };\n cell.IsFetched = () => isCellFetched(cell);\n }\n\n return [id, cell];\n}","import { Api } from \"../../api/api\";\nimport { BruceApi } from \"../../api/bruce-api\";\nimport { Bounds } from \"../../common/bounds\";\nimport { BruceEvent } from \"../../common/bruce-event\";\nimport { Carto } from \"../../common/carto\";\nimport { IDictionary } from \"../../common/dictionary\";\nimport { Entity } from \"../entity\";\nimport { EntityGlobe } from \"./entity-globe\";\nimport { ViewMonitor } from \"./view-monitor\";\n\nconst MAX_AREA_IN_DEGREES = 90;\nconst MAX_RETRY_ATTEMPTS = 1;\nconst RETRY_DELAY_INCREMENT = 500;\nconst REQUEST_PAGE_DELAY = 50;\n\nclass regMenuItemGetter {\n TagIds: number[];\n MinHeight: number;\n MaxHeight: number;\n\n constructor(tagIds: number[], minHeight: number, maxHeight: number) {\n this.TagIds = tagIds;\n this.MinHeight = minHeight;\n this.MaxHeight = maxHeight;\n }\n}\n\nasync function delay(milliseconds: number): Promise<void> {\n return new Promise((res) => {\n setTimeout(() => {\n res();\n }, milliseconds);\n });\n}\n\n/**\n * This is a batched entity getter.\n * It will scan for entity records in a view-area and emit them in batches.\n * It will restart scanning if the camera moves.\n */\nexport namespace EntityFilterGetter {\n export enum EStatus {\n Scanning = \"SCANNING\",\n Loading = \"LOADING\",\n }\n\n export interface IStatusUpdate {\n msg: EStatus;\n revoking: boolean;\n }\n\n export class Getter {\n private onUpdate: BruceEvent<Entity.IEntity[]> = <any>null;\n public get OnUpdate(): BruceEvent<Entity.IEntity[]> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<Entity.IEntity[]>();\n }\n return this.onUpdate;\n }\n\n public LastStateUpdates: IDictionary<IStatusUpdate> = {};\n private onStateUpdate: BruceEvent<IStatusUpdate> = <any>null;\n public get OnStateUpdate(): BruceEvent<IStatusUpdate> {\n if (!this.onStateUpdate) {\n this.onStateUpdate = new BruceEvent<IStatusUpdate>();\n }\n return this.onStateUpdate;\n }\n\n private onScanUpdate: BruceEvent<EntityGlobe.Cell[]> = <any>null;\n public get OnScanUpdate(): BruceEvent<EntityGlobe.Cell[]> {\n if (!this.onScanUpdate) {\n this.onScanUpdate = new BruceEvent<EntityGlobe.Cell[]>();\n }\n return this.onScanUpdate;\n }\n\n private api: BruceApi.Api;\n private viewPort: ViewMonitor.IMonitor;\n private viewPortChangeRemoval: () => void = <any>null;\n private cells: EntityGlobe.Grid = <any>null;\n private registeredItems: IDictionary<regMenuItemGetter> = {};\n private getterLoopId: number = 0;\n\n private viaCdn: boolean;\n private typeId: string;\n private batchSize: number;\n private tagIds: number[] = <any>null;\n private minHeight = 0;\n private maxHeight = 100000;\n private attrFilter: IDictionary<any>;\n private viewRect: Bounds.IReqBounds = <any>null;\n private viewCenter: Carto.ICarto = <any>null;\n\n constructor(\n api: BruceApi.Api,\n viewPort: ViewMonitor.IMonitor,\n typeId: string,\n batchSize?: number,\n attrFilter?: IDictionary<any>,\n viaCdn?: boolean\n ) {\n this.api = api;\n this.typeId = typeId;\n this.viaCdn = Boolean(viaCdn);\n this.batchSize = isNaN(batchSize) ? 300 : batchSize;\n this.viewPort = viewPort;\n this.attrFilter = attrFilter;\n this.updateBounds();\n }\n\n /**\n * Returns id that represents the combined menu item parameters.\n * If integrity changes while a request is running, the request will not emit a response.\n * @returns\n */\n private getIntegrityId() {\n return this.tagIds == null ? \"\" : this.tagIds.join();\n }\n\n private viewAreaSub(): void {\n this.viewAreaDispose();\n this.viewPortChangeRemoval = this.viewPort.Updated().Subscribe(() => {\n this.updateBounds();\n this.startGetterLoop();\n });\n }\n\n private viewAreaDispose(): void {\n this.viewPortChangeRemoval?.();\n }\n\n public GetMenuItems(): string[] {\n return Object.keys(this.registeredItems);\n }\n\n public IncludeMenuItem(menuItemId: string, layerIds: number[], minHeight: number, maxHeight: number): void {\n this.registeredItems[menuItemId] = new regMenuItemGetter(layerIds, minHeight, maxHeight);\n this.updateState();\n }\n\n public ExcludeMenuItem(menuItemId: string): void {\n this.registeredItems[menuItemId] = <any>null;\n delete this.registeredItems[menuItemId];\n this.updateState();\n }\n\n private updateBounds(): void {\n const viewRect = this.viewPort.GetBounds();\n const poi = this.viewPort.GetTarget();\n if (viewRect && poi) {\n if (Math.abs(viewRect.west - viewRect.east) > MAX_AREA_IN_DEGREES) {\n return;\n }\n if (Math.abs(viewRect.south - viewRect.north) > MAX_AREA_IN_DEGREES) {\n return;\n }\n this.viewRect = viewRect;\n this.viewCenter = poi;\n }\n }\n\n private updateState(): void {\n const tagIds: number[] = [];\n const menuItemIds = this.GetMenuItems();\n let minHeight = null;\n let maxHeight = null;\n for (let i = 0; i < menuItemIds.length; i++) {\n const menuItem = this.registeredItems[menuItemIds[i]];\n if (menuItem) {\n if (maxHeight == null || maxHeight < menuItem.MaxHeight) {\n maxHeight = menuItem.MaxHeight;\n }\n if (minHeight == null || minHeight > menuItem.MinHeight) {\n minHeight = menuItem.MinHeight;\n }\n\n const itemLayerIds = menuItem.TagIds;\n if (itemLayerIds) {\n for (let j = 0; j < itemLayerIds.length; j++) {\n const itemLayerId = itemLayerIds[j];\n if (!tagIds.includes(itemLayerId)) {\n tagIds.push(itemLayerId);\n }\n }\n }\n }\n }\n\n if (menuItemIds.length > 0) {\n // Reset cells so none are marked as fetched.\n this.cells = new EntityGlobe.Grid();\n this.tagIds = tagIds;\n this.minHeight = <number>minHeight;\n this.maxHeight = <number>maxHeight;\n this.updateBounds();\n this.startGetterLoop();\n this.viewAreaSub();\n }\n else {\n this.getterLoopId += 1;\n this.viewAreaDispose();\n }\n }\n\n private postStatus(status: IStatusUpdate): void {\n this.LastStateUpdates[status.msg] = status;\n this.onStateUpdate?.Trigger(status);\n }\n\n private startGetterLoop(): void {\n // Increase id so that existing loops stop.\n this.getterLoopId += 1;\n const loopId = this.getterLoopId;\n const loopIntegrity = this.getIntegrityId();\n\n new Promise(async () => {\n // Minor delay to stop 50 menu items enabling doing their first request all together.\n // This gives it time to recognize only 1 request is needed.\n // Would be better to not use this delay but we're on a clock.\n await delay(100);\n\n const MIN_HEIGHT = this.minHeight;\n const MAX_HEIGHT = this.maxHeight;\n const PAGE_SIZE = this.batchSize;\n let retryAttempts = MAX_RETRY_ATTEMPTS;\n let retryDelay = 0;\n let prevFirstId: string = \"\";\n let prevLastId: string = \"\";\n let prevTicks = 0;\n\n while ((!this.viewCenter || !this.viewRect) && this.getterLoopId == loopId) {\n await delay(RETRY_DELAY_INCREMENT);\n }\n if (this.getterLoopId != loopId) {\n return;\n }\n const alt = <number>this.viewRect.alt;\n if (alt > MAX_HEIGHT || (alt < MIN_HEIGHT && MIN_HEIGHT > 0)) {\n return;\n }\n\n const cells = this.cells.GetCellsForView(this.viewCenter, this.viewRect);\n this.onScanUpdate?.Trigger(cells);\n let curCellIndex = cells.length > 0 ? 0 : null;\n\n let postedScanning = false;\n let postedLoading = false;\n\n let total = 0\n while (retryAttempts > 0 && curCellIndex != null) {\n if (retryDelay > 0) {\n await delay(retryDelay);\n }\n if (this.getterLoopId != loopId) {\n break;\n }\n\n if (!postedScanning) {\n this.postStatus({ msg: EStatus.Scanning, revoking: false });\n postedScanning = true;\n }\n\n const curCell = cells[curCellIndex];\n if (curCell.IsFetched()) {\n curCell.Fetching = false;\n curCellIndex += 1;\n if (cells[curCellIndex]) {\n cells[curCellIndex].Fetching = true;\n }\n else {\n curCellIndex = null;\n }\n this.onScanUpdate?.Trigger(cells);\n continue;\n }\n\n try {\n let {entities} = await Entity.GetList({\n api: this.api,\n filter: {\n pageSize: PAGE_SIZE,\n pageIndex : curCell.FetchPageIndex,\n entityTypeId: this.typeId,\n layerIds: this.tagIds,\n bounds: curCell.GetBounds(),\n sortOrder: Api.ESortOrder.Asc,\n entityTypeConditions: this.attrFilter\n },\n viaCdn: this.viaCdn,\n req: {\n noCache: true\n }\n });\n\n const integrity = this.getIntegrityId();\n if (loopIntegrity == integrity && entities) {\n this.onUpdate?.Trigger(entities);\n }\n if (this.getterLoopId != loopId) {\n break;\n }\n if (entities.length) {\n total += entities.length;\n }\n if (!postedLoading) {\n this.postStatus({ msg: EStatus.Loading, revoking: false });\n postedLoading = true;\n }\n\n // Only mark as fetched when ALL pages are done.\n // Known issue where external sources may return less than page size.\n // Right now we're making it as fetched as we're siding with the majority use-case.\n if (entities.length <= 0 || entities.length < PAGE_SIZE) {\n curCell.Fetched = true;\n curCell.Fetching = false;\n this.onScanUpdate?.Trigger(cells);\n continue;\n }\n\n // Checking to make sure it's not just the same batch over and over again.\n if (entities.length > 0) {\n const first = entities[0]?.Bruce?.ID;\n const last = entities[entities.length - 1]?.Bruce?.ID;\n if (prevFirstId == first && prevLastId == last) {\n prevTicks += 1;\n if (prevTicks > 3) {\n break;\n }\n }\n else {\n prevFirstId = first;\n prevLastId = last;\n prevTicks = 0;\n }\n }\n curCell.FetchPageIndex++;\n\n // Request passed so let's assume it was server hiccup and refresh counts.\n retryAttempts = MAX_RETRY_ATTEMPTS;\n retryDelay = 0;\n }\n catch (e) {\n console.error(e);\n\n // Request failed so let's add a delay and try again soon.\n retryDelay += RETRY_DELAY_INCREMENT;\n retryAttempts -= 1;\n }\n\n await delay(REQUEST_PAGE_DELAY);\n }\n\n if (postedLoading) {\n this.postStatus({ msg: EStatus.Loading, revoking: true });\n }\n if (postedScanning) {\n this.postStatus({ msg: EStatus.Scanning, revoking: true });\n }\n });\n }\n }\n}","import { Bounds } from \"../../common/bounds\";\nimport { BruceEvent } from \"../../common/bruce-event\";\nimport { Carto } from \"../../common/carto\";\nimport { ViewMonitor } from \"./view-monitor\";\n\nconst MAX_AREA_IN_DEGREES = 90;\nconst GETTER_DELAY = 50;\n\n/**\n * This is a batched \"arbitrary data\" getter.\n * You feed it an array of data, then it will emit that data in batches when the view changes.\n */\nexport namespace BatchedDataGetter {\n export class Getter<T> {\n private viewPort: ViewMonitor.IMonitor\n private viewPortRemoval: () => void = <any>null;\n \n private batchSize: number;\n private viewRect: Bounds.IReqBounds = <any>null;\n private viewCenter: Carto.ICarto = <any>null;\n private getterInterval: any;\n private data: T[];\n \n private onUpdate: BruceEvent<T[]> = <any>null;\n public get OnUpdate(): BruceEvent<T[]> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<T[]>();\n }\n return this.onUpdate;\n }\n \n \n public constructor(data: T[], viewPort: ViewMonitor.IMonitor, batchSize: number) {\n this.data = data;\n this.viewPort = viewPort;\n this.batchSize = batchSize;\n }\n\n public Start(): void {\n this.viewPortRemoval = this.viewPort.Updated().Subscribe(() => {\n this.updateViewport();\n });\n this.updateViewport();\n }\n\n public Dispose(): void {\n this.viewPortRemoval?.();\n }\n\n private updateViewport(): void {\n this.updateBounds();\n this.startGetterLoop();\n }\n \n private updateBounds(): void {\n const viewRect = this.viewPort.GetBounds();\n const poi = this.viewPort.GetTarget();\n if (viewRect && poi) {\n if (Math.abs(viewRect.west - viewRect.east) > MAX_AREA_IN_DEGREES) {\n return;\n }\n if (Math.abs(viewRect.south - viewRect.north) > MAX_AREA_IN_DEGREES) {\n return;\n }\n this.viewRect = viewRect;\n this.viewCenter = poi;\n }\n }\n \n private startGetterLoop(): void {\n clearInterval(this.getterInterval);\n if (!this.viewRect || !this.viewCenter) {\n return;\n }\n let index = 0;\n const onTick = (): boolean => {\n this.processBatch(this.data.slice(index, index + this.batchSize));\n index += this.batchSize;\n return index >= this.data.length;\n };\n if (!onTick()) {\n this.getterInterval = setInterval(() => {\n if (onTick()) {\n clearInterval(this.getterInterval);\n }\n }, GETTER_DELAY);\n }\n }\n \n private processBatch(batch: T[]): void {\n if (batch.length > 0) {\n this.onUpdate?.Trigger(batch);\n }\n }\n }\n}","export namespace MathUtils {\n /**\n * Rounds a number to a given number of decimal places.\n * @param num \n * @param decimals \n * @returns \n */\n export function Round(num: number, decimals: number = 0): number {\n if (decimals <= 0) {\n return Math.round(num);\n }\n let tmp = \"1\";\n for (let i = 0; i < decimals; i++) {\n tmp += \"0\";\n }\n const d = parseFloat(tmp);\n return Math.round((num + Number.EPSILON) * d) / d;\n }\n\n /**\n * Returns a random integer between min (inclusive) and max (inclusive).\n * @param min \n * @param max \n * @returns \n */\n export function RandInt(min: number, max: number): number {\n if (min == max) {\n return min;\n }\n else if (min > max) {\n throw(\"Min is greater than max.\");\n }\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { Carto } from \"../common/carto\";\nimport { Transform } from \"../common/transform\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { MathUtils } from \"../util/math-utils\";\nimport { Entity } from \"./entity\";\n\nexport namespace EntityCoords {\n export const UCS_ENTITY_TYPE_ID = \"Bruce_UCS_Type\";\n\n export function GetCacheKey(entityId: string): string {\n return Api.ECacheKey.EntityCoords + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface IUcs {\n name: string;\n location: Carto.ICarto;\n \"Entity.ID\": string;\n transform: Transform.ITransform;\n }\n\n export interface IEntityCoords extends Entity.IEntity {\n ucs?: IUcs;\n }\n\n export interface IRelToPointParams {\n point: Carto.ICarto;\n test: boolean;\n name?: string;\n }\n\n export interface IRelToEpsgParams {\n epsg: number;\n test: boolean;\n name?: string;\n }\n\n export interface IRelToUcsParams {\n ucsId: string;\n test: boolean;\n name?: boolean;\n }\n\n export async function GetEntityCoords(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n }): Promise<{\n coords: IEntityCoords\n }> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/${entityId}/ucs`, reqParams);\n res({\n coords: data\n });\n } catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(entityId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function EntityRelativeToPoint(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n } & IRelToPointParams): Promise<{\n coords: IEntityCoords\n }> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!params.test) {\n await UnlinkCoords({\n api,\n rootEntityId: entityId,\n req: reqParams\n });\n }\n const point = params.point;\n const name = params.name || `${MathUtils.Round(point.latitude, 4)}, ${MathUtils.Round(point.longitude, 4)}`;\n const res = await api.POST(`entity/${entityId}/ucs`, {\n \"ucs\": {\n \"Entity.ID\": null,\n \"name\": name,\n \"location\": {\n \"latitude\": point.latitude,\n \"longitude\": point.longitude,\n \"altitude\": point.altitude,\n \"coordinates\": {\n \"Entity.ID\": entityId\n }\n }\n },\n \"test\": params.test\n }, reqParams);\n if (!params.test) {\n api.Cache.Remove(GetCacheKey(entityId));\n }\n return {\n coords: res\n };\n }\n\n export async function EntityRelativeToEpsg(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n } & IRelToEpsgParams): Promise<{\n coords: IEntityCoords\n }> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!params.test) {\n await UnlinkCoords({\n api,\n rootEntityId: entityId,\n req: reqParams\n });\n }\n const epsg = params.epsg;\n const name = params.name ?? \"EPSG: \" + epsg;\n const res = await api.POST(`entity/${entityId}/ucs`, {\n \"ucs\": {\n \"Entity.ID\": null,\n \"name\": name,\n \"location\": {\n \"coordinates\": {\n \"SRID\": \"EPSG:\" + epsg,\n \"Entity.ID\": entityId\n }\n }\n },\n \"test\": params.test\n }, reqParams);\n if (!params.test) {\n api.Cache.Remove(GetCacheKey(entityId));\n }\n return {\n coords: res\n };\n }\n\n export async function EntityRelativeToUcs(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n } & IRelToUcsParams): Promise<{\n coords: IEntityCoords\n }> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!params.test) {\n await UnlinkCoords({\n api,\n rootEntityId: entityId,\n req: reqParams\n });\n }\n const ucsId = params.ucsId;\n const res = await api.POST(`entity/${entityId}/ucs`, {\n \"ucs\": {\n \"Entity.ID\": ucsId\n },\n \"test\": params.test\n }, reqParams);\n if (!params.test) {\n api.Cache.Remove(GetCacheKey(entityId));\n }\n return {\n coords: res\n };\n }\n\n export async function UnlinkCoords(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.DELETE(`entity/${entityId}/ucs`, reqParams);\n }\n}","export namespace EntityTypeVisualSettings {\n export enum EAction {\n LeftClick = \"LeftClick.CustomForm.ID\",\n RightClick = \"RightClick.CustomForm.ID\",\n DoubleClick = \"DoubleClick.CustomForm.ID\",\n MouseHover = \"MouseHover.CustomForm.ID\"\n }\n\n export interface ISettings {\n // Custom forms to display when a certain action is performed on related entities.\n // If the form is set to 0, that means use the default panel instead of a form.\n // When the form value is -1 that means don't display anything.\n CustomForms?: {\n // Default is 0.\n [EAction.LeftClick]?: number,\n // Default is -1.\n [EAction.RightClick]?: number,\n // Default is -1.\n [EAction.MouseHover]?: number,\n // Default is -1.\n [EAction.DoubleClick]?: number\n }\n }\n}","export namespace EntityAttribute {\n export enum EType {\n String = \"String\",\n Double = \"Double\",\n Integer = \"Integer\",\n Datetime = \"Datetime\",\n Structure = \"Structure\",\n Geometry = \"Geometry\",\n Dictionary = \"Dictionary\",\n Boolean = \"Boolean\"\n }\n\n export interface IAttribute {\n Key: string;\n Name?: string;\n Type?: EType;\n Size?: number;\n IsIndexed?: boolean;\n IsArray?: boolean;\n IsImportant?: boolean;\n Description?: string;\n Metadata?: IMetadata;\n Structure?: IAttribute[];\n IsFamilyAttribute?: boolean;\n IsFamilyAttributeDefault?: boolean;\n Sources?: string[];\n }\n\n export interface IMetadata {\n Description?: string;\n Mandatory?: boolean;\n Dictionary?: IDictionary;\n }\n \n export interface IDictionary {\n UseAttribute?: boolean;\n EntityTypeID?: string;\n SourceAttributePath?: string;\n\n // exists so UI components don't break - depreciated. \n SourceAttribute?: IAttribute;\n }\n\n export function GetAttribute(items: IAttribute[], path: string[]): IAttribute {\n if (!items || !path || !path.length) {\n return null;\n }\n const key = path[0];\n const item = items.find((i) => i.Key === key);\n if (!item || !item.Structure || !path.length) {\n return item;\n }\n return GetAttribute(item.Structure, path.slice(1));\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { ObjectUtils } from \"../util/object-utils\";\n\n\nexport namespace Uploader {\n export const MIN_LARGE_FILE_SIZE = 100000000; // 100MB.\n\n export interface IProgress {\n percent: number;\n uploaded: boolean;\n }\n\n export async function DoMultiPartUpload(params: {\n file: File,\n api?: BruceApi.Api,\n urlSuffix: string,\n req?: Api.IUploadReqParams,\n onProgress?: (progress: IProgress) => void\n }) {\n let { file, api, urlSuffix: url, req, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const FILE_PORTION_SIZE = 100000000; // 100MB.\n let fileSize = file.size;\n let fileOffset = 0;\n let filePartsCount = fileSize / FILE_PORTION_SIZE;\n let t = Math.trunc(filePartsCount);\n filePartsCount = filePartsCount > t ? t + 1 : t;\n let filePartIndex = 1;\n let uploadToken = ObjectUtils.UId();\n let data: any;\n while (fileOffset < fileSize) {\n let partSize = Math.min(FILE_PORTION_SIZE, fileSize - fileOffset);\n let retryCount: number = 5;\n let retryWait: number = 1000;\n while (retryCount > 0) {\n try {\n const blob = file.slice(fileOffset, fileOffset + partSize);\n const formData = new FormData();\n formData.append(\"originalFileName\", file.name);\n formData.append(\"token\", uploadToken);\n formData.append(\"count\", \"\" + filePartsCount);\n formData.append(\"part\", \"\" + filePartIndex);\n formData.append(\"file\", blob);\n const reqParams = Api.PrepReqParams(req) as Api.IUploadReqParams;\n reqParams.formData = formData;\n reqParams.onProgress = (progress: ProgressEvent) => {\n const sofar = fileOffset + progress.loaded;\n const percent = Math.round ((sofar / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n data = await api.UPLOAD(url, blob, reqParams)\n retryCount = 0;\n }\n catch (up) {\n retryCount -= 1;\n if (retryCount <= 0) {\n throw up;\n }\n await new Promise((res) => setTimeout(res, retryWait));\n retryWait = retryWait * 2;\n }\n }\n fileOffset += partSize;\n filePartIndex++;\n }\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n return data;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Uploader } from \"../internal/uploader\";\n\n/**\n * Describes the \"Client File\" concept within Bruce.\n * A client file is a record of a file uploaded to Bruce.\n */\nexport namespace ClientFile {\n export function GetCacheKey(fileId: string): string {\n return `${Api.ECacheKey.ClientFile}${Api.ECacheKey.Id}${fileId}`;\n }\n\n export interface IClientFile {\n UploadedTimeUTC: UTC.IUTC;\n FileExt: string;\n ID: string;\n MIMEType: string;\n OriginalFileName: string;\n OriginalLength: number;\n \"UploadedByUser.ID\": string;\n Purpose: string;\n }\n\n export function GetUrl(params: {\n api?: BruceApi.Api,\n fileId: string\n }): string {\n let { api, fileId } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n return `${api.GetBaseUrl()}file/${fileId}`;\n }\n\n export function GetUrlWithExt(params: {\n api?: BruceApi.Api,\n file: IClientFile\n }): string {\n let { api, file } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return `${api.GetBaseUrl()}file/${file.ID}${file.FileExt ? file.FileExt : \"\"}`;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n fileId: string,\n req?: Api.IReqParams\n }): Promise<{\n clientFile: IClientFile\n }> {\n let { api, fileId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!fileId) {\n throw(\"File ID is required.\");\n }\n const key = GetCacheKey(fileId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`file/${fileId}/details`, Api.PrepReqParams(reqParams));\n res({\n clientFile: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n fileIds: string[],\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, fileIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!fileIds.length) {\n throw(\"File IDs are required.\");\n }\n const data = {\n Items: fileIds\n };\n await api.POST(\"deleteFiles\", data, Api.PrepReqParams(reqParams));\n for (let i = 0; i < fileIds.length; i++) {\n const key = GetCacheKey(fileIds[i]);\n api.Cache.Remove(key);\n }\n }\n\n export async function Upload(params: {\n api?: BruceApi.Api,\n file: File,\n purpose?: string,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<{\n clientFile: IClientFile\n }> {\n let { api, file, purpose, req, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!file) {\n throw(\"File is required.\");\n }\n const size = file?.size;\n if (!size) {\n throw(\"You cannot upload a 0byte sized file.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n let clientFile: IClientFile;\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\n clientFile = await Uploader.DoMultiPartUpload({\n api,\n file,\n urlSuffix: \"fileUpload\",\n req,\n onProgress\n });\n // TODO: Check if we can add it to the request like the small file upload.\n if (clientFile?.ID && purpose) {\n await UpdatePurpose({\n api,\n fileId: clientFile.ID,\n purpose,\n req\n })\n }\n }\n else {\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n if (purpose) {\n req.formData = {\n Purpose: purpose\n };\n }\n clientFile = await api.UPLOAD(\"file/uploadNew\", file, req);\n }\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n return {\n clientFile\n };\n }\n\n export async function UpdatePurpose(params: {\n api?: BruceApi.Api,\n fileId: string,\n purpose: string,\n req?: Api.IReqParams\n }) {\n let { api, fileId, purpose, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!purpose) {\n purpose = \"\";\n }\n await api.POST(\"file/updatepurpose/\" + fileId + \"/?Purpose=\" + purpose, {\n Purpose: purpose\n }, Api.PrepReqParams(reqParams));\n const cacheKey = GetCacheKey(fileId);\n api.Cache.RemoveByContains(cacheKey);\n }\n\n /**\n * Uploads a temp file.\n * This will return a temp file id which can be used in various endpoints.\n * @param params\n * @returns\n */\n export async function UploadTemp(params: {\n api?: BruceApi.Api,\n file: File,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<{\n tempFileId: string\n }> {\n let { api, file, req, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!file) {\n throw(\"File is required.\");\n }\n const size = file?.size;\n if (!size) {\n throw(\"You cannot upload a 0byte sized file.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n let tempFile: any;\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\n tempFile = await Uploader.DoMultiPartUpload({\n api,\n file,\n urlSuffix: \"tempFileUpload\",\n req,\n onProgress\n });\n }\n else {\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n tempFile = await api.UPLOAD(\"file/uploadTemp\", file, req);\n }\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n return {\n tempFileId: tempFile[\"TempFile.ID\"]\n };\n }\n\n export namespace Filter {\n export enum EColumn {\n ID = \"id\",\n Name = \"name\",\n DateTime = \"datetime\",\n MIMEType = \"mimeType\",\n Size = \"size\",\n User = \"user\",\n Extension = \"extension\"\n }\n\n export enum ESortOrder {\n ASC = \"asc\",\n DEC = \"desc\"\n }\n\n export enum ERowOperator {\n AND = \"AND\",\n OR = \"OR\"\n }\n\n export interface IRow {\n column: EColumn;\n value: any;\n valueOperator: string;\n includes: boolean;\n rowOperator: ERowOperator;\n rows?: IRow[];\n }\n }\n\n export interface IFilter {\n PageSize?: number;\n PageIndex?: number;\n OrderBy?: Filter.EColumn;\n SortOrder?: Filter.ESortOrder;\n Purpose?: string;\n FilterRows?: Filter.IRow[];\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n filter: IFilter,\n req?: Api.IReqParams\n }): Promise<{\n clientFiles: IClientFile[],\n // Total available matching the filter.\n // This is not the total returned in the current page.\n totalCount: number\n }> {\n let { api, filter, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const data = await api.POST(\"files/filtered\", filter, Api.PrepReqParams(reqParams));\n return {\n clientFiles: data.Items,\n totalCount: data.TotalCount\n };\n }\n\n export namespace Processor {\n export interface IResult {\n success: boolean;\n clientFileId: string;\n clientFileName: string;\n }\n\n export enum EConvertExt {\n GLB = \".glb\",\n SKP = \".skp\",\n }\n\n export async function ConvertFormat(params: {\n api?: BruceApi.Api,\n fileId: string,\n ext: EConvertExt | string,\n req?: Api.IReqParams\n }): Promise<IResult> {\n let { api, fileId: clientFileId, ext, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!clientFileId || !ext) {\n throw(\"Client File ID and extension are required.\");\n }\n return api.POST(\"convertFileToFile\", {\n clientFileId: clientFileId,\n destinationFormat: ext,\n operations: []\n }, reqParams);\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype Id = ProgramKey.EProgramId | string;\n\n/**\n * Describes the \"Program Key\" concept within Bruce.\n * A program key is an access token for an arbitrary software.\n */\nexport namespace ProgramKey {\n export function GetCacheKey(programId: string): string {\n return Api.ECacheKey.ProgramKey + Api.ECacheKey.Id + programId;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.ProgramKey;\n }\n\n export enum EProgramId {\n CesiumIon = \"CesiumIon\",\n BingMaps = \"BingMaps\",\n Mapbox = \"Mapbox\",\n Google = \"Google\"\n }\n\n export interface IKey {\n ProgramId: Id;\n Key: string;\n IsAccessRestricted?: boolean;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n programId: Id,\n req?: Api.IReqParams\n }): Promise<{\n programKey: IKey\n }> {\n let { api, programId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!programId) {\n throw(\"Program ID is required.\");\n }\n const key = GetCacheKey(programId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`programkey/${programId}`, Api.PrepReqParams(reqParams));\n res({\n programKey: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n programKeys: IKey[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"programkeys\", Api.PrepReqParams(reqParams));\n res({\n programKeys: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n programId: Id,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, programId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!programId) {\n throw(\"Program ID is required.\");\n }\n await api.DELETE(`programkey/${programId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(programId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n programKey: IKey,\n req?: Api.IReqParams\n }): Promise<{\n programKey: IKey\n }> {\n let { api, programKey: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.ProgramId) {\n throw(\"Program ID is required.\");\n }\n const res = await api.POST(\"programkey\", data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ProgramId));\n api.Cache.Remove(GetListCacheKey());\n return {\n programKey: res\n };\n }\n}","import { Style } from \"../bruce-models\";\n\n/**\n * Describes an expectation on what should be rendered for a menu item-\n * between a min-max distance of an entity to the camera.\n */\nexport namespace ZoomControl {\n export enum EDisplayType {\n Hidden = \"hidden\",\n Point = \"point\",\n Geometry = \"geometry\",\n Model3D = \"3d\"\n }\n\n export interface IItem {\n MinZoom?: number,\n MaxZoom?: number,\n DisplayType?: EDisplayType,\n StyleID?: number,\n Style?: Style.IEntitySettings;\n LODCategoryID?: string,\n LODLevel?: number | string;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { PendingAction } from \"../server/pending-action\";\nimport { GlobalApi } from \"../api/global-api\";\nimport { Transform } from \"../common/transform\";\nimport { Carto } from \"../common/carto\";\nimport { Bounds } from \"../common/bounds\";\nimport { Uploader } from \"../internal/uploader\";\nimport { IDictionary } from \"../common/dictionary\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype Settings = Tileset.Settings.IPointcloud |\n Tileset.Settings.ICad |\n Tileset.Settings.IEntitiesMap |\n Tileset.Settings.IEntities |\n Tileset.Settings.IExternalMap |\n Tileset.Settings.IExternalTerrain |\n Tileset.Settings.IMap |\n Tileset.Settings.ITerrain;\n\n/**\n * Describes the \"Tileset\" concept in Bruce.\n *\n * Tilesets come in three possible variants,\n * 1- A set of instructions to generate a tileset.\n * 2- Settings to load a tileset hosted elsewhere.\n * 3- A set of user-provided files to serve.\n *\n * Read the individual tileset-type settings for each variant.\n */\nexport namespace Tileset {\n export function GetCacheKey(tilesetId: string, loadFiles: boolean): string {\n return `${Api.ECacheKey.Tileset}${Api.ECacheKey.Id}${tilesetId}${Api.ECacheKey.Id}${loadFiles}`;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.Tileset;\n }\n\n export interface ITileset {\n id: string;\n name: string;\n type: EType;\n rootFileName?: string;\n settings?: Settings;\n fileIds?: string[];\n creationTime?: UTC.IUTC;\n modificationTime?: UTC.IUTC;\n generateVersion?: number;\n isDeleteDisabled?: boolean;\n loadUrl?: string;\n isRestricted?: boolean;\n }\n\n export enum EType {\n PointCloud = \"POINT_CLOUD\",\n GeoMap = \"GEO_MAP\", // Previously gtfRasterMaps.\n EntitiesMap = \"ENTITIES_MAP\", // Previously rasterMap.\n EntitiesSet = \"ENTITIES_SET\", // Previously dynamic.\n Cad = \"MODEL\", // Generated CAD tileset from entity id.\n Terrain = \"GEO_TERR\",\n ExternalTerrain = \"EXTERNAL_TERR\",\n ExternalGeoMap = \"EXTERNAL_MAP\",\n LegacyEntitiesSet = \"D\",\n LegacyStatic = \"S\",\n LegacyExternal = \"X\"\n }\n\n export enum EPivot {\n None = \"none\",\n Box = \"box\",\n Weight = \"weight\",\n UCS = \"ucs\"\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n loadFiles?: boolean,\n req?: Api.IReqParams\n }): Promise<{\n tileset: ITileset\n }> {\n let { api, tilesetId, loadFiles, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(tilesetId, loadFiles), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`tileset/get/${tilesetId}?noFiles=${Boolean(loadFiles) ? 0 : 1}`, reqParams);\n res({\n tileset: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(tilesetId, loadFiles),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n /**\n * Returns tileset types for given tileset ids.\n * @param params\n * @deprecated Just use GetList and Get to find the type from the tileset record.\n * @returns\n */\n export async function GetTypes(params: {\n api?: BruceApi.Api,\n tilesetIds: string[],\n req?: Api.IReqParams\n }): Promise<{\n // Tileset id -> type mapping.\n typeMapping: IDictionary<EType>\n }> {\n // UPDATE: This was corrected, this will be removed.\n // Our api is auto-converting legacy types right now which makes it impossible to know what they are.\n // This uses the legacy end-point which doesn't do that...\n let { api, tilesetIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const mapping = {};\n if (tilesetIds.length == 1) {\n const tileset = await api.GET(\"ui.tileset/\" + tilesetIds[0], Api.PrepReqParams(reqParams));\n if (tileset) {\n mapping[tilesetIds[0]] = tileset.Type;\n }\n }\n else if (tilesetIds.length > 1) {\n const tilesets = await api.GET(\"ui.tilesets\", Api.PrepReqParams(reqParams));\n for (const tileset of tilesets) {\n if (tilesetIds.indexOf(tileset.ID) >= 0) {\n mapping[tileset.ID] = tileset.Type;\n }\n }\n }\n return {\n typeMapping: mapping\n };\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n tilesets: ITileset[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"tileset/getList\", reqParams)\n res({\n tilesets: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tilesetId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n await api.DELETE(`tileset/delete/${tilesetId}`, reqParams);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + tilesetId);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n tileset: ITileset,\n req?: Api.IReqParams\n }): Promise<{\n tileset: ITileset\n }> {\n let { api, tileset: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.name || !data?.type) {\n throw(\"Tileset name and type are required.\");\n }\n let isNew = !data.id;\n if (isNew) {\n const res: ITileset = await api.GET(`tileset/new?type=${data.type}&name=${Api.Encode(data.name)}`, reqParams);\n data = {\n ...res,\n ...data,\n settings: {\n ...res.settings,\n ...data.settings\n },\n id: res.id\n }\n }\n await api.POST(`tileset/update/${data.id}`, data, Api.PrepReqParams(reqParams));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + data.id);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\n return {\n tileset: data\n };\n }\n\n export async function UploadFile(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: File,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<void> {\n let { api, file, req, tilesetId, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId || !file) {\n throw(\"Tileset ID and file are required.\");\n }\n const size = file?.size;\n if (!size) {\n throw(\"You cannot upload a 0byte sized file.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\n await Uploader.DoMultiPartUpload({\n api,\n file,\n urlSuffix: `tileset/uploadFileEx/${tilesetId}/add`,\n req,\n onProgress\n });\n }\n else {\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/files`, file, req);\n }\n api.Cache.Remove(GetCacheKey(tilesetId, true));\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n }\n\n export async function DeleteFile(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tilesetId, file, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId || !file) {\n throw(\"Tileset ID and file are required.\");\n }\n await api.DELETE(`tileset/deleteFile/${tilesetId}/files/${file}`, reqParams);\n api.Cache.Remove(GetCacheKey(tilesetId, true));\n }\n\n export async function UploadSrcFile(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: File,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<void> {\n let { api, file, req, tilesetId, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId || !file) {\n throw(\"Tileset ID and file are required.\");\n }\n const size = file?.size;\n if (!size) {\n throw(\"You cannot upload a 0byte sized file.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\n await Uploader.DoMultiPartUpload({\n api,\n file,\n urlSuffix: `tileset/uploadFileEx/${tilesetId}/src`,\n req,\n onProgress\n });\n }\n else {\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/src`, file, req);\n }\n api.Cache.Remove(GetCacheKey(tilesetId, true));\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n return;\n }\n\n export async function DeleteSrcFile(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tilesetId, file, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId || !file) {\n throw(\"Tileset ID and file are required.\");\n }\n await api.DELETE(`tileset/deleteFile/${tilesetId}/src/${file}`, reqParams);\n api.Cache.Remove(GetCacheKey(tilesetId, true));\n }\n\n export function GetFileUrl(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: string\n }): string {\n let { api, tilesetId, file } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n if (!file) {\n file = \"\";\n }\n return api.GetBaseUrl() + `tileset/getFile/${tilesetId}/files/${file}`;\n }\n\n export function GetSrcFileUrl(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: string\n }): string {\n let { api, tilesetId, file } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n if (!file) {\n file = \"\";\n }\n return api.GetBaseUrl() + `tileset/getFile/${tilesetId}/src/${file}`;\n }\n\n export function GetPublicFileUrl(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n // Default = false.\n viaCdn?: boolean,\n // (Optional) Cache killing token to append to the request url.\n viaCdnCacheToken?: number | string,\n file: string\n }): string {\n let { api, tilesetId, file, viaCdn, viaCdnCacheToken } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n if (!file) {\n file = \"\";\n }\n const cdnBaseUrl = viaCdn ? api.GetCdnBaseUrl() : null;\n if (cdnBaseUrl) {\n if (!viaCdnCacheToken) {\n viaCdnCacheToken = 0;\n }\n return cdnBaseUrl + `tileset/file/${tilesetId}/${file}?accountId=${api.AccountId}&cacheToken=${viaCdnCacheToken}`;\n }\n else {\n return api.GetBaseUrl() + `tileset/file/${tilesetId}/${file}`;\n }\n }\n\n export async function Generate(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n req?: Api.IReqParams\n }): Promise<{\n pendingActionId: number\n }> {\n let { api, tilesetId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n const res: PendingAction.IAction = await api.GET(`tileset/generate/${tilesetId}`, Api.PrepReqParams(reqParams));\n return {\n pendingActionId: res.ID\n };\n }\n\n export namespace Publish {\n export function GetCacheKey(accountId: string, tilesetId?: string): string {\n if (!tilesetId) {\n tilesetId = \"\";\n }\n return Api.ECacheKey.PublishTileset + Api.ECacheKey.Id + accountId + Api.ECacheKey.Id + tilesetId;\n }\n\n export function GetAccessAllowedCacheKey(tilesetId: string, sourceAccountId: string, forAccountId: string) {\n return Api.ECacheKey.PublishTileset + Api.ECacheKey.TilesetAccess + Api.ECacheKey.Id + tilesetId + Api.ECacheKey.Id + sourceAccountId + Api.ECacheKey.Id + forAccountId;\n }\n\n export interface IPublish {\n ID?: number;\n Name: string;\n \"Tileset.ID\"?: string;\n \"PublishedBy.ClientAccount.ID\"?: string;\n \"PublishedBy.User.ID\"?: string;\n \"Published.DateTime\"?: UTC.IUTC;\n IsPublic: boolean;\n \"EnabledFor.ClientAccount.ID\"?: string[];\n }\n\n export async function Update(params: {\n api?: GlobalApi.Api,\n published: IPublish,\n req?: Api.IReqParams\n }): Promise<{\n published: IPublish\n }> {\n let { api, published: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGlobalApi();\n }\n\n if (!data?.[\"Tileset.ID\"] || !data?.[\"PublishedBy.ClientAccount.ID\"] || !data?.[\"PublishedBy.User.ID\"]) {\n throw(\"Tileset ID, client account ID, and user ID are required.\");\n }\n if (!data.ID) {\n data.ID = 0;\n }\n const res: IPublish = await api.POST(`tileset/${data.ID}`, data, reqParams);\n const req = {\n \"ClientAccount.ID\": data[\"EnabledFor.ClientAccount.ID\"]\n };\n data.ID = res.ID;\n await api.POST(`tileset/${data.ID}/enableForAccounts`, req, reqParams);\n await api.Cache.Remove(GetCacheKey(data[\"PublishedBy.ClientAccount.ID\"], data[\"Tileset.ID\"]));\n await api.Cache.Remove(GetCacheKey(data[\"PublishedBy.ClientAccount.ID\"]));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.PublishTileset + Api.ECacheKey.TilesetAccess);\n return {\n published: data\n };\n }\n\n export async function Get(params: {\n api?: GlobalApi.Api,\n accountId: string,\n tilesetId: string,\n req?: Api.IReqParams\n }): Promise<{\n published: IPublish\n }> {\n let { api, accountId, tilesetId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGlobalApi();\n }\n\n if (!accountId || !tilesetId) {\n throw(\"Client account ID and tileset ID are required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(accountId, tilesetId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`tilesetByPublisher/${accountId}/${tilesetId}`, reqParams);\n res({\n published: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(accountId, tilesetId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: GlobalApi.Api,\n accountId: string,\n req?: Api.IReqParams\n }): Promise<{\n published: IPublish[]\n }> {\n let { api, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGlobalApi();\n }\n\n if (!accountId) {\n throw(\"Client account ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`tilesets/enabledForAccount/${accountId}`, reqParams);\n res({\n published: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(accountId),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n /**\n * Returns if a given tileset is allowed to be loaded for a given account.\n * @param params \n */\n export async function IsAccessAllowed(params: {\n // Tileset + account from which to load.\n tilesetId: string,\n sourceAccountId: string,\n api?: GlobalApi.Api,\n // Account we're loading in.\n forAccountId?: string,\n req?: Api.IReqParams\n }): Promise<boolean> {\n let { tilesetId, sourceAccountId, api, forAccountId, req } = params;\n if (!forAccountId) {\n forAccountId = ENVIRONMENT.PARAMS.accountId;\n }\n // Null source account id means it's a tileset from within the same account.\n // We also don't want to bother looking for records if we're loading in our own account.\n if (forAccountId == sourceAccountId || !sourceAccountId) {\n return true;\n }\n if (!api) {\n api = ENVIRONMENT.Api().GetGlobalApi();\n }\n req = Api.PrepReqParams(req);\n const key = GetAccessAllowedCacheKey(tilesetId, sourceAccountId, forAccountId);\n const cacheData = await api.GetCacheItem(key, req);\n if (cacheData?.found) {\n return cacheData.data;\n }\n const prom: Promise<boolean> = new Promise(async (res, rej) => {\n try {\n // We try find the published record for the tileset.\n // If it doesn't exist, then it's not published.\n const {published} = await GetList({\n accountId: forAccountId,\n api: api,\n });\n const tileset = published.find(x => x[\"Tileset.ID\"] == tilesetId && x[\"PublishedBy.ClientAccount.ID\"] == sourceAccountId);\n res(tileset != null);\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: key,\n value: prom,\n req: req\n });\n return prom;\n }\n }\n\n export namespace Settings {\n export interface ICad {\n rootEntityId: string;\n entityTypeId: string;\n styleId?: number;\n lodKey?: string;\n movePivot?: Tileset.EPivot;\n ucsId?: number;\n epsg?: number;\n thumbFileId?: string;\n location?: Carto.ICarto;\n offset?: any;\n transform?: Transform.ITransform;\n doubleSided?: boolean;\n b3dmFileSize?: number;\n maximumScreenSpaceError?: number;\n }\n\n export enum EMapTileSize {\n IMG_256 = 256,\n IMG_512 = 512,\n IMG_1024 = 1024,\n IMG_2048 = 2048\n }\n\n export interface IEntitiesMap {\n imageSize: EMapTileSize;\n levelMin: number;\n levelMax: number;\n entityTypeId: string;\n styleId: number;\n filter: any;\n boundaries: Bounds.IBounds;\n }\n\n export interface IEntities {\n zoomControl?: any[];\n boundaries?: Bounds.IBounds;\n filter?: any;\n altitudeRefType?: string;\n terrainSource?: string;\n terrainUri?: string;\n doubleSided?: boolean;\n entityTypeId?: string;\n styleId?: number;\n }\n\n export enum EExternalMapType {\n TileMapImagery = \"TileMapImagery\",\n OpenStreetMapImagery = \"OpenStreetMapImagery\",\n MapBoxImagery = \"MapBoxImagery\",\n CesiumIon = \"CesiumIon\"\n }\n\n export interface IExternalMap {\n url?: string;\n mapType?: EExternalMapType;\n fileExtension?: string;\n externalId?: number | string;\n styleId?: string;\n account?: string;\n key?: string;\n iconClientFileId?: string;\n }\n\n export interface IExternalTerrain {\n requestVertexNormals?: boolean;\n url?: string;\n }\n\n export interface IMap {\n sourceFileId: string;\n imageSize: number;\n levelMin: number;\n levelMax: number;\n boundaries?: Bounds.IBounds;\n }\n\n export interface IPointcloud {\n sourceFileIds: string[];\n location: Carto.ICarto;\n transform: Transform.ITransform;\n pntFileSize?: number;\n epsg?: number;\n attenuation?: boolean;\n attenuationMax?: number;\n movePivot?: Tileset.EPivot;\n maximumScreenSpaceError?: number;\n }\n\n export interface ITerrain {\n sourceFileId?: string;\n startLevel?: number;\n }\n }\n}","import { IDictionary } from \"../bruce-models\";\nimport { Entity } from \"../entity/entity\";\nimport { Tileset } from \"../tileset/tileset\";\nimport { ObjectUtils } from \"../util/object-utils\";\nimport { ZoomControl } from \"./zoom-control\";\n\n/**\n * Describes a menu item found in project views.\n * Menu items are used to dictate what data to load in a scene.\n * A menu item may be a container for other items.\n */\nexport namespace MenuItem {\n export enum EType {\n None = \"NONE\",\n Entities = \"BruceEntity\",\n Entity = \"SingleEntity\",\n Osm = \"OSMBuildingsTileset\",\n CadTileset = \"ModelTileset\",\n ArbTileset = \"ArbitraryTileset\",\n IonTileset = \"Cesium3DTileset\",\n Kml = \"StaticKML\",\n EntityTileset = \"EntitiesTileset\",\n EntityRaster = \"RasterEntitiesTileset\",\n PointCloud = \"PointCloudTileset\",\n EntitiesLoaded = \"LoadedEntities\",\n EntitiesIds = \"EntitiesIds\",\n Relations = \"Relations\",\n GooglePhotoTileset = \"GooglePhotoTileset\"\n }\n\n export interface ILegend {\n model3d: boolean;\n point: boolean;\n polygon: boolean;\n polylines: boolean;\n tileset3d: boolean;\n }\n\n export interface IAuthorSettings {\n // If true, the clicked entity will be read and used to update the authored entity.\n readClickedEntity?: boolean;\n // Optional relationship type to use when relating to the clicked entity.\n clickedRelationTypeId?: string;\n // If set, specified attributes will be copied between the clicked and authored entities.\n copyClickedAttrMapping?: {\n // String is a wrapped path, check PathUtils.\n fromPathStr: string;\n toPathStr: string;\n }[];\n }\n\n export interface IItem {\n id: string;\n Caption: string;\n Children?: IItem[];\n Type: EType;\n hideChildren?: boolean;\n legend?: ILegend;\n authoringEnabled?: boolean;\n authoring?: IAuthorSettings;\n LabelColor?: string;\n renderPriority?: number;\n // Default = false.\n cdnEnabled?: boolean;\n // Used to kill cache. Default = 0.\n // Tilesets have their own counter within their records.\n // This is used for non-tileset items.\n cdnCounter?: number;\n }\n\n export function CreateFromEntityId(entityId: string, typeId: string, styleId?: number): IItem {\n return <Item.IEntity>{\n id: ObjectUtils.UId(),\n Type: EType.Entity,\n Caption: \"Generated Entity Menu Item\",\n BruceEntity: {\n \"EntityType.ID\": typeId,\n EntityId: entityId\n },\n CameraZoomSettings: [\n {\n DisplayType: ZoomControl.EDisplayType.Model3D,\n MaxZoom: 1000000,\n MinZoom: 0,\n StyleID: styleId\n }\n ]\n };\n }\n\n export function CreateFromTypeId(typeId: string, styleId?: number): IItem {\n return <Item.IEntities>{\n id: ObjectUtils.UId(),\n Type: EType.Entities,\n Caption: \"Generated Entity Type Menu Item\",\n BruceEntity: {\n \"EntityType.ID\": typeId\n },\n CameraZoomSettings: [\n {\n DisplayType: ZoomControl.EDisplayType.Model3D,\n MaxZoom: 100000,\n MinZoom: 0,\n StyleID: styleId\n }\n ]\n };\n }\n\n export function CreateFromTilesetId(tilesetId: string, type: Tileset.EType): IItem {\n if (type === Tileset.EType.Cad) {\n return <Item.ICadTileset>{\n\t id: ObjectUtils.UId(),\n\t Type: EType.CadTileset,\n Caption: \"Generated CAD Menu Item\",\n\t FlyTo: false,\n\t\t\t\ttileset: {\n\t\t\t\t\tTilesetID: tilesetId\n\t\t\t\t}\n };\n }\n else if (type == Tileset.EType.EntitiesSet) {\n return <Item.IEntitiesTileset>{\n id: ObjectUtils.UId(),\n Type: EType.EntityTileset,\n Caption: \"Generated Entities Menu Item\",\n FlyTo: false,\n tileset: {\n TilesetID: tilesetId\n }\n };\n }\n else if (type == Tileset.EType.PointCloud) {\n return <Item.IPointcloud>{\n id: ObjectUtils.UId(),\n Type: EType.PointCloud,\n Caption: \"Generated Point Cloud Menu Item\",\n FlyTo: false,\n tileset: {\n TilesetID: tilesetId\n }\n };\n }\n else if (type == Tileset.EType.EntitiesMap) {\n return <Item.IEntitiesRaster>{\n id: ObjectUtils.UId(),\n Type: EType.EntityRaster,\n Caption: \"Generated Entities Menu Item\",\n tileset: {\n TilesetID: tilesetId\n }\n };\n }\n throw(\"Tileset type not supported.\");\n }\n\n export namespace Item {\n export interface ITileset {\n TilesetURL?: string;\n ClientAccountID?: string;\n TilesetID?: string;\n }\n\n export interface IClustering {\n // Minimum distance to an entity for it to cluster.\n // bruce-cesium/point-clustering.ts will have 5000 as default.\n minDistance?: number;\n // Minimum total loaded for the menu item for clustering to kick in.\n // bruce-cesium/point-clustering.ts will have 0 as default.\n // It will always try to cluster when points are near each-other and camera is far away.\n minTotalCount?: number;\n // TODO: Zoom control-like settings for clustering.\n // Between x and y meters the points should cluster with z distance.\n // Eg: \"Between 5,000 and 15,000 meters the points should cluster within 500 meters.\"\n }\n\n export interface IEntities extends IItem {\n BruceEntity: {\n \"EntityType.ID\": string;\n Filter?: IDictionary<string>;\n // If true, menu item will display individual sub-items for tags.\n ExpandLayers?: boolean;\n // If ExpandLayers = true, this is the saved sub-items to render.\n // If this is null or empty, that means there is nothing to render for this menu item.\n SelectedExpandLayers?: number[];\n };\n CameraZoomSettings?: ZoomControl.IItem[];\n\n // If true, menu item will render point and icon entities as clustered points when close together.\n enableClustering?: boolean;\n clustering?: IClustering;\n\n // If BruceEntity.ExpandLayers = true,\n // this will dictate if camera should be used to scan for tags in view.\n filterLayersByCameraLocation?: boolean;\n showAllLayersExcludeBelow?: boolean;\n layers?: number[];\n extLayers?: {\n ID: number,\n checked: boolean\n }[];\n }\n\n export interface IEntity extends IItem {\n BruceEntity: {\n \"EntityType.ID\"?: string;\n EntityId: string;\n };\n CameraZoomSettings?: ZoomControl.IItem[];\n showAllLayers?: boolean;\n showAllLayersExcludeBelow?: boolean;\n }\n\n export interface IArbTileset extends IItem {\n FlyTo?: boolean;\n BruceEntity?: {\n \"EntityType.ID\"?: string;\n };\n tileset?: ITileset;\n StyleMapping?: any[];\n styleId?: number;\n ApplyStyles?: boolean;\n IonResource?: {\n AssetID: string | number;\n }\n }\n export interface IIonTileset extends IArbTileset {};\n\n export interface ICadTileset extends IItem {\n tileset: ITileset;\n FlyTo?: boolean;\n StyleMapping?: any[];\n StyleBlending?: {\n // Hightlight = 0, replace = 1, mix = 2.\n blendMode: 0 | 1 | 2;\n // 1 = 100% new colour. 0 = original colour.\n blendPercent: number;\n };\n styleId?: number;\n BruceEntity?: {\n // Optional restriction.\n // When not null, only entities matching supplied ids will be visible.\n EntityIds?: string[];\n // Optional styling.\n // When entity ids are set, other entities can optionally be \"ghosts\".\n // This means they will be available but at low opacity.\n Ghosts?: boolean;\n }\n }\n\n export interface IPointcloud extends IItem {\n FlyTo?: boolean;\n tileset: ITileset;\n }\n\n export interface IEntitiesRaster extends IItem {\n tileset: ITileset;\n }\n\n export interface IOsm extends IItem {\n BruceEntity?: {\n \"EntityType.ID\"?: string;\n SourceId: string;\n };\n ghostLoading?: boolean;\n }\n\n export interface IKml extends IItem {\n KML?: {\n ClientFile?: {\n ID: string;\n },\n // Arbitrarily hosted file to load instead of a client file.\n fileUrl?: string;\n }[]\n }\n\n export interface IEntitiesTileset extends IItem {\n FlyTo: boolean;\n tileset: ITileset;\n }\n\n export interface IEntitiesLoaded extends MenuItem.IItem {\n BruceEntity: {\n \"EntityType.ID\"?: string;\n Entities: Entity.IEntity[];\n };\n CameraZoomSettings?: ZoomControl.IItem[];\n }\n\n export interface IEntityIds extends MenuItem.IItem {\n BruceEntity: {\n EntityIds: string[];\n };\n CameraZoomSettings?: ZoomControl.IItem[];\n\n // If true, menu item will render point and icon entities as clustered points when close together.\n enableClustering?: boolean;\n clustering?: IClustering;\n }\n\n export interface IEntityRelations extends MenuItem.IItem {\n BruceEntity: {\n EntityIds: string[];\n },\n // Empty = render all types.\n relationTypeIds?: string[]\n }\n\n export interface IGooglePhotoTileset extends IItem {\n // Css color string to apply to the tileset.\n // This follows Cesium logic for when color is pure white,\n // that means don't apply colour and only apply alpha.\n colorMask?: string;\n }\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Camera } from \"../common/camera\";\r\nimport { IDictionary } from \"../common/dictionary\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\nimport { Markup } from \"../markup/markup\";\r\nimport { Section } from \"../common/section\";\r\nimport { MenuItem } from \"./menu-item\";\r\nimport { ProjectViewTile } from \"./project-view-tile\";\r\n\r\n/**\r\n * Describe the \"Project View Bookmark\" concept within Bruce.\r\n * This is referred to as \"slides\" in older code.\r\n *\r\n * A bookmark is a snapshot of what should be displayed and how in a particular project view.\r\n */\r\nexport namespace ProjectViewBookmark {\r\n export function GetCacheKey(viewId: string, bookmarkId: string): string {\r\n return `${Api.ECacheKey.ProjectViewBookmark}${Api.ECacheKey.Id}${viewId}${Api.ECacheKey.Id}${bookmarkId}`;\r\n }\r\n\r\n export function GetListCacheKey(viewId: string): string {\r\n return `${Api.ECacheKey.ProjectViewBookmark}${Api.ECacheKey.Id}${viewId}`;\r\n }\r\n\r\n // This is the expected default version for the DataVersion value.\r\n // This value should NOT be changed without looking at our API and seeing what the default value is.\r\n export const DEFAULT_DATA_VERSION = 1;\r\n\r\n export interface IBaseBookmark {\r\n ID?: string;\r\n Title?: string;\r\n Note?: string;\r\n \"Screenshot.ClientFile.ID\"?: string;\r\n \"UI.View.ID\"?: string;\r\n \"Created.ByUser.ID\"?: string;\r\n \"Created.Date\"?: UTC.IUTC;\r\n \"UI.SlideGroup.ID\"?: number;\r\n // This is the version of the data in the bookmark.\r\n // This is used to determine how to parse the bookmark's settings.\r\n // 1 - 10,000 are reserved for Nextspace use.\r\n DataVersion: number;\r\n DisplayOrder?: number;\r\n Settings?: IBaseSettings;\r\n // Clipping planes to apply to terrain/entities in the scene.\r\n // A clipping plane is associated with a tileset by root entity id.\r\n sections?: Section.ISection[];\r\n }\r\n\r\n /**\r\n * These are the base settings expected in any bookmark data-version.\r\n * The only exception is data-version = 1 which is our deprecated legacy format.\r\n */\r\n export interface IBaseSettings {\r\n menuItemIds?: string[];\r\n // This is a map of menu item ids to their alternations.\r\n // An alternation is a menu item that has varied settings to the base menu item.\r\n // For example, the base menu item might be \"enabled certain tags\", and the alternation is \"enabled x,y,z certain tags\" to be specific in a bookmark.\r\n menuItemAlternations?: IDictionary<MenuItem.IItem>;\r\n }\r\n\r\n export type Bookmark = LegacyNavigator.IBookmark | Navigator.IBookmark | IBaseBookmark;\r\n\r\n export namespace LegacyNavigator {\r\n export const DATA_VERSION = 1;\r\n\r\n export interface IBookmark extends IBaseBookmark {\r\n Camera?: ICamera;\r\n Settings?: ISettings;\r\n }\r\n\r\n export interface IBookmarkImagery {\r\n title: string;\r\n contrast: number;\r\n hue: number;\r\n saturation: number;\r\n gamma: number;\r\n brightness: number;\r\n alpha: number;\r\n }\r\n\r\n export interface ISettings extends IBaseSettings {\r\n selectedItemIds?: string[];\r\n order?: number;\r\n hiddenEntityIds?: string[];\r\n drawnRelationEntityIDs?: string[];\r\n imagery?: IBookmarkImagery[];\r\n terrain?: string;\r\n globeColor?: string;\r\n shadows?: boolean;\r\n groundOcclusion?: boolean;\r\n ambientOcclusion?: boolean;\r\n markup?: Markup.IMarkup;\r\n cameraFrustum?: Camera.EFrustum;\r\n displayTimeline?: boolean;\r\n timelineSettings?: any;\r\n }\r\n\r\n /**\r\n * Lat,lon is in degrees.\r\n * Altitude is meters relative to ground.\r\n * Heading, pitch, roll are in radians.\r\n */\r\n export interface ICamera {\r\n position: {\r\n latitude: number;\r\n longitude: number;\r\n height: number;\r\n };\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export const DATA_VERSION = 2;\r\n\r\n export interface IBookmark extends IBaseBookmark {\r\n Camera?: ICamera;\r\n Settings?: ISettings;\r\n\r\n }\r\n\r\n export interface ISettings extends IBaseSettings {\r\n groundOcclusion?: boolean;\r\n // Null = use default, empty array = no imagery.\r\n imagery?: ProjectViewTile.IBookmarkImagery[];\r\n terrain?: ProjectViewTile.IBookmarkTerrain;\r\n // Css color string to apply to the base globe.\r\n globeColor?: string;\r\n // 0 = 0%, 1 = 100%. Default is 100%.\r\n globeAlpha?: number;\r\n // If true, the globe will be hidden. Default is false.\r\n globeHidden?: boolean;\r\n markup?: Markup.IMarkup;\r\n shadows?: IShadows;\r\n ambientOcclusion?: IAmbientOcclusion;\r\n lighting?: ILighting;\r\n quality?: IQuality;\r\n // iso8601 date time string.\r\n dateTime?: string;\r\n // Entity id -> opacity. Where 1 = 100% opacity.\r\n entityOpacityMap?: IDictionary<number>;\r\n // Null = use default, empty array = deselect.\r\n // If default is null then selected ids should not be altered.\r\n selectedEntityIds?: string[];\r\n hiddenEntityIds?: string[];\r\n isolatedEntityIds?: string[];\r\n // This enables lighting that makes terrain elevation apparent.\r\n hillShades?: boolean;\r\n // A bit of an awkward transition from the old system.\r\n // We render \"all\" relationships for given entity ids.\r\n // This will create a menu item under the hood, later we will use menu items directly.\r\n renderedEntityRelations?: string[];\r\n // This is a list of entity ids that are refreshed every x seconds.\r\n // We'll enforce about 200 maximum ids. Refresh every 2 - 5 seconds.\r\n liveEntityIds?: string[];\r\n // This will enable the wireframe view for the terrain provider.\r\n terrainWireframe?: boolean;\r\n\r\n /**\r\n * We're sampling the idea of storing these as entities before committing to saving them here.\r\n */\r\n // Drawn measurements.\r\n // measurements?: IMeasurement[];\r\n }\r\n\r\n // export interface IMeasurement {\r\n // type: \"polyline\" | \"point\" | \"polygon\";\r\n // points: Carto.ICarto[];\r\n // innerHTML: string;\r\n // }\r\n\r\n export interface IShadows {\r\n enabled: boolean;\r\n soften: boolean;\r\n pixelSize: number;\r\n darkness: number;\r\n }\r\n\r\n export interface IAmbientOcclusion {\r\n enabled: boolean;\r\n intensity: number;\r\n lengthCap: number;\r\n bias: number;\r\n blurStepSize: number;\r\n stepSize: number;\r\n }\r\n\r\n export interface ILighting {\r\n color: string;\r\n intensity: number;\r\n }\r\n\r\n export interface IQuality {\r\n fxaa: boolean;\r\n }\r\n\r\n export interface ICamera {\r\n // Meters relative to ground.\r\n altitude: number;\r\n // In degrees.\r\n latitude: number;\r\n longitude: number;\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n // Milliseconds transition from current position to bookmark.\r\n transition?: number;\r\n // If frustum is different between two bookmarks, transition should be instant.\r\n cameraFrustum?: Camera.EFrustum;\r\n }\r\n }\r\n\r\n export async function Get(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n bookmarkId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmark: Bookmark\r\n }> {\r\n let { api, viewId, bookmarkId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n \r\n if (!viewId || !bookmarkId) {\r\n throw(\"View ID and Bookmark ID are required.\");\r\n }\r\n const key = GetCacheKey(viewId, bookmarkId);\r\n const cache = await api.GetCacheItem(key, reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n bookmark: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n bookmarkId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, viewId, bookmarkId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!viewId || !bookmarkId) {\r\n throw(\"View ID and Bookmark ID are required.\");\r\n }\r\n await api.DELETE(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId, bookmarkId));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n }\r\n\r\n export async function GetList(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmarks: Bookmark[]\r\n }> {\r\n let { api, viewId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const cache = await api.GetCacheItem(GetListCacheKey(viewId), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slides`, Api.PrepReqParams(reqParams));;\r\n const items = data.Items ? data.Items : [];\r\n // Cache individual items.\r\n // Maybe better to load list cache when getting 1 slide and seeing if it's in there.\r\n // WARNING: Right now the data matches, in the future the list may contain a shortened result.\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i] as ProjectViewBookmark.IBaseBookmark;\r\n const prom = new Promise((res) => {\r\n res({\r\n bookmark: item\r\n });\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(viewId, item.ID),\r\n value: prom,\r\n req: reqParams\r\n });\r\n }\r\n res({\r\n bookmarks: items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(viewId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Update(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n bookmark: Bookmark,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmark: Bookmark\r\n }> {\r\n let { api, viewId, bookmark: data, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!data?.Title) {\r\n data.Title = data.ID;\r\n }\r\n const res = await api.POST(`ui.view/${viewId}/slide/${data.ID ? data.ID : \"\"}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId, <string>data.ID));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n return {\r\n bookmark: res\r\n };\r\n }\r\n\r\n export async function SetOrder(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n bookmarkIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, viewId, bookmarkIds, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n const reqData = {\r\n \t\"UISlide.ID\": bookmarkIds,\r\n \t\"DisplayOrder.Start\": 0\r\n };\r\n await api.POST(`ui.view/${viewId}/slides/setOrder`, reqData, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey(viewId));\r\n }\r\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ObjectUtils } from \"../util/object-utils\";\nimport { UTC } from \"../common/utc\";\nimport { MenuItem } from \"./menu-item\";\nimport { ProjectViewLegacyTile } from \"./project-view-legacy-tile\";\nimport { ProjectViewTile } from \"./project-view-tile\";\nimport { ProjectViewBookmark } from \"./project-view-bookmark\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Project View\" concept within Bruce.\n * A project view is a collection of settings for a visualization application we support.\n * It will describe what panels to show and how, it will also describe all possible ways data can be displayed.\n */\nexport namespace ProjectView {\n export function GetCacheKey(viewId: string): string {\n return `${Api.ECacheKey.ProjectView}${Api.ECacheKey.Id}${viewId}`;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.ProjectView;\n }\n\n // This is the expected default version for the DataVersion value.\n // This value should NOT be changed without looking at our API and seeing what the default value is.\n export const DEFAULT_DATA_VERSION = 1;\n\n export interface IBaseView {\n ID?: string;\n Name: string;\n Description?: string;\n Feature?: string[];\n \"CreatedByUser.ID\"?: string;\n CreatedTime?: UTC.IUTC;\n DefaultUISlideID?: string;\n CreatedByUIVersion?: string;\n // This is the version of the data in the view.\n // This is used to determine how to parse the view's settings.\n // 1 - 10,000 are reserved for Nextspace use.\n DataVersion: number;\n // Admin only property for what email should be the project view's support line.\n SupportEmail?: string;\n Settings?: IBaseSettings;\n // If true, this view is considered the default for the account.\n // Operator may use this project view to load default settings.\n IsDefault?: boolean;\n }\n\n /**\n * These are the base settings expected in any project view data-version.\n * The only exception is data-version = 1 which is our deprecated legacy format.\n */\n export interface IBaseSettings {\n // Menu item structure that defines how and what to load in the scene.\n menuItems?: MenuItem.IItem[];\n // If true, anonymous users won't be able to access the view.\n IsLoginRequired?: boolean;\n // If true, users must have the permission \"Permission.EPermPrefix.ACCESS_PROJECT_VIEW + view.ID\" to access the view.\n IsRestricted?: boolean;\n // Per project view branding to compliment the account branding.\n branding?: IBranding\n }\n \n export interface IBranding {\n // Client file id for the project view's banner.\n // In Navigator this is found within the Navigator's dashboard.\n bannerFileId?: string;\n }\n\n export type View = LegacyNavigator.IView | Navigator.IView | IBaseView;\n\n export namespace LegacyNavigator {\n export const DATA_VERSION = 1;\n\n export interface IShadowSettings {\n IsShadowEnabled?: boolean;\n IsShadowSoft?: boolean;\n ShadowSampleSize?: number;\n }\n\n export interface ISettings extends IBaseSettings {\n BookmarkTransitionSpeed?: number;\n Camera?: any;\n CameraFrustum?: number;\n CesiumMapSources?: ProjectViewLegacyTile.IMapSource[];\n CesiumTerrainSources?: ProjectViewLegacyTile.ITerrainSource[];\n ControlsSettings?: any;\n DefaultMapTiles?: string;\n DefaultTerrain?: string;\n DisplayTimeline?: boolean;\n GroundOcclusion?: boolean;\n Extensions?: any;\n GlobeColor?: string;\n SelectionHighlightColor?: string;\n LayersMenu?: MenuItem.IItem[];\n OASettings?: any;\n LogoImage?: any;\n LegendImage?: any;\n TilesetBackfaceCulling?: boolean;\n TopPanelComponents?: string[];\n LeftPanelComponents?: string[];\n PostProcessFXAA?: boolean;\n Shadows?: boolean;\n CustomFormSettings?: any;\n PreloadEntityTypes?: boolean;\n ClickActions?: any;\n Shadow?: {\n StaticCamera?: IShadowSettings;\n MovingCamera?: IShadowSettings;\n }\n }\n\n export interface IView extends IBaseView {\n Settings: ISettings;\n }\n }\n\n export namespace Navigator {\n export const DATA_VERSION = 2;\n\n export interface ISettings extends IBaseSettings {\n // Imagery and terrains that non-admin users can select from.\n // Sources used in bookmarks will automatically be added to this list.\n imageries?: ProjectViewTile.IViewImagery[];\n terrains?: ProjectViewTile.IViewTerrain[];\n // Defaults are values to apply for bookmarks when either the bookmark-\n // is missing or the value is missing in the bookmark settings.\n defaults?: {\n camera?: ProjectViewBookmark.Navigator.ICamera;\n settings?: ProjectViewBookmark.Navigator.ISettings;\n };\n // Describes how to present contact information to the users.\n // The contact email is set in \"view.SupportEmail\". Only an admin can read or write this value.\n contact?: IContact;\n plugins?: IPlugins;\n // Default is yellow at 0.5 opacity.\n selectionColor?: string;\n // Presentation mode settings.\n present?: IPresent;\n }\n\n export interface IPresent {\n // Time in milliseconds to hold bookmarks before moving to the next bookmark.\n // This is a default time and can be overridden by the bookmark's duration.\n bookmarkDuration?: number;\n }\n\n /**\n * Describes how to present contact information to the users.\n */\n export interface IContact {\n // Default = false.\n // Indicates if the user should be able to reach support.\n enabled: boolean;\n // Description to display in the support dialog.\n // Null = application's default text.\n description?: string;\n // FontAwesome icon to use for the support dialog button.\n // Null = application's default icon.\n icon?: string;\n }\n\n export interface IPlugins {\n // Enabled plugin ids.\n enabledIds: string[];\n }\n\n export interface IView extends IBaseView {\n Settings: ISettings;\n }\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n viewId: string,\n req?: Api.IReqParams\n }): Promise<{\n view: View\n }> {\n let { api, viewId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!viewId) {\n throw(\"View ID is required.\");\n }\n const key = GetCacheKey(viewId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`ui.view/${viewId}`, Api.PrepReqParams(reqParams));\n res({\n view: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n views: View[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"ui.view/list\", Api.PrepReqParams(reqParams));\n res({\n views: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n viewId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, viewId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!viewId) {\n throw(\"View ID is required.\");\n }\n await api.DELETE(`ui.view/${viewId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(viewId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n view: View,\n req?: Api.IReqParams\n }): Promise<{\n view: View\n }> {\n let { api, view: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data) {\n data = <any>{};\n }\n const isNew = !data.ID;\n if (!data.ID) {\n data.ID = ObjectUtils.UId();\n }\n if (!data.Name) {\n data.Name = data.ID;\n }\n if (!data.CreatedByUIVersion) {\n data.CreatedByUIVersion = \"-1\";\n }\n if (isNew) {\n data = await api.POST(`ui.view/${data.ID}`, data, Api.PrepReqParams(reqParams));\n }\n else {\n data = await api.PUT(`ui.view/${data.ID}`, data, Api.PrepReqParams(reqParams));\n }\n api.Cache.Remove(GetCacheKey(<string>data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n view: data\n };\n }\n}","import { BruceApi } from \"../api/bruce-api\";\nimport { Api } from \"../api/api\";\nimport { ProjectView } from \"./project-view\";\nimport { ENVIRONMENT } from \"../environment\";\n\nasync function getTemplateSettings(apiGetter: BruceApi.IGetter, reqParams?: Api.IReqParams): Promise<ProjectView.LegacyNavigator.ISettings> {\n const {view} = await ProjectView.Get({\n api: apiGetter.getApi(Api.TEMPLATE_ACCOUNT_ID), \n viewId: \"default\", \n req: reqParams\n });\n return (view.Settings as ProjectView.LegacyNavigator.ISettings) ?? <ProjectView.LegacyNavigator.ISettings>{};\n}\n\nfunction checkSourceToTemplate(items: ProjectViewLegacyTile.ISource[], templateItem: ProjectViewLegacyTile.ISource, addIfMissing: boolean): void {\n const index = items.findIndex(x => x.Name === templateItem.Name);\n if (index > -1) {\n templateItem.IsDefault = true;\n templateItem.IsEnabled = items[index].IsEnabled;\n items[index] = templateItem;\n }\n else if (addIfMissing) {\n templateItem.IsDefault = true;\n items.push(templateItem);\n }\n}\n\n/**\n * Describes a terrain or map source that are found in project view records.\n * This is a concept we want to trash as we're moving towards storing tileset ids instead.\n * This will help at least understand and manage this dying concept.\n */\nexport namespace ProjectViewLegacyTile {\n export interface ISource {\n SourceUrl?: string;\n IsEnabled?: boolean;\n IsDefault?: boolean;\n Name: string;\n Tooltip?: string;\n IconUrl?: string;\n }\n\n export interface IMapSource extends ISource {\n SourceUrl?: string;\n IonAssetID?: number,\n MapBoxID?: string;\n MapBoxUsername?: string;\n ProgramKey?: string;\n FileExtension?: string,\n Minimum?: number;\n Maximum?: number;\n Type?: string;\n }\n\n export interface ITerrainSource extends ISource {\n RequestWaterMask?: boolean;\n RequestVertexNormals?: boolean;\n }\n\n export async function MergeMapTemplateData(params: {\n getter?: BruceApi.IGetter, \n sources: IMapSource[], \n addIfMissing: boolean, \n req?: Api.IReqParams\n }): Promise<{\n sources: IMapSource[]\n }> {\n let { getter, sources: items, addIfMissing, req: reqParams } = params;\n if (!getter) {\n getter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n const settings = await getTemplateSettings(getter, reqParams);\n const maps = settings.CesiumMapSources ?? [];\n for (let i = 0; i < maps.length; i++) {\n const mapSource = maps[i];\n checkSourceToTemplate(items, mapSource, addIfMissing);\n }\n return {\n sources: items\n };\n }\n\n export async function MergeTerrainTemplateData(params: {\n getter?: BruceApi.IGetter, \n sources: ITerrainSource[], \n addIfMissing: boolean, \n req?: Api.IReqParams\n }): Promise<{\n sources: ITerrainSource[]\n }> {\n let { getter, sources: items, addIfMissing, req: reqParams } = params;\n if (!getter) {\n getter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n const settings = await getTemplateSettings(getter, reqParams);\n const terrains = settings.CesiumTerrainSources ?? [];\n for (let i = 0; i < terrains.length; i++) {\n const terrainSource = terrains[i];\n checkSourceToTemplate(items, terrainSource, addIfMissing);\n }\n return {\n sources: items\n };\n }\n}","\nexport namespace ProjectViewTile {\n export type MapTileId = string | EDefaultImagery;\n export type TerrainTileId = string | EDefaultTerrain;\n\n export interface ITileMeta {\n // Null = using a default tile.\n // (Not the same as a template account one. Default means we don't have a database record of it.).\n accountId?: string;\n tilesetId: string;\n }\n\n export interface IViewTerrain extends ITileMeta {\n tilesetId: TerrainTileId;\n }\n\n export interface IViewImagery extends ITileMeta {\n tilesetId: MapTileId;\n }\n\n export interface IBookmarkImagery extends IViewImagery {\n // 0 - 1, 1 = 100% opacity.\n // Default = 1.\n alpha?: number;\n // Default = 1.\n brightness?: number;\n // Default = 1.\n saturation?: number;\n // Default = 1.\n contrast?: number;\n // Default = 1.\n gamma?: number;\n // Default = 0.\n hue?: number;\n }\n\n export interface IBookmarkTerrain extends IViewTerrain {\n\n }\n\n export enum EDefaultImagery {\n BingMapsAerial = \"bingmapsaerial\",\n BingMapsAerialWithLabels = \"bingmapsaerialwithlabels\",\n BingMapsRoads = \"bingmapsroads\",\n MapboxSatellite = \"mapboxsatellite\",\n MapBoxStreets = \"mapboxstreets\",\n MapBoxStreetsClassic = \"mapboxstreetsclassic\",\n EsriWorldImagery = \"esriworldimagery\",\n EsriWorldStreetMap = \"esriworldstreetmap\",\n EsriNationalGeographic = \"esrinationalgeographic\",\n OpenStreetMap = \"openstreetmap\",\n LINZ = \"linz\",\n StamenWaterColor = \"stamenwatercolor\",\n StamenToner = \"stamentoner\",\n Grid = \"grid\"\n }\n\n export interface IDefaultImagery {\n id: EDefaultImagery;\n name: string;\n iconUrl?: string;\n }\n\n /**\n * Prepared array for UI.\n * TODO: Im not happy with icon urls sitting in the code. I'd prefer we ship these icons in the library as files.\n */\n export const DefaultImagery: IDefaultImagery[] = [\n {\n id: EDefaultImagery.BingMapsAerial,\n name: \"Bing Maps Aerial\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingAerial.png\"\n },\n {\n id: EDefaultImagery.BingMapsAerialWithLabels,\n name: \"Bing Maps Aerial with Labels\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingAerialLabels.png\"\n },\n {\n id: EDefaultImagery.BingMapsRoads,\n name: \"Bing Maps Roads\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingRoads.png\"\n },\n {\n id: EDefaultImagery.MapboxSatellite,\n name: \"Mapbox Satellite\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxSatellite.png\"\n },\n {\n id: EDefaultImagery.MapBoxStreets,\n name: \"Mapbox Streets\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxTerrain.png\"\n },\n {\n id: EDefaultImagery.MapBoxStreetsClassic,\n name: \"Mapbox Streets Classic\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxStreets.png\"\n },\n {\n id: EDefaultImagery.EsriWorldImagery,\n name: \"Esri World Imagery\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriWorldImagery.png\"\n },\n {\n id: EDefaultImagery.EsriWorldStreetMap,\n name: \"Esri World Street Map\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriWorldStreetMap.png\"\n },\n {\n id: EDefaultImagery.EsriNationalGeographic,\n name: \"Esri National Geographic\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriNationalGeographic.png\"\n },\n {\n id: EDefaultImagery.OpenStreetMap,\n name: \"Open Street Map\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/openStreetMap.png\"\n },\n {\n id: EDefaultImagery.LINZ,\n name: \"LINZ\",\n iconUrl: \"https://template.ui.nextspace.host/media/linz.jpg\"\n },\n {\n id: EDefaultImagery.StamenWaterColor,\n name: \"Stamen Water Color\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/stamenWatercolor.png\"\n },\n {\n id: EDefaultImagery.StamenToner,\n name: \"Stamen Toner\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/stamenToner.png\"\n },\n {\n id: EDefaultImagery.Grid,\n name: \"Grid\",\n iconUrl: \"https://template.api.nextspace-uat.net/file/2885d8df-028b-4f5c-80b3-2634f7e7cf69.png\"\n }\n ];\n\n export enum EDefaultTerrain {\n CesiumWorldTerrain = \"cesiumworldterrain\",\n FlatTerrain = \"flatterrain\",\n LINZ = \"linz\"\n }\n\n export interface IDefaultTerrain {\n id: EDefaultTerrain;\n name: string;\n iconUrl?: string;\n }\n\n /**\n * Prepared array for UI.\n * TODO: Im not happy with icon urls sitting in the code. I'd prefer we ship these icons in the library as files.\n */\n export const DefaultTerrains: IDefaultTerrain[] = [\n {\n id: EDefaultTerrain.CesiumWorldTerrain,\n name: \"Cesium World Terrain\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/TerrainProviders/CesiumWorldTerrain.png\"\n },\n {\n id: EDefaultTerrain.LINZ,\n name: \"LINZ\",\n iconUrl: \"https://template.ui.nextspace.host/media/linz.jpg\"\n },\n {\n id: EDefaultTerrain.FlatTerrain,\n name: \"Flat Terrain\",\n }\n ]\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Pending Action\" concept within Bruce.\n * A pending action is a record of a server-side background process.\n * This record is used to monitor its progress and completion state.\n */\nexport namespace PendingAction {\n export interface IAction {\n ID: number;\n \"CreatedBy.Application\": string;\n \"Created.Time\": UTC.IUTC;\n \"CreatedByUser.ID\": string;\n Result: string;\n Progress: number;\n \"Completed.Time\": UTC.IUTC;\n Description: string;\n Status: EStatus;\n lastUpdated: UTC.IUTC;\n }\n\n export enum EStatus {\n InProgress = \"IN_PROGRESS\",\n Cancelled = \"CANCELLED\",\n Complete = \"COMPLETE\",\n Failed = \"FAILED\"\n }\n\n export interface IMessage {\n \"PendingAction.ID\": number;\n ID: number;\n \"CreatedBy.Application\": string;\n \"Created.Time\": UTC.IUTC;\n \"Message.Type\": EMessageType | string;\n Message: string;\n }\n\n export enum EMessageType {\n Warn = \"WARNING\",\n Error = \"ERROR\",\n Status = \"STATUS\",\n Info = \"INFO\"\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n actionId: number,\n req?: Api.IReqParams\n }): Promise<{\n action: IAction\n }> {\n let { api, actionId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!actionId) {\n throw(\"Action ID is required.\");\n }\n const data = await api.GET(`pendingAction/${actionId}`, Api.PrepReqParams(reqParams));\n return {\n action: data\n }\n }\n\n export async function GetRelevantList(params: {\n api?: BruceApi.Api,\n stricter?: boolean,\n reqParams?: Api.IReqParams\n }): Promise<{\n actions: IAction[]\n }> {\n let { api, stricter, reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const data = await api.GET(`pendingActions/important?Update=${Boolean(stricter)}`, Api.PrepReqParams(reqParams));\n return {\n actions: data.Items\n };\n }\n\n export async function GetMessages(params: {\n api?: BruceApi.Api,\n actionId: number,\n order?: Api.ESortOrder,\n startIndex?: number,\n amount?: number,\n types?: EMessageType[],\n req?: Api.IReqParams\n }): Promise<{\n messages: IMessage[]\n }> {\n let { api, actionId, order, startIndex, amount, req: reqParams, types } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (amount == null) {\n amount = 500;\n }\n if (startIndex == null) {\n startIndex = 0;\n }\n if (order == null) {\n order = Api.ESortOrder.Asc;\n }\n let args = `?SortOrder=${order == Api.ESortOrder.Desc ? \"DESC\" : \"ASC\"}&PageSize=${amount}&PageIndex=${startIndex}`;\n if (types?.length) {\n for (let i = 0; i < types.length; i++) {\n args += `&Type=${types[i]}`;\n }\n }\n const data = await api.GET(`pendingAction/${actionId}/progressMessages` + args, Api.PrepReqParams(reqParams));\n return {\n messages: data.Items\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { Calculator } from \"../calculator/calculator\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Style\" concept within Bruce.\n * A legacy way of referring to styles is \"entity display settings\".\n *\n * A style is a collection of settings (which can be calculations to perform on entity data) that\n * describe how an entity should be displayed.\n */\nexport namespace Style {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.Style + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.Style;\n }\n\n export enum EType {\n Entity = \"ENTITY\",\n EntityRelationship = \"ENTITY_RELATIONSHIP\"\n }\n\n export enum EPointType {\n Point = \"POINT\",\n Icon = \"ICON\",\n Cylinder = \"CYLINDER\"\n }\n\n export interface IPointSettings {\n color: Calculator.IField[];\n size: Calculator.IField[];\n iconId: string;\n iconUrl: Calculator.IField[];\n iconScale: Calculator.IField[];\n altitudeOption?: any;\n ClusterNearbyEntities?: boolean;\n MinimumEntitiesCountForClustering?: Calculator.IField[];\n Type: EPointType;\n CylinderFillColor?: Calculator.IField[];\n CylinderFillExtrusion?: Calculator.IField[];\n CylinderRadius?: Calculator.IField[];\n CylinderBorderEnabled?: boolean;\n CylinderBorderExtrusion?: Calculator.IField[];\n CylinderBorderWidth?: Calculator.IField[];\n CylinderBorderColor?: Calculator.IField[];\n }\n\n export interface IPolygonSettings {\n useExtrusion: boolean;\n extrusionPath: Calculator.IField[];\n fillColor: Calculator.IField[];\n lineColor: Calculator.IField[];\n lineWidth: Calculator.IField[];\n altitudeOption?: any;\n zIndex?: Calculator.IField[];\n }\n\n export interface IPolylineSettings {\n lineColor: Calculator.IField[];\n lineWidth: Calculator.IField[];\n // Default is \"px\" for backward compatibility.\n // When units are in px the lines will draw as Cesium Polyline graphics, for meters corridors are used.\n // Meters are more stable and will reduce crashes.\n lineWidthUnits?: \"px\" | \"m\";\n altitudeOption?: any;\n zIndex?: Calculator.IField[];\n }\n\n export interface IModelSettings {\n customize: boolean;\n fillColor: Calculator.IField[];\n scale: Calculator.IField[];\n fillColorBlendMode?: any;\n fillColorBlendAmount?: number;\n altitudeOption?: any;\n }\n\n export interface IEntitySettings {\n pointStyle?: IPointSettings;\n polygonStyle?: IPolygonSettings;\n polylineStyle?: IPolylineSettings;\n modelStyle?: IModelSettings;\n }\n\n export interface IRelationSettings {\n lineColor?: Calculator.IField[];\n lineWidth?: Calculator.IField[];\n heightDistanceRatio?: Calculator.IField[];\n duration?: Calculator.IField[];\n }\n\n export type Settings = IEntitySettings | IRelationSettings;\n\n export interface IStyle {\n ID: number;\n Name: string;\n Settings: Settings;\n Type: EType;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n styles: IStyle[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const res: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"ui.entityDisplaySettings\", Api.PrepReqParams(reqParams));\n res({\n styles: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: res,\n req: reqParams\n });\n return res;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n styleId: number,\n req?: Api.IReqParams\n }): Promise<{\n style: IStyle\n }> {\n let { api, styleId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Style ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(id), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\n res({\n style: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n style: IStyle,\n req?: Api.IReqParams\n }): Promise<{\n style: IStyle\n }> {\n let { api, style: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.Name) {\n throw(\"Style name is required.\");\n }\n if (!data.ID) {\n data.ID = 0;\n }\n const res = await api.POST(`ui.entityDisplaySetting/${data.ID}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n style: res\n };\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n styleId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, styleId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Style ID is required.\");\n }\n await api.DELETE(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(id));\n api.Cache.Remove(GetListCacheKey());\n }\n}","export namespace Permission {\n export type Perm = EPerm | string;\n\n export enum EPerm {\n ADMIN = \"ADMIN\",\n LOGIN = \"LOGIN\",\n DELETE_ENTITY_TYPE = \"DELETE_ENTITY_TYPE\",\n CREATE_ENTITY_TYPE = \"CREATE_ENTITY_TYPE\",\n UPDATE_ENTITY_TYPE = \"UPDATE_ENTITY_TYPE\"\n }\n\n export enum EPermPrefix {\n ACCESS_PROJECT_VIEW = \"UIVIEW_\",\n MANAGE_PROJECT_VIEW_BOOKMARKS = \"UIVIEW_MANAGE_BOOKMARKS_\",\n ACCESS_TILESET = \"TILESET_\"\n }\n}","import { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { IdmApi } from \"../api/idm-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Permission } from \"./permission\";\nimport { User } from \"./user\";\n\n/**\n * Describes the \"Session\" concept within Bruce.\n * A session is a set of settings produced from a user or access token login.\n * The session describes what the access should be allowed to do.\n */\nexport namespace Session {\n function GetCacheKey(sessionId: string): string {\n return `${Api.ECacheKey.Session}${Api.ECacheKey.Id}${sessionId}`;\n }\n\n export interface ISession {\n AccessPermissions: IAccountPermissions;\n HypeportalAccessPermisssions?: ISuperPermissions;\n \"ClientAccount.ID\": string;\n ID: string;\n IP: string;\n LastAccessTime: UTC.IUTC;\n User: User.IUser;\n }\n\n export interface IAccountPermissions {\n \"ClientAccount.ID\"?: string;\n EnabledFeatures?: Permission.Perm[];\n UserGroups?: string[];\n }\n\n export interface ISuperPermissions {\n EnabledFeatures?: Permission.Perm[];\n UserGroups?: string[];\n }\n\n export async function Get(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n sessionId: string,\n req?: Api.IReqParams\n }): Promise<{\n session: ISession\n }> {\n let { api, sessionId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!sessionId) {\n throw(\"Session ID is required.\");\n }\n const key = GetCacheKey(sessionId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`session/${sessionId}`, reqParams);\n res({\n session: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams,\n duration: 5000\n });\n return prom;\n }\n\n /**\n * Request to login or to swap existing session to a different account.\n * If api is already logged in, pass account param to swap the session.\n * @param params \n * @returns \n */\n export async function Login(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n username?: string,\n password?: string,\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n session: ISession\n }> {\n let { api, username, password, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const data: any = await api.POST(\"login\", {\n account: accountId ? accountId : \"\",\n login: username,\n password: password\n }, reqParams);\n const session: ISession = data?.Session;\n const ssid = session?.ID;\n api.SetSessionId(ssid);\n api.Cache.Remove(GetCacheKey(ssid));\n return {\n session: session\n };\n }\n\n export async function Logout(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const ssid = api.GetSessionId();\n if (ssid) {\n await api.POST(\"logout\", null, reqParams);\n api.SetSessionId(<any>null);\n api.Cache.Remove(GetCacheKey(ssid));\n }\n }\n\n export function IsPermEnabled(params: {\n session: ISession,\n accountId: string,\n perm: string\n }): boolean {\n let { session, accountId, perm } = params;\n if (!perm) {\n throw(\"Perm is required.\");\n }\n perm = perm.toLocaleUpperCase();\n const perms = <User.IAccessPermission>session?.User?.AccessPermissions?.find(x => x[\"ClientAccount.ID\"] == accountId);\n if (!perms) {\n return false;\n }\n if (!perms.UserGroups) {\n perms.UserGroups = [];\n }\n for (let i = 0; i < perms.UserGroups.length; i++) {\n const group = perms.UserGroups[i];\n if (typeof group != \"string\") {\n const features = group.Features;\n if (features && features.findIndex(x => x.toLocaleUpperCase() == perm) > -1) {\n return true;\n }\n }\n }\n return false;\n }\n\n export function IsSuperPermEnabled(params: {\n session: ISession,\n perm: string\n }): boolean {\n let { session, perm } = params;\n if (!perm) {\n throw(\"Perm is required.\");\n }\n perm = perm.toLocaleUpperCase();\n const accessPerms = session?.HypeportalAccessPermisssions?.EnabledFeatures ?? [];\n return accessPerms.findIndex(x => x.toLocaleUpperCase() == perm) > -1;\n }\n\n export function IsAccountAdmin(params: {\n session: ISession,\n accountId: string\n }): boolean {\n return IsPermEnabled({\n perm: Permission.EPerm.ADMIN,\n accountId: params.accountId,\n session: params.session\n });\n }\n\n export function IsSuperAdmin(params: {\n session: ISession\n }): boolean {\n return IsSuperPermEnabled({\n session: params.session,\n perm: Permission.EPerm.ADMIN\n });\n }\n}","import { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { IdmApi } from \"../api/idm-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Permission } from \"./permission\";\nimport { User } from \"./user\";\n\n/**\n * Describes the \"User Group\" concept within Bruce.\n * A user group is a collection of permissions (\"Features\") and what users should be in the group.\n */\nexport namespace UserGroup {\n export interface IGroup {\n \"ClientAccount.ID\"?: string;\n \"Features\": Permission.Perm[];\n \"ID\": string;\n \"Name\"?: string;\n }\n\n export async function GetByName(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n name: string, \n req?: Api.IReqParams\n }): Promise<{\n group: IGroup\n }> {\n let { api, accountId, name, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!name || !accountId) {\n throw(\"Name and AccountID are required.\");\n }\n const data = await api.GET(`account/${accountId}/userGroupByName/${name}`, reqParams);\n return {\n group: data\n };\n }\n\n export async function GetUsers(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n groupId: string, \n req?: Api.IReqParams\n }): Promise<{\n users: User.IUser[]\n }> {\n let { api, accountId, groupId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId || !id) {\n throw(\"AccountID and ID are required.\");\n }\n const data = await api.GET(`userGroup/${accountId}/${id}/users`, reqParams);\n return {\n users: data.Items\n };\n }\n\n export async function GetListByPerm(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n perm: Permission.Perm, \n req?: Api.IReqParams\n }): Promise<{\n groups: IGroup[]\n }> {\n let { api, accountId, perm, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId || !perm) {\n throw(\"AccountID and Perm are required.\");\n }\n const data = await api.GET(`userGroupsByFeature/${accountId}/${perm}`, reqParams);\n return {\n groups: data.Items\n };\n }\n\n export async function GetList(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n req?: Api.IReqParams\n }): Promise<{\n groups: IGroup[]\n }> {\n let { api, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId) {\n throw(\"AccountID is required.\");\n }\n const data = await api.GET(`userGroups/${accountId}`, reqParams);\n return {\n groups: data.Items\n };\n }\n\n export async function Delete(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n groupId: string, \n req?: Api.IReqParams\n }): Promise<void> {\n let { api, accountId, groupId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId || !id) {\n throw(\"AccountID and ID are required.\");\n }\n return api.DELETE(`account/${accountId}/userGroupID/${id}`, reqParams);\n }\n\n export async function Update(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n group: IGroup, \n reqParams?: Api.IReqParams\n }): Promise<{\n group: IGroup\n }> {\n let { api, group: data, reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!data.Name || !data[\"ClientAccount.ID\"]) {\n throw(\"User group name and client account ID are required.\");\n }\n const res = await api.POST(`userGroup${data.ID ? (\"/\" + data.ID) : \"\"}`, data, reqParams);\n return {\n group: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { IdmApi } from \"../api/idm-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { UserGroup } from \"./user-group\";\n\n/**\n * Describes the \"User\" concept within Bruce.\n * A user is either a login-user or an access-token.\n *\n * You cannot login using an access-token, but both concepts are-\n * treated the same way in terms of permissions and user groups.\n */\nexport namespace User {\n export function GetCacheKey(userId: string, accountId?: string): string {\n if (!accountId) {\n accountId = \"\";\n }\n return Api.ECacheKey.User + Api.ECacheKey.Id + userId + Api.ECacheKey.Id + accountId;\n }\n\n export function GetEmailCacheKey(email: string, accountId?: string): string {\n if (!accountId) {\n accountId = \"\";\n }\n return Api.ECacheKey.User + Api.ECacheKey.UserEmail + email + Api.ECacheKey.Id + accountId;\n }\n\n export function GetSettingsCacheKey(userId: string, appId: string): string {\n return Api.ECacheKey.User + Api.ECacheKey.UserSettings + userId + Api.ECacheKey.Id + appId;\n }\n\n export interface IUser {\n AccessPermissions?: IAccessPermission[];\n Email?: string;\n Login?: string;\n FullName?: string;\n ID?: string;\n IsActivated?: boolean;\n IsDisabled?: boolean;\n IsPasswordChangeRequired?: boolean;\n Mobile?: string;\n Password?: string;\n Type?: EType;\n }\n\n export enum EType {\n User = \"LOGIN_USER\",\n AccessToken = \"ACCESS_TOKEN\"\n }\n\n export interface IAccessPermission {\n \"ClientAccount.ID\": string;\n \"UserGroup.ID\"?: string[];\n \"UserGroups\"?: UserGroup.IGroup[];\n }\n\n export async function Get(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n userId: string,\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, userId: id, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!id) {\n throw(\"ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(id, <string>accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`user/${id}${accountId ? `?clientAccountID=${accountId}` : \"\"}`, reqParams)\n res({\n user: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id, <string>accountId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Update(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n user: IUser,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, user: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!data?.ID || !data?.Type) {\n throw(\"ID and Type are required.\");\n }\n // When getting a user it is structured slightly different to when we update it.\n // We can make up the difference here.\n if (data.AccessPermissions?.length) {\n for (let i = 0; i < data.AccessPermissions.length; i++) {\n const perm = data.AccessPermissions[i];\n if (!perm[\"UserGroup.ID\"] && perm.UserGroups) {\n perm[\"UserGroup.ID\"] = [];\n for (let j = 0; j < perm.UserGroups.length; j++) {\n perm[\"UserGroup.ID\"].push(perm.UserGroups[j].ID);\n }\n }\n }\n }\n const res = await api.POST(`user/${data.ID}`, data, reqParams);\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + data.ID);\n if (data.Type == EType.AccessToken) {\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\n }\n else if (data.Type == EType.User) {\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.User + Api.ECacheKey.Account);\n }\n return {\n user: res\n };\n }\n\n /**\n * Loads settings for a given user + app.\n * The session's account id is used to separate settings between accounts.\n * @param params\n */\n export async function GetSettings(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n userId: string,\n appId: string,\n req?: Api.IReqParams\n }): Promise<{\n settings: any\n }> {\n let { api, userId, appId, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!userId || !appId) {\n throw(\"UserId and appId are required.\");\n }\n const cache = await api.GetCacheItem(GetSettingsCacheKey(userId, appId), req);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`user/${userId}/application/${appId}/settings`);\n const settings = data?.Settings ? data.Settings : {};\n res({\n settings: settings\n });\n }\n catch (e) {\n // It will complain if an app id hasn't been used yet.\n // We need to suppress that error.\n if (e && typeof e == \"object\") {\n if (e.ERROR && typeof e.ERROR == \"object\" && e.ERROR.Type == \"NotFound\") {\n res({\n settings: {}\n });\n return;\n }\n }\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetSettingsCacheKey(userId, appId),\n value: prom,\n req: req\n });\n return prom;\n }\n\n /**\n * Updates settings for a given accId + user + app.\n * The settings update will replace the existing record, please ensure to merge with existing settings.\n * AccountId is optional and will use a globally shared record if not provided.\n * @param params\n */\n export async function UpdateSettings(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accId?: string,\n userId: string,\n appId: string,\n settings: any,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, accId, userId, appId, settings, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!userId || !appId) {\n throw(\"UserId and appId are required.\");\n }\n const postBody = {\n Settings: settings == null ? {} : settings,\n Application: appId,\n ClientAccountID: accId,\n UserID: userId\n };\n const prom = api.POST(`user/${userId}/application/${appId}/settings`, postBody, req);\n api.Cache.Remove(GetSettingsCacheKey(userId, appId));\n return prom;\n }\n\n export async function GetUsernameAvailable(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n username: string,\n excludeUserId?: string,\n req?: Api.IReqParams\n }): Promise<{\n isAvailable: boolean\n }> {\n let { api, username, excludeUserId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!username) {\n throw(\"Username is required.\");\n }\n const req = api.GET(`user/loginavailable/${username}${excludeUserId ? \"?excludeUserId=\" + excludeUserId : \"\"}`, reqParams);\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n isAvailable: data.IsAvailable\n });\n }\n catch (e) {\n rej(<any>e);\n }\n });\n return prom;\n }\n\n export namespace LoginUser {\n export function GetListCacheKey(accountId: string): string {\n return Api.ECacheKey.User + Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\n }\n\n export async function GetByEmail(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n email: string,\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, email, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!email) {\n throw(\"Email is required.\");\n }\n const cache = await api.GetCacheItem(GetEmailCacheKey(email, <string>accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`userByEmail/${email}${accountId ? `?clientAccountID=${accountId}` : \"\"}`, reqParams);\n res({\n user: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetEmailCacheKey(email, <string>accountId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId: string,\n exclusive?: boolean,\n req?: Api.IReqParams\n }): Promise<{\n users: IUser[]\n }> {\n let { api, accountId, exclusive, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId) {\n throw(\"Client account ID is required.\");\n }\n if (!exclusive) {\n exclusive = false;\n }\n const cache = exclusive ? null : await api.GetCacheItem(GetListCacheKey(accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`users?clientAccountID=${accountId}${exclusive ? \"&allExcludingClientAccount=true\" : \"\" }`, reqParams);\n res({\n users: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n req.then(async (data) => {\n const users = data.users;\n for (let i = 0; i < users.length; i++) {\n await api.SetCacheItem({\n key: GetCacheKey(<string>users[i].ID, accountId),\n value: {\n user: users[i]\n },\n req: reqParams\n });\n }\n });\n if (!exclusive) {\n await api.SetCacheItem({\n key: GetListCacheKey(accountId),\n value: req,\n req: reqParams\n });\n }\n return req;\n }\n\n /**\n * Sends a signup email to the specified email address.\n * @param params\n * @returns\n */\n export async function Signup(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n email: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, email, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!email) {\n throw(\"Email is required.\");\n }\n return api.POST(\"clientaccount/signup\", {\n Email: email\n }, reqParams);\n }\n\n /**\n * Sends a new signup email using a previous one's expired code.\n * @param params\n * @returns\n */\n export async function SignupResend(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n expiredCode: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, expiredCode, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!expiredCode) {\n throw(\"Expired activation code is required.\");\n }\n return api.POST(`clientaccount/signup/resend?activationKey=${Api.Encode(expiredCode)}`, null, reqParams);\n }\n\n /**\n * Completes signup using user data and a signup code.\n * @param params\n * @returns\n */\n export async function SignupComplete(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n code: string,\n user: IUser,\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, code, user: data, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!code || !data?.Login || !data?.Password) {\n throw(\"Login, password, and activation code are required.\");\n }\n data = JSON.parse(JSON.stringify(data));\n data.IsActivated = true;\n data.IsDisabled = false;\n (<any>data).key = code;\n const res: IUser = await api.POST(`UserActivate/${accountId ? accountId : \"\"}`, data, reqParams);\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + res.ID);\n if (data.Email) {\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.UserEmail + data.Email);\n }\n return {\n user: res\n };\n }\n\n /**\n * Sends a password reset email to the specified email address.\n * @param params\n * @returns user id associated with provided email.\n */\n export async function ForgotPassword(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId: string,\n email: string,\n req?: Api.IReqParams\n }): Promise<{\n userId: string\n }> {\n let { api, accountId, email, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId || !email) {\n throw(\"Account ID and email are required.\");\n }\n const req = api.POST(`UserForgotPassword/${accountId}`, {\n Email: email\n }, reqParams);\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n userId: data.ID\n });\n }\n catch (e) {\n rej(e);\n }\n });\n return prom;\n }\n\n /**\n * Completes password reset using a password reset code and new password.\n * @param params\n * @returns\n */\n export async function ForgotPasswordComplete(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n code: string,\n userId: string,\n password: string,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, code, userId, password, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const {user} = await Get({\n api: api,\n userId: userId,\n accountId: \"\",\n req: reqParams\n });\n const res = await api.POST(\"UserSetNameAndPassword\", {\n ID: userId,\n Email: user.Email,\n ActivationCode: code,\n Password: password,\n FullName: user.FullName\n }, reqParams);\n return {\n user: res\n };\n }\n }\n\n export namespace AccessToken {\n export function GetListCacheKey(accountId: string): string {\n return Api.ECacheKey.AccessToken + Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\n }\n\n export async function GetList(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId: string,\n req?: Api.IReqParams\n }): Promise<{\n users: IUser[]\n }> {\n let { api, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"usersByClientAccount/accessTokens\", reqParams);\n res({\n users: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n req.then(async (data) => {\n const users = data.tokens;\n for (let i = 0; i < users.length; i++) {\n await api.SetCacheItem({\n key: GetCacheKey(<string>users[i].ID, accountId),\n value: {\n user: users[i]\n },\n req: reqParams\n });\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(accountId),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n tokenId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tokenId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n await api.DELETE(`accessToken/${id}`, reqParams);\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + id);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\n }\n\n export async function Create(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n token: IUser,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, token: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!data) {\n data = {};\n }\n if (data.Type == EType.User) {\n throw(\"User type is not allowed.\");\n }\n if (!data.Type) {\n data.Type = EType.AccessToken;\n }\n data = await api.POST(\"accessToken\", data, reqParams);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\n return {\n user: data\n };\n }\n }\n}","\nimport { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { IdmApi } from \"../api/idm-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { User } from \"../user/user\";\n\nexport namespace AccountInvite {\n export interface IInvite {\n ID: number;\n \"Account.ID\": string;\n \"Invited.User.ID\": string;\n \"InvitedBy.User.ID\": string;\n CreatedDate: UTC.IUTC;\n InviteMethod: EInviteMethod;\n IsExpired: boolean;\n Status: EStatus;\n }\n\n export enum EStatus {\n Denied = \"Denied\",\n Cancelled = \"Cancelled\",\n Sent = \"Sent\",\n NotSent = \"NotSent\",\n Accepted = \"Accepted\"\n }\n\n export enum EInviteMethod {\n Email = \"Email\",\n SMS = \"SMS\",\n Manual = \"Manual\"\n }\n\n export async function GetByCode(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n code: string,\n req?: Api.IReqParams\n }): Promise<{\n invite: IInvite\n }> {\n let { api, code, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const res = await api.GET(`invite/code?inviteCode=${code}`, Api.PrepReqParams(req));\n return res;\n }\n\n export async function GetList(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId?: string,\n userId?: string,\n req?: Api.IReqParams\n }): Promise<{\n invites: IInvite[],\n warnings?: string[]\n }> {\n let { api, accountId, userId, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const urlParams = new URLSearchParams();\n if (accountId) {\n urlParams.append(\"accountId\", accountId);\n }\n if (userId) {\n urlParams.append(\"userId\", userId);\n }\n const res = await api.GET(\"invites?\" + urlParams.toString(), Api.PrepReqParams(req));\n return res;\n }\n\n export async function Update(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n code: string,\n status: string,\n user?: User.IUser,\n req?: Api.IReqParams\n }) {\n let { api, code, status, user, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const res = await api.POST(\"invite/update\", {\n InviteCode: code,\n Status: status,\n User: user\n }, Api.PrepReqParams(req));\n return res;\n }\n\n export async function Create(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId: string,\n login?: string,\n userId?: string,\n email?: string,\n mobile?: string,\n emailTemplateKey?: string,\n groupIds?: string[],\n req?: Api.IReqParams\n }): Promise<{\n warnings?: string[],\n user: User.IUser,\n manualInviteCode?: string,\n invite: IInvite,\n manualInvite?: IInvite\n }> {\n let { api, accountId, login, userId, email, mobile, emailTemplateKey, groupIds, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const res = await api.POST(\"invite/new\", {\n accountId,\n login,\n email,\n mobile,\n userId,\n groupIds,\n emailTemplateKey\n }, Api.PrepReqParams(req));\n return res;\n }\n}","export namespace EncryptUtils {\n // https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\n export function Cyrb53Hash(str: string, seed: number = 0): number {\n let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1>>>16), 2246822507) ^ Math.imul(h2 ^ (h2>>>13), 3266489909);\n h2 = Math.imul(h2 ^ (h2>>>16), 2246822507) ^ Math.imul(h1 ^ (h1>>>13), 3266489909);\n return (4294967296 * (2097151 & h2) + (h1>>>0));\n }\n}","import { IDictionary } from \"../common/dictionary\";\n\n/**\n * Utility to help with url manipulation.\n */\nexport namespace UrlUtils {\n export function GetQueryString(doc: Document): IDictionary<string> {\n const qs: any = {};\n const p0 = doc.location.href.indexOf(\"?\");\n if (p0 >= 0) {\n const str = doc.location.href.substring(p0 + 1);\n const tokens = str.split(\"&\");\n tokens.forEach(token => {\n const p = token.split(\"=\");\n if (p.length == 2) {\n qs[p[0]] = p[1];\n }\n });\n }\n return qs;\n }\n\n /**\n * Helper to get and set url params for a given window.\n */\n export class Handler {\n private _window: Window;\n public get window(): Window {\n return this._window;\n }\n private get document(): Document {\n return this.window?.document;\n }\n private _allowedKeys: string[] = <any>null;\n public get allowedKeys(): string[] {\n return this._allowedKeys;\n }\n \n public constructor(window: Window, allowedKeys?: string[]) {\n this._window = window;\n this._allowedKeys = <string[]>allowedKeys;\n }\n \n public UpdateAllowedKeys(allowedKeys: string[]): void {\n this._allowedKeys = allowedKeys;\n let params = this.GetParams();\n this.refresh(params);\n }\n \n public UpdateParam(key: string, value: string | number): void {\n let params = this.GetParams();\n params[key + \"\"] = value + \"\";\n this.refresh(params);\n }\n \n public RemoveParam(key: string): void {\n let params = this.GetParams();\n params[key + \"\"] = <any>null;\n this.refresh(params);\n }\n \n public GetParamKeys(): string[] {\n let params = GetQueryString(this.document);\n return Object.keys(params);\n }\n \n public GetParams(): IDictionary<string> {\n return GetQueryString(this.document);\n }\n \n public GetParam(key: string): string {\n let params = this.GetParams();\n return params[key + \"\"];\n }\n \n public Clear(): void {\n this.refresh({});\n }\n \n private refresh(urlParams: IDictionary<string | number>): void {\n const params: string[] = [];\n const keys = Object.keys(urlParams);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (this._allowedKeys == null || this._allowedKeys.includes(key)) {\n const val = urlParams[key];\n if (!!val || val == 0) {\n params.push(`${key}=${val}`);\n }\n }\n }\n if (params.length > 0) {\n this.window.history.replaceState({}, <any>null, \"?\" + params.join(\"&\"));\n }\n else {\n this.window.history.replaceState({}, <any>null, \"\");\n }\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Entity as E } from \"../entity/entity\";\n\nexport namespace DataLab {\n export enum EReqKey {\n Primary = \"PrimarySelection\",\n Secondary = \"SecondarySelection\"\n }\n\n // WIP.\n export interface IQuery {\n [EReqKey.Primary]: {\n Items: any[]\n },\n [EReqKey.Secondary]?: any,\n Action?: string,\n PrimaryEntityTypeID?: string;\n PrimaryEntityID?: string;\n }\n\n export async function Run(params: {\n api?: BruceApi.Api,\n query: IQuery, \n key?: EReqKey, \n skip?: number, \n load?: number, \n req?: Api.IReqParams\n }): Promise<{\n entities: E.IEntity[]\n }> \n {\n let { api, query, key, skip, load, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!key) {\n key = EReqKey.Primary;\n }\n if (!skip) {\n skip = 0;\n }\n if (!load) {\n load = 50;\n }\n const req = api.POST(`entities/datalab/getMatchingEntities/${key}?skip=${skip}&load=${load}`, \n query, \n Api.PrepReqParams(reqParams)\n );\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n entities: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n return prom;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * TODO: The analysis result is currently a mix of multiple layers of legacy.\n * We will first decide what we want it to do and then describe just the needed portions of the existing implementation.\n */\nexport namespace ImportCad {\n export interface IAnalyzeParams {\n \"TempFile.ID\": string;\n \"OriginalIFCFile.Name\": string;\n }\n\n export interface IAnalyzeRes {\n PendingActionID: number;\n }\n\n export interface IImportParams {\n \"BRZFilePath\"?: string;\n \"TempFile.ID\": string;\n \"OriginalIFCFile.Name\": string;\n \"IFCSettings\": {\n \"ClassificationRules\": {\n \"NewIFCStandard.Name\": string;\n \"IFCStandard\": string;\n \"IsExtendingAllowed\": boolean;\n \"AllowAddingNewEntityTypes\": boolean;\n \"AllowAddingNewAttributes\": boolean;\n \"EntityTypesDerivedFromAttribute\": string;\n }\n }\n }\n\n export interface IImportRes {\n PendingActionID: number;\n }\n\n export async function Analyze(params: {\n api?: BruceApi.Api, \n fileAnalyze: IAnalyzeParams, \n req?: Api.IReqParams\n }): Promise<IAnalyzeRes> {\n let { api, fileAnalyze, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/PrepareIFCForImport\", fileAnalyze, Api.PrepReqParams(reqParams));\n }\n\n export async function ImportEntities(params: {\n api?: BruceApi.Api, \n fileImport: IImportParams, \n req?: Api.IReqParams\n }): Promise<IImportRes> {\n let { api, fileImport, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/importIFCWithProgress\", fileImport, Api.PrepReqParams(reqParams));\n }\n\n /**\n * Parses the completed pending action result from running \"ImportEntities\".\n * This will return the root entity's id if any is present.\n * @param paResult \n */\n export function ParseRootId(paResult: string | Object): string {\n try {\n const obj = typeof paResult == \"string\" ? JSON.parse(paResult) : paResult;\n if (obj?.result?.length) {\n return obj.result[0];\n }\n }\n catch {\n // Failed to parse json.\n }\n return <any>null;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\nexport namespace ImportCsv {\n export interface IImportParams {\n \"TempFile.ID\": string;\n \"CSVSettings\": {\n \"IsTitleRow\": boolean;\n \"Delimiter\": string;\n \"IsRecordQuoted\": boolean;\n \"Columns\": string[];\n },\n \"OriginalCSVFile.Name\": string;\n \"ImportMode\": string;\n \"EntityType.ID\": string;\n \"TargetDataSchema\": any;\n \"DataMapping\": any;\n \"Layers\": number[];\n \"SkipUnresolvedRows\": boolean;\n \"DeleteNonupdatedEntities\": boolean;\n \"Async\": boolean;\n \"SkipFailedEntities\": boolean;\n }\n\n export interface IImportRes {\n PendingActionID: number;\n }\n\n export async function ImportEntities(params: {\n api?: BruceApi.Api, \n fileImport: IImportParams, \n req?: Api.IReqParams\n }): Promise<IImportRes> {\n let { api, fileImport, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/importCSVWithProgress2\", fileImport, Api.PrepReqParams(reqParams));\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { EntityTag } from \"../entity/entity-tag\";\n\nexport namespace ImportJson {\n export interface ITagExt extends EntityTag.ITag {\n IsSelected: boolean;\n }\n\n export interface IImportParams {\n \"TempFile.ID\": string;\n \"TempFile.Ext\": string;\n \"OriginalJsonFile.Name\": string;\n ImportMode: string;\n \"EntityType.ID\": string;\n DataMappingSchema: any;\n TargetDataSchema: any;\n Layers: ITagExt[];\n }\n\n export interface IImportRes {\n PendingActionID: number;\n }\n\n export async function ImportEntities(params: {\n api?: BruceApi.Api, \n fileImport: IImportParams, \n req?: Api.IReqParams\n }): Promise<IImportRes> {\n let { api, fileImport, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/importJsonWithProgress\", fileImport, Api.PrepReqParams(reqParams));\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\nexport namespace ImportKml {\n export interface IImportParams {\n \"TempFile.ID\": string;\n \"OriginalKMLFile.Name\": string;\n KMLFolders: any[];\n ImportMode: string;\n TotalCount: number;\n }\n\n export interface IImportRes {\n PendingActionID: number;\n }\n\n export async function ImportEntities(params: {\n api?: BruceApi.Api, \n fileImport: IImportParams, \n req?: Api.IReqParams\n }): Promise<IImportRes> {\n let { api, fileImport, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/importKMLWithProgress2\", fileImport, Api.PrepReqParams(reqParams));\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ClientFile } from \"../client-file/client-file\";\nimport { ENVIRONMENT } from \"../environment\";\n\nexport namespace ImportedFile {\n export function GetCacheKey(fileId: number): string {\n return Api.ECacheKey.ImportedFile + Api.ECacheKey.Id + fileId;\n }\n\n export function GetCacheKeyByRootId(rootId: string): string {\n return Api.ECacheKey.ImportedFile + Api.ECacheKey.Id + rootId;\n }\n\n export function GetListCacheKey(type: EFileType, pageIndex: number): string {\n return Api.ECacheKey.ImportedFile + type + pageIndex;\n }\n\n export interface IFile {\n ID: number;\n \"ClientFile.ID\": string;\n \"ImportedBy.User.ID\": string;\n \"Imported.DateTime\": any;\n \"EntityType.ID\": string;\n \"RootEntity.ID\": string;\n \"Source.ID\": number;\n \"PendingAction.ID\": number;\n NewEntitiesCount: number;\n UpdatedEntitiesCount: number;\n ClientFile: ClientFile.IClientFile;\n }\n\n export enum EFileType {\n CAD = \"CAD\",\n All = \"All\"\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n fileType?: EFileType,\n pageIndex?: number,\n req?: Api.IReqParams\n }): Promise<{\n importedFiles: IFile[]\n }> {\n let { api, fileType: type, pageIndex, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!type) {\n type = EFileType.All;\n }\n if (!pageIndex) {\n pageIndex = 0;\n }\n const cache = await api.GetCacheItem(GetListCacheKey(type, pageIndex), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n\n let first = true;\n let url = \"entityImportFiles\";\n if (type != EFileType.All) {\n url += \"?FileType=\" + type;\n first = false;\n }\n if (pageIndex > 0) {\n url += (first ? \"?\" : \"&\") + \"pageIndex=\" + pageIndex;\n }\n const req = api.GET(url, Api.PrepReqParams(reqParams));\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n importedFiles: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(type, pageIndex),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetListByRootId(params: {\n api?: BruceApi.Api,\n rootId: string,\n req?: Api.IReqParams\n }): Promise<{\n importedFiles: IFile[]\n }> {\n let { api, rootId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetCacheKeyByRootId(rootId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entityImportFiles?Entity.ID=${rootId}`, Api.PrepReqParams(reqParams));\n res({\n importedFiles: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKeyByRootId(rootId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n importedFileId: number,\n req?: Api.IReqParams\n }): Promise<{\n importedFile: IFile\n }> {\n let { api, importedFileId: fileId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetCacheKey(fileId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entityImportFile/${fileId}`, Api.PrepReqParams(reqParams));\n res({\n importedFile: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(fileId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n}","import { Cartes, EntityAttachmentType } from \"../bruce-models\";\n\n/**\n * Description of a \"Markup\" which is stored in custom-form or bookmark records.\n */\nexport namespace Markup {\n export interface IMarkup {\n divs?: Div.IDiv[];\n vectors?: (Line.ILine | FreePaint.IPaint)[];\n cesiumObjects?: (Polygon.IPolygon | Polyline.IPolyline | Circle.ICircle | Walkscore.IWalkscore)[];\n width?: number;\n height?: number;\n defaultCameraPos?: any;\n // Default = true.\n visible?: boolean;\n }\n\n export interface IElement {\n // Unique id of the element within the markup.\n // Warning: IAnchor elements are not elements and do not have an id.\n // Anchors only exist as sub elements to other items.\n id: string;\n // Human readable name for the element.\n // This is presented in editing screens to help differentiate elements.\n name?: string;\n // Default = true.\n visible?: boolean;\n // The screen position of the original drawn element.\n // Used to determine if anything needs to change based on viewer's screen size.\n screenWidth?: number;\n screenHeight?: number;\n }\n\n export namespace Div {\n // Types of div that can be created.\n export enum EType {\n // Default, no special handling.\n Default = \"default\",\n // Callout, assumes it will be positioned in 3d space.\n // Assumes existence of line that is used to anchor it.\n Callout = \"callout\"\n }\n\n export interface IDiv extends IElement {\n // Type of div. Determines how it is rendered / positioned.\n type?: EType;\n // The div's content.\n contentRows: IRow[];\n // Css box shadow.\n boxShadow?: IBoxShadow;\n // Css border radius.\n borderRadius?: number;\n // If the border radius should be in pixels or percent.\n borderUsingPercent?: boolean;\n // Css border color.\n borderColor?: string;\n // Css border width.\n borderWidth?: number;\n // Screen x/y position in pixels.\n x: number;\n y: number;\n // Width/height in pixels.\n width: number;\n height: number;\n // Default is absolute. When fixed the UI panels won't shift the div.\n position?: \"absolute\" | \"fixed\";\n }\n\n // Describes css box shadow.\n export interface IBoxShadow {\n horizontal: number;\n vertical: number;\n blur: number;\n spread: number;\n color: string;\n }\n\n // Describes a content row.\n export interface IRow {\n items: IRowItem[];\n height: number;\n }\n\n // Describes expected content of a row cell.\n export enum EItemType {\n // Default, no special handling.\n Default = \"DEFAULT\",\n // Embed, assume content is html.\n // Make it take over the whole cell instead of padding it and such.\n Embed = \"EMBED\",\n // Content is expected to be an SVG or font-awesome icon.\n Icon = \"ICON\",\n // Content is expected to be an image.\n Image = \"IMAGE\",\n // No content. Only a shape.\n None = \"NONE\"\n }\n\n export interface IRowItem {\n // Text or HTML to display.\n text?: string;\n // Embedded HTML to render when item type is \"EMBED\".\n // Different to text as text will be auto-cleaned.\n embedRaw?: string;\n // Embedded ICON to render when item type is \"ICON\".\n // Icon is expected to be a font-awesome icon.\n icon?: string;\n // Action ot perform when this cell is clicked.\n action?: ItemAction.IItemAction;\n // Background image to use.\n bgImage?: IRowItemImage;\n // Css background color.\n backgroundColor?: string;\n // Css font color.\n fontColor?: string;\n // Css font size.\n fontSize?: number;\n // Css horizontal text alignment.\n textAlign?: string;\n // Css vertical text alignment.\n verticalAlign?: string;\n // Padding in pixels to apply to all 4 sides.\n // @deprecated, use innerPadding instead.\n padding?: number;\n // Css padding to apply.\n innerPadding?: string;\n // Css text shadow.\n textShadow?: ITextShadow;\n // Expected content type. Dictates if special handling is needed.\n contentType?: EItemType;\n // Width of the cell in percent of total row width.\n width?: number;\n }\n\n // Describes a cell's background image.\n export interface IRowItemImage {\n // Client file id of the image.\n FileID?: string;\n // If the markup's entity's default image should be used.\n UseEntityDefault?: boolean;\n }\n\n // Describes css text shadow.\n export interface ITextShadow {\n horizontal: number;\n vertical: number;\n blur: number;\n color: string;\n }\n\n export namespace ItemAction {\n export interface IActionLinkParams {\n // URL to open.\n // URL may be a path to the markup's entity's attribute data.\n // If \"${\" and \"}\" exist in the URL, then it has entity attribute data.\n URL?: string;\n // If the URL should be opened in a new tab.\n openInNewTab?: boolean;\n // If the markup should be closed when the link is opened.\n closeMarkupOnOpen?: boolean;\n }\n \n export interface IActionBookmarkParams {\n // Id of the bookmark to enable.\n // Assumes view id matches currently rendering view.\n bookmarkID?: string;\n }\n\n export interface IActionInfoViewParams {\n\n }\n\n export interface IActionRelationParams {\n\n }\n\n export interface IActionGalleryParams {\n documentType?: EntityAttachmentType.EType | string;\n }\n\n export interface IItemAction {\n type: ItemAction.EType;\n params: IActionLinkParams | IActionInfoViewParams | IActionRelationParams | IActionGalleryParams;\n }\n\n // Types of actions that can be performed when a cell is clicked.\n // Null = \"NONE\".\n export enum EType {\n None = \"NONE\",\n // Open a link specified in params.\n OpenLink = \"LINK\",\n // Open the markup's entity's details panel.\n OpenInfoView = \"INFOVIEW\",\n // Open the markup's entity's gallery popup.\n OpenEntityGallery = \"GALLERY\",\n // Toggle visibility of the markup's entity's relationships.\n ToggleRelationships = \"RELATIONSHIPS\",\n // Dictates this cell can be used to drag the div around.\n Draggable = \"DRAGABBLE\",\n // Closes the markup.\n Close = \"CLOSE\",\n // Opens a bookmark specified in params.\n OpenBookmark = \"BOOKMARK\"\n }\n }\n\n export const DEFAULT: IDiv = {\n contentRows: [\n {\n height: 100,\n items: [\n {\n contentType: EItemType.Default,\n text: \"Type here...\",\n width: 100,\n backgroundColor: \"white\",\n fontColor: \"black\",\n textAlign: \"center\",\n verticalAlign: \"center\",\n fontSize: 15\n }\n ]\n }\n ],\n height: null,\n width: null,\n id: null,\n x: null,\n y: null,\n borderColor: \"black\",\n borderWidth: 1,\n borderUsingPercent: false,\n borderRadius: 8,\n type: EType.Default\n };\n }\n\n export namespace Line {\n // Describes a line end's head.\n export enum ELineHead {\n None = \"NONE\",\n Circle = \"CIRCLE\",\n Arrow = \"ARROW\"\n }\n\n export interface ILine extends IElement {\n pathType: \"LINE\";\n // SVG path string.\n path: string;\n // SVG transform string.\n transform: string;\n // Snaps determine where the ends of the line snap to.\n // This can be 3d positions, screen positions or links to markup DIVs.\n // Calculated positions of the snaps will then alter the path of the line.\n snaps: IAnchor[];\n // Css color of the line.\n brushColor?: string;\n // Css stroke width of the line.\n brushSize?: number;\n // Determines if the line should angle towards its destination instead of being straight.\n angled?: boolean;\n // Backwards compatibility.\n // Use brushHead on anchors instead when available.\n brushHead?: ELineHead;\n // Css color of the brush head.\n outlineColor?: string;\n }\n\n // Dictates where on a DIV an anchor should snap to.\n export enum EAnchorDivSide {\n TopLeft = 0,\n TopRight = 1,\n BottomLeft = 2,\n BottomRight = 3,\n Center = 4,\n CenterLeft = 5,\n CenterRight = 6,\n CenterTop = 7,\n CenterBottom = 8\n }\n\n // Dictates what end of the line an anchor should render on.\n export enum EAnchorLineSide {\n Start = 0,\n End = 1,\n }\n\n export interface IAnchor {\n // Id of markup DIV that this anchor is attached to.\n id?: string;\n // Side of the markup DIV we are attached to.\n snapPosition?: EAnchorDivSide;\n // Side of the line we are attached to.\n side?: EAnchorLineSide;\n // How the anchor should be drawn in the context of a line.\n brushHead?: ELineHead;\n // Css fill color.\n fill?: string;\n // Determines size of anchor's \"ARROW\" head.\n size?: number;\n // Multiplied by \"size\" to determine size of anchor \"CIRCLE\" head.\n outlineFactor?: number;\n // Css stroke color.\n stroke?: string;\n // 3d world position.\n cartesian?: Cartes.ICartes3;\n // 2d screen position.\n screenPos?: Cartes.ICartes2;\n // If the anchor's position should be relative to the markup's entity.\n positionFromEntity?: boolean;\n }\n\n export const DEFAULT: ILine = {\n brushColor: \"rgba(255, 255, 255, 1)\",\n brushSize: 4,\n path: null,\n pathType: \"LINE\",\n transform: null,\n snaps: null,\n id: null\n };\n }\n\n export namespace FreePaint {\n // Describes a free-paint end's head.\n export enum EPaintHead {\n None = \"NONE\",\n Circle = \"CIRCLE\",\n Arrow = \"ARROW\"\n }\n\n export interface IPaint extends IElement {\n pathType: \"PLAIN\";\n // SVG path string.\n path: string;\n // SVG transform string.\n transform: string;\n // Css color of the line.\n brushColor?: string;\n // Css stroke width of the line.\n brushSize?: number;\n // Style of the ends of the free-paint.\n brushHead?: EPaintHead;\n // Css color of the brush head if one is used.\n // Eg arrow or circle heads.\n outlineColor?: string;\n }\n\n export const DEFAULT: IPaint = {\n brushColor: \"rgba(255, 255, 255, 1)\",\n brushSize: 4,\n path: null,\n pathType: \"PLAIN\",\n transform: null,\n id: null\n };\n }\n\n export namespace Polygon {\n // Determines if terrain and 3d models should be overlapped or not.\n export enum EClassificationType {\n // 3d models and terrain are overlapped.\n Both = \"BOTH\",\n // Only terrain is overlapped.\n Terrain = \"TERRAIN\"\n }\n\n export interface IPolygon extends IElement {\n type: \"POLYGON\";\n // 3d positions of the polygon.\n positions: Cartes.ICartes3[];\n // Css color of the polygon.\n color?: string;\n // Css color of the polygon's outline.\n outlineColor?: string;\n // Width of the polygon's outline in pixels.\n outlineWidth?: number;\n // Height of the polygon in meters.\n extrudedHeight?: number;\n // Determines if terrain and 3d models should be overlapped or not.\n classificationType?: EClassificationType;\n // Determines how many times to run Chaikin's algorithm on the polygon.\n // Null or 0 means no smoothing.\n smoothen?: number;\n }\n\n export const DEFAULT: IPolygon = {\n type: \"POLYGON\",\n id: null,\n positions: null,\n color: \"rgba(254, 234, 57, 0.54)\",\n outlineColor: \"rgba(215, 215, 215, 0)\",\n outlineWidth: 2,\n extrudedHeight: 0,\n classificationType: EClassificationType.Both,\n smoothen: 0\n };\n }\n\n export namespace Polyline {\n export interface IPolyline extends IElement {\n type: \"POLYLINE\";\n // 3d positions of the polyline.\n positions: Cartes.ICartes3[];\n // Css color of the polyline.\n color?: string;\n // Width of the polyline in pixels.\n outlineWidth?: number;\n // Determines how many times to run Chaikin's algorithm on the polygon.\n // Null or 0 means no smoothing.\n smoothen?: number;\n }\n\n export const DEFAULT: IPolyline = {\n type: \"POLYLINE\",\n id: null,\n positions: null,\n color: \"rgba(254, 234, 57, 0.54)\",\n outlineWidth: 4,\n smoothen: 0\n };\n }\n\n export namespace Circle {\n export interface ICircle extends IElement {\n type: \"CIRCLE\",\n // 3d position of the circle.\n position: Cartes.ICartes3;\n // Radius of the circle in meters.\n radius: number;\n // Css color of the circle.\n color?: string;\n // Width of the outline in meters.\n outlineWidth?: number;\n // Height of the circle in meters.\n extrudedHeight?: number;\n // Height of the circle's outline in meters.\n outlineExtrusion?: number;\n // Css color of the circle's outline.\n outlineColor?: string;\n }\n\n export const DEFAULT: ICircle = {\n type: \"CIRCLE\",\n id: null,\n position: null,\n radius: 50,\n color: \"rgba(254, 234, 57, 0.54)\"\n };\n }\n\n export namespace Walkscore {\n export interface IWalkscore extends IElement {\n type: \"WALKSCORE\";\n // 3d position of the walkscore.\n cartesian: Cartes.ICartes3;\n // Walkscore value out of 100.\n details: number;\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Uploader } from \"../internal/uploader\";\nimport { ObjectUtils } from \"../util/object-utils\";\n\nexport namespace Plugin {\n export function GetCacheKey(pluginId: string): string {\n return `${Api.ECacheKey.Plugin}${Api.ECacheKey.Id}${pluginId}`;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.Plugin;\n }\n\n export interface IPlugin {\n ID: string,\n Name: string,\n Version: number,\n Icon: string,\n Location: string,\n IsAccessRestricted: boolean,\n IsLoginRequired: boolean,\n \"LastUpdated.Date\": UTC.IUTC,\n \"Created.Date\": UTC.IUTC\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n pluginId: string,\n req?: Api.IReqParams\n }): Promise<{\n plugin: IPlugin\n }> {\n let { api, pluginId, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!pluginId) {\n throw (\"Plugin ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(pluginId), req);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`ui.plugin/${pluginId}`, Api.PrepReqParams(req));\n res({\n plugin: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(pluginId),\n value: prom,\n req: req\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n plugins: IPlugin[]\n }> {\n let { api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), req);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"ui.plugins\", Api.PrepReqParams(req));\n res({\n plugins: data.Items\n })\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: prom,\n req: req\n });\n return prom;\n }\n\n export function GetLoadUrl(params: {\n api?: BruceApi.Api,\n pluginId: string,\n cacheKey?: number | string\n }): {\n indexFileUrl: string\n } {\n let { api, pluginId, cacheKey } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!cacheKey) {\n cacheKey = 0;\n }\n return {\n indexFileUrl: `${api.GetBaseUrl()}ui.plugin/${pluginId}/file/index.jsc?version=${cacheKey}`\n };\n }\n\n export async function Update(params: {\n plugin: IPlugin,\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<void> {\n let { plugin, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!plugin.Name || !plugin.ID) {\n throw(\"Plugin name and ID are required.\");\n }\n if (!plugin.ID) {\n plugin.ID = ObjectUtils.UId();\n }\n await api.POST(`ui.plugin/${plugin.ID}`, plugin, Api.PrepReqParams(req));\n api.Cache.Remove(GetCacheKey(plugin.ID));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Delete(params: {\n pluginId: string,\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<void> {\n let { pluginId, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!pluginId) {\n throw(\"Plugin ID is required.\");\n }\n await api.DELETE(`ui.plugin/${pluginId}`, Api.PrepReqParams(req));\n api.Cache.Remove(GetCacheKey(pluginId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n /**\n * Warning: This will replace the contents of your plugin.\n * Upload only ZIP files.\n * @param params \n */\n export async function Upload(params: {\n pluginId: string,\n api?: BruceApi.Api,\n file: File,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<void> {\n let { pluginId, api, file, onProgress, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!pluginId || !file) {\n throw(\"Plugin ID and file are required.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n await api.UPLOAD(`ui.plugin/${pluginId}/file`, file, req);\n api.Cache.Remove(GetCacheKey(pluginId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n /**\n * Returns a run function to call that'll load a plugin within your provided container element.\n * The run function will return a dispose function to call to remove the plugin.\n * @param params \n * @returns \n */\n export async function GetRunFunction(params: {\n // If container does not have an HTML ID, one will be assigned to it.\n containerId?: string;\n container?: HTMLElement;\n\n // Arbitrary params to pass into the plugin.\n pluginParams?: any;\n \n // Params required to get the plugin load file.\n api?: BruceApi.Api,\n // Either plugin or plugin ID must be supplied.\n pluginId?: string,\n plugin?: Plugin.IPlugin\n }): Promise<{\n // Function to run to initialize the plugin.\n // This function will run eval on a generated script within your container.\n // It will return a dispose function to call.\n run: () => () => void\n }> {\n let { containerId, container, pluginParams, pluginId, plugin, api } = params;\n if (!containerId && container) {\n containerId = container.id;\n if (!containerId) {\n containerId = ObjectUtils.UId();\n container.id = containerId;\n }\n }\n if (!plugin && pluginId) {\n plugin = (await Plugin.Get({\n pluginId,\n api\n })).plugin;\n }\n if (plugin && !pluginId) {\n pluginId = plugin.ID;\n }\n const { indexFileUrl } = GetLoadUrl({\n api,\n pluginId,\n cacheKey: plugin.Version\n });\n\n let fileContent = await fetch(indexFileUrl).then((res) => res.text());\n const start = fileContent.indexOf(\"{\");\n const end = fileContent.lastIndexOf(\"}\");\n fileContent = fileContent.substring(start + 1, end);\n\n const paramsId = ObjectUtils.UId();\n window[paramsId] = pluginParams ? pluginParams : {};\n const disposeId = ObjectUtils.UId();\n const elementId = ObjectUtils.UId();\n\n let script = `\n function run() {\n ${fileContent}\n\n const paramsId = \"${paramsId}\";\n const containerId = \"${containerId}\";\n let container;\n if (containerId) {\n container = document.getElementById(\"${containerId}\");\n }\n\n let pluginHTML = null;\n if (container) {\n pluginHTML = document.createElement(\"div\");\n pluginHTML.id = \"${elementId}\";\n container.appendChild(pluginHTML);\n }\n\n {TEMPLATE_CODE}\n const params = window[\"${paramsId}\"];\n\n window[\"${disposeId}\"] = Run({\n element: pluginHTML,\n container: container,\n pluginParams: params\n });\n }\n run();\n `;\n if (script.includes(\"var template\")) {\n script = script.replace(\"{TEMPLATE_CODE}\", `\n if (pluginHTML && template) {\n pluginHTML.innerHTML = template;\n }\n `);\n }\n else {\n script = script.replace(\"{TEMPLATE_CODE}\", \"\");\n }\n\n return {\n run: () => {\n const eval2 = eval;\n eval2(script);\n\n // Ensure a function is returned, even if the plugin is not configured properly to return one.\n if (!window[disposeId] || typeof window[disposeId] !== \"function\") {\n window[disposeId] = () => {\n console.warn(\"Plugin called to be disposed but no dispose function was found.\");\n };\n }\n const callDispose = window[disposeId];\n return () => {\n if (elementId) {\n const element = document.getElementById(elementId);\n if (element && element.parentElement) {\n element.parentElement.removeChild(element);\n }\n }\n callDispose();\n };\n }\n }\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { EntityAttribute } from \"../entity/entity-attribute\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\n\r\nexport namespace DataSource {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.DataSource + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.DataSource;\r\n }\r\n\r\n export interface ISource {\r\n // Not set for new records.\r\n ID?: number;\r\n Name: string;\r\n URL?: string;\r\n Type?: Type;\r\n MinLatitude?: number;\r\n MaxLatitude?: number;\r\n MinLongitude?: number;\r\n MaxLongitude?: number;\r\n DataSchema?: EntityAttribute.IAttribute;\r\n Parameters?: object;\r\n }\r\n\r\n export enum EType {\r\n IDMapping = \"IDMapping\"\r\n }\r\n export type Type = EType | string;\r\n\r\n export async function Update(params: {\r\n source: ISource,\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }) {\r\n let { source: data, api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n const url = `source` + (data.ID == null ? \"\" : \"/\" + data.ID);\r\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n await api.Cache.Remove(GetCacheKey(<number>data.ID));\r\n await api.Cache.Remove(GetListCacheKey());\r\n\r\n return {\r\n source: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n id: number,\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }) {\r\n let { id, api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n await api.DELETE(`source/${id}`, Api.PrepReqParams(reqParams));\r\n await api.Cache.Remove(GetCacheKey(id));\r\n await api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Get(params: {\r\n id: number,\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }) {\r\n let { id, api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n reqParams = Api.PrepReqParams(reqParams);\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData?.found) {\r\n return cacheData.data;\r\n }\r\n\r\n const prom = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`source/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n source: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }) {\r\n let { api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n reqParams = Api.PrepReqParams(reqParams);\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData?.found) {\r\n return cacheData.data;\r\n }\r\n \r\n const prom = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"sources\", Api.PrepReqParams(reqParams))\r\n res({\r\n sources: data?.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n}","export * from \"./ann-document/ann-document\";\n\nexport * from \"./custom-form/custom-form\";\nexport * from \"./custom-form/custom-form-content\";\n\nexport * from \"./api/abstract-api\";\nexport * from \"./api/api\";\nexport * from \"./api/bruce-api\";\nexport * from \"./api/cam-api\";\nexport * from \"./api/idm-api\";\nexport * from \"./api/global-api\";\nexport * from \"./api/guardian-api\";\nexport * from \"./api/api-getters\";\n\nexport * from \"./calculator/calculator\";\n\nexport * from \"./common/bounds\";\nexport * from \"./common/bruce-event\";\nexport * from \"./common/cache\";\nexport * from \"./common/camera\";\nexport * from \"./common/cartes\";\nexport * from \"./common/carto\";\nexport * from \"./common/color\";\nexport * from \"./common/delay-queue\";\nexport * from \"./common/dictionary\";\nexport * from \"./common/geometry\";\nexport * from \"./common/transform\";\nexport * from \"./common/utc\";\nexport * from \"./common/bruce-variable\";\nexport * from \"./common/lru-cache\";\nexport * from \"./common/section\";\n\nexport * from \"./entity/entity-attachment-type\";\nexport * from \"./entity/entity-attachment\";\nexport * from \"./entity/entity-comment\";\nexport * from \"./entity/entity-link\";\nexport * from \"./entity/entity-lod\";\nexport * from \"./entity/entity-lod-category\";\nexport * from \"./entity/entity-relation-type\";\nexport * from \"./entity/entity-relation\";\nexport * from \"./entity/entity-source\";\nexport * from \"./entity/entity-tag\";\nexport * from \"./entity/entity-type\";\nexport * from \"./entity/entity\";\nexport * from \"./entity/getters/view-monitor\";\nexport * from \"./entity/getters/entity-globe\";\nexport * from \"./entity/getters/entity-filter-getter\";\nexport * from \"./entity/getters/batched-data-getter\";\nexport * from \"./entity/entity-coords\";\nexport * from \"./entity/entity-type-visual-settings\";\nexport * from \"./entity/entity-attribute\";\n\nexport * from \"./client-file/client-file\";\n\nexport * from \"./program-key/program-key\";\n\nexport * from \"./project/zoom-control\";\nexport * from \"./project/menu-item\";\nexport * from \"./project/project-view-bookmark\";\nexport * from \"./project/project-view\";\nexport * from \"./project/project-view-legacy-tile\";\nexport * from \"./project/project-view-tile\";\n\nexport * from \"./server/pending-action\";\nexport * from \"./server/message-broker\";\nexport * from \"./server/hosting-location\";\n\nexport * from \"./style/style\";\n\nexport * from \"./tileset/tileset\";\n\nexport * from \"./user/permission\";\nexport * from \"./user/session\";\nexport * from \"./user/user-group\";\nexport * from \"./user/user\";\n\nexport * from \"./account/account\";\nexport * from \"./account/account-settings\";\nexport * from \"./account/account-invite\";\n\nexport * from \"./util/encrypt-utils\";\nexport * from \"./util/math-utils\";\nexport * from \"./util/object-utils\";\nexport * from \"./util/path-utils\";\nexport * from \"./util/url-utils\";\n\nexport * from \"./data-lab/data-lab\";\n\nexport * from \"./import/import-cad\";\nexport * from \"./import/import-csv\";\nexport * from \"./import/import-json\";\nexport * from \"./import/import-kml\";\nexport * from \"./import/imported-file\";\n\nexport * from \"./markup/markup\";\nexport * from \"./internal/uploader\";\nexport * from \"./plugin/plugin\";\nexport * from \"./environment\";\nexport * from \"./data-source/data-source\";\n\nexport const VERSION = \"2.8.0\";"],"names":["Api","require","global","MessageBroker","A","GuardianApi","ENVIRONMENT","Account","HostingLocation","BruceApi","CamApi","GlobalApi","IdmApi","AnnDocument","CustomForm","CustomFormContent","Color","ObjectUtils","PathUtils","Entity","BruceVariable","Calculator","Geometry","Bounds","Camera","Cartes","Carto","UTC","EntityAttachmentType","EntityAttachment","EntityComment","EntityLink","EntityLod","EntityLodCategory","EntityRelationType","EntityRelation","EntitySource","EntityTag","EntityType","EntityGlobe","EntityFilterGetter","MAX_AREA_IN_DEGREES","BatchedDataGetter","MathUtils","EntityCoords","EntityTypeVisualSettings","EntityAttribute","Uploader","ClientFile","ProgramKey","ZoomControl","Tileset","MenuItem","ProjectViewBookmark","ProjectView","ProjectViewLegacyTile","ProjectViewTile","PendingAction","Style","Permission","Session","UserGroup","User","AccountInvite","EncryptUtils","UrlUtils","DataLab","ImportCad","ImportCsv","ImportJson","ImportKml","ImportedFile","Markup","Plugin","DataSource","VERSION"],"mappings":"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"}
1
+ {"version":3,"file":"bruce-models.umd.js","sources":["../src/api/api.ts","../node_modules/localforage/dist/localforage.js","../src/common/cache.ts","../src/api/abstract-api.ts","../src/server/message-broker.ts","../src/api/guardian-api.ts","../src/account/account.ts","../src/server/hosting-location.ts","../src/api/bruce-api.ts","../src/api/cam-api.ts","../src/api/global-api.ts","../src/api/idm-api.ts","../src/api/api-getters.ts","../src/environment.ts","../src/ann-document/ann-document.ts","../src/custom-form/custom-form.ts","../src/custom-form/custom-form-content.ts","../src/common/color.ts","../src/util/object-utils.ts","../src/util/path-utils.ts","../src/entity/entity.ts","../src/common/bruce-variable.ts","../src/calculator/calculator.ts","../src/common/geometry.ts","../src/common/bounds.ts","../src/common/bruce-event.ts","../src/common/camera.ts","../src/common/cartes.ts","../src/common/carto.ts","../src/common/delay-queue.ts","../src/common/utc.ts","../src/common/lru-cache.ts","../src/entity/entity-attachment-type.ts","../src/entity/entity-attachment.ts","../src/entity/entity-comment.ts","../src/entity/entity-link.ts","../src/entity/entity-lod.ts","../src/entity/entity-lod-category.ts","../src/entity/entity-relation-type.ts","../src/entity/entity-relation.ts","../src/entity/entity-source.ts","../src/entity/entity-tag.ts","../src/entity/entity-type.ts","../src/entity/getters/entity-globe.ts","../src/entity/getters/entity-filter-getter.ts","../src/entity/getters/batched-data-getter.ts","../src/util/math-utils.ts","../src/entity/entity-coords.ts","../src/entity/entity-type-visual-settings.ts","../src/entity/entity-attribute.ts","../src/internal/uploader.ts","../src/client-file/client-file.ts","../src/program-key/program-key.ts","../src/project/zoom-control.ts","../src/tileset/tileset.ts","../src/project/menu-item.ts","../src/project/project-view-bookmark.ts","../src/project/project-view.ts","../src/project/project-view-legacy-tile.ts","../src/project/project-view-tile.ts","../src/server/pending-action.ts","../src/style/style.ts","../src/user/permission.ts","../src/user/session.ts","../src/user/user-group.ts","../src/user/user.ts","../src/account/account-invite.ts","../src/util/encrypt-utils.ts","../src/util/url-utils.ts","../src/data-lab/data-lab.ts","../src/import/import-cad.ts","../src/import/import-csv.ts","../src/import/import-json.ts","../src/import/import-kml.ts","../src/import/imported-file.ts","../src/markup/markup.ts","../src/plugin/plugin.ts","../src/data-source/data-source.ts","../src/bruce-models.ts"],"sourcesContent":["import { IDictionary } from \"../common/dictionary\";\n\n/**\n * Contains generic descriptions used for Bruce requests.\n */\nexport namespace Api {\n export enum ECacheKey {\n Id = \":\",\n Entity = \"entity\",\n EntityType = \"entitytype\",\n ProjectView = \"projectview\",\n ProjectViewBookmark = \"pvbookmark\",\n Tileset = \"tileset\",\n ClientFile = \"clientfile\",\n Session = \"session\",\n PendingAction = \"pendingaction\",\n EntitySource = \"entitysource\",\n DataSource = \"datasource\",\n ProgramKey = \"programkey\",\n EntityCoords = \"entitycoords\",\n Tag = \"tag\",\n Attachment = \"attachment\",\n Comment = \"comment\",\n Link = \"link\",\n AnnDocument = \"anndocument\",\n AttachmentType = \"attachmenttype\",\n Relation = \"relation\",\n RelationType = \"relationtype\",\n Lod = \"lod\",\n LodCategory = \"lodcategory\",\n Style = \"style\",\n PublishTileset = \"publishtileset\",\n TilesetAccess = \"tilesetaccess\",\n User = \"user\",\n UserSettings = \"usersettings\",\n UserEmail = \"useremail\",\n AccessToken = \"accesstoken\",\n UserGroup = \"usergroup\",\n Account = \"account\",\n DatabaseRegion = \"databaseregion\",\n CustomForm = \"customform\",\n ImportedFile = \"importedfile\",\n Plugin = \"plugin\"\n }\n export const DEFAULT_CACHE_DURATION = 60 * 1000; // 1 minute.\n export const TEMPLATE_ACCOUNT_ID = \"template\";\n export const ACCESS_TOKEN_HEADER = \"X-Access-Token\";\n\n /**\n * Possible environments we host Bruce apps on.\n * When these are matched, they should be case-insensitive.\n */\n export enum EEnv {\n DEV = \"DEV\",\n STG = \"STG\",\n UAT = \"UAT\",\n PROD = \"PROD\"\n }\n export type Env = EEnv | string;\n // False = cache is enabled by default for req-params.\n export let DEFAULT_NO_CACHE = false;\n\n /**\n * Prepares a string to be included in a url.\n * @param str\n * @returns\n */\n export function Encode(str: string): string {\n return encodeURIComponent(str.replace(/\\+/g, \"%2B\").replace(/\\./g, \"%2E\"));\n }\n\n export interface IList<T> {\n Items: T[];\n TotalCount?: number;\n }\n\n export enum ESortOrder {\n None = 0,\n Asc = 1,\n Desc = -1\n }\n\n export enum EEncoding {\n UTF8 = \"UTF-8\",\n UTF16 = \"UTF-16BE\"\n }\n\n export interface IReqParams {\n // Default is Api.DEFAULT_CACHE_STATE.\n // If true then local cache check will be skipped.\n noCache?: boolean;\n // Request headers.\n headers?: IDictionary<string>;\n }\n\n export interface IRes {\n\n }\n\n /**\n * Prepares default settings for a request to Bruce Api.\n * Our requests WRONGLY have utf-16 for 95% of them. Please be wary of that.\n * @param base\n * @returns\n */\n export function PrepReqParams(base?: Api.IReqParams | IUploadReqParams): IReqParams | IUploadReqParams {\n base = {\n ...base\n };\n return base;\n }\n\n export interface IUploadReqParams extends IReqParams {\n onProgress?: (e: ProgressEvent) => void;\n formData?: IDictionary<string> | FormData;\n }\n}","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","import localforage from \"localforage\";\n\ntype Key = string | number;\ntype Persistence = \"memory\" | \"storage\";\nconst DEFAULT_DURATION = 60 * 1000; // 1 minute.\nconst VERSION = 4;\n\ninterface IRecord {\n // The id of the item.\n id: string;\n // The data of the item.\n data: any;\n // The time when the item was added to the cache.\n expires: number;\n}\n\nexport class CacheControl<T> {\n private storage: LocalForage;\n private _storageKeys: string[] = null;\n private async getStorageKeys() {\n if (this._storageKeys == null) {\n this._storageKeys = await this.storage.keys();\n }\n return this._storageKeys;\n }\n\n private memory: Map<Key, IRecord> = new Map<Key, IRecord>();\n public Disabled: boolean = false;\n\n constructor(id: string) {\n if (!id) {\n id = \"default\";\n }\n this.storage = localforage.createInstance({\n name: `v${VERSION}_${id}`,\n });\n }\n\n /**\n * Sets item to cache.\n * @param id\n * @param data\n * @param duration\n */\n public async Set(params: {\n id: string,\n data: any,\n persistence?: Persistence,\n // Optional, default is 1 minute.\n // Value is in milliseconds and if it's set to 0 or lower then it'll be set to 1 minute.\n duration?: number\n }): Promise<void> {\n if (this.Disabled) {\n return;\n }\n let { id, data, persistence, duration } = params;\n if (!duration || duration < 0) {\n duration = DEFAULT_DURATION;\n }\n id = String(id);\n this._storageKeys = null;\n\n const expires = Date.now() + duration;\n const record: IRecord = {\n id,\n data,\n expires\n };\n\n if (persistence == \"storage\") {\n let putIntoStorage = true;\n // Cannot store promises, so will need to wait for them to resolve.\n if (data instanceof Promise) {\n // Store in memory until resolved, that way we can return the data if requested again.\n this.memory.set(id, record);\n try {\n data = await data;\n record.data = data;\n }\n catch (e) {\n // If it failed then we keep it in memory so that requesting it will retain the promise exception.\n putIntoStorage = false;\n }\n }\n if (putIntoStorage) {\n await this.storage.setItem(id, record);\n if (this.memory.has(id)) {\n this.memory.delete(id);\n }\n }\n }\n else {\n this.memory.set(id, record);\n await this.storage.removeItem(id);\n }\n }\n\n /**\n * Returns the item with the given id.\n * @param id\n * @returns\n */\n public async Get(id: Key): Promise<{\n data: T,\n found: boolean\n }> {\n if (this.Disabled) {\n return null;\n }\n id = String(id);\n\n // Prioritize memory over storage because it's faster to access.\n let record = this.memory.get(id);\n if (!record) {\n record = await this.storage.getItem(id);\n }\n if (!record) {\n return {\n data: null,\n found: false\n };\n }\n if (record.expires < Date.now()) {\n if (this.memory.has(id)) {\n this.memory.delete(id);\n }\n await this.storage.removeItem(id);\n return {\n data: null,\n found: false\n };\n }\n return {\n data: record.data,\n found: true\n };\n }\n\n /**\n * Removes all items from the cache.\n */\n public async Clear(): Promise<void> {\n this.memory.clear();\n await this.storage.clear();\n this._storageKeys = null;\n }\n\n /**\n * Removes the item with the given id.\n * @param id\n */\n public async Remove(id: Key): Promise<void> {\n id = String(id);\n this.memory.delete(id);\n await this.storage.removeItem(id);\n this._storageKeys = null;\n }\n\n /**\n * Removes all items that match the callback.\n * If callback returns true then the item is removed.\n * @param callback\n */\n public async RemoveBy(callback: (key: Key) => boolean): Promise<void> {\n const storageKeys = await this.getStorageKeys();\n for (const key of storageKeys) {\n if (callback(key)) {\n await this.storage.removeItem(key);\n }\n }\n const memoryKeys = Array.from(this.memory.keys());\n for (const key of memoryKeys) {\n if (callback(key)) {\n this.memory.delete(key);\n }\n }\n this._storageKeys = null;\n }\n\n /**\n * Removes all items that start with the given text.\n * @param text\n */\n public async RemoveByStartsWith(text: Key): Promise<void> {\n await this.RemoveBy(key => String(key).startsWith(String(text)));\n }\n\n /**\n * Removes all items that contain the given text.\n * @param text\n */\n public async RemoveByContains(text: Key): Promise<void> {\n await this.RemoveBy(key => String(key).includes(String(text)));\n }\n}","import { CacheControl } from \"../common/cache\";\nimport { Api } from \"./api\";\n\n// TODO: Currently checks for CSV vs json specifically,\n// Need to see if our api is generally good at setting content-type headers.\n// Make it less specific to CSV.\nasync function parseResult(data: Response): Promise<any> {\n if (data.status !== 200) {\n const error = await data.json();\n throw(error);\n }\n\n let type = data.headers.get(\"Content-Type\")?.trim().toLowerCase();\n let encoding = type?.split(\";\").find((x) => x.startsWith(\"charset=\"))?.split(\"=\")[1].toLowerCase();\n if (encoding === \"utf-16\") {\n encoding = Api.EEncoding.UTF16;\n }\n\n const text = await (encoding && encoding !== \"utf-8\" \n ? new TextDecoder(encoding).decode(await data.arrayBuffer()) \n : data.text());\n\n if (!text?.trim()) {\n return null;\n }\n return type?.includes(\"text/csv\") ? text : JSON.parse(text);\n}\n\n/**\n * This is a base class for communication with an arbitrary Bruce Api.\n */\nexport class AbstractApi {\n private ssidHeader: string;\n private ssid: string = \"\";\n protected baseUrl: string = \"\";\n public Cache: CacheControl<any>;\n\n constructor(params: {\n ssidHeader?: string,\n cacheId?: string\n }) {\n this.ssidHeader = params?.ssidHeader;\n this.Cache = new CacheControl<any>(params?.cacheId);\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GetCacheItem(key: string, reqParams?: Api.IReqParams) {\n let noCache = reqParams?.noCache;\n if (noCache == null) {\n noCache = Api.DEFAULT_NO_CACHE;\n }\n if (noCache) {\n return null;\n }\n return this.Cache.Get(key);\n }\n\n public async SetCacheItem(params: {\n key: string,\n value: any,\n duration?: number,\n req?: Api.IReqParams\n }) {\n let {key, value, duration, req} = params;\n let noCache = req?.noCache;\n if (noCache == null) {\n noCache = Api.DEFAULT_NO_CACHE;\n }\n if (noCache) {\n return;\n }\n if (isNaN(duration)) {\n duration = Api.DEFAULT_CACHE_DURATION;\n }\n await this.Cache.Set({\n id: key,\n data: value,\n duration,\n persistence: \"memory\"\n });\n }\n\n public GetSessionId(): string {\n return this.ssid;\n }\n\n public SetSessionId(value: string): void {\n this.ssid = value;\n }\n\n public GetSessionHeader(): string {\n return this.ssidHeader;\n }\n\n public SetSessionHeader(value: string): void {\n this.ssidHeader = value;\n }\n\n public async get(url: string, params?: Api.IReqParams): Promise<any> {\n if (!params) {\n params = {};\n }\n params.headers = params.headers || {};\n params.headers = {\n \"Content-Type\": \"application/json;\",\n ...params.headers\n };\n if (this.ssidHeader && this.ssid) {\n params.headers[this.ssidHeader] = this.ssid;\n }\n const res = await fetch(url, {\n headers: params.headers\n });\n return parseResult(res);\n }\n\n public async delete(url: string, params?: Api.IReqParams): Promise<any> {\n if (!params) {\n params = {};\n }\n params.headers = params.headers || {};\n params.headers = {\n \"Content-Type\": \"application/json;\",\n ...params.headers\n };\n if (this.ssidHeader && this.ssid) {\n params.headers[this.ssidHeader] = this.ssid;\n }\n const res = await fetch(url, {\n headers: params.headers,\n method: \"DELETE\"\n });\n return parseResult(res);\n }\n\n public async post(url: string, data: any, params?: Api.IReqParams): Promise<any> {\n if (!params) {\n params = {};\n }\n params.headers = params.headers || {};\n params.headers = {\n \"Content-Type\": \"application/json;\",\n ...params.headers\n };\n if (this.ssidHeader && this.ssid) {\n params.headers[this.ssidHeader] = this.ssid;\n }\n if (!data) {\n data = {};\n }\n if (typeof data != \"string\") {\n data = JSON.stringify(data);\n }\n const res = await fetch(url, {\n headers: params.headers,\n method: \"POST\",\n body: data\n });\n return parseResult(res);\n }\n\n public async put(url: string, data: any, params?: Api.IReqParams): Promise<any> {\n if (!params) {\n params = {};\n }\n params.headers = params.headers || {};\n params.headers = {\n \"Content-Type\": \"application/json;\",\n ...params.headers\n };\n if (this.ssidHeader && this.ssid) {\n params.headers[this.ssidHeader] = this.ssid;\n }\n if (!data) {\n data = {};\n }\n if (typeof data != \"string\") {\n data = JSON.stringify(data);\n }\n const res = await fetch(url, {\n headers: params.headers,\n method: \"PUT\",\n body: data\n });\n return parseResult(res);\n }\n\n public async upload(url: string, blob: Blob, params?: Api.IUploadReqParams): Promise<any> {\n return new Promise((res, rej) => {\n try {\n let xhr = new XMLHttpRequest();\n const headers = <any>params?.headers;\n if (headers) {\n const headerKeys = Object.keys(headers);\n for (let i = 0; i < headerKeys.length; i++) {\n const key = headerKeys[i];\n const value = headers[key];\n xhr.setRequestHeader(key, value);\n }\n }\n if (params?.onProgress) {\n if (xhr.upload) {\n xhr.upload.onprogress = params?.onProgress;\n }\n else {\n xhr.addEventListener(\"progress\", params?.onProgress);\n }\n }\n xhr.onreadystatechange = (e) => {\n if (xhr.readyState == 4) {\n if (xhr.status >= 400) {\n rej(e);\n }\n else {\n try {\n res(JSON.parse(xhr.responseText));\n }\n catch (e) {\n console.error(e, xhr.responseText);\n res(xhr.responseText);\n }\n }\n }\n };\n xhr.open(\"POST\", url, true);\n if (this.ssidHeader && this.ssid) {\n xhr.setRequestHeader(this.ssidHeader, this.ssid);\n }\n let formData;\n if (params?.formData instanceof FormData) {\n formData = params?.formData;\n }\n else {\n formData = new FormData();\n if (params?.formData) {\n for (const key in params.formData) {\n formData.append(key, params.formData[key]);\n }\n }\n }\n formData.append(\"file\", blob);\n xhr.send(formData);\n }\n catch (e) {\n rej(e);\n }\n });\n }\n}","import { Api } from \"../api/api\";\n\nexport namespace MessageBroker {\n export enum EAction {\n // Subscribes a client to topic messages on a server side.\n SUBSCRIBE = \"subscribe\",\n // Subscribes a client to a topic without notifying other clients.\n SUBSCRIBE_SHADOW = \"subscribeShadow\",\n // Unsubscribes clients from topic messages on a server side\n UNSUBSCRIBE = \"unsubscribe\",\n // Sends a message to all topic subscribers.\n BROADCAST = \"broadcast\",\n // Requests topic subscribers without subscribing.\n GET_TOPIC_SUBSCRIBERS = \"getTopicSubscribers\"\n }\n\n export type SubscribeType = EAction.SUBSCRIBE | EAction.SUBSCRIBE_SHADOW;\n\n export interface IMessageBase {\n topic: string;\n event?: string;\n data?: any;\n }\n\n export interface IMessage extends IMessageBase {\n // Timestamp of message.\n time?: number;\n // User id of message sender.\n user?: string;\n action: EAction;\n }\n\n export interface IBroker {\n /**\n * Add a subscriber to a topic.\n * @param topic \n * @param callback \n * @param action \n */\n Subscribe: (topic: string, callback: (msg: IMessage) => void, type?: SubscribeType) => void,\n /**\n * Remove a subscriber from a topic.\n * @param topic \n * @param callback \n */\n Unsubscribe: (topic: string, callback: (msg: IMessage) => void) => void,\n /**\n * Send message to server.\n * @param base \n * @returns \n */\n SendMessage: (base: IMessageBase | IMessage) => void;\n SetUserId: (userId: string) => void;\n IsConnected: boolean;\n }\n\n /**\n * Communicates with a server message broker.\n */\n export class WebSocketBroker implements IBroker {\n private subscriptions = new Map<string, ((msg: IMessage) => void)[]>();\n private ws: WebSocket;\n private reconnects: number = 0;\n private maxReconnects: number = 5;\n private userId: string;\n private uri: string;\n private env: Api.Env;\n\n public constructor(uri: string, env?: Api.Env) {\n this.uri = uri;\n this.env = env ? env : Api.EEnv.PROD;\n this.connect();\n }\n\n public get IsConnected(): boolean {\n return this.ws.readyState === WebSocket.OPEN;\n }\n\n public SetUserId(userId: string): void {\n this.userId = this.userId ? this.userId : userId;\n }\n\n private connect() {\n try {\n if (!WebSocket) {\n throw new Error(\"WebSocket is not supported by this browser\");\n }\n this.ws = new WebSocket(this.formatApiUri(this.uri));\n this.ws.onopen = this.onOpen.bind(this);\n this.ws.onmessage = this.onMessage.bind(this);\n this.ws.onerror = this.onError.bind(this);\n this.ws.onclose = this.onClose.bind(this);\n } \n catch (e) {\n console.error(e);\n }\n }\n\n private formatApiUri(uri: string): string {\n const ws = document.location.protocol === \"https:\" ? \"wss\" : \"ws\";\n return uri.replace(/^(https|http)/, ws) + \"websocket\";\n }\n\n private onOpen(ev: any): void {\n if (this.env === Api.EEnv.DEV) {\n console.log(\"MessageBroker connection opened: \", ev);\n }\n }\n\n private onClose(ev: any): void {\n if (this.env === Api.EEnv.DEV) {\n console.log(\"MessageBroker connection closed, trying to reconnect: \", ev);\n }\n if (this.reconnects < this.maxReconnects) {\n this.reconnects += 1;\n setTimeout(() => this.connect(), 5000 * this.reconnects);\n }\n }\n\n private onMessage(ev: any): void {\n const data: IMessage = JSON.parse(ev.data);\n this.subscriptions.get(data.topic)?.forEach(cb => cb(data));\n }\n\n private onError(ev: any): void {\n console.error(\"MessageBroker connection error: \", ev);\n }\n\n private addSubscriber(topic: string, callback: (msg: IMessage) => void): void {\n const subscribers = this.subscriptions.get(topic) || [];\n if (subscribers.includes(callback)) {\n return;\n }\n subscribers.push(callback);\n this.subscriptions.set(topic, subscribers);\n }\n\n /**\n * Send message to server.\n * @param base \n * @returns \n */\n public SendMessage(base: IMessageBase | IMessage): void {\n if (this.ws.readyState !== WebSocket.OPEN) {\n return;\n }\n try {\n const msg = base as IMessage;\n if (!msg.event) {\n msg.event = EAction.BROADCAST;\n }\n let message = base.data ? base.data : {};\n if (typeof message == \"object\") {\n message = JSON.stringify(message);\n }\n msg.data = message;\n\n const outgoingMessage: IMessage = { ...msg, user: this.userId, time: Date.now() };\n this.ws.send(JSON.stringify(outgoingMessage));\n } \n catch (e) {\n console.warn(e);\n }\n }\n\n /**\n * Add a subscriber to a topic.\n * @param topic \n * @param callback \n * @param action \n */\n public Subscribe(topic: string, callback: (msg: IMessage) => void, action?: SubscribeType): void {\n if (!action) {\n action = EAction.SUBSCRIBE;\n }\n this.addSubscriber(topic, callback);\n this.SendMessage({ topic, action });\n }\n\n /**\n * Remove a subscriber from a topic.\n * @param topic \n * @param callback \n */\n public Unsubscribe(topic: string, callback: (msg: IMessage) => void): void {\n const subscribers = this.subscriptions.get(topic) || [];\n this.subscriptions.set(topic, subscribers.filter(fn => fn != callback));\n this.SendMessage({ topic, action: EAction.UNSUBSCRIBE });\n }\n\n public RequestTopicUsers(topic: string, callback: (msg: IMessage) => void): void {\n this.addSubscriber(topic, callback);\n this.SendMessage({ topic, event: EAction.GET_TOPIC_SUBSCRIBERS });\n }\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\n\n/**\n * This is the request handler for Cam/Idm Api,\n * it should be passed to any method that wants to communicate with this particular api.\n */\nexport namespace GuardianApi {\n export interface IGetter {\n // Default settings the getter's app is running on.\n env: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (env?: A.EEnv) => GuardianApi.Api;\n }\n\n export class Api extends AbstractApi {\n private env: A.Env;\n\n constructor(params: {\n env?: A.Env\n }) {\n super({\n ssidHeader: \"x-sessionid\",\n cacheId: `GUARDIAN_API_${params?.env}_`\n });\n this.env = params?.env ? params.env : A.EEnv.PROD;\n this.setBaseUrl();\n }\n\n private setBaseUrl(): void {\n let url = \"https://guardian.nextspace\";\n const env = this.env.toUpperCase();\n switch (env) {\n case A.EEnv.DEV:\n url += \"-dev.net/\";\n break;\n case A.EEnv.STG:\n url += \"-stg.net/\";\n break;\n case A.EEnv.UAT:\n url += \"-uat.net/\";\n break;\n case A.EEnv.PROD:\n url += \".host/\";\n break;\n default:\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n this.baseUrl = url;\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return this.get(this.baseUrl + url, params);\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return this.delete(this.baseUrl + url, params);\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return this.post(this.baseUrl + url, data, params);\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return this.upload(this.baseUrl + url, blob, params);\n }\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { CamApi } from \"../api/cam-api\";\r\nimport { GuardianApi } from \"../api/guardian-api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\nimport { AccountSettings } from \"./account-settings\";\r\n\r\nconst ACCOUNT_EXCLUSIONS = [\"hyperportal\", \"hypeportal\", \"bviewer\"];\r\n\r\n/**\r\n * Describes the \"Client Account\" concept within Bruce.\r\n * A client account is a database instance that holds one or many users.\r\n */\r\nexport namespace Account {\r\n export function GetCacheKey(accountId: string, appSettingsId?: string): string {\r\n if (appSettingsId) {\r\n return Api.ECacheKey.Account + Api.ECacheKey.Id + accountId + Api.ECacheKey + appSettingsId;\r\n }\r\n return Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export function GetListCacheKey(ssid: string): string {\r\n return Api.ECacheKey.Account + Api.ECacheKey.Session + Api.ECacheKey.Id + ssid;\r\n }\r\n\r\n export function GetDbRegionListCacheKey() {\r\n return Api.ECacheKey.DatabaseRegion;\r\n }\r\n\r\n export enum EAppId {\r\n BruceApi = \"BruceAPI\",\r\n Navigator = \"Navigator\",\r\n }\r\n\r\n export type AppId = EAppId | string;\r\n\r\n export enum EStarterContent {\r\n Default = \"default\",\r\n None = \"none\"\r\n }\r\n\r\n export interface IAccount {\r\n ID?: string;\r\n Name?: string;\r\n \"ClientAccount.ID\"?: string;\r\n \"Application.ID\"?: string;\r\n \"BruceAPI\"?: string;\r\n \"Settings\"?: any;\r\n \"OwnerUser.ID\"?: string;\r\n // This will depend on what \"appSettingsId\" you request for.\r\n \"Application.Settings\"?: AccountSettings.Settings;\r\n }\r\n\r\n export async function Get(params: {\r\n api?: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n account: IAccount\r\n }> {\r\n let { api, accountId: id, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const cache = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const req = await api.GET(`account/${id}`, reqParams);\r\n const resData = {\r\n account: req\r\n };\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: resData,\r\n req: reqParams\r\n });\r\n return resData;\r\n }\r\n\r\n export async function GetRelatedList(params: {\r\n api?: IdmApi.Api | GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n accounts: IAccount[]\r\n }> {\r\n let { api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const cache = await api.GetCacheItem(GetListCacheKey(api.GetSessionId()), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const req = api.GET(\"user/relatedClientAccounts\", reqParams);\r\n const prom: Promise<{ accounts: IAccount[] }> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n const items = data.Items.filter((x: IAccount) => !ACCOUNT_EXCLUSIONS.includes(<string>x.ID))\r\n res({\r\n accounts: items\r\n });\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(api.GetSessionId()),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetAppSettings(params: {\r\n api?: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n appId: AppId,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: AccountSettings.Settings\r\n }> {\r\n let { api, accountId: id, appId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const cache = await api.GetCacheItem(GetCacheKey(id, appId), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const req = await api.GET(`account/${id}?ApplicationID=${appId}`, reqParams);\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n const settings = data?.[ \"Application.Settings\" ] ?? {};\r\n res({\r\n settings: settings\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id, appId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * WARNING: Do not update API settings without knowing what you're doing.\r\n * @param params\r\n * @returns\r\n */\r\n export async function UpdateAppSettings(params: {\r\n api?: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n appId: string,\r\n settings: AccountSettings.Settings,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: AccountSettings.Settings\r\n }> {\r\n let { api, accountId: id, appId, settings: data, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const res = await api.POST(`account/${id}/applicationSettings/${appId}`, data, reqParams);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Account + Api.ECacheKey.Id + id);\r\n return {\r\n settings: res\r\n };\r\n }\r\n\r\n /**\r\n * Creates a new Bruce account using given details.\r\n * @param params\r\n * @returns\r\n */\r\n export async function Create(params: {\r\n api?: BruceApi.Api,\r\n accountId: string,\r\n name: string,\r\n hostingLocationKey: string,\r\n starterContent?: EStarterContent,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n account: IAccount\r\n }> {\r\n let { api, accountId: id, name, hostingLocationKey, starterContent, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!id || !name || !hostingLocationKey) {\r\n throw new Error(\"Id, Name and hostingLocationKey are required.\");\r\n }\r\n if (!starterContent) {\r\n starterContent = EStarterContent.None;\r\n }\r\n const reqData = {\r\n \"Name\": name,\r\n \"HostingLocation.Key\": hostingLocationKey,\r\n \"StarterContent\": starterContent\r\n }\r\n const res = await api.POST(`clientAccount/${id}`, reqData, Api.PrepReqParams(reqParams));\r\n const resData = {\r\n account: res\r\n };\r\n api.Cache.Remove(GetListCacheKey(api.GetSessionId()));\r\n return resData;\r\n }\r\n}","import { Account } from \"../account/account\";\nimport { AccountSettings } from \"../account/account-settings\";\nimport { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * A hosting location is a record for a possible bruce-api server configuration.\n * A hosting location will have one or many database servers as well, this is an additional setting.\n */\nexport namespace HostingLocation {\n export interface ILocation {\n // Internal ID.\n ID: number;\n // External ID.\n Key: string;\n // Indicates if creation of a new bruce account is allowed in this region.\n // This should dictate if the record is visible in UI dropdowns as well for non-super-admins.\n IsEnabledForNewAccounts: boolean;\n DisplayName?: string;\n Description?: string;\n // Eg: \"us-west-1\".\n AWSRegion?: string;\n // Eg: \"Singapore\".\n Country?: string;\n // Eg: \"Vultr\".\n Hoster?: string;\n // Eg: \"San Francisco\".\n City?: string;\n // URL template to the corresponding API instance.\n // Eg: \"https://<ACCOUNTID>.api.nextspace-us.host/\".\n BruceAPIURL?: string;\n // Comma separated list of Api.EEnv.\n Environment?: string;\n // Arbitrary settings for the particular location.\n // For example this may include CDN template URLs.\n Settings?: any;\n }\n\n /**\n * @Warning: This will not return the Settings property.\n * @param params\n * @returns\n */\n export async function GetList(params: {\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n locations: ILocation[]\n }> {\n let { api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const res = await api.GET(\"hostinglocations\", Api.PrepReqParams(req));\n return {\n locations: res.Items\n };\n }\n\n export async function GetById(params: {\n id: number,\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n location: ILocation\n }> {\n let { id, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!id) {\n throw(\"Invalid id\");\n }\n const res = await api.GET(`hostinglocation/id/${id}`, Api.PrepReqParams(req));\n return {\n location: res\n };\n }\n\n export async function GetByKey(params: {\n key: string,\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n location: ILocation\n }> {\n let { key, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!key) {\n throw(\"Invalid key\");\n }\n const res = await api.GET(`hostinglocation/key/${key}`, Api.PrepReqParams(req));\n return {\n location: res\n };\n }\n\n /**\n * Returns hostingLocationKey from given db url.\n * Some older accounts don't have this set, so we need to guess it.\n * @param params\n * @returns\n */\n export function GuessKey(params: {\n // Database connection string.\n DBServer?: string\n }) {\n const { DBServer: databaseUrl } = params;\n if (databaseUrl.includes(\"hyperfarm-prod-instance-1\")) {\n return \"HYPERFARM\";\n }\n if (databaseUrl.includes(\"prod-syd1.nextspace.host\")) {\n return \"AU-VULTR-FIRST\";\n }\n else if (databaseUrl.includes(\"prod-nyc1.nextspace.host\")) {\n return \"US-VULTR-FIRST\";\n }\n else if (databaseUrl.includes(\"prod-ams1.nextspace.host\")) {\n return \"EU-VULTR-FIRST\";\n }\n else if (databaseUrl.includes(\"prod-sing1.nextspace.host\")) {\n return \"SE-VULTR-FIRST\";\n }\n else if (databaseUrl.includes(\"dev-first\")) {\n return \"DEV-FIRST\";\n }\n else if (databaseUrl.includes(\".ap-southeast-1.\")) {\n return \"SE\";\n }\n else if (databaseUrl.includes(\".us-west-1.\")) {\n return \"US\";\n }\n else if (databaseUrl.includes(\".eu-west-3.\")) {\n return \"EU\";\n }\n else if (databaseUrl.includes(\"bruce-prod-au\")) {\n return \"AU\";\n }\n else if (databaseUrl.includes(\"bruce-dev\")) {\n return \"DEV\";\n }\n return null;\n }\n\n export async function GetKeyByAccountId(params: {\n // Either accountId or apiSettings must be provided.\n accountId?: string,\n apiSettings?: AccountSettings.IBruceApi,\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n key: string,\n // Indicates if the key was inferred by legacy data.\n isLegacy?: boolean\n }> {\n let { accountId, apiSettings, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId && !apiSettings) {\n throw(\"Invalid accountId or apiSettings\");\n }\n const settings = apiSettings ? apiSettings : (await Account.GetAppSettings({\n api,\n accountId,\n appId: Account.EAppId.BruceApi\n })).settings as AccountSettings.IBruceApi;\n let hostingKey = settings[\"HostingLocation.Key\"];\n let isLegacy = false;\n if (!hostingKey) {\n hostingKey = settings.DBLocation;\n isLegacy = true;\n }\n if (!hostingKey) {\n hostingKey = GuessKey({\n DBServer: settings.DBServer\n });\n isLegacy = true;\n }\n return {\n key: hostingKey,\n isLegacy\n };\n }\n\n export async function GetByAccountId(params: {\n // Either accountId or apiSettings must be provided.\n accountId?: string,\n apiSettings?: AccountSettings.IBruceApi,\n api?: GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n location: ILocation\n }> {\n let { accountId, apiSettings, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const data = await GetKeyByAccountId({\n accountId,\n apiSettings,\n api,\n req\n });\n if (!data?.key) {\n return null;\n }\n const key = await GetByKey({\n key: data.key,\n api,\n req\n });\n return key;\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\nimport { MessageBroker } from \"../server/message-broker\";\nimport { GuardianApi } from \"./guardian-api\";\nimport { HostingLocation } from \"../server/hosting-location\";\n\nexport namespace BruceApi {\n export interface IGetter {\n accountId: string;\n // Default settings the getter's app is running on.\n env?: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (accountId?: string, env?: A.EEnv) => BruceApi.Api;\n }\n\n /**\n * This is the request handler for Bruce Api,\n * it should be passed to any method that wants to communicate with this particular api.\n */\n export class Api extends AbstractApi {\n private accountId: string;\n public get AccountId(): string {\n return this.accountId;\n }\n\n private env: A.Env;\n private loadProm: Promise<void>;\n private loadCancelled: boolean = false;\n private messageBroker: MessageBroker.IBroker;\n public get MessageBroker(): MessageBroker.IBroker {\n return this.messageBroker;\n }\n\n // The regional base url for the account.\n // When using the CDN base url you MUST include a query param for accountId.\n private cdnBaseUrl: string;\n\n // Used for entity GET list-by-filter requests.\n // When set and viaCdn = true when performing an entity request, this will be used in place for base-url.\n // Eg: \"https://d3pb232f6pp9if.cloudfront.net/entitiesListForCDN/alex\"\n public EntityCdnUrl: string;\n // Works only for static/dynamic tilesets.\n // When set and viaCdn = true when getting a legacy tileset file, this will be used in place for base-url.\n // Eg: \"https://d15gsaz0jz5ika.cloudfront.net/alex/<TILESETID>/file/<FILEPATH>\"\n public LegacyTilesetCdnUrl: string;\n // Works for all tilesets including older ones.\n // Eg: \"https://blah.cloudfront.net/tilesets/<TILESETID>/files/<FILEPATH>?accountId=<ACCOUNT>\"\n public TilesetCdnUrl: string;\n\n // Indicates if the init process has finished loading.\n // This means the regional base url has been set and message broker is ready.\n public get Loading(): Promise<void> {\n return this.loadProm;\n }\n\n /**\n * @param params\n */\n constructor(params: {\n // Required client account to connect to.\n accountId: string,\n // Default is PROD.\n env?: A.Env,\n // @Deprecated, use loadConfig instead.\n loadRegionalBaseUrl?: boolean\n // True to load settings for regional base url and CDN.\n /// Default = false.\n loadConfig?: boolean\n // True to load message broker.\n // Default = true.\n loadWebSocket?: boolean,\n // Guardian instance used for regional url loading.\n // If not provided then a new instance of the API is made.\n guardian?: GuardianApi.Api,\n }) {\n super({\n ssidHeader: \"x-sessionid\",\n cacheId: `BRUCE_API_${params?.env}_${params?.accountId}_`\n });\n let {accountId, env, guardian, loadRegionalBaseUrl, loadConfig, loadWebSocket} = params;\n this.accountId = accountId;\n this.env = env ?? A.EEnv.PROD;\n\n if (loadRegionalBaseUrl) {\n loadConfig = true;\n }\n if (!guardian && loadConfig) {\n guardian = new GuardianApi.Api({\n env: this.env\n });\n }\n this.loadProm = this.init(guardian, loadConfig, loadWebSocket);\n }\n\n /**\n * Loads regional base url and sets up message broker.\n * @param guardian Required for loading regional base url.\n * @param loadConfig\n * @returns\n */\n private async init(\n guardian?: GuardianApi.Api,\n loadConfig?: boolean,\n loadWebSocket?: boolean\n ): Promise<void> {\n if (!this.accountId) {\n throw(\"accountId is required.\");\n }\n\n const env = this.env.toUpperCase();\n let domain = \"nextspace.host\";\n switch (env) {\n case A.EEnv.DEV:\n domain = \"nextspace-dev.net\";\n break;\n case A.EEnv.STG:\n domain = \"nextspace-stg.net\";\n break;\n case A.EEnv.UAT:\n domain = \"nextspace-uat.net\";\n break;\n case A.EEnv.PROD:\n domain = \"nextspace.host\";\n break;\n default:\n console.error(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n\n // Set using a stable default.\n this.baseUrl = `https://${this.accountId}.api.${domain}/`;\n\n if (guardian && loadConfig) {\n try {\n const host = await HostingLocation.GetByAccountId({\n accountId: this.accountId,\n api: guardian\n });\n if (host?.location) {\n const settings = host.location.Settings;\n\n // Attempt to load regional base url.\n // First try go through settings.\n let urlSet = false;\n if (settings?.BruceAPIURL) {\n let envUrl = settings.BruceAPIURL[env];\n if (envUrl) {\n envUrl = envUrl\n .replace(\"<ACCOUNTID>\", this.accountId)\n .replace(\"<ACCOUNT>\", this.accountId)\n if (envUrl && envUrl.length > 1) {\n this.baseUrl = envUrl;\n urlSet = true;\n }\n }\n }\n // Try go through host location's base url.\n // This may be wrong env which is why it's used as fallback right now.\n if (!urlSet && host.location.BruceAPIURL) {\n const regionalUrl = host.location.BruceAPIURL\n .replace(\"<ACCOUNTID>\", this.accountId)\n .replace(\"<ACCOUNT>\", this.accountId)\n .replace(\"<DOMAIN>\", domain);\n if (regionalUrl && regionalUrl.length > 1) {\n this.baseUrl = regionalUrl;\n urlSet = true;\n }\n }\n\n // Attempt to load CDN settings.\n if (settings?.CDN) {\n this.EntityCdnUrl = settings.CDN.entityURL?.[env];\n // We need to fix our configs.\n if (this.EntityCdnUrl) {\n if (this.EntityCdnUrl.includes(\"entitiesListForCDN\")) {\n this.EntityCdnUrl = this.EntityCdnUrl.replace(\"<ACCOUNT>\", this.accountId);\n }\n else {\n this.EntityCdnUrl = this.EntityCdnUrl.replace(\"<ACCOUNT>\", \"entitiesListForCDN/\" + this.accountId);\n }\n }\n this.LegacyTilesetCdnUrl = settings.CDN.legacyTilesetURL?.[env];\n this.TilesetCdnUrl = settings.CDN.tilesetURL?.[env];\n if (this.TilesetCdnUrl) {\n this.TilesetCdnUrl = this.TilesetCdnUrl.replace(\"<ACCOUNT>\", this.accountId);\n }\n\n // TilesetCdnUrl example: \"https://blah.cloudfront.net/tilesets/<TILESETID>/files/<FILEPATH>?accountId=<ACCOUNT>\".\n // Lazy at the moment to go around updating every region we have, I'll interpret the url from tilesetCdnUrl.\n if (this.TilesetCdnUrl) {\n try {\n const url = new URL(this.TilesetCdnUrl);\n this.cdnBaseUrl = `${url.protocol}//${url.hostname}/`;\n } \n catch (e) {\n console.error(e);\n }\n }\n \n }\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n\n if (loadWebSocket != false) {\n try {\n this.messageBroker = new MessageBroker.WebSocketBroker(this.baseUrl, this.env);\n }\n catch (e) {\n console.warn(\"BruceApi: Failed to create message broker.\", e);\n }\n }\n }\n\n /**\n * Warning: This method does not wait for init to finish loading.\n * This means the url could be changed once fully initialized.\n * The url will be valid either way, but the loaded one may be faster as it is region specific.\n * Await the \"Loading\" promise if you care about this.\n * @returns\n */\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n /**\n * Warning: Wait the \"Loading\" promise before using this url.\n * @returns \n */\n public GetCdnBaseUrl(): string {\n return this.cdnBaseUrl;\n }\n\n /**\n * Warning: This will cancel the init process.\n * The init process loads a region specific endpoint.\n * Setting a base url will stop that process from completing.\n * @param url\n */\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n this.loadCancelled = true;\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.get(this.baseUrl + url, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.delete(this.baseUrl + url, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.post(this.baseUrl + url, data, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n\n public async PUT(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.put(this.baseUrl + url, data, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return new Promise((res, rej) => {\n this.loadProm.then(() => {\n this.upload(this.baseUrl + url, blob, params).then(res).catch(rej);\n }).catch(rej);\n });\n }\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\n\n/**\n * This is the request handler for Cam Api,\n * it should be passed to any method that wants to communicate with this particular api.\n * @deprecated Please use GuardianApi instead.\n */\nexport namespace CamApi {\n export interface IGetter {\n // Default settings the getter's app is running on.\n env: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (env?: A.EEnv) => CamApi.Api;\n }\n\n export class Api extends AbstractApi {\n private env: A.Env;\n\n constructor(params: {\n env?: A.Env\n }) {\n super({\n ssidHeader: \"x-sessionid\",\n cacheId: `CAM_API_${params?.env}_`\n });\n this.env = params?.env ? params.env : A.EEnv.PROD;\n this.setBaseUrl();\n }\n\n private setBaseUrl(): void {\n let codeWord = \"cam\"\n let url = \"https://<CODEWORD>.nextspace\";\n const env = this.env.toUpperCase();\n switch (env) {\n case A.EEnv.DEV:\n codeWord = \"guardian\";\n url += \"-dev.net/\";\n break;\n case A.EEnv.STG:\n codeWord = \"guardian\";\n url += \"-stg.net/\";\n break;\n case A.EEnv.UAT:\n codeWord = \"guardian\";\n url += \"-uat.net/\";\n break;\n case A.EEnv.PROD:\n url += \".host/\";\n break;\n default:\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n url = url.replace(\"<CODEWORD>\", codeWord);\n this.baseUrl = url;\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return this.get(this.baseUrl + url, params);\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return this.delete(this.baseUrl + url, params);\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return this.post(this.baseUrl + url, data, params);\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return this.upload(this.baseUrl + url, blob, params);\n }\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\n\nexport namespace GlobalApi {\n export interface IGetter {\n // Default settings the getter's app is running on.\n env: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (env?: A.EEnv) => GlobalApi.Api;\n }\n\n /**\n * This is the request handler for Global Api,\n * it should be passed to any method that wants to communicate with this particular api.\n */\n export class Api extends AbstractApi {\n private env: A.Env;\n\n constructor(params: {\n env?: A.Env\n }) {\n super({\n ssidHeader: \"x-sessionid\",\n cacheId: `GLOBAL_API_${params?.env}_`\n });\n this.env = params?.env ? params.env : A.EEnv.PROD;\n this.setBaseUrl();\n }\n\n private setBaseUrl(): void {\n let url: string;\n const env = this.env.toUpperCase();\n switch (env) {\n case A.EEnv.DEV:\n url = \"https://bruceglobal.nextspace-dev.net/\";\n break;\n case A.EEnv.STG:\n url = \"https://bruceglobal.nextspace-stg.net/\";\n break;\n case A.EEnv.UAT:\n url = \"https://bruceglobal.api.nextspace-uat.net/\";\n break;\n case A.EEnv.PROD:\n url = \"https://bruceglobal.api.nextspace.host/\";\n break;\n default:\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n this.baseUrl = url;\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return this.get(this.baseUrl + url, params);\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return this.delete(this.baseUrl + url, params);\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return this.post(this.baseUrl + url, data, params);\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return this.upload(this.baseUrl + url, blob, params);\n }\n }\n}","import { AbstractApi } from \"./abstract-api\";\nimport { Api as A } from \"./api\";\n\n/**\n * * @deprecated Please use GuardianApi instead.\n */\nexport namespace IdmApi {\n export interface IGetter {\n // Default settings the getter's app is running on.\n env: A.EEnv;\n // Should return using app defaults if no params are specified.\n getApi: (env?: A.EEnv) => IdmApi.Api;\n }\n\n /**\n * This is the request handler for Idm Api,\n * it should be passed to any method that wants to communicate with this particular api.\n */\n export class Api extends AbstractApi {\n private env: A.Env;\n\n constructor(params: {\n env?: A.Env\n }) {\n super({\n ssidHeader: \"SSID\",\n cacheId: `IDM_API_${params?.env}_`\n });\n this.env = params?.env ? params.env : A.EEnv.PROD;\n this.setBaseUrl();\n }\n\n private setBaseUrl(): void {\n let codeWord = \"idm\"\n let url = \"https://<CODEWORD>.nextspace\";\n const env = this.env.toUpperCase();\n switch (env) {\n case A.EEnv.DEV:\n codeWord = \"guardian\";\n url += \"-dev.net/\";\n break;\n case A.EEnv.STG:\n codeWord = \"guardian\";\n url += \"-stg.net/\";\n break;\n case A.EEnv.UAT:\n codeWord = \"guardian\";\n url += \"-uat.net/\";\n break;\n case A.EEnv.PROD:\n url += \".host/\";\n break;\n default:\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\n }\n url = url.replace(\"<CODEWORD>\", codeWord);\n this.baseUrl = url;\n }\n\n public GetBaseUrl(): string {\n return this.baseUrl;\n }\n\n public SetBaseUrl(url: string): void {\n this.baseUrl = url;\n if (!this.baseUrl.endsWith(\"/\")) {\n this.baseUrl += \"/\";\n }\n }\n\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\n return this.get(this.baseUrl + url, params);\n }\n\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\n return this.delete(this.baseUrl + url, params);\n }\n\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\n return this.post(this.baseUrl + url, data, params);\n }\n\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\n return this.upload(this.baseUrl + url, blob, params);\n }\n }\n}","import { IDictionary } from \"../common/dictionary\";\nimport { Api } from \"./api\";\nimport { BruceApi } from \"./bruce-api\";\nimport { CamApi } from \"./cam-api\";\nimport { GlobalApi } from \"./global-api\";\nimport { GuardianApi } from \"./guardian-api\";\nimport { IdmApi } from \"./idm-api\";\n\nexport class ApiGetters {\n private bruce: IDictionary<BruceApi.Api> = {};\n private idm: IDictionary<IdmApi.Api> = {};\n private cam: IDictionary<CamApi.Api> = {};\n private guardian: IDictionary<GuardianApi.Api> = {};\n private global: IDictionary<GlobalApi.Api> = {};\n private accountId: string;\n private env: Api.EEnv;\n private sessionId: string;\n\n constructor(params: {\n accountId: string,\n env?: Api.EEnv,\n sessionId?: string\n }) {\n this.accountId = params?.accountId;\n this.env = params?.env ? params.env : Api.EEnv.PROD;\n this.sessionId = params?.sessionId;\n }\n\n public ClearCache() {\n for (const key in this.bruce) {\n this.bruce[key]?.Cache?.Clear();\n }\n for (const key in this.idm) {\n this.idm[key]?.Cache?.Clear();\n }\n for (const key in this.cam) {\n this.cam[key]?.Cache?.Clear();\n }\n for (const key in this.guardian) {\n this.guardian[key]?.Cache?.Clear();\n }\n for (const key in this.global) {\n this.global[key]?.Cache?.Clear();\n }\n }\n\n public SetAccountId(accountId: string) {\n this.accountId = accountId;\n }\n\n public GetAccountId(): string {\n return this.accountId;\n }\n\n public SetEnv(env: Api.EEnv) {\n this.env = env;\n }\n\n public GetEnv(): Api.EEnv {\n return this.env;\n }\n\n public SetSessionId(sessionId: string) {\n this.sessionId = sessionId;\n for (const key in this.bruce) {\n this.bruce[key].SetSessionId(sessionId);\n }\n for (const key in this.idm) {\n this.idm[key].SetSessionId(sessionId);\n }\n for (const key in this.cam) {\n this.cam[key].SetSessionId(sessionId);\n }\n for (const key in this.global) {\n this.global[key].SetSessionId(sessionId);\n }\n this.ClearCache();\n }\n\n public GetSessionId(): string {\n return this.sessionId;\n }\n\n public GetBruceApi(params?: {\n accountId?: string,\n env?: Api.EEnv\n }): BruceApi.Api {\n if (!params) {\n params = {};\n }\n let {accountId, env} = params;\n accountId = accountId ? accountId : this.accountId;\n env = env ? env : this.env;\n const key = `${accountId}-${env}`;\n if (!this.bruce[key]) {\n this.bruce[key] = new BruceApi.Api({\n accountId,\n env,\n loadRegionalBaseUrl: true\n });\n this.bruce[key].SetSessionId(this.sessionId);\n }\n return this.bruce[key];\n }\n\n public GetBruceGetter(): BruceApi.IGetter {\n return {\n accountId: this.accountId,\n env: this.env,\n getApi: (accountId?: string, env?: Api.EEnv) => {\n return this.GetBruceApi({accountId, env});\n }\n }\n }\n\n /**\n * Deprecated: Use GetGuardianApi instead.\n * @returns\n */\n public GetIdmApi(params?: {\n env?: Api.EEnv\n }): IdmApi.Api {\n if (!params) {\n params = {};\n }\n let {env} = params;\n env = env ? env : this.env;\n const key = `${env}`;\n if (!this.idm[key]) {\n this.idm[key] = new IdmApi.Api({\n env\n });\n this.idm[key].SetSessionId(this.sessionId);\n }\n return this.idm[key];\n }\n\n /**\n * Deprecated: Use GetGuardianGetter instead.\n * @returns\n */\n public GetIdmGetter(): IdmApi.IGetter {\n return {\n env: this.env,\n getApi: (env?: Api.EEnv) => {\n return this.GetIdmApi({env});\n }\n }\n }\n\n /**\n * Deprecated: Use GetGuardianApi instead.\n * @returns\n */\n public GetCamApi(params?: {\n env?: Api.EEnv\n }): CamApi.Api {\n if (!params) {\n params = {};\n }\n let {env} = params;\n env = env ? env : this.env;\n const key = `${env}`;\n if (!this.cam[key]) {\n this.cam[key] = new CamApi.Api({\n env\n });\n this.cam[key].SetSessionId(this.sessionId);\n }\n return this.cam[key];\n }\n\n /**\n * Deprecated: Use GetGuardianGetter instead.\n * @returns\n */\n public GetCamGetter(): CamApi.IGetter {\n return {\n env: this.env,\n getApi: (env?: Api.EEnv) => {\n return this.GetCamApi({env});\n }\n }\n }\n\n public GetGlobalApi(params?: {\n env?: Api.EEnv\n }): GlobalApi.Api {\n if (!params) {\n params = {};\n }\n let {env} = params;\n env = env ? env : this.env;\n const key = `${env}`;\n if (!this.global[key]) {\n this.global[key] = new GlobalApi.Api({\n env\n });\n this.global[key].SetSessionId(this.sessionId);\n }\n return this.global[key];\n }\n\n public GetGlobalGetter(): GlobalApi.IGetter {\n return {\n env: this.env,\n getApi: (env?: Api.EEnv) => {\n return this.GetGlobalApi({env});\n }\n }\n }\n\n public GetGuardianApi(params?: {\n env?: Api.EEnv\n }): GuardianApi.Api {\n if (!params) {\n params = {};\n }\n let {env} = params;\n env = env ? env : this.env;\n const key = `${env}`;\n if (!this.guardian[key]) {\n this.guardian[key] = new GuardianApi.Api({\n env\n });\n this.guardian[key].SetSessionId(this.sessionId);\n }\n return this.guardian[key];\n }\n\n public GetGuardianGetter(): GuardianApi.IGetter {\n return {\n env: this.env,\n getApi: (env?: Api.EEnv) => {\n return this.GetGuardianApi({env});\n }\n }\n }\n}","import { Api as A } from \"./api/api\";\r\nimport { ApiGetters } from \"./api/api-getters\";\r\n\r\ninterface IParams {\r\n isSelfManaged?: boolean;\r\n accountId?: string;\r\n env?: A.EEnv;\r\n sessionId?: string;\r\n apiGetters?: ApiGetters;\r\n}\r\n\r\n// Global instance for smaller use-cases where you don't want to manage the getters yourself.\r\nlet _getters: ApiGetters;\r\n\r\nexport namespace ENVIRONMENT {\r\n // If true, then defaults are not touched and it's assumed this is being managed.\r\n export let IS_SELF_MANAGED = false;\r\n // Unused if IS_SELF_MANAGED is false.\r\n export let PARAMS: IParams = {\r\n accountId: \"\",\r\n env: A.EEnv.UAT,\r\n sessionId: \"\"\r\n };\r\n\r\n export function Api() {\r\n if (IS_SELF_MANAGED) {\r\n throw(\"Self managed mode ON. You are getting this error because you didn't pass an Api instance to a function.\");\r\n }\r\n if (!PARAMS.accountId) {\r\n console.warn(\"No accountId set. This is required for the getters to work properly.\");\r\n }\r\n if (!_getters) {\r\n _getters = new ApiGetters({\r\n accountId: PARAMS.accountId,\r\n env: PARAMS.env ? PARAMS.env : A.EEnv.UAT,\r\n sessionId: PARAMS.sessionId\r\n });\r\n }\r\n return _getters;\r\n }\r\n\r\n export function Reset(params?: IParams) {\r\n if (IS_SELF_MANAGED) {\r\n throw(\"Self managed mode ON. You are getting this error because you didn't pass an Api instance to a function.\");\r\n }\r\n if (_getters) {\r\n _getters.ClearCache();\r\n if (params.accountId) {\r\n _getters.SetAccountId(params.accountId);\r\n }\r\n if (params.sessionId) {\r\n _getters.SetSessionId(params.sessionId);\r\n }\r\n if (params.env) {\r\n _getters.SetEnv(params.env);\r\n }\r\n }\r\n PARAMS = {\r\n ...PARAMS,\r\n ...params\r\n };\r\n }\r\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype Type = AnnDocument.EType | string;\n\n/**\n * Describes communication with the \"Annotated Document\" concept in Bruce.\n * Annotated documents are files with hotspots that can link to Entity records.\n */\nexport namespace AnnDocument {\n export function GetCacheKey(id: number) {\n return `${Api.ECacheKey.AnnDocument}${Api.ECacheKey.Id}${id}`;\n }\n\n export function GetListCacheKey(type: Type) {\n return Api.ECacheKey.AnnDocument + type;\n }\n\n export interface IHotspot {\n X: number;\n Y: number;\n Key: string;\n Description?: string;\n LinkedEntity?: {\n \"Entity.ID\": string;\n };\n }\n\n export interface ISettings {\n Hotspots?: IHotspot[];\n DrawingScaleFactorX?: number;\n DrawingScaleFactorY?: number;\n }\n\n export interface IDocument {\n ID?: number;\n Type: Type;\n Name: string;\n \"ClientFile.ID\": string;\n Settings?: ISettings;\n }\n\n export enum EType {\n SVG = \"SVG\"\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n docId: number,\n req?: Api.IReqParams\n }): Promise<{\n document: IDocument\n }> {\n let { api, docId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!docId) {\n throw(\"Doc ID is required.\");\n }\n const key = GetCacheKey(docId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`documentView/${docId}`, Api.PrepReqParams(reqParams));\n res({\n document: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n docType?: Type,\n req?: Api.IReqParams\n }): Promise<{\n documents: IDocument[]\n }> {\n let { api, docType: type, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!type) {\n type = \"\";\n }\n const cache = await api.GetCacheItem(GetListCacheKey(type), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const url = \"documentViews\" + (type ? \"?type=\" + type : \"\");\n const data = await api.GET(url, Api.PrepReqParams(reqParams));\n res({\n documents: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(type),\n value: req,\n req: reqParams\n });\n return req;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Markup } from \"../markup/markup\";\nimport { CustomFormContent } from \"./custom-form-content\";\n\n/**\n * Describes the \"Custom Form\" concept within Bruce.\n * Custom forms are dynamic dialogs that get populated with Entity data.\n */\nexport namespace CustomForm {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.CustomForm + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(typeId: string): string {\n if (typeId) {\n return Api.ECacheKey.CustomForm + Api.ECacheKey.EntityType + Api.ECacheKey.Id + typeId;\n }\n return Api.ECacheKey.CustomForm;\n }\n\n export interface IForm {\n ID?: number;\n \"EntityType.ID\"?: string;\n Name?: string;\n Settings?: CustomFormContent.ISection | Markup.IMarkup | any;\n Type?: EType;\n }\n\n export enum EType {\n // Deprecated types.\n Form = \"GENERIC\",\n Markup = \"MARKUP\",\n // Supported types.\n ComponentStack = \"COMPONENT_STACK\"\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n formId: number,\n req?: Api.IReqParams\n }): Promise<{\n form: IForm\n }> {\n let { api, formId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n \n if (!id) {\n throw(\"Id is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(id), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`customForm/${id}`, Api.PrepReqParams(reqParams));\n res({\n form: data\n });\n } catch (err) {\n rej(err);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n formId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, formId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Id is required.\");\n }\n await api.DELETE(`customForm/${id}`, Api.PrepReqParams(reqParams))\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n entityTypeId: string,\n req?: Api.IReqParams\n }): Promise<{\n forms: IForm[]\n }> {\n let { api, entityTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const url = typeId ? `entityType/${typeId}/customForms` : \"customForms\";\n const cache = await api.GetCacheItem(GetListCacheKey(typeId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req = api.GET(url, Api.PrepReqParams(reqParams));\n const prom = req.then((data) => {\n return {\n forms: data.Items\n };\n });\n await api.SetCacheItem({\n key: GetListCacheKey(typeId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n form: IForm,\n reqParams?: Api.IReqParams\n }): Promise<{\n form: IForm\n }> {\n let { api, form: data, reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data.ID) {\n data.ID = 0;\n }\n const res = await api.POST(`customForm/${data.ID}`, data, Api.PrepReqParams(reqParams));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\n return {\n form: res\n };\n }\n}","/**\n * Describes content of a GENERIC type custom form.\n * The alternative type is MARKUP (Markup.IMarkup).\n */\nexport namespace CustomFormContent {\n export enum ECellType {\n // Description-like text box that the user types in.\n StaticText = 0,\n // Label + Value pair of an entity attribute.\n DataValue = 1,\n // Static picture.\n StaticPicture = 2,\n // Sub-section of the form. Contains other sections.\n SubSection = 3,\n // Button that opens another form (or info view).\n ButtonMore = 4,\n // Entity gallery.\n EntityPhoto = 5,\n // Embedded media frame. Eg: youtube video.\n EmbeddedMedia = 6,\n // Deprecated\n Chart = 7,\n // Similar to DataValue, except it populates a description-like text-box.\n EntityText = 8,\n // Icon and optional action associated with it.\n Icon = 9\n }\n\n export enum EFlowDirection {\n Vertically = \"v\",\n Horizontally = \"h\"\n }\n\n export interface ISection extends ICell {\n Heading?: {\n Icon?: string;\n Caption?: string;\n };\n Direction?: EFlowDirection;\n Entries?: CellContent.Content[];\n // Width of section.\n Width?: number;\n WidthUnits?: \"px\" | \"%\";\n }\n\n export interface ICell {\n Type?: ECellType;\n Style?: {\n BackgroundColor?: string;\n TextColor?: string;\n };\n }\n\n export namespace CellContent {\n export type Content = IStatic | IDataValue | IStaticImage | IMoreButton | IEntityPhoto | IEmbeddedMedia;\n\n export interface IStatic extends ICell {\n Text?: string;\n }\n \n export interface IDataValue extends ICell {\n LabelIcon?: string;\n LabelText?: string;\n ValuePath?: string;\n }\n \n export interface IStaticImage extends ICell {\n ImageUrl?: string;\n }\n \n export interface IMoreButton extends ICell {\n ReferredCustomFormID?: number;\n }\n \n export interface IEntityPhoto extends ICell {}\n \n export interface IEmbeddedMedia {\n HTML?: string;\n }\n\n export interface IEntryEntityText extends ICell {\n ValuePath?: string;\n }\n \n export interface IEntryIcon extends ICell {\n // Similar data layout to markup.\n // Icon is expected to be a font-awesome icon, eg: <i class=\"fas fa-cube\"></i>.\n icon?: string;\n // Icon color. Should be valid css.\n color?: string;\n action?: {\n type: \"NONE\" | \"LINK\" | \"RELATIONSHIPS\";\n params?: {\n URL?: string;\n };\n };\n }\n }\n}","export namespace Color {\n export interface IColor {\n // Max: 255, Min: 0.\n red: number;\n green: number;\n blue: number;\n // Max: 1, Min: 0.\n alpha: number ;\n }\n\n export enum EBlendMode {\n HIGHLIGHT,\n REPLACE,\n MIX\n }\n\n export interface IBlendSettings {\n blendMode?: EBlendMode;\n // 1 = 100% new color. 0 = original color.\n blendPercent?: number;\n }\n\n export function RandomColor(): IColor {\n // https://stackoverflow.com/a/7352887\n const brightness = 4;\n const rgb = [Math.random() * 256, Math.random() * 256, Math.random() * 256];\n const mix = [brightness * 51, brightness * 51, brightness * 51];\n const mixedrgb = [rgb[0] + mix[0], rgb[1] + mix[1], rgb[2] + mix[2]].map(function(x){\n return Math.round(x / 2.0);\n });\n const str = \"rgba(\" + mixedrgb.join(\",\") + \",0.9\" + \")\";\n return ColorFromStr(str);\n }\n\n /**\n * Attempts to parse a given color string into a model.\n * @param str \n * @returns \n */\n export function ColorFromStr(str: string): IColor {\n let r,g,b,a;\n const rgba = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([^\\)]+)\\s*)?\\)$/.exec(str);\n if (rgba) {\n r = parseInt(rgba[1]);\n g = parseInt(rgba[2]);\n b = parseInt(rgba[3]);\n a = rgba[4] != null ? parseFloat(rgba[4]) : 1;\n return {\n red: r,\n green: g,\n blue: b,\n alpha: a\n }\n }\n if (str.charAt(0) == \"#\") {\n str = str.substring(1);\n }\n if (str.length == 6) {\n // rgb.\n const parsed = /^(.{2})(.{2})(.{2})/.exec(str);\n if (!parsed) {\n return <any>null;\n }\n r = parseInt(parsed[1], 16);\n g = parseInt(parsed[2], 16);\n b = parseInt(parsed[3], 16);\n a = 1;\n }\n else if (str.length == 8) {\n // rgba.\n const parsed = /^(.{2})(.{2})(.{2})(.{2})/.exec(str);\n if (!parsed) {\n return <any>null;\n }\n r = parseInt(parsed[1], 16);\n g = parseInt(parsed[2], 16);\n b = parseInt(parsed[3], 16);\n a = parseInt(parsed[4], 16);\n if (a != 0) {\n a = a/255;\n }\n }\n else {\n return <any>null;\n }\n if (a == null) {\n a = 1;\n }\n return {\n red: r,\n blue: b,\n green: g,\n alpha: a\n }\n }\n}","export namespace ObjectUtils {\n /**\n * Generates a Bruce compatible UID.\n * @returns \n */\n export function UId(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n}","/**\n * Utility to help with parsing and wrapping Bruce paths.\n */\nexport namespace PathUtils {\n export function Parse(str: string): string[] {\n if (!str) {\n return [];\n }\n const broken: string[] = str.split(\"\\\"/\\\"\");\n if (broken.length > 0) {\n let top = broken[0];\n if (top.length > 0) {\n if (top.charAt(0) == \"\\\"\") {\n top = top.substring(1);\n }\n broken[0] = top;\n }\n const endIndex = broken.length - 1;\n let bot = broken[endIndex];\n if (bot.length > 0) {\n if (bot.charAt(bot.length - 1) == \"\\\"\") {\n bot = bot.substring(0, bot.length - 1);\n }\n broken[endIndex] = bot;\n }\n }\n return broken;\n }\n\n export function Wrap(path: string[]): string {\n let tmp: string = \"\\\"\";\n for (let i = 0; i < path.length; i++) {\n let section = path[i];\n tmp += section;\n if (i < path.length - 1) {\n tmp += \"\\\"/\\\"\";\n }\n }\n tmp += \"\\\"\";\n return tmp;\n }\n\n export function ParseLegacy(str: string): string[] {\n const broken: string[] = str.split(\".\");\n for (let i = 0; i < broken.length; i++) {\n let piece = broken[0];\n if (piece.charAt(0) == \"\\\"\") {\n piece = broken[0] = piece.substring(1);\n }\n if (piece.charAt(piece.length - 1) == \"\\\"\") {\n broken[0] = piece.substring(0, piece.length - 1);\n }\n }\n return broken;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { Bounds } from \"../common/bounds\";\nimport { Geometry } from \"../common/geometry\";\nimport { ObjectUtils } from \"../util/object-utils\";\nimport { Transform } from \"../common/transform\";\nimport { UTC } from \"../common/utc\";\nimport { EntityType } from \"./entity-type\";\nimport { PathUtils } from \"../util/path-utils\";\nimport { IDictionary } from \"../common/dictionary\";\nimport { Carto } from \"../bruce-models\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype _any = any;\n\n/**\n * Describes the \"Entity\" concept within Bruce.\n * An entity is a JSON blob containing both internal data and user-defined data.\n * Entity records have many thinks linked to them through their UIDs such as links, files and relationships.\n */\nexport namespace Entity {\n export function GetCacheKey(entityId: string, entityTypeId?: string, expandLocation?: boolean): string {\n if (!entityTypeId) {\n entityTypeId = \"\";\n }\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}${String(entityTypeId)}${String(Boolean(expandLocation))}`;\n }\n\n export function GetStartsWithKey(entityId: string) {\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}`;\n }\n\n export interface IEntity extends _any {\n Bruce: {\n \"CreatedBy.User.ID\"?: string;\n CreatedTime?: UTC.IUTC;\n \"EntityType.ID\": string;\n ID?: string;\n \"Layer.ID\"?: number[];\n };\n location?: Carto.ICarto;\n boundaries?: Bounds.IBounds;\n transform?: Transform.ITransform;\n position?: number[][];\n geometry?: Geometry.IGeometry;\n // Available if expandLocation is true.\n // Related tileset ids if any.\n tilesetID?: string[];\n // Available if expandLocation is true.\n // Relative offset to parent node.\n worldPosition?: number[][];\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n entityId: string,\n // (Optional) Entity type ID to load specific schema.\n entityTypeId?: string;\n expandLocation?: boolean,\n req?: Api.IReqParams\n }): Promise<{\n entity: IEntity\n }> {\n let { api, entityId, req: reqParams, expandLocation, entityTypeId } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const key = GetCacheKey(entityId, entityTypeId, expandLocation);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const urlParams = new URLSearchParams();\n if (expandLocation) {\n urlParams.append(\"$expand\", \"location\");\n }\n if (entityTypeId) {\n urlParams.append(\"BruceEntityType\", entityTypeId);\n }\n const data = await api.GET(\n `entity/${entityId}?${urlParams.toString()}`,\n Api.PrepReqParams(reqParams)\n );\n res({\n entity: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetListByIds(params: {\n api?: BruceApi.Api,\n entityIds: string[],\n req?: Api.IReqParams\n }): Promise<{\n entities: IEntity[]\n }> {\n let { api, entityIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!entityIds.length) {\n throw(\"Entity IDs are required.\");\n }\n const reqs: Promise<{ entity: IEntity }>[] = [];\n const reqIds: string[] = [];\n for (let i = 0; i < entityIds.length; i++) {\n const entityId = entityIds[i];\n const key = GetCacheKey(entityId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n reqs.push(cache.data);\n }\n else {\n reqIds.push(entityId);\n }\n }\n const reqData = {\n Filter: {\n ID: {\n in: reqIds\n }\n },\n PageSize: reqIds.length\n };\n if (reqIds.length > 0) {\n const req: Promise<Api.IList<Entity.IEntity>> = api.POST(\"entities\", reqData, Api.PrepReqParams(reqParams));\n for (let i = 0; i < reqIds.length; i++) {\n const entityId = reqIds[i];\n const key = GetCacheKey(entityId);\n const prom: Promise<{ entity: IEntity }> = new Promise(async (res) => {\n try {\n const data = await req;\n const item = data.Items.find(x => x.Bruce.ID == entityId);\n res({\n entity: item\n });\n }\n catch (e) {\n // No showing error as we don't want to see it 2000 times.\n }\n res(<any>null);\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n reqs.push(prom);\n }\n }\n return {\n entities: (await Promise.all(reqs)).map(x => x?.entity).filter(x => !!x)\n };\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n await api.DELETE(`entity/${entityId}`, Api.PrepReqParams(reqParams));\n api.Cache.RemoveByStartsWith(GetStartsWithKey(entityId));\n }\n\n export async function DeleteList(params: {\n api?: BruceApi.Api,\n entityIds: string[],\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!entityIds?.length) {\n throw(\"Entity IDs are required.\");\n }\n await api.POST(\"deleteEntities\", {\n Items: entityIds\n }, Api.PrepReqParams(reqParams));\n for (let i = 0; i < entityIds.length; i++) {\n const entityId = entityIds[i];\n api.Cache.RemoveByStartsWith(GetStartsWithKey(entityId));\n }\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n entity: IEntity,\n override: boolean,\n req?: Api.IReqParams\n }): Promise<{\n entity: IEntity\n }> {\n let { api, entity: data, override, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!data?.Bruce?.[\"EntityType.ID\"]) {\n throw(\"Entity Type ID is required.\");\n }\n if (!data?.Bruce?.ID) {\n data.Bruce = {\n ...data.Bruce,\n ID: ObjectUtils.UId()\n };\n }\n const reqUrl = `entity/${data.Bruce.ID}/?dataoverride=${override}&BruceEntityType=${data.Bruce[\"EntityType.ID\"]}`;\n const res = await api.POST(reqUrl, data, Api.PrepReqParams(reqParams));\n api.Cache.RemoveByStartsWith(GetStartsWithKey(<string>data.Bruce.ID));\n return {\n entity: res\n };\n }\n\n export function RemoveTag(params: {\n entity: IEntity,\n tagId: number\n }): void {\n const { entity: data, tagId } = params;\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\n const index = tags.indexOf(tagId);\n if (index >= 0) {\n tags.splice(index, 1);\n data.Bruce[\"Layer.ID\"] = tags;\n }\n }\n\n export function AddTag(params: {\n entity: IEntity,\n tagId: number\n }): void {\n const { entity: data, tagId } = params;\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\n if (!tags.includes(tagId)) {\n tags.push(tagId);\n data.Bruce[\"Layer.ID\"] = tags;\n }\n }\n\n export function SetValue(params: {\n entity: IEntity,\n path: string[],\n value: any\n }): void {\n const { entity: data, path, value } = params;\n let curData = data;\n for (let i = 0; i < path.length; i++) {\n const step = path[i];\n if (!curData[step] || typeof curData[step] != \"object\") {\n curData[step] = {};\n }\n if (i >= path.length - 1) {\n curData[step] = value;\n break;\n }\n curData = curData[step];\n }\n }\n\n export function GetValue(params: {\n entity: IEntity,\n path: string[]\n }): any {\n const { entity: data, path } = params;\n // Backwards compatibility.\n if (path.length == 1 && path[0] == \"ID\") {\n return data.Bruce?.ID;\n }\n let curData = data;\n for (let i = 0; i < path.length; i++) {\n const step = path[i];\n if (!curData[step]) {\n return null;\n }\n if (i >= path.length - 1) {\n return curData[step];\n }\n curData = curData[step];\n }\n return null;\n }\n\n /**\n * Calculates an entity's name based on attribute priority set in the type.\n * @param params\n * If true, will return the entity ID if no name can be calculated.\n * Otherwise it returns null.\n * @returns\n */\n export function CalculateName(params: {\n entity: IEntity,\n type: EntityType.IEntityType,\n defaultToId?: boolean\n }): string {\n const { entity, type, defaultToId = true } = params;\n const attrStr = type.DisplayNameAttributePath;\n if (attrStr) {\n const attrPaths = attrStr.split(\",\");\n for (let i = 0; i < attrPaths.length; i++) {\n const pathStr = attrPaths[i];\n const path = PathUtils.Parse(pathStr);\n const name = Entity.GetValue({\n entity: entity,\n path\n });\n if (name && typeof name != \"object\") {\n return name;\n }\n }\n }\n return defaultToId ? entity.Bruce.ID : null;\n }\n\n export interface IFilter {\n orderBy?: any;\n entityTypeId?: string;\n layerIds?: number[];\n bounds?: Bounds.IReqBounds;\n pageSize?: number;\n pageIndex?: number;\n lodCategoryId?: string;\n sortOrder?: Api.ESortOrder;\n entityTypeConditions?: IDictionary<any>;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n filter: IFilter,\n // Default = false.\n viaCdn?: boolean;\n // (Optional) Cache killing token to append to the request url.\n viaCdnCacheToken?: number | string;\n req?: Api.IReqParams\n }): Promise<{\n entities: IEntity[]\n }> {\n let { api, filter, req: reqParams, viaCdn, viaCdnCacheToken } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n let requestFilter: any = {};\n if (filter.entityTypeConditions) {\n requestFilter = {\n ...filter.entityTypeConditions\n };\n }\n if (filter.layerIds != null && filter.layerIds.length > 0) {\n requestFilter[\"Bruce.Layer.ID\"] = {\n equals: filter.layerIds\n };\n }\n if (filter.bounds) {\n requestFilter[\"geometry\"] = {\n \"intersects\": [\n filter.bounds.south,\n filter.bounds.north,\n filter.bounds.west,\n filter.bounds.east\n ]\n };\n }\n\n const body = {\n SortOrder: filter.sortOrder == Api.ESortOrder.Asc ? \"ASC\" : \"DESC\",\n OrderBy: filter.orderBy,\n Filter: requestFilter,\n LODType: filter.lodCategoryId,\n BruceEntityType: filter.entityTypeId,\n PageIndex: filter.pageIndex,\n PageSize: filter.pageSize\n };\n\n let entities = [];\n if (viaCdn && api.EntityCdnUrl) {\n const url = new URL(api.EntityCdnUrl);\n const urlParams = new URLSearchParams(url.search);\n urlParams.set(\"cacheToken\", String(viaCdnCacheToken ? viaCdnCacheToken : 0));\n if (body.SortOrder) {\n urlParams.set(\"SortOrder\", body.SortOrder);\n }\n if (body.OrderBy) {\n urlParams.set(\"OrderBy\", body.OrderBy);\n }\n if (body.Filter) {\n urlParams.set(\"Filter\", JSON.stringify(body.Filter));\n }\n if (body.LODType) {\n urlParams.set(\"LODType\", body.LODType);\n }\n if (body.BruceEntityType) {\n urlParams.set(\"BruceEntityType\", body.BruceEntityType);\n }\n if (body.PageIndex) {\n urlParams.set(\"PageIndex\", String(body.PageIndex));\n }\n if (body.PageSize) {\n urlParams.set(\"PageSize\", String(body.PageSize));\n }\n const urlStr = url.toString() + \"?\" + urlParams.toString();\n const data = await api.get(urlStr, Api.PrepReqParams(reqParams));\n entities = data.Items;\n }\n else {\n const data = await api.POST(\"entities\", body, Api.PrepReqParams(reqParams));\n entities = data.Items;\n // Only caching when non-CDN.\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n const id = entity.Bruce.ID;\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: {\n entity: entity\n },\n req: reqParams\n });\n }\n }\n return {\n entities\n };\n }\n}","import { Entity } from \"../entity/entity\";\nimport { PathUtils } from \"../util/path-utils\";\n\nfunction getVariable(str: string): { text: string, path: string } {\n const start = str.indexOf(\"${\");\n if (start > -1) {\n const end = str.indexOf(\"}\");\n if (end > -1) {\n if (start < end) {\n const path = str.substring(start + 2, end);\n const txt = str.substring(start, end + 1);\n return { path: path, text: txt };\n }\n }\n }\n return <any>null;\n}\n\n/**\n * Utilities for parsing \"Bruce variables\", typically within strings.\n *\n * A Bruce variable is a string that starts with \"${\" and ends with \"}\".\n * Within those brackets is a path to an attribute in an entity.\n */\nexport namespace BruceVariable {\n /**\n * Replaces all Bruce variables in a string with the value of the attribute.\n * @param str\n * @param data\n * @param legacyParse\n * @returns\n */\n export function SwapValues(params: {\n str: string,\n entity: Entity.IEntity,\n legacyParse?: boolean\n }): string {\n let { str, entity: data, legacyParse } = params;\n if (!legacyParse) {\n legacyParse = false;\n }\n while (true) {\n const variable = getVariable(str);\n if (variable) {\n const path = legacyParse ? PathUtils.ParseLegacy(variable.path) : PathUtils.Parse(variable.path);\n let value = \"\";\n if (path.length > 0) {\n value = Entity.GetValue({\n entity: data,\n path: path\n });\n }\n str = str.replace(variable.text, value);\n }\n else {\n break;\n }\n }\n return str;\n }\n}","import { Color } from \"../common/color\";\r\nimport { Entity } from \"../entity/entity\";\r\nimport { BruceVariable } from \"../common/bruce-variable\";\r\nimport { PathUtils } from \"../util/path-utils\";\r\n\r\n/**\r\n * Example: ${Test.Test1}\r\n * Needs to become [\"Test\", \"Test1\"].\r\n * We need to cull this in admin-ui.\r\n * @param path\r\n * @returns Possible paths this legacy one could mean.\r\n */\r\nfunction parseLegacyPath(path: string): string[][] {\r\n if (!path) {\r\n return [];\r\n }\r\n let paths = [];\r\n if (path.startsWith(\"${\") && path.endsWith(\"}\")) {\r\n path = path.replace(\"${\", \"\");\r\n path = path.replace(\"}\", \"\");\r\n }\r\n // Split by dots.\r\n paths.push(PathUtils.ParseLegacy(path));\r\n // Take string as is.\r\n paths.push([path]);\r\n // Split by backslashes.\r\n paths.push(PathUtils.Parse(path));\r\n // Remove duplicates.\r\n const tmpPaths = [];\r\n for (let i = 0; i < paths.length; i++) {\r\n const path = paths[i];\r\n let found = false;\r\n for (let j = 0; j < tmpPaths.length; j++) {\r\n const tmpPath = tmpPaths[j];\r\n if (tmpPath.length == path.length) {\r\n let match = true;\r\n for (let k = 0; k < tmpPath.length; k++) {\r\n const tmpPathPart = tmpPath[k];\r\n const pathPart = path[k];\r\n if (tmpPathPart != pathPart) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n if (match) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!found) {\r\n tmpPaths.push(path);\r\n }\r\n }\r\n paths = tmpPaths;\r\n return paths;\r\n}\r\n\r\n/**\r\n * Utility for calculating values from Bruce fields.\r\n * These fields are typically found in entity styles.\r\n */\r\nexport namespace Calculator {\r\n export enum EValueType {\r\n Color,\r\n Input,\r\n Gradient,\r\n Mapping,\r\n TagColor,\r\n RandomColor\r\n }\r\n\r\n export interface IMappingOption {\r\n fieldValue: string;\r\n appliedValue: string;\r\n }\r\n\r\n export interface IMappingValue {\r\n field: string;\r\n values: IMappingOption[];\r\n }\r\n\r\n export interface IGradientPoint {\r\n position: number;\r\n color: string;\r\n }\r\n\r\n export interface IGradientValue {\r\n field: string;\r\n min: number;\r\n max: number;\r\n points: IGradientPoint[];\r\n }\r\n\r\n export interface IField {\r\n value: IGradientValue | IMappingValue | string | number;\r\n type: EValueType;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options.\r\n * The context calling this should validate results and parse stuff if needed.\r\n * @deprecated use specific calls: eg GetColor or GetNumber.\r\n * @param fields\r\n * @param entity\r\n * @param tags\r\n * @returns\r\n */\r\n export function GetValue(fields: IField[], entity: Entity.IEntity, tags: any[]): string | number | Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n if (value) {\r\n value = Color.ColorFromStr(value);\r\n }\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options with assumption that desired result is a color.\r\n * Will return null if a color is not found.\r\n * @param fields\r\n * @param entity\r\n * @param tags\r\n */\r\n export function GetColor(fields: IField[], entity: Entity.IEntity, tags: any[]): Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (typeof value === \"string\") {\r\n value = Color.ColorFromStr(value);\r\n }\r\n if (value && typeof value === \"object\" && (value.red || value.red == 0)) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetNumber(fields: IField[], entity: Entity.IEntity, tags: any[]): number {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n }\r\n if (value != \"\" && value != null && value != undefined) {\r\n value = Number(value);\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetString(fields: IField[], entity: Entity.IEntity, tags: any[]): string {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Gradient:\r\n value = String(GetGradientValue(<IGradientValue>field.value, entity));\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n value = String(GetInputValue(<string>field.value, entity));\r\n break;\r\n case EValueType.Mapping:\r\n value = String(GetMappingValue(<IMappingValue>field.value, entity));\r\n break;\r\n case EValueType.RandomColor:\r\n var color = Color.RandomColor();\r\n value = `rgba(${color.red},${color.green},${color.blue},${color.alpha})`;\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = tag.Color;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetMappingValue(value: IMappingValue, entity: Entity.IEntity): string | number {\r\n const attrPaths: string[][] = parseLegacyPath(value.field);\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const attrPath = attrPaths[i];\r\n let eValue: any = Entity.GetValue({\r\n entity: entity,\r\n path: attrPath\r\n });\r\n const isValueNum = !isNaN(+eValue);\r\n\r\n for (let i = 0; i < value.values.length; i++) {\r\n const option = value.values[i];\r\n const mapValue = option.fieldValue;\r\n const isMapValueNum = !isNaN(+mapValue);\r\n\r\n if (isValueNum && (isMapValueNum || mapValue.includes(\"-\"))) {\r\n if (+mapValue == +eValue) {\r\n return option.appliedValue;\r\n }\r\n const mapSplit = mapValue.split(\"-\");\r\n if (mapSplit.length == 2) {\r\n const min = mapSplit[0];\r\n const max = mapSplit[1];\r\n if (min != \"\") {\r\n if (+eValue < +min) {\r\n continue;\r\n }\r\n }\r\n if (max != \"\") {\r\n if (+eValue > +max) {\r\n continue;\r\n }\r\n }\r\n if (min == \"\" && max == \"\") {\r\n continue;\r\n }\r\n return option.appliedValue;\r\n }\r\n }\r\n else {\r\n if (mapValue == eValue) {\r\n return option.appliedValue;\r\n }\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetGradientValue(value: IGradientValue, entity: Entity.IEntity): Color.IColor {\r\n const attrPaths: string[][] = parseLegacyPath(value.field);\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const attrPath = attrPaths[i];\r\n let eValue: any = Entity.GetValue({\r\n entity: entity,\r\n path: attrPath\r\n });\r\n eValue = Math.min(Math.max(eValue, value.min), value.max);\r\n if (eValue < value.points[0].position) {\r\n return Color.ColorFromStr(value.points[0].color);\r\n }\r\n for (let i = 0; i < value.points.length - 1; i++) {\r\n const pointA = value.points[i];\r\n const pointB = value.points[i+1];\r\n\r\n if (eValue >= pointA.position && eValue <= pointB.position) {\r\n if (pointA.position == pointB.position) {\r\n return Color.ColorFromStr(pointA.color);\r\n }\r\n const distance = (eValue - pointA.position)/(pointB.position - pointA.position);\r\n const colorA = Color.ColorFromStr(pointA.color);\r\n const colorB = Color.ColorFromStr(pointB.color);\r\n return {\r\n red: colorA.red + (colorB.red - colorA.red) * distance,\r\n green: colorA.green + (colorB.green - colorA.green) * distance,\r\n blue: colorA.blue + (colorB.blue - colorA.blue) * distance,\r\n alpha: colorA.alpha + (colorB.alpha - colorA.alpha) * distance\r\n }\r\n }\r\n }\r\n }\r\n return Color.ColorFromStr(value.points[value.points.length - 1].color);\r\n }\r\n\r\n export function GetInputValue(value: string, entity: Entity.IEntity): string | number {\r\n if (typeof value == \"string\") {\r\n try {\r\n value = BruceVariable.SwapValues({\r\n str: value,\r\n entity: entity\r\n });\r\n // Check if it includes a math operation.\r\n const MATH_REGEX = /(\\d+\\.?\\d*|\\.\\d+)([+\\-*/])(\\d+\\.?\\d*|\\.\\d+)/;\r\n if (MATH_REGEX.test(value)) {\r\n // https://rollupjs.org/guide/en/#avoiding-eval\r\n // This stops eval warning.\r\n const eval2 = eval;\r\n return eval2(value);\r\n }\r\n }\r\n catch (exception) {\r\n const e = exception as any;\r\n let suppress: boolean = false;\r\n if (e && typeof e == \"object\") {\r\n const msg: string = e.message;\r\n suppress = !!msg && (msg.includes(\"Unexpected end\") || msg.includes(\"got end of script\"));\r\n }\r\n if (!suppress) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n}","import { Carto } from \"./carto\";\n\n/**\n * Describes vector geometry that Bruce uses.\n */\nexport namespace Geometry {\n export interface IGeometry {\n // Polygon array is an array of rings.\n // There should be 1 outer ring and 0 or more inner rings.\n Polygon?: IPolygonRing[];\n MultiGeometry?: IGeometry[];\n Point?: string;\n LineString?: string;\n MultiSurface?: string;\n }\n\n export interface IPolygonRing {\n LinearRing: string;\n Facing: EPolygonRingType;\n Height?: number;\n }\n\n export enum EPolygonRingType {\n Boundaries = \"out\",\n Hole = \"in\"\n }\n\n /**\n * Turns an array of points into string vector geometry that Bruce can use.\n * This is used for saving polyline and polygon data.\n * @param points \n * @returns \n */\n export function LineStrFromPoints(points: Carto.ICarto[]): string {\n if (!points.length) {\n throw(\"points is empty.\");\n }\n let carto: Carto.ICarto = points[0];\n let lineString = `${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\n for (let i = 1; i < points.length; i++) {\n carto = points[i];\n lineString += ` ${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\n }\n return lineString;\n }\n\n /**\n * Removes same points that occur in a row.\n * This will not modify the original array.\n * @param positions \n * @returns \n */\n export function RemoveRepeatPoints(positions: Carto.ICarto[]): Carto.ICarto[] {\n const filteredList = [];\n for (let i = 0; i < positions.length; i++) {\n const pos = positions[i];\n const lastPos = filteredList.length > 0 ? filteredList[filteredList.length - 1] : null;\n if (!lastPos || (pos.latitude != lastPos.latitude || pos.longitude != lastPos.longitude || pos.altitude != lastPos.altitude)) {\n filteredList.push(pos); \n }\n }\n return filteredList;\n }\n\n export function ParsePoints(pointsStr: string): Carto.ICarto[] {\n pointsStr = pointsStr.replace(/[^\\d.,-\\s]/g, \"\");\n\n let splitterCoordinates = \" \";\n let splitterAxis = \",\";\n const commaIndex = pointsStr.indexOf(\",\");\n const spaceIndex = pointsStr.indexOf(\" \");\n if ((spaceIndex > -1 && commaIndex > spaceIndex) || commaIndex <= -1) {\n splitterCoordinates = \",\";\n splitterAxis = \" \";\n }\n\n let points = pointsStr.trim().split(splitterCoordinates);\n points = points.filter(a => a != \"\");\n\n const result: Carto.ICarto[] = [];\n for (let i = 0; i < points.length; i++) {\n const pointData = points[i];\n const coords = pointData.trim().split(splitterAxis);\n if (coords.length == 2 || coords.length == 3) {\n const longitude = Number(coords[0]);\n const latitude = Number(coords[1]);\n const altitude = Number(coords.length >= 3 ? coords[2] : 0);\n if (longitude != null && latitude != null) {\n result.push({\n altitude: altitude,\n latitude: latitude,\n longitude: longitude\n });\n }\n else {\n console.warn(\"Invalid point data detected.\", pointData);\n }\n }\n }\n return result;\n }\n\n /**\n * Parses both string and object Bruce geometry.\n * String geometry is legacy Bruce data.\n * @param geometry \n * @returns \n */\n export function ParseGeometry(geometry: any): IGeometry {\n if (typeof geometry == \"string\") {\n let positions: Carto.ICarto[] = [];\n const geometryParsed: string[] = (geometry || \"\").split(\";\");\n for (let i = 0; i < geometryParsed.length; i++) {\n const data = geometryParsed[i];\n const points = ParsePoints(data);\n if (points && points.length > 0) {\n positions = positions.concat(points);\n }\n }\n positions = RemoveRepeatPoints(positions);\n const newGeometry: IGeometry = {};\n if (positions.length > 0) {\n const topPoint = positions[0];\n newGeometry.Point = `${topPoint.latitude},${topPoint.longitude}` + (topPoint.altitude != null ? `,${topPoint.altitude}` : \"\");\n if (positions.length > 1) {\n newGeometry.Polygon = [{ Facing: EPolygonRingType.Boundaries, LinearRing: LineStrFromPoints(positions) }];\n }\n if (positions.length > 2) {\n newGeometry.LineString = LineStrFromPoints(positions);\n }\n }\n return newGeometry;\n }\n return geometry;\n }\n}","import { Entity } from \"../entity/entity\";\nimport { Carto } from \"./carto\";\nimport { Geometry } from \"./geometry\";\n\nexport namespace Bounds {\n /**\n * Description of an entity's bounding box.\n */\n export interface IBounds {\n maxLatitude: number;\n maxLongitude: number;\n minLatitude: number;\n minLongitude: number;\n maxAltitude: number;\n minAltitude: number;\n }\n\n /**\n * Describes the boundaries used in entity requests.\n */\n export interface IReqBounds {\n south: number;\n west: number;\n north: number;\n east: number;\n\n // Used to exclude requests from UI that fall outside of min-max boundaries.\n // TODO: Migrate into \"entity-filter-getter.ts\", \"entity-globe.ts\" and then remove from here.\n alt?: number;\n }\n\n /**\n * Calculates boundaries from entity.\n * This will not use the set entity boundaries and instead calculate from geometry and location.\n * @param entity \n */\n export function FromEntity(entity: Entity.IEntity): IBounds {\n const bounds: IBounds = {\n maxAltitude: null,\n maxLatitude: null,\n maxLongitude: null,\n minAltitude: null,\n minLatitude: null,\n minLongitude: null\n };\n const points: Carto.ICarto[] = [];\n if (entity.location) {\n points.push(entity.location);\n }\n if (entity.geometry) {\n if (entity.geometry.Point) {\n points.push(...Geometry.ParsePoints(entity.geometry.Point));\n }\n if (entity.geometry.LineString) {\n points.push(...Geometry.ParsePoints(entity.geometry.LineString));\n }\n if (entity.geometry.Polygon) {\n for (const ring of entity.geometry.Polygon) {\n points.push(...Geometry.ParsePoints(ring.LinearRing));\n }\n }\n }\n for (const point of points) {\n if (bounds.maxLatitude == null || point.latitude > bounds.maxLatitude) {\n bounds.maxLatitude = point.latitude;\n }\n if (bounds.maxLongitude == null || point.longitude > bounds.maxLongitude) {\n bounds.maxLongitude = point.longitude;\n }\n if (bounds.maxAltitude == null || point.altitude > bounds.maxAltitude) {\n bounds.maxAltitude = point.altitude;\n }\n if (bounds.minLatitude == null || point.latitude < bounds.minLatitude) {\n bounds.minLatitude = point.latitude;\n }\n if (bounds.minLongitude == null || point.longitude < bounds.minLongitude) {\n bounds.minLongitude = point.longitude;\n }\n if (bounds.minAltitude == null || point.altitude < bounds.minAltitude) {\n bounds.minAltitude = point.altitude;\n }\n }\n return bounds;\n }\n}","interface IBruceEventCallback {\n _id: number;\n removeCallback: () => void;\n callback: (data: any) => void;\n}\n\n/**\n * Simple event utility.\n * Instantiate the model, then subscribe and trigger events.\n */\nexport class BruceEvent<TArgs> {\n // Counter to help differentiate subscriptions.\n private _counter: number = 0;\n\n // Record of all callback subscriptions for this event.\n private callbacks: IBruceEventCallback[] = [];\n\n\n public Subscribe(callback: (data: TArgs) => void): (() => void) {\n let id = this._counter++;\n let newBruceEventCallback: IBruceEventCallback = {\n \t_id: id,\n \tremoveCallback: () => {\n \t\tthis.Unsubscribe(id);\n \t},\n \tcallback: callback\n };\n this.callbacks.push(newBruceEventCallback);\n return newBruceEventCallback.removeCallback;\n }\n\n public Unsubscribe(id: number): void {\n let index = this.callbacks.findIndex(x => x._id == id);\n if (index > -1) {\n this.callbacks.splice(index, 1);\n }\n }\n\n public Trigger(data?: TArgs): void {\n let callbacks = this.callbacks;\n for (let i = 0; i < callbacks.length; i++) {\n let callback = callbacks[i];\n if (callback.callback) {\n callback.callback(data);\n }\n }\n }\n\n public Clear(): void {\n this.callbacks = [];\n }\n}","export namespace Camera {\n export enum EFrustum {\n Perspective,\n Orthographic\n }\n}","/**\n * Describes 2d and 3d coordinates.\n * \n * In 2d the x/y typically refers to a window left/top offset.\n * In 3d the x/y/z, the units are in meters.\n */\nexport namespace Cartes {\n export interface ICartes2 {\n x: number;\n y: number;\n }\n\n export interface ICartes3 extends ICartes2 {\n z: number;\n }\n\n export function ValidateCartes2(cartes: ICartes2): boolean {\n if (!cartes) {\n return false;\n }\n else if (!cartes.x && cartes.x != 0) {\n return false;\n }\n else if (!cartes.y && cartes.y != 0) {\n return false;\n }\n return true;\n }\n\n export function ValidateCartes3(cartes: ICartes3): boolean {\n if (!ValidateCartes2(cartes)) {\n return false;\n }\n else if (!cartes.z && cartes.z != 0) {\n return false;\n }\n return true;\n }\n\n export function IsEqualCartes2(a: ICartes2, b: ICartes2): boolean {\n if (a.x != b.x) {\n return false;\n }\n else if (a.y != b.y) {\n return false;\n }\n return true;\n }\n\n export function IsEqualCartes3(a: ICartes3, b: ICartes3): boolean {\n if (!IsEqualCartes2(a, b)) {\n return false;\n }\n else if (a.z != b.z) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the given ring is closed.\n * A ring is closed if the first and last point are equal.\n * A ring with less than 2 points is not closed.\n * @param points \n * @returns \n */\n export function IsRing2Closed(points: ICartes2[]) {\n if (points.length < 2) {\n return false;\n }\n else if (!IsEqualCartes2(points[0], points[points.length - 1])) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the given ring is closed.\n * A ring is closed if the first and last point are equal.\n * A ring with less than 2 points is not closed.\n * @param points \n * @returns \n */\n export function IsRing3Closed(points: ICartes3[]) {\n if (points.length < 2) {\n return false;\n }\n else if (!IsEqualCartes3(points[0], points[points.length - 1])) {\n return false;\n }\n return true;\n }\n\n /**\n * Closes given ring by adding the first point to the end of the array.\n * This will mutate the given array.\n * Will not do anything if the ring is already closed.\n * @param points \n * @returns \n */\n export function CloseRing2(points: ICartes2[]) {\n if (points.length < 2) {\n return;\n }\n else if (IsRing2Closed(points)) {\n return;\n }\n points.push(points[0]);\n }\n\n /**\n * Closes given ring by adding the first point to the end of the array.\n * This will mutate the given array.\n * Will not do anything if the ring is already closed.\n * @param points \n * @returns \n */\n export function CloseRing3(points: ICartes3[]) {\n if (points.length < 2) {\n return;\n }\n else if (IsRing3Closed(points)) {\n return;\n }\n points.push(points[0]);\n }\n}","/**\n * Describes a geographic point.\n * The units of the stored data should be in Degrees.\n * Utilities may use this in Radians for temporary calculations.\n */\nexport namespace Carto {\n export interface ICarto {\n latitude: number;\n longitude: number;\n altitude: number;\n }\n\n export function ValidateCarto(carto: ICarto): boolean {\n if (!carto) {\n return false;\n }\n else if (!carto.longitude && carto.longitude != 0) {\n return false;\n }\n else if (!carto.latitude && carto.latitude != 0) {\n return false;\n }\n return true;\n }\n\n export function IsEqual(a: ICarto, b: ICarto): boolean {\n if (a.longitude != b.longitude) {\n return false;\n }\n else if (a.latitude != b.latitude) {\n return false;\n }\n return true;\n }\n\n export function GetCenter(list: ICarto[]): ICarto {\n let center = { \n longitude: 0, \n latitude: 0, \n altitude: 0 \n };\n for (let i = 0; i < list.length; i++) {\n const carto = list[i];\n center.longitude += carto.longitude;\n center.latitude += carto.latitude;\n if (carto.altitude) {\n center.altitude += carto.altitude;\n }\n }\n if (center.longitude) {\n center.longitude /= list.length;\n }\n if (center.latitude) {\n center.latitude /= list.length;\n }\n if (center.altitude) {\n center.altitude /= list.length;\n }\n return center;\n }\n}","/**\n * Controls the flow of method calls.\n * If you have a method that may be called often, but you don't want it to run often, use this.\n */\nexport class DelayQueue {\n // The callback is the method we want to control queue for.\n private callback: () => void;\n\n // Millisecond delay.\n public delay: number = 200;\n\n // Date-time stamp for the last callback call.\n private lastCallTime: number = <any>null;\n\n // The delay timeout for calling update.\n private delayTimeout: any;\n\n\n constructor(callback: () => void, delay: number = 200) {\n this.callback = callback;\n this.delay = delay;\n }\n\n public Call(force: boolean = false): void {\n if (this.lastCallTime == null) {\n force = true;\n }\n if (force) {\n let endDate = new Date().getTime();\n this.doCall(endDate);\n }\n else {\n const endDate = new Date().getTime();\n const seconds = (endDate - this.lastCallTime) / 1000;\n const delay = this.delay / 1000;\n if (seconds > delay) {\n this.doCall(endDate);\n }\n else if (this.delayTimeout == null) {\n const diff = (delay - seconds) * 1000;\n this.delayTimeout = setTimeout(() => {\n this.delayTimeout = null;\n this.Call();\n }, diff + 0.02);\n }\n }\n }\n\n private doCall(endDate: number): void {\n if (this.delayTimeout != null) {\n clearTimeout(this.delayTimeout);\n this.delayTimeout = null;\n }\n this.lastCallTime = endDate;\n this.callback();\n }\n\n public Dispose(): void {\n if (this.delayTimeout != null) {\n clearTimeout(this.delayTimeout);\n this.delayTimeout = null;\n }\n }\n}","/**\n * Describes a Bruce stored date.\n */\nexport namespace UTC {\n export enum EMonth {\n January = 1,\n February = 2,\n March = 3,\n April = 4,\n May = 5,\n June = 6,\n July = 7,\n August = 8,\n September = 9,\n October = 10,\n November = 11,\n December = 12\n }\n\n export interface IUTC {\n d: number;\n hh: number;\n m: EMonth | number;\n mm: number;\n ss: number;\n y: number;\n }\n\n export function ToDate(utc: IUTC): Date {\n return new Date(utc.y, utc.m - 1, utc.d, utc.hh, utc.mm, utc.ss, 0);\n }\n\n export function FromDate(date: Date): IUTC {\n return {\n y: date.getUTCFullYear(),\n m: date.getUTCMonth() + 1,\n d: date.getUTCDate(),\n hh: date.getUTCHours(),\n mm: date.getUTCMinutes(),\n ss: date.getUTCSeconds()\n };\n }\n}","export class LRUCache<TKey, TValue> {\n private readonly capacity: number;\n private readonly cache: Map<TKey, TValue>;\n\n constructor(capacity: number) {\n this.capacity = capacity;\n this.cache = new Map<TKey, TValue>();\n }\n\n public Get(key: TKey): TValue | undefined {\n const value = this.cache.get(key);\n if (value) {\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n public Set(key: TKey, value: TValue): void {\n if (this.cache.size >= this.capacity) {\n const leastRecentlyUsedKey = this.cache.keys().next().value;\n this.cache.delete(leastRecentlyUsedKey);\n }\n this.cache.set(key, value);\n }\n}\n","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype Type = EntityAttachmentType.EType | string;\n\n/**\n * Describes the \"Entity Attachment Type\" concept within Bruce.\n * It is a record that describes the purpose of an attachment.\n */\nexport namespace EntityAttachmentType {\n export function GetCacheKey(id: Type): string {\n return Api.ECacheKey.AttachmentType + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.AttachmentType;\n }\n\n export interface IType {\n Description: string;\n ID: string | EType;\n Name: string;\n }\n\n export enum EType {\n Photo = \"photo\",\n Document = \"document\"\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n attachmentTypeId: Type,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, attachmentTypeId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Type ID is required.\");\n }\n await api.DELETE(`entityAttachmentType/${id}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(id));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n attachmentType: IType,\n req?: Api.IReqParams\n }): Promise<{\n attachmentType: IType\n }> {\n let { api, attachmentType: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.ID) {\n throw(\"Type ID is required.\");\n }\n const res = await api.POST(`entityAttachmentType/${data.ID}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n attachmentType: res\n };\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n reqParams?: Api.IReqParams\n }): Promise<{\n attachmentTypes: IType[]\n }> {\n let { api, reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entityAttachmentTypes`, Api.PrepReqParams(reqParams));\n res({\n attachmentTypes: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ClientFile } from \"../client-file/client-file\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { EntityAttachmentType } from \"./entity-attachment-type\";\n\ntype Type = EntityAttachmentType.EType | string;\n\n/**\n * Describes the \"Entity Attachment\" concept within Bruce.\n * An entity attachment is an arbitrary file record that is linked to an entity record.\n * The same file can be attached to multiple entities.\n */\nexport namespace EntityAttachment {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.Attachment + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(entityId: string): string {\n return Api.ECacheKey.Attachment + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface IAttachment {\n ID: number;\n ClientFile?: ClientFile.IClientFile;\n Group?: string;\n \"ClientFile.ID\": string;\n DisplayOrder?: number;\n \"Entity.ID\": string;\n \"EntityAttachmentType.ID\": Type;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n entityId: string,\n attachments: IAttachment[],\n req?: Api.IReqParams\n }): Promise<{\n attachments: IAttachment[]\n }> {\n let { api, attachments, req, entityId } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!attachments?.length) {\n return {\n attachments: []\n };\n }\n const res = await api.POST(`entity/${entityId}/attachments`, {\n attachments\n }, Api.PrepReqParams(req));\n for (let i = 0; i < attachments.length; i++) {\n if (attachments[i].ID) {\n api.Cache.Remove(GetCacheKey(attachments[i].ID));\n }\n }\n await api.Cache.Remove(GetListCacheKey(entityId));\n return {\n attachments: res.attachments\n };\n }\n\n export async function UpdateOrder(params: {\n api?: BruceApi.Api,\n entityId: string,\n attachmentTypeId: Type,\n attachments: IAttachment[],\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, attachmentTypeId: typeId, attachments, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId || !typeId || !attachments?.length) {\n throw(\"Entity ID, Type ID, and Attachments are required.\");\n }\n const reqData = {\n \t\"DisplayOrder.Start\": 0,\n \t\"ClientFile.ID\": attachments.map(x => x[\"ClientFile.ID\"])\n };\n await api.POST(`entity/${entityId}/attachments/${typeId}/setOrder`, reqData, Api.PrepReqParams(reqParams));\n for (let i = 0; i < attachments.length; i++) {\n api.Cache.Remove(GetCacheKey(attachments[i].ID));\n }\n await api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n attachmentId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, attachmentId, entityId, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!attachmentId || !entityId) {\n throw(\"Entity id and attachment id.\");\n }\n await api.DELETE(`entity/${entityId}/attachments/${attachmentId}`, Api.PrepReqParams(req));\n await api.Cache.Remove(GetCacheKey(attachmentId));\n await api.Cache.Remove(GetListCacheKey(params.entityId));\n }\n\n export async function GetListByEntityId(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n attachments: IAttachment[]\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const cache = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/${entityId}/attachments`, Api.PrepReqParams(reqParams));\n res({\n attachments: (data.attachments ? data.attachments : data.Items)\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityId),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Upload(params: {\n api?: BruceApi.Api,\n file: Blob,\n entityId: string,\n attachmentTypeId: Type,\n req?: Api.IUploadReqParams\n }): Promise<{\n attachment: IAttachment\n }> {\n let { api, file, entityId, attachmentTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId || !typeId || !file) {\n throw(\"Entity ID, Type ID, and File are required.\");\n }\n const url = `entity/${entityId}/attachment/${typeId}`;\n const res = await api.UPLOAD(url, file, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetListCacheKey(entityId));\n return {\n attachment: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Entity Comment\" concept within Bruce.\n * An entity comment is a user written message that is linked to an entity record.\n */\nexport namespace EntityComment {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.Comment + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(entityId: string): string {\n return Api.ECacheKey.Comment + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface IComment {\n Comment: string;\n \"Created.ByUser.ID\": string;\n \"Created.Date\": UTC.IUTC;\n ID: number;\n RepliesCount: number;\n \"ReplyTo.Comment.ID\": number;\n \"TargetObject.ID\": string;\n \"TargetObject.Type\": string;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n comment: IComment,\n req?: Api.IReqParams\n }): Promise<{\n comment: IComment\n }> {\n let { api, comment: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.[\"TargetObject.ID\"]) {\n throw(\"TargetObject.ID (entity id) is required.\");\n }\n const url = `entity/${data[\"TargetObject.ID\"]}/comment` + (data.ID == null ? \"\" : \"/\" + data.ID);\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\n return {\n comment: res\n };\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n commentId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, commentId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!commentId) {\n throw(\"Comment ID is required.\");\n }\n await api.DELETE(`entity/${entityId}/comment/${commentId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(commentId));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\n }\n\n export async function GetListByEntityId(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n comments: IComment[]\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const cache = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/${entityId}/comments`, Api.PrepReqParams(reqParams));\n res({\n comments: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityId),\n value: req,\n req: reqParams\n });\n return req;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Entity Link\" concept within Bruce.\n * An entity link is a URL linked to an entity record.\n */\nexport namespace EntityLink {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.Link + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(entityId: string): string {\n return Api.ECacheKey.Link + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface ILink {\n DisplayName: string;\n ID?: number;\n \"Entity.ID\": string;\n URL: string;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n link: ILink,\n req?: Api.IReqParams\n }): Promise<{\n link: ILink\n }> {\n let { api, link: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.[\"Entity.ID\"]) {\n throw(\"Entity ID is required.\");\n }\n const url = `entity/${data[\"Entity.ID\"]}/link` + (data.ID == null ? \"\" : \"/\" + data.ID);\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(<number>data.ID));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\n return {\n link: res\n };\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n linkId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, linkId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n \n if (!linkId) {\n throw(\"Link ID is required.\");\n }\n await api.DELETE(`entity/${entityId}/link/${linkId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(linkId));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\n }\n\n export async function GetListByEntityId(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n links: ILink[]\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const cache = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/${entityId}/links`, Api.PrepReqParams(reqParams));\n res({\n links: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityId),\n value: req,\n req: reqParams\n });\n return req;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ClientFile } from \"../client-file/client-file\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Entity LOD\" concept within Bruce.\n * LOD stands for Level of Detail.\n * An lod record is a possible 2d/3d visualization of the entity record.\n * The most common kind is a GLB.\n */\nexport namespace EntityLod {\n export function GetCacheKey(url: string): string {\n return Api.ECacheKey.Lod + Api.ECacheKey.Id + url;\n }\n\n export function GetTypeListKey(typeId: string, group: string): string {\n return Api.ECacheKey.Lod + Api.ECacheKey.EntityType + typeId + Api.ECacheKey.Id + group;\n }\n\n export function GetEntityListKey(entityId: string): string {\n return Api.ECacheKey.Lod + Api.ECacheKey.Entity + entityId;\n }\n\n export interface ILod {\n ClientFile?: ClientFile.IClientFile;\n \"ClientFile.ID\": string;\n \"Entity.ID\": string;\n \"LODCategory.Key\": string;\n Level: number;\n Group?: string;\n }\n\n export interface IEntityLodUpdate {\n \"ClientFile.ID\": string;\n \"LODCategory.Key\": string;\n Level: number;\n }\n\n export function GetUrl(params: {\n api?: BruceApi.Api,\n entityId: string,\n categoryId: string,\n level: number,\n strict?: boolean\n }): {\n url: string\n } {\n let { api, entityId, categoryId, level, strict } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n if (!categoryId) {\n categoryId = \"GLB\";\n }\n if (!level) {\n level = 0;\n }\n let url: string = api.GetBaseUrl() + `entity/${entityId}/lod/${categoryId}/${level}`;\n if (strict) {\n url = url + \"?strict=true\";\n }\n return {\n url: url\n };\n }\n\n export async function GetUrlFileId(params: {\n api?: BruceApi.Api,\n url: string,\n req?: Api.IReqParams\n }): Promise<{\n clientFileId: string\n }> {\n let { api, url, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!url) {\n throw(\"Url is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(url), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const record: ILod = await api.get(url, Api.PrepReqParams(reqParams));\n res({\n clientFileId: record[\"ClientFile.ID\"]\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(url),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function GetLods(params: {\n api?: BruceApi.Api,\n filter: Filter.IListParams,\n req?: Api.IReqParams\n }): Promise<{\n lods: Filter.IListResItem[]\n }> {\n let { api, filter, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!filter?.Items?.length) {\n throw(\"Items are required.\");\n }\n const data = await api.POST(\"entity/getlods\", filter, reqParams);\n return {\n lods: data.Items\n };\n }\n\n export async function GetEntityLods(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n lods: ILod[]\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity id is required.\");\n }\n const cache = await api.GetCacheItem(GetEntityListKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req = api.GET(`entity/${entityId}/lods?includeClientFiles=yes`, Api.PrepReqParams(reqParams));\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n lods: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetEntityListKey(entityId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n /**\n * Returns lods for a specified entity type.\n * @param params\n */\n export async function GetTypeLods(params: {\n api?: BruceApi.Api,\n entityTypeId: string,\n group?: string,\n req?: Api.IReqParams\n }): Promise<{\n lods: ILod[]\n }> {\n let { api, entityTypeId: typeId, group, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!group) {\n group = \"DEFAULT\";\n }\n const cache = await api.GetCacheItem(GetTypeListKey(typeId, group), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const url = `entityType/${typeId}/lods?includeClientFiles=yes` + (group ? \"&group=\" + group : \"\");\n const req = api.GET(url, Api.PrepReqParams(reqParams));\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n lods: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetTypeListKey(typeId, group),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n } & IEntityLodUpdate): Promise<void> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!params[\"ClientFile.ID\"] || !params[\"LODCategory.Key\"] || (!params.Level && params.Level !== 0)) {\n throw(\"ClientFile.ID, LODCategory.Key and Level are required.\");\n }\n const res = await api.POST(`entity/${entityId}/lod/${params[\"LODCategory.Key\"]}/${params.Level}`, {\n \"Level\": params.Level,\n \"ClientFile.ID\": params[\"ClientFile.ID\"]\n }, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetEntityListKey(entityId));\n return res;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityId: string,\n lodCategoryId: string,\n level: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityId, lodCategoryId, level, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId || !lodCategoryId) {\n throw(\"Entity ID and LOD Category ID are required.\");\n }\n level = +level;\n if (isNaN(level)) {\n throw(\"Level is required. It must be a number.\");\n }\n await api.POST(`entity/${entityId}/deleteLODs`, {\n Items: [{ \"LODCategory.Key\": lodCategoryId, \"Level\": level }]\n }, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetEntityListKey(entityId));\n }\n\n export namespace Filter {\n export interface IListParamsItem {\n \"entityId\": string,\n \"categoryId\": string,\n \"group\"?: string,\n \"level\"?: number\n }\n\n export interface IListParams {\n \"strict\": boolean,\n \"externalSources\": boolean,\n \"Items\": IListParamsItem[]\n }\n\n export interface IListResItem {\n clientFileId: string;\n entityId: string;\n accountId: string;\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\nexport namespace EntityLodCategory {\n export function GetCacheKey(id: string): string {\n return Api.ECacheKey.LodCategory + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.LodCategory;\n }\n\n export interface ICategory {\n Description?: string;\n Key: string;\n Name: string;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n categories: ICategory[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"lodCategories\", Api.PrepReqParams(reqParams));\n res({\n categories: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n categoryId: string,\n req?: Api.IReqParams\n }): Promise<{\n category: ICategory\n }> {\n let { api, categoryId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Lod category id is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(id), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`lodCategory/${id}`, Api.PrepReqParams(reqParams));\n res({\n category: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n categoryId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, categoryId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Lod category id is required.\");\n }\n await api.DELETE(`lodCategory/${id}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(id));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n category: ICategory,\n req?: Api.IReqParams\n }): Promise<{\n category: ICategory\n }> {\n let { api, category: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data.Key || !data.Name) {\n throw(\"Lod category key and name are required.\");\n }\n const res = await api.POST(`lodCategory/${data.Key}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.Key));\n api.Cache.Remove(GetListCacheKey());\n return {\n category: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { ObjectUtils } from \"../util/object-utils\";\n\n/**\n * Describes the \"Entity Relationship Type\" concept within Bruce.\n * A relationship type record describes the purpose of a relationship.\n */\nexport namespace EntityRelationType {\n export function GetCacheKey(id: string): string {\n return Api.ECacheKey.RelationType + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.RelationType;\n }\n\n export interface IType {\n ID: string;\n ForwardName: string;\n ReverseName: string;\n Name: string;\n FlipDisplayDirection?: boolean;\n EntityDisplaySettingID?: string;\n \"Relation.EntityType.ID\"?: string;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n relationTypeId: string,\n req?: Api.IReqParams\n }): Promise<{\n relationType: IType\n }> {\n let { api, relationTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!typeId) {\n throw(\"Type ID is required.\");\n }\n const key = GetCacheKey(typeId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entityRelationType/${typeId}`, Api.PrepReqParams(reqParams));\n res({\n relationType: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n relationTypeId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, relationTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!typeId) {\n throw(\"Type ID is required.\");\n }\n await api.DELETE(`entityRelationType/${typeId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(typeId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n relationTypes: IType[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"entityRelationTypes\", Api.PrepReqParams(reqParams));\n res({\n relationTypes: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n relationType: IType,\n req?: Api.IReqParams\n }): Promise<{\n relationType: IType\n }> {\n let { api, relationType: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.ForwardName || !data?.ReverseName) {\n throw(\"Forward and reverse names are required.\");\n }\n if (!data.ID) {\n data.ID = ObjectUtils.UId();\n }\n const res = await api.POST(`entityRelationType/${data.ID}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n relationType: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Entity } from \"./entity\";\n\n/**\n * Describes the \"Entity Relationship\" concept within Bruce.\n * An entity relationship is an arbitrary link between two entity records.\n * The relationship can have a \"data entity\" linked to it as well for the relationship to store arbitrary data about itself.\n */\nexport namespace EntityRelation {\n export function GetCacheKey(entityA: string, entityB: string, typeId: string): string {\n return `${Api.ECacheKey.Relation}${Api.ECacheKey.Id}${entityA}${Api.ECacheKey.Id}${entityB}${Api.ECacheKey.Id}${typeId}`;\n }\n\n export function GetEntityCacheKey(entityId: string): string {\n return Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export function GetListCacheKey(entityId: string, params: IListParams): string {\n return Api.ECacheKey.Relation + Api.ECacheKey.RelationType +\n Api.ECacheKey.Id + params.relationTypeId +\n Api.ECacheKey.Id + params.oneWayOnly +\n Api.ECacheKey.Id + params.loadEntityData +\n Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface IRelation {\n \"Principal.Entity.ID\": string;\n \"Related.Entity.ID\": string;\n RelatedEntity?: Entity.IEntity;\n PrincipalEntity?: Entity.IEntity;\n \"Relation.Type.ID\": string;\n RelationType?: any;\n \"Data.Entity.ID\"?: string;\n }\n\n export interface IListParams {\n relationTypeId?: string;\n oneWayOnly?: boolean;\n loadEntityData?: boolean;\n }\n\n export async function Create(params: {\n api?: BruceApi.Api,\n relation: IRelation,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, relation: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data[\"Principal.Entity.ID\"] || !data[\"Related.Entity.ID\"] || !data[\"Relation.Type.ID\"]) {\n throw(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\n }\n const reqData = {\n \"Related.Entity.ID\": [data[\"Related.Entity.ID\"]]\n };\n const url = `entity/${data[\"Principal.Entity.ID\"]}/relation/${data[\"Relation.Type.ID\"]}/add`;\n await api.POST(url, reqData, Api.PrepReqParams(reqParams));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType);\n if (data[\"Data.Entity.ID\"]) {\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + data[\"Data.Entity.ID\"]);\n }\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n principalEntityId: string,\n relatedEntityId: string,\n relationTypeId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, principalEntityId, relatedEntityId, relationTypeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!principalEntityId || !relatedEntityId || !relationTypeId) {\n throw new Error(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\n }\n const url = `entity/${principalEntityId}/relation/${relationTypeId}/delete`;\n await api.POST(url, {\n \"Related.Entity.ID\": [relatedEntityId]\n }, Api.PrepReqParams(reqParams));\n\n // Remove related cache entries\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + principalEntityId);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + relatedEntityId);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + relationTypeId);\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n relation: IRelation,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, relation: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data[\"Principal.Entity.ID\"] || !data[\"Related.Entity.ID\"] || !data[\"Relation.Type.ID\"]) {\n throw(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\n }\n const url = `entity/${data[\"Principal.Entity.ID\"]}/otherEntityID/${data[\"Related.Entity.ID\"]}/relation/${data[\"Relation.Type.ID\"]}/update`;\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + data[\"Relation.Type.ID\"]);\n if (data[\"Data.Entity.ID\"]) {\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + data[\"Data.Entity.ID\"]);\n }\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n entityId: string,\n filter: IListParams,\n req?: Api.IReqParams\n }): Promise<{\n relations: IRelation[]\n }> {\n let { api, entityId, filter, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n filter = {\n relationTypeId: \"\",\n oneWayOnly: false,\n loadEntityData: false,\n ...filter\n }\n const cache = await api.GetCacheItem(GetListCacheKey(entityId, filter), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n let url = `entity/${entityId}/relations`;\n if (filter.relationTypeId) {\n url += \"/\" + filter.relationTypeId;\n }\n url += `?Oneway=${filter.oneWayOnly}&LoadInfo=${filter.loadEntityData}`;\n const data = await api.GET(url, Api.PrepReqParams(reqParams));\n res({\n relations: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityId, filter),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function GetByDataEntityId(params: {\n api?: BruceApi.Api,\n entityId: string,\n req?: Api.IReqParams\n }): Promise<{\n relation: IRelation\n }> {\n let { api, entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!entityId) {\n throw(\"Entity ID is required.\");\n }\n const cache = await api.GetCacheItem(GetEntityCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/relation/${entityId}/dataentity`, Api.PrepReqParams(reqParams));\n res({\n relation: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetEntityCacheKey(entityId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { IDictionary } from \"../common/dictionary\";\nimport { ENVIRONMENT } from \"../environment\";\n/**\n * Describes the \"Entity Source\" concept within Bruce.\n * An entity source is a record which links an arbitrary source id to a Bruce entity id.\n * For example an OSM building id to a Bruce entity id.\n */\nexport namespace EntitySource {\n export function GetCacheKey(sourceId: number, sourceKey: string): string {\n return `${Api.ECacheKey.EntitySource}${Api.ECacheKey.Id}${sourceId}${Api.ECacheKey.Id}${sourceKey}`;\n }\n\n export interface ISource {\n \"Entity.ID\": string;\n \"Source.ID\": number;\n \"SourceRecord.Key\": string;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n sourceId: number,\n sourceKey: string,\n req?: Api.IReqParams\n }): Promise<{\n source: ISource\n }> {\n let { api, sourceId, sourceKey, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!sourceId || !sourceKey) {\n throw(\"Source ID and Source Key are required.\");\n }\n const res = await GetListByKeys({\n api: api,\n sourceId: sourceId,\n sourceKeys: [sourceKey],\n req: reqParams\n })\n return {\n source: res.sources?.length ? res.sources[0] : null\n };\n }\n\n export async function GetListByKeys(params: {\n api?: BruceApi.Api,\n sourceId: number,\n sourceKeys: string[],\n req?: Api.IReqParams\n }): Promise<{\n sources: ISource[]\n }> {\n let { api, sourceId, sourceKeys, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!sourceId || !sourceKeys.length) {\n throw(\"Source ID and Source Keys are required.\");\n }\n const reqKeys: string[] = [];\n const reqs: Promise<ISource>[] = [];\n for (let i = 0; i < sourceKeys.length; i++) {\n const sourceKey = sourceKeys[i];\n const cache = await api.GetCacheItem(GetCacheKey(sourceId, sourceKey), reqParams);\n if (cache?.found) {\n reqs.push(cache.data);\n }\n else {\n reqKeys.push(sourceKey);\n }\n }\n if (reqKeys.length) {\n const prom: Promise<ISource[]> = new Promise(async (res, rej) => {\n try {\n const data = await api.POST(`entitysource/${sourceId}`, { SourceRecordKeys: reqKeys }, Api.PrepReqParams(reqParams));\n res(data.Items);\n }\n catch (e) {\n rej(e);\n }\n });\n for (let i = 0; i < reqKeys.length; i++) {\n const req: Promise<ISource> = new Promise(async (res, rej) => {\n try {\n const sources = await prom;\n res(<ISource>sources.find((s: ISource) => s[\"SourceRecord.Key\"] === reqKeys[i]));\n }\n catch (e) {\n rej(<any>e);\n }\n });\n reqs.push(req);\n }\n }\n return {\n sources: (await Promise.all(reqs)).filter(x => !!x)\n };\n }\n\n export async function GetEntityIdsBySourceKeys(params: {\n api?: BruceApi.Api,\n sourceId: number,\n sourceKeys: string[],\n req?: Api.IReqParams\n }): Promise<{\n // Source key to entity id mapping.\n idMapping: IDictionary<string>\n }> {\n let { api, sourceId, sourceKeys, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!sourceId || !sourceKeys.length) {\n throw(\"Source ID and Source Keys are required.\");\n }\n const result: IDictionary<string> = {};\n if (sourceKeys.length > 0) {\n const {sources} = await GetListByKeys({\n api,\n sourceId,\n sourceKeys,\n req: reqParams\n });\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i];\n for (let i = 0; i < sourceKeys.length; i++) {\n const key = sourceKeys[i];\n if (key == source[\"SourceRecord.Key\"]) {\n result[key] = source[\"Entity.ID\"];\n }\n }\n }\n }\n return {\n idMapping: result\n };\n }\n\n export async function CreateLink(params: {\n api?: BruceApi.Api\n source: ISource\n }): Promise<{\n source: ISource\n }> {\n let {source, api} = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!source[\"Entity.ID\"] || !source[\"Source.ID\"] || !source[\"SourceRecord.Key\"]) {\n throw(\"Entity ID, Source ID and Source Key are required.\");\n }\n const res = await api.POST(\"entitysource\", source);\n const cacheKey = GetCacheKey(source[\"Source.ID\"], source[\"SourceRecord.Key\"]);\n await api.Cache.Remove(cacheKey);\n return {\n source: res\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Entity Tag\" concept within Bruce.\n * An entity tag is used to categorize an entity record.\n * Entity tags can be used in filters, or to restrict entity access.\n */\nexport namespace EntityTag {\n export function GetCacheKey(tagId: number): string {\n return `${Api.ECacheKey.Tag}${Api.ECacheKey.Id}${tagId}`;\n }\n\n export function GetListCacheKey(entityTypeId?: string): string {\n if (entityTypeId) {\n return Api.ECacheKey.Tag + Api.ECacheKey.EntityType + Api.ECacheKey.Id + entityTypeId;\n }\n return Api.ECacheKey.Tag;\n }\n\n export interface ITag {\n ID: number;\n Name?: string;\n Description?: string;\n IsAccessRestricted?: boolean;\n \"EntityType.ID\"?: string;\n Color?: string;\n \"Parent.Layer.ID\"?: number;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n tagId: number,\n req?: Api.IReqParams\n }): Promise<{\n tag: ITag\n }> {\n let { api, tagId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tagId) {\n throw(\"Tag ID is required.\");\n }\n const {tags} = await GetListByIds({\n api,\n tagIds: [tagId],\n req: reqParams\n });\n return {\n tag: tags.length ? tags[0] : null\n };\n }\n\n export async function GetListByIds(params: {\n api?: BruceApi.Api,\n tagIds: number[],\n req?: Api.IReqParams\n }): Promise<{\n tags: ITag[]\n }> {\n let { api, tagIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tagIds.length) {\n throw(\"Tag Ids are empty.\");\n }\n const reqIds: number[] = [];\n const reqs: Promise<{ tag: ITag }>[] = [];\n for (let i = 0; i < tagIds.length; i++) {\n const tagId = tagIds[i];\n const cache = await api.GetCacheItem(GetCacheKey(tagId), reqParams);\n if (cache?.found) {\n reqs.push(cache.data);\n }\n else {\n reqIds.push(tagId);\n }\n }\n if (reqIds.length) {\n const prom: Promise<ITag[]> = new Promise(async (res, rej) => {\n try {\n const data = await api.POST(\"layers/get\", { layerIds: reqIds }, Api.PrepReqParams(reqParams));\n res(data.Items);\n }\n catch (e) {\n rej(e);\n }\n });\n for (let i = 0; i < reqIds.length; i++) {\n const id = reqIds[i];\n const req: Promise<{ tag: ITag }> = new Promise(async (res, rej) => {\n try {\n const tags = await prom;\n const tag = tags.find((t: ITag) => t.ID === id);\n res({\n tag: tag\n });\n }\n catch (e) {\n rej(<any>e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: req,\n req: reqParams\n });\n reqs.push(req);\n }\n }\n return {\n tags: (await Promise.all(reqs)).map(x => x?.tag).filter(x => !!x)\n };\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n entityTypeId?: string,\n req?: Api.IReqParams\n }): Promise<{\n tags: ITag[]\n }> {\n let { api, entityTypeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(entityTypeId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(entityTypeId ? `entityType/${entityTypeId}/layers` : \"layers\", Api.PrepReqParams(reqParams));\n res({\n tags: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(entityTypeId),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n tagId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tagId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tagId) {\n throw(\"Tag ID is required.\");\n }\n await api.DELETE(`layer/${tagId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(tagId));\n await api.Cache.RemoveByStartsWith(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n tag: ITag,\n req?: Api.IReqParams\n }): Promise<{\n tag: ITag\n }> {\n let { api, tag: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n \n const url = data.ID ? `layer/${data.ID}` : \"layer\";\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n await api.Cache.RemoveByStartsWith(GetListCacheKey());\n return {\n tag: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { ObjectUtils } from \"../util/object-utils\";\nimport { Entity } from \"./entity\";\nimport { EntityAttribute } from \"./entity-attribute\";\nimport { EntityTypeVisualSettings } from \"./entity-type-visual-settings\";\n\n/**\n * Describes the \"Entity Type\" concept within Bruce.\n * An entity type is an \"expectation\" of what data \"should\" look like in a particular entity record.\n * The schema is stencils onto entity data to filter out what we should display or search against.\n */\nexport namespace EntityType {\n export function GetCacheKey(typeId: string): string {\n return `${Api.ECacheKey.EntityType}${Api.ECacheKey.Id}${typeId}`;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.EntityType;\n }\n\n export interface IEntityType {\n ID?: string;\n IsDeleted?: boolean;\n Name: string;\n Description?: string;\n Data?: Entity.IEntity;\n IsAccessRestricted?: boolean;\n DataSchema?: {\n Key: \"root\",\n Name?: \"Root\",\n Structure: EntityAttribute.IAttribute[],\n Type: EntityAttribute.EType.Structure\n };\n DisplayNameAttributePath?: string;\n IsStrictSchema?: boolean;\n \"DisplaySetting.ID\"?: number;\n AuthoringSettings?: {\n enabledTools: string[];\n defaultTool: string;\n };\n \"LastUpdate.Time\"?: UTC.IUTC;\n \"Parent.EntityType.ID\"?: string;\n VisualSettings?: EntityTypeVisualSettings.ISettings;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n entityTypeId: string,\n req?: Api.IReqParams\n }): Promise<{\n entityType: IEntityType\n }> {\n let { api, entityTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!typeId) {\n throw(\"Type ID is required.\");\n }\n const key = GetCacheKey(typeId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entitytype/${typeId}`, Api.PrepReqParams(reqParams));\n res({\n entityType: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n entityTypeId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, entityTypeId: typeId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!typeId) {\n throw(\"Type ID is required.\");\n }\n await api.DELETE(`entitytype/${typeId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(typeId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n entityTypes: IEntityType[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"entitytypes\", Api.PrepReqParams(reqParams));\n res({\n entityTypes: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams,\n duration: 60 * 5 // 5 minutes.\n });\n return req;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n entityType: IEntityType,\n req?: Api.IReqParams\n }): Promise<{\n entityType: IEntityType\n }> {\n let { api, entityType: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data) {\n data = <any>{};\n }\n if (!data.ID) {\n data.ID = ObjectUtils.UId();\n }\n if (!data.Name) {\n data.Name = data.ID;\n }\n const res = await api.POST(`entitytype/${data.ID}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(<string>data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n entityType: res\n };\n }\n}","import { Bounds } from \"../../common/bounds\";\nimport { Carto } from \"../../common/carto\";\nimport { IDictionary } from \"../../common/dictionary\";\n\n/**\n * This is a helper for making entity requests based on a grid area.\n * It will return grid cells based on given view-area then will remember when stuff-\n * was fully-fetched for those cells to avoid making duplicate requests.\n */\nexport namespace EntityGlobe {\n export class Cell {\n public Fetched: boolean = false;\n public IsFetched: () => boolean = <any>null;\n public FetchPageIndex: number = 0;\n public Boundaries: Bounds.IBounds = <any>null;\n public Fetching: boolean = false;\n\n public GetBounds(): Bounds.IReqBounds {\n // Entity data works in -180 to 180 range.\n function prepareRangeForBounds(range: number): number {\n if (range > 180) {\n return range - 360;\n }\n return range;\n }\n\n // Add minor decimal as API crashes when giving it whole numbers.\n const maxLon = prepareRangeForBounds(this.Boundaries.maxLongitude) + 0.00001;\n const minLon = prepareRangeForBounds(this.Boundaries.minLongitude) - 0.00001;\n const maxLat = prepareRangeForBounds(this.Boundaries.maxLatitude) + 0.00001;\n const minLat = prepareRangeForBounds(this.Boundaries.minLatitude) - 0.00001;\n return {\n east: maxLon,\n north: maxLat,\n south: minLat,\n west: minLon\n };\n }\n }\n\n export class Grid {\n private cells: IDictionary<Cell> = {};\n\n public GetCellsForView(cameraPos: Carto.ICarto, viewRect: Bounds.IReqBounds): Cell[] {\n const cells: Cell[] = [];\n const minLat = viewRect.south;\n const minLon = viewRect.west;\n const maxLat = viewRect.north;\n const maxLon = viewRect.east;\n const MAX_CELLS = 150;\n const cellDegreeSize = getCellSizeFromHeight(<number>viewRect.alt);\n\n let curMinLon = floorValueToCellSize(cellDegreeSize, minLon);\n let curMinLat = floorValueToCellSize(cellDegreeSize, minLat);\n // For larger views we add additional padding because our view-area culling is too strong.\n if (cellDegreeSize >= 2) {\n curMinLon -= cellDegreeSize;\n curMinLat -= cellDegreeSize;\n }\n\n let centerX = cameraPos?.longitude;\n let centerY = cameraPos?.latitude;\n if (isNaN(centerX) || isNaN(centerY)) {\n centerX = (minLon + maxLon) / 2;\n centerY = (minLat + maxLat) / 2;\n }\n\n let width = Math.ceil((maxLon - curMinLon) / cellDegreeSize);\n let height = Math.ceil((maxLat - curMinLat) / cellDegreeSize);\n // For larger views we add additional padding because our view-area culling is too strong.\n if (cellDegreeSize >= 2) {\n width += 1;\n height += 1;\n }\n\n const cellDistances: { x: number, y: number, dist: number }[] = [];\n\n for (let x = 0; x < width; x++) {\n for (let y = 0; y < height; y++) {\n const lon = x * cellDegreeSize + curMinLon;\n const lat = y * cellDegreeSize + curMinLat;\n const cellCenterX = lon + cellDegreeSize / 2;\n const cellCenterY = lat + cellDegreeSize / 2;\n const dist = Math.sqrt(Math.pow(cellCenterX - centerX, 2) + Math.pow(cellCenterY - centerY, 2));\n cellDistances.push({ x, y, dist });\n }\n }\n\n cellDistances.sort((a, b) => a.dist - b.dist);\n\n for (const { x, y } of cellDistances) {\n const lon = x * cellDegreeSize + curMinLon;\n const lat = y * cellDegreeSize + curMinLat;\n const [id, cell] = getOrCreateCell(this.cells, cellDegreeSize, lon, lon + cellDegreeSize, lat, lat + cellDegreeSize);\n cells.push(cell);\n if (cells.length >= MAX_CELLS) {\n break;\n }\n }\n\n return cells;\n }\n }\n}\n\nfunction intersects(l: Bounds.IReqBounds, r: Bounds.IReqBounds): boolean {\n const { west: w, south: s, north: n, east: e } = l;\n const { west: wr, south: sr, north: nr, east: er } = r;\n return !(e <= wr || w >= er || n <= sr || s >= nr);\n}\n\nfunction contains(l: Bounds.IReqBounds, r: Bounds.IReqBounds): boolean {\n const { west: w, south: s, north: n, east: e } = l;\n const { west: wr, south: sr, north: nr, east: er } = r;\n return !(er < e || wr > w || nr > n || sr < s);\n}\n\nfunction crop(rect: Bounds.IReqBounds, by: Bounds.IReqBounds): Bounds.IReqBounds {\n let { west: w, south: s, north: n, east: e } = rect;\n const { west: wc, south: sc, north: nc, east: ec } = by;\n w = Math.max(w, ec);\n e = Math.min(e, wc);\n s = Math.max(s, nc);\n n = Math.min(n, sc);\n return { west: w, south: s, north: n, east: e };\n}\n\nfunction intersection(l: Bounds.IReqBounds, r: Bounds.IReqBounds): number {\n const { west: w, south: s, north: n, east: e } = l;\n const { west: wr, south: sr, north: nr, east: er } = r;\n const x = Math.min(e, er) - Math.max(w, wr);\n const y = Math.min(n, nr) - Math.max(s, sr);\n return (x > 0 && y > 0) ? x * y : 0;\n}\n\nfunction area(rect: Bounds.IReqBounds): number {\n let { west: w, south: s, north: n, east: e } = rect;\n return Math.abs((e - w) * (n - s));\n}\n\nfunction floorValueToCellSize(size: number, value: number): number {\n return Math.floor(value / size) * size;\n}\n\nfunction getCellSizeFromHeight(height: number): number {\n if (height < 1000) {\n return 0.01;\n }\n if (height < 5000) {\n return 0.025;\n }\n else if (height < 10000) {\n return 0.05;\n }\n else if (height < 30000) {\n return 0.1;\n }\n else if (height < 70000) {\n return 0.2;\n }\n else if (height < 100000) {\n return 0.3;\n }\n else if (height < 150000) {\n return 0.4;\n }\n else if (height < 200000) {\n return 0.5;\n }\n else if (height < 300000) {\n return 0.6;\n }\n else if (height < 500000) {\n return 1;\n }\n else if (height < 1000000) {\n return 1.3;\n }\n else if (height < 1200000) {\n return 1.8;\n }\n return 4;\n}\n\nfunction isCellFetched(cell: EntityGlobe.Cell): boolean {\n if (cell.Fetched) {\n return true;\n }\n return false;\n}\n\nfunction getOrCreateCell(cells: IDictionary<EntityGlobe.Cell>, cellSize: number, lon: number, maxLon: number, lat: number, maxLat: number): [string, EntityGlobe.Cell] {\n const id = cellSize + \"_\" + lon + \"_\" + maxLon + \"_\" + lat + \"_\" + maxLat;\n let cell = cells[id];\n if (!cell) {\n cell = cells[id] = new EntityGlobe.Cell();\n cell.Boundaries = <Bounds.IBounds>{\n minLatitude: lat,\n maxLatitude: maxLat,\n minLongitude: lon,\n maxLongitude: maxLon\n };\n cell.IsFetched = () => isCellFetched(cell);\n }\n\n return [id, cell];\n}","import { Api } from \"../../api/api\";\nimport { BruceApi } from \"../../api/bruce-api\";\nimport { Bounds } from \"../../common/bounds\";\nimport { BruceEvent } from \"../../common/bruce-event\";\nimport { Carto } from \"../../common/carto\";\nimport { IDictionary } from \"../../common/dictionary\";\nimport { Entity } from \"../entity\";\nimport { EntityGlobe } from \"./entity-globe\";\nimport { ViewMonitor } from \"./view-monitor\";\n\nconst MAX_AREA_IN_DEGREES = 90;\nconst MAX_RETRY_ATTEMPTS = 1;\nconst RETRY_DELAY_INCREMENT = 500;\nconst REQUEST_PAGE_DELAY = 50;\n\nclass regMenuItemGetter {\n TagIds: number[];\n MinHeight: number;\n MaxHeight: number;\n\n constructor(tagIds: number[], minHeight: number, maxHeight: number) {\n this.TagIds = tagIds;\n this.MinHeight = minHeight;\n this.MaxHeight = maxHeight;\n }\n}\n\nasync function delay(milliseconds: number): Promise<void> {\n return new Promise((res) => {\n setTimeout(() => {\n res();\n }, milliseconds);\n });\n}\n\n/**\n * This is a batched entity getter.\n * It will scan for entity records in a view-area and emit them in batches.\n * It will restart scanning if the camera moves.\n */\nexport namespace EntityFilterGetter {\n export enum EStatus {\n Scanning = \"SCANNING\",\n Loading = \"LOADING\",\n }\n\n export interface IStatusUpdate {\n msg: EStatus;\n revoking: boolean;\n }\n\n export class Getter {\n private onUpdate: BruceEvent<Entity.IEntity[]> = <any>null;\n public get OnUpdate(): BruceEvent<Entity.IEntity[]> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<Entity.IEntity[]>();\n }\n return this.onUpdate;\n }\n\n public LastStateUpdates: IDictionary<IStatusUpdate> = {};\n private onStateUpdate: BruceEvent<IStatusUpdate> = <any>null;\n public get OnStateUpdate(): BruceEvent<IStatusUpdate> {\n if (!this.onStateUpdate) {\n this.onStateUpdate = new BruceEvent<IStatusUpdate>();\n }\n return this.onStateUpdate;\n }\n\n private onScanUpdate: BruceEvent<EntityGlobe.Cell[]> = <any>null;\n public get OnScanUpdate(): BruceEvent<EntityGlobe.Cell[]> {\n if (!this.onScanUpdate) {\n this.onScanUpdate = new BruceEvent<EntityGlobe.Cell[]>();\n }\n return this.onScanUpdate;\n }\n\n private api: BruceApi.Api;\n private viewPort: ViewMonitor.IMonitor;\n private viewPortChangeRemoval: () => void = <any>null;\n private cells: EntityGlobe.Grid = <any>null;\n private registeredItems: IDictionary<regMenuItemGetter> = {};\n private getterLoopId: number = 0;\n\n private viaCdn: boolean;\n private typeId: string;\n private batchSize: number;\n private tagIds: number[] = <any>null;\n private minHeight = 0;\n private maxHeight = 100000;\n private attrFilter: IDictionary<any>;\n private viewRect: Bounds.IReqBounds = <any>null;\n private viewCenter: Carto.ICarto = <any>null;\n\n constructor(\n api: BruceApi.Api,\n viewPort: ViewMonitor.IMonitor,\n typeId: string,\n batchSize?: number,\n attrFilter?: IDictionary<any>,\n viaCdn?: boolean\n ) {\n this.api = api;\n this.typeId = typeId;\n this.viaCdn = Boolean(viaCdn);\n this.batchSize = isNaN(batchSize) ? 300 : batchSize;\n this.viewPort = viewPort;\n this.attrFilter = attrFilter;\n this.updateBounds();\n }\n\n /**\n * Returns id that represents the combined menu item parameters.\n * If integrity changes while a request is running, the request will not emit a response.\n * @returns\n */\n private getIntegrityId() {\n return this.tagIds == null ? \"\" : this.tagIds.join();\n }\n\n private viewAreaSub(): void {\n this.viewAreaDispose();\n this.viewPortChangeRemoval = this.viewPort.Updated().Subscribe(() => {\n this.updateBounds();\n this.startGetterLoop();\n });\n }\n\n private viewAreaDispose(): void {\n this.viewPortChangeRemoval?.();\n }\n\n public GetMenuItems(): string[] {\n return Object.keys(this.registeredItems);\n }\n\n public IncludeMenuItem(menuItemId: string, layerIds: number[], minHeight: number, maxHeight: number): void {\n this.registeredItems[menuItemId] = new regMenuItemGetter(layerIds, minHeight, maxHeight);\n this.updateState();\n }\n\n public ExcludeMenuItem(menuItemId: string): void {\n this.registeredItems[menuItemId] = <any>null;\n delete this.registeredItems[menuItemId];\n this.updateState();\n }\n\n private updateBounds(): void {\n const viewRect = this.viewPort.GetBounds();\n const poi = this.viewPort.GetTarget();\n if (viewRect && poi) {\n if (Math.abs(viewRect.west - viewRect.east) > MAX_AREA_IN_DEGREES) {\n return;\n }\n if (Math.abs(viewRect.south - viewRect.north) > MAX_AREA_IN_DEGREES) {\n return;\n }\n this.viewRect = viewRect;\n this.viewCenter = poi;\n }\n }\n\n private updateState(): void {\n const tagIds: number[] = [];\n const menuItemIds = this.GetMenuItems();\n let minHeight = null;\n let maxHeight = null;\n for (let i = 0; i < menuItemIds.length; i++) {\n const menuItem = this.registeredItems[menuItemIds[i]];\n if (menuItem) {\n if (maxHeight == null || maxHeight < menuItem.MaxHeight) {\n maxHeight = menuItem.MaxHeight;\n }\n if (minHeight == null || minHeight > menuItem.MinHeight) {\n minHeight = menuItem.MinHeight;\n }\n\n const itemLayerIds = menuItem.TagIds;\n if (itemLayerIds) {\n for (let j = 0; j < itemLayerIds.length; j++) {\n const itemLayerId = itemLayerIds[j];\n if (!tagIds.includes(itemLayerId)) {\n tagIds.push(itemLayerId);\n }\n }\n }\n }\n }\n\n if (menuItemIds.length > 0) {\n // Reset cells so none are marked as fetched.\n this.cells = new EntityGlobe.Grid();\n this.tagIds = tagIds;\n this.minHeight = <number>minHeight;\n this.maxHeight = <number>maxHeight;\n this.updateBounds();\n this.startGetterLoop();\n this.viewAreaSub();\n }\n else {\n this.getterLoopId += 1;\n this.viewAreaDispose();\n }\n }\n\n private postStatus(status: IStatusUpdate): void {\n this.LastStateUpdates[status.msg] = status;\n this.onStateUpdate?.Trigger(status);\n }\n\n private startGetterLoop(): void {\n // Increase id so that existing loops stop.\n this.getterLoopId += 1;\n const loopId = this.getterLoopId;\n const loopIntegrity = this.getIntegrityId();\n\n new Promise(async () => {\n // Minor delay to stop 50 menu items enabling doing their first request all together.\n // This gives it time to recognize only 1 request is needed.\n // Would be better to not use this delay but we're on a clock.\n await delay(100);\n\n const MIN_HEIGHT = this.minHeight;\n const MAX_HEIGHT = this.maxHeight;\n const PAGE_SIZE = this.batchSize;\n let retryAttempts = MAX_RETRY_ATTEMPTS;\n let retryDelay = 0;\n let prevFirstId: string = \"\";\n let prevLastId: string = \"\";\n let prevTicks = 0;\n\n while ((!this.viewCenter || !this.viewRect) && this.getterLoopId == loopId) {\n await delay(RETRY_DELAY_INCREMENT);\n }\n if (this.getterLoopId != loopId) {\n return;\n }\n const alt = <number>this.viewRect.alt;\n if (alt > MAX_HEIGHT || (alt < MIN_HEIGHT && MIN_HEIGHT > 0)) {\n return;\n }\n\n const cells = this.cells.GetCellsForView(this.viewCenter, this.viewRect);\n this.onScanUpdate?.Trigger(cells);\n let curCellIndex = cells.length > 0 ? 0 : null;\n\n let postedScanning = false;\n let postedLoading = false;\n\n let total = 0\n while (retryAttempts > 0 && curCellIndex != null) {\n if (retryDelay > 0) {\n await delay(retryDelay);\n }\n if (this.getterLoopId != loopId) {\n break;\n }\n\n if (!postedScanning) {\n this.postStatus({ msg: EStatus.Scanning, revoking: false });\n postedScanning = true;\n }\n\n const curCell = cells[curCellIndex];\n if (curCell.IsFetched()) {\n curCell.Fetching = false;\n curCellIndex += 1;\n if (cells[curCellIndex]) {\n cells[curCellIndex].Fetching = true;\n }\n else {\n curCellIndex = null;\n }\n this.onScanUpdate?.Trigger(cells);\n continue;\n }\n\n try {\n let {entities} = await Entity.GetList({\n api: this.api,\n filter: {\n pageSize: PAGE_SIZE,\n pageIndex : curCell.FetchPageIndex,\n entityTypeId: this.typeId,\n layerIds: this.tagIds,\n bounds: curCell.GetBounds(),\n sortOrder: Api.ESortOrder.Asc,\n entityTypeConditions: this.attrFilter\n },\n viaCdn: this.viaCdn,\n req: {\n noCache: true\n }\n });\n\n const integrity = this.getIntegrityId();\n if (loopIntegrity == integrity && entities) {\n this.onUpdate?.Trigger(entities);\n }\n if (this.getterLoopId != loopId) {\n break;\n }\n if (entities.length) {\n total += entities.length;\n }\n if (!postedLoading) {\n this.postStatus({ msg: EStatus.Loading, revoking: false });\n postedLoading = true;\n }\n\n // Only mark as fetched when ALL pages are done.\n // Known issue where external sources may return less than page size.\n // Right now we're making it as fetched as we're siding with the majority use-case.\n if (entities.length <= 0 || entities.length < PAGE_SIZE) {\n curCell.Fetched = true;\n curCell.Fetching = false;\n this.onScanUpdate?.Trigger(cells);\n continue;\n }\n\n // Checking to make sure it's not just the same batch over and over again.\n if (entities.length > 0) {\n const first = entities[0]?.Bruce?.ID;\n const last = entities[entities.length - 1]?.Bruce?.ID;\n if (prevFirstId == first && prevLastId == last) {\n prevTicks += 1;\n if (prevTicks > 3) {\n break;\n }\n }\n else {\n prevFirstId = first;\n prevLastId = last;\n prevTicks = 0;\n }\n }\n curCell.FetchPageIndex++;\n\n // Request passed so let's assume it was server hiccup and refresh counts.\n retryAttempts = MAX_RETRY_ATTEMPTS;\n retryDelay = 0;\n }\n catch (e) {\n console.error(e);\n\n // Request failed so let's add a delay and try again soon.\n retryDelay += RETRY_DELAY_INCREMENT;\n retryAttempts -= 1;\n }\n\n await delay(REQUEST_PAGE_DELAY);\n }\n\n if (postedLoading) {\n this.postStatus({ msg: EStatus.Loading, revoking: true });\n }\n if (postedScanning) {\n this.postStatus({ msg: EStatus.Scanning, revoking: true });\n }\n });\n }\n }\n}","import { Bounds } from \"../../common/bounds\";\nimport { BruceEvent } from \"../../common/bruce-event\";\nimport { Carto } from \"../../common/carto\";\nimport { ViewMonitor } from \"./view-monitor\";\n\nconst MAX_AREA_IN_DEGREES = 90;\nconst GETTER_DELAY = 50;\n\n/**\n * This is a batched \"arbitrary data\" getter.\n * You feed it an array of data, then it will emit that data in batches when the view changes.\n */\nexport namespace BatchedDataGetter {\n export class Getter<T> {\n private viewPort: ViewMonitor.IMonitor\n private viewPortRemoval: () => void = <any>null;\n \n private batchSize: number;\n private viewRect: Bounds.IReqBounds = <any>null;\n private viewCenter: Carto.ICarto = <any>null;\n private getterInterval: any;\n private data: T[];\n \n private onUpdate: BruceEvent<T[]> = <any>null;\n public get OnUpdate(): BruceEvent<T[]> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<T[]>();\n }\n return this.onUpdate;\n }\n \n \n public constructor(data: T[], viewPort: ViewMonitor.IMonitor, batchSize: number) {\n this.data = data;\n this.viewPort = viewPort;\n this.batchSize = batchSize;\n }\n\n public Start(): void {\n this.viewPortRemoval = this.viewPort.Updated().Subscribe(() => {\n this.updateViewport();\n });\n this.updateViewport();\n }\n\n public Dispose(): void {\n this.viewPortRemoval?.();\n }\n\n private updateViewport(): void {\n this.updateBounds();\n this.startGetterLoop();\n }\n \n private updateBounds(): void {\n const viewRect = this.viewPort.GetBounds();\n const poi = this.viewPort.GetTarget();\n if (viewRect && poi) {\n if (Math.abs(viewRect.west - viewRect.east) > MAX_AREA_IN_DEGREES) {\n return;\n }\n if (Math.abs(viewRect.south - viewRect.north) > MAX_AREA_IN_DEGREES) {\n return;\n }\n this.viewRect = viewRect;\n this.viewCenter = poi;\n }\n }\n \n private startGetterLoop(): void {\n clearInterval(this.getterInterval);\n if (!this.viewRect || !this.viewCenter) {\n return;\n }\n let index = 0;\n const onTick = (): boolean => {\n this.processBatch(this.data.slice(index, index + this.batchSize));\n index += this.batchSize;\n return index >= this.data.length;\n };\n if (!onTick()) {\n this.getterInterval = setInterval(() => {\n if (onTick()) {\n clearInterval(this.getterInterval);\n }\n }, GETTER_DELAY);\n }\n }\n \n private processBatch(batch: T[]): void {\n if (batch.length > 0) {\n this.onUpdate?.Trigger(batch);\n }\n }\n }\n}","export namespace MathUtils {\n /**\n * Rounds a number to a given number of decimal places.\n * @param num \n * @param decimals \n * @returns \n */\n export function Round(num: number, decimals: number = 0): number {\n if (decimals <= 0) {\n return Math.round(num);\n }\n let tmp = \"1\";\n for (let i = 0; i < decimals; i++) {\n tmp += \"0\";\n }\n const d = parseFloat(tmp);\n return Math.round((num + Number.EPSILON) * d) / d;\n }\n\n /**\n * Returns a random integer between min (inclusive) and max (inclusive).\n * @param min \n * @param max \n * @returns \n */\n export function RandInt(min: number, max: number): number {\n if (min == max) {\n return min;\n }\n else if (min > max) {\n throw(\"Min is greater than max.\");\n }\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { Carto } from \"../common/carto\";\nimport { Transform } from \"../common/transform\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { MathUtils } from \"../util/math-utils\";\nimport { Entity } from \"./entity\";\n\nexport namespace EntityCoords {\n export const UCS_ENTITY_TYPE_ID = \"Bruce_UCS_Type\";\n\n export function GetCacheKey(entityId: string): string {\n return Api.ECacheKey.EntityCoords + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\n }\n\n export interface IUcs {\n name: string;\n location: Carto.ICarto;\n \"Entity.ID\": string;\n transform: Transform.ITransform;\n }\n\n export interface IEntityCoords extends Entity.IEntity {\n ucs?: IUcs;\n }\n\n export interface IRelToPointParams {\n point: Carto.ICarto;\n test: boolean;\n name?: string;\n }\n\n export interface IRelToEpsgParams {\n epsg: number;\n test: boolean;\n name?: string;\n }\n\n export interface IRelToUcsParams {\n ucsId: string;\n test: boolean;\n name?: boolean;\n }\n\n export async function GetEntityCoords(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n }): Promise<{\n coords: IEntityCoords\n }> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetCacheKey(entityId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entity/${entityId}/ucs`, reqParams);\n res({\n coords: data\n });\n } catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(entityId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function EntityRelativeToPoint(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n } & IRelToPointParams): Promise<{\n coords: IEntityCoords\n }> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!params.test) {\n await UnlinkCoords({\n api,\n rootEntityId: entityId,\n req: reqParams\n });\n }\n const point = params.point;\n const name = params.name || `${MathUtils.Round(point.latitude, 4)}, ${MathUtils.Round(point.longitude, 4)}`;\n const res = await api.POST(`entity/${entityId}/ucs`, {\n \"ucs\": {\n \"Entity.ID\": null,\n \"name\": name,\n \"location\": {\n \"latitude\": point.latitude,\n \"longitude\": point.longitude,\n \"altitude\": point.altitude,\n \"coordinates\": {\n \"Entity.ID\": entityId\n }\n }\n },\n \"test\": params.test\n }, reqParams);\n if (!params.test) {\n api.Cache.Remove(GetCacheKey(entityId));\n }\n return {\n coords: res\n };\n }\n\n export async function EntityRelativeToEpsg(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n } & IRelToEpsgParams): Promise<{\n coords: IEntityCoords\n }> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!params.test) {\n await UnlinkCoords({\n api,\n rootEntityId: entityId,\n req: reqParams\n });\n }\n const epsg = params.epsg;\n const name = params.name ?? \"EPSG: \" + epsg;\n const res = await api.POST(`entity/${entityId}/ucs`, {\n \"ucs\": {\n \"Entity.ID\": null,\n \"name\": name,\n \"location\": {\n \"coordinates\": {\n \"SRID\": \"EPSG:\" + epsg,\n \"Entity.ID\": entityId\n }\n }\n },\n \"test\": params.test\n }, reqParams);\n if (!params.test) {\n api.Cache.Remove(GetCacheKey(entityId));\n }\n return {\n coords: res\n };\n }\n\n export async function EntityRelativeToUcs(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n } & IRelToUcsParams): Promise<{\n coords: IEntityCoords\n }> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!params.test) {\n await UnlinkCoords({\n api,\n rootEntityId: entityId,\n req: reqParams\n });\n }\n const ucsId = params.ucsId;\n const res = await api.POST(`entity/${entityId}/ucs`, {\n \"ucs\": {\n \"Entity.ID\": ucsId\n },\n \"test\": params.test\n }, reqParams);\n if (!params.test) {\n api.Cache.Remove(GetCacheKey(entityId));\n }\n return {\n coords: res\n };\n }\n\n export async function UnlinkCoords(params: {\n api?: BruceApi.Api,\n rootEntityId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, rootEntityId: entityId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.DELETE(`entity/${entityId}/ucs`, reqParams);\n }\n}","export namespace EntityTypeVisualSettings {\n export enum EAction {\n LeftClick = \"LeftClick.CustomForm.ID\",\n RightClick = \"RightClick.CustomForm.ID\",\n DoubleClick = \"DoubleClick.CustomForm.ID\",\n MouseHover = \"MouseHover.CustomForm.ID\"\n }\n\n export interface ISettings {\n // Custom forms to display when a certain action is performed on related entities.\n // If the form is set to 0, that means use the default panel instead of a form.\n // When the form value is -1 that means don't display anything.\n CustomForms?: {\n // Default is 0.\n [EAction.LeftClick]?: number,\n // Default is -1.\n [EAction.RightClick]?: number,\n // Default is -1.\n [EAction.MouseHover]?: number,\n // Default is -1.\n [EAction.DoubleClick]?: number\n }\n }\n}","export namespace EntityAttribute {\n export enum EType {\n String = \"String\",\n Double = \"Double\",\n Integer = \"Integer\",\n Datetime = \"Datetime\",\n Structure = \"Structure\",\n Geometry = \"Geometry\",\n Dictionary = \"Dictionary\",\n Boolean = \"Boolean\"\n }\n\n export interface IAttribute {\n Key: string;\n Name?: string;\n Type?: EType;\n Size?: number;\n IsIndexed?: boolean;\n IsArray?: boolean;\n IsImportant?: boolean;\n Description?: string;\n Metadata?: IMetadata;\n Structure?: IAttribute[];\n IsFamilyAttribute?: boolean;\n IsFamilyAttributeDefault?: boolean;\n Sources?: string[];\n }\n\n export interface IMetadata {\n Description?: string;\n Mandatory?: boolean;\n Dictionary?: IDictionary;\n }\n \n export interface IDictionary {\n UseAttribute?: boolean;\n EntityTypeID?: string;\n SourceAttributePath?: string;\n\n // exists so UI components don't break - depreciated. \n SourceAttribute?: IAttribute;\n }\n\n export function GetAttribute(items: IAttribute[], path: string[]): IAttribute {\n if (!items || !path || !path.length) {\n return null;\n }\n const key = path[0];\n const item = items.find((i) => i.Key === key);\n if (!item || !item.Structure || !path.length) {\n return item;\n }\n return GetAttribute(item.Structure, path.slice(1));\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { ObjectUtils } from \"../util/object-utils\";\n\n\nexport namespace Uploader {\n export const MIN_LARGE_FILE_SIZE = 100000000; // 100MB.\n\n export interface IProgress {\n percent: number;\n uploaded: boolean;\n }\n\n export async function DoMultiPartUpload(params: {\n file: File,\n api?: BruceApi.Api,\n urlSuffix: string,\n req?: Api.IUploadReqParams,\n onProgress?: (progress: IProgress) => void\n }) {\n let { file, api, urlSuffix: url, req, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const FILE_PORTION_SIZE = 100000000; // 100MB.\n let fileSize = file.size;\n let fileOffset = 0;\n let filePartsCount = fileSize / FILE_PORTION_SIZE;\n let t = Math.trunc(filePartsCount);\n filePartsCount = filePartsCount > t ? t + 1 : t;\n let filePartIndex = 1;\n let uploadToken = ObjectUtils.UId();\n let data: any;\n while (fileOffset < fileSize) {\n let partSize = Math.min(FILE_PORTION_SIZE, fileSize - fileOffset);\n let retryCount: number = 5;\n let retryWait: number = 1000;\n while (retryCount > 0) {\n try {\n const blob = file.slice(fileOffset, fileOffset + partSize);\n const formData = new FormData();\n formData.append(\"originalFileName\", file.name);\n formData.append(\"token\", uploadToken);\n formData.append(\"count\", \"\" + filePartsCount);\n formData.append(\"part\", \"\" + filePartIndex);\n formData.append(\"file\", blob);\n const reqParams = Api.PrepReqParams(req) as Api.IUploadReqParams;\n reqParams.formData = formData;\n reqParams.onProgress = (progress: ProgressEvent) => {\n const sofar = fileOffset + progress.loaded;\n const percent = Math.round ((sofar / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n data = await api.UPLOAD(url, blob, reqParams)\n retryCount = 0;\n }\n catch (up) {\n retryCount -= 1;\n if (retryCount <= 0) {\n throw up;\n }\n await new Promise((res) => setTimeout(res, retryWait));\n retryWait = retryWait * 2;\n }\n }\n fileOffset += partSize;\n filePartIndex++;\n }\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n return data;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Uploader } from \"../internal/uploader\";\n\n/**\n * Describes the \"Client File\" concept within Bruce.\n * A client file is a record of a file uploaded to Bruce.\n */\nexport namespace ClientFile {\n export function GetCacheKey(fileId: string): string {\n return `${Api.ECacheKey.ClientFile}${Api.ECacheKey.Id}${fileId}`;\n }\n\n export interface IClientFile {\n UploadedTimeUTC: UTC.IUTC;\n FileExt: string;\n ID: string;\n MIMEType: string;\n OriginalFileName: string;\n OriginalLength: number;\n \"UploadedByUser.ID\": string;\n Purpose: string;\n }\n\n export function GetUrl(params: {\n api?: BruceApi.Api,\n fileId: string\n }): string {\n let { api, fileId } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n return `${api.GetBaseUrl()}file/${fileId}`;\n }\n\n export function GetUrlWithExt(params: {\n api?: BruceApi.Api,\n file: IClientFile\n }): string {\n let { api, file } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return `${api.GetBaseUrl()}file/${file.ID}${file.FileExt ? file.FileExt : \"\"}`;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n fileId: string,\n req?: Api.IReqParams\n }): Promise<{\n clientFile: IClientFile\n }> {\n let { api, fileId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!fileId) {\n throw(\"File ID is required.\");\n }\n const key = GetCacheKey(fileId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`file/${fileId}/details`, Api.PrepReqParams(reqParams));\n res({\n clientFile: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n fileIds: string[],\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, fileIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!fileIds.length) {\n throw(\"File IDs are required.\");\n }\n const data = {\n Items: fileIds\n };\n await api.POST(\"deleteFiles\", data, Api.PrepReqParams(reqParams));\n for (let i = 0; i < fileIds.length; i++) {\n const key = GetCacheKey(fileIds[i]);\n api.Cache.Remove(key);\n }\n }\n\n export async function Upload(params: {\n api?: BruceApi.Api,\n file: File,\n purpose?: string,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<{\n clientFile: IClientFile\n }> {\n let { api, file, purpose, req, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!file) {\n throw(\"File is required.\");\n }\n const size = file?.size;\n if (!size) {\n throw(\"You cannot upload a 0byte sized file.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n let clientFile: IClientFile;\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\n clientFile = await Uploader.DoMultiPartUpload({\n api,\n file,\n urlSuffix: \"fileUpload\",\n req,\n onProgress\n });\n // TODO: Check if we can add it to the request like the small file upload.\n if (clientFile?.ID && purpose) {\n await UpdatePurpose({\n api,\n fileId: clientFile.ID,\n purpose,\n req\n })\n }\n }\n else {\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n if (purpose) {\n req.formData = {\n Purpose: purpose\n };\n }\n clientFile = await api.UPLOAD(\"file/uploadNew\", file, req);\n }\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n return {\n clientFile\n };\n }\n\n export async function UpdatePurpose(params: {\n api?: BruceApi.Api,\n fileId: string,\n purpose: string,\n req?: Api.IReqParams\n }) {\n let { api, fileId, purpose, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!purpose) {\n purpose = \"\";\n }\n await api.POST(\"file/updatepurpose/\" + fileId + \"/?Purpose=\" + purpose, {\n Purpose: purpose\n }, Api.PrepReqParams(reqParams));\n const cacheKey = GetCacheKey(fileId);\n api.Cache.RemoveByContains(cacheKey);\n }\n\n /**\n * Uploads a temp file.\n * This will return a temp file id which can be used in various endpoints.\n * @param params\n * @returns\n */\n export async function UploadTemp(params: {\n api?: BruceApi.Api,\n file: File,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<{\n tempFileId: string\n }> {\n let { api, file, req, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!file) {\n throw(\"File is required.\");\n }\n const size = file?.size;\n if (!size) {\n throw(\"You cannot upload a 0byte sized file.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n let tempFile: any;\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\n tempFile = await Uploader.DoMultiPartUpload({\n api,\n file,\n urlSuffix: \"tempFileUpload\",\n req,\n onProgress\n });\n }\n else {\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n tempFile = await api.UPLOAD(\"file/uploadTemp\", file, req);\n }\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n return {\n tempFileId: tempFile[\"TempFile.ID\"]\n };\n }\n\n export namespace Filter {\n export enum EColumn {\n ID = \"id\",\n Name = \"name\",\n DateTime = \"datetime\",\n MIMEType = \"mimeType\",\n Size = \"size\",\n User = \"user\",\n Extension = \"extension\"\n }\n\n export enum ESortOrder {\n ASC = \"asc\",\n DEC = \"desc\"\n }\n\n export enum ERowOperator {\n AND = \"AND\",\n OR = \"OR\"\n }\n\n export interface IRow {\n column: EColumn;\n value: any;\n valueOperator: string;\n includes: boolean;\n rowOperator: ERowOperator;\n rows?: IRow[];\n }\n }\n\n export interface IFilter {\n PageSize?: number;\n PageIndex?: number;\n OrderBy?: Filter.EColumn;\n SortOrder?: Filter.ESortOrder;\n Purpose?: string;\n FilterRows?: Filter.IRow[];\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n filter: IFilter,\n req?: Api.IReqParams\n }): Promise<{\n clientFiles: IClientFile[],\n // Total available matching the filter.\n // This is not the total returned in the current page.\n totalCount: number\n }> {\n let { api, filter, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const data = await api.POST(\"files/filtered\", filter, Api.PrepReqParams(reqParams));\n return {\n clientFiles: data.Items,\n totalCount: data.TotalCount\n };\n }\n\n export namespace Processor {\n export interface IResult {\n success: boolean;\n clientFileId: string;\n clientFileName: string;\n }\n\n export enum EConvertExt {\n GLB = \".glb\",\n SKP = \".skp\",\n }\n\n export async function ConvertFormat(params: {\n api?: BruceApi.Api,\n fileId: string,\n ext: EConvertExt | string,\n req?: Api.IReqParams\n }): Promise<IResult> {\n let { api, fileId: clientFileId, ext, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!clientFileId || !ext) {\n throw(\"Client File ID and extension are required.\");\n }\n return api.POST(\"convertFileToFile\", {\n clientFileId: clientFileId,\n destinationFormat: ext,\n operations: []\n }, reqParams);\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype Id = ProgramKey.EProgramId | string;\n\n/**\n * Describes the \"Program Key\" concept within Bruce.\n * A program key is an access token for an arbitrary software.\n */\nexport namespace ProgramKey {\n export function GetCacheKey(programId: string): string {\n return Api.ECacheKey.ProgramKey + Api.ECacheKey.Id + programId;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.ProgramKey;\n }\n\n export enum EProgramId {\n CesiumIon = \"CesiumIon\",\n BingMaps = \"BingMaps\",\n Mapbox = \"Mapbox\",\n Google = \"Google\"\n }\n\n export interface IKey {\n ProgramId: Id;\n Key: string;\n IsAccessRestricted?: boolean;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n programId: Id,\n req?: Api.IReqParams\n }): Promise<{\n programKey: IKey\n }> {\n let { api, programId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!programId) {\n throw(\"Program ID is required.\");\n }\n const key = GetCacheKey(programId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`programkey/${programId}`, Api.PrepReqParams(reqParams));\n res({\n programKey: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n programKeys: IKey[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"programkeys\", Api.PrepReqParams(reqParams));\n res({\n programKeys: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n programId: Id,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, programId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!programId) {\n throw(\"Program ID is required.\");\n }\n await api.DELETE(`programkey/${programId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(programId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n programKey: IKey,\n req?: Api.IReqParams\n }): Promise<{\n programKey: IKey\n }> {\n let { api, programKey: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.ProgramId) {\n throw(\"Program ID is required.\");\n }\n const res = await api.POST(\"programkey\", data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ProgramId));\n api.Cache.Remove(GetListCacheKey());\n return {\n programKey: res\n };\n }\n}","import { Style } from \"../bruce-models\";\n\n/**\n * Describes an expectation on what should be rendered for a menu item-\n * between a min-max distance of an entity to the camera.\n */\nexport namespace ZoomControl {\n export enum EDisplayType {\n Hidden = \"hidden\",\n Point = \"point\",\n Geometry = \"geometry\",\n Model3D = \"3d\"\n }\n\n export interface IItem {\n MinZoom?: number,\n MaxZoom?: number,\n DisplayType?: EDisplayType,\n StyleID?: number,\n Style?: Style.IEntitySettings;\n LODCategoryID?: string,\n LODLevel?: number | string;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { PendingAction } from \"../server/pending-action\";\nimport { GlobalApi } from \"../api/global-api\";\nimport { Transform } from \"../common/transform\";\nimport { Carto } from \"../common/carto\";\nimport { Bounds } from \"../common/bounds\";\nimport { Uploader } from \"../internal/uploader\";\nimport { IDictionary } from \"../common/dictionary\";\nimport { ENVIRONMENT } from \"../environment\";\n\ntype Settings = Tileset.Settings.IPointcloud |\n Tileset.Settings.ICad |\n Tileset.Settings.IEntitiesMap |\n Tileset.Settings.IEntities |\n Tileset.Settings.IExternalMap |\n Tileset.Settings.IExternalTerrain |\n Tileset.Settings.IMap |\n Tileset.Settings.ITerrain;\n\n/**\n * Describes the \"Tileset\" concept in Bruce.\n *\n * Tilesets come in three possible variants,\n * 1- A set of instructions to generate a tileset.\n * 2- Settings to load a tileset hosted elsewhere.\n * 3- A set of user-provided files to serve.\n *\n * Read the individual tileset-type settings for each variant.\n */\nexport namespace Tileset {\n export function GetCacheKey(tilesetId: string, loadFiles: boolean): string {\n return `${Api.ECacheKey.Tileset}${Api.ECacheKey.Id}${tilesetId}${Api.ECacheKey.Id}${loadFiles}`;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.Tileset;\n }\n\n export interface ITileset {\n id: string;\n name: string;\n type: EType;\n rootFileName?: string;\n settings?: Settings;\n fileIds?: string[];\n creationTime?: UTC.IUTC;\n modificationTime?: UTC.IUTC;\n generateVersion?: number;\n isDeleteDisabled?: boolean;\n loadUrl?: string;\n isRestricted?: boolean;\n }\n\n export enum EType {\n PointCloud = \"POINT_CLOUD\",\n GeoMap = \"GEO_MAP\", // Previously gtfRasterMaps.\n EntitiesMap = \"ENTITIES_MAP\", // Previously rasterMap.\n EntitiesSet = \"ENTITIES_SET\", // Previously dynamic.\n Cad = \"MODEL\", // Generated CAD tileset from entity id.\n Terrain = \"GEO_TERR\",\n ExternalTerrain = \"EXTERNAL_TERR\",\n ExternalGeoMap = \"EXTERNAL_MAP\",\n LegacyEntitiesSet = \"D\",\n LegacyStatic = \"S\",\n LegacyExternal = \"X\"\n }\n\n export enum EPivot {\n None = \"none\",\n Box = \"box\",\n Weight = \"weight\",\n UCS = \"ucs\"\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n loadFiles?: boolean,\n req?: Api.IReqParams\n }): Promise<{\n tileset: ITileset\n }> {\n let { api, tilesetId, loadFiles, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(tilesetId, loadFiles), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`tileset/get/${tilesetId}?noFiles=${Boolean(loadFiles) ? 0 : 1}`, reqParams);\n res({\n tileset: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(tilesetId, loadFiles),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n /**\n * Returns tileset types for given tileset ids.\n * @param params\n * @deprecated Just use GetList and Get to find the type from the tileset record.\n * @returns\n */\n export async function GetTypes(params: {\n api?: BruceApi.Api,\n tilesetIds: string[],\n req?: Api.IReqParams\n }): Promise<{\n // Tileset id -> type mapping.\n typeMapping: IDictionary<EType>\n }> {\n // UPDATE: This was corrected, this will be removed.\n // Our api is auto-converting legacy types right now which makes it impossible to know what they are.\n // This uses the legacy end-point which doesn't do that...\n let { api, tilesetIds, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const mapping = {};\n if (tilesetIds.length == 1) {\n const tileset = await api.GET(\"ui.tileset/\" + tilesetIds[0], Api.PrepReqParams(reqParams));\n if (tileset) {\n mapping[tilesetIds[0]] = tileset.Type;\n }\n }\n else if (tilesetIds.length > 1) {\n const tilesets = await api.GET(\"ui.tilesets\", Api.PrepReqParams(reqParams));\n for (const tileset of tilesets) {\n if (tilesetIds.indexOf(tileset.ID) >= 0) {\n mapping[tileset.ID] = tileset.Type;\n }\n }\n }\n return {\n typeMapping: mapping\n };\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n tilesets: ITileset[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"tileset/getList\", reqParams)\n res({\n tilesets: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tilesetId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n await api.DELETE(`tileset/delete/${tilesetId}`, reqParams);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + tilesetId);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n tileset: ITileset,\n req?: Api.IReqParams\n }): Promise<{\n tileset: ITileset\n }> {\n let { api, tileset: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.name || !data?.type) {\n throw(\"Tileset name and type are required.\");\n }\n let isNew = !data.id;\n if (isNew) {\n const res: ITileset = await api.GET(`tileset/new?type=${data.type}&name=${Api.Encode(data.name)}`, reqParams);\n data = {\n ...res,\n ...data,\n settings: {\n ...res.settings,\n ...data.settings\n },\n id: res.id\n }\n }\n await api.POST(`tileset/update/${data.id}`, data, Api.PrepReqParams(reqParams));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + data.id);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\n return {\n tileset: data\n };\n }\n\n export async function UploadFile(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: File,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<void> {\n let { api, file, req, tilesetId, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId || !file) {\n throw(\"Tileset ID and file are required.\");\n }\n const size = file?.size;\n if (!size) {\n throw(\"You cannot upload a 0byte sized file.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\n await Uploader.DoMultiPartUpload({\n api,\n file,\n urlSuffix: `tileset/uploadFileEx/${tilesetId}/add`,\n req,\n onProgress\n });\n }\n else {\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/files`, file, req);\n }\n api.Cache.Remove(GetCacheKey(tilesetId, true));\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n }\n\n export async function DeleteFile(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tilesetId, file, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId || !file) {\n throw(\"Tileset ID and file are required.\");\n }\n await api.DELETE(`tileset/deleteFile/${tilesetId}/files/${file}`, reqParams);\n api.Cache.Remove(GetCacheKey(tilesetId, true));\n }\n\n export async function UploadSrcFile(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: File,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<void> {\n let { api, file, req, tilesetId, onProgress } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId || !file) {\n throw(\"Tileset ID and file are required.\");\n }\n const size = file?.size;\n if (!size) {\n throw(\"You cannot upload a 0byte sized file.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\n await Uploader.DoMultiPartUpload({\n api,\n file,\n urlSuffix: `tileset/uploadFileEx/${tilesetId}/src`,\n req,\n onProgress\n });\n }\n else {\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/src`, file, req);\n }\n api.Cache.Remove(GetCacheKey(tilesetId, true));\n onProgress?.({\n percent: 100,\n uploaded: true\n });\n return;\n }\n\n export async function DeleteSrcFile(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tilesetId, file, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId || !file) {\n throw(\"Tileset ID and file are required.\");\n }\n await api.DELETE(`tileset/deleteFile/${tilesetId}/src/${file}`, reqParams);\n api.Cache.Remove(GetCacheKey(tilesetId, true));\n }\n\n export function GetFileUrl(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: string\n }): string {\n let { api, tilesetId, file } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n if (!file) {\n file = \"\";\n }\n return api.GetBaseUrl() + `tileset/getFile/${tilesetId}/files/${file}`;\n }\n\n export function GetSrcFileUrl(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n file: string\n }): string {\n let { api, tilesetId, file } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n if (!file) {\n file = \"\";\n }\n return api.GetBaseUrl() + `tileset/getFile/${tilesetId}/src/${file}`;\n }\n\n export function GetPublicFileUrl(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n // Default = false.\n viaCdn?: boolean,\n // (Optional) Cache killing token to append to the request url.\n viaCdnCacheToken?: number | string,\n file: string\n }): string {\n let { api, tilesetId, file, viaCdn, viaCdnCacheToken } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n if (!file) {\n file = \"\";\n }\n const cdnBaseUrl = viaCdn ? api.GetCdnBaseUrl() : null;\n if (cdnBaseUrl) {\n if (!viaCdnCacheToken) {\n viaCdnCacheToken = 0;\n }\n return cdnBaseUrl + `tileset/file/${tilesetId}/${file}?accountId=${api.AccountId}&cacheToken=${viaCdnCacheToken}`;\n }\n else {\n return api.GetBaseUrl() + `tileset/file/${tilesetId}/${file}`;\n }\n }\n\n export async function Generate(params: {\n api?: BruceApi.Api,\n tilesetId: string,\n req?: Api.IReqParams\n }): Promise<{\n pendingActionId: number\n }> {\n let { api, tilesetId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!tilesetId) {\n throw(\"Tileset ID is required.\");\n }\n const res: PendingAction.IAction = await api.GET(`tileset/generate/${tilesetId}`, Api.PrepReqParams(reqParams));\n return {\n pendingActionId: res.ID\n };\n }\n\n export namespace Publish {\n export function GetCacheKey(accountId: string, tilesetId?: string): string {\n if (!tilesetId) {\n tilesetId = \"\";\n }\n return Api.ECacheKey.PublishTileset + Api.ECacheKey.Id + accountId + Api.ECacheKey.Id + tilesetId;\n }\n\n export function GetAccessAllowedCacheKey(tilesetId: string, sourceAccountId: string, forAccountId: string) {\n return Api.ECacheKey.PublishTileset + Api.ECacheKey.TilesetAccess + Api.ECacheKey.Id + tilesetId + Api.ECacheKey.Id + sourceAccountId + Api.ECacheKey.Id + forAccountId;\n }\n\n export interface IPublish {\n ID?: number;\n Name: string;\n \"Tileset.ID\"?: string;\n \"PublishedBy.ClientAccount.ID\"?: string;\n \"PublishedBy.User.ID\"?: string;\n \"Published.DateTime\"?: UTC.IUTC;\n IsPublic: boolean;\n \"EnabledFor.ClientAccount.ID\"?: string[];\n }\n\n export async function Update(params: {\n api?: GlobalApi.Api,\n published: IPublish,\n req?: Api.IReqParams\n }): Promise<{\n published: IPublish\n }> {\n let { api, published: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGlobalApi();\n }\n\n if (!data?.[\"Tileset.ID\"] || !data?.[\"PublishedBy.ClientAccount.ID\"] || !data?.[\"PublishedBy.User.ID\"]) {\n throw(\"Tileset ID, client account ID, and user ID are required.\");\n }\n if (!data.ID) {\n data.ID = 0;\n }\n const res: IPublish = await api.POST(`tileset/${data.ID}`, data, reqParams);\n const req = {\n \"ClientAccount.ID\": data[\"EnabledFor.ClientAccount.ID\"]\n };\n data.ID = res.ID;\n await api.POST(`tileset/${data.ID}/enableForAccounts`, req, reqParams);\n await api.Cache.Remove(GetCacheKey(data[\"PublishedBy.ClientAccount.ID\"], data[\"Tileset.ID\"]));\n await api.Cache.Remove(GetCacheKey(data[\"PublishedBy.ClientAccount.ID\"]));\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.PublishTileset + Api.ECacheKey.TilesetAccess);\n return {\n published: data\n };\n }\n\n export async function Get(params: {\n api?: GlobalApi.Api,\n accountId: string,\n tilesetId: string,\n req?: Api.IReqParams\n }): Promise<{\n published: IPublish\n }> {\n let { api, accountId, tilesetId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGlobalApi();\n }\n\n if (!accountId || !tilesetId) {\n throw(\"Client account ID and tileset ID are required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(accountId, tilesetId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`tilesetByPublisher/${accountId}/${tilesetId}`, reqParams);\n res({\n published: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(accountId, tilesetId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: GlobalApi.Api,\n accountId: string,\n req?: Api.IReqParams\n }): Promise<{\n published: IPublish[]\n }> {\n let { api, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGlobalApi();\n }\n\n if (!accountId) {\n throw(\"Client account ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`tilesets/enabledForAccount/${accountId}`, reqParams);\n res({\n published: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(accountId),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n /**\n * Returns if a given tileset is allowed to be loaded for a given account.\n * @param params \n */\n export async function IsAccessAllowed(params: {\n // Tileset + account from which to load.\n tilesetId: string,\n sourceAccountId: string,\n api?: GlobalApi.Api,\n // Account we're loading in.\n forAccountId?: string,\n req?: Api.IReqParams\n }): Promise<boolean> {\n let { tilesetId, sourceAccountId, api, forAccountId, req } = params;\n if (!forAccountId) {\n forAccountId = ENVIRONMENT.PARAMS.accountId;\n }\n // Null source account id means it's a tileset from within the same account.\n // We also don't want to bother looking for records if we're loading in our own account.\n if (forAccountId == sourceAccountId || !sourceAccountId) {\n return true;\n }\n if (!api) {\n api = ENVIRONMENT.Api().GetGlobalApi();\n }\n req = Api.PrepReqParams(req);\n const key = GetAccessAllowedCacheKey(tilesetId, sourceAccountId, forAccountId);\n const cacheData = await api.GetCacheItem(key, req);\n if (cacheData?.found) {\n return cacheData.data;\n }\n const prom: Promise<boolean> = new Promise(async (res, rej) => {\n try {\n // We try find the published record for the tileset.\n // If it doesn't exist, then it's not published.\n const {published} = await GetList({\n accountId: forAccountId,\n api: api,\n });\n const tileset = published.find(x => x[\"Tileset.ID\"] == tilesetId && x[\"PublishedBy.ClientAccount.ID\"] == sourceAccountId);\n res(tileset != null);\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: key,\n value: prom,\n req: req\n });\n return prom;\n }\n }\n\n export namespace Settings {\n export interface ICad {\n rootEntityId: string;\n entityTypeId: string;\n styleId?: number;\n lodKey?: string;\n movePivot?: Tileset.EPivot;\n ucsId?: number;\n epsg?: number;\n thumbFileId?: string;\n location?: Carto.ICarto;\n offset?: any;\n transform?: Transform.ITransform;\n doubleSided?: boolean;\n b3dmFileSize?: number;\n maximumScreenSpaceError?: number;\n }\n\n export enum EMapTileSize {\n IMG_256 = 256,\n IMG_512 = 512,\n IMG_1024 = 1024,\n IMG_2048 = 2048\n }\n\n export interface IEntitiesMap {\n imageSize: EMapTileSize;\n levelMin: number;\n levelMax: number;\n entityTypeId: string;\n styleId: number;\n filter: any;\n boundaries: Bounds.IBounds;\n }\n\n export interface IEntities {\n zoomControl?: any[];\n boundaries?: Bounds.IBounds;\n filter?: any;\n altitudeRefType?: string;\n terrainSource?: string;\n terrainUri?: string;\n doubleSided?: boolean;\n entityTypeId?: string;\n styleId?: number;\n }\n\n export enum EExternalMapType {\n TileMapImagery = \"TileMapImagery\",\n OpenStreetMapImagery = \"OpenStreetMapImagery\",\n MapBoxImagery = \"MapBoxImagery\",\n CesiumIon = \"CesiumIon\"\n }\n\n export interface IExternalMap {\n url?: string;\n mapType?: EExternalMapType;\n fileExtension?: string;\n externalId?: number | string;\n styleId?: string;\n account?: string;\n key?: string;\n iconClientFileId?: string;\n }\n\n export interface IExternalTerrain {\n requestVertexNormals?: boolean;\n url?: string;\n }\n\n export interface IMap {\n sourceFileId: string;\n imageSize: number;\n levelMin: number;\n levelMax: number;\n boundaries?: Bounds.IBounds;\n }\n\n export interface IPointcloud {\n sourceFileIds: string[];\n location: Carto.ICarto;\n transform: Transform.ITransform;\n pntFileSize?: number;\n epsg?: number;\n attenuation?: boolean;\n attenuationMax?: number;\n movePivot?: Tileset.EPivot;\n maximumScreenSpaceError?: number;\n }\n\n export interface ITerrain {\n sourceFileId?: string;\n startLevel?: number;\n }\n }\n}","import { IDictionary } from \"../bruce-models\";\nimport { Entity } from \"../entity/entity\";\nimport { Tileset } from \"../tileset/tileset\";\nimport { ObjectUtils } from \"../util/object-utils\";\nimport { ZoomControl } from \"./zoom-control\";\n\n/**\n * Describes a menu item found in project views.\n * Menu items are used to dictate what data to load in a scene.\n * A menu item may be a container for other items.\n */\nexport namespace MenuItem {\n export enum EType {\n None = \"NONE\",\n Entities = \"BruceEntity\",\n Entity = \"SingleEntity\",\n Osm = \"OSMBuildingsTileset\",\n CadTileset = \"ModelTileset\",\n ArbTileset = \"ArbitraryTileset\",\n IonTileset = \"Cesium3DTileset\",\n Kml = \"StaticKML\",\n EntityTileset = \"EntitiesTileset\",\n EntityRaster = \"RasterEntitiesTileset\",\n PointCloud = \"PointCloudTileset\",\n EntitiesLoaded = \"LoadedEntities\",\n EntitiesIds = \"EntitiesIds\",\n Relations = \"Relations\",\n GooglePhotoTileset = \"GooglePhotoTileset\"\n }\n\n export interface ILegend {\n model3d: boolean;\n point: boolean;\n polygon: boolean;\n polylines: boolean;\n tileset3d: boolean;\n }\n\n export interface IAuthorSettings {\n // If true, the clicked entity will be read and used to update the authored entity.\n readClickedEntity?: boolean;\n // Optional relationship type to use when relating to the clicked entity.\n clickedRelationTypeId?: string;\n // If set, specified attributes will be copied between the clicked and authored entities.\n copyClickedAttrMapping?: {\n // String is a wrapped path, check PathUtils.\n fromPathStr: string;\n toPathStr: string;\n }[];\n }\n\n export interface IItem {\n id: string;\n Caption: string;\n Children?: IItem[];\n Type: EType;\n hideChildren?: boolean;\n legend?: ILegend;\n authoringEnabled?: boolean;\n authoring?: IAuthorSettings;\n LabelColor?: string;\n renderPriority?: number;\n // Default = false.\n cdnEnabled?: boolean;\n // Used to kill cache. Default = 0.\n // Tilesets have their own counter within their records.\n // This is used for non-tileset items.\n cdnCounter?: number;\n }\n\n export function CreateFromEntityId(entityId: string, typeId: string, styleId?: number): IItem {\n return <Item.IEntity>{\n id: ObjectUtils.UId(),\n Type: EType.Entity,\n Caption: \"Generated Entity Menu Item\",\n BruceEntity: {\n \"EntityType.ID\": typeId,\n EntityId: entityId\n },\n CameraZoomSettings: [\n {\n DisplayType: ZoomControl.EDisplayType.Model3D,\n MaxZoom: 1000000,\n MinZoom: 0,\n StyleID: styleId\n }\n ]\n };\n }\n\n export function CreateFromTypeId(typeId: string, styleId?: number): IItem {\n return <Item.IEntities>{\n id: ObjectUtils.UId(),\n Type: EType.Entities,\n Caption: \"Generated Entity Type Menu Item\",\n BruceEntity: {\n \"EntityType.ID\": typeId\n },\n CameraZoomSettings: [\n {\n DisplayType: ZoomControl.EDisplayType.Model3D,\n MaxZoom: 100000,\n MinZoom: 0,\n StyleID: styleId\n }\n ]\n };\n }\n\n export function CreateFromTilesetId(tilesetId: string, type: Tileset.EType): IItem {\n if (type === Tileset.EType.Cad) {\n return <Item.ICadTileset>{\n\t id: ObjectUtils.UId(),\n\t Type: EType.CadTileset,\n Caption: \"Generated CAD Menu Item\",\n\t FlyTo: false,\n\t\t\t\ttileset: {\n\t\t\t\t\tTilesetID: tilesetId\n\t\t\t\t}\n };\n }\n else if (type == Tileset.EType.EntitiesSet) {\n return <Item.IEntitiesTileset>{\n id: ObjectUtils.UId(),\n Type: EType.EntityTileset,\n Caption: \"Generated Entities Menu Item\",\n FlyTo: false,\n tileset: {\n TilesetID: tilesetId\n }\n };\n }\n else if (type == Tileset.EType.PointCloud) {\n return <Item.IPointcloud>{\n id: ObjectUtils.UId(),\n Type: EType.PointCloud,\n Caption: \"Generated Point Cloud Menu Item\",\n FlyTo: false,\n tileset: {\n TilesetID: tilesetId\n }\n };\n }\n else if (type == Tileset.EType.EntitiesMap) {\n return <Item.IEntitiesRaster>{\n id: ObjectUtils.UId(),\n Type: EType.EntityRaster,\n Caption: \"Generated Entities Menu Item\",\n tileset: {\n TilesetID: tilesetId\n }\n };\n }\n throw(\"Tileset type not supported.\");\n }\n\n export namespace Item {\n export interface ITileset {\n TilesetURL?: string;\n ClientAccountID?: string;\n TilesetID?: string;\n }\n\n export interface IClustering {\n // Minimum distance to an entity for it to cluster.\n // bruce-cesium/point-clustering.ts will have 5000 as default.\n minDistance?: number;\n // Minimum total loaded for the menu item for clustering to kick in.\n // bruce-cesium/point-clustering.ts will have 0 as default.\n // It will always try to cluster when points are near each-other and camera is far away.\n minTotalCount?: number;\n // TODO: Zoom control-like settings for clustering.\n // Between x and y meters the points should cluster with z distance.\n // Eg: \"Between 5,000 and 15,000 meters the points should cluster within 500 meters.\"\n }\n\n export interface IEntities extends IItem {\n BruceEntity: {\n \"EntityType.ID\": string;\n Filter?: IDictionary<string>;\n // If true, menu item will display individual sub-items for tags.\n ExpandLayers?: boolean;\n // If ExpandLayers = true, this is the saved sub-items to render.\n // If this is null or empty, that means there is nothing to render for this menu item.\n SelectedExpandLayers?: number[];\n };\n CameraZoomSettings?: ZoomControl.IItem[];\n\n // If true, menu item will render point and icon entities as clustered points when close together.\n enableClustering?: boolean;\n clustering?: IClustering;\n\n // If BruceEntity.ExpandLayers = true,\n // this will dictate if camera should be used to scan for tags in view.\n filterLayersByCameraLocation?: boolean;\n showAllLayersExcludeBelow?: boolean;\n layers?: number[];\n extLayers?: {\n ID: number,\n checked: boolean\n }[];\n }\n\n export interface IEntity extends IItem {\n BruceEntity: {\n \"EntityType.ID\"?: string;\n EntityId: string;\n };\n CameraZoomSettings?: ZoomControl.IItem[];\n showAllLayers?: boolean;\n showAllLayersExcludeBelow?: boolean;\n }\n\n export interface IArbTileset extends IItem {\n FlyTo?: boolean;\n BruceEntity?: {\n \"EntityType.ID\"?: string;\n };\n tileset?: ITileset;\n StyleMapping?: any[];\n styleId?: number;\n ApplyStyles?: boolean;\n IonResource?: {\n AssetID: string | number;\n }\n }\n export interface IIonTileset extends IArbTileset {};\n\n export interface ICadTileset extends IItem {\n tileset: ITileset;\n FlyTo?: boolean;\n StyleMapping?: any[];\n StyleBlending?: {\n // Hightlight = 0, replace = 1, mix = 2.\n blendMode: 0 | 1 | 2;\n // 1 = 100% new colour. 0 = original colour.\n blendPercent: number;\n };\n styleId?: number;\n BruceEntity?: {\n // Optional restriction.\n // When not null, only entities matching supplied ids will be visible.\n EntityIds?: string[];\n // Optional styling.\n // When entity ids are set, other entities can optionally be \"ghosts\".\n // This means they will be available but at low opacity.\n Ghosts?: boolean;\n }\n }\n\n export interface IPointcloud extends IItem {\n FlyTo?: boolean;\n tileset: ITileset;\n }\n\n export interface IEntitiesRaster extends IItem {\n tileset: ITileset;\n }\n\n export interface IOsm extends IItem {\n BruceEntity?: {\n \"EntityType.ID\"?: string;\n SourceId: string;\n };\n ghostLoading?: boolean;\n }\n\n export interface IKml extends IItem {\n KML?: {\n ClientFile?: {\n ID: string;\n },\n // Arbitrarily hosted file to load instead of a client file.\n fileUrl?: string;\n }[]\n }\n\n export interface IEntitiesTileset extends IItem {\n FlyTo: boolean;\n tileset: ITileset;\n }\n\n export interface IEntitiesLoaded extends MenuItem.IItem {\n BruceEntity: {\n \"EntityType.ID\"?: string;\n Entities: Entity.IEntity[];\n };\n CameraZoomSettings?: ZoomControl.IItem[];\n }\n\n export interface IEntityIds extends MenuItem.IItem {\n BruceEntity: {\n EntityIds: string[];\n };\n CameraZoomSettings?: ZoomControl.IItem[];\n\n // If true, menu item will render point and icon entities as clustered points when close together.\n enableClustering?: boolean;\n clustering?: IClustering;\n }\n\n export interface IEntityRelations extends MenuItem.IItem {\n BruceEntity: {\n EntityIds: string[];\n },\n // Empty = render all types.\n relationTypeIds?: string[]\n }\n\n export interface IGooglePhotoTileset extends IItem {\n // Css color string to apply to the tileset.\n // This follows Cesium logic for when color is pure white,\n // that means don't apply colour and only apply alpha.\n colorMask?: string;\n }\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Camera } from \"../common/camera\";\r\nimport { IDictionary } from \"../common/dictionary\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\nimport { Markup } from \"../markup/markup\";\r\nimport { Section } from \"../common/section\";\r\nimport { MenuItem } from \"./menu-item\";\r\nimport { ProjectViewTile } from \"./project-view-tile\";\r\n\r\n/**\r\n * Describe the \"Project View Bookmark\" concept within Bruce.\r\n * This is referred to as \"slides\" in older code.\r\n *\r\n * A bookmark is a snapshot of what should be displayed and how in a particular project view.\r\n */\r\nexport namespace ProjectViewBookmark {\r\n export function GetCacheKey(viewId: string, bookmarkId: string): string {\r\n return `${Api.ECacheKey.ProjectViewBookmark}${Api.ECacheKey.Id}${viewId}${Api.ECacheKey.Id}${bookmarkId}`;\r\n }\r\n\r\n export function GetListCacheKey(viewId: string): string {\r\n return `${Api.ECacheKey.ProjectViewBookmark}${Api.ECacheKey.Id}${viewId}`;\r\n }\r\n\r\n // This is the expected default version for the DataVersion value.\r\n // This value should NOT be changed without looking at our API and seeing what the default value is.\r\n export const DEFAULT_DATA_VERSION = 1;\r\n\r\n export interface IBaseBookmark {\r\n ID?: string;\r\n Title?: string;\r\n Note?: string;\r\n \"Screenshot.ClientFile.ID\"?: string;\r\n \"UI.View.ID\"?: string;\r\n \"Created.ByUser.ID\"?: string;\r\n \"Created.Date\"?: UTC.IUTC;\r\n \"UI.SlideGroup.ID\"?: number;\r\n // This is the version of the data in the bookmark.\r\n // This is used to determine how to parse the bookmark's settings.\r\n // 1 - 10,000 are reserved for Nextspace use.\r\n DataVersion: number;\r\n DisplayOrder?: number;\r\n Settings?: IBaseSettings;\r\n // Clipping planes to apply to terrain/entities in the scene.\r\n // A clipping plane is associated with a tileset by root entity id.\r\n sections?: Section.ISection[];\r\n }\r\n\r\n /**\r\n * These are the base settings expected in any bookmark data-version.\r\n * The only exception is data-version = 1 which is our deprecated legacy format.\r\n */\r\n export interface IBaseSettings {\r\n menuItemIds?: string[];\r\n // This is a map of menu item ids to their alternations.\r\n // An alternation is a menu item that has varied settings to the base menu item.\r\n // For example, the base menu item might be \"enabled certain tags\", and the alternation is \"enabled x,y,z certain tags\" to be specific in a bookmark.\r\n menuItemAlternations?: IDictionary<MenuItem.IItem>;\r\n }\r\n\r\n export type Bookmark = LegacyNavigator.IBookmark | Navigator.IBookmark | IBaseBookmark;\r\n\r\n export namespace LegacyNavigator {\r\n export const DATA_VERSION = 1;\r\n\r\n export interface IBookmark extends IBaseBookmark {\r\n Camera?: ICamera;\r\n Settings?: ISettings;\r\n }\r\n\r\n export interface IBookmarkImagery {\r\n title: string;\r\n contrast: number;\r\n hue: number;\r\n saturation: number;\r\n gamma: number;\r\n brightness: number;\r\n alpha: number;\r\n }\r\n\r\n export interface ISettings extends IBaseSettings {\r\n selectedItemIds?: string[];\r\n order?: number;\r\n hiddenEntityIds?: string[];\r\n drawnRelationEntityIDs?: string[];\r\n imagery?: IBookmarkImagery[];\r\n terrain?: string;\r\n globeColor?: string;\r\n shadows?: boolean;\r\n groundOcclusion?: boolean;\r\n ambientOcclusion?: boolean;\r\n markup?: Markup.IMarkup;\r\n cameraFrustum?: Camera.EFrustum;\r\n displayTimeline?: boolean;\r\n timelineSettings?: any;\r\n }\r\n\r\n /**\r\n * Lat,lon is in degrees.\r\n * Altitude is meters relative to ground.\r\n * Heading, pitch, roll are in radians.\r\n */\r\n export interface ICamera {\r\n position: {\r\n latitude: number;\r\n longitude: number;\r\n height: number;\r\n };\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export const DATA_VERSION = 2;\r\n\r\n export interface IBookmark extends IBaseBookmark {\r\n Camera?: ICamera;\r\n Settings?: ISettings;\r\n\r\n }\r\n\r\n export interface ISettings extends IBaseSettings {\r\n groundOcclusion?: boolean;\r\n // Null = use default, empty array = no imagery.\r\n imagery?: ProjectViewTile.IBookmarkImagery[];\r\n terrain?: ProjectViewTile.IBookmarkTerrain;\r\n // Css color string to apply to the base globe.\r\n globeColor?: string;\r\n // 0 = 0%, 1 = 100%. Default is 100%.\r\n globeAlpha?: number;\r\n // If true, the globe will be hidden. Default is false.\r\n globeHidden?: boolean;\r\n markup?: Markup.IMarkup;\r\n shadows?: IShadows;\r\n ambientOcclusion?: IAmbientOcclusion;\r\n lighting?: ILighting;\r\n quality?: IQuality;\r\n // iso8601 date time string.\r\n dateTime?: string;\r\n // Entity id -> opacity. Where 1 = 100% opacity.\r\n entityOpacityMap?: IDictionary<number>;\r\n // Null = use default, empty array = deselect.\r\n // If default is null then selected ids should not be altered.\r\n selectedEntityIds?: string[];\r\n hiddenEntityIds?: string[];\r\n isolatedEntityIds?: string[];\r\n // This enables lighting that makes terrain elevation apparent.\r\n hillShades?: boolean;\r\n // A bit of an awkward transition from the old system.\r\n // We render \"all\" relationships for given entity ids.\r\n // This will create a menu item under the hood, later we will use menu items directly.\r\n renderedEntityRelations?: string[];\r\n // This is a list of entity ids that are refreshed every x seconds.\r\n // We'll enforce about 200 maximum ids. Refresh every 2 - 5 seconds.\r\n liveEntityIds?: string[];\r\n // This will enable the wireframe view for the terrain provider.\r\n terrainWireframe?: boolean;\r\n\r\n /**\r\n * We're sampling the idea of storing these as entities before committing to saving them here.\r\n */\r\n // Drawn measurements.\r\n // measurements?: IMeasurement[];\r\n }\r\n\r\n // export interface IMeasurement {\r\n // type: \"polyline\" | \"point\" | \"polygon\";\r\n // points: Carto.ICarto[];\r\n // innerHTML: string;\r\n // }\r\n\r\n export interface IShadows {\r\n enabled: boolean;\r\n soften: boolean;\r\n pixelSize: number;\r\n darkness: number;\r\n }\r\n\r\n export interface IAmbientOcclusion {\r\n enabled: boolean;\r\n intensity: number;\r\n lengthCap: number;\r\n bias: number;\r\n blurStepSize: number;\r\n stepSize: number;\r\n }\r\n\r\n export interface ILighting {\r\n color: string;\r\n intensity: number;\r\n }\r\n\r\n export interface IQuality {\r\n fxaa: boolean;\r\n }\r\n\r\n export interface ICamera {\r\n // Meters relative to ground.\r\n altitude: number;\r\n // In degrees.\r\n latitude: number;\r\n longitude: number;\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n // Milliseconds transition from current position to bookmark.\r\n transition?: number;\r\n // If frustum is different between two bookmarks, transition should be instant.\r\n cameraFrustum?: Camera.EFrustum;\r\n }\r\n }\r\n\r\n export async function Get(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n bookmarkId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmark: Bookmark\r\n }> {\r\n let { api, viewId, bookmarkId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n \r\n if (!viewId || !bookmarkId) {\r\n throw(\"View ID and Bookmark ID are required.\");\r\n }\r\n const key = GetCacheKey(viewId, bookmarkId);\r\n const cache = await api.GetCacheItem(key, reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n bookmark: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n bookmarkId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, viewId, bookmarkId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!viewId || !bookmarkId) {\r\n throw(\"View ID and Bookmark ID are required.\");\r\n }\r\n await api.DELETE(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId, bookmarkId));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n }\r\n\r\n export async function GetList(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmarks: Bookmark[]\r\n }> {\r\n let { api, viewId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const cache = await api.GetCacheItem(GetListCacheKey(viewId), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slides`, Api.PrepReqParams(reqParams));;\r\n const items = data.Items ? data.Items : [];\r\n // Cache individual items.\r\n // Maybe better to load list cache when getting 1 slide and seeing if it's in there.\r\n // WARNING: Right now the data matches, in the future the list may contain a shortened result.\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i] as ProjectViewBookmark.IBaseBookmark;\r\n const prom = new Promise((res) => {\r\n res({\r\n bookmark: item\r\n });\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(viewId, item.ID),\r\n value: prom,\r\n req: reqParams\r\n });\r\n }\r\n res({\r\n bookmarks: items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(viewId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Update(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n bookmark: Bookmark,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmark: Bookmark\r\n }> {\r\n let { api, viewId, bookmark: data, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!data?.Title) {\r\n data.Title = data.ID;\r\n }\r\n const res = await api.POST(`ui.view/${viewId}/slide/${data.ID ? data.ID : \"\"}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId, <string>data.ID));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n return {\r\n bookmark: res\r\n };\r\n }\r\n\r\n export async function SetOrder(params: {\r\n api?: BruceApi.Api,\r\n viewId: string,\r\n bookmarkIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, viewId, bookmarkIds, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n const reqData = {\r\n \t\"UISlide.ID\": bookmarkIds,\r\n \t\"DisplayOrder.Start\": 0\r\n };\r\n await api.POST(`ui.view/${viewId}/slides/setOrder`, reqData, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey(viewId));\r\n }\r\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ObjectUtils } from \"../util/object-utils\";\nimport { UTC } from \"../common/utc\";\nimport { MenuItem } from \"./menu-item\";\nimport { ProjectViewLegacyTile } from \"./project-view-legacy-tile\";\nimport { ProjectViewTile } from \"./project-view-tile\";\nimport { ProjectViewBookmark } from \"./project-view-bookmark\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { ProjectViewSelection } from \"./project-view-selection\";\n\n/**\n * Describes the \"Project View\" concept within Bruce.\n * A project view is a collection of settings for a visualization application we support.\n * It will describe what panels to show and how, it will also describe all possible ways data can be displayed.\n */\nexport namespace ProjectView {\n export function GetCacheKey(viewId: string): string {\n return `${Api.ECacheKey.ProjectView}${Api.ECacheKey.Id}${viewId}`;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.ProjectView;\n }\n\n // This is the expected default version for the DataVersion value.\n // This value should NOT be changed without looking at our API and seeing what the default value is.\n export const DEFAULT_DATA_VERSION = 1;\n\n export interface IBaseView {\n ID?: string;\n Name: string;\n Description?: string;\n Feature?: string[];\n \"CreatedByUser.ID\"?: string;\n CreatedTime?: UTC.IUTC;\n DefaultUISlideID?: string;\n CreatedByUIVersion?: string;\n // This is the version of the data in the view.\n // This is used to determine how to parse the view's settings.\n // 1 - 10,000 are reserved for Nextspace use.\n DataVersion: number;\n // Admin only property for what email should be the project view's support line.\n SupportEmail?: string;\n Settings?: IBaseSettings;\n // If true, this view is considered the default for the account.\n // Operator may use this project view to load default settings.\n IsDefault?: boolean;\n }\n\n /**\n * These are the base settings expected in any project view data-version.\n * The only exception is data-version = 1 which is our deprecated legacy format.\n */\n export interface IBaseSettings {\n // Menu item structure that defines how and what to load in the scene.\n menuItems?: MenuItem.IItem[];\n // If true, anonymous users won't be able to access the view.\n IsLoginRequired?: boolean;\n // If true, users must have the permission \"Permission.EPermPrefix.ACCESS_PROJECT_VIEW + view.ID\" to access the view.\n IsRestricted?: boolean;\n // Per project view branding to compliment the account branding.\n branding?: IBranding\n // Describes settings for entity selection for a project view record.\n selection?: ProjectViewSelection.ISelection;\n }\n \n export interface IBranding {\n // Client file id for the project view's banner.\n // In Navigator this is found within the Navigator's dashboard.\n bannerFileId?: string;\n }\n\n export type View = LegacyNavigator.IView | Navigator.IView | IBaseView;\n\n export namespace LegacyNavigator {\n export const DATA_VERSION = 1;\n\n export interface IShadowSettings {\n IsShadowEnabled?: boolean;\n IsShadowSoft?: boolean;\n ShadowSampleSize?: number;\n }\n\n export interface ISettings extends IBaseSettings {\n BookmarkTransitionSpeed?: number;\n Camera?: any;\n CameraFrustum?: number;\n CesiumMapSources?: ProjectViewLegacyTile.IMapSource[];\n CesiumTerrainSources?: ProjectViewLegacyTile.ITerrainSource[];\n ControlsSettings?: any;\n DefaultMapTiles?: string;\n DefaultTerrain?: string;\n DisplayTimeline?: boolean;\n GroundOcclusion?: boolean;\n Extensions?: any;\n GlobeColor?: string;\n SelectionHighlightColor?: string;\n LayersMenu?: MenuItem.IItem[];\n OASettings?: any;\n LogoImage?: any;\n LegendImage?: any;\n TilesetBackfaceCulling?: boolean;\n TopPanelComponents?: string[];\n LeftPanelComponents?: string[];\n PostProcessFXAA?: boolean;\n Shadows?: boolean;\n CustomFormSettings?: any;\n PreloadEntityTypes?: boolean;\n ClickActions?: any;\n Shadow?: {\n StaticCamera?: IShadowSettings;\n MovingCamera?: IShadowSettings;\n }\n }\n\n export interface IView extends IBaseView {\n Settings: ISettings;\n }\n }\n\n export namespace Navigator {\n export const DATA_VERSION = 2;\n\n export interface ISettings extends IBaseSettings {\n // Imagery and terrains that non-admin users can select from.\n // Sources used in bookmarks will automatically be added to this list.\n imageries?: ProjectViewTile.IViewImagery[];\n terrains?: ProjectViewTile.IViewTerrain[];\n // Defaults are values to apply for bookmarks when either the bookmark-\n // is missing or the value is missing in the bookmark settings.\n defaults?: {\n camera?: ProjectViewBookmark.Navigator.ICamera;\n settings?: ProjectViewBookmark.Navigator.ISettings;\n };\n // Describes how to present contact information to the users.\n // The contact email is set in \"view.SupportEmail\". Only an admin can read or write this value.\n contact?: IContact;\n plugins?: IPlugins;\n // Default is yellow at 0.5 opacity.\n selectionColor?: string;\n // Presentation mode settings.\n present?: IPresent;\n }\n\n export interface IPresent {\n // Time in milliseconds to hold bookmarks before moving to the next bookmark.\n // This is a default time and can be overridden by the bookmark's duration.\n bookmarkDuration?: number;\n }\n\n /**\n * Describes how to present contact information to the users.\n */\n export interface IContact {\n // Default = false.\n // Indicates if the user should be able to reach support.\n enabled: boolean;\n // Description to display in the support dialog.\n // Null = application's default text.\n description?: string;\n // FontAwesome icon to use for the support dialog button.\n // Null = application's default icon.\n icon?: string;\n }\n\n export interface IPlugins {\n // Enabled plugin ids.\n enabledIds: string[];\n }\n\n export interface IView extends IBaseView {\n Settings: ISettings;\n }\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n viewId: string,\n req?: Api.IReqParams\n }): Promise<{\n view: View\n }> {\n let { api, viewId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!viewId) {\n throw(\"View ID is required.\");\n }\n const key = GetCacheKey(viewId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`ui.view/${viewId}`, Api.PrepReqParams(reqParams));\n res({\n view: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n views: View[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"ui.view/list\", Api.PrepReqParams(reqParams));\n res({\n views: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n viewId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, viewId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!viewId) {\n throw(\"View ID is required.\");\n }\n await api.DELETE(`ui.view/${viewId}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(viewId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n view: View,\n req?: Api.IReqParams\n }): Promise<{\n view: View\n }> {\n let { api, view: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data) {\n data = <any>{};\n }\n const isNew = !data.ID;\n if (!data.ID) {\n data.ID = ObjectUtils.UId();\n }\n if (!data.Name) {\n data.Name = data.ID;\n }\n if (!data.CreatedByUIVersion) {\n data.CreatedByUIVersion = \"-1\";\n }\n if (isNew) {\n data = await api.POST(`ui.view/${data.ID}`, data, Api.PrepReqParams(reqParams));\n }\n else {\n data = await api.PUT(`ui.view/${data.ID}`, data, Api.PrepReqParams(reqParams));\n }\n api.Cache.Remove(GetCacheKey(<string>data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n view: data\n };\n }\n}","import { BruceApi } from \"../api/bruce-api\";\nimport { Api } from \"../api/api\";\nimport { ProjectView } from \"./project-view\";\nimport { ENVIRONMENT } from \"../environment\";\n\nasync function getTemplateSettings(apiGetter: BruceApi.IGetter, reqParams?: Api.IReqParams): Promise<ProjectView.LegacyNavigator.ISettings> {\n const {view} = await ProjectView.Get({\n api: apiGetter.getApi(Api.TEMPLATE_ACCOUNT_ID), \n viewId: \"default\", \n req: reqParams\n });\n return (view.Settings as ProjectView.LegacyNavigator.ISettings) ?? <ProjectView.LegacyNavigator.ISettings>{};\n}\n\nfunction checkSourceToTemplate(items: ProjectViewLegacyTile.ISource[], templateItem: ProjectViewLegacyTile.ISource, addIfMissing: boolean): void {\n const index = items.findIndex(x => x.Name === templateItem.Name);\n if (index > -1) {\n templateItem.IsDefault = true;\n templateItem.IsEnabled = items[index].IsEnabled;\n items[index] = templateItem;\n }\n else if (addIfMissing) {\n templateItem.IsDefault = true;\n items.push(templateItem);\n }\n}\n\n/**\n * Describes a terrain or map source that are found in project view records.\n * This is a concept we want to trash as we're moving towards storing tileset ids instead.\n * This will help at least understand and manage this dying concept.\n */\nexport namespace ProjectViewLegacyTile {\n export interface ISource {\n SourceUrl?: string;\n IsEnabled?: boolean;\n IsDefault?: boolean;\n Name: string;\n Tooltip?: string;\n IconUrl?: string;\n }\n\n export interface IMapSource extends ISource {\n SourceUrl?: string;\n IonAssetID?: number,\n MapBoxID?: string;\n MapBoxUsername?: string;\n ProgramKey?: string;\n FileExtension?: string,\n Minimum?: number;\n Maximum?: number;\n Type?: string;\n }\n\n export interface ITerrainSource extends ISource {\n RequestWaterMask?: boolean;\n RequestVertexNormals?: boolean;\n }\n\n export async function MergeMapTemplateData(params: {\n getter?: BruceApi.IGetter, \n sources: IMapSource[], \n addIfMissing: boolean, \n req?: Api.IReqParams\n }): Promise<{\n sources: IMapSource[]\n }> {\n let { getter, sources: items, addIfMissing, req: reqParams } = params;\n if (!getter) {\n getter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n const settings = await getTemplateSettings(getter, reqParams);\n const maps = settings.CesiumMapSources ?? [];\n for (let i = 0; i < maps.length; i++) {\n const mapSource = maps[i];\n checkSourceToTemplate(items, mapSource, addIfMissing);\n }\n return {\n sources: items\n };\n }\n\n export async function MergeTerrainTemplateData(params: {\n getter?: BruceApi.IGetter, \n sources: ITerrainSource[], \n addIfMissing: boolean, \n req?: Api.IReqParams\n }): Promise<{\n sources: ITerrainSource[]\n }> {\n let { getter, sources: items, addIfMissing, req: reqParams } = params;\n if (!getter) {\n getter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n const settings = await getTemplateSettings(getter, reqParams);\n const terrains = settings.CesiumTerrainSources ?? [];\n for (let i = 0; i < terrains.length; i++) {\n const terrainSource = terrains[i];\n checkSourceToTemplate(items, terrainSource, addIfMissing);\n }\n return {\n sources: items\n };\n }\n}","\nexport namespace ProjectViewTile {\n export type MapTileId = string | EDefaultImagery;\n export type TerrainTileId = string | EDefaultTerrain;\n\n export interface ITileMeta {\n // Null = using a default tile.\n // (Not the same as a template account one. Default means we don't have a database record of it.).\n accountId?: string;\n tilesetId: string;\n }\n\n export interface IViewTerrain extends ITileMeta {\n tilesetId: TerrainTileId;\n }\n\n export interface IViewImagery extends ITileMeta {\n tilesetId: MapTileId;\n }\n\n export interface IBookmarkImagery extends IViewImagery {\n // 0 - 1, 1 = 100% opacity.\n // Default = 1.\n alpha?: number;\n // Default = 1.\n brightness?: number;\n // Default = 1.\n saturation?: number;\n // Default = 1.\n contrast?: number;\n // Default = 1.\n gamma?: number;\n // Default = 0.\n hue?: number;\n }\n\n export interface IBookmarkTerrain extends IViewTerrain {\n\n }\n\n export enum EDefaultImagery {\n BingMapsAerial = \"bingmapsaerial\",\n BingMapsAerialWithLabels = \"bingmapsaerialwithlabels\",\n BingMapsRoads = \"bingmapsroads\",\n MapboxSatellite = \"mapboxsatellite\",\n MapBoxStreets = \"mapboxstreets\",\n MapBoxStreetsClassic = \"mapboxstreetsclassic\",\n EsriWorldImagery = \"esriworldimagery\",\n EsriWorldStreetMap = \"esriworldstreetmap\",\n EsriNationalGeographic = \"esrinationalgeographic\",\n OpenStreetMap = \"openstreetmap\",\n LINZ = \"linz\",\n StamenWaterColor = \"stamenwatercolor\",\n StamenToner = \"stamentoner\",\n Grid = \"grid\"\n }\n\n export interface IDefaultImagery {\n id: EDefaultImagery;\n name: string;\n iconUrl?: string;\n }\n\n /**\n * Prepared array for UI.\n * TODO: Im not happy with icon urls sitting in the code. I'd prefer we ship these icons in the library as files.\n */\n export const DefaultImagery: IDefaultImagery[] = [\n {\n id: EDefaultImagery.BingMapsAerial,\n name: \"Bing Maps Aerial\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingAerial.png\"\n },\n {\n id: EDefaultImagery.BingMapsAerialWithLabels,\n name: \"Bing Maps Aerial with Labels\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingAerialLabels.png\"\n },\n {\n id: EDefaultImagery.BingMapsRoads,\n name: \"Bing Maps Roads\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingRoads.png\"\n },\n {\n id: EDefaultImagery.MapboxSatellite,\n name: \"Mapbox Satellite\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxSatellite.png\"\n },\n {\n id: EDefaultImagery.MapBoxStreets,\n name: \"Mapbox Streets\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxTerrain.png\"\n },\n {\n id: EDefaultImagery.MapBoxStreetsClassic,\n name: \"Mapbox Streets Classic\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxStreets.png\"\n },\n {\n id: EDefaultImagery.EsriWorldImagery,\n name: \"Esri World Imagery\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriWorldImagery.png\"\n },\n {\n id: EDefaultImagery.EsriWorldStreetMap,\n name: \"Esri World Street Map\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriWorldStreetMap.png\"\n },\n {\n id: EDefaultImagery.EsriNationalGeographic,\n name: \"Esri National Geographic\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriNationalGeographic.png\"\n },\n {\n id: EDefaultImagery.OpenStreetMap,\n name: \"Open Street Map\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/openStreetMap.png\"\n },\n {\n id: EDefaultImagery.LINZ,\n name: \"LINZ\",\n iconUrl: \"https://template.ui.nextspace.host/media/linz.jpg\"\n },\n {\n id: EDefaultImagery.StamenWaterColor,\n name: \"Stamen Water Color\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/stamenWatercolor.png\"\n },\n {\n id: EDefaultImagery.StamenToner,\n name: \"Stamen Toner\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/stamenToner.png\"\n },\n {\n id: EDefaultImagery.Grid,\n name: \"Grid\",\n iconUrl: \"https://template.api.nextspace-uat.net/file/2885d8df-028b-4f5c-80b3-2634f7e7cf69.png\"\n }\n ];\n\n export enum EDefaultTerrain {\n CesiumWorldTerrain = \"cesiumworldterrain\",\n FlatTerrain = \"flatterrain\",\n LINZ = \"linz\"\n }\n\n export interface IDefaultTerrain {\n id: EDefaultTerrain;\n name: string;\n iconUrl?: string;\n }\n\n /**\n * Prepared array for UI.\n * TODO: Im not happy with icon urls sitting in the code. I'd prefer we ship these icons in the library as files.\n */\n export const DefaultTerrains: IDefaultTerrain[] = [\n {\n id: EDefaultTerrain.CesiumWorldTerrain,\n name: \"Cesium World Terrain\",\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/TerrainProviders/CesiumWorldTerrain.png\"\n },\n {\n id: EDefaultTerrain.LINZ,\n name: \"LINZ\",\n iconUrl: \"https://template.ui.nextspace.host/media/linz.jpg\"\n },\n {\n id: EDefaultTerrain.FlatTerrain,\n name: \"Flat Terrain\",\n }\n ]\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Pending Action\" concept within Bruce.\n * A pending action is a record of a server-side background process.\n * This record is used to monitor its progress and completion state.\n */\nexport namespace PendingAction {\n export interface IAction {\n ID: number;\n \"CreatedBy.Application\": string;\n \"Created.Time\": UTC.IUTC;\n \"CreatedByUser.ID\": string;\n Result: string;\n Progress: number;\n \"Completed.Time\": UTC.IUTC;\n Description: string;\n Status: EStatus;\n lastUpdated: UTC.IUTC;\n }\n\n export enum EStatus {\n InProgress = \"IN_PROGRESS\",\n Cancelled = \"CANCELLED\",\n Complete = \"COMPLETE\",\n Failed = \"FAILED\"\n }\n\n export interface IMessage {\n \"PendingAction.ID\": number;\n ID: number;\n \"CreatedBy.Application\": string;\n \"Created.Time\": UTC.IUTC;\n \"Message.Type\": EMessageType | string;\n Message: string;\n }\n\n export enum EMessageType {\n Warn = \"WARNING\",\n Error = \"ERROR\",\n Status = \"STATUS\",\n Info = \"INFO\"\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n actionId: number,\n req?: Api.IReqParams\n }): Promise<{\n action: IAction\n }> {\n let { api, actionId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!actionId) {\n throw(\"Action ID is required.\");\n }\n const data = await api.GET(`pendingAction/${actionId}`, Api.PrepReqParams(reqParams));\n return {\n action: data\n }\n }\n\n export async function GetRelevantList(params: {\n api?: BruceApi.Api,\n stricter?: boolean,\n reqParams?: Api.IReqParams\n }): Promise<{\n actions: IAction[]\n }> {\n let { api, stricter, reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const data = await api.GET(`pendingActions/important?Update=${Boolean(stricter)}`, Api.PrepReqParams(reqParams));\n return {\n actions: data.Items\n };\n }\n\n export async function GetMessages(params: {\n api?: BruceApi.Api,\n actionId: number,\n order?: Api.ESortOrder,\n startIndex?: number,\n amount?: number,\n types?: EMessageType[],\n req?: Api.IReqParams\n }): Promise<{\n messages: IMessage[]\n }> {\n let { api, actionId, order, startIndex, amount, req: reqParams, types } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (amount == null) {\n amount = 500;\n }\n if (startIndex == null) {\n startIndex = 0;\n }\n if (order == null) {\n order = Api.ESortOrder.Asc;\n }\n let args = `?SortOrder=${order == Api.ESortOrder.Desc ? \"DESC\" : \"ASC\"}&PageSize=${amount}&PageIndex=${startIndex}`;\n if (types?.length) {\n for (let i = 0; i < types.length; i++) {\n args += `&Type=${types[i]}`;\n }\n }\n const data = await api.GET(`pendingAction/${actionId}/progressMessages` + args, Api.PrepReqParams(reqParams));\n return {\n messages: data.Items\n };\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { Calculator } from \"../calculator/calculator\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * Describes the \"Style\" concept within Bruce.\n * A legacy way of referring to styles is \"entity display settings\".\n *\n * A style is a collection of settings (which can be calculations to perform on entity data) that\n * describe how an entity should be displayed.\n */\nexport namespace Style {\n export function GetCacheKey(id: number): string {\n return Api.ECacheKey.Style + Api.ECacheKey.Id + id;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.Style;\n }\n\n export enum EType {\n Entity = \"ENTITY\",\n EntityRelationship = \"ENTITY_RELATIONSHIP\"\n }\n\n export enum EPointType {\n Point = \"POINT\",\n Icon = \"ICON\",\n Cylinder = \"CYLINDER\"\n }\n\n export interface IPointSettings {\n color: Calculator.IField[];\n size: Calculator.IField[];\n iconId: string;\n iconUrl: Calculator.IField[];\n iconScale: Calculator.IField[];\n altitudeOption?: any;\n ClusterNearbyEntities?: boolean;\n MinimumEntitiesCountForClustering?: Calculator.IField[];\n Type: EPointType;\n CylinderFillColor?: Calculator.IField[];\n CylinderFillExtrusion?: Calculator.IField[];\n CylinderRadius?: Calculator.IField[];\n CylinderBorderEnabled?: boolean;\n CylinderBorderExtrusion?: Calculator.IField[];\n CylinderBorderWidth?: Calculator.IField[];\n CylinderBorderColor?: Calculator.IField[];\n }\n\n export interface IPolygonSettings {\n useExtrusion: boolean;\n extrusionPath: Calculator.IField[];\n fillColor: Calculator.IField[];\n lineColor: Calculator.IField[];\n lineWidth: Calculator.IField[];\n altitudeOption?: any;\n zIndex?: Calculator.IField[];\n }\n\n export interface IPolylineSettings {\n lineColor: Calculator.IField[];\n lineWidth: Calculator.IField[];\n // Default is \"px\" for backward compatibility.\n // When units are in px the lines will draw as Cesium Polyline graphics, for meters corridors are used.\n // Meters are more stable and will reduce crashes.\n lineWidthUnits?: \"px\" | \"m\";\n altitudeOption?: any;\n zIndex?: Calculator.IField[];\n }\n\n export interface IModelSettings {\n customize: boolean;\n fillColor: Calculator.IField[];\n scale: Calculator.IField[];\n fillColorBlendMode?: any;\n fillColorBlendAmount?: number;\n altitudeOption?: any;\n }\n\n export interface IEntitySettings {\n pointStyle?: IPointSettings;\n polygonStyle?: IPolygonSettings;\n polylineStyle?: IPolylineSettings;\n modelStyle?: IModelSettings;\n }\n\n export interface IRelationSettings {\n lineColor?: Calculator.IField[];\n lineWidth?: Calculator.IField[];\n heightDistanceRatio?: Calculator.IField[];\n duration?: Calculator.IField[];\n }\n\n export type Settings = IEntitySettings | IRelationSettings;\n\n export interface IStyle {\n ID: number;\n Name: string;\n Settings: Settings;\n Type: EType;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n styles: IStyle[]\n }> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const res: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"ui.entityDisplaySettings\", Api.PrepReqParams(reqParams));\n res({\n styles: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: res,\n req: reqParams\n });\n return res;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n styleId: number,\n req?: Api.IReqParams\n }): Promise<{\n style: IStyle\n }> {\n let { api, styleId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Style ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(id), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\n res({\n style: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Update(params: {\n api?: BruceApi.Api,\n style: IStyle,\n req?: Api.IReqParams\n }): Promise<{\n style: IStyle\n }> {\n let { api, style: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!data?.Name) {\n throw(\"Style name is required.\");\n }\n if (!data.ID) {\n data.ID = 0;\n }\n const res = await api.POST(`ui.entityDisplaySetting/${data.ID}`, data, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(data.ID));\n api.Cache.Remove(GetListCacheKey());\n return {\n style: res\n };\n }\n\n export async function Delete(params: {\n api?: BruceApi.Api,\n styleId: number,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, styleId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!id) {\n throw(\"Style ID is required.\");\n }\n await api.DELETE(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\n api.Cache.Remove(GetCacheKey(id));\n api.Cache.Remove(GetListCacheKey());\n }\n}","export namespace Permission {\n export type Perm = EPerm | string;\n\n export enum EPerm {\n ADMIN = \"ADMIN\",\n LOGIN = \"LOGIN\",\n DELETE_ENTITY_TYPE = \"DELETE_ENTITY_TYPE\",\n CREATE_ENTITY_TYPE = \"CREATE_ENTITY_TYPE\",\n UPDATE_ENTITY_TYPE = \"UPDATE_ENTITY_TYPE\"\n }\n\n export enum EPermPrefix {\n ACCESS_PROJECT_VIEW = \"UIVIEW_\",\n MANAGE_PROJECT_VIEW_BOOKMARKS = \"UIVIEW_MANAGE_BOOKMARKS_\",\n ACCESS_TILESET = \"TILESET_\"\n }\n}","import { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { IdmApi } from \"../api/idm-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Permission } from \"./permission\";\nimport { User } from \"./user\";\n\n/**\n * Describes the \"Session\" concept within Bruce.\n * A session is a set of settings produced from a user or access token login.\n * The session describes what the access should be allowed to do.\n */\nexport namespace Session {\n function GetCacheKey(sessionId: string): string {\n return `${Api.ECacheKey.Session}${Api.ECacheKey.Id}${sessionId}`;\n }\n\n export interface ISession {\n AccessPermissions: IAccountPermissions;\n HypeportalAccessPermisssions?: ISuperPermissions;\n \"ClientAccount.ID\": string;\n ID: string;\n IP: string;\n LastAccessTime: UTC.IUTC;\n User: User.IUser;\n }\n\n export interface IAccountPermissions {\n \"ClientAccount.ID\"?: string;\n EnabledFeatures?: Permission.Perm[];\n UserGroups?: string[];\n }\n\n export interface ISuperPermissions {\n EnabledFeatures?: Permission.Perm[];\n UserGroups?: string[];\n }\n\n export async function Get(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n sessionId: string,\n req?: Api.IReqParams\n }): Promise<{\n session: ISession\n }> {\n let { api, sessionId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!sessionId) {\n throw(\"Session ID is required.\");\n }\n const key = GetCacheKey(sessionId);\n const cache = await api.GetCacheItem(key, reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`session/${sessionId}`, reqParams);\n res({\n session: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key,\n value: prom,\n req: reqParams,\n duration: 5000\n });\n return prom;\n }\n\n /**\n * Request to login or to swap existing session to a different account.\n * If api is already logged in, pass account param to swap the session.\n * @param params \n * @returns \n */\n export async function Login(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n username?: string,\n password?: string,\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n session: ISession\n }> {\n let { api, username, password, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const data: any = await api.POST(\"login\", {\n account: accountId ? accountId : \"\",\n login: username,\n password: password\n }, reqParams);\n const session: ISession = data?.Session;\n const ssid = session?.ID;\n api.SetSessionId(ssid);\n api.Cache.Remove(GetCacheKey(ssid));\n return {\n session: session\n };\n }\n\n export async function Logout(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const ssid = api.GetSessionId();\n if (ssid) {\n await api.POST(\"logout\", null, reqParams);\n api.SetSessionId(<any>null);\n api.Cache.Remove(GetCacheKey(ssid));\n }\n }\n\n export function IsPermEnabled(params: {\n session: ISession,\n accountId: string,\n perm: string\n }): boolean {\n let { session, accountId, perm } = params;\n if (!perm) {\n throw(\"Perm is required.\");\n }\n perm = perm.toLocaleUpperCase();\n const perms = <User.IAccessPermission>session?.User?.AccessPermissions?.find(x => x[\"ClientAccount.ID\"] == accountId);\n if (!perms) {\n return false;\n }\n if (!perms.UserGroups) {\n perms.UserGroups = [];\n }\n for (let i = 0; i < perms.UserGroups.length; i++) {\n const group = perms.UserGroups[i];\n if (typeof group != \"string\") {\n const features = group.Features;\n if (features && features.findIndex(x => x.toLocaleUpperCase() == perm) > -1) {\n return true;\n }\n }\n }\n return false;\n }\n\n export function IsSuperPermEnabled(params: {\n session: ISession,\n perm: string\n }): boolean {\n let { session, perm } = params;\n if (!perm) {\n throw(\"Perm is required.\");\n }\n perm = perm.toLocaleUpperCase();\n const accessPerms = session?.HypeportalAccessPermisssions?.EnabledFeatures ?? [];\n return accessPerms.findIndex(x => x.toLocaleUpperCase() == perm) > -1;\n }\n\n export function IsAccountAdmin(params: {\n session: ISession,\n accountId: string\n }): boolean {\n return IsPermEnabled({\n perm: Permission.EPerm.ADMIN,\n accountId: params.accountId,\n session: params.session\n });\n }\n\n export function IsSuperAdmin(params: {\n session: ISession\n }): boolean {\n return IsSuperPermEnabled({\n session: params.session,\n perm: Permission.EPerm.ADMIN\n });\n }\n}","import { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { IdmApi } from \"../api/idm-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Permission } from \"./permission\";\nimport { User } from \"./user\";\n\n/**\n * Describes the \"User Group\" concept within Bruce.\n * A user group is a collection of permissions (\"Features\") and what users should be in the group.\n */\nexport namespace UserGroup {\n export interface IGroup {\n \"ClientAccount.ID\"?: string;\n \"Features\": Permission.Perm[];\n \"ID\": string;\n \"Name\"?: string;\n }\n\n export async function GetByName(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n name: string, \n req?: Api.IReqParams\n }): Promise<{\n group: IGroup\n }> {\n let { api, accountId, name, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!name || !accountId) {\n throw(\"Name and AccountID are required.\");\n }\n const data = await api.GET(`account/${accountId}/userGroupByName/${name}`, reqParams);\n return {\n group: data\n };\n }\n\n export async function GetUsers(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n groupId: string, \n req?: Api.IReqParams\n }): Promise<{\n users: User.IUser[]\n }> {\n let { api, accountId, groupId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId || !id) {\n throw(\"AccountID and ID are required.\");\n }\n const data = await api.GET(`userGroup/${accountId}/${id}/users`, reqParams);\n return {\n users: data.Items\n };\n }\n\n export async function GetListByPerm(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n perm: Permission.Perm, \n req?: Api.IReqParams\n }): Promise<{\n groups: IGroup[]\n }> {\n let { api, accountId, perm, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId || !perm) {\n throw(\"AccountID and Perm are required.\");\n }\n const data = await api.GET(`userGroupsByFeature/${accountId}/${perm}`, reqParams);\n return {\n groups: data.Items\n };\n }\n\n export async function GetList(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n req?: Api.IReqParams\n }): Promise<{\n groups: IGroup[]\n }> {\n let { api, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId) {\n throw(\"AccountID is required.\");\n }\n const data = await api.GET(`userGroups/${accountId}`, reqParams);\n return {\n groups: data.Items\n };\n }\n\n export async function Delete(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n accountId: string, \n groupId: string, \n req?: Api.IReqParams\n }): Promise<void> {\n let { api, accountId, groupId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId || !id) {\n throw(\"AccountID and ID are required.\");\n }\n return api.DELETE(`account/${accountId}/userGroupID/${id}`, reqParams);\n }\n\n export async function Update(params: {\n api?: IdmApi.Api | GuardianApi.Api, \n group: IGroup, \n reqParams?: Api.IReqParams\n }): Promise<{\n group: IGroup\n }> {\n let { api, group: data, reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!data.Name || !data[\"ClientAccount.ID\"]) {\n throw(\"User group name and client account ID are required.\");\n }\n const res = await api.POST(`userGroup${data.ID ? (\"/\" + data.ID) : \"\"}`, data, reqParams);\n return {\n group: res\n };\n }\n}","import { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { IdmApi } from \"../api/idm-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { UserGroup } from \"./user-group\";\n\n/**\n * Describes the \"User\" concept within Bruce.\n * A user is either a login-user or an access-token.\n *\n * You cannot login using an access-token, but both concepts are-\n * treated the same way in terms of permissions and user groups.\n */\nexport namespace User {\n export function GetCacheKey(userId: string, accountId?: string): string {\n if (!accountId) {\n accountId = \"\";\n }\n return Api.ECacheKey.User + Api.ECacheKey.Id + userId + Api.ECacheKey.Id + accountId;\n }\n\n export function GetEmailCacheKey(email: string, accountId?: string): string {\n if (!accountId) {\n accountId = \"\";\n }\n return Api.ECacheKey.User + Api.ECacheKey.UserEmail + email + Api.ECacheKey.Id + accountId;\n }\n\n export function GetSettingsCacheKey(userId: string, appId: string): string {\n return Api.ECacheKey.User + Api.ECacheKey.UserSettings + userId + Api.ECacheKey.Id + appId;\n }\n\n export interface IUser {\n AccessPermissions?: IAccessPermission[];\n Email?: string;\n Login?: string;\n FullName?: string;\n ID?: string;\n IsActivated?: boolean;\n IsDisabled?: boolean;\n IsPasswordChangeRequired?: boolean;\n Mobile?: string;\n Password?: string;\n Type?: EType;\n }\n\n export enum EType {\n User = \"LOGIN_USER\",\n AccessToken = \"ACCESS_TOKEN\"\n }\n\n export interface IAccessPermission {\n \"ClientAccount.ID\": string;\n \"UserGroup.ID\"?: string[];\n \"UserGroups\"?: UserGroup.IGroup[];\n }\n\n export async function Get(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n userId: string,\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, userId: id, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!id) {\n throw(\"ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(id, <string>accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`user/${id}${accountId ? `?clientAccountID=${accountId}` : \"\"}`, reqParams)\n res({\n user: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(id, <string>accountId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Update(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n user: IUser,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, user: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!data?.ID || !data?.Type) {\n throw(\"ID and Type are required.\");\n }\n // When getting a user it is structured slightly different to when we update it.\n // We can make up the difference here.\n if (data.AccessPermissions?.length) {\n for (let i = 0; i < data.AccessPermissions.length; i++) {\n const perm = data.AccessPermissions[i];\n if (!perm[\"UserGroup.ID\"] && perm.UserGroups) {\n perm[\"UserGroup.ID\"] = [];\n for (let j = 0; j < perm.UserGroups.length; j++) {\n perm[\"UserGroup.ID\"].push(perm.UserGroups[j].ID);\n }\n }\n }\n }\n const res = await api.POST(`user/${data.ID}`, data, reqParams);\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + data.ID);\n if (data.Type == EType.AccessToken) {\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\n }\n else if (data.Type == EType.User) {\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.User + Api.ECacheKey.Account);\n }\n return {\n user: res\n };\n }\n\n /**\n * Loads settings for a given user + app.\n * The session's account id is used to separate settings between accounts.\n * @param params\n */\n export async function GetSettings(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n userId: string,\n appId: string,\n req?: Api.IReqParams\n }): Promise<{\n settings: any\n }> {\n let { api, userId, appId, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!userId || !appId) {\n throw(\"UserId and appId are required.\");\n }\n const cache = await api.GetCacheItem(GetSettingsCacheKey(userId, appId), req);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`user/${userId}/application/${appId}/settings`);\n const settings = data?.Settings ? data.Settings : {};\n res({\n settings: settings\n });\n }\n catch (e) {\n // It will complain if an app id hasn't been used yet.\n // We need to suppress that error.\n if (e && typeof e == \"object\") {\n if (e.ERROR && typeof e.ERROR == \"object\" && e.ERROR.Type == \"NotFound\") {\n res({\n settings: {}\n });\n return;\n }\n }\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetSettingsCacheKey(userId, appId),\n value: prom,\n req: req\n });\n return prom;\n }\n\n /**\n * Updates settings for a given accId + user + app.\n * The settings update will replace the existing record, please ensure to merge with existing settings.\n * AccountId is optional and will use a globally shared record if not provided.\n * @param params\n */\n export async function UpdateSettings(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accId?: string,\n userId: string,\n appId: string,\n settings: any,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, accId, userId, appId, settings, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!userId || !appId) {\n throw(\"UserId and appId are required.\");\n }\n const postBody = {\n Settings: settings == null ? {} : settings,\n Application: appId,\n ClientAccountID: accId,\n UserID: userId\n };\n const prom = api.POST(`user/${userId}/application/${appId}/settings`, postBody, req);\n api.Cache.Remove(GetSettingsCacheKey(userId, appId));\n return prom;\n }\n\n export async function GetUsernameAvailable(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n username: string,\n excludeUserId?: string,\n req?: Api.IReqParams\n }): Promise<{\n isAvailable: boolean\n }> {\n let { api, username, excludeUserId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!username) {\n throw(\"Username is required.\");\n }\n const req = api.GET(`user/loginavailable/${username}${excludeUserId ? \"?excludeUserId=\" + excludeUserId : \"\"}`, reqParams);\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n isAvailable: data.IsAvailable\n });\n }\n catch (e) {\n rej(<any>e);\n }\n });\n return prom;\n }\n\n export namespace LoginUser {\n export function GetListCacheKey(accountId: string): string {\n return Api.ECacheKey.User + Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\n }\n\n export async function GetByEmail(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n email: string,\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, email, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!email) {\n throw(\"Email is required.\");\n }\n const cache = await api.GetCacheItem(GetEmailCacheKey(email, <string>accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`userByEmail/${email}${accountId ? `?clientAccountID=${accountId}` : \"\"}`, reqParams);\n res({\n user: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetEmailCacheKey(email, <string>accountId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId: string,\n exclusive?: boolean,\n req?: Api.IReqParams\n }): Promise<{\n users: IUser[]\n }> {\n let { api, accountId, exclusive, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId) {\n throw(\"Client account ID is required.\");\n }\n if (!exclusive) {\n exclusive = false;\n }\n const cache = exclusive ? null : await api.GetCacheItem(GetListCacheKey(accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`users?clientAccountID=${accountId}${exclusive ? \"&allExcludingClientAccount=true\" : \"\" }`, reqParams);\n res({\n users: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n req.then(async (data) => {\n const users = data.users;\n for (let i = 0; i < users.length; i++) {\n await api.SetCacheItem({\n key: GetCacheKey(<string>users[i].ID, accountId),\n value: {\n user: users[i]\n },\n req: reqParams\n });\n }\n });\n if (!exclusive) {\n await api.SetCacheItem({\n key: GetListCacheKey(accountId),\n value: req,\n req: reqParams\n });\n }\n return req;\n }\n\n /**\n * Sends a signup email to the specified email address.\n * @param params\n * @returns\n */\n export async function Signup(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n email: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, email, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!email) {\n throw(\"Email is required.\");\n }\n return api.POST(\"clientaccount/signup\", {\n Email: email\n }, reqParams);\n }\n\n /**\n * Sends a new signup email using a previous one's expired code.\n * @param params\n * @returns\n */\n export async function SignupResend(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n expiredCode: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, expiredCode, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!expiredCode) {\n throw(\"Expired activation code is required.\");\n }\n return api.POST(`clientaccount/signup/resend?activationKey=${Api.Encode(expiredCode)}`, null, reqParams);\n }\n\n /**\n * Completes signup using user data and a signup code.\n * @param params\n * @returns\n */\n export async function SignupComplete(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n code: string,\n user: IUser,\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, code, user: data, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!code || !data?.Login || !data?.Password) {\n throw(\"Login, password, and activation code are required.\");\n }\n data = JSON.parse(JSON.stringify(data));\n data.IsActivated = true;\n data.IsDisabled = false;\n (<any>data).key = code;\n const res: IUser = await api.POST(`UserActivate/${accountId ? accountId : \"\"}`, data, reqParams);\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + res.ID);\n if (data.Email) {\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.UserEmail + data.Email);\n }\n return {\n user: res\n };\n }\n\n /**\n * Sends a password reset email to the specified email address.\n * @param params\n * @returns user id associated with provided email.\n */\n export async function ForgotPassword(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId: string,\n email: string,\n req?: Api.IReqParams\n }): Promise<{\n userId: string\n }> {\n let { api, accountId, email, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!accountId || !email) {\n throw(\"Account ID and email are required.\");\n }\n const req = api.POST(`UserForgotPassword/${accountId}`, {\n Email: email\n }, reqParams);\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n userId: data.ID\n });\n }\n catch (e) {\n rej(e);\n }\n });\n return prom;\n }\n\n /**\n * Completes password reset using a password reset code and new password.\n * @param params\n * @returns\n */\n export async function ForgotPasswordComplete(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n code: string,\n userId: string,\n password: string,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, code, userId, password, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const {user} = await Get({\n api: api,\n userId: userId,\n accountId: \"\",\n req: reqParams\n });\n const res = await api.POST(\"UserSetNameAndPassword\", {\n ID: userId,\n Email: user.Email,\n ActivationCode: code,\n Password: password,\n FullName: user.FullName\n }, reqParams);\n return {\n user: res\n };\n }\n }\n\n export namespace AccessToken {\n export function GetListCacheKey(accountId: string): string {\n return Api.ECacheKey.AccessToken + Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\n }\n\n export async function GetList(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId: string,\n req?: Api.IReqParams\n }): Promise<{\n users: IUser[]\n }> {\n let { api, accountId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(accountId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const req: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"usersByClientAccount/accessTokens\", reqParams);\n res({\n users: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n req.then(async (data) => {\n const users = data.tokens;\n for (let i = 0; i < users.length; i++) {\n await api.SetCacheItem({\n key: GetCacheKey(<string>users[i].ID, accountId),\n value: {\n user: users[i]\n },\n req: reqParams\n });\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(accountId),\n value: req,\n req: reqParams\n });\n return req;\n }\n\n export async function Delete(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n tokenId: string,\n req?: Api.IReqParams\n }): Promise<void> {\n let { api, tokenId: id, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n await api.DELETE(`accessToken/${id}`, reqParams);\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + id);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\n }\n\n export async function Create(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n token: IUser,\n req?: Api.IReqParams\n }): Promise<{\n user: IUser\n }> {\n let { api, token: data, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n if (!data) {\n data = {};\n }\n if (data.Type == EType.User) {\n throw(\"User type is not allowed.\");\n }\n if (!data.Type) {\n data.Type = EType.AccessToken;\n }\n data = await api.POST(\"accessToken\", data, reqParams);\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\n return {\n user: data\n };\n }\n }\n}","\nimport { Api } from \"../api/api\";\nimport { GuardianApi } from \"../api/guardian-api\";\nimport { IdmApi } from \"../api/idm-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { User } from \"../user/user\";\n\nexport namespace AccountInvite {\n export interface IInvite {\n ID: number;\n \"Account.ID\": string;\n \"Invited.User.ID\": string;\n \"InvitedBy.User.ID\": string;\n CreatedDate: UTC.IUTC;\n InviteMethod: EInviteMethod;\n IsExpired: boolean;\n Status: EStatus;\n }\n\n export enum EStatus {\n Denied = \"Denied\",\n Cancelled = \"Cancelled\",\n Sent = \"Sent\",\n NotSent = \"NotSent\",\n Accepted = \"Accepted\"\n }\n\n export enum EInviteMethod {\n Email = \"Email\",\n SMS = \"SMS\",\n Manual = \"Manual\"\n }\n\n export async function GetByCode(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n code: string,\n req?: Api.IReqParams\n }): Promise<{\n invite: IInvite\n }> {\n let { api, code, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const res = await api.GET(`invite/code?inviteCode=${code}`, Api.PrepReqParams(req));\n return res;\n }\n\n export async function GetList(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId?: string,\n userId?: string,\n req?: Api.IReqParams\n }): Promise<{\n invites: IInvite[],\n warnings?: string[]\n }> {\n let { api, accountId, userId, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const urlParams = new URLSearchParams();\n if (accountId) {\n urlParams.append(\"accountId\", accountId);\n }\n if (userId) {\n urlParams.append(\"userId\", userId);\n }\n const res = await api.GET(\"invites?\" + urlParams.toString(), Api.PrepReqParams(req));\n return res;\n }\n\n export async function Update(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n code: string,\n status: string,\n user?: User.IUser,\n req?: Api.IReqParams\n }) {\n let { api, code, status, user, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const res = await api.POST(\"invite/update\", {\n InviteCode: code,\n Status: status,\n User: user\n }, Api.PrepReqParams(req));\n return res;\n }\n\n export async function Create(params: {\n api?: IdmApi.Api | GuardianApi.Api,\n accountId: string,\n login?: string,\n userId?: string,\n email?: string,\n mobile?: string,\n emailTemplateKey?: string,\n groupIds?: string[],\n req?: Api.IReqParams\n }): Promise<{\n warnings?: string[],\n user: User.IUser,\n manualInviteCode?: string,\n invite: IInvite,\n manualInvite?: IInvite\n }> {\n let { api, accountId, login, userId, email, mobile, emailTemplateKey, groupIds, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\n\n const res = await api.POST(\"invite/new\", {\n accountId,\n login,\n email,\n mobile,\n userId,\n groupIds,\n emailTemplateKey\n }, Api.PrepReqParams(req));\n return res;\n }\n}","export namespace EncryptUtils {\n // https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\n export function Cyrb53Hash(str: string, seed: number = 0): number {\n let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1>>>16), 2246822507) ^ Math.imul(h2 ^ (h2>>>13), 3266489909);\n h2 = Math.imul(h2 ^ (h2>>>16), 2246822507) ^ Math.imul(h1 ^ (h1>>>13), 3266489909);\n return (4294967296 * (2097151 & h2) + (h1>>>0));\n }\n}","import { IDictionary } from \"../common/dictionary\";\n\n/**\n * Utility to help with url manipulation.\n */\nexport namespace UrlUtils {\n export function GetQueryString(doc: Document): IDictionary<string> {\n const qs: any = {};\n const p0 = doc.location.href.indexOf(\"?\");\n if (p0 >= 0) {\n const str = doc.location.href.substring(p0 + 1);\n const tokens = str.split(\"&\");\n tokens.forEach(token => {\n const p = token.split(\"=\");\n if (p.length == 2) {\n qs[p[0]] = p[1];\n }\n });\n }\n return qs;\n }\n\n /**\n * Helper to get and set url params for a given window.\n */\n export class Handler {\n private _window: Window;\n public get window(): Window {\n return this._window;\n }\n private get document(): Document {\n return this.window?.document;\n }\n private _allowedKeys: string[] = <any>null;\n public get allowedKeys(): string[] {\n return this._allowedKeys;\n }\n \n public constructor(window: Window, allowedKeys?: string[]) {\n this._window = window;\n this._allowedKeys = <string[]>allowedKeys;\n }\n \n public UpdateAllowedKeys(allowedKeys: string[]): void {\n this._allowedKeys = allowedKeys;\n let params = this.GetParams();\n this.refresh(params);\n }\n \n public UpdateParam(key: string, value: string | number): void {\n let params = this.GetParams();\n params[key + \"\"] = value + \"\";\n this.refresh(params);\n }\n \n public RemoveParam(key: string): void {\n let params = this.GetParams();\n params[key + \"\"] = <any>null;\n this.refresh(params);\n }\n \n public GetParamKeys(): string[] {\n let params = GetQueryString(this.document);\n return Object.keys(params);\n }\n \n public GetParams(): IDictionary<string> {\n return GetQueryString(this.document);\n }\n \n public GetParam(key: string): string {\n let params = this.GetParams();\n return params[key + \"\"];\n }\n \n public Clear(): void {\n this.refresh({});\n }\n \n private refresh(urlParams: IDictionary<string | number>): void {\n const params: string[] = [];\n const keys = Object.keys(urlParams);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (this._allowedKeys == null || this._allowedKeys.includes(key)) {\n const val = urlParams[key];\n if (!!val || val == 0) {\n params.push(`${key}=${val}`);\n }\n }\n }\n if (params.length > 0) {\n this.window.history.replaceState({}, <any>null, \"?\" + params.join(\"&\"));\n }\n else {\n this.window.history.replaceState({}, <any>null, \"\");\n }\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Entity as E } from \"../entity/entity\";\n\nexport namespace DataLab {\n export enum EReqKey {\n Primary = \"PrimarySelection\",\n Secondary = \"SecondarySelection\"\n }\n\n // WIP.\n export interface IQuery {\n [EReqKey.Primary]: {\n Items: any[]\n },\n [EReqKey.Secondary]?: any,\n Action?: string,\n PrimaryEntityTypeID?: string;\n PrimaryEntityID?: string;\n }\n\n export async function Run(params: {\n api?: BruceApi.Api,\n query: IQuery, \n key?: EReqKey, \n skip?: number, \n load?: number, \n req?: Api.IReqParams\n }): Promise<{\n entities: E.IEntity[]\n }> \n {\n let { api, query, key, skip, load, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!key) {\n key = EReqKey.Primary;\n }\n if (!skip) {\n skip = 0;\n }\n if (!load) {\n load = 50;\n }\n const req = api.POST(`entities/datalab/getMatchingEntities/${key}?skip=${skip}&load=${load}`, \n query, \n Api.PrepReqParams(reqParams)\n );\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n entities: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n return prom;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\n/**\n * TODO: The analysis result is currently a mix of multiple layers of legacy.\n * We will first decide what we want it to do and then describe just the needed portions of the existing implementation.\n */\nexport namespace ImportCad {\n export interface IAnalyzeParams {\n \"TempFile.ID\": string;\n \"OriginalIFCFile.Name\": string;\n }\n\n export interface IAnalyzeRes {\n PendingActionID: number;\n }\n\n export interface IImportParams {\n \"BRZFilePath\"?: string;\n \"TempFile.ID\": string;\n \"OriginalIFCFile.Name\": string;\n \"IFCSettings\": {\n \"ClassificationRules\": {\n \"NewIFCStandard.Name\": string;\n \"IFCStandard\": string;\n \"IsExtendingAllowed\": boolean;\n \"AllowAddingNewEntityTypes\": boolean;\n \"AllowAddingNewAttributes\": boolean;\n \"EntityTypesDerivedFromAttribute\": string;\n }\n }\n }\n\n export interface IImportRes {\n PendingActionID: number;\n }\n\n export async function Analyze(params: {\n api?: BruceApi.Api, \n fileAnalyze: IAnalyzeParams, \n req?: Api.IReqParams\n }): Promise<IAnalyzeRes> {\n let { api, fileAnalyze, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/PrepareIFCForImport\", fileAnalyze, Api.PrepReqParams(reqParams));\n }\n\n export async function ImportEntities(params: {\n api?: BruceApi.Api, \n fileImport: IImportParams, \n req?: Api.IReqParams\n }): Promise<IImportRes> {\n let { api, fileImport, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/importIFCWithProgress\", fileImport, Api.PrepReqParams(reqParams));\n }\n\n /**\n * Parses the completed pending action result from running \"ImportEntities\".\n * This will return the root entity's id if any is present.\n * @param paResult \n */\n export function ParseRootId(paResult: string | Object): string {\n try {\n const obj = typeof paResult == \"string\" ? JSON.parse(paResult) : paResult;\n if (obj?.result?.length) {\n return obj.result[0];\n }\n }\n catch {\n // Failed to parse json.\n }\n return <any>null;\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\nexport namespace ImportCsv {\n export interface IImportParams {\n \"TempFile.ID\": string;\n \"CSVSettings\": {\n \"IsTitleRow\": boolean;\n \"Delimiter\": string;\n \"IsRecordQuoted\": boolean;\n \"Columns\": string[];\n },\n \"OriginalCSVFile.Name\": string;\n \"ImportMode\": string;\n \"EntityType.ID\": string;\n \"TargetDataSchema\": any;\n \"DataMapping\": any;\n \"Layers\": number[];\n \"SkipUnresolvedRows\": boolean;\n \"DeleteNonupdatedEntities\": boolean;\n \"Async\": boolean;\n \"SkipFailedEntities\": boolean;\n }\n\n export interface IImportRes {\n PendingActionID: number;\n }\n\n export async function ImportEntities(params: {\n api?: BruceApi.Api, \n fileImport: IImportParams, \n req?: Api.IReqParams\n }): Promise<IImportRes> {\n let { api, fileImport, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/importCSVWithProgress2\", fileImport, Api.PrepReqParams(reqParams));\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { EntityTag } from \"../entity/entity-tag\";\n\nexport namespace ImportJson {\n export interface ITagExt extends EntityTag.ITag {\n IsSelected: boolean;\n }\n\n export interface IImportParams {\n \"TempFile.ID\": string;\n \"TempFile.Ext\": string;\n \"OriginalJsonFile.Name\": string;\n ImportMode: string;\n \"EntityType.ID\": string;\n DataMappingSchema: any;\n TargetDataSchema: any;\n Layers: ITagExt[];\n }\n\n export interface IImportRes {\n PendingActionID: number;\n }\n\n export async function ImportEntities(params: {\n api?: BruceApi.Api, \n fileImport: IImportParams, \n req?: Api.IReqParams\n }): Promise<IImportRes> {\n let { api, fileImport, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/importJsonWithProgress\", fileImport, Api.PrepReqParams(reqParams));\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ENVIRONMENT } from \"../environment\";\n\nexport namespace ImportKml {\n export interface IImportParams {\n \"TempFile.ID\": string;\n \"OriginalKMLFile.Name\": string;\n KMLFolders: any[];\n ImportMode: string;\n TotalCount: number;\n }\n\n export interface IImportRes {\n PendingActionID: number;\n }\n\n export async function ImportEntities(params: {\n api?: BruceApi.Api, \n fileImport: IImportParams, \n req?: Api.IReqParams\n }): Promise<IImportRes> {\n let { api, fileImport, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n return api.POST(\"entities/importKMLWithProgress2\", fileImport, Api.PrepReqParams(reqParams));\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { ClientFile } from \"../client-file/client-file\";\nimport { ENVIRONMENT } from \"../environment\";\n\nexport namespace ImportedFile {\n export function GetCacheKey(fileId: number): string {\n return Api.ECacheKey.ImportedFile + Api.ECacheKey.Id + fileId;\n }\n\n export function GetCacheKeyByRootId(rootId: string): string {\n return Api.ECacheKey.ImportedFile + Api.ECacheKey.Id + rootId;\n }\n\n export function GetListCacheKey(type: EFileType, pageIndex: number): string {\n return Api.ECacheKey.ImportedFile + type + pageIndex;\n }\n\n export interface IFile {\n ID: number;\n \"ClientFile.ID\": string;\n \"ImportedBy.User.ID\": string;\n \"Imported.DateTime\": any;\n \"EntityType.ID\": string;\n \"RootEntity.ID\": string;\n \"Source.ID\": number;\n \"PendingAction.ID\": number;\n NewEntitiesCount: number;\n UpdatedEntitiesCount: number;\n ClientFile: ClientFile.IClientFile;\n }\n\n export enum EFileType {\n CAD = \"CAD\",\n All = \"All\"\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n fileType?: EFileType,\n pageIndex?: number,\n req?: Api.IReqParams\n }): Promise<{\n importedFiles: IFile[]\n }> {\n let { api, fileType: type, pageIndex, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!type) {\n type = EFileType.All;\n }\n if (!pageIndex) {\n pageIndex = 0;\n }\n const cache = await api.GetCacheItem(GetListCacheKey(type, pageIndex), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n\n let first = true;\n let url = \"entityImportFiles\";\n if (type != EFileType.All) {\n url += \"?FileType=\" + type;\n first = false;\n }\n if (pageIndex > 0) {\n url += (first ? \"?\" : \"&\") + \"pageIndex=\" + pageIndex;\n }\n const req = api.GET(url, Api.PrepReqParams(reqParams));\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await req;\n res({\n importedFiles: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(type, pageIndex),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function GetListByRootId(params: {\n api?: BruceApi.Api,\n rootId: string,\n req?: Api.IReqParams\n }): Promise<{\n importedFiles: IFile[]\n }> {\n let { api, rootId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetCacheKeyByRootId(rootId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entityImportFiles?Entity.ID=${rootId}`, Api.PrepReqParams(reqParams));\n res({\n importedFiles: data.Items\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKeyByRootId(rootId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n importedFileId: number,\n req?: Api.IReqParams\n }): Promise<{\n importedFile: IFile\n }> {\n let { api, importedFileId: fileId, req: reqParams } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetCacheKey(fileId), reqParams);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`entityImportFile/${fileId}`, Api.PrepReqParams(reqParams));\n res({\n importedFile: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(fileId),\n value: prom,\n req: reqParams\n });\n return prom;\n }\n}","import { Cartes, EntityAttachmentType } from \"../bruce-models\";\n\n/**\n * Description of a \"Markup\" which is stored in custom-form or bookmark records.\n */\nexport namespace Markup {\n export interface IMarkup {\n divs?: Div.IDiv[];\n vectors?: (Line.ILine | FreePaint.IPaint)[];\n cesiumObjects?: (Polygon.IPolygon | Polyline.IPolyline | Circle.ICircle | Walkscore.IWalkscore)[];\n width?: number;\n height?: number;\n defaultCameraPos?: any;\n // Default = true.\n visible?: boolean;\n }\n\n export interface IElement {\n // Unique id of the element within the markup.\n // Warning: IAnchor elements are not elements and do not have an id.\n // Anchors only exist as sub elements to other items.\n id: string;\n // Human readable name for the element.\n // This is presented in editing screens to help differentiate elements.\n name?: string;\n // Default = true.\n visible?: boolean;\n // The screen position of the original drawn element.\n // Used to determine if anything needs to change based on viewer's screen size.\n screenWidth?: number;\n screenHeight?: number;\n }\n\n export namespace Div {\n // Types of div that can be created.\n export enum EType {\n // Default, no special handling.\n Default = \"default\",\n // Callout, assumes it will be positioned in 3d space.\n // Assumes existence of line that is used to anchor it.\n Callout = \"callout\"\n }\n\n export interface IDiv extends IElement {\n // Type of div. Determines how it is rendered / positioned.\n type?: EType;\n // The div's content.\n contentRows: IRow[];\n // Css box shadow.\n boxShadow?: IBoxShadow;\n // Css border radius.\n borderRadius?: number;\n // If the border radius should be in pixels or percent.\n borderUsingPercent?: boolean;\n // Css border color.\n borderColor?: string;\n // Css border width.\n borderWidth?: number;\n // Screen x/y position in pixels.\n x: number;\n y: number;\n // Width/height in pixels.\n width: number;\n height: number;\n // Default is absolute. When fixed the UI panels won't shift the div.\n position?: \"absolute\" | \"fixed\";\n }\n\n // Describes css box shadow.\n export interface IBoxShadow {\n horizontal: number;\n vertical: number;\n blur: number;\n spread: number;\n color: string;\n }\n\n // Describes a content row.\n export interface IRow {\n items: IRowItem[];\n height: number;\n }\n\n // Describes expected content of a row cell.\n export enum EItemType {\n // Default, no special handling.\n Default = \"DEFAULT\",\n // Embed, assume content is html.\n // Make it take over the whole cell instead of padding it and such.\n Embed = \"EMBED\",\n // Content is expected to be an SVG or font-awesome icon.\n Icon = \"ICON\",\n // Content is expected to be an image.\n Image = \"IMAGE\",\n // No content. Only a shape.\n None = \"NONE\"\n }\n\n export interface IRowItem {\n // Text or HTML to display.\n text?: string;\n // Embedded HTML to render when item type is \"EMBED\".\n // Different to text as text will be auto-cleaned.\n embedRaw?: string;\n // Embedded ICON to render when item type is \"ICON\".\n // Icon is expected to be a font-awesome icon.\n icon?: string;\n // Action ot perform when this cell is clicked.\n action?: ItemAction.IItemAction;\n // Background image to use.\n bgImage?: IRowItemImage;\n // Css background color.\n backgroundColor?: string;\n // Css font color.\n fontColor?: string;\n // Css font size.\n fontSize?: number;\n // Css horizontal text alignment.\n textAlign?: string;\n // Css vertical text alignment.\n verticalAlign?: string;\n // Padding in pixels to apply to all 4 sides.\n // @deprecated, use innerPadding instead.\n padding?: number;\n // Css padding to apply.\n innerPadding?: string;\n // Css text shadow.\n textShadow?: ITextShadow;\n // Expected content type. Dictates if special handling is needed.\n contentType?: EItemType;\n // Width of the cell in percent of total row width.\n width?: number;\n }\n\n // Describes a cell's background image.\n export interface IRowItemImage {\n // Client file id of the image.\n FileID?: string;\n // If the markup's entity's default image should be used.\n UseEntityDefault?: boolean;\n }\n\n // Describes css text shadow.\n export interface ITextShadow {\n horizontal: number;\n vertical: number;\n blur: number;\n color: string;\n }\n\n export namespace ItemAction {\n export interface IActionLinkParams {\n // URL to open.\n // URL may be a path to the markup's entity's attribute data.\n // If \"${\" and \"}\" exist in the URL, then it has entity attribute data.\n URL?: string;\n // If the URL should be opened in a new tab.\n openInNewTab?: boolean;\n // If the markup should be closed when the link is opened.\n closeMarkupOnOpen?: boolean;\n }\n \n export interface IActionBookmarkParams {\n // Id of the bookmark to enable.\n // Assumes view id matches currently rendering view.\n bookmarkID?: string;\n }\n\n export interface IActionInfoViewParams {\n\n }\n\n export interface IActionRelationParams {\n\n }\n\n export interface IActionGalleryParams {\n documentType?: EntityAttachmentType.EType | string;\n }\n\n export interface IItemAction {\n type: ItemAction.EType;\n params: IActionLinkParams | IActionInfoViewParams | IActionRelationParams | IActionGalleryParams;\n }\n\n // Types of actions that can be performed when a cell is clicked.\n // Null = \"NONE\".\n export enum EType {\n None = \"NONE\",\n // Open a link specified in params.\n OpenLink = \"LINK\",\n // Open the markup's entity's details panel.\n OpenInfoView = \"INFOVIEW\",\n // Open the markup's entity's gallery popup.\n OpenEntityGallery = \"GALLERY\",\n // Toggle visibility of the markup's entity's relationships.\n ToggleRelationships = \"RELATIONSHIPS\",\n // Dictates this cell can be used to drag the div around.\n Draggable = \"DRAGABBLE\",\n // Closes the markup.\n Close = \"CLOSE\",\n // Opens a bookmark specified in params.\n OpenBookmark = \"BOOKMARK\"\n }\n }\n\n export const DEFAULT: IDiv = {\n contentRows: [\n {\n height: 100,\n items: [\n {\n contentType: EItemType.Default,\n text: \"Type here...\",\n width: 100,\n backgroundColor: \"white\",\n fontColor: \"black\",\n textAlign: \"center\",\n verticalAlign: \"center\",\n fontSize: 15\n }\n ]\n }\n ],\n height: null,\n width: null,\n id: null,\n x: null,\n y: null,\n borderColor: \"black\",\n borderWidth: 1,\n borderUsingPercent: false,\n borderRadius: 8,\n type: EType.Default\n };\n }\n\n export namespace Line {\n // Describes a line end's head.\n export enum ELineHead {\n None = \"NONE\",\n Circle = \"CIRCLE\",\n Arrow = \"ARROW\"\n }\n\n export interface ILine extends IElement {\n pathType: \"LINE\";\n // SVG path string.\n path: string;\n // SVG transform string.\n transform: string;\n // Snaps determine where the ends of the line snap to.\n // This can be 3d positions, screen positions or links to markup DIVs.\n // Calculated positions of the snaps will then alter the path of the line.\n snaps: IAnchor[];\n // Css color of the line.\n brushColor?: string;\n // Css stroke width of the line.\n brushSize?: number;\n // Determines if the line should angle towards its destination instead of being straight.\n angled?: boolean;\n // Backwards compatibility.\n // Use brushHead on anchors instead when available.\n brushHead?: ELineHead;\n // Css color of the brush head.\n outlineColor?: string;\n }\n\n // Dictates where on a DIV an anchor should snap to.\n export enum EAnchorDivSide {\n TopLeft = 0,\n TopRight = 1,\n BottomLeft = 2,\n BottomRight = 3,\n Center = 4,\n CenterLeft = 5,\n CenterRight = 6,\n CenterTop = 7,\n CenterBottom = 8\n }\n\n // Dictates what end of the line an anchor should render on.\n export enum EAnchorLineSide {\n Start = 0,\n End = 1,\n }\n\n export interface IAnchor {\n // Id of markup DIV that this anchor is attached to.\n id?: string;\n // Side of the markup DIV we are attached to.\n snapPosition?: EAnchorDivSide;\n // Side of the line we are attached to.\n side?: EAnchorLineSide;\n // How the anchor should be drawn in the context of a line.\n brushHead?: ELineHead;\n // Css fill color.\n fill?: string;\n // Determines size of anchor's \"ARROW\" head.\n size?: number;\n // Multiplied by \"size\" to determine size of anchor \"CIRCLE\" head.\n outlineFactor?: number;\n // Css stroke color.\n stroke?: string;\n // 3d world position.\n cartesian?: Cartes.ICartes3;\n // 2d screen position.\n screenPos?: Cartes.ICartes2;\n // If the anchor's position should be relative to the markup's entity.\n positionFromEntity?: boolean;\n }\n\n export const DEFAULT: ILine = {\n brushColor: \"rgba(255, 255, 255, 1)\",\n brushSize: 4,\n path: null,\n pathType: \"LINE\",\n transform: null,\n snaps: null,\n id: null\n };\n }\n\n export namespace FreePaint {\n // Describes a free-paint end's head.\n export enum EPaintHead {\n None = \"NONE\",\n Circle = \"CIRCLE\",\n Arrow = \"ARROW\"\n }\n\n export interface IPaint extends IElement {\n pathType: \"PLAIN\";\n // SVG path string.\n path: string;\n // SVG transform string.\n transform: string;\n // Css color of the line.\n brushColor?: string;\n // Css stroke width of the line.\n brushSize?: number;\n // Style of the ends of the free-paint.\n brushHead?: EPaintHead;\n // Css color of the brush head if one is used.\n // Eg arrow or circle heads.\n outlineColor?: string;\n }\n\n export const DEFAULT: IPaint = {\n brushColor: \"rgba(255, 255, 255, 1)\",\n brushSize: 4,\n path: null,\n pathType: \"PLAIN\",\n transform: null,\n id: null\n };\n }\n\n export namespace Polygon {\n // Determines if terrain and 3d models should be overlapped or not.\n export enum EClassificationType {\n // 3d models and terrain are overlapped.\n Both = \"BOTH\",\n // Only terrain is overlapped.\n Terrain = \"TERRAIN\"\n }\n\n export interface IPolygon extends IElement {\n type: \"POLYGON\";\n // 3d positions of the polygon.\n positions: Cartes.ICartes3[];\n // Css color of the polygon.\n color?: string;\n // Css color of the polygon's outline.\n outlineColor?: string;\n // Width of the polygon's outline in pixels.\n outlineWidth?: number;\n // Height of the polygon in meters.\n extrudedHeight?: number;\n // Determines if terrain and 3d models should be overlapped or not.\n classificationType?: EClassificationType;\n // Determines how many times to run Chaikin's algorithm on the polygon.\n // Null or 0 means no smoothing.\n smoothen?: number;\n }\n\n export const DEFAULT: IPolygon = {\n type: \"POLYGON\",\n id: null,\n positions: null,\n color: \"rgba(254, 234, 57, 0.54)\",\n outlineColor: \"rgba(215, 215, 215, 0)\",\n outlineWidth: 2,\n extrudedHeight: 0,\n classificationType: EClassificationType.Both,\n smoothen: 0\n };\n }\n\n export namespace Polyline {\n export interface IPolyline extends IElement {\n type: \"POLYLINE\";\n // 3d positions of the polyline.\n positions: Cartes.ICartes3[];\n // Css color of the polyline.\n color?: string;\n // Width of the polyline in pixels.\n outlineWidth?: number;\n // Determines how many times to run Chaikin's algorithm on the polygon.\n // Null or 0 means no smoothing.\n smoothen?: number;\n }\n\n export const DEFAULT: IPolyline = {\n type: \"POLYLINE\",\n id: null,\n positions: null,\n color: \"rgba(254, 234, 57, 0.54)\",\n outlineWidth: 4,\n smoothen: 0\n };\n }\n\n export namespace Circle {\n export interface ICircle extends IElement {\n type: \"CIRCLE\",\n // 3d position of the circle.\n position: Cartes.ICartes3;\n // Radius of the circle in meters.\n radius: number;\n // Css color of the circle.\n color?: string;\n // Width of the outline in meters.\n outlineWidth?: number;\n // Height of the circle in meters.\n extrudedHeight?: number;\n // Height of the circle's outline in meters.\n outlineExtrusion?: number;\n // Css color of the circle's outline.\n outlineColor?: string;\n }\n\n export const DEFAULT: ICircle = {\n type: \"CIRCLE\",\n id: null,\n position: null,\n radius: 50,\n color: \"rgba(254, 234, 57, 0.54)\"\n };\n }\n\n export namespace Walkscore {\n export interface IWalkscore extends IElement {\n type: \"WALKSCORE\";\n // 3d position of the walkscore.\n cartesian: Cartes.ICartes3;\n // Walkscore value out of 100.\n details: number;\n }\n }\n}","import { Api } from \"../api/api\";\nimport { BruceApi } from \"../api/bruce-api\";\nimport { UTC } from \"../common/utc\";\nimport { ENVIRONMENT } from \"../environment\";\nimport { Uploader } from \"../internal/uploader\";\nimport { ObjectUtils } from \"../util/object-utils\";\n\nexport namespace Plugin {\n export function GetCacheKey(pluginId: string): string {\n return `${Api.ECacheKey.Plugin}${Api.ECacheKey.Id}${pluginId}`;\n }\n\n export function GetListCacheKey(): string {\n return Api.ECacheKey.Plugin;\n }\n\n export interface IPlugin {\n ID: string,\n Name: string,\n Version: number,\n Icon: string,\n Location: string,\n IsAccessRestricted: boolean,\n IsLoginRequired: boolean,\n \"LastUpdated.Date\": UTC.IUTC,\n \"Created.Date\": UTC.IUTC\n }\n\n export async function Get(params: {\n api?: BruceApi.Api,\n pluginId: string,\n req?: Api.IReqParams\n }): Promise<{\n plugin: IPlugin\n }> {\n let { api, pluginId, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!pluginId) {\n throw (\"Plugin ID is required.\");\n }\n const cache = await api.GetCacheItem(GetCacheKey(pluginId), req);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(`ui.plugin/${pluginId}`, Api.PrepReqParams(req));\n res({\n plugin: data\n });\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetCacheKey(pluginId),\n value: prom,\n req: req\n });\n return prom;\n }\n\n export async function GetList(params: {\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<{\n plugins: IPlugin[]\n }> {\n let { api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n const cache = await api.GetCacheItem(GetListCacheKey(), req);\n if (cache?.found) {\n return cache.data;\n }\n const prom: Promise<any> = new Promise(async (res, rej) => {\n try {\n const data = await api.GET(\"ui.plugins\", Api.PrepReqParams(req));\n res({\n plugins: data.Items\n })\n }\n catch (e) {\n rej(e);\n }\n });\n await api.SetCacheItem({\n key: GetListCacheKey(),\n value: prom,\n req: req\n });\n return prom;\n }\n\n export function GetLoadUrl(params: {\n api?: BruceApi.Api,\n pluginId: string,\n cacheKey?: number | string\n }): {\n indexFileUrl: string\n } {\n let { api, pluginId, cacheKey } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n\n if (!cacheKey) {\n cacheKey = 0;\n }\n return {\n indexFileUrl: `${api.GetBaseUrl()}ui.plugin/${pluginId}/file/index.jsc?version=${cacheKey}`\n };\n }\n\n export async function Update(params: {\n plugin: IPlugin,\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<void> {\n let { plugin, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!plugin.Name || !plugin.ID) {\n throw(\"Plugin name and ID are required.\");\n }\n if (!plugin.ID) {\n plugin.ID = ObjectUtils.UId();\n }\n await api.POST(`ui.plugin/${plugin.ID}`, plugin, Api.PrepReqParams(req));\n api.Cache.Remove(GetCacheKey(plugin.ID));\n api.Cache.Remove(GetListCacheKey());\n }\n\n export async function Delete(params: {\n pluginId: string,\n api?: BruceApi.Api,\n req?: Api.IReqParams\n }): Promise<void> {\n let { pluginId, api, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!pluginId) {\n throw(\"Plugin ID is required.\");\n }\n await api.DELETE(`ui.plugin/${pluginId}`, Api.PrepReqParams(req));\n api.Cache.Remove(GetCacheKey(pluginId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n /**\n * Warning: This will replace the contents of your plugin.\n * Upload only ZIP files.\n * @param params \n */\n export async function Upload(params: {\n pluginId: string,\n api?: BruceApi.Api,\n file: File,\n onProgress?: (progress: Uploader.IProgress) => void,\n req?: Api.IUploadReqParams\n }): Promise<void> {\n let { pluginId, api, file, onProgress, req } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetBruceApi();\n }\n if (!pluginId || !file) {\n throw(\"Plugin ID and file are required.\");\n }\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\n req.onProgress = (progress: ProgressEvent) => {\n const percent = Math.round ((progress.loaded / file.size) * 100);\n onProgress?.({\n percent: percent,\n uploaded: false\n });\n };\n await api.UPLOAD(`ui.plugin/${pluginId}/file`, file, req);\n api.Cache.Remove(GetCacheKey(pluginId));\n api.Cache.Remove(GetListCacheKey());\n }\n\n /**\n * Returns a run function to call that'll load a plugin within your provided container element.\n * The run function will return a dispose function to call to remove the plugin.\n * @param params \n * @returns \n */\n export async function GetRunFunction(params: {\n // If container does not have an HTML ID, one will be assigned to it.\n containerId?: string;\n container?: HTMLElement;\n\n // Arbitrary params to pass into the plugin.\n pluginParams?: any;\n \n // Params required to get the plugin load file.\n api?: BruceApi.Api,\n // Either plugin or plugin ID must be supplied.\n pluginId?: string,\n plugin?: Plugin.IPlugin\n }): Promise<{\n // Function to run to initialize the plugin.\n // This function will run eval on a generated script within your container.\n // It will return a dispose function to call.\n run: () => () => void\n }> {\n let { containerId, container, pluginParams, pluginId, plugin, api } = params;\n if (!containerId && container) {\n containerId = container.id;\n if (!containerId) {\n containerId = ObjectUtils.UId();\n container.id = containerId;\n }\n }\n if (!plugin && pluginId) {\n plugin = (await Plugin.Get({\n pluginId,\n api\n })).plugin;\n }\n if (plugin && !pluginId) {\n pluginId = plugin.ID;\n }\n const { indexFileUrl } = GetLoadUrl({\n api,\n pluginId,\n cacheKey: plugin.Version\n });\n\n let fileContent = await fetch(indexFileUrl).then((res) => res.text());\n const start = fileContent.indexOf(\"{\");\n const end = fileContent.lastIndexOf(\"}\");\n fileContent = fileContent.substring(start + 1, end);\n\n const paramsId = ObjectUtils.UId();\n window[paramsId] = pluginParams ? pluginParams : {};\n const disposeId = ObjectUtils.UId();\n const elementId = ObjectUtils.UId();\n\n let script = `\n function run() {\n ${fileContent}\n\n const paramsId = \"${paramsId}\";\n const containerId = \"${containerId}\";\n let container;\n if (containerId) {\n container = document.getElementById(\"${containerId}\");\n }\n\n let pluginHTML = null;\n if (container) {\n pluginHTML = document.createElement(\"div\");\n pluginHTML.id = \"${elementId}\";\n container.appendChild(pluginHTML);\n }\n\n {TEMPLATE_CODE}\n const params = window[\"${paramsId}\"];\n\n window[\"${disposeId}\"] = Run({\n element: pluginHTML,\n container: container,\n pluginParams: params\n });\n }\n run();\n `;\n if (script.includes(\"var template\")) {\n script = script.replace(\"{TEMPLATE_CODE}\", `\n if (pluginHTML && template) {\n pluginHTML.innerHTML = template;\n }\n `);\n }\n else {\n script = script.replace(\"{TEMPLATE_CODE}\", \"\");\n }\n\n return {\n run: () => {\n const eval2 = eval;\n eval2(script);\n\n // Ensure a function is returned, even if the plugin is not configured properly to return one.\n if (!window[disposeId] || typeof window[disposeId] !== \"function\") {\n window[disposeId] = () => {\n console.warn(\"Plugin called to be disposed but no dispose function was found.\");\n };\n }\n const callDispose = window[disposeId];\n return () => {\n if (elementId) {\n const element = document.getElementById(elementId);\n if (element && element.parentElement) {\n element.parentElement.removeChild(element);\n }\n }\n callDispose();\n };\n }\n }\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { EntityAttribute } from \"../entity/entity-attribute\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\n\r\nexport namespace DataSource {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.DataSource + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.DataSource;\r\n }\r\n\r\n export interface ISource {\r\n // Not set for new records.\r\n ID?: number;\r\n Name: string;\r\n URL?: string;\r\n Type?: Type;\r\n MinLatitude?: number;\r\n MaxLatitude?: number;\r\n MinLongitude?: number;\r\n MaxLongitude?: number;\r\n DataSchema?: EntityAttribute.IAttribute;\r\n Parameters?: object;\r\n }\r\n\r\n export enum EType {\r\n IDMapping = \"IDMapping\"\r\n }\r\n export type Type = EType | string;\r\n\r\n export async function Update(params: {\r\n source: ISource,\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }) {\r\n let { source: data, api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n const url = `source` + (data.ID == null ? \"\" : \"/\" + data.ID);\r\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n await api.Cache.Remove(GetCacheKey(<number>data.ID));\r\n await api.Cache.Remove(GetListCacheKey());\r\n\r\n return {\r\n source: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n id: number,\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }) {\r\n let { id, api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n await api.DELETE(`source/${id}`, Api.PrepReqParams(reqParams));\r\n await api.Cache.Remove(GetCacheKey(id));\r\n await api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Get(params: {\r\n id: number,\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }) {\r\n let { id, api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n reqParams = Api.PrepReqParams(reqParams);\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData?.found) {\r\n return cacheData.data;\r\n }\r\n\r\n const prom = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`source/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n source: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }) {\r\n let { api, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n reqParams = Api.PrepReqParams(reqParams);\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData?.found) {\r\n return cacheData.data;\r\n }\r\n \r\n const prom = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"sources\", Api.PrepReqParams(reqParams))\r\n res({\r\n sources: data?.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n}","export * from \"./ann-document/ann-document\";\n\nexport * from \"./custom-form/custom-form\";\nexport * from \"./custom-form/custom-form-content\";\n\nexport * from \"./api/abstract-api\";\nexport * from \"./api/api\";\nexport * from \"./api/bruce-api\";\nexport * from \"./api/cam-api\";\nexport * from \"./api/idm-api\";\nexport * from \"./api/global-api\";\nexport * from \"./api/guardian-api\";\nexport * from \"./api/api-getters\";\n\nexport * from \"./calculator/calculator\";\n\nexport * from \"./common/bounds\";\nexport * from \"./common/bruce-event\";\nexport * from \"./common/cache\";\nexport * from \"./common/camera\";\nexport * from \"./common/cartes\";\nexport * from \"./common/carto\";\nexport * from \"./common/color\";\nexport * from \"./common/delay-queue\";\nexport * from \"./common/dictionary\";\nexport * from \"./common/geometry\";\nexport * from \"./common/transform\";\nexport * from \"./common/utc\";\nexport * from \"./common/bruce-variable\";\nexport * from \"./common/lru-cache\";\nexport * from \"./common/section\";\n\nexport * from \"./entity/entity-attachment-type\";\nexport * from \"./entity/entity-attachment\";\nexport * from \"./entity/entity-comment\";\nexport * from \"./entity/entity-link\";\nexport * from \"./entity/entity-lod\";\nexport * from \"./entity/entity-lod-category\";\nexport * from \"./entity/entity-relation-type\";\nexport * from \"./entity/entity-relation\";\nexport * from \"./entity/entity-source\";\nexport * from \"./entity/entity-tag\";\nexport * from \"./entity/entity-type\";\nexport * from \"./entity/entity\";\nexport * from \"./entity/getters/view-monitor\";\nexport * from \"./entity/getters/entity-globe\";\nexport * from \"./entity/getters/entity-filter-getter\";\nexport * from \"./entity/getters/batched-data-getter\";\nexport * from \"./entity/entity-coords\";\nexport * from \"./entity/entity-type-visual-settings\";\nexport * from \"./entity/entity-attribute\";\n\nexport * from \"./client-file/client-file\";\n\nexport * from \"./program-key/program-key\";\n\nexport * from \"./project/zoom-control\";\nexport * from \"./project/menu-item\";\nexport * from \"./project/project-view-bookmark\";\nexport * from \"./project/project-view\";\nexport * from \"./project/project-view-legacy-tile\";\nexport * from \"./project/project-view-tile\";\nexport * from \"./project/project-view-selection\";\n\nexport * from \"./server/pending-action\";\nexport * from \"./server/message-broker\";\nexport * from \"./server/hosting-location\";\n\nexport * from \"./style/style\";\n\nexport * from \"./tileset/tileset\";\n\nexport * from \"./user/permission\";\nexport * from \"./user/session\";\nexport * from \"./user/user-group\";\nexport * from \"./user/user\";\n\nexport * from \"./account/account\";\nexport * from \"./account/account-settings\";\nexport * from \"./account/account-invite\";\n\nexport * from \"./util/encrypt-utils\";\nexport * from \"./util/math-utils\";\nexport * from \"./util/object-utils\";\nexport * from \"./util/path-utils\";\nexport * from \"./util/url-utils\";\n\nexport * from \"./data-lab/data-lab\";\n\nexport * from \"./import/import-cad\";\nexport * from \"./import/import-csv\";\nexport * from \"./import/import-json\";\nexport * from \"./import/import-kml\";\nexport * from \"./import/imported-file\";\n\nexport * from \"./markup/markup\";\nexport * from \"./internal/uploader\";\nexport * from \"./plugin/plugin\";\nexport * from \"./environment\";\nexport * from \"./data-source/data-source\";\n\nexport const VERSION = \"2.8.2\";"],"names":["Api","require","global","MessageBroker","A","GuardianApi","ENVIRONMENT","Account","HostingLocation","BruceApi","CamApi","GlobalApi","IdmApi","AnnDocument","CustomForm","CustomFormContent","Color","ObjectUtils","PathUtils","Entity","BruceVariable","Calculator","Geometry","Bounds","Camera","Cartes","Carto","UTC","EntityAttachmentType","EntityAttachment","EntityComment","EntityLink","EntityLod","EntityLodCategory","EntityRelationType","EntityRelation","EntitySource","EntityTag","EntityType","EntityGlobe","EntityFilterGetter","MAX_AREA_IN_DEGREES","BatchedDataGetter","MathUtils","EntityCoords","EntityTypeVisualSettings","EntityAttribute","Uploader","ClientFile","ProgramKey","ZoomControl","Tileset","MenuItem","ProjectViewBookmark","ProjectView","ProjectViewLegacyTile","ProjectViewTile","PendingAction","Style","Permission","Session","UserGroup","User","AccountInvite","EncryptUtils","UrlUtils","DataLab","ImportCad","ImportCsv","ImportJson","ImportKml","ImportedFile","Markup","Plugin","DataSource","VERSION"],"mappings":"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"}