bruce-models 3.1.3 → 3.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bruce-models.es5.js +2 -547
- package/dist/bruce-models.es5.js.map +1 -1
- package/dist/bruce-models.umd.js +1 -534
- package/dist/bruce-models.umd.js.map +1 -1
- package/dist/lib/bruce-models.js +1 -5
- package/dist/lib/bruce-models.js.map +1 -1
- package/dist/types/bruce-models.d.ts +1 -5
- package/dist/types/custom-form/custom-form-content.d.ts +1 -1
- package/package.json +1 -1
- package/dist/lib/entity/getters/batched-data-getter.js +0 -85
- package/dist/lib/entity/getters/batched-data-getter.js.map +0 -1
- package/dist/lib/entity/getters/entity-filter-getter.js +0 -321
- package/dist/lib/entity/getters/entity-filter-getter.js.map +0 -1
- package/dist/lib/entity/getters/entity-globe.js +0 -192
- package/dist/lib/entity/getters/entity-globe.js.map +0 -1
- package/dist/lib/entity/getters/view-monitor.js +0 -3
- package/dist/lib/entity/getters/view-monitor.js.map +0 -1
- package/dist/types/entity/getters/batched-data-getter.d.ts +0 -26
- package/dist/types/entity/getters/entity-filter-getter.d.ts +0 -61
- package/dist/types/entity/getters/entity-globe.d.ts +0 -21
- package/dist/types/entity/getters/view-monitor.d.ts +0 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bruce-models.es5.js","sources":["../src/api/api.ts","../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/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}","type Key = string | number;\ntype Persistence = \"memory\" | \"storage\";\n\n// 1 minute.\nconst DEFAULT_DURATION = 60 * 1000;\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 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 }\n\n /**\n * Sets item to cache.\n * @param id\n * @param data\n * @param duration\n */\n public Set(params: {\n id: string,\n data: any,\n // Persistence is currently set to memory until storage is reworked.\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 }): void {\n if (this.Disabled) {\n return;\n }\n let { id, data, duration } = params;\n if (!duration || duration < 0) {\n duration = DEFAULT_DURATION;\n }\n id = String(id);\n\n const expires = Date.now() + duration;\n const record: IRecord = {\n id,\n data,\n expires\n };\n this.memory.set(id, record);\n }\n\n /**\n * Returns the item with the given id.\n * @param id\n * @returns\n */\n public Get(id: Key): {\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 return {\n data: null,\n found: false\n };\n }\n if (record.expires < Date.now()) {\n this.memory.delete(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 Clear(): void {\n this.memory.clear();\n }\n\n /**\n * Removes the item with the given id.\n * @param id\n */\n public Remove(id: Key): void {\n id = String(id);\n this.memory.delete(id);\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 RemoveBy(callback: (key: Key) => boolean): void {\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 }\n\n /**\n * Removes all items that start with the given text.\n * @param text\n */\n public RemoveByStartsWith(text: Key): void {\n 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 RemoveByContains(text: Key): void {\n 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 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 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 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\";\r\nimport { AccountSettings } from \"../account/account-settings\";\r\nimport { Api } from \"../api/api\";\r\nimport { GuardianApi } from \"../api/guardian-api\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\n\r\n/**\r\n * A hosting location is a record for a possible bruce-api server configuration.\r\n * A hosting location will have one or many database servers as well, this is an additional setting.\r\n */\r\nexport namespace HostingLocation {\r\n export interface ILocation {\r\n // Internal ID.\r\n ID: number;\r\n // External ID.\r\n Key: string;\r\n // Indicates if creation of a new bruce account is allowed in this region.\r\n // This should dictate if the record is visible in UI dropdowns as well for non-super-admins.\r\n IsEnabledForNewAccounts: boolean;\r\n DisplayName?: string;\r\n Description?: string;\r\n // Eg: \"us-west-1\".\r\n AWSRegion?: string;\r\n // Eg: \"Singapore\".\r\n Country?: string;\r\n // Eg: \"Vultr\".\r\n Hoster?: string;\r\n // Eg: \"San Francisco\".\r\n City?: string;\r\n // URL template to the corresponding API instance.\r\n // Eg: \"https://<ACCOUNTID>.api.nextspace-us.host/\".\r\n BruceAPIURL?: string;\r\n // Comma separated list of Api.EEnv.\r\n Environment?: string;\r\n // Arbitrary settings for the particular location.\r\n // For example this may include CDN template URLs.\r\n Settings?: any;\r\n }\r\n\r\n /**\r\n * @Warning: This will not return the Settings property.\r\n * @param params\r\n * @returns\r\n */\r\n export async function GetList(params: {\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n locations: ILocation[]\r\n }> {\r\n let { api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const res = await api.GET(\"hostinglocations\", Api.PrepReqParams(req));\r\n return {\r\n locations: res.Items\r\n };\r\n }\r\n\r\n export async function GetById(params: {\r\n id: number,\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n let { id, api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n if (!id) {\r\n throw(\"Invalid id\");\r\n }\r\n const res = await api.GET(`hostinglocation/id/${id}`, Api.PrepReqParams(req));\r\n return {\r\n location: res\r\n };\r\n }\r\n\r\n export async function GetByKey(params: {\r\n key: string,\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n let { key, api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n if (!key) {\r\n throw(\"Invalid key\");\r\n }\r\n const res = await api.GET(`hostinglocation/key/${key}`, Api.PrepReqParams(req));\r\n return {\r\n location: res\r\n };\r\n }\r\n\r\n /**\r\n * Returns hostingLocationKey from given db url.\r\n * Some older accounts don't have this set, so we need to guess it.\r\n * @param params\r\n * @returns\r\n */\r\n export function GuessKey(params: {\r\n // Database connection string.\r\n DBServer?: string\r\n }) {\r\n const { DBServer: databaseUrl } = params;\r\n if (databaseUrl.includes(\"hyperfarm-prod-instance-1\")) {\r\n return \"HYPERFARM\";\r\n }\r\n if (databaseUrl.includes(\"prod-syd1.nextspace.host\")) {\r\n return \"AU-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-nyc1.nextspace.host\")) {\r\n return \"US-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-ams1.nextspace.host\")) {\r\n return \"EU-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-sing1.nextspace.host\")) {\r\n return \"SE-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"dev-first\")) {\r\n return \"DEV-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\".ap-southeast-1.\")) {\r\n return \"SE\";\r\n }\r\n else if (databaseUrl.includes(\".us-west-1.\")) {\r\n return \"US\";\r\n }\r\n else if (databaseUrl.includes(\".eu-west-3.\")) {\r\n return \"EU\";\r\n }\r\n else if (databaseUrl.includes(\"bruce-prod-au\")) {\r\n return \"AU\";\r\n }\r\n else if (databaseUrl.includes(\"bruce-dev\")) {\r\n return \"DEV\";\r\n }\r\n return null;\r\n }\r\n\r\n export async function GetKeyByAccountId(params: {\r\n // Either accountId or apiSettings must be provided.\r\n accountId?: string,\r\n apiSettings?: AccountSettings.IBruceApi,\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n key: string,\r\n // Indicates if the key was inferred by legacy data.\r\n isLegacy?: boolean\r\n }> {\r\n let { accountId, apiSettings, api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n if (!accountId && !apiSettings) {\r\n throw(\"Invalid accountId or apiSettings\");\r\n }\r\n const settings = apiSettings ? apiSettings : (await Account.GetAppSettings({\r\n api,\r\n accountId,\r\n appId: Account.EAppId.BruceApi\r\n })).settings as AccountSettings.IBruceApi;\r\n let hostingKey = settings[\"HostingLocation.Key\"];\r\n let isLegacy = false;\r\n if (!hostingKey) {\r\n hostingKey = settings.DBLocation;\r\n isLegacy = true;\r\n }\r\n if (!hostingKey) {\r\n hostingKey = GuessKey({\r\n DBServer: settings.DBServer\r\n });\r\n isLegacy = true;\r\n }\r\n return {\r\n key: hostingKey,\r\n isLegacy\r\n };\r\n }\r\n\r\n export async function GetByAccountId(params: {\r\n // Either accountId or apiSettings must be provided.\r\n accountId?: string,\r\n apiSettings?: AccountSettings.IBruceApi,\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n let { accountId, apiSettings, api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const data = await GetKeyByAccountId({\r\n accountId,\r\n apiSettings,\r\n api,\r\n req\r\n });\r\n if (!data?.key) {\r\n return null;\r\n }\r\n const key = await GetByKey({\r\n key: data.key,\r\n api,\r\n req\r\n });\r\n return key;\r\n }\r\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 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 { 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 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 { 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.IContent | 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}","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\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Bounds } from \"../common/bounds\";\r\nimport { Geometry } from \"../common/geometry\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { Transform } from \"../common/transform\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { EntityType } from \"./entity-type\";\r\nimport { PathUtils } from \"../util/path-utils\";\r\nimport { IDictionary } from \"../common/dictionary\";\r\nimport { Carto } from \"../bruce-models\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\n\r\ntype _any = any;\r\n\r\n/**\r\n * Describes the \"Entity\" concept within Bruce.\r\n * An entity is a JSON blob containing both internal data and user-defined data.\r\n * Entity records have many thinks linked to them through their UIDs such as links, files and relationships.\r\n */\r\nexport namespace Entity {\r\n export function GetCacheKey(params: {\r\n entityId: string,\r\n entityTypeId?: string,\r\n expandLocation?: boolean,\r\n expandRelations?: boolean\r\n }): string {\r\n let { entityId, entityTypeId, expandLocation, expandRelations } = params;\r\n if (!entityTypeId) {\r\n entityTypeId = \"\";\r\n }\r\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}${String(entityTypeId)}${String(Boolean(expandLocation))}${String(Boolean(expandRelations))}`;\r\n }\r\n\r\n export function GetContainsKey(entityId: string) {\r\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}`;\r\n }\r\n\r\n export interface IEntity extends _any {\r\n Bruce: {\r\n \"CreatedBy.User.ID\"?: string;\r\n CreatedTime?: UTC.IUTC;\r\n \"EntityType.ID\": string;\r\n ID?: string;\r\n \"Layer.ID\"?: number[];\r\n // Available if expandRelations=true.\r\n // This is an array of all immediate downstream relationships for this entity.\r\n relations?: IRelationData[];\r\n };\r\n location?: Carto.ICarto;\r\n boundaries?: Bounds.IBounds;\r\n transform?: Transform.ITransform;\r\n position?: number[][];\r\n geometry?: Geometry.IGeometry;\r\n // Available if expandLocation is true.\r\n // Related tileset ids if any.\r\n tilesetID?: string[];\r\n // Available if expandLocation is true.\r\n // Relative offset to parent node.\r\n worldPosition?: number[][];\r\n }\r\n\r\n export interface IRelationData {\r\n \"Other.Entity.ID\": string;\r\n \"RelationType.ID\": string;\r\n }\r\n\r\n export async function Get(params: {\r\n api?: BruceApi.Api,\r\n entityId: string,\r\n // (Optional) Entity type ID to load specific schema.\r\n entityTypeId?: string;\r\n expandLocation?: boolean,\r\n expandRelations?: boolean\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entity: IEntity\r\n }> {\r\n let { api, entityId, req: reqParams, expandLocation, expandRelations, entityTypeId } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const key = GetCacheKey({\r\n entityId,\r\n entityTypeId,\r\n expandLocation,\r\n expandRelations\r\n });\r\n const cache = 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 urlParams = new URLSearchParams();\r\n if (expandLocation) {\r\n urlParams.append(\"$expand\", \"location\");\r\n }\r\n if (expandRelations) {\r\n urlParams.append(\"$expand\", \"relation\");\r\n }\r\n if (entityTypeId) {\r\n urlParams.append(\"BruceEntityType\", entityTypeId);\r\n }\r\n const data = await api.GET(\r\n `entity/${entityId}?${urlParams.toString()}`,\r\n Api.PrepReqParams(reqParams)\r\n );\r\n res({\r\n entity: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n 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 GetListByIds(params: {\r\n api?: BruceApi.Api,\r\n entityIds: string[],\r\n expandRelations?: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entities: IEntity[]\r\n }> {\r\n let { api, entityIds, req: reqParams, expandRelations } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!entityIds.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n const reqs: Promise<{ entity: IEntity }>[] = [];\r\n const reqIds: string[] = [];\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n const key = GetCacheKey({ entityId, expandRelations });\r\n const cache = api.GetCacheItem(key, reqParams);\r\n if (cache?.found) {\r\n reqs.push(cache.data);\r\n }\r\n else {\r\n reqIds.push(entityId);\r\n }\r\n }\r\n const reqData = {\r\n Filter: {\r\n ID: {\r\n in: reqIds\r\n }\r\n },\r\n PageSize: reqIds.length\r\n };\r\n if (reqIds.length > 0) {\r\n const urlParams = new URLSearchParams();\r\n if (expandRelations) {\r\n urlParams.append(\"$expand\", \"relation\");\r\n }\r\n const req: Promise<Api.IList<Entity.IEntity>> = api.POST(\"entities?\" + urlParams.toString(), reqData, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < reqIds.length; i++) {\r\n const entityId = reqIds[i];\r\n const key = GetCacheKey({ entityId });\r\n const prom: Promise<{ entity: IEntity }> = new Promise(async (res) => {\r\n try {\r\n const data = await req;\r\n const item = data.Items.find(x => x.Bruce.ID == entityId);\r\n res({\r\n entity: item\r\n });\r\n }\r\n catch (e) {\r\n // No showing error as we don't want to see it 2000 times.\r\n }\r\n res(<any>null);\r\n });\r\n api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n reqs.push(prom);\r\n }\r\n }\r\n return {\r\n entities: (await Promise.all(reqs)).map(x => x?.entity).filter(x => !!x)\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api?: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, entityId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.RemoveByContains(GetContainsKey(entityId));\r\n }\r\n\r\n export async function DeleteList(params: {\r\n api?: BruceApi.Api,\r\n entityIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, entityIds, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!entityIds?.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n await api.POST(\"deleteEntities\", {\r\n Items: entityIds\r\n }, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n api.Cache.RemoveByContains(GetContainsKey(entityId));\r\n }\r\n }\r\n\r\n export async function Update(params: {\r\n api?: BruceApi.Api,\r\n entity: IEntity,\r\n override: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entity: IEntity\r\n }> {\r\n let { api, entity: data, override, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!data?.Bruce?.[\"EntityType.ID\"]) {\r\n throw(\"Entity Type ID is required.\");\r\n }\r\n if (!data?.Bruce?.ID) {\r\n data.Bruce = {\r\n ...data.Bruce,\r\n ID: ObjectUtils.UId()\r\n };\r\n }\r\n const reqUrl = `entity/${data.Bruce.ID}/?dataoverride=${override}&BruceEntityType=${data.Bruce[\"EntityType.ID\"]}`;\r\n const res = await api.POST(reqUrl, data, Api.PrepReqParams(reqParams));\r\n api.Cache.RemoveByContains(GetContainsKey(<string>data.Bruce.ID));\r\n return {\r\n entity: res\r\n };\r\n }\r\n\r\n export function RemoveTag(params: {\r\n entity: IEntity,\r\n tagId: number\r\n }): void {\r\n const { entity: data, tagId } = params;\r\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\r\n const index = tags.indexOf(tagId);\r\n if (index >= 0) {\r\n tags.splice(index, 1);\r\n data.Bruce[\"Layer.ID\"] = tags;\r\n }\r\n }\r\n\r\n export function AddTag(params: {\r\n entity: IEntity,\r\n tagId: number\r\n }): void {\r\n const { entity: data, tagId } = params;\r\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\r\n if (!tags.includes(tagId)) {\r\n tags.push(tagId);\r\n data.Bruce[\"Layer.ID\"] = tags;\r\n }\r\n }\r\n\r\n export function SetValue(params: {\r\n entity: IEntity,\r\n path: string[],\r\n value: any\r\n }): void {\r\n const { entity: data, path, value } = params;\r\n let curData = data;\r\n for (let i = 0; i < path.length; i++) {\r\n const step = path[i];\r\n if (!curData[step] || typeof curData[step] != \"object\") {\r\n curData[step] = {};\r\n }\r\n if (i >= path.length - 1) {\r\n curData[step] = value;\r\n break;\r\n }\r\n curData = curData[step];\r\n }\r\n }\r\n\r\n export function GetValue(params: {\r\n entity: IEntity,\r\n path: string[]\r\n }): any {\r\n const { entity: data, path } = params;\r\n // Backwards compatibility.\r\n if (path.length == 1 && path[0] == \"ID\") {\r\n return data.Bruce?.ID;\r\n }\r\n let curData = data;\r\n for (let i = 0; i < path.length; i++) {\r\n const step = path[i];\r\n if (!curData[step]) {\r\n return null;\r\n }\r\n if (i >= path.length - 1) {\r\n return curData[step];\r\n }\r\n curData = curData[step];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Calculates an entity's name based on attribute priority set in the type.\r\n * @param params\r\n * If true, will return the entity ID if no name can be calculated.\r\n * Otherwise it returns null.\r\n * @returns\r\n */\r\n export function CalculateName(params: {\r\n entity: IEntity,\r\n type: EntityType.IEntityType,\r\n defaultToId?: boolean\r\n }): string {\r\n const { entity, type, defaultToId = true } = params;\r\n const attrStr = type.DisplayNameAttributePath;\r\n if (attrStr) {\r\n const attrPaths = attrStr.split(\",\");\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const pathStr = attrPaths[i];\r\n const path = PathUtils.Parse(pathStr);\r\n const name = Entity.GetValue({\r\n entity: entity,\r\n path\r\n });\r\n if (name && typeof name != \"object\") {\r\n return name;\r\n }\r\n }\r\n }\r\n return defaultToId ? entity.Bruce.ID : null;\r\n }\r\n\r\n export interface IFilter {\r\n orderBy?: any;\r\n entityTypeId?: string;\r\n layerIds?: number[];\r\n // Default is \"equals\" for backwards compatibility.\r\n layerIdsOperator?: \"equals\" | \"in\";\r\n bounds?: Bounds.IReqBounds;\r\n pageSize?: number;\r\n pageIndex?: number;\r\n lodCategoryId?: string;\r\n sortOrder?: Api.ESortOrder;\r\n entityTypeConditions?: IDictionary<any>;\r\n }\r\n\r\n export async function GetList(params: {\r\n api?: BruceApi.Api,\r\n filter: IFilter,\r\n expandRelations?: boolean,\r\n // Default = false. If false then only analysis data is returned instead of the entities.\r\n // TODO: Requires a provided entityTypeId. This is out of date in API.\r\n analysis?: boolean,\r\n // Default = false.\r\n viaCdn?: boolean;\r\n // (Optional) Cache killing token to append to the request url.\r\n viaCdnCacheToken?: number | string;\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n // Returned if analysis=false.\r\n entities?: IEntity[];\r\n // Returned if analysis=true.\r\n totalCount?: number;\r\n }> {\r\n let { api, filter, req: reqParams, viaCdn, viaCdnCacheToken, analysis, expandRelations } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n let requestFilter: any = {};\r\n if (filter.entityTypeConditions) {\r\n requestFilter = {\r\n ...filter.entityTypeConditions\r\n };\r\n }\r\n if (filter.layerIds != null && filter.layerIds.length > 0) {\r\n const operator = filter.layerIdsOperator ?? \"equals\";\r\n requestFilter[\"Bruce.Layer.ID\"] = {\r\n [operator]: filter.layerIds\r\n };\r\n }\r\n if (filter.bounds) {\r\n requestFilter[\"geometry\"] = {\r\n \"intersects\": [\r\n filter.bounds.south,\r\n filter.bounds.north,\r\n filter.bounds.west,\r\n filter.bounds.east\r\n ]\r\n };\r\n }\r\n\r\n const body = {\r\n SortOrder: filter.sortOrder == Api.ESortOrder.Asc ? \"ASC\" : \"DESC\",\r\n OrderBy: filter.orderBy,\r\n Filter: requestFilter,\r\n LODType: filter.lodCategoryId,\r\n BruceEntityType: filter.entityTypeId,\r\n PageIndex: filter.pageIndex,\r\n PageSize: filter.pageSize\r\n };\r\n\r\n let totalCount: number;\r\n let entities = [];\r\n if (analysis || expandRelations || (viaCdn && api.EntityCdnUrl)) {\r\n let url: URL;\r\n if (analysis) {\r\n url = new URL(api.GetBaseUrl() + \"entities/summary\");\r\n }\r\n else if (viaCdn && api.EntityCdnUrl) {\r\n url = new URL(api.EntityCdnUrl);\r\n }\r\n else {\r\n url = new URL(api.GetBaseUrl() + \"entities\");\r\n }\r\n\r\n const urlParams = new URLSearchParams(url.search);\r\n urlParams.set(\"cacheToken\", String(viaCdnCacheToken ? viaCdnCacheToken : 0));\r\n if (body.SortOrder) {\r\n urlParams.set(\"SortOrder\", body.SortOrder);\r\n }\r\n if (body.OrderBy) {\r\n urlParams.set(\"OrderBy\", body.OrderBy);\r\n }\r\n if (body.Filter) {\r\n urlParams.set(\"Filter\", JSON.stringify(body.Filter));\r\n }\r\n if (body.LODType) {\r\n urlParams.set(\"LODType\", body.LODType);\r\n }\r\n if (body.BruceEntityType) {\r\n urlParams.set(\"BruceEntityType\", body.BruceEntityType);\r\n }\r\n if (body.PageIndex) {\r\n urlParams.set(\"PageIndex\", String(body.PageIndex));\r\n }\r\n if (body.PageSize) {\r\n urlParams.set(\"PageSize\", String(body.PageSize));\r\n }\r\n if (expandRelations) {\r\n urlParams.append(\"$expand\", \"relation\");\r\n }\r\n const urlStr = url.toString() + \"?\" + urlParams.toString();\r\n const data = await api.get(urlStr, Api.PrepReqParams(reqParams));\r\n if (!analysis) {\r\n entities = data.Items;\r\n }\r\n totalCount = data.TotalCount;\r\n }\r\n else {\r\n const url = new URL(api.GetBaseUrl() + (analysis ? \"entities/summary\" : \"entities\"));\r\n const urlParams = new URLSearchParams(url.search);\r\n if (expandRelations) {\r\n urlParams.append(\"$expand\", \"relation\");\r\n }\r\n const urlStr = url.toString() + \"?\" + urlParams.toString();\r\n\r\n const data = await api.post(urlStr, body, Api.PrepReqParams(reqParams));\r\n if (!analysis) {\r\n entities = data.Items;\r\n // Only caching when non-CDN.\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = entity.Bruce.ID;\r\n api.SetCacheItem({\r\n key: GetCacheKey({\r\n entityId: id,\r\n expandRelations\r\n }),\r\n value: {\r\n entity: entity\r\n },\r\n req: reqParams\r\n });\r\n }\r\n }\r\n totalCount = data.TotalCount;\r\n }\r\n return {\r\n entities,\r\n totalCount\r\n };\r\n }\r\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 points: IGradientPoint[];\r\n // Deprecated.\r\n // It will be calculated from the provided points.\r\n min?: number;\r\n max?: number;\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 (!fields?.length) {\r\n return null;\r\n }\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 (!fields?.length) {\r\n return null;\r\n }\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 (!fields?.length) {\r\n return null;\r\n }\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 (!fields?.length) {\r\n return null;\r\n }\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\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 {\r\n const tmp = GetGradientValue(<IGradientValue>field.value, entity);\r\n // This avoids null turning into \"null\".\r\n if (tmp) {\r\n value = String(tmp);\r\n }\r\n }\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n {\r\n const tmp = GetInputValue(<string>field.value, entity);\r\n // This avoids null turning into \"null\".\r\n if (tmp) {\r\n value = String(tmp);\r\n }\r\n }\r\n break;\r\n case EValueType.Mapping:\r\n {\r\n const tmp = GetMappingValue(<IMappingValue>field.value, entity);\r\n // This avoids null turning into \"null\".\r\n if (tmp) {\r\n value = String(tmp);\r\n }\r\n }\r\n break;\r\n case EValueType.RandomColor:\r\n // Would be nice to randomize based on an attribute or entity ID instead of pure random.\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 min = +value.points[0].position;\r\n const max = +value.points[value.points.length - 1].position;\r\n\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 if (typeof eValue == \"string\") {\r\n eValue = Number(eValue);\r\n }\r\n\r\n if ((!eValue && eValue != 0) || isNaN(eValue)) {\r\n continue;\r\n }\r\n\r\n if (eValue >= max) {\r\n return Color.ColorFromStr(value.points[value.points.length - 1].color);\r\n }\r\n else if (eValue <= min) {\r\n return Color.ColorFromStr(value.points[0].color);\r\n }\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[0].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\";\r\nimport { BruceApi } from \"../../api/bruce-api\";\r\nimport { Bounds } from \"../../common/bounds\";\r\nimport { BruceEvent } from \"../../common/bruce-event\";\r\nimport { Carto } from \"../../common/carto\";\r\nimport { IDictionary } from \"../../common/dictionary\";\r\nimport { Entity } from \"../entity\";\r\nimport { EntityGlobe } from \"./entity-globe\";\r\nimport { ViewMonitor } from \"./view-monitor\";\r\n\r\nconst MAX_AREA_IN_DEGREES = 90;\r\nconst MAX_RETRY_ATTEMPTS = 1;\r\nconst RETRY_DELAY_INCREMENT = 500;\r\nconst REQUEST_PAGE_DELAY = 50;\r\n\r\nclass regMenuItemGetter {\r\n TagIds: number[];\r\n MinHeight: number;\r\n MaxHeight: number;\r\n\r\n constructor(tagIds: number[], minHeight: number, maxHeight: number) {\r\n this.TagIds = tagIds;\r\n this.MinHeight = minHeight;\r\n this.MaxHeight = maxHeight;\r\n }\r\n}\r\n\r\nasync function delay(milliseconds: number): Promise<void> {\r\n return new Promise((res) => {\r\n setTimeout(() => {\r\n res();\r\n }, milliseconds);\r\n });\r\n}\r\n\r\n/**\r\n * This is a batched entity getter.\r\n * It will scan for entity records in a view-area and emit them in batches.\r\n * It will restart scanning if the camera moves.\r\n */\r\nexport namespace EntityFilterGetter {\r\n export enum EStatus {\r\n Scanning = \"SCANNING\",\r\n Loading = \"LOADING\",\r\n }\r\n\r\n export interface IStatusUpdate {\r\n msg: EStatus;\r\n revoking: boolean;\r\n }\r\n\r\n export class Getter {\r\n private onUpdate: BruceEvent<Entity.IEntity[]> = <any>null;\r\n public get OnUpdate(): BruceEvent<Entity.IEntity[]> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<Entity.IEntity[]>();\r\n }\r\n return this.onUpdate;\r\n }\r\n\r\n public LastStateUpdates: IDictionary<IStatusUpdate> = {};\r\n private onStateUpdate: BruceEvent<IStatusUpdate> = <any>null;\r\n public get OnStateUpdate(): BruceEvent<IStatusUpdate> {\r\n if (!this.onStateUpdate) {\r\n this.onStateUpdate = new BruceEvent<IStatusUpdate>();\r\n }\r\n return this.onStateUpdate;\r\n }\r\n\r\n private onScanUpdate: BruceEvent<EntityGlobe.Cell[]> = <any>null;\r\n public get OnScanUpdate(): BruceEvent<EntityGlobe.Cell[]> {\r\n if (!this.onScanUpdate) {\r\n this.onScanUpdate = new BruceEvent<EntityGlobe.Cell[]>();\r\n }\r\n return this.onScanUpdate;\r\n }\r\n\r\n private api: BruceApi.Api;\r\n private viewPort: ViewMonitor.IMonitor;\r\n private viewPortChangeRemoval: () => void = <any>null;\r\n private cells: EntityGlobe.Grid = <any>null;\r\n private registeredItems: IDictionary<regMenuItemGetter> = {};\r\n private getterLoopId: number = 0;\r\n\r\n private viaCdn: boolean;\r\n private typeId: string;\r\n private batchSize: number;\r\n private tagIds: number[] = <any>null;\r\n private minHeight = 0;\r\n private maxHeight = 100000;\r\n private attrFilter: IDictionary<any>;\r\n private viewRect: Bounds.IReqBounds = <any>null;\r\n private viewCenter: Carto.ICarto = <any>null;\r\n\r\n constructor(\r\n api: BruceApi.Api,\r\n viewPort: ViewMonitor.IMonitor,\r\n typeId: string,\r\n batchSize?: number,\r\n attrFilter?: IDictionary<any>,\r\n viaCdn?: boolean\r\n ) {\r\n this.api = api;\r\n this.typeId = typeId;\r\n this.viaCdn = Boolean(viaCdn);\r\n this.batchSize = isNaN(batchSize) ? 300 : batchSize;\r\n this.viewPort = viewPort;\r\n this.attrFilter = attrFilter;\r\n this.updateBounds();\r\n }\r\n\r\n /**\r\n * Returns id that represents the combined menu item parameters.\r\n * If integrity changes while a request is running, the request will not emit a response.\r\n * @returns\r\n */\r\n private getIntegrityId() {\r\n return this.tagIds == null ? \"\" : this.tagIds.join();\r\n }\r\n\r\n private viewAreaSub(): void {\r\n this.viewAreaDispose();\r\n this.viewPortChangeRemoval = this.viewPort.Updated().Subscribe(() => {\r\n this.updateBounds();\r\n this.startGetterLoop();\r\n });\r\n }\r\n\r\n private viewAreaDispose(): void {\r\n this.viewPortChangeRemoval?.();\r\n }\r\n\r\n public GetMenuItems(): string[] {\r\n return Object.keys(this.registeredItems);\r\n }\r\n\r\n public IncludeMenuItem(menuItemId: string, layerIds: number[], minHeight: number, maxHeight: number): void {\r\n this.registeredItems[menuItemId] = new regMenuItemGetter(layerIds, minHeight, maxHeight);\r\n this.updateState();\r\n }\r\n\r\n public ExcludeMenuItem(menuItemId: string): void {\r\n this.registeredItems[menuItemId] = <any>null;\r\n delete this.registeredItems[menuItemId];\r\n this.updateState();\r\n }\r\n\r\n private updateBounds(): void {\r\n const viewRect = this.viewPort.GetBounds();\r\n const poi = this.viewPort.GetTarget();\r\n if (viewRect && poi) {\r\n if (Math.abs(viewRect.west - viewRect.east) > MAX_AREA_IN_DEGREES) {\r\n return;\r\n }\r\n if (Math.abs(viewRect.south - viewRect.north) > MAX_AREA_IN_DEGREES) {\r\n return;\r\n }\r\n this.viewRect = viewRect;\r\n this.viewCenter = poi;\r\n }\r\n }\r\n\r\n private updateState(): void {\r\n const tagIds: number[] = [];\r\n const menuItemIds = this.GetMenuItems();\r\n let minHeight = null;\r\n let maxHeight = null;\r\n for (let i = 0; i < menuItemIds.length; i++) {\r\n const menuItem = this.registeredItems[menuItemIds[i]];\r\n if (menuItem) {\r\n if (maxHeight == null || maxHeight < menuItem.MaxHeight) {\r\n maxHeight = menuItem.MaxHeight;\r\n }\r\n if (minHeight == null || minHeight > menuItem.MinHeight) {\r\n minHeight = menuItem.MinHeight;\r\n }\r\n\r\n const itemLayerIds = menuItem.TagIds;\r\n if (itemLayerIds) {\r\n for (let j = 0; j < itemLayerIds.length; j++) {\r\n const itemLayerId = itemLayerIds[j];\r\n if (!tagIds.includes(itemLayerId)) {\r\n tagIds.push(itemLayerId);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (menuItemIds.length > 0) {\r\n // Reset cells so none are marked as fetched.\r\n this.cells = new EntityGlobe.Grid();\r\n this.tagIds = tagIds;\r\n this.minHeight = <number>minHeight;\r\n this.maxHeight = <number>maxHeight;\r\n this.updateBounds();\r\n this.startGetterLoop();\r\n this.viewAreaSub();\r\n }\r\n else {\r\n this.getterLoopId += 1;\r\n this.viewAreaDispose();\r\n }\r\n }\r\n\r\n private postStatus(status: IStatusUpdate): void {\r\n this.LastStateUpdates[status.msg] = status;\r\n this.onStateUpdate?.Trigger(status);\r\n }\r\n\r\n private startGetterLoop(): void {\r\n // Increase id so that existing loops stop.\r\n this.getterLoopId += 1;\r\n const loopId = this.getterLoopId;\r\n const loopIntegrity = this.getIntegrityId();\r\n\r\n new Promise(async () => {\r\n // Minor delay to stop 50 menu items enabling doing their first request all together.\r\n // This gives it time to recognize only 1 request is needed.\r\n // Would be better to not use this delay but we're on a clock.\r\n await delay(100);\r\n\r\n const MIN_HEIGHT = this.minHeight;\r\n const MAX_HEIGHT = this.maxHeight;\r\n const PAGE_SIZE = this.batchSize;\r\n let retryAttempts = MAX_RETRY_ATTEMPTS;\r\n let retryDelay = 0;\r\n let prevFirstId: string = \"\";\r\n let prevLastId: string = \"\";\r\n let prevTicks = 0;\r\n\r\n while ((!this.viewCenter || !this.viewRect) && this.getterLoopId == loopId) {\r\n await delay(RETRY_DELAY_INCREMENT);\r\n }\r\n if (this.getterLoopId != loopId) {\r\n return;\r\n }\r\n const alt = <number>this.viewRect.alt;\r\n if (alt > MAX_HEIGHT || (alt < MIN_HEIGHT && MIN_HEIGHT > 0)) {\r\n return;\r\n }\r\n\r\n const cells = this.cells.GetCellsForView(this.viewCenter, this.viewRect);\r\n this.onScanUpdate?.Trigger(cells);\r\n let curCellIndex = cells.length > 0 ? 0 : null;\r\n\r\n let postedScanning = false;\r\n let postedLoading = false;\r\n\r\n let total = 0\r\n while (retryAttempts > 0 && curCellIndex != null) {\r\n if (retryDelay > 0) {\r\n await delay(retryDelay);\r\n }\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n\r\n if (!postedScanning) {\r\n this.postStatus({ msg: EStatus.Scanning, revoking: false });\r\n postedScanning = true;\r\n }\r\n\r\n const curCell = cells[curCellIndex];\r\n if (curCell.IsFetched()) {\r\n curCell.Fetching = false;\r\n curCellIndex += 1;\r\n if (cells[curCellIndex]) {\r\n cells[curCellIndex].Fetching = true;\r\n }\r\n else {\r\n curCellIndex = null;\r\n }\r\n this.onScanUpdate?.Trigger(cells);\r\n continue;\r\n }\r\n\r\n try {\r\n let {entities} = await Entity.GetList({\r\n api: this.api,\r\n filter: {\r\n pageSize: PAGE_SIZE,\r\n pageIndex : curCell.FetchPageIndex,\r\n entityTypeId: this.typeId,\r\n layerIds: this.tagIds,\r\n // Any tag specified will be allowed.\r\n layerIdsOperator: \"in\",\r\n bounds: curCell.GetBounds(),\r\n sortOrder: Api.ESortOrder.Asc,\r\n entityTypeConditions: this.attrFilter\r\n },\r\n viaCdn: this.viaCdn,\r\n req: {\r\n noCache: true\r\n }\r\n });\r\n\r\n const integrity = this.getIntegrityId();\r\n if (loopIntegrity == integrity && entities) {\r\n this.onUpdate?.Trigger(entities);\r\n }\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n if (entities.length) {\r\n total += entities.length;\r\n }\r\n if (!postedLoading) {\r\n this.postStatus({ msg: EStatus.Loading, revoking: false });\r\n postedLoading = true;\r\n }\r\n\r\n // Only mark as fetched when ALL pages are done.\r\n // Known issue where external sources may return less than page size.\r\n // Right now we're making it as fetched as we're siding with the majority use-case.\r\n if (entities.length <= 0 || entities.length < PAGE_SIZE) {\r\n curCell.Fetched = true;\r\n curCell.Fetching = false;\r\n this.onScanUpdate?.Trigger(cells);\r\n continue;\r\n }\r\n\r\n // Checking to make sure it's not just the same batch over and over again.\r\n if (entities.length > 0) {\r\n const first = entities[0]?.Bruce?.ID;\r\n const last = entities[entities.length - 1]?.Bruce?.ID;\r\n if (prevFirstId == first && prevLastId == last) {\r\n prevTicks += 1;\r\n if (prevTicks > 3) {\r\n break;\r\n }\r\n }\r\n else {\r\n prevFirstId = first;\r\n prevLastId = last;\r\n prevTicks = 0;\r\n }\r\n }\r\n curCell.FetchPageIndex++;\r\n\r\n // Request passed so let's assume it was server hiccup and refresh counts.\r\n retryAttempts = MAX_RETRY_ATTEMPTS;\r\n retryDelay = 0;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n\r\n // Request failed so let's add a delay and try again soon.\r\n retryDelay += RETRY_DELAY_INCREMENT;\r\n retryAttempts -= 1;\r\n }\r\n\r\n await delay(REQUEST_PAGE_DELAY);\r\n }\r\n\r\n if (postedLoading) {\r\n this.postStatus({ msg: EStatus.Loading, revoking: true });\r\n }\r\n if (postedScanning) {\r\n this.postStatus({ msg: EStatus.Scanning, revoking: true });\r\n }\r\n });\r\n }\r\n }\r\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\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\n\r\n\r\nexport namespace Uploader {\r\n export const MIN_LARGE_FILE_SIZE = 100000000; // 100MB.\r\n\r\n export interface IProgress {\r\n percent: number;\r\n uploaded: boolean;\r\n }\r\n\r\n export async function DoMultiPartUpload(params: {\r\n file: File,\r\n api?: BruceApi.Api,\r\n urlSuffix: string,\r\n req?: Api.IUploadReqParams,\r\n onProgress?: (progress: IProgress) => void\r\n }) {\r\n let { file, api, urlSuffix: url, req, onProgress } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n const FILE_PORTION_SIZE = 100000000; // 100MB.\r\n let fileSize = file.size;\r\n let fileOffset = 0;\r\n let filePartsCount = fileSize / FILE_PORTION_SIZE;\r\n let t = Math.trunc(filePartsCount);\r\n filePartsCount = filePartsCount > t ? t + 1 : t;\r\n let filePartIndex = 1;\r\n let uploadToken = ObjectUtils.UId();\r\n let data: any;\r\n while (fileOffset < fileSize) {\r\n let partSize = Math.min(FILE_PORTION_SIZE, fileSize - fileOffset);\r\n let retryCount: number = 5;\r\n let retryWait: number = 1000;\r\n while (retryCount > 0) {\r\n try {\r\n const blob = file.slice(fileOffset, fileOffset + partSize);\r\n const formData = new FormData();\r\n formData.append(\"originalFileName\", file.name);\r\n formData.append(\"token\", uploadToken);\r\n formData.append(\"count\", \"\" + filePartsCount);\r\n formData.append(\"part\", \"\" + filePartIndex);\r\n formData.append(\"file\", blob);\r\n const reqParams = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n reqParams.formData = formData;\r\n reqParams.onProgress = (progress: ProgressEvent) => {\r\n const sofar = fileOffset + progress.loaded;\r\n const percent = Math.round ((sofar / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n data = await api.UPLOAD(url, blob, reqParams)\r\n retryCount = 0;\r\n }\r\n catch (up) {\r\n retryCount -= 1;\r\n if (retryCount <= 0) {\r\n throw up;\r\n }\r\n await new Promise((res) => setTimeout(res, retryWait));\r\n retryWait = retryWait * 2;\r\n }\r\n }\r\n fileOffset += partSize;\r\n filePartIndex++;\r\n }\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return data;\r\n }\r\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\n // Our API throws an error when a key is not set which is a bit annoying.\n // Since we only use these keys for a few specific things we'll just request the list and avoid the error.\n // If this becomes useful for more things we'll make requesting a key that doesn't exist just return empty JSON.\n\n const prom = await GetList({\n api,\n req: reqParams\n });\n const key = prom.programKeys.find(k => k.ProgramId === programId);\n \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\n return {\n programKey: key\n };\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, ProjectViewBookmark} from \"../bruce-models\";\r\nimport { Entity } from \"../entity/entity\";\r\nimport { Tileset } from \"../tileset/tileset\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { ZoomControl } from \"./zoom-control\";\r\n\r\n/**\r\n * Describes a menu item found in project views.\r\n * Menu items are used to dictate what data to load in a scene.\r\n * A menu item may be a container for other items.\r\n */\r\nexport namespace MenuItem {\r\n export enum EType {\r\n None = \"NONE\",\r\n Entities = \"BruceEntity\",\r\n Entity = \"SingleEntity\",\r\n Osm = \"OSMBuildingsTileset\",\r\n CadTileset = \"ModelTileset\",\r\n ArbTileset = \"ArbitraryTileset\",\r\n IonTileset = \"Cesium3DTileset\",\r\n Kml = \"StaticKML\",\r\n EntityTileset = \"EntitiesTileset\",\r\n EntityRaster = \"RasterEntitiesTileset\",\r\n PointCloud = \"PointCloudTileset\",\r\n EntitiesLoaded = \"LoadedEntities\",\r\n EntitiesIds = \"EntitiesIds\",\r\n // Deprecated. Use Relationships instead.\r\n Relations = \"Relations\",\r\n Relationships = \"Relationships\",\r\n GooglePhotoTileset = \"GooglePhotoTileset\"\r\n }\r\n\r\n export interface ILegend {\r\n model3d: boolean;\r\n point: boolean;\r\n polygon: boolean;\r\n polylines: boolean;\r\n tileset3d: boolean;\r\n }\r\n\r\n export interface IAuthorSettings {\r\n // If true, the clicked entity will be read and used to update the authored entity.\r\n readClickedEntity?: boolean;\r\n // Optional relationship type to use when relating to the clicked entity.\r\n clickedRelationTypeId?: string;\r\n // If set, specified attributes will be copied between the clicked and authored entities.\r\n copyClickedAttrMapping?: {\r\n // String is a wrapped path, check PathUtils.\r\n fromPathStr: string;\r\n toPathStr: string;\r\n }[];\r\n }\r\n\r\n export interface IItem {\r\n id: string;\r\n Caption: string;\r\n Children?: IItem[];\r\n Type: EType;\r\n hideChildren?: boolean;\r\n legend?: ILegend;\r\n authoringEnabled?: boolean;\r\n authoring?: IAuthorSettings;\r\n LabelColor?: string;\r\n renderPriority?: number;\r\n // Default = false.\r\n cdnEnabled?: boolean;\r\n // Used to kill cache. Default = 0.\r\n // Tilesets have their own counter within their records.\r\n // This is used for non-tileset items.\r\n cdnCounter?: number;\r\n }\r\n\r\n export function CreateFromEntityId(entityId: string, typeId: string, styleId?: number): IItem {\r\n return <Item.IEntity>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.Entity,\r\n Caption: \"Generated Entity Menu Item\",\r\n BruceEntity: {\r\n \"EntityType.ID\": typeId,\r\n EntityId: entityId\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n MaxZoom: 1000000,\r\n MinZoom: 0,\r\n StyleID: styleId\r\n }\r\n ]\r\n };\r\n }\r\n\r\n export function CreateFromTypeId(typeId: string, styleId?: number): IItem {\r\n return <Item.IEntities>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.Entities,\r\n Caption: \"Generated Entity Type Menu Item\",\r\n BruceEntity: {\r\n \"EntityType.ID\": typeId\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: styleId\r\n }\r\n ]\r\n };\r\n }\r\n\r\n export function CreateFromTilesetId(tilesetId: string, type: Tileset.EType): IItem {\r\n if (type === Tileset.EType.Cad) {\r\n return <Item.ICadTileset>{\r\n\t id: ObjectUtils.UId(),\r\n\t Type: EType.CadTileset,\r\n Caption: \"Generated CAD Menu Item\",\r\n\t FlyTo: false,\r\n\t\t\t\ttileset: {\r\n\t\t\t\t\tTilesetID: tilesetId\r\n\t\t\t\t}\r\n };\r\n }\r\n else if (type == Tileset.EType.EntitiesSet) {\r\n return <Item.IEntitiesTileset>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.EntityTileset,\r\n Caption: \"Generated Entities Menu Item\",\r\n FlyTo: false,\r\n tileset: {\r\n TilesetID: tilesetId\r\n }\r\n };\r\n }\r\n else if (type == Tileset.EType.PointCloud) {\r\n return <Item.IPointcloud>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.PointCloud,\r\n Caption: \"Generated Point Cloud Menu Item\",\r\n FlyTo: false,\r\n tileset: {\r\n TilesetID: tilesetId\r\n }\r\n };\r\n }\r\n else if (type == Tileset.EType.EntitiesMap) {\r\n return <Item.IEntitiesRaster>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.EntityRaster,\r\n Caption: \"Generated Entities Menu Item\",\r\n tileset: {\r\n TilesetID: tilesetId\r\n }\r\n };\r\n }\r\n throw(\"Tileset type not supported.\");\r\n }\r\n\r\n export namespace Item {\r\n export interface ITileset {\r\n TilesetURL?: string;\r\n ClientAccountID?: string;\r\n TilesetID?: string;\r\n }\r\n\r\n /**\r\n * Settings related to how entity clustering should behave.\r\n */\r\n export interface IClustering {\r\n // Minimum distance to an entity for it to cluster.\r\n // bruce-cesium/point-clustering.ts will have 5000 as default.\r\n minDistance?: number;\r\n // Minimum total loaded for the menu item for clustering to kick in.\r\n // bruce-cesium/point-clustering.ts will have 0 as default.\r\n // It will always try to cluster when points are near each-other and camera is far away.\r\n minTotalCount?: number;\r\n // TODO: Zoom control-like settings for clustering.\r\n // Between x and y meters the points should cluster with z distance.\r\n // Eg: \"Between 5,000 and 15,000 meters the points should cluster within 500 meters.\"\r\n }\r\n\r\n export interface IEntities extends IItem {\r\n Type: EType.Entities;\r\n BruceEntity: {\r\n \"EntityType.ID\": string;\r\n Filter?: IDictionary<string>;\r\n // If true, menu item will display individual sub-items for tags.\r\n ExpandLayers?: boolean;\r\n // If ExpandLayers = true, this is the saved sub-items to render.\r\n // If this is null or empty, that means there is nothing to render for this menu item.\r\n SelectedExpandLayers?: number[];\r\n };\r\n CameraZoomSettings?: ZoomControl.IItem[];\r\n\r\n // If true, menu item will render point and icon entities as clustered points when close together.\r\n enableClustering?: boolean;\r\n clustering?: IClustering;\r\n\r\n // If BruceEntity.ExpandLayers = true,\r\n // this will dictate if camera should be used to scan for tags in view.\r\n filterLayersByCameraLocation?: boolean;\r\n showAllLayersExcludeBelow?: boolean;\r\n layers?: number[];\r\n extLayers?: {\r\n ID: number,\r\n checked: boolean\r\n }[];\r\n }\r\n\r\n export interface IEntity extends IItem {\r\n Type: EType.Entity;\r\n BruceEntity: {\r\n \"EntityType.ID\"?: string;\r\n EntityId: string;\r\n };\r\n CameraZoomSettings?: ZoomControl.IItem[];\r\n showAllLayers?: boolean;\r\n showAllLayersExcludeBelow?: boolean;\r\n }\r\n\r\n export interface IArbTileset extends IItem {\r\n Type: EType.ArbTileset | EType.IonTileset;\r\n FlyTo?: boolean;\r\n BruceEntity?: {\r\n \"EntityType.ID\"?: string;\r\n };\r\n tileset?: ITileset;\r\n StyleMapping?: any[];\r\n styleId?: number;\r\n ApplyStyles?: boolean;\r\n IonResource?: {\r\n AssetID: string | number;\r\n // If not supplied then the client account default is used.\r\n AccessToken?: string;\r\n }\r\n }\r\n export interface IIonTileset extends IArbTileset {}\r\n\r\n export interface ICadTileset extends IItem {\r\n Type: EType.CadTileset;\r\n tileset: ITileset;\r\n FlyTo?: boolean;\r\n StyleMapping?: any[];\r\n StyleBlending?: {\r\n // Hightlight = 0, replace = 1, mix = 2.\r\n blendMode: 0 | 1 | 2;\r\n // 1 = 100% new colour. 0 = original colour.\r\n blendPercent: number;\r\n };\r\n styleId?: number;\r\n BruceEntity?: {\r\n // Optional restriction.\r\n // When not null, only entities matching supplied ids will be visible.\r\n EntityIds?: string[];\r\n // Optional styling.\r\n // When entity ids are set, other entities can optionally be \"ghosts\".\r\n // This means they will be available but at low opacity.\r\n Ghosts?: boolean;\r\n }\r\n }\r\n\r\n export interface IPointcloud extends IItem {\r\n Type: EType.PointCloud;\r\n FlyTo?: boolean;\r\n tileset: ITileset;\r\n }\r\n\r\n export interface IEntitiesRaster extends IItem {\r\n Type: EType.EntityRaster;\r\n tileset: ITileset;\r\n }\r\n\r\n export interface IOsm extends IItem {\r\n Type: EType.Osm;\r\n BruceEntity?: {\r\n \"EntityType.ID\"?: string;\r\n SourceId: string;\r\n };\r\n ghostLoading?: boolean;\r\n }\r\n\r\n export interface IKml extends IItem {\r\n Type: EType.Kml;\r\n KML?: {\r\n ClientFile?: {\r\n ID: string;\r\n },\r\n // Arbitrarily hosted file to load instead of a client file.\r\n fileUrl?: string;\r\n }[]\r\n }\r\n\r\n export interface IEntitiesTileset extends IItem {\r\n Type: EType.EntityTileset;\r\n FlyTo: boolean;\r\n tileset: ITileset;\r\n // Point cloud settings as this tileset can include point clouds and 3d models.\r\n // The use-case is that this tileset is made from entities and what the user wants to show between bookmarks is different.\r\n // Bookmarks have \"menuItemAlternations\" to have different settings for menu items per bookmark.\r\n attenuation?: boolean;\r\n attenuationMax?: number;\r\n }\r\n\r\n export interface IEntitiesLoaded extends MenuItem.IItem {\r\n Type: EType.EntitiesLoaded;\r\n BruceEntity: {\r\n \"EntityType.ID\"?: string;\r\n Entities: Entity.IEntity[];\r\n };\r\n CameraZoomSettings?: ZoomControl.IItem[];\r\n }\r\n\r\n export interface IEntityIds extends MenuItem.IItem {\r\n Type: EType.EntitiesIds;\r\n BruceEntity: {\r\n EntityIds: string[];\r\n };\r\n CameraZoomSettings?: ZoomControl.IItem[];\r\n\r\n // If true, menu item will render point and icon entities as clustered points when close together.\r\n // Default = false.\r\n enableClustering?: boolean;\r\n clustering?: IClustering;\r\n }\r\n\r\n /**\r\n * Auto-generated menu item when entity-relationships are marked to be rendered.\r\n * @deprecated, use IRelationships instead.\r\n */\r\n export interface IEntityRelations extends MenuItem.IItem {\r\n Type: EType.Relations;\r\n BruceEntity?: {\r\n EntityIds?: string[];\r\n },\r\n }\r\n\r\n export interface IRenderedRelations {\r\n // Entities to drawn relationships for.\r\n // Downstream relationships will be drawn for these entities.\r\n entityIds: string[];\r\n // The relationship type to render for the ids.\r\n relationTypeId: string;\r\n }\r\n\r\n /**\r\n * Auto-generated menu item when entity-relationships are marked to be rendered.\r\n */\r\n export interface IRelationships extends MenuItem.IItem {\r\n Type: EType.Relationships;\r\n // Relationships to render.\r\n // This is an entityIds -> relationship type grouping.\r\n // The relationships will be drawn downstream only.\r\n relations?: IRenderedRelations[];\r\n }\r\n\r\n export interface IGooglePhotoTileset extends IItem {\r\n Type: EType.GooglePhotoTileset;\r\n // Css color string to apply to the tileset.\r\n // This follows Cesium logic for when color is pure white,\r\n // that means don't apply colour and only apply alpha.\r\n colorMask?: string;\r\n }\r\n }\r\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 // Array of entity ids for which to draw labels for.\r\n // If empty, no labels are drawn.\r\n labelledEntityIds?: string[];\r\n // Bookmark-wide relationships to render.\r\n // The lines will render regardless of entities being rendered.\r\n renderedRelations?: MenuItem.Item.IRenderedRelations[];\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 // 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 // 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 // @deprecated, use 'renderedRelations' instead.\r\n renderedEntityRelations?: string[];\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\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Calculator } from \"../calculator/calculator\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\n\r\n/**\r\n * Describes the \"Style\" concept within Bruce.\r\n * A legacy way of referring to styles is \"entity display settings\".\r\n *\r\n * A style is a collection of settings (which can be calculations to perform on entity data) that\r\n * describe how an entity should be displayed.\r\n */\r\nexport namespace Style {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.Style + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.Style;\r\n }\r\n\r\n export enum EType {\r\n Entity = \"ENTITY\",\r\n EntityRelationship = \"ENTITY_RELATIONSHIP\"\r\n }\r\n\r\n export enum EPointType {\r\n Point = \"POINT\",\r\n Icon = \"ICON\",\r\n Cylinder = \"CYLINDER\"\r\n }\r\n\r\n export interface IPointSettings {\r\n color: Calculator.IField[];\r\n size: Calculator.IField[];\r\n iconId: string;\r\n iconUrl: Calculator.IField[];\r\n iconScale: Calculator.IField[];\r\n altitudeOption?: any;\r\n Type: EPointType;\r\n // Indicates if depth-test should be disabled which forces the point to render above all other entities.\r\n // This is currently for icon points exclusively.\r\n renderOnTop?: boolean;\r\n // To review.\r\n CylinderFillColor?: Calculator.IField[];\r\n CylinderFillExtrusion?: Calculator.IField[];\r\n CylinderRadius?: Calculator.IField[];\r\n CylinderBorderEnabled?: boolean;\r\n CylinderBorderExtrusion?: Calculator.IField[];\r\n CylinderBorderWidth?: Calculator.IField[];\r\n CylinderBorderColor?: Calculator.IField[];\r\n // To remove.\r\n ClusterNearbyEntities?: boolean;\r\n MinimumEntitiesCountForClustering?: Calculator.IField[];\r\n }\r\n\r\n export interface IPolygonSettings {\r\n useExtrusion: boolean;\r\n extrusionPath: Calculator.IField[];\r\n fillColor: Calculator.IField[];\r\n lineColor: Calculator.IField[];\r\n lineWidth: Calculator.IField[];\r\n // Default is \"m\".\r\n // When units are in px the lines will draw as Cesium Polyline graphics, for meters corridors are used.\r\n // Meters are more stable and will reduce crashes. Pixels have better FPS.\r\n lineWidthUnits?: \"px\" | \"m\";\r\n altitudeOption?: any;\r\n zIndex?: Calculator.IField[];\r\n // If the polygon should be draped over the terrain or tilesets + terrain.\r\n // Default is just terrain.\r\n drapeOver?: \"TERRAIN\" | \"ALL\";\r\n }\r\n\r\n export interface IPolylineSettings {\r\n lineColor: Calculator.IField[];\r\n lineWidth: Calculator.IField[];\r\n // Default is \"px\" for backward compatibility.\r\n // When units are in px the lines will draw as Cesium Polyline graphics, for meters corridors are used.\r\n // Meters are more stable and will reduce crashes. Pixels have better FPS.\r\n lineWidthUnits?: \"px\" | \"m\";\r\n altitudeOption?: any;\r\n zIndex?: Calculator.IField[];\r\n // If the polyline should be draped over the terrain or tilesets + terrain.\r\n // Default is just terrain.\r\n drapeOver?: \"TERRAIN\" | \"ALL\";\r\n }\r\n\r\n export interface IModelSettings {\r\n customize: boolean;\r\n fillColor: Calculator.IField[];\r\n scale: Calculator.IField[];\r\n fillColorBlendMode?: any;\r\n fillColorBlendAmount?: number;\r\n altitudeOption?: any;\r\n }\r\n\r\n export interface IEntitySettings {\r\n pointStyle?: IPointSettings;\r\n polygonStyle?: IPolygonSettings;\r\n polylineStyle?: IPolylineSettings;\r\n modelStyle?: IModelSettings;\r\n }\r\n\r\n export interface IRelationSettings {\r\n lineColor?: Calculator.IField[];\r\n lineWidth?: Calculator.IField[];\r\n heightDistanceRatio?: Calculator.IField[];\r\n duration?: Calculator.IField[];\r\n }\r\n\r\n export type Settings = IEntitySettings | IRelationSettings;\r\n\r\n export interface IStyle {\r\n ID: number;\r\n Name: string;\r\n Settings: Settings;\r\n Type: EType;\r\n }\r\n\r\n export async function GetList(params: {\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n styles: IStyle[]\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 const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const res: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.entityDisplaySettings\", Api.PrepReqParams(reqParams));\r\n res({\r\n styles: data.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(),\r\n value: res,\r\n req: reqParams\r\n });\r\n return res;\r\n }\r\n\r\n export async function Get(params: {\r\n api?: BruceApi.Api,\r\n styleId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n style: IStyle\r\n }> {\r\n let { api, styleId: id, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!id) {\r\n throw(\"Style ID is required.\");\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 prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n style: 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: 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 Update(params: {\r\n api?: BruceApi.Api,\r\n style: IStyle,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n style: IStyle\r\n }> {\r\n let { api, style: data, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!data?.Name) {\r\n throw(\"Style name is required.\");\r\n }\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n const res = await api.POST(`ui.entityDisplaySetting/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n style: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api?: BruceApi.Api,\r\n styleId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, styleId: id, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n await api.DELETE(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\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 // If none is specified it'll return an anonymous session.\n sessionId?: string,\n // Optional param to specify the account ID to get permissions for.\n // If not specified, the session's original logged in account will be used.\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n session: ISession\n }> {\n let { api, sessionId, req: reqParams, accountId } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\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}${accountId ? `?account=${accountId}`: \"\"}`, 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\";\r\n\r\nexport * from \"./custom-form/custom-form\";\r\nexport * from \"./custom-form/custom-form-content\";\r\n\r\nexport * from \"./api/abstract-api\";\r\nexport * from \"./api/api\";\r\nexport * from \"./api/bruce-api\";\r\nexport * from \"./api/cam-api\";\r\nexport * from \"./api/idm-api\";\r\nexport * from \"./api/global-api\";\r\nexport * from \"./api/guardian-api\";\r\nexport * from \"./api/api-getters\";\r\n\r\nexport * from \"./calculator/calculator\";\r\n\r\nexport * from \"./common/bounds\";\r\nexport * from \"./common/bruce-event\";\r\nexport * from \"./common/cache\";\r\nexport * from \"./common/camera\";\r\nexport * from \"./common/cartes\";\r\nexport * from \"./common/carto\";\r\nexport * from \"./common/color\";\r\nexport * from \"./common/delay-queue\";\r\nexport * from \"./common/dictionary\";\r\nexport * from \"./common/geometry\";\r\nexport * from \"./common/transform\";\r\nexport * from \"./common/utc\";\r\nexport * from \"./common/bruce-variable\";\r\nexport * from \"./common/lru-cache\";\r\nexport * from \"./common/section\";\r\n\r\nexport * from \"./entity/entity-attachment-type\";\r\nexport * from \"./entity/entity-attachment\";\r\nexport * from \"./entity/entity-comment\";\r\nexport * from \"./entity/entity-link\";\r\nexport * from \"./entity/entity-lod\";\r\nexport * from \"./entity/entity-lod-category\";\r\nexport * from \"./entity/entity-relation-type\";\r\nexport * from \"./entity/entity-relation\";\r\nexport * from \"./entity/entity-source\";\r\nexport * from \"./entity/entity-tag\";\r\nexport * from \"./entity/entity-type\";\r\nexport * from \"./entity/entity\";\r\nexport * from \"./entity/getters/view-monitor\";\r\nexport * from \"./entity/getters/entity-globe\";\r\nexport * from \"./entity/getters/entity-filter-getter\";\r\nexport * from \"./entity/getters/batched-data-getter\";\r\nexport * from \"./entity/entity-coords\";\r\nexport * from \"./entity/entity-type-visual-settings\";\r\nexport * from \"./entity/entity-attribute\";\r\n\r\nexport * from \"./client-file/client-file\";\r\n\r\nexport * from \"./program-key/program-key\";\r\n\r\nexport * from \"./project/zoom-control\";\r\nexport * from \"./project/menu-item\";\r\nexport * from \"./project/project-view-bookmark\";\r\nexport * from \"./project/project-view\";\r\nexport * from \"./project/project-view-legacy-tile\";\r\nexport * from \"./project/project-view-tile\";\r\nexport * from \"./project/project-view-selection\";\r\n\r\nexport * from \"./server/pending-action\";\r\nexport * from \"./server/message-broker\";\r\nexport * from \"./server/hosting-location\";\r\n\r\nexport * from \"./style/style\";\r\n\r\nexport * from \"./tileset/tileset\";\r\n\r\nexport * from \"./user/permission\";\r\nexport * from \"./user/session\";\r\nexport * from \"./user/user-group\";\r\nexport * from \"./user/user\";\r\n\r\nexport * from \"./account/account\";\r\nexport * from \"./account/account-settings\";\r\nexport * from \"./account/account-invite\";\r\n\r\nexport * from \"./util/encrypt-utils\";\r\nexport * from \"./util/math-utils\";\r\nexport * from \"./util/object-utils\";\r\nexport * from \"./util/path-utils\";\r\nexport * from \"./util/url-utils\";\r\n\r\nexport * from \"./data-lab/data-lab\";\r\n\r\nexport * from \"./import/import-cad\";\r\nexport * from \"./import/import-csv\";\r\nexport * from \"./import/import-json\";\r\nexport * from \"./import/import-kml\";\r\nexport * from \"./import/imported-file\";\r\n\r\nexport * from \"./markup/markup\";\r\nexport * from \"./internal/uploader\";\r\nexport * from \"./plugin/plugin\";\r\nexport * from \"./environment\";\r\nexport * from \"./data-source/data-source\";\r\n\r\nexport const VERSION = \"3.1.3\";"],"names":["Api","A","MAX_AREA_IN_DEGREES"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bruce-models.es5.js","sources":["../src/api/api.ts","../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/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/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}","type Key = string | number;\ntype Persistence = \"memory\" | \"storage\";\n\n// 1 minute.\nconst DEFAULT_DURATION = 60 * 1000;\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 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 }\n\n /**\n * Sets item to cache.\n * @param id\n * @param data\n * @param duration\n */\n public Set(params: {\n id: string,\n data: any,\n // Persistence is currently set to memory until storage is reworked.\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 }): void {\n if (this.Disabled) {\n return;\n }\n let { id, data, duration } = params;\n if (!duration || duration < 0) {\n duration = DEFAULT_DURATION;\n }\n id = String(id);\n\n const expires = Date.now() + duration;\n const record: IRecord = {\n id,\n data,\n expires\n };\n this.memory.set(id, record);\n }\n\n /**\n * Returns the item with the given id.\n * @param id\n * @returns\n */\n public Get(id: Key): {\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 return {\n data: null,\n found: false\n };\n }\n if (record.expires < Date.now()) {\n this.memory.delete(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 Clear(): void {\n this.memory.clear();\n }\n\n /**\n * Removes the item with the given id.\n * @param id\n */\n public Remove(id: Key): void {\n id = String(id);\n this.memory.delete(id);\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 RemoveBy(callback: (key: Key) => boolean): void {\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 }\n\n /**\n * Removes all items that start with the given text.\n * @param text\n */\n public RemoveByStartsWith(text: Key): void {\n 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 RemoveByContains(text: Key): void {\n 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 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 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 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\";\r\nimport { AccountSettings } from \"../account/account-settings\";\r\nimport { Api } from \"../api/api\";\r\nimport { GuardianApi } from \"../api/guardian-api\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\n\r\n/**\r\n * A hosting location is a record for a possible bruce-api server configuration.\r\n * A hosting location will have one or many database servers as well, this is an additional setting.\r\n */\r\nexport namespace HostingLocation {\r\n export interface ILocation {\r\n // Internal ID.\r\n ID: number;\r\n // External ID.\r\n Key: string;\r\n // Indicates if creation of a new bruce account is allowed in this region.\r\n // This should dictate if the record is visible in UI dropdowns as well for non-super-admins.\r\n IsEnabledForNewAccounts: boolean;\r\n DisplayName?: string;\r\n Description?: string;\r\n // Eg: \"us-west-1\".\r\n AWSRegion?: string;\r\n // Eg: \"Singapore\".\r\n Country?: string;\r\n // Eg: \"Vultr\".\r\n Hoster?: string;\r\n // Eg: \"San Francisco\".\r\n City?: string;\r\n // URL template to the corresponding API instance.\r\n // Eg: \"https://<ACCOUNTID>.api.nextspace-us.host/\".\r\n BruceAPIURL?: string;\r\n // Comma separated list of Api.EEnv.\r\n Environment?: string;\r\n // Arbitrary settings for the particular location.\r\n // For example this may include CDN template URLs.\r\n Settings?: any;\r\n }\r\n\r\n /**\r\n * @Warning: This will not return the Settings property.\r\n * @param params\r\n * @returns\r\n */\r\n export async function GetList(params: {\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n locations: ILocation[]\r\n }> {\r\n let { api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const res = await api.GET(\"hostinglocations\", Api.PrepReqParams(req));\r\n return {\r\n locations: res.Items\r\n };\r\n }\r\n\r\n export async function GetById(params: {\r\n id: number,\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n let { id, api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n if (!id) {\r\n throw(\"Invalid id\");\r\n }\r\n const res = await api.GET(`hostinglocation/id/${id}`, Api.PrepReqParams(req));\r\n return {\r\n location: res\r\n };\r\n }\r\n\r\n export async function GetByKey(params: {\r\n key: string,\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n let { key, api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n if (!key) {\r\n throw(\"Invalid key\");\r\n }\r\n const res = await api.GET(`hostinglocation/key/${key}`, Api.PrepReqParams(req));\r\n return {\r\n location: res\r\n };\r\n }\r\n\r\n /**\r\n * Returns hostingLocationKey from given db url.\r\n * Some older accounts don't have this set, so we need to guess it.\r\n * @param params\r\n * @returns\r\n */\r\n export function GuessKey(params: {\r\n // Database connection string.\r\n DBServer?: string\r\n }) {\r\n const { DBServer: databaseUrl } = params;\r\n if (databaseUrl.includes(\"hyperfarm-prod-instance-1\")) {\r\n return \"HYPERFARM\";\r\n }\r\n if (databaseUrl.includes(\"prod-syd1.nextspace.host\")) {\r\n return \"AU-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-nyc1.nextspace.host\")) {\r\n return \"US-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-ams1.nextspace.host\")) {\r\n return \"EU-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-sing1.nextspace.host\")) {\r\n return \"SE-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"dev-first\")) {\r\n return \"DEV-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\".ap-southeast-1.\")) {\r\n return \"SE\";\r\n }\r\n else if (databaseUrl.includes(\".us-west-1.\")) {\r\n return \"US\";\r\n }\r\n else if (databaseUrl.includes(\".eu-west-3.\")) {\r\n return \"EU\";\r\n }\r\n else if (databaseUrl.includes(\"bruce-prod-au\")) {\r\n return \"AU\";\r\n }\r\n else if (databaseUrl.includes(\"bruce-dev\")) {\r\n return \"DEV\";\r\n }\r\n return null;\r\n }\r\n\r\n export async function GetKeyByAccountId(params: {\r\n // Either accountId or apiSettings must be provided.\r\n accountId?: string,\r\n apiSettings?: AccountSettings.IBruceApi,\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n key: string,\r\n // Indicates if the key was inferred by legacy data.\r\n isLegacy?: boolean\r\n }> {\r\n let { accountId, apiSettings, api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n if (!accountId && !apiSettings) {\r\n throw(\"Invalid accountId or apiSettings\");\r\n }\r\n const settings = apiSettings ? apiSettings : (await Account.GetAppSettings({\r\n api,\r\n accountId,\r\n appId: Account.EAppId.BruceApi\r\n })).settings as AccountSettings.IBruceApi;\r\n let hostingKey = settings[\"HostingLocation.Key\"];\r\n let isLegacy = false;\r\n if (!hostingKey) {\r\n hostingKey = settings.DBLocation;\r\n isLegacy = true;\r\n }\r\n if (!hostingKey) {\r\n hostingKey = GuessKey({\r\n DBServer: settings.DBServer\r\n });\r\n isLegacy = true;\r\n }\r\n return {\r\n key: hostingKey,\r\n isLegacy\r\n };\r\n }\r\n\r\n export async function GetByAccountId(params: {\r\n // Either accountId or apiSettings must be provided.\r\n accountId?: string,\r\n apiSettings?: AccountSettings.IBruceApi,\r\n api?: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n let { accountId, apiSettings, api, req } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetGuardianApi();\r\n }\r\n\r\n const data = await GetKeyByAccountId({\r\n accountId,\r\n apiSettings,\r\n api,\r\n req\r\n });\r\n if (!data?.key) {\r\n return null;\r\n }\r\n const key = await GetByKey({\r\n key: data.key,\r\n api,\r\n req\r\n });\r\n return key;\r\n }\r\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 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 { 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 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 { 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.IContent | 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}","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\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Bounds } from \"../common/bounds\";\r\nimport { Geometry } from \"../common/geometry\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { Transform } from \"../common/transform\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { EntityType } from \"./entity-type\";\r\nimport { PathUtils } from \"../util/path-utils\";\r\nimport { IDictionary } from \"../common/dictionary\";\r\nimport { Carto } from \"../bruce-models\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\n\r\ntype _any = any;\r\n\r\n/**\r\n * Describes the \"Entity\" concept within Bruce.\r\n * An entity is a JSON blob containing both internal data and user-defined data.\r\n * Entity records have many thinks linked to them through their UIDs such as links, files and relationships.\r\n */\r\nexport namespace Entity {\r\n export function GetCacheKey(params: {\r\n entityId: string,\r\n entityTypeId?: string,\r\n expandLocation?: boolean,\r\n expandRelations?: boolean\r\n }): string {\r\n let { entityId, entityTypeId, expandLocation, expandRelations } = params;\r\n if (!entityTypeId) {\r\n entityTypeId = \"\";\r\n }\r\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}${String(entityTypeId)}${String(Boolean(expandLocation))}${String(Boolean(expandRelations))}`;\r\n }\r\n\r\n export function GetContainsKey(entityId: string) {\r\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}`;\r\n }\r\n\r\n export interface IEntity extends _any {\r\n Bruce: {\r\n \"CreatedBy.User.ID\"?: string;\r\n CreatedTime?: UTC.IUTC;\r\n \"EntityType.ID\": string;\r\n ID?: string;\r\n \"Layer.ID\"?: number[];\r\n // Available if expandRelations=true.\r\n // This is an array of all immediate downstream relationships for this entity.\r\n relations?: IRelationData[];\r\n };\r\n location?: Carto.ICarto;\r\n boundaries?: Bounds.IBounds;\r\n transform?: Transform.ITransform;\r\n position?: number[][];\r\n geometry?: Geometry.IGeometry;\r\n // Available if expandLocation is true.\r\n // Related tileset ids if any.\r\n tilesetID?: string[];\r\n // Available if expandLocation is true.\r\n // Relative offset to parent node.\r\n worldPosition?: number[][];\r\n }\r\n\r\n export interface IRelationData {\r\n \"Other.Entity.ID\": string;\r\n \"RelationType.ID\": string;\r\n }\r\n\r\n export async function Get(params: {\r\n api?: BruceApi.Api,\r\n entityId: string,\r\n // (Optional) Entity type ID to load specific schema.\r\n entityTypeId?: string;\r\n expandLocation?: boolean,\r\n expandRelations?: boolean\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entity: IEntity\r\n }> {\r\n let { api, entityId, req: reqParams, expandLocation, expandRelations, entityTypeId } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const key = GetCacheKey({\r\n entityId,\r\n entityTypeId,\r\n expandLocation,\r\n expandRelations\r\n });\r\n const cache = 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 urlParams = new URLSearchParams();\r\n if (expandLocation) {\r\n urlParams.append(\"$expand\", \"location\");\r\n }\r\n if (expandRelations) {\r\n urlParams.append(\"$expand\", \"relation\");\r\n }\r\n if (entityTypeId) {\r\n urlParams.append(\"BruceEntityType\", entityTypeId);\r\n }\r\n const data = await api.GET(\r\n `entity/${entityId}?${urlParams.toString()}`,\r\n Api.PrepReqParams(reqParams)\r\n );\r\n res({\r\n entity: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n 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 GetListByIds(params: {\r\n api?: BruceApi.Api,\r\n entityIds: string[],\r\n expandRelations?: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entities: IEntity[]\r\n }> {\r\n let { api, entityIds, req: reqParams, expandRelations } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!entityIds.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n const reqs: Promise<{ entity: IEntity }>[] = [];\r\n const reqIds: string[] = [];\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n const key = GetCacheKey({ entityId, expandRelations });\r\n const cache = api.GetCacheItem(key, reqParams);\r\n if (cache?.found) {\r\n reqs.push(cache.data);\r\n }\r\n else {\r\n reqIds.push(entityId);\r\n }\r\n }\r\n const reqData = {\r\n Filter: {\r\n ID: {\r\n in: reqIds\r\n }\r\n },\r\n PageSize: reqIds.length\r\n };\r\n if (reqIds.length > 0) {\r\n const urlParams = new URLSearchParams();\r\n if (expandRelations) {\r\n urlParams.append(\"$expand\", \"relation\");\r\n }\r\n const req: Promise<Api.IList<Entity.IEntity>> = api.POST(\"entities?\" + urlParams.toString(), reqData, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < reqIds.length; i++) {\r\n const entityId = reqIds[i];\r\n const key = GetCacheKey({ entityId });\r\n const prom: Promise<{ entity: IEntity }> = new Promise(async (res) => {\r\n try {\r\n const data = await req;\r\n const item = data.Items.find(x => x.Bruce.ID == entityId);\r\n res({\r\n entity: item\r\n });\r\n }\r\n catch (e) {\r\n // No showing error as we don't want to see it 2000 times.\r\n }\r\n res(<any>null);\r\n });\r\n api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n reqs.push(prom);\r\n }\r\n }\r\n return {\r\n entities: (await Promise.all(reqs)).map(x => x?.entity).filter(x => !!x)\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api?: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, entityId, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.RemoveByContains(GetContainsKey(entityId));\r\n }\r\n\r\n export async function DeleteList(params: {\r\n api?: BruceApi.Api,\r\n entityIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, entityIds, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!entityIds?.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n await api.POST(\"deleteEntities\", {\r\n Items: entityIds\r\n }, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n api.Cache.RemoveByContains(GetContainsKey(entityId));\r\n }\r\n }\r\n\r\n export async function Update(params: {\r\n api?: BruceApi.Api,\r\n entity: IEntity,\r\n override: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entity: IEntity\r\n }> {\r\n let { api, entity: data, override, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n if (!data?.Bruce?.[\"EntityType.ID\"]) {\r\n throw(\"Entity Type ID is required.\");\r\n }\r\n if (!data?.Bruce?.ID) {\r\n data.Bruce = {\r\n ...data.Bruce,\r\n ID: ObjectUtils.UId()\r\n };\r\n }\r\n const reqUrl = `entity/${data.Bruce.ID}/?dataoverride=${override}&BruceEntityType=${data.Bruce[\"EntityType.ID\"]}`;\r\n const res = await api.POST(reqUrl, data, Api.PrepReqParams(reqParams));\r\n api.Cache.RemoveByContains(GetContainsKey(<string>data.Bruce.ID));\r\n return {\r\n entity: res\r\n };\r\n }\r\n\r\n export function RemoveTag(params: {\r\n entity: IEntity,\r\n tagId: number\r\n }): void {\r\n const { entity: data, tagId } = params;\r\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\r\n const index = tags.indexOf(tagId);\r\n if (index >= 0) {\r\n tags.splice(index, 1);\r\n data.Bruce[\"Layer.ID\"] = tags;\r\n }\r\n }\r\n\r\n export function AddTag(params: {\r\n entity: IEntity,\r\n tagId: number\r\n }): void {\r\n const { entity: data, tagId } = params;\r\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\r\n if (!tags.includes(tagId)) {\r\n tags.push(tagId);\r\n data.Bruce[\"Layer.ID\"] = tags;\r\n }\r\n }\r\n\r\n export function SetValue(params: {\r\n entity: IEntity,\r\n path: string[],\r\n value: any\r\n }): void {\r\n const { entity: data, path, value } = params;\r\n let curData = data;\r\n for (let i = 0; i < path.length; i++) {\r\n const step = path[i];\r\n if (!curData[step] || typeof curData[step] != \"object\") {\r\n curData[step] = {};\r\n }\r\n if (i >= path.length - 1) {\r\n curData[step] = value;\r\n break;\r\n }\r\n curData = curData[step];\r\n }\r\n }\r\n\r\n export function GetValue(params: {\r\n entity: IEntity,\r\n path: string[]\r\n }): any {\r\n const { entity: data, path } = params;\r\n // Backwards compatibility.\r\n if (path.length == 1 && path[0] == \"ID\") {\r\n return data.Bruce?.ID;\r\n }\r\n let curData = data;\r\n for (let i = 0; i < path.length; i++) {\r\n const step = path[i];\r\n if (!curData[step]) {\r\n return null;\r\n }\r\n if (i >= path.length - 1) {\r\n return curData[step];\r\n }\r\n curData = curData[step];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Calculates an entity's name based on attribute priority set in the type.\r\n * @param params\r\n * If true, will return the entity ID if no name can be calculated.\r\n * Otherwise it returns null.\r\n * @returns\r\n */\r\n export function CalculateName(params: {\r\n entity: IEntity,\r\n type: EntityType.IEntityType,\r\n defaultToId?: boolean\r\n }): string {\r\n const { entity, type, defaultToId = true } = params;\r\n const attrStr = type.DisplayNameAttributePath;\r\n if (attrStr) {\r\n const attrPaths = attrStr.split(\",\");\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const pathStr = attrPaths[i];\r\n const path = PathUtils.Parse(pathStr);\r\n const name = Entity.GetValue({\r\n entity: entity,\r\n path\r\n });\r\n if (name && typeof name != \"object\") {\r\n return name;\r\n }\r\n }\r\n }\r\n return defaultToId ? entity.Bruce.ID : null;\r\n }\r\n\r\n export interface IFilter {\r\n orderBy?: any;\r\n entityTypeId?: string;\r\n layerIds?: number[];\r\n // Default is \"equals\" for backwards compatibility.\r\n layerIdsOperator?: \"equals\" | \"in\";\r\n bounds?: Bounds.IReqBounds;\r\n pageSize?: number;\r\n pageIndex?: number;\r\n lodCategoryId?: string;\r\n sortOrder?: Api.ESortOrder;\r\n entityTypeConditions?: IDictionary<any>;\r\n }\r\n\r\n export async function GetList(params: {\r\n api?: BruceApi.Api,\r\n filter: IFilter,\r\n expandRelations?: boolean,\r\n // Default = false. If false then only analysis data is returned instead of the entities.\r\n // TODO: Requires a provided entityTypeId. This is out of date in API.\r\n analysis?: boolean,\r\n // Default = false.\r\n viaCdn?: boolean;\r\n // (Optional) Cache killing token to append to the request url.\r\n viaCdnCacheToken?: number | string;\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n // Returned if analysis=false.\r\n entities?: IEntity[];\r\n // Returned if analysis=true.\r\n totalCount?: number;\r\n }> {\r\n let { api, filter, req: reqParams, viaCdn, viaCdnCacheToken, analysis, expandRelations } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n let requestFilter: any = {};\r\n if (filter.entityTypeConditions) {\r\n requestFilter = {\r\n ...filter.entityTypeConditions\r\n };\r\n }\r\n if (filter.layerIds != null && filter.layerIds.length > 0) {\r\n const operator = filter.layerIdsOperator ?? \"equals\";\r\n requestFilter[\"Bruce.Layer.ID\"] = {\r\n [operator]: filter.layerIds\r\n };\r\n }\r\n if (filter.bounds) {\r\n requestFilter[\"geometry\"] = {\r\n \"intersects\": [\r\n filter.bounds.south,\r\n filter.bounds.north,\r\n filter.bounds.west,\r\n filter.bounds.east\r\n ]\r\n };\r\n }\r\n\r\n const body = {\r\n SortOrder: filter.sortOrder == Api.ESortOrder.Asc ? \"ASC\" : \"DESC\",\r\n OrderBy: filter.orderBy,\r\n Filter: requestFilter,\r\n LODType: filter.lodCategoryId,\r\n BruceEntityType: filter.entityTypeId,\r\n PageIndex: filter.pageIndex,\r\n PageSize: filter.pageSize\r\n };\r\n\r\n let totalCount: number;\r\n let entities = [];\r\n if (analysis || expandRelations || (viaCdn && api.EntityCdnUrl)) {\r\n let url: URL;\r\n if (analysis) {\r\n url = new URL(api.GetBaseUrl() + \"entities/summary\");\r\n }\r\n else if (viaCdn && api.EntityCdnUrl) {\r\n url = new URL(api.EntityCdnUrl);\r\n }\r\n else {\r\n url = new URL(api.GetBaseUrl() + \"entities\");\r\n }\r\n\r\n const urlParams = new URLSearchParams(url.search);\r\n urlParams.set(\"cacheToken\", String(viaCdnCacheToken ? viaCdnCacheToken : 0));\r\n if (body.SortOrder) {\r\n urlParams.set(\"SortOrder\", body.SortOrder);\r\n }\r\n if (body.OrderBy) {\r\n urlParams.set(\"OrderBy\", body.OrderBy);\r\n }\r\n if (body.Filter) {\r\n urlParams.set(\"Filter\", JSON.stringify(body.Filter));\r\n }\r\n if (body.LODType) {\r\n urlParams.set(\"LODType\", body.LODType);\r\n }\r\n if (body.BruceEntityType) {\r\n urlParams.set(\"BruceEntityType\", body.BruceEntityType);\r\n }\r\n if (body.PageIndex) {\r\n urlParams.set(\"PageIndex\", String(body.PageIndex));\r\n }\r\n if (body.PageSize) {\r\n urlParams.set(\"PageSize\", String(body.PageSize));\r\n }\r\n if (expandRelations) {\r\n urlParams.append(\"$expand\", \"relation\");\r\n }\r\n const urlStr = url.toString() + \"?\" + urlParams.toString();\r\n const data = await api.get(urlStr, Api.PrepReqParams(reqParams));\r\n if (!analysis) {\r\n entities = data.Items;\r\n }\r\n totalCount = data.TotalCount;\r\n }\r\n else {\r\n const url = new URL(api.GetBaseUrl() + (analysis ? \"entities/summary\" : \"entities\"));\r\n const urlParams = new URLSearchParams(url.search);\r\n if (expandRelations) {\r\n urlParams.append(\"$expand\", \"relation\");\r\n }\r\n const urlStr = url.toString() + \"?\" + urlParams.toString();\r\n\r\n const data = await api.post(urlStr, body, Api.PrepReqParams(reqParams));\r\n if (!analysis) {\r\n entities = data.Items;\r\n // Only caching when non-CDN.\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = entity.Bruce.ID;\r\n api.SetCacheItem({\r\n key: GetCacheKey({\r\n entityId: id,\r\n expandRelations\r\n }),\r\n value: {\r\n entity: entity\r\n },\r\n req: reqParams\r\n });\r\n }\r\n }\r\n totalCount = data.TotalCount;\r\n }\r\n return {\r\n entities,\r\n totalCount\r\n };\r\n }\r\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 points: IGradientPoint[];\r\n // Deprecated.\r\n // It will be calculated from the provided points.\r\n min?: number;\r\n max?: number;\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 (!fields?.length) {\r\n return null;\r\n }\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 (!fields?.length) {\r\n return null;\r\n }\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 (!fields?.length) {\r\n return null;\r\n }\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 (!fields?.length) {\r\n return null;\r\n }\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\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 {\r\n const tmp = GetGradientValue(<IGradientValue>field.value, entity);\r\n // This avoids null turning into \"null\".\r\n if (tmp) {\r\n value = String(tmp);\r\n }\r\n }\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n {\r\n const tmp = GetInputValue(<string>field.value, entity);\r\n // This avoids null turning into \"null\".\r\n if (tmp) {\r\n value = String(tmp);\r\n }\r\n }\r\n break;\r\n case EValueType.Mapping:\r\n {\r\n const tmp = GetMappingValue(<IMappingValue>field.value, entity);\r\n // This avoids null turning into \"null\".\r\n if (tmp) {\r\n value = String(tmp);\r\n }\r\n }\r\n break;\r\n case EValueType.RandomColor:\r\n // Would be nice to randomize based on an attribute or entity ID instead of pure random.\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 min = +value.points[0].position;\r\n const max = +value.points[value.points.length - 1].position;\r\n\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 if (typeof eValue == \"string\") {\r\n eValue = Number(eValue);\r\n }\r\n\r\n if ((!eValue && eValue != 0) || isNaN(eValue)) {\r\n continue;\r\n }\r\n\r\n if (eValue >= max) {\r\n return Color.ColorFromStr(value.points[value.points.length - 1].color);\r\n }\r\n else if (eValue <= min) {\r\n return Color.ColorFromStr(value.points[0].color);\r\n }\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[0].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\";\r\n\r\n/**\r\n * Describes vector geometry that Bruce uses.\r\n */\r\nexport namespace Geometry {\r\n export interface IGeometry {\r\n // Polygon array is an array of rings.\r\n // There should be 1 outer ring and 0 or more inner rings.\r\n Polygon?: IPolygonRing[];\r\n MultiGeometry?: IGeometry[];\r\n Point?: string;\r\n LineString?: string;\r\n MultiSurface?: string;\r\n }\r\n\r\n export interface IPolygonRing {\r\n LinearRing: string;\r\n Facing: EPolygonRingType;\r\n Height?: number;\r\n }\r\n\r\n export enum EPolygonRingType {\r\n Boundaries = \"out\",\r\n Hole = \"in\"\r\n }\r\n\r\n /**\r\n * Turns an array of points into string vector geometry that Bruce can use.\r\n * This is used for saving polyline and polygon data.\r\n * @param points \r\n * @returns \r\n */\r\n export function LineStrFromPoints(points: Carto.ICarto[]): string {\r\n if (!points.length) {\r\n throw(\"points is empty.\");\r\n }\r\n let carto: Carto.ICarto = points[0];\r\n let lineString = `${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\r\n for (let i = 1; i < points.length; i++) {\r\n carto = points[i];\r\n lineString += ` ${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\r\n }\r\n return lineString;\r\n }\r\n\r\n /**\r\n * Removes same points that occur in a row.\r\n * This will not modify the original array.\r\n * @param positions \r\n * @returns \r\n */\r\n export function RemoveRepeatPoints(positions: Carto.ICarto[]): Carto.ICarto[] {\r\n const filteredList = [];\r\n for (let i = 0; i < positions.length; i++) {\r\n const pos = positions[i];\r\n const lastPos = filteredList.length > 0 ? filteredList[filteredList.length - 1] : null;\r\n if (!lastPos || (pos.latitude != lastPos.latitude || pos.longitude != lastPos.longitude || pos.altitude != lastPos.altitude)) {\r\n filteredList.push(pos); \r\n }\r\n }\r\n return filteredList;\r\n }\r\n\r\n export function ParsePoints(pointsStr: string): Carto.ICarto[] {\r\n pointsStr = pointsStr.replace(/[^\\d.,-\\s]/g, \"\");\r\n\r\n let splitterCoordinates = \" \";\r\n let splitterAxis = \",\";\r\n const commaIndex = pointsStr.indexOf(\",\");\r\n const spaceIndex = pointsStr.indexOf(\" \");\r\n if ((spaceIndex > -1 && commaIndex > spaceIndex) || commaIndex <= -1) {\r\n splitterCoordinates = \",\";\r\n splitterAxis = \" \";\r\n }\r\n\r\n let points = pointsStr.trim().split(splitterCoordinates);\r\n points = points.filter(a => a != \"\");\r\n\r\n const result: Carto.ICarto[] = [];\r\n for (let i = 0; i < points.length; i++) {\r\n const pointData = points[i];\r\n const coords = pointData.trim().split(splitterAxis);\r\n if (coords.length == 2 || coords.length == 3) {\r\n const longitude = Number(coords[0]);\r\n const latitude = Number(coords[1]);\r\n const altitude = Number(coords.length >= 3 ? coords[2] : 0);\r\n if (longitude != null && latitude != null) {\r\n result.push({\r\n altitude: altitude,\r\n latitude: latitude,\r\n longitude: longitude\r\n });\r\n }\r\n else {\r\n console.warn(\"Invalid point data detected.\", pointData);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Parses both string and object Bruce geometry.\r\n * String geometry is legacy Bruce data.\r\n * @param geometry \r\n * @returns \r\n */\r\n export function ParseGeometry(geometry: any): IGeometry {\r\n if (typeof geometry == \"string\") {\r\n let positions: Carto.ICarto[] = [];\r\n const geometryParsed: string[] = (geometry || \"\").split(\";\");\r\n for (let i = 0; i < geometryParsed.length; i++) {\r\n const data = geometryParsed[i];\r\n const points = ParsePoints(data);\r\n if (points && points.length > 0) {\r\n positions = positions.concat(points);\r\n }\r\n }\r\n positions = RemoveRepeatPoints(positions);\r\n const newGeometry: IGeometry = {};\r\n if (positions.length > 0) {\r\n const topPoint = positions[0];\r\n newGeometry.Point = `${topPoint.latitude},${topPoint.longitude}` + (topPoint.altitude != null ? `,${topPoint.altitude}` : \"\");\r\n if (positions.length > 1) {\r\n newGeometry.Polygon = [{ Facing: EPolygonRingType.Boundaries, LinearRing: LineStrFromPoints(positions) }];\r\n }\r\n if (positions.length > 2) {\r\n newGeometry.LineString = LineStrFromPoints(positions);\r\n }\r\n }\r\n return newGeometry;\r\n }\r\n return geometry;\r\n }\r\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}","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\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\n\r\n\r\nexport namespace Uploader {\r\n export const MIN_LARGE_FILE_SIZE = 100000000; // 100MB.\r\n\r\n export interface IProgress {\r\n percent: number;\r\n uploaded: boolean;\r\n }\r\n\r\n export async function DoMultiPartUpload(params: {\r\n file: File,\r\n api?: BruceApi.Api,\r\n urlSuffix: string,\r\n req?: Api.IUploadReqParams,\r\n onProgress?: (progress: IProgress) => void\r\n }) {\r\n let { file, api, urlSuffix: url, req, onProgress } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n const FILE_PORTION_SIZE = 100000000; // 100MB.\r\n let fileSize = file.size;\r\n let fileOffset = 0;\r\n let filePartsCount = fileSize / FILE_PORTION_SIZE;\r\n let t = Math.trunc(filePartsCount);\r\n filePartsCount = filePartsCount > t ? t + 1 : t;\r\n let filePartIndex = 1;\r\n let uploadToken = ObjectUtils.UId();\r\n let data: any;\r\n while (fileOffset < fileSize) {\r\n let partSize = Math.min(FILE_PORTION_SIZE, fileSize - fileOffset);\r\n let retryCount: number = 5;\r\n let retryWait: number = 1000;\r\n while (retryCount > 0) {\r\n try {\r\n const blob = file.slice(fileOffset, fileOffset + partSize);\r\n const formData = new FormData();\r\n formData.append(\"originalFileName\", file.name);\r\n formData.append(\"token\", uploadToken);\r\n formData.append(\"count\", \"\" + filePartsCount);\r\n formData.append(\"part\", \"\" + filePartIndex);\r\n formData.append(\"file\", blob);\r\n const reqParams = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n reqParams.formData = formData;\r\n reqParams.onProgress = (progress: ProgressEvent) => {\r\n const sofar = fileOffset + progress.loaded;\r\n const percent = Math.round ((sofar / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n data = await api.UPLOAD(url, blob, reqParams)\r\n retryCount = 0;\r\n }\r\n catch (up) {\r\n retryCount -= 1;\r\n if (retryCount <= 0) {\r\n throw up;\r\n }\r\n await new Promise((res) => setTimeout(res, retryWait));\r\n retryWait = retryWait * 2;\r\n }\r\n }\r\n fileOffset += partSize;\r\n filePartIndex++;\r\n }\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return data;\r\n }\r\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\n // Our API throws an error when a key is not set which is a bit annoying.\n // Since we only use these keys for a few specific things we'll just request the list and avoid the error.\n // If this becomes useful for more things we'll make requesting a key that doesn't exist just return empty JSON.\n\n const prom = await GetList({\n api,\n req: reqParams\n });\n const key = prom.programKeys.find(k => k.ProgramId === programId);\n \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\n return {\n programKey: key\n };\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, ProjectViewBookmark} from \"../bruce-models\";\r\nimport { Entity } from \"../entity/entity\";\r\nimport { Tileset } from \"../tileset/tileset\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { ZoomControl } from \"./zoom-control\";\r\n\r\n/**\r\n * Describes a menu item found in project views.\r\n * Menu items are used to dictate what data to load in a scene.\r\n * A menu item may be a container for other items.\r\n */\r\nexport namespace MenuItem {\r\n export enum EType {\r\n None = \"NONE\",\r\n Entities = \"BruceEntity\",\r\n Entity = \"SingleEntity\",\r\n Osm = \"OSMBuildingsTileset\",\r\n CadTileset = \"ModelTileset\",\r\n ArbTileset = \"ArbitraryTileset\",\r\n IonTileset = \"Cesium3DTileset\",\r\n Kml = \"StaticKML\",\r\n EntityTileset = \"EntitiesTileset\",\r\n EntityRaster = \"RasterEntitiesTileset\",\r\n PointCloud = \"PointCloudTileset\",\r\n EntitiesLoaded = \"LoadedEntities\",\r\n EntitiesIds = \"EntitiesIds\",\r\n // Deprecated. Use Relationships instead.\r\n Relations = \"Relations\",\r\n Relationships = \"Relationships\",\r\n GooglePhotoTileset = \"GooglePhotoTileset\"\r\n }\r\n\r\n export interface ILegend {\r\n model3d: boolean;\r\n point: boolean;\r\n polygon: boolean;\r\n polylines: boolean;\r\n tileset3d: boolean;\r\n }\r\n\r\n export interface IAuthorSettings {\r\n // If true, the clicked entity will be read and used to update the authored entity.\r\n readClickedEntity?: boolean;\r\n // Optional relationship type to use when relating to the clicked entity.\r\n clickedRelationTypeId?: string;\r\n // If set, specified attributes will be copied between the clicked and authored entities.\r\n copyClickedAttrMapping?: {\r\n // String is a wrapped path, check PathUtils.\r\n fromPathStr: string;\r\n toPathStr: string;\r\n }[];\r\n }\r\n\r\n export interface IItem {\r\n id: string;\r\n Caption: string;\r\n Children?: IItem[];\r\n Type: EType;\r\n hideChildren?: boolean;\r\n legend?: ILegend;\r\n authoringEnabled?: boolean;\r\n authoring?: IAuthorSettings;\r\n LabelColor?: string;\r\n renderPriority?: number;\r\n // Default = false.\r\n cdnEnabled?: boolean;\r\n // Used to kill cache. Default = 0.\r\n // Tilesets have their own counter within their records.\r\n // This is used for non-tileset items.\r\n cdnCounter?: number;\r\n }\r\n\r\n export function CreateFromEntityId(entityId: string, typeId: string, styleId?: number): IItem {\r\n return <Item.IEntity>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.Entity,\r\n Caption: \"Generated Entity Menu Item\",\r\n BruceEntity: {\r\n \"EntityType.ID\": typeId,\r\n EntityId: entityId\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n MaxZoom: 1000000,\r\n MinZoom: 0,\r\n StyleID: styleId\r\n }\r\n ]\r\n };\r\n }\r\n\r\n export function CreateFromTypeId(typeId: string, styleId?: number): IItem {\r\n return <Item.IEntities>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.Entities,\r\n Caption: \"Generated Entity Type Menu Item\",\r\n BruceEntity: {\r\n \"EntityType.ID\": typeId\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: styleId\r\n }\r\n ]\r\n };\r\n }\r\n\r\n export function CreateFromTilesetId(tilesetId: string, type: Tileset.EType): IItem {\r\n if (type === Tileset.EType.Cad) {\r\n return <Item.ICadTileset>{\r\n\t id: ObjectUtils.UId(),\r\n\t Type: EType.CadTileset,\r\n Caption: \"Generated CAD Menu Item\",\r\n\t FlyTo: false,\r\n\t\t\t\ttileset: {\r\n\t\t\t\t\tTilesetID: tilesetId\r\n\t\t\t\t}\r\n };\r\n }\r\n else if (type == Tileset.EType.EntitiesSet) {\r\n return <Item.IEntitiesTileset>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.EntityTileset,\r\n Caption: \"Generated Entities Menu Item\",\r\n FlyTo: false,\r\n tileset: {\r\n TilesetID: tilesetId\r\n }\r\n };\r\n }\r\n else if (type == Tileset.EType.PointCloud) {\r\n return <Item.IPointcloud>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.PointCloud,\r\n Caption: \"Generated Point Cloud Menu Item\",\r\n FlyTo: false,\r\n tileset: {\r\n TilesetID: tilesetId\r\n }\r\n };\r\n }\r\n else if (type == Tileset.EType.EntitiesMap) {\r\n return <Item.IEntitiesRaster>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.EntityRaster,\r\n Caption: \"Generated Entities Menu Item\",\r\n tileset: {\r\n TilesetID: tilesetId\r\n }\r\n };\r\n }\r\n throw(\"Tileset type not supported.\");\r\n }\r\n\r\n export namespace Item {\r\n export interface ITileset {\r\n TilesetURL?: string;\r\n ClientAccountID?: string;\r\n TilesetID?: string;\r\n }\r\n\r\n /**\r\n * Settings related to how entity clustering should behave.\r\n */\r\n export interface IClustering {\r\n // Minimum distance to an entity for it to cluster.\r\n // bruce-cesium/point-clustering.ts will have 5000 as default.\r\n minDistance?: number;\r\n // Minimum total loaded for the menu item for clustering to kick in.\r\n // bruce-cesium/point-clustering.ts will have 0 as default.\r\n // It will always try to cluster when points are near each-other and camera is far away.\r\n minTotalCount?: number;\r\n // TODO: Zoom control-like settings for clustering.\r\n // Between x and y meters the points should cluster with z distance.\r\n // Eg: \"Between 5,000 and 15,000 meters the points should cluster within 500 meters.\"\r\n }\r\n\r\n export interface IEntities extends IItem {\r\n Type: EType.Entities;\r\n BruceEntity: {\r\n \"EntityType.ID\": string;\r\n Filter?: IDictionary<string>;\r\n // If true, menu item will display individual sub-items for tags.\r\n ExpandLayers?: boolean;\r\n // If ExpandLayers = true, this is the saved sub-items to render.\r\n // If this is null or empty, that means there is nothing to render for this menu item.\r\n SelectedExpandLayers?: number[];\r\n };\r\n CameraZoomSettings?: ZoomControl.IItem[];\r\n\r\n // If true, menu item will render point and icon entities as clustered points when close together.\r\n enableClustering?: boolean;\r\n clustering?: IClustering;\r\n\r\n // If BruceEntity.ExpandLayers = true,\r\n // this will dictate if camera should be used to scan for tags in view.\r\n filterLayersByCameraLocation?: boolean;\r\n showAllLayersExcludeBelow?: boolean;\r\n layers?: number[];\r\n extLayers?: {\r\n ID: number,\r\n checked: boolean\r\n }[];\r\n }\r\n\r\n export interface IEntity extends IItem {\r\n Type: EType.Entity;\r\n BruceEntity: {\r\n \"EntityType.ID\"?: string;\r\n EntityId: string;\r\n };\r\n CameraZoomSettings?: ZoomControl.IItem[];\r\n showAllLayers?: boolean;\r\n showAllLayersExcludeBelow?: boolean;\r\n }\r\n\r\n export interface IArbTileset extends IItem {\r\n Type: EType.ArbTileset | EType.IonTileset;\r\n FlyTo?: boolean;\r\n BruceEntity?: {\r\n \"EntityType.ID\"?: string;\r\n };\r\n tileset?: ITileset;\r\n StyleMapping?: any[];\r\n styleId?: number;\r\n ApplyStyles?: boolean;\r\n IonResource?: {\r\n AssetID: string | number;\r\n // If not supplied then the client account default is used.\r\n AccessToken?: string;\r\n }\r\n }\r\n export interface IIonTileset extends IArbTileset {}\r\n\r\n export interface ICadTileset extends IItem {\r\n Type: EType.CadTileset;\r\n tileset: ITileset;\r\n FlyTo?: boolean;\r\n StyleMapping?: any[];\r\n StyleBlending?: {\r\n // Hightlight = 0, replace = 1, mix = 2.\r\n blendMode: 0 | 1 | 2;\r\n // 1 = 100% new colour. 0 = original colour.\r\n blendPercent: number;\r\n };\r\n styleId?: number;\r\n BruceEntity?: {\r\n // Optional restriction.\r\n // When not null, only entities matching supplied ids will be visible.\r\n EntityIds?: string[];\r\n // Optional styling.\r\n // When entity ids are set, other entities can optionally be \"ghosts\".\r\n // This means they will be available but at low opacity.\r\n Ghosts?: boolean;\r\n }\r\n }\r\n\r\n export interface IPointcloud extends IItem {\r\n Type: EType.PointCloud;\r\n FlyTo?: boolean;\r\n tileset: ITileset;\r\n }\r\n\r\n export interface IEntitiesRaster extends IItem {\r\n Type: EType.EntityRaster;\r\n tileset: ITileset;\r\n }\r\n\r\n export interface IOsm extends IItem {\r\n Type: EType.Osm;\r\n BruceEntity?: {\r\n \"EntityType.ID\"?: string;\r\n SourceId: string;\r\n };\r\n ghostLoading?: boolean;\r\n }\r\n\r\n export interface IKml extends IItem {\r\n Type: EType.Kml;\r\n KML?: {\r\n ClientFile?: {\r\n ID: string;\r\n },\r\n // Arbitrarily hosted file to load instead of a client file.\r\n fileUrl?: string;\r\n }[]\r\n }\r\n\r\n export interface IEntitiesTileset extends IItem {\r\n Type: EType.EntityTileset;\r\n FlyTo: boolean;\r\n tileset: ITileset;\r\n // Point cloud settings as this tileset can include point clouds and 3d models.\r\n // The use-case is that this tileset is made from entities and what the user wants to show between bookmarks is different.\r\n // Bookmarks have \"menuItemAlternations\" to have different settings for menu items per bookmark.\r\n attenuation?: boolean;\r\n attenuationMax?: number;\r\n }\r\n\r\n export interface IEntitiesLoaded extends MenuItem.IItem {\r\n Type: EType.EntitiesLoaded;\r\n BruceEntity: {\r\n \"EntityType.ID\"?: string;\r\n Entities: Entity.IEntity[];\r\n };\r\n CameraZoomSettings?: ZoomControl.IItem[];\r\n }\r\n\r\n export interface IEntityIds extends MenuItem.IItem {\r\n Type: EType.EntitiesIds;\r\n BruceEntity: {\r\n EntityIds: string[];\r\n };\r\n CameraZoomSettings?: ZoomControl.IItem[];\r\n\r\n // If true, menu item will render point and icon entities as clustered points when close together.\r\n // Default = false.\r\n enableClustering?: boolean;\r\n clustering?: IClustering;\r\n }\r\n\r\n /**\r\n * Auto-generated menu item when entity-relationships are marked to be rendered.\r\n * @deprecated, use IRelationships instead.\r\n */\r\n export interface IEntityRelations extends MenuItem.IItem {\r\n Type: EType.Relations;\r\n BruceEntity?: {\r\n EntityIds?: string[];\r\n },\r\n }\r\n\r\n export interface IRenderedRelations {\r\n // Entities to drawn relationships for.\r\n // Downstream relationships will be drawn for these entities.\r\n entityIds: string[];\r\n // The relationship type to render for the ids.\r\n relationTypeId: string;\r\n }\r\n\r\n /**\r\n * Auto-generated menu item when entity-relationships are marked to be rendered.\r\n */\r\n export interface IRelationships extends MenuItem.IItem {\r\n Type: EType.Relationships;\r\n // Relationships to render.\r\n // This is an entityIds -> relationship type grouping.\r\n // The relationships will be drawn downstream only.\r\n relations?: IRenderedRelations[];\r\n }\r\n\r\n export interface IGooglePhotoTileset extends IItem {\r\n Type: EType.GooglePhotoTileset;\r\n // Css color string to apply to the tileset.\r\n // This follows Cesium logic for when color is pure white,\r\n // that means don't apply colour and only apply alpha.\r\n colorMask?: string;\r\n }\r\n }\r\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 // Array of entity ids for which to draw labels for.\r\n // If empty, no labels are drawn.\r\n labelledEntityIds?: string[];\r\n // Bookmark-wide relationships to render.\r\n // The lines will render regardless of entities being rendered.\r\n renderedRelations?: MenuItem.Item.IRenderedRelations[];\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 // 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 // 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 // @deprecated, use 'renderedRelations' instead.\r\n renderedEntityRelations?: string[];\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\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Calculator } from \"../calculator/calculator\";\r\nimport { ENVIRONMENT } from \"../environment\";\r\n\r\n/**\r\n * Describes the \"Style\" concept within Bruce.\r\n * A legacy way of referring to styles is \"entity display settings\".\r\n *\r\n * A style is a collection of settings (which can be calculations to perform on entity data) that\r\n * describe how an entity should be displayed.\r\n */\r\nexport namespace Style {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.Style + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.Style;\r\n }\r\n\r\n export enum EType {\r\n Entity = \"ENTITY\",\r\n EntityRelationship = \"ENTITY_RELATIONSHIP\"\r\n }\r\n\r\n export enum EPointType {\r\n Point = \"POINT\",\r\n Icon = \"ICON\",\r\n Cylinder = \"CYLINDER\"\r\n }\r\n\r\n export interface IPointSettings {\r\n color: Calculator.IField[];\r\n size: Calculator.IField[];\r\n iconId: string;\r\n iconUrl: Calculator.IField[];\r\n iconScale: Calculator.IField[];\r\n altitudeOption?: any;\r\n Type: EPointType;\r\n // Indicates if depth-test should be disabled which forces the point to render above all other entities.\r\n // This is currently for icon points exclusively.\r\n renderOnTop?: boolean;\r\n // To review.\r\n CylinderFillColor?: Calculator.IField[];\r\n CylinderFillExtrusion?: Calculator.IField[];\r\n CylinderRadius?: Calculator.IField[];\r\n CylinderBorderEnabled?: boolean;\r\n CylinderBorderExtrusion?: Calculator.IField[];\r\n CylinderBorderWidth?: Calculator.IField[];\r\n CylinderBorderColor?: Calculator.IField[];\r\n // To remove.\r\n ClusterNearbyEntities?: boolean;\r\n MinimumEntitiesCountForClustering?: Calculator.IField[];\r\n }\r\n\r\n export interface IPolygonSettings {\r\n useExtrusion: boolean;\r\n extrusionPath: Calculator.IField[];\r\n fillColor: Calculator.IField[];\r\n lineColor: Calculator.IField[];\r\n lineWidth: Calculator.IField[];\r\n // Default is \"m\".\r\n // When units are in px the lines will draw as Cesium Polyline graphics, for meters corridors are used.\r\n // Meters are more stable and will reduce crashes. Pixels have better FPS.\r\n lineWidthUnits?: \"px\" | \"m\";\r\n altitudeOption?: any;\r\n zIndex?: Calculator.IField[];\r\n // If the polygon should be draped over the terrain or tilesets + terrain.\r\n // Default is just terrain.\r\n drapeOver?: \"TERRAIN\" | \"ALL\";\r\n }\r\n\r\n export interface IPolylineSettings {\r\n lineColor: Calculator.IField[];\r\n lineWidth: Calculator.IField[];\r\n // Default is \"px\" for backward compatibility.\r\n // When units are in px the lines will draw as Cesium Polyline graphics, for meters corridors are used.\r\n // Meters are more stable and will reduce crashes. Pixels have better FPS.\r\n lineWidthUnits?: \"px\" | \"m\";\r\n altitudeOption?: any;\r\n zIndex?: Calculator.IField[];\r\n // If the polyline should be draped over the terrain or tilesets + terrain.\r\n // Default is just terrain.\r\n drapeOver?: \"TERRAIN\" | \"ALL\";\r\n }\r\n\r\n export interface IModelSettings {\r\n customize: boolean;\r\n fillColor: Calculator.IField[];\r\n scale: Calculator.IField[];\r\n fillColorBlendMode?: any;\r\n fillColorBlendAmount?: number;\r\n altitudeOption?: any;\r\n }\r\n\r\n export interface IEntitySettings {\r\n pointStyle?: IPointSettings;\r\n polygonStyle?: IPolygonSettings;\r\n polylineStyle?: IPolylineSettings;\r\n modelStyle?: IModelSettings;\r\n }\r\n\r\n export interface IRelationSettings {\r\n lineColor?: Calculator.IField[];\r\n lineWidth?: Calculator.IField[];\r\n heightDistanceRatio?: Calculator.IField[];\r\n duration?: Calculator.IField[];\r\n }\r\n\r\n export type Settings = IEntitySettings | IRelationSettings;\r\n\r\n export interface IStyle {\r\n ID: number;\r\n Name: string;\r\n Settings: Settings;\r\n Type: EType;\r\n }\r\n\r\n export async function GetList(params: {\r\n api?: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n styles: IStyle[]\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 const cache = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cache?.found) {\r\n return cache.data;\r\n }\r\n const res: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.entityDisplaySettings\", Api.PrepReqParams(reqParams));\r\n res({\r\n styles: data.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(),\r\n value: res,\r\n req: reqParams\r\n });\r\n return res;\r\n }\r\n\r\n export async function Get(params: {\r\n api?: BruceApi.Api,\r\n styleId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n style: IStyle\r\n }> {\r\n let { api, styleId: id, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!id) {\r\n throw(\"Style ID is required.\");\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 prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n style: 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: 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 Update(params: {\r\n api?: BruceApi.Api,\r\n style: IStyle,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n style: IStyle\r\n }> {\r\n let { api, style: data, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!data?.Name) {\r\n throw(\"Style name is required.\");\r\n }\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n const res = await api.POST(`ui.entityDisplaySetting/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n style: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api?: BruceApi.Api,\r\n styleId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, styleId: id, req: reqParams } = params;\r\n if (!api) {\r\n api = ENVIRONMENT.Api().GetBruceApi();\r\n }\r\n\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n await api.DELETE(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\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 // If none is specified it'll return an anonymous session.\n sessionId?: string,\n // Optional param to specify the account ID to get permissions for.\n // If not specified, the session's original logged in account will be used.\n accountId?: string,\n req?: Api.IReqParams\n }): Promise<{\n session: ISession\n }> {\n let { api, sessionId, req: reqParams, accountId } = params;\n if (!api) {\n api = ENVIRONMENT.Api().GetGuardianApi();\n }\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}${accountId ? `?account=${accountId}`: \"\"}`, 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\";\r\n\r\nexport * from \"./custom-form/custom-form\";\r\nexport * from \"./custom-form/custom-form-content\";\r\n\r\nexport * from \"./api/abstract-api\";\r\nexport * from \"./api/api\";\r\nexport * from \"./api/bruce-api\";\r\nexport * from \"./api/cam-api\";\r\nexport * from \"./api/idm-api\";\r\nexport * from \"./api/global-api\";\r\nexport * from \"./api/guardian-api\";\r\nexport * from \"./api/api-getters\";\r\n\r\nexport * from \"./calculator/calculator\";\r\n\r\nexport * from \"./common/bounds\";\r\nexport * from \"./common/bruce-event\";\r\nexport * from \"./common/cache\";\r\nexport * from \"./common/camera\";\r\nexport * from \"./common/cartes\";\r\nexport * from \"./common/carto\";\r\nexport * from \"./common/color\";\r\nexport * from \"./common/delay-queue\";\r\nexport * from \"./common/dictionary\";\r\nexport * from \"./common/geometry\";\r\nexport * from \"./common/transform\";\r\nexport * from \"./common/utc\";\r\nexport * from \"./common/bruce-variable\";\r\nexport * from \"./common/lru-cache\";\r\nexport * from \"./common/section\";\r\n\r\nexport * from \"./entity/entity-attachment-type\";\r\nexport * from \"./entity/entity-attachment\";\r\nexport * from \"./entity/entity-comment\";\r\nexport * from \"./entity/entity-link\";\r\nexport * from \"./entity/entity-lod\";\r\nexport * from \"./entity/entity-lod-category\";\r\nexport * from \"./entity/entity-relation-type\";\r\nexport * from \"./entity/entity-relation\";\r\nexport * from \"./entity/entity-source\";\r\nexport * from \"./entity/entity-tag\";\r\nexport * from \"./entity/entity-type\";\r\nexport * from \"./entity/entity\";\r\nexport * from \"./entity/entity-coords\";\r\nexport * from \"./entity/entity-type-visual-settings\";\r\nexport * from \"./entity/entity-attribute\";\r\n\r\nexport * from \"./client-file/client-file\";\r\n\r\nexport * from \"./program-key/program-key\";\r\n\r\nexport * from \"./project/zoom-control\";\r\nexport * from \"./project/menu-item\";\r\nexport * from \"./project/project-view-bookmark\";\r\nexport * from \"./project/project-view\";\r\nexport * from \"./project/project-view-legacy-tile\";\r\nexport * from \"./project/project-view-tile\";\r\nexport * from \"./project/project-view-selection\";\r\n\r\nexport * from \"./server/pending-action\";\r\nexport * from \"./server/message-broker\";\r\nexport * from \"./server/hosting-location\";\r\n\r\nexport * from \"./style/style\";\r\n\r\nexport * from \"./tileset/tileset\";\r\n\r\nexport * from \"./user/permission\";\r\nexport * from \"./user/session\";\r\nexport * from \"./user/user-group\";\r\nexport * from \"./user/user\";\r\n\r\nexport * from \"./account/account\";\r\nexport * from \"./account/account-settings\";\r\nexport * from \"./account/account-invite\";\r\n\r\nexport * from \"./util/encrypt-utils\";\r\nexport * from \"./util/math-utils\";\r\nexport * from \"./util/object-utils\";\r\nexport * from \"./util/path-utils\";\r\nexport * from \"./util/url-utils\";\r\n\r\nexport * from \"./data-lab/data-lab\";\r\n\r\nexport * from \"./import/import-cad\";\r\nexport * from \"./import/import-csv\";\r\nexport * from \"./import/import-json\";\r\nexport * from \"./import/import-kml\";\r\nexport * from \"./import/imported-file\";\r\n\r\nexport * from \"./markup/markup\";\r\nexport * from \"./internal/uploader\";\r\nexport * from \"./plugin/plugin\";\r\nexport * from \"./environment\";\r\nexport * from \"./data-source/data-source\";\r\n\r\nexport const VERSION = \"3.1.5\";"],"names":["Api","A"],"mappings":"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"}
|