bruce-models 0.5.3 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bruce-models.es5.js","sources":["../src/api/api.ts","../src/ann-document/ann-document.ts","../src/custom-form/custom-form.ts","../src/common/cache.ts","../src/api/abstract-api.ts","../src/api/bruce-api.ts","../src/api/cam-api.ts","../src/api/idm-api.ts","../src/api/global-api.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/bruce-event.ts","../src/common/camera.ts","../src/common/cartes.ts","../src/common/carto.ts","../src/common/delay-queue.ts","../src/common/geometry.ts","../src/common/utc.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-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/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-tile-source.ts","../src/server/pending-action.ts","../src/style/style.ts","../src/tileset/tileset-entities-map-tiles.ts","../src/tileset/tileset-ext-map-tiles.ts","../src/ucs/ucs.ts","../src/user/permission.ts","../src/user/session.ts","../src/user/user-group.ts","../src/user/user.ts","../src/account/account.ts","../src/util/encrypt-utils.ts","../src/util/math-utils.ts","../src/util/url-utils.ts","../src/data-lab/data-lab.ts"],"sourcesContent":["import { IDictionary } from \"../common/dictionary\";\r\n\r\n/**\r\n * Contains generic descriptions used for Bruce requests.\r\n */\r\nexport namespace Api {\r\n export enum ECacheKey {\r\n Id = \":\",\r\n Entity = \"entity\",\r\n EntityType = \"entitytype\",\r\n ProjectView = \"projectview\",\r\n ProjectViewBookmark = \"pvbookmark\",\r\n Tileset = \"tileset\",\r\n ClientFile = \"clientfile\",\r\n Session = \"session\",\r\n PendingAction = \"pendingaction\",\r\n EntitySource = \"entitysource\",\r\n ProgramKey = \"programkey\",\r\n Ucs = \"ucs\",\r\n Tag = \"tag\",\r\n Attachment = \"attachment\",\r\n Comment = \"comment\",\r\n Link = \"link\",\r\n AnnDocument = \"anndocument\",\r\n AttachmentType = \"attachmenttype\",\r\n Relation = \"relation\",\r\n RelationType = \"relationtype\",\r\n Lod = \"lod\",\r\n Style = \"style\",\r\n PublishTileset = \"publishtileset\",\r\n User = \"user\",\r\n UserEmail = \"useremail\",\r\n AccessToken = \"accesstoken\",\r\n UserGroup = \"usergroup\",\r\n Account = \"account\",\r\n CustomForm = \"customform\",\r\n ImportedFile = \"importedfile\"\r\n }\r\n export const DEFAULT_CACHE_DURATION = 60 * 5; // 5 minutes.\r\n export const TEMPLATE_ACCOUNT_ID = \"template\";\r\n export const ACCESS_TOKEN_HEADER = \"X-Access-Token\";\r\n \r\n /**\r\n * Possible environments we host Bruce apps on.\r\n * When these are matched, they should be case-insensitive.\r\n */\r\n export enum EEnv {\r\n DEV = \"DEV\",\r\n STG = \"STG\",\r\n UAT = \"UAT\",\r\n PROD = \"PROD\"\r\n }\r\n export type Env = EEnv | string;\r\n\r\n /**\r\n * Prepares a string to be included in a url.\r\n * @param str\r\n * @returns \r\n */\r\n export function Encode(str: string): string {\r\n return encodeURIComponent(str.replace(/\\+/g, \"%2B\").replace(/\\./g, \"%2E\"));\r\n }\r\n\r\n export interface IList<T> {\r\n Items: T[];\r\n TotalCount?: number;\r\n }\r\n\r\n export enum ESortOrder {\r\n None = 0,\r\n Asc = 1,\r\n Desc = -1\r\n }\r\n\r\n export enum EEncoding {\r\n UTF8 = \"UTF-8\",\r\n UTF16 = \"UTF-16BE\"\r\n }\r\n\r\n export interface IReqParams {\r\n headers?: IDictionary<string>;\r\n response?: {\r\n encoding?: EEncoding | string;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares default settings for a request to Bruce Api.\r\n * Our requests WRONGLY have utf-16 for 95% of them. Please be wary of that.\r\n * @returns \r\n */\r\n export function PrepReqParams(): IReqParams {\r\n return { response: { encoding: Api.EEncoding.UTF16 } };\r\n }\r\n\r\n export interface IUploadReqParams extends IReqParams {\r\n onProgress?: (e: ProgressEvent) => void;\r\n formData?: IDictionary<string>;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../bruce-models\";\r\n\r\ntype Type = AnnDocument.EType | string;\r\n\r\n/**\r\n * Describes communication with the \"Annotated Document\" concept in Bruce.\r\n * Annotated documents are files with hotspots that can link to Entity records.\r\n */\r\nexport namespace AnnDocument {\r\n export function GetCacheKey(id: number) {\r\n return `${Api.ECacheKey.AnnDocument}${Api.ECacheKey.Id}${id}`;\r\n }\r\n\r\n export function GetListCacheKey(type: Type) {\r\n return Api.ECacheKey.AnnDocument + type;\r\n }\r\n\r\n export interface IDocument {\r\n ID?: number;\r\n Type: Type;\r\n Name: string;\r\n \"ClientFile.ID\": string;\r\n Settings: any;\r\n }\r\n\r\n export enum EType {\r\n SVG = \"SVG\"\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, docId: number): Promise<IDocument> {\r\n if (!docId) {\r\n throw(\"Doc ID is required.\");\r\n }\r\n const key = GetCacheKey(docId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`documentView/${docId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, type: Type): Promise<IDocument[]> {\r\n if (!type) {\r\n type = \"\";\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(type));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IDocument[]> = new Promise(async (res, rej) => {\r\n try {\r\n const url = \"documentViews\" + (type ? \"?type=\" + type : \"\");\r\n const data = await api.GET(url, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(type), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Markup } from \"../markup/markup\";\r\n\r\n/**\r\n * Describes the \"Custom Form\" concept within Bruce.\r\n * Custom forms are dynamic dialogs that get populated with Entity data.\r\n */\r\nexport namespace CustomForm {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.CustomForm + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(typeId: string): string {\r\n if (typeId) {\r\n return Api.ECacheKey.CustomForm + Api.ECacheKey.EntityType + Api.ECacheKey.Id + typeId;\r\n }\r\n return Api.ECacheKey.CustomForm;\r\n }\r\n\r\n export interface IForm {\r\n ID?: number;\r\n \"EntityType.ID\"?: string;\r\n Name?: string;\r\n Settings?: any | Markup.IMarkup;\r\n Type?: EType;\r\n }\r\n\r\n export enum EType {\r\n Form = \"GENERIC\",\r\n Markup = \"MARKUP\"\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, id: number): Promise<IForm> {\r\n if (!id) {\r\n throw(\"Id is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(id));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`customForm/${id}`, Api.PrepReqParams());\r\n api.Cache.Set(GetCacheKey(id), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, id: number): Promise<void> {\r\n if (!id) {\r\n throw(\"Id is required.\");\r\n }\r\n await api.DELETE(`customForm/${id}`, Api.PrepReqParams())\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, typeId: string): Promise<IForm[]> {\r\n const url = typeId ? `entityType/${typeId}/customForms` : \"customForms\";\r\n const cacheData = api.Cache.Get(GetListCacheKey(typeId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(url, Api.PrepReqParams());\r\n const prom = req.then((data) => {\r\n return data.Items;\r\n });\r\n api.Cache.Set(GetListCacheKey(typeId), prom, Api.DEFAULT_CACHE_DURATION);\r\n return prom;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IForm): Promise<IForm> {\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n data = await api.POST(`customForm/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\r\n return data;\r\n }\r\n}","import { IDictionary } from \"./dictionary\";\r\n\r\nclass CacheItem {\r\n public Id: string;\r\n public Data: any;\r\n public Duration: number;\r\n private _created: Date;\r\n\r\n\r\n constructor(id: string, data: any, duration: number) {\r\n this.Id = id;\r\n this.Data = data;\r\n this.Duration = duration;\r\n this._created = duration > -1 ? new Date() : <any>null;\r\n }\r\n\r\n public IsExpired(): boolean {\r\n if (this._created == null) {\r\n return false;\r\n }\r\n return (new Date().getTime() - this._created.getTime()) / 1000 > this.Duration;\r\n }\r\n}\r\n\r\ntype Key = string | number;\r\n\r\n/**\r\n * Simple local cache controller.\r\n */\r\nexport class CacheControl<T> {\r\n private data: IDictionary<CacheItem> = {};\r\n public Disabled: boolean = false;\r\n\r\n\r\n public Set(id: Key, data: T, duration: number = -1): void {\r\n this.data[id + \"\"] = new CacheItem(id + \"\", data, duration);\r\n }\r\n\r\n public Get(id: Key): T {\r\n if (this.Disabled) {\r\n return <any>null;\r\n }\r\n const item = this.data[id + \"\"];\r\n if (item == null) {\r\n return <any>null;\r\n }\r\n if (item.IsExpired()) {\r\n delete this.data[id + \"\"];\r\n return <any>null;\r\n }\r\n return item.Data;\r\n }\r\n\r\n public Clear(): void {\r\n this.data = {};\r\n }\r\n\r\n public Remove(id: Key): void {\r\n delete this.data[id + \"\"];\r\n }\r\n\r\n public RemoveByStartsWith(text: string): void {\r\n for (const key in this.data) {\r\n if (key.startsWith(text)) {\r\n delete this.data[key];\r\n }\r\n }\r\n }\r\n\r\n public RemoveByContains(text: string): void {\r\n for (const key in this.data) {\r\n if (key.includes(text)) {\r\n delete this.data[key];\r\n }\r\n }\r\n }\r\n\r\n public GetKeys(): string[] {\r\n if (this.Disabled) {\r\n return [];\r\n }\r\n return Object.keys(this.data);\r\n }\r\n\r\n public GetValues(): T[] {\r\n if (this.Disabled) {\r\n return [];\r\n }\r\n const values: T[] = [];\r\n for (const key in this.data) {\r\n const data = this.Get(key);\r\n if (data != null) {\r\n values.push(data);\r\n }\r\n }\r\n return values;\r\n }\r\n}","import { CacheControl } from \"../common/cache\";\r\nimport { Api } from \"./api\";\r\n\r\nasync function parseResult(data: Response, encoding?: string): Promise<any> {\r\n if (data.status == 200) {\r\n if (encoding) {\r\n const buffer = await data.arrayBuffer();\r\n return JSON.parse(new TextDecoder(encoding).decode(buffer));\r\n }\r\n else {\r\n return data.json();\r\n }\r\n }\r\n else {\r\n const error = await data.json();\r\n throw(error);\r\n }\r\n}\r\n\r\n/**\r\n * This is a base class for communication with an arbitrary Bruce Api.\r\n */\r\nexport class AbstractApi {\r\n private ssidHeader: string;\r\n private ssid: string = \"\";\r\n public Cache: CacheControl<any> = new CacheControl<any>();\r\n\r\n constructor(ssidHeader: string) {\r\n this.ssidHeader = ssidHeader;\r\n }\r\n\r\n public GetSessionId(): string {\r\n return this.ssid;\r\n }\r\n\r\n public SetSessionId(value: string): void {\r\n this.ssid = value;\r\n }\r\n\r\n public GetSessionHeader(): string {\r\n return this.ssidHeader;\r\n }\r\n\r\n public SetSessionHeader(value: string): void {\r\n this.ssidHeader = value;\r\n }\r\n\r\n public async get(url: string, params?: Api.IReqParams): Promise<any> {\r\n if (!params) {\r\n params = {};\r\n }\r\n params.headers = params.headers || {};\r\n params.headers = {\r\n \"Content-Type\": \"application/json;\",\r\n [this.ssidHeader]: this.ssid,\r\n ...params.headers\r\n };\r\n const res = await fetch(url, {\r\n headers: params.headers\r\n });\r\n return parseResult(res, params.response?.encoding);\r\n }\r\n\r\n public async delete(url: string, params?: Api.IReqParams): Promise<any> {\r\n if (!params) {\r\n params = {};\r\n }\r\n params.headers = params.headers || {};\r\n params.headers = {\r\n \"Content-Type\": \"application/json;\",\r\n [this.ssidHeader]: this.ssid,\r\n ...params.headers\r\n };\r\n const res = await fetch(url, {\r\n headers: params.headers,\r\n method: \"DELETE\"\r\n });\r\n return parseResult(res, params.response?.encoding);\r\n }\r\n\r\n public async post(url: string, data: any, params?: Api.IReqParams): Promise<any> {\r\n if (!params) {\r\n params = {};\r\n }\r\n params.headers = params.headers || {};\r\n params.headers = {\r\n \"Content-Type\": \"application/json;\",\r\n [this.ssidHeader]: this.ssid,\r\n ...params.headers\r\n };\r\n if (!data) {\r\n data = {};\r\n }\r\n if (typeof data != \"string\") {\r\n data = JSON.stringify(data);\r\n }\r\n const res = await fetch(url, {\r\n headers: params.headers,\r\n method: \"POST\",\r\n body: data\r\n });\r\n return parseResult(res, params.response?.encoding);\r\n }\r\n\r\n public async put(url: string, data: any, params?: Api.IReqParams): Promise<any> {\r\n if (!params) {\r\n params = {};\r\n }\r\n params.headers = params.headers || {};\r\n params.headers = {\r\n \"Content-Type\": \"application/json;\",\r\n [this.ssidHeader]: this.ssid,\r\n ...params.headers\r\n };\r\n if (!data) {\r\n data = {};\r\n }\r\n if (typeof data != \"string\") {\r\n data = JSON.stringify(data);\r\n }\r\n const res = await fetch(url, {\r\n headers: params.headers,\r\n method: \"PUT\",\r\n body: data\r\n });\r\n return parseResult(res, params.response?.encoding);\r\n }\r\n\r\n public async upload(url: string, blob: Blob, params?: Api.IUploadReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n try {\r\n let xhr = new XMLHttpRequest();\r\n const headers = <any>params?.headers;\r\n if (headers) {\r\n const headerKeys = Object.keys(headers);\r\n for (let i = 0; i < headerKeys.length; i++) {\r\n const key = headerKeys[i];\r\n const value = headers[key];\r\n xhr.setRequestHeader(key, value);\r\n }\r\n }\r\n if (params?.onProgress) {\r\n if (xhr.upload) {\r\n xhr.upload.onprogress = params?.onProgress;\r\n }\r\n else {\r\n xhr.addEventListener(\"progress\", params?.onProgress);\r\n }\r\n }\r\n xhr.onreadystatechange = (e) => {\r\n if (xhr.readyState == 4) {\r\n if (xhr.status >= 400) {\r\n rej(e);\r\n }\r\n else {\r\n try {\r\n res(JSON.parse(xhr.responseText));\r\n }\r\n catch (e) {\r\n console.error(e, xhr.responseText);\r\n res(xhr.responseText);\r\n }\r\n }\r\n }\r\n };\r\n xhr.open(\"POST\", url, true);\r\n if (this.ssid) {\r\n xhr.setRequestHeader(this.ssidHeader, this.ssid);\r\n }\r\n const formData = new FormData();\r\n if (params?.formData) {\r\n for (const key in params.formData) {\r\n formData.append(key, params.formData[key]);\r\n }\r\n }\r\n formData.append(\"file\", blob);\r\n xhr.send(formData);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n }\r\n}","import { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\n\r\nexport namespace BruceApi {\r\n export interface IGetter {\r\n env: A.EEnv;\r\n accountId: string;\r\n getApi: (accountId: string, env: A.EEnv) => BruceApi.Api;\r\n }\r\n\r\n /**\r\n * This is the request handler for Bruce Api, \r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\n export class Api extends AbstractApi {\r\n private baseUrl: string = \"\";\r\n private accountId: string;\r\n private env: A.Env;\r\n \r\n constructor(accountId: string, env?: A.Env) {\r\n super(\"x-sessionid\");\r\n this.accountId = accountId;\r\n this.env = env ?? A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n \r\n private setBaseUrl(): void {\r\n const prefix = `https://${this.accountId}.api.nextspace`;\r\n let url: string;\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url = prefix + \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url = prefix + \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url = prefix + \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url = prefix + \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n this.baseUrl = url;\r\n }\r\n \r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n \r\n public SetBaseUrl(url: string): void {\r\n this.baseUrl = url;\r\n if (!this.baseUrl.endsWith(\"/\")) {\r\n this.baseUrl += \"/\";\r\n }\r\n }\r\n \r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.get(this.baseUrl + url, params);\r\n }\r\n \r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.delete(this.baseUrl + url, params);\r\n }\r\n \r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.post(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async PUT(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.put(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return this.upload(this.baseUrl + url, blob, params);\r\n }\r\n }\r\n}","import { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\n\r\n/**\r\n * This is the request handler for Cam Api, \r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\nexport namespace CamApi {\r\n export interface IGetter {\r\n env: A.EEnv;\r\n getApi: (env: A.EEnv) => CamApi.Api;\r\n }\r\n\r\n export class Api extends AbstractApi {\r\n private baseUrl: string = \"\";\r\n private env: A.Env;\r\n \r\n constructor(env?: A.Env) {\r\n super(\"SSID\");\r\n this.env = env ?? A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n \r\n private setBaseUrl(): void {\r\n const prefix = \"https://cam.nextspace\";\r\n let url: string;\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url = prefix + \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url = prefix + \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url = prefix + \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url = prefix + \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n this.baseUrl = url;\r\n }\r\n \r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n \r\n public SetBaseUrl(url: string): void {\r\n this.baseUrl = url;\r\n if (!this.baseUrl.endsWith(\"/\")) {\r\n this.baseUrl += \"/\";\r\n }\r\n }\r\n \r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.get(this.baseUrl + url, params);\r\n }\r\n \r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.delete(this.baseUrl + url, params);\r\n }\r\n \r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.post(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return this.upload(this.baseUrl + url, blob, params);\r\n }\r\n }\r\n}","import { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\n\r\nexport namespace IdmApi {\r\n export interface IGetter {\r\n env: A.EEnv;\r\n getApi: (env: A.EEnv) => IdmApi.Api;\r\n }\r\n\r\n /**\r\n * This is the request handler for Idm Api, \r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\n export class Api extends AbstractApi {\r\n private baseUrl: string = \"\";\r\n private env: A.Env;\r\n \r\n constructor(env?: A.Env) {\r\n super(\"SSID\");\r\n this.env = env ?? A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n \r\n private setBaseUrl(): void {\r\n const prefix = \"https://idm.nextspace\";\r\n let url: string;\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url = prefix + \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url = prefix + \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url = prefix + \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url = prefix + \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv1=\" + env);\r\n }\r\n this.baseUrl = url;\r\n }\r\n \r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n \r\n public SetBaseUrl(url: string): void {\r\n this.baseUrl = url;\r\n if (!this.baseUrl.endsWith(\"/\")) {\r\n this.baseUrl += \"/\";\r\n }\r\n }\r\n \r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.get(this.baseUrl + url, params);\r\n }\r\n \r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.delete(this.baseUrl + url, params);\r\n }\r\n \r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.post(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return this.upload(this.baseUrl + url, blob, params);\r\n }\r\n }\r\n}","import { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\n\r\nexport namespace GlobalApi {\r\n export interface IGetter {\r\n env: A.EEnv;\r\n getApi: (env: A.EEnv) => GlobalApi.Api;\r\n }\r\n\r\n /**\r\n * This is the request handler for Global Api, \r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\n export class Api extends AbstractApi {\r\n private baseUrl: string = \"\";\r\n private env: A.Env;\r\n \r\n constructor(env?: A.Env) {\r\n super(\"SSID\");\r\n this.env = env ?? A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n \r\n private setBaseUrl(): void {\r\n let url: string;\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url = \"https://bruceglobal.nextspace-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url = \"https://bruceglobal.nextspace-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url = \"https://bruceglobal.api.nextspace-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url = \"https://bruceglobal.api.nextspace.host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n this.baseUrl = url;\r\n }\r\n \r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n \r\n public SetBaseUrl(url: string): void {\r\n this.baseUrl = url;\r\n if (!this.baseUrl.endsWith(\"/\")) {\r\n this.baseUrl += \"/\";\r\n }\r\n }\r\n \r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.get(this.baseUrl + url, params);\r\n }\r\n \r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.delete(this.baseUrl + url, params);\r\n }\r\n \r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.post(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return this.upload(this.baseUrl + url, blob, params);\r\n }\r\n }\r\n}","export namespace Color {\r\n export interface IColor {\r\n // Max: 255, Min: 0.\r\n red: number;\r\n green: number;\r\n blue: number;\r\n // Max: 1, Min: 0.\r\n alpha: number ;\r\n }\r\n\r\n export enum EBlendMode {\r\n HIGHLIGHT,\r\n REPLACE,\r\n MIX\r\n }\r\n\r\n export interface IBlendSettings {\r\n blendMode?: EBlendMode;\r\n // 1 = 100% new color. 0 = original color.\r\n blendPercent?: number;\r\n }\r\n\r\n export function RandomColor(): IColor {\r\n // https://stackoverflow.com/a/7352887\r\n const brightness = 4;\r\n const rgb = [Math.random() * 256, Math.random() * 256, Math.random() * 256];\r\n const mix = [brightness * 51, brightness * 51, brightness * 51];\r\n const mixedrgb = [rgb[0] + mix[0], rgb[1] + mix[1], rgb[2] + mix[2]].map(function(x){\r\n return Math.round(x / 2.0);\r\n });\r\n const str = \"rgba(\" + mixedrgb.join(\",\") + \",0.9\" + \")\";\r\n return ColorFromStr(str);\r\n }\r\n\r\n /**\r\n * Attempts to parse a given color string into a model.\r\n * @param str \r\n * @returns \r\n */\r\n export function ColorFromStr(str: string): IColor {\r\n let r,g,b,a;\r\n const rgba = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([^\\)]+)\\s*)?\\)$/.exec(str);\r\n if (rgba) {\r\n r = parseInt(rgba[1]);\r\n g = parseInt(rgba[2]);\r\n b = parseInt(rgba[3]);\r\n a = rgba[4] != null ? parseFloat(rgba[4]) : 1;\r\n return {\r\n red: r,\r\n green: g,\r\n blue: b,\r\n alpha: a\r\n }\r\n }\r\n if (str.charAt(0) == \"#\") {\r\n str = str.substring(1);\r\n }\r\n if (str.length == 6) {\r\n // rgb.\r\n const parsed = /^(.{2})(.{2})(.{2})/.exec(str);\r\n if (!parsed) {\r\n return <any>null;\r\n }\r\n r = parseInt(parsed[1], 16);\r\n g = parseInt(parsed[2], 16);\r\n b = parseInt(parsed[3], 16);\r\n a = 1;\r\n }\r\n else if (str.length == 8) {\r\n // rgba.\r\n const parsed = /^(.{2})(.{2})(.{2})(.{2})/.exec(str);\r\n if (!parsed) {\r\n return <any>null;\r\n }\r\n r = parseInt(parsed[1], 16);\r\n g = parseInt(parsed[2], 16);\r\n b = parseInt(parsed[3], 16);\r\n a = parseInt(parsed[4], 16);\r\n if (a != 0) {\r\n a = a/255;\r\n }\r\n }\r\n else {\r\n return <any>null;\r\n }\r\n if (a == null) {\r\n a = 1;\r\n }\r\n return {\r\n red: r,\r\n blue: b,\r\n green: g,\r\n alpha: a\r\n }\r\n }\r\n}","export namespace ObjectUtils {\r\n /**\r\n * Generates a Bruce compatible UID.\r\n * @returns \r\n */\r\n export function UId(): string {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\r\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n}","/**\r\n * Utility to help with parsing and wrapping Bruce paths.\r\n */\r\nexport namespace PathUtils {\r\n export function Parse(str: string): string[] {\r\n if (!str) {\r\n return [];\r\n }\r\n const broken: string[] = str.split(\"\\\"/\\\"\");\r\n if (broken.length > 0) {\r\n let top = broken[0];\r\n if (top.length > 0) {\r\n if (top.charAt(0) == \"\\\"\") {\r\n top = top.substring(1);\r\n }\r\n broken[0] = top;\r\n }\r\n const endIndex = broken.length - 1;\r\n let bot = broken[endIndex];\r\n if (bot.length > 0) {\r\n if (bot.charAt(bot.length - 1) == \"\\\"\") {\r\n bot = bot.substring(0, bot.length - 1);\r\n }\r\n broken[endIndex] = bot;\r\n }\r\n }\r\n return broken;\r\n }\r\n\r\n export function Wrap(path: string[]): string {\r\n let tmp: string = \"\\\"\";\r\n for (let i = 0; i < path.length; i++) {\r\n let section = path[i];\r\n tmp += section;\r\n if (i < path.length - 1) {\r\n tmp += \"\\\"/\\\"\";\r\n }\r\n }\r\n tmp += \"\\\"\";\r\n return tmp;\r\n }\r\n\r\n export function ParseLegacy(str: string): string[] {\r\n const broken: string[] = str.split(\".\");\r\n for (let i = 0; i < broken.length; i++) {\r\n let piece = broken[0];\r\n if (piece.charAt(0) == \"\\\"\") {\r\n piece = broken[0] = piece.substring(1);\r\n }\r\n if (piece.charAt(piece.length - 1) == \"\\\"\") {\r\n broken[0] = piece.substring(0, piece.length - 1);\r\n }\r\n }\r\n return broken;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Bounds } from \"../common/bounds\";\r\nimport { Carto } from \"../common/carto\";\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\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(entityId: string): 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 };\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 }\r\n\r\n export async function Get(api: BruceApi.Api, entityId: string): Promise<IEntity> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const key = GetCacheKey(entityId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entity/${entityId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetListByIds(api: BruceApi.Api, entityIds: string[]): Promise<IEntity[]> {\r\n if (!entityIds.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n const reqs: Promise<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);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n reqs.push(cacheData);\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 req: Promise<Api.IList<IEntity>> = api.POST(\"entities\", reqData, Api.PrepReqParams());\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<IEntity> = new Promise(async (res) => {\r\n try {\r\n const data = await req;\r\n const item = <IEntity>data.Items.find(x => x.Bruce.ID == entityId);\r\n res(item);\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.Cache.Set(key, prom, Api.DEFAULT_CACHE_DURATION);\r\n reqs.push(prom);\r\n }\r\n }\r\n return (await Promise.all(reqs)).filter(x => !!x);\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, entityId: string): Promise<void> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n\r\n export async function DeleteList(api: BruceApi.Api, entityIds: string[]): Promise<void> {\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());\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IEntity, override: boolean): Promise<IEntity> {\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 data = await api.POST(reqUrl, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(<string>data.Bruce.ID));\r\n return data;\r\n }\r\n\r\n export function RemoveTag(data: IEntity, tagId: number): void {\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(data: IEntity, tagId: number): void {\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(data: IEntity, path: string[], value: any): void {\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(data: IEntity, path: string[]): any {\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 export function CalculateName(entity: IEntity, type: EntityType.IEntityType): string {\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(entity, path);\r\n if (name) {\r\n return name;\r\n }\r\n }\r\n }\r\n return <string>entity.Bruce.ID;\r\n }\r\n\r\n export namespace Filter {\r\n export namespace V1 {\r\n export interface IFilter {\r\n orderBy?: any;\r\n entityTypeId?: string;\r\n layerIds?: number[];\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(api: BruceApi.Api, filter: IFilter): Promise<IEntity[]> {\r\n if (!filter?.entityTypeId) {\r\n throw(\"Entity Type ID is required.\");\r\n }\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 requestFilter[\"Bruce.Layer.ID\"] = {\r\n equals: 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 let url = \"entities\" +\r\n \r\n // Page size and index.\r\n `?PageSize=${filter.pageSize}&PageIndex=${filter.pageIndex}` +\r\n \r\n // Entity type id.\r\n (filter.entityTypeId ? `&BruceEntityType=${filter.entityTypeId}` : \"\") +\r\n \r\n // Lod.\r\n (filter.lodCategoryId ? \"&LODType=\" + filter.lodCategoryId : \"\") +\r\n \r\n // Attribute filter.\r\n (!requestFilter ? \"\" : \"&Filter=\" + Api.Encode(JSON.stringify(requestFilter))) +\r\n \r\n // Order by attribute + sort order.\r\n (!filter.orderBy ? \"\" : \"&OrderBy=\" + filter.orderBy) +\r\n (filter.sortOrder ? `&SortOrder=${filter.sortOrder == Api.ESortOrder.Asc ? \"ASC\" : \"DESC\"}` : \"\");\r\n \r\n const data = await api.GET(url, Api.PrepReqParams());\r\n const entities = data.Items;\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.Cache.Set(GetCacheKey(id), entity, Api.DEFAULT_CACHE_DURATION);\r\n }\r\n return entities;\r\n }\r\n }\r\n\r\n // TODO: Helpers for constructing the filter.\r\n }\r\n}","import { Entity } from \"../entity/entity\";\r\nimport { PathUtils } from \"../util/path-utils\";\r\n\r\nfunction getVariable(str: string): { text: string, path: string } {\r\n const start = str.indexOf(\"${\");\r\n if (start > -1) {\r\n const end = str.indexOf(\"}\");\r\n if (end > -1) {\r\n if (start < end) {\r\n return { path: str.substring(start + 2, end), text: str.substring(start, end) };\r\n }\r\n }\r\n }\r\n return <any>null;\r\n}\r\n\r\n/**\r\n * Utilities for parsing \"Bruce variables\", typically within strings.\r\n * \r\n * A Bruce variable is a string that starts with \"${\" and ends with \"}\".\r\n * Within those brackets is a path to an attribute in an entity.\r\n */\r\nexport namespace BruceVariable {\r\n /**\r\n * Replaces all Bruce variables in a string with the value of the attribute.\r\n * @param str \r\n * @param data \r\n * @param legacyParse \r\n * @returns \r\n */\r\n export function SwapValues(str: string, data: Entity.IEntity, legacyParse?: boolean): string {\r\n if (!legacyParse) {\r\n legacyParse = false;\r\n }\r\n while (true) {\r\n const variable = getVariable(str);\r\n if (variable) {\r\n const path = legacyParse ? PathUtils.ParseLegacy(variable.path) : PathUtils.Parse(variable.path);\r\n let value = \"\";\r\n if (path.length > 0) {\r\n value = Entity.GetValue(data, path);\r\n }\r\n str = str.replace(variable.text, value);\r\n } \r\n else {\r\n break;\r\n }\r\n }\r\n return str;\r\n }\r\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 * Utility for calculating values from Bruce fields.\r\n * These fields are typically found in entity styles.\r\n */\r\nexport namespace Calculator {\r\n export enum EValueType {\r\n Color,\r\n Input,\r\n Gradient,\r\n Mapping,\r\n TagColor,\r\n RandomColor\r\n }\r\n\r\n export interface IMappingOption {\r\n fieldValue: string;\r\n appliedValue: string;\r\n }\r\n\r\n export interface IMappingValue {\r\n field: string;\r\n values: IMappingOption[];\r\n }\r\n\r\n export interface IGradientPoint {\r\n position: number;\r\n color: string;\r\n }\r\n\r\n export interface IGradientValue {\r\n field: string;\r\n min: number;\r\n max: number;\r\n points: IGradientPoint[];\r\n }\r\n\r\n export interface IField {\r\n value: IGradientValue | IMappingValue | string | number;\r\n type: EValueType;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options.\r\n * The context calling this should validate results and parse stuff if needed.\r\n * @param fields \r\n * @param entity \r\n * @param tags \r\n * @returns \r\n */\r\n export function GetValue(fields: IField[], entity: Entity.IEntity, tags: any[]): string | number | Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n if (value) {\r\n value = Color.ColorFromStr(value);\r\n }\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetMappingValue(value: IMappingValue, entity: Entity.IEntity): string | number {\r\n const attrPath: string[] = PathUtils.Parse(value.field);\r\n const eValue: number = +Entity.GetValue(entity, attrPath);\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 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 return <any>null;\r\n }\r\n\r\n export function GetGradientValue(value: IGradientValue, entity: Entity.IEntity): Color.IColor {\r\n const attrPath: string[] = PathUtils.Parse(value.field);\r\n let eValue: any = Entity.GetValue(entity, attrPath);\r\n eValue = Math.min(Math.max(eValue, value.min), value.max);\r\n if (eValue < value.points[0].position) {\r\n return Color.ColorFromStr(value.points[0].color);\r\n }\r\n for (let i = 0; i < value.points.length - 1; i++) {\r\n const pointA = value.points[i];\r\n const pointB = value.points[i+1];\r\n\r\n if (eValue >= pointA.position && eValue <= pointB.position) {\r\n if (pointA.position == pointB.position) {\r\n return Color.ColorFromStr(pointA.color);\r\n }\r\n const distance = (eValue - pointA.position)/(pointB.position - pointA.position);\r\n const colorA = Color.ColorFromStr(pointA.color);\r\n const colorB = Color.ColorFromStr(pointB.color);\r\n return {\r\n red: colorA.red + (colorB.red - colorA.red) * distance,\r\n green: colorA.green + (colorB.green - colorA.green) * distance,\r\n blue: colorA.blue + (colorB.blue - colorA.blue) * distance,\r\n alpha: colorA.alpha + (colorB.alpha - colorA.alpha) * distance\r\n }\r\n }\r\n }\r\n return Color.ColorFromStr(value.points[value.points.length - 1].color);\r\n }\r\n\r\n export function GetInputValue(value: string, entity: Entity.IEntity): string | number {\r\n if (typeof value == \"string\") {\r\n try {\r\n value = BruceVariable.SwapValues(value, entity);\r\n return eval(value);\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\");\r\n }\r\n if (!suppress) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n return <any>value;\r\n }\r\n}","interface IBruceEventCallback {\r\n _id: number;\r\n removeCallback: () => void;\r\n callback: (data: any) => void;\r\n}\r\n\r\n/**\r\n * Simple event utility.\r\n * Instantiate the model, then subscribe and trigger events.\r\n */\r\nexport class BruceEvent<TArgs> {\r\n // Counter to help differentiate subscriptions.\r\n private _counter: number = 0;\r\n\r\n // Record of all callback subscriptions for this event.\r\n private callbacks: IBruceEventCallback[] = [];\r\n\r\n\r\n public Subscribe(callback: (data: TArgs) => void): (() => void) {\r\n let id = this._counter++;\r\n let newBruceEventCallback: IBruceEventCallback = {\r\n \t_id: id,\r\n \tremoveCallback: () => {\r\n \t\tthis.Unsubscribe(id);\r\n \t},\r\n \tcallback: callback\r\n };\r\n this.callbacks.push(newBruceEventCallback);\r\n return newBruceEventCallback.removeCallback;\r\n }\r\n\r\n public Unsubscribe(id: number): void {\r\n let index = this.callbacks.findIndex(x => x._id == id);\r\n if (index > -1) {\r\n this.callbacks.splice(index, 1);\r\n }\r\n }\r\n\r\n public Trigger(data?: TArgs): void {\r\n let callbacks = this.callbacks;\r\n for (let i = 0; i < callbacks.length; i++) {\r\n let callback = callbacks[i];\r\n if (callback.callback) {\r\n callback.callback(data);\r\n }\r\n }\r\n }\r\n\r\n public Clear(): void {\r\n this.callbacks = [];\r\n }\r\n}","export namespace Camera {\r\n export enum EFrustum {\r\n Perspective,\r\n Orthographic\r\n }\r\n}","/**\r\n * Describes 2d and 3d coordinates.\r\n * \r\n * In 2d the x/y typically refers to a window left/top offset.\r\n * In 3d the x/y/z, the units are in meters.\r\n */\r\nexport namespace Cartes {\r\n export interface ICartes2 {\r\n x: number;\r\n y: number;\r\n }\r\n\r\n export interface ICartes3 extends ICartes2 {\r\n z: number;\r\n }\r\n\r\n export function ValidateCartes2(cartes: ICartes2): boolean {\r\n if (!cartes) {\r\n return false;\r\n }\r\n else if (!cartes.x && cartes.x != 0) {\r\n return false;\r\n }\r\n else if (!cartes.y && cartes.y != 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function ValidateCartes3(cartes: ICartes3): boolean {\r\n if (!ValidateCartes2(cartes)) {\r\n return false;\r\n }\r\n else if (!cartes.z && cartes.z != 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function IsEqualCartes2(a: ICartes2, b: ICartes2): boolean {\r\n if (a.x != b.x) {\r\n return false;\r\n }\r\n else if (a.y != b.y) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function IsEqualCartes3(a: ICartes3, b: ICartes3): boolean {\r\n if (!IsEqualCartes2(a, b)) {\r\n return false;\r\n }\r\n else if (a.z != b.z) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n}","/**\r\n * Describes a geographic point.\r\n * The units of the stored data should be in Degrees.\r\n * Utilities may use this in Radians for temporary calculations.\r\n */\r\nexport namespace Carto {\r\n export interface ICarto {\r\n latitude: number;\r\n longitude: number;\r\n altitude: number;\r\n }\r\n\r\n export function ValidateCarto(carto: ICarto): boolean {\r\n if (!carto) {\r\n return false;\r\n }\r\n else if (!carto.longitude && carto.longitude != 0) {\r\n return false;\r\n }\r\n else if (!carto.latitude && carto.latitude != 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function IsEqual(a: ICarto, b: ICarto): boolean {\r\n if (a.longitude != b.longitude) {\r\n return false;\r\n }\r\n else if (a.latitude != b.latitude) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function GetCenter(list: ICarto[]): ICarto {\r\n let center = { \r\n longitude: 0, \r\n latitude: 0, \r\n altitude: 0 \r\n };\r\n for (let i = 0; i < list.length; i++) {\r\n const carto = list[i];\r\n center.longitude += carto.longitude;\r\n center.latitude += carto.latitude;\r\n if (carto.altitude) {\r\n center.altitude += carto.altitude;\r\n }\r\n }\r\n if (center.longitude) {\r\n center.longitude /= list.length;\r\n }\r\n if (center.latitude) {\r\n center.latitude /= list.length;\r\n }\r\n if (center.altitude) {\r\n center.altitude /= list.length;\r\n }\r\n return center;\r\n }\r\n}","/**\r\n * Controls the flow of method calls.\r\n * If you have a method that may be called often, but you don't want it to run often, use this.\r\n */\r\nexport class DelayQueue {\r\n // The callback is the method we want to control queue for.\r\n private callback: () => void;\r\n\r\n // Millisecond delay.\r\n public delay: number = 200;\r\n\r\n // Date-time stamp for the last callback call.\r\n private lastCallTime: number = <any>null;\r\n\r\n // The delay timeout for calling update.\r\n private delayTimeout: any;\r\n\r\n\r\n constructor(callback: () => void, delay: number = 200) {\r\n this.callback = callback;\r\n this.delay = delay;\r\n }\r\n\r\n public Call(force: boolean = false): void {\r\n if (this.lastCallTime == null) {\r\n force = true;\r\n }\r\n if (force) {\r\n let endDate = new Date().getTime();\r\n this.doCall(endDate);\r\n }\r\n else {\r\n const endDate = new Date().getTime();\r\n const seconds = (endDate - this.lastCallTime) / 1000;\r\n const delay = this.delay / 1000;\r\n if (seconds > delay) {\r\n this.doCall(endDate);\r\n }\r\n else if (this.delayTimeout == null) {\r\n const diff = (delay - seconds) * 1000;\r\n this.delayTimeout = setTimeout(() => {\r\n this.delayTimeout = null;\r\n this.Call();\r\n }, diff + 0.02);\r\n }\r\n }\r\n }\r\n\r\n private doCall(endDate: number): void {\r\n if (this.delayTimeout != null) {\r\n clearTimeout(this.delayTimeout);\r\n this.delayTimeout = null;\r\n }\r\n this.lastCallTime = endDate;\r\n this.callback();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.delayTimeout != null) {\r\n clearTimeout(this.delayTimeout);\r\n this.delayTimeout = null;\r\n }\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(data: string): Carto.ICarto[] {\r\n data = data.replace(/[^\\d.,-\\s]/g, \"\");\r\n\r\n let splitterCoordinates = \" \";\r\n let splitterAxis = \",\";\r\n const commaIndex = data.indexOf(\",\");\r\n const spaceIndex = data.indexOf(\" \");\r\n if ((spaceIndex > -1 && commaIndex > spaceIndex) || commaIndex <= -1) {\r\n splitterCoordinates = \",\";\r\n splitterAxis = \" \";\r\n }\r\n\r\n let points = data.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 = +coords[0];\r\n const latitude = +coords[1];\r\n const altitude = 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}","/**\r\n * Describes a Bruce stored date.\r\n */\r\nexport namespace UTC {\r\n export enum EMonth {\r\n January = 1,\r\n February = 2,\r\n March = 3,\r\n April = 4,\r\n May = 5,\r\n June = 6,\r\n July = 7,\r\n August = 8,\r\n September = 9,\r\n October = 10,\r\n November = 11,\r\n December = 12\r\n }\r\n\r\n export interface IUTC {\r\n d: number;\r\n hh: number;\r\n m: EMonth | number;\r\n mm: number;\r\n ss: number;\r\n y: number;\r\n }\r\n\r\n export function ToDate(utc: IUTC): Date {\r\n return new Date(utc.y, utc.m - 1, utc.d, utc.hh, utc.mm, utc.ss, 0);\r\n }\r\n\r\n export function FromDate(date: Date): IUTC {\r\n return {\r\n y: date.getUTCFullYear(),\r\n m: date.getUTCMonth() + 1,\r\n d: date.getUTCDate(),\r\n hh: date.getUTCHours(),\r\n mm: date.getUTCMinutes(),\r\n ss: date.getUTCSeconds()\r\n };\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\ntype Type = EntityAttachmentType.EType | string;\r\n\r\n/**\r\n * Describes the \"Entity Attachment Type\" concept within Bruce.\r\n * It is a record that describes the purpose of an attachment.\r\n */\r\nexport namespace EntityAttachmentType {\r\n export function GetCacheKey(id: Type): string {\r\n return Api.ECacheKey.AttachmentType + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.AttachmentType;\r\n }\r\n\r\n export interface IType {\r\n Description: string;\r\n ID: string | EType;\r\n Name: string;\r\n }\r\n\r\n export enum EType {\r\n Photo = \"photo\",\r\n Document = \"document\"\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, id: Type): Promise<void> {\r\n if (!id) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entityAttachmentType/${id}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IType): Promise<IType> {\r\n if (!data?.ID) {\r\n throw(\"Type ID is required.\");\r\n }\r\n data = await api.POST(`entityAttachmentType/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IType[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IType[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityAttachmentTypes`, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../bruce-models\";\r\nimport { ClientFile } from \"../client-file/client-file\";\r\nimport { EntityAttachmentType } from \"./entity-attachment-type\";\r\n\r\ntype Type = EntityAttachmentType.EType | string;\r\n\r\n/**\r\n * Describes the \"Entity Attachment\" concept within Bruce.\r\n * An entity attachment is an arbitrary file record that is linked to an entity record.\r\n * The same file can be attached to multiple entities.\r\n */\r\nexport namespace EntityAttachment {\r\n export function GetCacheKey(entityId: string, typeId: Type, fileId: string): string {\r\n return Api.ECacheKey.Attachment + Api.ECacheKey.Id + entityId + Api.ECacheKey.Id + typeId + Api.ECacheKey.Id + fileId;\r\n }\r\n\r\n export function GetListCacheKey(entityId: string): string {\r\n return Api.ECacheKey.Attachment + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface IAttachment {\r\n ClientFile: ClientFile.IClientFile;\r\n Group: string;\r\n \"ClientFile.ID\": string;\r\n DisplayOrder: number;\r\n \"Entity.ID\": string;\r\n \"EntityAttachmentType.ID\": Type;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IAttachment): Promise<IAttachment> {\r\n if (!data?.[\"Entity.ID\"] || !data?.[\"EntityAttachmentType.ID\"] || !data?.[\"ClientFile.ID\"]) {\r\n throw(\"Entity ID, Type ID, and File ID are required.\");\r\n }\r\n const url = `entity/${data[\"Entity.ID\"]}/attachment/${data[\"EntityAttachmentType.ID\"]}/${data[\"ClientFile.ID\"]}`;\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data[\"Entity.ID\"], data[\"EntityAttachmentType.ID\"], data[\"ClientFile.ID\"]));\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(data[\"Entity.ID\"]));\r\n return data;\r\n }\r\n\r\n export async function UpdateOrder(api: BruceApi.Api, entityId: string, typeId: Type, fileIds: string[]): Promise<void> {\r\n if (!entityId || !typeId || !fileIds?.length) {\r\n throw(\"Entity ID, Type ID, and File IDs are required.\");\r\n }\r\n const reqData = {\r\n \t\"DisplayOrder.Start\": 0,\r\n \t\"ClientFile.ID\": fileIds\r\n };\r\n await api.POST(`entity/${entityId}/attachments/${typeId}/setOrder`, reqData, Api.PrepReqParams());\r\n for (let i = 0; i < fileIds.length; i++) {\r\n api.Cache.Remove(GetCacheKey(entityId, typeId, fileIds[i]));\r\n }\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, data: IAttachment): Promise<void> {\r\n if (!data?.[\"Entity.ID\"] || !data?.[\"EntityAttachmentType.ID\"] || !data?.[\"ClientFile.ID\"]) {\r\n throw(\"Entity ID, Type ID, and File ID are required.\");\r\n }\r\n const reqData = {\r\n \t\"ClientFile.ID\": [data[\"ClientFile.ID\"]]\r\n };\r\n await api.POST(`entity/${data[\"Entity.ID\"]}/attachments/${data[\"EntityAttachmentType.ID\"]}/delete`, reqData, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data[\"Entity.ID\"], data[\"EntityAttachmentType.ID\"], data[\"ClientFile.ID\"]));\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(data[\"Entity.ID\"]));\r\n }\r\n\r\n export async function DeleteByFileIds(api: BruceApi.Api, entityId: string, typeId: Type, fileIds: string[]): Promise<void> {\r\n if (!entityId || !typeId || !fileIds?.length) {\r\n throw(\"Entity ID, Type ID, and File IDs are required.\");\r\n }\r\n const reqData = {\r\n \t\"ClientFile.ID\": fileIds\r\n };\r\n await api.POST(`entity/${entityId}/attachments/${typeId}/delete`, reqData, Api.PrepReqParams());\r\n for (let i = 0; i < fileIds.length; i++) {\r\n api.Cache.Remove(GetCacheKey(entityId, typeId, fileIds[i]));\r\n }\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\r\n }\r\n\r\n export async function GetListByEntityId(api: BruceApi.Api, entityId: string): Promise<IAttachment[]> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IAttachment[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/attachments`, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityId), req);\r\n return req;\r\n }\r\n\r\n export async function Upload(api: BruceApi.Api, file: Blob, entityId: string, typeId: Type, onProgress?: (e: ProgressEvent) => void): Promise<IAttachment> {\r\n if (!entityId || !typeId || !file) {\r\n throw(\"Entity ID, Type ID, and File are required.\");\r\n }\r\n const url = `entity/${entityId}/attachment/${typeId}`;\r\n const req = await api.UPLOAD(url, file, { onProgress: onProgress });\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, UTC } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"Entity Comment\" concept within Bruce.\r\n * An entity comment is a user written message that is linked to an entity record.\r\n */\r\nexport namespace EntityComment {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.Comment + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(entityId: string): string {\r\n return Api.ECacheKey.Comment + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface IComment {\r\n Comment: string;\r\n \"Created.ByUser.ID\": string;\r\n \"Created.Date\": UTC.IUTC;\r\n ID: number;\r\n RepliesCount: number;\r\n \"ReplyTo.Comment.ID\": number;\r\n \"TargetObject.ID\": string;\r\n \"TargetObject.Type\": string;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IComment): Promise<IComment> {\r\n if (!data?.[\"TargetObject.ID\"]) {\r\n throw(\"TargetObject.ID (entity id) is required.\");\r\n }\r\n const url = `entity/${data[\"TargetObject.ID\"]}/comment` + (data.ID == null ? \"\" : \"/\" + data.ID);\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\r\n return data;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, entityId: string, commentId: number): Promise<void> {\r\n if (!commentId) {\r\n throw(\"Comment ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/comment/${commentId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(commentId));\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\r\n }\r\n\r\n export async function GetListByEntityId(api: BruceApi.Api, entityId: string): Promise<IComment[]> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IComment[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/comments`, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityId), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"Entity Link\" concept within Bruce.\r\n * An entity link is a URL linked to an entity record.\r\n */\r\nexport namespace EntityLink {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.Link + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(entityId: string): string {\r\n return Api.ECacheKey.Link + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface ILink {\r\n DisplayName: string;\r\n ID?: number;\r\n \"Entity.ID\": string;\r\n URL: string;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: ILink): Promise<ILink> {\r\n if (!data?.[\"Entity.ID\"]) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const url = `entity/${data[\"Entity.ID\"]}/link` + (data.ID == null ? \"\" : \"/\" + data.ID);\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(<number>data.ID));\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\r\n return data;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, entityId: string, linkId: number): Promise<void> {\r\n if (!linkId) {\r\n throw(\"Link ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/link/${linkId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(linkId));\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\r\n }\r\n\r\n export async function GetListByEntityId(api: BruceApi.Api, entityId: string): Promise<ILink[]> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<ILink[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/links`, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityId), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ClientFile } from \"../client-file/client-file\";\r\n\r\n/**\r\n * Describes the \"Entity LOD\" concept within Bruce.\r\n * LOD stands for Level of Detail.\r\n * An lod record is a possible 2d/3d visualization of the entity record.\r\n * The most common kind is a GLB.\r\n */\r\nexport namespace EntityLod {\r\n export function GetCacheKey(url: string): string {\r\n return Api.ECacheKey.Lod + Api.ECacheKey.Id + url;\r\n }\r\n\r\n export function GetTypeListKey(typeId: string, group: string): string {\r\n return Api.ECacheKey.Lod + Api.ECacheKey.EntityType + typeId + Api.ECacheKey.Id + group;\r\n }\r\n\r\n export interface ILod {\r\n ClientFile?: ClientFile.IClientFile;\r\n \"ClientFile.ID\": string;\r\n \"Entity.ID\": string;\r\n \"LODCategory.Key\": string;\r\n Level: number;\r\n Group?: string;\r\n }\r\n\r\n export function GetUrl(api: BruceApi.Api, entityId: string, categoryId: string, level: number, strict?: boolean): string {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n if (!categoryId) {\r\n categoryId = \"GLB\";\r\n }\r\n if (!level) {\r\n level = 0;\r\n }\r\n let url: string = api.GetBaseUrl() + `entity/${entityId}/lod/${categoryId}/${level}`;\r\n if (strict) {\r\n url = url + \"?strict=true\";\r\n }\r\n return url;\r\n }\r\n\r\n export async function GetUrlFileId(api: BruceApi.Api, url: string): Promise<string> {\r\n if (!url) {\r\n throw(\"Url is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(url));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<string> = new Promise(async (res, rej) => {\r\n try {\r\n const record: ILod = await api.get(url, Api.PrepReqParams());\r\n res(record[\"ClientFile.ID\"]);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetCacheKey(url), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetLods(api: BruceApi.Api, params: Filter.IListParams): Promise<Filter.IListResItem[]> {\r\n if (!params?.Items?.length) {\r\n throw(\"Items are required.\");\r\n }\r\n const data = await api.POST(\"entity/getlods\", params);\r\n return data.Items;\r\n }\r\n\r\n /**\r\n * Returns lods for a specified entity type.\r\n * @param api \r\n * @param typeId \r\n * @param group default is \"DEFAULT\".\r\n */\r\n export async function GetTypeLods(api: BruceApi.Api, typeId: string, group?: string): Promise<ILod[]> {\r\n if (!group) {\r\n group = \"DEFAULT\";\r\n }\r\n const cacheData = api.Cache.Get(GetTypeListKey(typeId, group));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const url = `entityType/${typeId}/lods?includeClientFiles=yes` + (group ? \"&group=\" + group : \"\");\r\n const req = api.GET(url, Api.PrepReqParams());\r\n const prom: Promise<ILod[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetTypeListKey(typeId, group), prom, Api.DEFAULT_CACHE_DURATION);\r\n return prom;\r\n }\r\n\r\n export namespace Filter {\r\n export interface IListParamsItem {\r\n \"entityId\": string,\r\n \"categoryId\": string,\r\n \"group\"?: string,\r\n \"level\"?: number\r\n }\r\n \r\n export interface IListParams {\r\n \"strict\": boolean,\r\n \"externalSources\": boolean,\r\n \"Items\": IListParamsItem[]\r\n }\r\n \r\n export interface IListResItem {\r\n clientFileId: string;\r\n entityId: string;\r\n accountId: string;\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\n\r\n/**\r\n * Describes the \"Entity Relationship Type\" concept within Bruce.\r\n * A relationship type record describes the purpose of a relationship.\r\n */\r\nexport namespace EntityRelationType {\r\n export function GetCacheKey(id: string): string {\r\n return Api.ECacheKey.RelationType + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.RelationType;\r\n }\r\n\r\n export interface IType {\r\n ID: string;\r\n ForwardName: string;\r\n ReverseName: string;\r\n Name: string;\r\n FlipDisplayDirection?: boolean;\r\n EntityDisplaySettingID?: string;\r\n \"Relation.EntityType.ID\"?: string;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, typeId: string): Promise<IType> {\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const key = GetCacheKey(typeId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entityRelationType/${typeId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, typeId: string): Promise<void> {\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entityRelationType/${typeId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(typeId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IType[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IType[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"entityRelationTypes\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IType): Promise<IType> {\r\n if (!data?.ForwardName || !data?.ReverseName) {\r\n throw(\"Forward and reverse names are required.\");\r\n }\r\n if (!data.ID) {\r\n data.ID = ObjectUtils.UId();\r\n }\r\n data = await api.POST(`entityRelationType/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Entity } from \"./entity\";\r\n\r\n/**\r\n * Describes the \"Entity Relationship\" concept within Bruce.\r\n * An entity relationship is an arbitrary link between two entity records.\r\n * The relationship can have a \"data entity\" linked to it as well for the relationship to store arbitrary data about itself.\r\n */\r\nexport namespace EntityRelation {\r\n export function GetCacheKey(entityA: string, entityB: string, typeId: string): string {\r\n return `${Api.ECacheKey.Relation}${Api.ECacheKey.Id}${entityA}${Api.ECacheKey.Id}${entityB}${Api.ECacheKey.Id}${typeId}`;\r\n }\r\n\r\n export function GetEntityCacheKey(entityId: string): string {\r\n return Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export function GetListCacheKey(entityId: string, params: IListParams): string {\r\n return Api.ECacheKey.Relation + Api.ECacheKey.RelationType + \r\n Api.ECacheKey.Id + params.typeId + \r\n Api.ECacheKey.Id + params.oneWayOnly + \r\n Api.ECacheKey.Id + params.loadEntityData +\r\n Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface IRelation {\r\n \"Principal.Entity.ID\": string;\r\n \"Related.Entity.ID\": string;\r\n RelatedEntity?: Entity.IEntity;\r\n PrincipalEntity?: Entity.IEntity;\r\n \"Relation.Type.ID\": string;\r\n RelationType: any;\r\n \"Data.Entity.ID\"?: string;\r\n }\r\n\r\n export interface IListParams {\r\n typeId?: string;\r\n oneWayOnly?: boolean;\r\n loadEntityData?: boolean;\r\n }\r\n\r\n export async function Create(api: BruceApi.Api, data: IRelation): Promise<void> {\r\n if (!data[\"Principal.Entity.ID\"] || !data[\"Related.Entity.ID\"] || !data[\"Relation.Type.ID\"]) {\r\n throw(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\r\n }\r\n const reqData = {\r\n \"Related.Entity.ID\": [data[\"Related.Entity.ID\"]] \r\n };\r\n const url = `entity/${data[\"Principal.Entity.ID\"]}/relation/${data[\"Relation.Type.ID\"]}/add`;\r\n await api.POST(url, reqData, Api.PrepReqParams());\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + data[\"Relation.Type.ID\"]);\r\n if (data[\"Data.Entity.ID\"]) {\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + data[\"Data.Entity.ID\"]);\r\n }\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IRelation): Promise<IRelation> {\r\n if (!data[\"Principal.Entity.ID\"] || !data[\"Related.Entity.ID\"] || !data[\"Relation.Type.ID\"]) {\r\n throw(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\r\n }\r\n const url = `entity/${data[\"Principal.Entity.ID\"]}/otherEntityID/${data[\"Related.Entity.ID\"]}/relation/${data[\"Relation.Type.ID\"]}/update`;\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + data[\"Relation.Type.ID\"]);\r\n if (data[\"Data.Entity.ID\"]) {\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + data[\"Data.Entity.ID\"]);\r\n }\r\n return data;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, entityId: string, params: IListParams): Promise<IRelation[]> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n params = {\r\n typeId: \"\",\r\n oneWayOnly: false,\r\n loadEntityData: false,\r\n ...params\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityId, params));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IRelation[]> = new Promise(async (res, rej) => {\r\n try {\r\n let url = `entity/${entityId}/relations`;\r\n if (params.typeId) {\r\n url += \"/\" + params.typeId;\r\n }\r\n url += `?Oneway=${params.oneWayOnly}&LoadInfo=${params.loadEntityData}`;\r\n const data = await api.GET(url, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityId, params), req);\r\n return req;\r\n }\r\n\r\n export async function GetByDataEntityId(api: BruceApi.Api, entityId: string): Promise<IRelation> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetEntityCacheKey(entityId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entity/relation/${entityId}/dataentity`, Api.PrepReqParams());\r\n api.Cache.Set(GetEntityCacheKey(entityId), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, IDictionary } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"Entity Source\" concept within Bruce.\r\n * An entity source is a record which links an arbitrary source id to a Bruce entity id.\r\n * For example an OSM building id to a Bruce entity id.\r\n */\r\nexport namespace EntitySource {\r\n export function GetCacheKey(sourceId: number, sourceKey: string): string {\r\n return `${Api.ECacheKey.EntitySource}${Api.ECacheKey.Id}${sourceId}${Api.ECacheKey.Id}${sourceKey}`;\r\n }\r\n\r\n export interface ISource {\r\n \"Entity.ID\": string;\r\n \"Source.ID\": number;\r\n \"SourceRecord.Key\": string;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, sourceId: number, sourceKey: string): Promise<ISource> {\r\n if (!sourceId || !sourceKey) {\r\n throw(\"Source ID and Source Key are required.\");\r\n }\r\n const key = GetCacheKey(sourceId, sourceKey);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entitysource/${sourceId}/${sourceKey}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetListByKeys(api: BruceApi.Api, sourceId: number, sourceKeys: string[]): Promise<ISource[]> {\r\n if (!sourceId || !sourceKeys.length) {\r\n throw(\"Source ID and Source Keys are required.\");\r\n }\r\n const reqKeys: string[] = [];\r\n const reqs: Promise<ISource>[] = [];\r\n for (let i = 0; i < sourceKeys.length; i++) {\r\n const sourceKey = sourceKeys[i];\r\n const cacheData = api.Cache.Get(GetCacheKey(sourceId, sourceKey));\r\n if (cacheData) {\r\n reqs.push(cacheData);\r\n } \r\n else {\r\n reqKeys.push(sourceKey);\r\n }\r\n }\r\n if (reqKeys.length) {\r\n const prom: Promise<ISource[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.POST(`entitysource/${sourceId}`, { SourceRecordKeys: reqKeys }, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n for (let i = 0; i < reqKeys.length; i++) {\r\n const req: Promise<ISource> = new Promise(async (res, rej) => {\r\n try {\r\n const sources = await prom;\r\n res(<ISource>sources.find((s: ISource) => s[\"SourceRecord.Key\"] === reqKeys[i]));\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n reqs.push(req);\r\n }\r\n }\r\n return (await Promise.all(reqs)).filter(x => !!x);\r\n }\r\n\r\n export async function GetEntityIdsBySourceKeys(api: BruceApi.Api, sourceId: number, sourceKeys: string[]): Promise<IDictionary<string>> {\r\n if (!sourceId || !sourceKeys.length) {\r\n throw(\"Source ID and Source Keys are required.\");\r\n }\r\n const result: IDictionary<string> = {};\r\n if (sourceKeys.length > 0) {\r\n const sources = await GetListByKeys(api, sourceId, sourceKeys);\r\n for (let i = 0; i < sources.length; i++) {\r\n const source = sources[i];\r\n for (let i = 0; i < sourceKeys.length; i++) {\r\n const key = sourceKeys[i];\r\n if (key == source[\"SourceRecord.Key\"]) {\r\n result[key] = source[\"Entity.ID\"];\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\n/**\r\n * Describes the \"Entity Tag\" concept within Bruce.\r\n * An entity tag is used to categorize an entity record.\r\n * Entity tags can be used in filters, or to restrict entity access.\r\n */\r\nexport namespace EntityTag {\r\n export function GetCacheKey(tagId: number): string {\r\n return `${Api.ECacheKey.Tag}${Api.ECacheKey.Id}${tagId}`;\r\n }\r\n\r\n export function GetListCacheKey(entityTypeId?: string): string {\r\n if (entityTypeId) {\r\n return Api.ECacheKey.Tag + Api.ECacheKey.EntityType + Api.ECacheKey.Id + entityTypeId;\r\n }\r\n return Api.ECacheKey.Tag;\r\n }\r\n\r\n export interface ITag {\r\n ID: number;\r\n Name?: string;\r\n Description?: string;\r\n IsAccessRestricted?: boolean;\r\n \"EntityType.ID\"?: string;\r\n Color?: string;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, tagId: number): Promise<ITag> {\r\n if (!tagId) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n const data = await GetListByIds(api, [tagId]);\r\n return data.length ? data[0] : <any>null;\r\n }\r\n\r\n export async function GetListByIds(api: BruceApi.Api, tagIds: number[]): Promise<ITag[]> {\r\n if (!tagIds.length) {\r\n throw(\"Tag Ids are empty.\");\r\n }\r\n const reqIds: number[] = [];\r\n const reqs: Promise<ITag>[] = [];\r\n for (let i = 0; i < tagIds.length; i++) {\r\n const tagId = tagIds[i];\r\n const cacheData = api.Cache.Get(GetCacheKey(tagId));\r\n if (cacheData) {\r\n reqs.push(cacheData);\r\n } \r\n else {\r\n reqIds.push(tagId);\r\n }\r\n }\r\n if (reqIds.length) {\r\n const prom: Promise<ITag[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.POST(\"layers/get\", { layerIds: reqIds }, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n for (let i = 0; i < reqIds.length; i++) {\r\n const id = reqIds[i];\r\n const req: Promise<ITag> = new Promise(async (res, rej) => {\r\n try {\r\n const tags = await prom;\r\n const tag = tags.find((t: ITag) => t.ID === id);\r\n res(<ITag>tag);\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n api.Cache.Set(GetCacheKey(id), req, Api.DEFAULT_CACHE_DURATION);\r\n reqs.push(req);\r\n }\r\n }\r\n return (await Promise.all(reqs)).filter(x => !!x);\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, entityTypeId?: string): Promise<ITag[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityTypeId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<ITag[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(entityTypeId ? `entityType/${entityTypeId}/layers` : \"layers\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityTypeId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, tagId: number): Promise<void> {\r\n if (!tagId) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n await api.DELETE(`layer/${tagId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(tagId));\r\n api.Cache.RemoveByStartsWith(GetListCacheKey());\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: ITag): Promise<ITag> {\r\n if (!data?.ID) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n const url = data.ID ? `layer/${data.ID}` : \"layer\";\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.RemoveByStartsWith(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../bruce-models\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\n\r\n/**\r\n * Describes the \"Entity Type\" concept within Bruce.\r\n * An entity type is an \"expectation\" of what data \"should\" look like in a particular entity record.\r\n * The schema is stencils onto entity data to filter out what we should display or search against.\r\n */\r\nexport namespace EntityType {\r\n export function GetCacheKey(typeId: string): string {\r\n return `${Api.ECacheKey.EntityType}${Api.ECacheKey.Id}${typeId}`;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.EntityType;\r\n }\r\n\r\n export interface IEntityType {\r\n ID?: string;\r\n IsDeleted?: boolean;\r\n Name: string;\r\n Description?: string;\r\n Data?: any;\r\n DataSchema?: IAttribute;\r\n DisplayNameAttributePath?: string;\r\n \"DisplaySetting.ID\"?: number;\r\n AuthoringSettings?: {\r\n enabledTools: string[];\r\n defaultTool: string;\r\n };\r\n \"LastUpdate.Time\"?: UTC.IUTC;\r\n \"Parent.EntityType.ID\"?: string;\r\n }\r\n\r\n export interface IAttribute {\r\n Key: string;\r\n Name?: string;\r\n Type?: EAttributeType;\r\n Size?: number;\r\n IsIndexed?: boolean;\r\n IsArray?: boolean;\r\n IsImportant?: boolean;\r\n Description?: string;\r\n Structure?: IAttribute[];\r\n IsFamilyAttribute?: boolean;\r\n IsFamilyAttributeDefault?: boolean;\r\n Sources?: string[];\r\n }\r\n\r\n export enum EAttributeType {\r\n String = \"String\",\r\n Double = \"Double\",\r\n Integer = \"Integer\",\r\n Datetime = \"Datetime\",\r\n Structure = \"Structure\",\r\n Geometry = \"Geometry\"\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, typeId: string): Promise<IEntityType> {\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const key = GetCacheKey(typeId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entitytype/${typeId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, typeId: string): Promise<void> {\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entitytype/${typeId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(typeId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IEntityType[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IEntityType[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"entitytypes\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IEntityType): Promise<IEntityType> {\r\n if (!data) {\r\n data = <any>{};\r\n }\r\n if (!data.ID) {\r\n data.ID = ObjectUtils.UId();\r\n }\r\n if (!data.Name) {\r\n data.Name = data.ID;\r\n }\r\n data = await api.POST(`entitytype/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(<string>data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Bounds, IDictionary } from \"../../bruce-models\";\r\n\r\nclass Cell {\r\n public Fetched: boolean = false;\r\n public IsFetched: () => boolean = <any>null;\r\n public FetchPageIndex: number = 0;\r\n public Boundaries: Bounds.IBounds = <any>null;\r\n\r\n public GetBounds(): Bounds.IReqBounds {\r\n // Entity data works in -180 to 180 range.\r\n function prepareRangeForBounds(range: number): number {\r\n if (range > 180) {\r\n return range - 360;\r\n }\r\n return range;\r\n }\r\n\r\n // Add minor decimal as API crashes when giving it whole numbers.\r\n const maxLon = prepareRangeForBounds(this.Boundaries.maxLongitude) + 0.00001;\r\n const minLon = prepareRangeForBounds(this.Boundaries.minLongitude) - 0.00001;\r\n const maxLat = prepareRangeForBounds(this.Boundaries.maxLatitude) + 0.00001;\r\n const minLat = prepareRangeForBounds(this.Boundaries.minLatitude) - 0.00001;\r\n return {\r\n east: maxLon,\r\n north: maxLat,\r\n south: minLat,\r\n west: minLon\r\n };\r\n }\r\n}\r\n\r\nfunction floorValueToCellSize(size: number, value: number): number {\r\n return Math.floor(value / size) * size;\r\n}\r\n\r\nfunction getCellSizeFromHeight(height: number): number {\r\n if (height < 1000) {\r\n return 0.01;\r\n }\r\n if (height < 5000) {\r\n return 0.025;\r\n }\r\n else if (height < 10000) {\r\n return 0.05;\r\n }\r\n else if (height < 30000) {\r\n return 0.1;\r\n }\r\n else if (height < 70000) {\r\n return 0.2;\r\n }\r\n else if (height < 100000) {\r\n return 0.3;\r\n }\r\n else if (height < 150000) {\r\n return 0.4;\r\n }\r\n else if (height < 200000) {\r\n return 0.5;\r\n }\r\n else if (height < 300000) {\r\n return 0.6;\r\n }\r\n else if (height < 500000) {\r\n return 1;\r\n }\r\n return 1.5;\r\n}\r\n\r\nfunction getCell(cells: IDictionary<Cell>, cellSize: number, lon: number, maxLon: number, lat: number, maxLat: number): Cell {\r\n const id = cellSize + \"_\" + lon + \"_\" + maxLon + \"_\" + lat + \"_\" + maxLat;\r\n return cells[id];\r\n}\r\n\r\nfunction isCellFetched(cell: Cell): boolean {\r\n if (cell.Fetched) {\r\n return true;\r\n }\r\n // TODO: If all cells of the size smaller are fetched then this is fetched.\r\n // TODO: If this is a cell within a larger cell that is fetched then this is fetched.\r\n return false;\r\n}\r\n\r\nfunction getOrCreateCell(cells: IDictionary<Cell>, cellSize: number, lon: number, maxLon: number, lat: number, maxLat: number): Cell {\r\n const id = cellSize + \"_\" + lon + \"_\" + maxLon + \"_\" + lat + \"_\" + maxLat;\r\n let cell = getCell(cells, cellSize, lon, maxLon, lat, maxLat);\r\n if (!cell) {\r\n cell = cells[id] = new Cell();\r\n cell.Boundaries = <Bounds.IBounds>{\r\n minLatitude: lat,\r\n maxLatitude: maxLat,\r\n minLongitude: lon,\r\n maxLongitude: maxLon\r\n };\r\n cell.IsFetched = () => isCellFetched(cell);\r\n }\r\n return cell;\r\n}\r\n\r\n/**\r\n * This is a helper for making entity requests based on a grid area.\r\n * It will return grid cells based on given view-area then will remember when stuff- \r\n * was fully-fetched for those cells to avoid making duplicate requests.\r\n */\r\nexport namespace EntityGlobe {\r\n export class Grid {\r\n private cells: IDictionary<Cell> = {};\r\n \r\n public GetCellsForView(viewRect: Bounds.IReqBounds): Cell[] {\r\n const cells: Cell[] = [];\r\n const minLat = viewRect.south;\r\n const minLon = viewRect.west;\r\n const maxLat = viewRect.north;\r\n const maxLon = viewRect.east;\r\n const MAX_CELLS = 150;\r\n const cellDegreeSize = getCellSizeFromHeight(<number>viewRect.alt);\r\n const curMinLon = floorValueToCellSize(cellDegreeSize, minLon);\r\n const curMinLat = floorValueToCellSize(cellDegreeSize, minLat);\r\n const width = (maxLon - curMinLon) / cellDegreeSize;\r\n const height = (maxLat - curMinLat) / cellDegreeSize;\r\n for (let x = 0; x < width; x++) {\r\n for (let y = 0; y < height; y++) {\r\n const lon = x * cellDegreeSize + curMinLon;\r\n const lat = y * cellDegreeSize + curMinLat;\r\n const cell = getOrCreateCell(this.cells, cellDegreeSize, lon, lon + cellDegreeSize, lat, lat + cellDegreeSize);\r\n cells.push(cell);\r\n if (cells.length > MAX_CELLS) {\r\n break;\r\n }\r\n }\r\n }\r\n return cells;\r\n }\r\n }\r\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 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 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 \r\n constructor(api: BruceApi.Api, viewPort: ViewMonitor.IMonitor, typeId: string, batchSize: number, attrFilter: IDictionary<any>) {\r\n this.api = api;\r\n this.typeId = typeId;\r\n this.batchSize = batchSize;\r\n this.viewPort = viewPort;\r\n this.attrFilter = attrFilter;\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 \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 \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.viewRect);\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 while (retryAttempts > 0 && curCellIndex != null) {\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n if (retryDelay > 0) {\r\n await delay(retryDelay);\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 curCellIndex += 1;\r\n if (!cells[curCellIndex]) {\r\n curCellIndex = null;\r\n }\r\n continue;\r\n }\r\n \r\n try {\r\n const page = await Entity.Filter.V1.GetList(this.api,\r\n {\r\n pageSize: PAGE_SIZE,\r\n pageIndex : curCell.FetchPageIndex,\r\n entityTypeId: this.typeId,\r\n layerIds: this.tagIds,\r\n bounds: curCell.GetBounds(),\r\n sortOrder: Api.ESortOrder.Asc,\r\n entityTypeConditions: this.attrFilter\r\n }\r\n );\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n if (page) {\r\n this.onUpdate?.Trigger(page);\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 if (page.length <= 0 ) {\r\n curCell.Fetched = true; // Only mark as fetched when ALL pages are done.\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 (page.length > 0) {\r\n const first = page[0]?.Bruce?.ID;\r\n const last = page[page.length - 1]?.Bruce?.ID;\r\n if (prevFirstId == first && prevLastId == last) {\r\n break;\r\n }\r\n else {\r\n prevFirstId = <string>first;\r\n prevLastId = <string>last;\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.log(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\";\r\nimport { BruceEvent } from \"../../common/bruce-event\";\r\nimport { Carto } from \"../../common/carto\";\r\nimport { ViewMonitor } from \"./view-monitor\";\r\n\r\nconst MAX_AREA_IN_DEGREES = 90;\r\nconst GETTER_DELAY = 50;\r\n\r\n/**\r\n * This is a batched \"arbitrary data\" getter.\r\n * You feed it an array of data, then it will emit that data in batches when the view changes.\r\n */\r\nexport namespace BatchedDataGetter {\r\n export class Getter<T> {\r\n private viewPort: ViewMonitor.IMonitor\r\n private viewPortRemoval: () => void = <any>null;\r\n \r\n private batchSize: number;\r\n private viewRect: Bounds.IReqBounds = <any>null;\r\n private viewCenter: Carto.ICarto = <any>null;\r\n private getterInterval: any;\r\n private data: T[];\r\n \r\n private onUpdate: BruceEvent<T[]> = <any>null;\r\n public get OnUpdate(): BruceEvent<T[]> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<T[]>();\r\n }\r\n return this.onUpdate;\r\n }\r\n \r\n \r\n public constructor(data: T[], viewPort: ViewMonitor.IMonitor, batchSize: number) {\r\n this.data = data;\r\n this.viewPort = viewPort;\r\n this.batchSize = batchSize;\r\n this.viewPortRemoval = this.viewPort.Updated().Subscribe(() => {\r\n this.updateBounds();\r\n this.startGetterLoop();\r\n });\r\n }\r\n \r\n public Dispose(): void {\r\n this.viewPortRemoval?.();\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 startGetterLoop(): void {\r\n clearInterval(this.getterInterval);\r\n if (!this.viewRect || !this.viewCenter) {\r\n return;\r\n }\r\n let index = 0;\r\n this.getterInterval = setInterval(() => {\r\n this.processBatch(this.data.slice(index, index + this.batchSize));\r\n index += this.batchSize;\r\n if (index >= this.data.length) {\r\n clearInterval(this.getterInterval);\r\n }\r\n }, GETTER_DELAY);\r\n }\r\n \r\n private processBatch(batch: T[]): void {\r\n if (batch.length > 0) {\r\n this.onUpdate?.Trigger(batch);\r\n }\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, IDictionary } from \"../bruce-models\";\r\nimport { UTC } from \"../common/utc\";\r\n\r\n/**\r\n * Describes the \"Client File\" concept within Bruce.\r\n * A client file is a record of a file uploaded to Bruce.\r\n */\r\nexport namespace ClientFile {\r\n export function GetCacheKey(fileId: string): string {\r\n return `${Api.ECacheKey.ClientFile}${Api.ECacheKey.Id}${fileId}`;\r\n }\r\n\r\n export interface IClientFile {\r\n UploadedTimeUTC: UTC.IUTC;\r\n FileExt: string;\r\n ID: string;\r\n MIMEType: string;\r\n OriginalFileName: string;\r\n OriginalLength: number;\r\n \"UploadedByUser.ID\": string;\r\n Purpose: string;\r\n }\r\n\r\n export function GetUrl(api: BruceApi.Api, fileId: string): string {\r\n return `${api.GetBaseUrl()}/file/${fileId}`;\r\n }\r\n\r\n export function GetUrlWithExt(api: BruceApi.Api, file: IClientFile): string {\r\n return `${api.GetBaseUrl()}/file/${file.ID}${file.FileExt ? file.FileExt : \"\"}`;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, fileId: string): Promise<IClientFile> {\r\n if (!fileId) {\r\n throw(\"File ID is required.\");\r\n }\r\n const key = GetCacheKey(fileId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`file/${fileId}/details`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, fileIds: string[]): Promise<void> {\r\n if (!fileIds.length) {\r\n throw(\"File IDs are required.\");\r\n }\r\n const data = {\r\n Items: fileIds\r\n };\r\n await api.POST(\"deleteFiles\", data, Api.PrepReqParams());\r\n for (let i = 0; i < fileIds.length; i++) {\r\n const key = GetCacheKey(fileIds[i]);\r\n api.Cache.Remove(key);\r\n }\r\n }\r\n\r\n export async function Upload(api: BruceApi.Api, file: Blob, purpose?: string, onProgress?: (e: ProgressEvent) => void): Promise<IClientFile> {\r\n if (!file) {\r\n throw(\"File is required.\");\r\n }\r\n let formData: IDictionary<string> = <any>null;\r\n if (purpose) {\r\n formData = {\r\n \"Purpose\": purpose\r\n };\r\n }\r\n return api.UPLOAD(\"file/uploadNew\", file, { onProgress: onProgress, formData: formData });\r\n }\r\n\r\n export namespace Filter {\r\n export namespace V1 {\r\n export enum EColumn {\r\n ID = \"id\",\r\n Name = \"name\",\r\n DateTime = \"datetime\",\r\n MIMEType = \"mimeType\",\r\n Size = \"size\",\r\n User = \"user\",\r\n Extension = \"extension\"\r\n }\r\n \r\n export enum ESortOrder {\r\n ASC = \"asc\",\r\n DEC = \"desc\"\r\n }\r\n\r\n export enum ERowOperator {\r\n AND = \"AND\",\r\n OR = \"OR\"\r\n }\r\n\r\n export interface IRow {\r\n column: EColumn;\r\n value: any;\r\n valueOperator: string;\r\n includes: boolean;\r\n rowOperator: ERowOperator;\r\n rows?: IRow[];\r\n }\r\n\r\n export interface IFilter {\r\n PageSize?: number;\r\n PageIndex?: number;\r\n OrderBy?: EColumn;\r\n SortOrder?: ESortOrder;\r\n Purpose?: string;\r\n FilterRows?: IRow[];\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, filter: IFilter): Promise<IClientFile[]> {\r\n const data = await api.POST(\"files/filtered\", filter, Api.PrepReqParams());\r\n return data.Items;\r\n }\r\n }\r\n\r\n\r\n // TODO: Helpers for constructing the filter.\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\ntype Id = ProgramKey.EProgramId | string;\r\n\r\n/**\r\n * Describes the \"Program Key\" concept within Bruce.\r\n * A program key is an access token for an arbitrary software.\r\n */\r\nexport namespace ProgramKey {\r\n export function GetCacheKey(programId: string): string {\r\n return Api.ECacheKey.ProgramKey + Api.ECacheKey.Id + programId;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.ProgramKey;\r\n }\r\n\r\n export enum EProgramId {\r\n CesiumIon = \"CesiumIon\",\r\n BingMaps = \"BingMaps\",\r\n Mapbox = \"Mapbox\"\r\n }\r\n\r\n export interface IKey {\r\n ProgramId: Id;\r\n Key: string;\r\n IsAccessRestricted?: boolean;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, programId: Id): Promise<IKey> {\r\n if (!programId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n const key = GetCacheKey(programId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`programkey/${programId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IKey[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IKey[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"programkeys\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, programId: Id): Promise<void> {\r\n if (!programId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n await api.DELETE(`programkey/${programId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(programId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IKey): Promise<IKey> {\r\n if (!data?.ProgramId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n data = await api.POST(\"programkey\", data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ProgramId));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Style } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes an expectation on what should be rendered for a menu item-\r\n * between a min-max distance of an entity to the camera.\r\n */\r\nexport namespace ZoomControl {\r\n export enum EDisplayType {\r\n Hidden = \"hidden\",\r\n Point = \"point\",\r\n Geometry = \"geometry\",\r\n Model3D = \"3d\"\r\n }\r\n\r\n export interface IItem {\r\n MinZoom?: number,\r\n MaxZoom?: number,\r\n DisplayType?: EDisplayType,\r\n StyleID?: number,\r\n Style?: Style.IEntitySettings;\r\n LODCategoryID?: string,\r\n LODLevel?: number | string;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { TilesetPointcloud } from \"./tileset-pointcloud\";\r\nimport { TilesetCad } from \"./tileset-cad\";\r\nimport { TilesetEntitiesMapTiles } from \"./tileset-entities-map-tiles\";\r\nimport { TilesetEntities } from \"./tileset-entities\";\r\nimport { TilesetExtMapTiles } from \"./tileset-ext-map-tiles\";\r\nimport { TilesetExtTerrainTiles } from \"./tileset-ext-terrain-tiles\";\r\nimport { TilesetMapTiles } from \"./tileset-map-tiles\";\r\nimport { TilesetTerrainTiles } from \"./tileset-terrain-tiles\";\r\nimport { PendingAction } from \"../server/pending-action\";\r\nimport { GlobalApi } from \"../api/global-api\";\r\n\r\ntype Settings = TilesetPointcloud.ISettings | \r\n TilesetCad.ISettings | \r\n TilesetEntitiesMapTiles.ISettings | \r\n TilesetEntities.ISettings | \r\n TilesetExtMapTiles.ISettings | \r\n TilesetExtTerrainTiles.ISettings | \r\n TilesetMapTiles.ISettings | \r\n TilesetTerrainTiles.ISettings;\r\n\r\n/**\r\n * Describes the \"Tileset\" concept in Bruce.\r\n * \r\n * Tilesets come in three possible variants,\r\n * 1- A set of instructions to generate a tileset.\r\n * 2- Settings to load a tileset hosted elsewhere.\r\n * 3- A set of user-provided files to serve.\r\n * \r\n * Read the individual tileset-type settings for each variant.\r\n */\r\nexport namespace Tileset {\r\n export function GetCacheKey(tilesetId: string, loadFiles: boolean): string {\r\n return `${Api.ECacheKey.Tileset}${Api.ECacheKey.Id}${tilesetId}${Api.ECacheKey.Id}${loadFiles}`;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.Tileset;\r\n }\r\n\r\n export interface ITileset {\r\n id: string;\r\n name: string;\r\n type: EType;\r\n rootFileName?: string;\r\n settings?: Settings;\r\n fileIds?: string[];\r\n creationTime?: UTC.IUTC;\r\n modificationTime?: UTC.IUTC;\r\n generateVersion?: number;\r\n isDeleteDisabled?: boolean;\r\n }\r\n\r\n export enum EType {\r\n PointCloud = \"POINT_CLOUD\",\r\n GeoMap = \"GEO_MAP\", // Previously gtfRasterMaps.\r\n EntitiesMap = \"ENTITIES_MAP\", // Previously rasterMap.\r\n EntitiesSet = \"ENTITIES_SET\", // Previously dynamic.\r\n Cad = \"MODEL\", // Generated CAD tileset from entity id.\r\n Terrain = \"GEO_TERR\",\r\n ExternalTerrain = \"EXTERNAL_TERR\",\r\n ExternalGeoMap = \"EXTERNAL_MAP\"\r\n }\r\n\r\n export enum EPivot {\r\n None = \"none\",\r\n Box = \"box\", \r\n Weight = \"weight\",\r\n UCS = \"ucs\"\r\n }\r\n\r\n export interface ITransform {\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n scale: number;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, tilesetId: string, loadFiles: boolean = false): Promise<ITileset> {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(tilesetId, loadFiles));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`tileset/get/${tilesetId}?noFiles=${loadFiles ? 0 : 1}`);\r\n api.Cache.Set(GetCacheKey(tilesetId, loadFiles), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<ITileset[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<ITileset[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"tileset/getList\")\r\n res(data);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, tilesetId: string): Promise<void> {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n await api.DELETE(`tileset/delete/${tilesetId}`);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + tilesetId);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: ITileset): Promise<ITileset> {\r\n if (!data?.name || !data?.type) {\r\n throw(\"Tileset name and type are required.\");\r\n }\r\n let isNew = !data.id;\r\n if (isNew) {\r\n const res: ITileset = await api.GET(`tileset/new?type=${data.type}&name=${Api.Encode(data.name)}`);\r\n data = {\r\n ...data,\r\n ...res\r\n }\r\n }\r\n data = await api.POST(`tileset`, data);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + data.id);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\r\n return data;\r\n }\r\n\r\n export async function UploadFile(api: BruceApi.Api, tilesetId: string, file: Blob, onProgress?: (e: ProgressEvent) => void): Promise<void> {\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n return api.UPLOAD(`tileset/uploadFile/${tilesetId}/files`, file, { onProgress: onProgress });\r\n }\r\n\r\n export async function DeleteFile(api: BruceApi.Api, tilesetId: string, file: string): Promise<void> {\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n await api.DELETE(`tileset/deleteFile/${tilesetId}/files/${file}`);\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export async function UploadSrcFile(api: BruceApi.Api, tilesetId: string, file: Blob, onProgress?: (e: ProgressEvent) => void): Promise<void> {\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/src`, file, { onProgress: onProgress });\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export async function DeleteSrcFile(api: BruceApi.Api, tilesetId: string, file: string): Promise<void> {\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n await api.DELETE(`tileset/deleteFile/${tilesetId}/src/${file}`);\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export function GetFileUrl(api: BruceApi.Api, tilesetId: string, file: string): string {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n if (!file) {\r\n file = \"\";\r\n }\r\n return api.GetBaseUrl() + `tileset/getFile/${tilesetId}/files/${file}`;\r\n }\r\n\r\n export function GetSrcFileUrl(api: BruceApi.Api, tilesetId: string, file: string): string {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n if (!file) {\r\n file = \"\";\r\n }\r\n return api.GetBaseUrl() + `tileset/getFile/${tilesetId}/src/${file}`;\r\n }\r\n\r\n export function GetPublicFileUrl(api: BruceApi.Api, tilesetId: string, file: string): string {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n if (!file) {\r\n file = \"\";\r\n }\r\n return api.GetBaseUrl() + `tileset/file/${tilesetId}/${file}`;\r\n }\r\n\r\n export async function Generate(api: BruceApi.Api, tilesetId: string): Promise<number> {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n const res: PendingAction.IAction = await api.GET(`tileset/generate/${tilesetId}`);\r\n return res.ID;\r\n }\r\n\r\n export namespace Publish {\r\n export function GetCacheKey(accountId: string, tilesetId?: string): string {\r\n if (!tilesetId) {\r\n tilesetId = \"\";\r\n }\r\n return Api.ECacheKey.PublishTileset + Api.ECacheKey.Id + accountId + Api.ECacheKey.Id + tilesetId;\r\n }\r\n\r\n export interface IPublish {\r\n ID?: number;\r\n \"Tileset.ID\"?: string;\r\n \"PublishedBy.ClientAccount.ID\"?: string;\r\n \"PublishedBy.User.ID\"?: string;\r\n \"Published.DateTime\"?: UTC.IUTC;\r\n IsPublic: boolean;\r\n \"EnabledFor.ClientAccount.ID\"?: string[];\r\n }\r\n\r\n export async function Update(api: GlobalApi.Api, data: IPublish): Promise<IPublish> {\r\n if (!data?.[\"Tileset.ID\"] || !data?.[\"PublishedBy.ClientAccount.ID\"] || !data?.[\"PublishedBy.User.ID\"]) {\r\n throw(\"Tileset ID, client account ID, and user ID are required.\");\r\n }\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n const res: IPublish = await api.POST(`tileset/${data.ID}`, data);\r\n const req = {\r\n \"ClientAccount.ID\": data[\"EnabledFor.ClientAccount.ID\"]\r\n };\r\n data.ID = res.ID;\r\n await api.POST(`tileset/${data.ID}/enableForAccounts`, req);\r\n api.Cache.Remove(GetCacheKey(data[\"PublishedBy.ClientAccount.ID\"], data[\"Tileset.ID\"]));\r\n api.Cache.Remove(GetCacheKey(data[\"PublishedBy.ClientAccount.ID\"]));\r\n return data;\r\n }\r\n\r\n export async function Get(api: GlobalApi.Api, accountId: string, tilesetId: string): Promise<IPublish> {\r\n if (!accountId || !tilesetId) {\r\n throw(\"Client account ID and tileset ID are required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(accountId, tilesetId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`tilesetByPublisher/${accountId}/${tilesetId}`);\r\n api.Cache.Set(GetCacheKey(accountId, tilesetId), req);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: GlobalApi.Api, accountId: string): Promise<IPublish[]> {\r\n if (!accountId) {\r\n throw(\"Client account ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IPublish[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`tilesets/enabledForAccount/${accountId}`);\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetCacheKey(accountId), req);\r\n return req;\r\n }\r\n }\r\n}","import { 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 = \"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 }\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 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 LabelColor?: string;\r\n renderPriority?: number;\r\n }\r\n\r\n export function CreateFromEntityId(entityId: string, typeId: string, styleId?: number): IItem {\r\n return <Item.IBruceEntity>{\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: 8000,\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.IBruceEntities>{\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: 8000,\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 export interface IBruceEntities extends IItem {\r\n BruceEntity: {\r\n \"EntityType.ID\": string;\r\n // Optional \r\n Filter?: Entity.Filter.V1.IFilter;\r\n };\r\n CameraZoomSettings: ZoomControl.IItem[];\r\n showAllLayers: boolean;\r\n showAllLayersExcludeBelow: boolean;\r\n tagIds: number[];\r\n }\r\n \r\n export interface IBruceEntity extends IItem {\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 tagIds: number[];\r\n }\r\n \r\n export interface IArbTileset extends IItem {\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 }\r\n \r\n export interface ICadTileset extends IItem {\r\n FlyTo: boolean;\r\n tileset: ITileset;\r\n StyleMapping?: any[];\r\n styleId?: number;\r\n }\r\n \r\n export interface IPointcloud extends IItem {\r\n FlyTo: boolean;\r\n tileset: ITileset;\r\n }\r\n \r\n export interface IEntitiesRaster extends IItem {\r\n tileset: ITileset;\r\n }\r\n \r\n export interface IOsm extends IItem {\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 KML: {\r\n ClientFile: {\r\n ID: string;\r\n }\r\n }\r\n }\r\n \r\n export interface IEntitiesTileset extends IItem {\r\n FlyTo: boolean;\r\n tileset: ITileset;\r\n }\r\n\r\n export interface IEntitiesLoaded extends MenuItem.IItem {\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 BruceEntity: {\r\n EntityIds: string[];\r\n };\r\n CameraZoomSettings: ZoomControl.IItem[];\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 { UTC } from \"../common/utc\";\r\nimport { Markup } from \"../markup/markup\";\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 export interface IBookmarkSettings {\r\n selectedItemIds?: string[];\r\n order?: number;\r\n hiddenEntityIds?: string[];\r\n drawnRelationEntityIDs?: string[];\r\n imagery?: any[];\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 export interface IBookmark {\r\n ID?: string;\r\n Camera?: any;\r\n \"Created.ByUser.ID\"?: string;\r\n \"Created.Date\"?: UTC.IUTC;\r\n Note?: string;\r\n Settings?: IBookmarkSettings;\r\n Title?: string;\r\n \"UI.View.ID\"?: string;\r\n DisplayOrder?: number;\r\n \"Screenshot.ClientFile.ID\"?: string;\r\n \"UI.SlideGroup.ID\"?: number;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, viewId: string, bookmarkId: string): Promise<IBookmark> {\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 cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, viewId: string, bookmarkId: string): Promise<void> {\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());\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(api: BruceApi.Api, viewId: string): Promise<IBookmark[]> {\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(viewId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IBookmark[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slides`, Api.PrepReqParams());;\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(viewId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, viewId: string, data: IBookmark): Promise<IBookmark> {\r\n if (!data?.Title) {\r\n data.Title = data.ID;\r\n }\r\n data = await api.POST(`ui.view/${viewId}/slide/${data.ID ? data.ID : \"\"}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(viewId, <string>data.ID));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n return data;\r\n }\r\n\r\n export async function SetOrder(api: BruceApi.Api, viewId: string, bookmarkIds: string[]): Promise<void> {\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());\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(viewId));\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { MenuItem } from \"./menu-item\";\r\nimport { ProjectViewTileSource } from \"./project-view-tile-source\";\r\n\r\n/**\r\n * Describes the \"Project View\" concept within Bruce.\r\n * A project view is a collection of settings for a visualization application we support.\r\n * It will describe what panels to show and how, it will also describe all possible ways data can be displayed.\r\n */\r\nexport namespace ProjectView {\r\n export function GetCacheKey(viewId: string): string {\r\n return `${Api.ECacheKey.ProjectView}${Api.ECacheKey.Id}${viewId}`;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.ProjectView;\r\n }\r\n\r\n export interface IView {\r\n ID?: string;\r\n Name: string;\r\n Description?: string;\r\n Feature?: string[];\r\n \"CreatedByUser.ID\"?: string;\r\n CreatedTime?: UTC.IUTC;\r\n Settings?: IViewSettings;\r\n DefaultUISlideID?: string;\r\n CreatedByUIVersion?: string;\r\n }\r\n\r\n export interface IShadowSettings {\r\n IsShadowEnabled: boolean;\r\n IsShadowSoft: boolean;\r\n ShadowSampleSize: number;\r\n }\r\n\r\n export interface IViewSettings {\r\n BookmarkTransitionSpeed: number;\r\n Camera: any;\r\n CameraFrustum: number;\r\n CesiumMapSources: ProjectViewTileSource.IMapSource[];\r\n CesiumTerrainSources: ProjectViewTileSource.ITerrainSource[];\r\n ControlsSettings: any;\r\n DefaultMapTiles: string;\r\n DefaultTerrain: string;\r\n DisplayTimeline: boolean;\r\n GroundOcclusion: boolean;\r\n Extensions: any;\r\n GlobeColor: string;\r\n SelectionHighlightColor?: string;\r\n LayersMenu?: MenuItem.IItem[];\r\n OASettings?: any;\r\n LogoImage: any;\r\n LegendImage: any;\r\n IsRestricted: boolean;\r\n IsLoginRequired: boolean;\r\n TilesetBackfaceCulling: boolean;\r\n TopPanelComponents?: string[];\r\n LeftPanelComponents?: string[];\r\n PostProcessFXAA?: boolean;\r\n Shadows: boolean;\r\n Shadow: {\r\n StaticCamera: IShadowSettings;\r\n MovingCamera: IShadowSettings;\r\n }\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, viewId: string): Promise<IView> {\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const key = GetCacheKey(viewId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`ui.view/${viewId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IView[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IView[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.view/list\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, viewId: string): Promise<void> {\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n await api.DELETE(`ui.view/${viewId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(viewId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IView): Promise<IView> {\r\n if (!data) {\r\n data = <any>{};\r\n }\r\n const isNew = !data.ID;\r\n if (!data.ID) {\r\n data.ID = ObjectUtils.UId();\r\n }\r\n if (!data.Name) {\r\n data.Name = data.ID;\r\n }\r\n if (!data.CreatedByUIVersion) {\r\n data.CreatedByUIVersion = \"-1\";\r\n }\r\n if (isNew) {\r\n data = await api.POST(`ui.view/${data.ID}`, data, Api.PrepReqParams());\r\n }\r\n else {\r\n data = await api.PUT(`ui.view/${data.ID}`, data, Api.PrepReqParams());\r\n }\r\n api.Cache.Remove(GetCacheKey(<string>data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ProjectView } from \"./project-view\";\r\n\r\nasync function getTemplateSettings(apiGetter: BruceApi.IGetter): Promise<ProjectView.IViewSettings> {\r\n const view = await ProjectView.Get(apiGetter.getApi(Api.TEMPLATE_ACCOUNT_ID, apiGetter.env), \"default\");\r\n return view.Settings ?? <ProjectView.IViewSettings>{};\r\n}\r\n\r\nfunction checkSourceToTemplate(items: ProjectViewTileSource.ISource[], templateItem: ProjectViewTileSource.ISource, addIfMissing: boolean): void {\r\n const index = items.findIndex(x => x.Name === templateItem.Name);\r\n if (index > -1) {\r\n templateItem.IsDefault = true;\r\n templateItem.IsEnabled = items[index].IsEnabled;\r\n items[index] = templateItem;\r\n }\r\n else if (addIfMissing) {\r\n templateItem.IsDefault = true;\r\n items.push(templateItem);\r\n }\r\n}\r\n\r\n/**\r\n * Describes a terrain or map source that are found in project view records.\r\n * This is a concept we want to trash as we're moving towards storing tileset ids instead.\r\n * This will help at least understand and manage this dying concept.\r\n */\r\nexport namespace ProjectViewTileSource {\r\n export interface ISource {\r\n SourceUrl?: string;\r\n IsEnabled?: boolean;\r\n IsDefault?: boolean;\r\n Name: string;\r\n Tooltip?: string;\r\n IconUrl?: string;\r\n }\r\n\r\n export interface IMapSource extends ISource {\r\n SourceUrl?: string;\r\n IonAssetID?: number,\r\n MapBoxID?: string;\r\n MapBoxUsername?: string;\r\n ProgramKey?: string;\r\n FileExtension?: string,\r\n Minimum?: number;\r\n Maximum?: number;\r\n Type?: string;\r\n }\r\n\r\n export interface ITerrainSource extends ISource {\r\n RequestWaterMask?: boolean;\r\n RequestVertexNormals?: boolean;\r\n }\r\n\r\n export async function MergeMapTemplateData(getter: BruceApi.IGetter, items: IMapSource[], addIfMissing: boolean): Promise<IMapSource[]> {\r\n const settings = await getTemplateSettings(getter);\r\n const maps = settings.CesiumMapSources ?? [];\r\n for (let i = 0; i < maps.length; i++) {\r\n const mapSource = maps[i];\r\n checkSourceToTemplate(items, mapSource, addIfMissing);\r\n }\r\n return [];\r\n }\r\n\r\n export async function MergeTerrainTemplateData(getter: BruceApi.IGetter, items: ITerrainSource[], addIfMissing: boolean): Promise<IMapSource[]> {\r\n const settings = await getTemplateSettings(getter);\r\n const terrains = settings.CesiumTerrainSources ?? [];\r\n for (let i = 0; i < terrains.length; i++) {\r\n const terrainSource = terrains[i];\r\n checkSourceToTemplate(items, terrainSource, addIfMissing);\r\n }\r\n return [];\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, UTC } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"Pending Action\" concept within Bruce.\r\n * A pending action is a record of a server-side background process.\r\n * This record is used to monitor its progress and completion state.\r\n */\r\nexport namespace PendingAction {\r\n export interface IAction {\r\n ID: number;\r\n \"CreatedBy.Application\": string;\r\n \"Created.Time\": UTC.IUTC;\r\n \"CreatedByUser.ID\": string;\r\n Result: string;\r\n Progress: number;\r\n \"Completed.Time\": UTC.IUTC;\r\n Description: string;\r\n Status: EStatus;\r\n lastUpdated: UTC.IUTC;\r\n }\r\n\r\n export enum EStatus {\r\n InProgress = \"IN_PROGRESS\",\r\n Cancelled = \"CANCELLED\",\r\n Complete = \"COMPLETE\",\r\n Failed = \"FAILED\"\r\n }\r\n\r\n export interface IMessage {\r\n \"PendingAction.ID\": number;\r\n ID: number;\r\n \"CreatedBy.Application\": string;\r\n \"Created.Time\": UTC.IUTC;\r\n \"Message.Type\": string;\r\n Message: string;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, actionId: number): Promise<IAction> {\r\n if (!actionId) {\r\n throw(\"Action ID is required.\");\r\n }\r\n return api.GET(`pendingAction/${actionId}`, Api.PrepReqParams());\r\n }\r\n\r\n export async function GetRelevantList(api: BruceApi.Api, stricter: boolean = false): Promise<IAction[]> {\r\n const data = await api.GET(`pendingActions/important?Update=${stricter}`, Api.PrepReqParams());\r\n return data.Items;\r\n }\r\n\r\n export async function GetMessages(api: BruceApi.Api, actionId: number, order?: Api.ESortOrder, startIndex?: number, amount?: number): Promise<IMessage[]> {\r\n if (amount == null) {\r\n amount = 500;\r\n }\r\n if (startIndex == null) {\r\n startIndex = 0;\r\n }\r\n if (order == null) {\r\n order = Api.ESortOrder.Asc;\r\n }\r\n const args = `?SortOrder=${order == Api.ESortOrder.Desc ? \"DESC\" : \"ASC\"}&PageSize=${amount}&PageIndex=${startIndex}`; \r\n const data = await api.GET(`pendingAction/${actionId}/progressMessages` + args, Api.PrepReqParams());\r\n return data.Items;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, Calculator } from \"../bruce-models\";\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 ClusterNearbyEntities?: boolean;\r\n MinimumEntitiesCountForClustering?: Calculator.IField[];\r\n Type: EPointType;\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 }\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 altitudeOption?: any;\r\n zIndex?: Calculator.IField[];\r\n }\r\n\r\n export interface IPolylineSettings {\r\n lineColor: Calculator.IField[];\r\n lineWidth: Calculator.IField[];\r\n altitudeOption?: any;\r\n zIndex?: Calculator.IField[];\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 function GetList(api: BruceApi.Api): Promise<IStyle[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IStyle[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.entityDisplaySettings\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export function Get(api: BruceApi.Api, id: number): Promise<IStyle> {\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(id));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams());\r\n api.Cache.Set(GetCacheKey(id), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IStyle): Promise<IStyle> {\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 data = await api.POST(`ui.entityDisplaySetting/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, id: number): Promise<void> {\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n await api.DELETE(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n}","import { Bounds } from \"../common/bounds\";\r\n\r\n/**\r\n * Describes expected settings for an entities-map tileset.\r\n * This is the kind of tileset generated from arbitrary Bruce entities- \r\n * which produced map tiles of the entity vector geometry.\r\n */\r\nexport namespace TilesetEntitiesMapTiles {\r\n export enum ETileSize {\r\n IMG_256 = 256,\r\n IMG_512 = 512,\r\n IMG_1024 = 1024,\r\n IMG_2048 = 2048\r\n }\r\n\r\n export interface ISettings {\r\n imageSize: ETileSize;\r\n levelMin: number;\r\n levelMax: number;\r\n entityTypeId: string;\r\n styleId: number;\r\n filter: any;\r\n boundaries: Bounds.IBounds;\r\n }\r\n}","/**\r\n * Describes settings for an external map-tiles tileset.\r\n * This will serve content from elsewhere with the assumption that the data is valid map tiles.\r\n */\r\nexport namespace TilesetExtMapTiles {\r\n export enum EType {\r\n TileMapImagery = \"TileMapImagery\",\r\n OpenStreetMapImagery = \"OpenStreetMapImagery\",\r\n MapBoxImagery = \"MapBoxImagery\",\r\n CesiumIon = \"CesiumIon\"\r\n }\r\n\r\n export interface ISettings {\r\n url?: string;\r\n mapType?: EType;\r\n sourceExt?: string;\r\n ionId?: number;\r\n mapBoxStyleId?: string;\r\n mapBoxAccount?: string;\r\n mapBoxKey?: string;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, Tileset } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"UCS\" concept within Bruce.\r\n * A UCS is a user-coordinate-system.\r\n * It is a description of an offset to apply to tilesets so that they can all align with each other.\r\n */\r\nexport namespace Ucs {\r\n export function GetCacheKey(id: number, expandUsage: boolean): string {\r\n return Api.ECacheKey.Ucs + Api.ECacheKey.Id + id + Api.ECacheKey + expandUsage;\r\n }\r\n \r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.Ucs;\r\n }\r\n\r\n export interface IUcs {\r\n id?: number;\r\n name?: string;\r\n description?: string;\r\n pivot?: any;\r\n epsg?: number;\r\n state?: EState;\r\n latitude?: number;\r\n longitude?: number;\r\n altitude?: number;\r\n tilesets?: Tileset.ITileset[];\r\n }\r\n\r\n export enum EState {\r\n Undefined = \"undef\",\r\n Prepared = \"ready\"\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, ucsId: number, expandUsage?: boolean): Promise<IUcs> {\r\n if (!ucsId) {\r\n throw(\"UCS ID is required.\");\r\n }\r\n if (!expandUsage) {\r\n expandUsage = false;\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(ucsId, expandUsage));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`ucs/${ucsId}`);\r\n api.Cache.Set(GetCacheKey(ucsId, expandUsage), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, ucsId: number): Promise<void> {\r\n if (!ucsId) {\r\n throw(\"UCS ID is required.\");\r\n }\r\n await api.DELETE(`ucs/${ucsId}`);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Ucs + Api.ECacheKey.Id + ucsId);\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IUcs[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(\"ucs\");\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IUcs): Promise<IUcs> {\r\n if (!data?.name) {\r\n throw(\"UCS name is required.\");\r\n }\r\n data = await api.POST(`ucs${ !data.id ? \"\" : \"/\" + data.id }`, data);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Ucs + Api.ECacheKey.Id + data.id);\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","export namespace Permission {\r\n export type Perm = EPerm | string;\r\n\r\n export enum EPerm {\r\n ADMIN = \"ADMIN\",\r\n LOGIN = \"LOGIN\",\r\n DELETE_ENTITY_TYPE = \"DELETE_ENTITY_TYPE\",\r\n CREATE_ENTITY_TYPE = \"CREATE_ENTITY_TYPE\",\r\n UPDATE_ENTITY_TYPE = \"UPDATE_ENTITY_TYPE\"\r\n }\r\n\r\n export enum EPermPrefix {\r\n ACCESS_PROJECT_VIEW = \"UIVIEW_\",\r\n MANAGE_PROJECT_VIEW_BOOKMARKS = \"UIVIEW_MANAGE_BOOKMARKS_\",\r\n ACCESS_TILESET = \"TILESET_\"\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { Permission } from \"./permission\";\r\nimport { User } from \"./user\";\r\n\r\n/**\r\n * Describes the \"Session\" concept within Bruce.\r\n * A session is a set of settings produced from a user or access token login.\r\n * The session describes what the access should be allowed to do.\r\n */\r\nexport namespace Session {\r\n function GetCacheKey(sessionId: string): string {\r\n return `${Api.ECacheKey.Session}${Api.ECacheKey.Id}${sessionId}`;\r\n }\r\n\r\n export interface ISession {\r\n AccessPermissions: IAccountPermissions;\r\n HypeportalAccessPermisssions?: ISuperPermissions;\r\n \"ClientAccount.ID\": string;\r\n ID: string;\r\n IP: string;\r\n LastAccessTime: UTC.IUTC;\r\n User: User.IUser;\r\n }\r\n\r\n export interface IAccountPermissions {\r\n \"ClientAccount.ID\"?: string;\r\n EnabledFeatures?: Permission.Perm[];\r\n UserGroups?: string[];\r\n }\r\n\r\n export interface ISuperPermissions {\r\n EnabledFeatures?: Permission.Perm[];\r\n UserGroups?: string[];\r\n }\r\n\r\n export async function Get(api: IdmApi.Api, sessionId: string): Promise<ISession> {\r\n if (!sessionId) {\r\n throw(\"Session ID is required.\");\r\n }\r\n const key = GetCacheKey(sessionId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`session/${sessionId}`);\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Login(api: IdmApi.Api, username: string, password: string, accountId?: string): Promise<ISession> {\r\n if (!username || !password) {\r\n throw(\"Username and password are required.\");\r\n }\r\n const data: any = await api.POST(\"login\", {\r\n account: accountId ? accountId : \"\",\r\n login: username,\r\n password: password\r\n });\r\n const session: ISession = data?.Session;\r\n const ssid = session?.ID;\r\n api.SetSessionId(ssid);\r\n api.Cache.Remove(GetCacheKey(ssid));\r\n return session;\r\n }\r\n\r\n export async function Logout(api: IdmApi.Api): Promise<void> {\r\n const ssid = api.GetSessionId();\r\n if (ssid) {\r\n await api.POST(\"logout\", null);\r\n api.SetSessionId(<any>null);\r\n api.Cache.Remove(GetCacheKey(ssid));\r\n }\r\n }\r\n\r\n export function IsPermEnabled(session: ISession, accountId: string, perm: string): boolean {\r\n if (!perm) {\r\n throw(\"Perm is required.\");\r\n }\r\n perm = perm.toLocaleUpperCase();\r\n const perms = <User.IAccessPermission>session?.User?.AccessPermissions?.find(x => x[\"ClientAccount.ID\"] == accountId);\r\n if (!perms) {\r\n return false;\r\n }\r\n if (!perms.UserGroups) {\r\n perms.UserGroups = [];\r\n }\r\n for (let i = 0; i < perms.UserGroups.length; i++) {\r\n const group = perms.UserGroups[i];\r\n if (typeof group != \"string\") {\r\n const features = group.Features;\r\n if (features && features.findIndex(x => x.toLocaleUpperCase() == perm) > -1) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n export function IsSuperPermEnabled(session: ISession, perm: string): boolean {\r\n if (!perm) {\r\n throw(\"Perm is required.\");\r\n }\r\n perm = perm.toLocaleUpperCase();\r\n const accessPerms = session?.HypeportalAccessPermisssions?.EnabledFeatures ?? [];\r\n return accessPerms.findIndex(x => x.toLocaleUpperCase() == perm) > -1;\r\n }\r\n\r\n export function IsAccountAdmin(session: ISession, accountId: string): boolean {\r\n return IsPermEnabled(session, accountId, Permission.EPerm.ADMIN);\r\n }\r\n\r\n export function IsSuperAdmin(session: ISession): boolean {\r\n return IsSuperPermEnabled(session, Permission.EPerm.ADMIN);\r\n }\r\n}","import { IdmApi, Permission } from \"../bruce-models\";\r\nimport { User } from \"./user\";\r\n\r\n/**\r\n * Describes the \"User Group\" concept within Bruce.\r\n * A user group is a collection of permissions (\"Features\") and what users should be in the group.\r\n */\r\nexport namespace UserGroup {\r\n export interface IGroup {\r\n \"ClientAccount.ID\"?: string;\r\n \"Features\": Permission.Perm[];\r\n \"ID\": string;\r\n \"Name\"?: string;\r\n }\r\n\r\n export async function GetByName(api: IdmApi.Api, accountId: string, name: string): Promise<IGroup> {\r\n if (!name || !accountId) {\r\n throw(\"Name and AccountID are required.\");\r\n }\r\n return api.GET(`account/${accountId}/userGroupByName/${name}`);\r\n }\r\n\r\n export async function GetUsers(api: IdmApi.Api, accountId: string, id: string): Promise<User.IUser[]> {\r\n if (!accountId || !id) {\r\n throw(\"AccountID and ID are required.\");\r\n }\r\n const data = await api.GET(`userGroup/${accountId}/${id}/users`);\r\n return data.Items;\r\n }\r\n\r\n export async function GetListByPerm(api: IdmApi.Api, accountId: string, perm: Permission.Perm): Promise<IGroup[]> {\r\n if (!accountId || !perm) {\r\n throw(\"AccountID and Perm are required.\");\r\n }\r\n const data = await api.GET(`userGroupsByFeature/${accountId}/${perm}`);\r\n return data.Items;\r\n }\r\n\r\n export async function GetList(api: IdmApi.Api, accountId: string): Promise<IGroup[]> {\r\n if (!accountId) {\r\n throw(\"AccountID is required.\");\r\n }\r\n const data = await api.GET(`userGroups/${accountId}`);\r\n return data.Items;\r\n }\r\n\r\n export async function Delete(api: IdmApi.Api, accountId: string, id: string): Promise<void> {\r\n if (!accountId || !id) {\r\n throw(\"AccountID and ID are required.\");\r\n }\r\n return api.DELETE(`account/${accountId}/userGroupID/${id}`);\r\n }\r\n\r\n export async function Update(api: IdmApi.Api, data: IGroup): Promise<IGroup> {\r\n if (!data.Name || !data[\"ClientAccount.ID\"]) {\r\n throw(\"User group name and client account ID are required.\");\r\n }\r\n data = await api.POST(`userGroup${data.ID ? (\"/\" + data.ID) : \"\"}`, data);\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { UserGroup } from \"./user-group\";\r\n\r\n/**\r\n * Describes the \"User\" concept within Bruce.\r\n * A user is either a login-user or an access-token.\r\n * \r\n * You cannot login using an access-token, but both concepts are- \r\n * treated the same way in terms of permissions and user groups.\r\n */\r\nexport namespace User {\r\n export function GetCacheKey(userId: string, accountId?: string): string {\r\n if (!accountId) {\r\n accountId = \"\";\r\n }\r\n return Api.ECacheKey.User + Api.ECacheKey.Id + userId + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export function GetEmailCacheKey(email: string, accountId?: string): string {\r\n if (!accountId) {\r\n accountId = \"\";\r\n }\r\n return Api.ECacheKey.User + Api.ECacheKey.UserEmail + email + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export interface IUser {\r\n AccessPermissions?: IAccessPermission[];\r\n Email?: string;\r\n Login?: string;\r\n FullName?: string;\r\n ID?: string;\r\n IsActivated?: boolean;\r\n IsDisabled?: boolean;\r\n IsPasswordChangeRequired?: boolean;\r\n Mobile?: string;\r\n Password?: string;\r\n Settings?: any;\r\n Type?: EType;\r\n }\r\n\r\n export enum EType {\r\n User = \"LOGIN_USER\",\r\n AccessToken = \"ACCESS_TOKEN\"\r\n }\r\n\r\n export interface IAccessPermission {\r\n \"ClientAccount.ID\": string;\r\n \"UserGroup.ID\"?: string[];\r\n \"UserGroups\"?: UserGroup.IGroup[];\r\n }\r\n\r\n export async function Get(api: IdmApi.Api, id: string, accountId?: string): Promise<IUser> {\r\n if (!id) {\r\n throw(\"ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(id, <string>accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`user/${id}${accountId ? `?clientAccountID=${accountId}` : \"\"}`);\r\n api.Cache.Set(GetCacheKey(id, <string>accountId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: IdmApi.Api, data: IUser): Promise<IUser> {\r\n if (!data?.ID || !data?.Type) {\r\n throw(\"ID and Type are required.\");\r\n }\r\n data = await api.POST(`user/${data.ID}`, data);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + data.ID);\r\n if (data.Type == EType.AccessToken) {\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n }\r\n else if (data.Type == EType.User) {\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.User + Api.ECacheKey.Account);\r\n }\r\n return data;\r\n }\r\n\r\n export async function GetUsernameAvailable(api: IdmApi.Api, username: string): Promise<boolean> {\r\n if (!username) {\r\n throw(\"Username is required.\");\r\n }\r\n const req = api.GET(`user/loginavailable/${username}`);\r\n const prom: Promise<boolean> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res(data.IsAvailable);\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n return prom;\r\n }\r\n\r\n export namespace LoginUser {\r\n export function GetListCacheKey(accountId: string): string {\r\n return Api.ECacheKey.User + Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export async function GetByEmail(api: IdmApi.Api, email: string, accountId?: string): Promise<IUser> {\r\n if (!email) {\r\n throw(\"Email is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetEmailCacheKey(email, <string>accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`userByEmail/${email}${accountId ? `?clientAccountID=${accountId}` : \"\"}`);\r\n api.Cache.Set(GetEmailCacheKey(email, <string>accountId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: IdmApi.Api, accountId: string, exclusive?: boolean): Promise<IUser[]> {\r\n if (!accountId) {\r\n throw(\"Client account ID is required.\");\r\n }\r\n if (!exclusive) {\r\n exclusive = false;\r\n }\r\n const cacheData = exclusive ? null : api.Cache.Get(GetListCacheKey(accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IUser[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`users?clientAccountID=${accountId}${exclusive ? \"&allExcludingClientAccount=true\" : \"\" }`);\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n req.then((users) => {\r\n for (let i = 0; i < users.length; i++) {\r\n api.Cache.Set(GetCacheKey(<string>users[i].ID, accountId), users[i]);\r\n }\r\n });\r\n if (!exclusive) {\r\n api.Cache.Set(GetListCacheKey(accountId), req, Api.DEFAULT_CACHE_DURATION);\r\n }\r\n return req;\r\n }\r\n\r\n /**\r\n * Sends a signup email to the specified email address.\r\n * @param api \r\n * @param email \r\n * @returns \r\n */\r\n export async function Signup(api: IdmApi.Api, email: string): Promise<void> {\r\n if (!email) {\r\n throw(\"Email is required.\");\r\n }\r\n return api.POST(\"clientaccount/signup\", {\r\n Email: email\r\n });\r\n }\r\n\r\n /**\r\n * Sends a new signup email using a previous one's expired code.\r\n * @param api \r\n * @param expiredCode \r\n * @returns \r\n */\r\n export async function SignupResend(api: IdmApi.Api, expiredCode: string): Promise<void> {\r\n if (!expiredCode) {\r\n throw(\"Expired activation code is required.\");\r\n }\r\n return api.POST(`clientaccount/signup/resend?activationKey=${Api.Encode(expiredCode)}`, null);\r\n }\r\n\r\n /**\r\n * Completes signup using user data and a signup code.\r\n * @param api \r\n * @param code \r\n * @param data \r\n * @param accountId \r\n * @returns \r\n */\r\n export async function SignupComplete(api: IdmApi.Api, code: string, data: IUser, accountId?: string): Promise<IUser> {\r\n if (!code || !data?.Login || !data?.Password) {\r\n throw(\"Login, password, and activation code are required.\");\r\n }\r\n data = JSON.parse(JSON.stringify(data));\r\n data.IsActivated = true;\r\n data.IsDisabled = false;\r\n (<any>data).key = code;\r\n const res: IUser = await api.POST(`UserActivate/${accountId ? accountId : \"\"}`, data);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + res.ID);\r\n if (data.Email) {\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.UserEmail + data.Email);\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Sends a password reset email to the specified email address.\r\n * @param api \r\n * @param accountId \r\n * @param email \r\n * @returns user id associated with provided email.\r\n */\r\n export async function ForgotPassword(api: IdmApi.Api, accountId: string, email: string): Promise<string> {\r\n if (!accountId || !email) {\r\n throw(\"Account ID and email are required.\");\r\n }\r\n const req = api.POST(`UserForgotPassword/${accountId}`, {\r\n Email: email\r\n });\r\n const prom: Promise<string> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res(data.ID);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * Completes password reset using a password reset code and new password.\r\n * @param api \r\n * @param code \r\n * @param userId \r\n * @param password \r\n * @returns \r\n */\r\n export async function ForgotPasswordComplete(api: IdmApi.Api, code: string, userId: string, password: string): Promise<IUser> {\r\n const user = await Get(api, userId, \"\");\r\n return api.POST(\"UserSetNameAndPassword\", {\r\n ID: userId,\r\n Email: user.Email,\r\n ActivationCode: code,\r\n Password: password,\r\n FullName: user.FullName\r\n });\r\n }\r\n }\r\n\r\n export namespace AccessToken {\r\n export function GetListCacheKey(accountId: string): string {\r\n return Api.ECacheKey.AccessToken + Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export async function GetList(api: IdmApi.Api, accountId: string): Promise<IUser[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey(accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IUser[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"usersByClientAccount/accessTokens\");\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n req.then((users) => {\r\n for (let i = 0; i < users.length; i++) {\r\n api.Cache.Set(GetCacheKey(<string>users[i].ID, accountId), users[i]);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(accountId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: IdmApi.Api, id: string): Promise<void> {\r\n await api.DELETE(`accessToken/${id}`);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + id);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n }\r\n\r\n export async function Create(api: IdmApi.Api, data: IUser): Promise<IUser> {\r\n if (!data) {\r\n data = {};\r\n }\r\n if (data.Type == EType.User) {\r\n throw(\"User type is not allowed.\");\r\n }\r\n if (!data.Type) {\r\n data.Type = EType.AccessToken;\r\n }\r\n data = await api.POST(\"accessToken\", data);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n return data;\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { CamApi } from \"../api/cam-api\";\r\nimport { IdmApi } from \"../api/idm-api\";\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 enum EDbRegion {\r\n USA = \"US\",\r\n Paris = \"EU\",\r\n Singapore = \"SE\",\r\n Australia = \"AU\"\r\n }\r\n\r\n export const DbRegions = [\r\n {\r\n name: \"North California, USA\",\r\n value: EDbRegion.USA\r\n },\r\n {\r\n name: \"Paris, France\",\r\n value: EDbRegion.Paris\r\n },\r\n {\r\n name: \"Singapore\",\r\n value: EDbRegion.Singapore\r\n },\r\n {\r\n name: \"Sydney, Australia\",\r\n value: EDbRegion.Australia\r\n }\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 // This will depend on what \"appSettingsId\" you request for.\r\n \"Application.Settings\"?: any;\r\n }\r\n\r\n export async function Get(api: CamApi.Api, id: string): Promise<IAccount> {\r\n const cacheData = api.Cache.Get(GetCacheKey(id));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`account/${id}`);\r\n api.Cache.Set(GetCacheKey(id), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetRelatedList(api: IdmApi.Api): Promise<IAccount[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey(api.GetSessionId()));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(\"user/relatedClientAccounts\");\r\n const prom: Promise<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(items);\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(api.GetSessionId()), prom, Api.DEFAULT_CACHE_DURATION);\r\n return prom;\r\n }\r\n\r\n export async function GetAppSettings(api: CamApi.Api, id: string, appId: string): Promise<any> {\r\n const cacheData = api.Cache.Get(GetCacheKey(id, appId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`account/${id}?ApplicationID=${appId}`);\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(settings);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetCacheKey(id, appId), prom, Api.DEFAULT_CACHE_DURATION);\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 api \r\n * @param id \r\n * @param appId \r\n * @param data \r\n * @returns \r\n */\r\n export async function UpdateAppSettings(api: CamApi.Api, id: string, appId: string, data: any): Promise<any> {\r\n data = await api.POST(`account/${id}/applicationSettings/${appId}`, data);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Account + Api.ECacheKey.Id + id);\r\n return data;\r\n }\r\n\r\n /**\r\n * Creates a new Bruce account using given details.\r\n * @param api \r\n * @param id \r\n * @param name \r\n * @param region \r\n * @returns \r\n */\r\n export async function Create(api: BruceApi.Api, id: string, name: string, region: EDbRegion): Promise<IAccount> {\r\n if (!id || !name || !region) {\r\n throw new Error(\"Id, Name and Region are required.\");\r\n }\r\n const reqData = {\r\n \"Name\": name,\r\n \"DBLocation\": region\r\n }\r\n const res = api.POST(`clientAccount/${id}`, reqData, Api.PrepReqParams());\r\n api.Cache.Remove(GetListCacheKey(api.GetSessionId()));\r\n return res;\r\n }\r\n}","export namespace EncryptUtils {\r\n // https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\r\n export function Cyrb53Hash(str: string, seed: number = 0): number {\r\n let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\r\n for (let i = 0, ch; i < str.length; i++) {\r\n ch = str.charCodeAt(i);\r\n h1 = Math.imul(h1 ^ ch, 2654435761);\r\n h2 = Math.imul(h2 ^ ch, 1597334677);\r\n }\r\n h1 = Math.imul(h1 ^ (h1>>>16), 2246822507) ^ Math.imul(h2 ^ (h2>>>13), 3266489909);\r\n h2 = Math.imul(h2 ^ (h2>>>16), 2246822507) ^ Math.imul(h1 ^ (h1>>>13), 3266489909);\r\n return (4294967296 * (2097151 & h2) + (h1>>>0));\r\n }\r\n}","export namespace MathUtils {\r\n /**\r\n * Rounds a number to a given number of decimal places.\r\n * @param num \r\n * @param decimals \r\n * @returns \r\n */\r\n export function Round(num: number, decimals: number = 0): number {\r\n if (decimals <= 0) {\r\n return Math.round(num);\r\n }\r\n let tmp = \"1\";\r\n for (let i = 0; i < decimals; i++) {\r\n tmp += \"0\";\r\n }\r\n const d = parseFloat(tmp);\r\n return Math.round((num + Number.EPSILON) * d) / d;\r\n }\r\n\r\n /**\r\n * Returns a random integer between min (inclusive) and max (inclusive).\r\n * @param min \r\n * @param max \r\n * @returns \r\n */\r\n export function RandInt(min: number, max: number): number {\r\n if (min == max) {\r\n return min;\r\n }\r\n else if (min > max) {\r\n throw(\"Min is greater than max.\");\r\n }\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n}","import { IDictionary } from \"../common/dictionary\";\r\n\r\n/**\r\n * Utility to help with url manipulation.\r\n */\r\nexport namespace UrlUtils {\r\n export function GetQueryString(doc: Document): IDictionary<string> {\r\n const qs: any = {};\r\n const p0 = doc.location.href.indexOf(\"?\");\r\n if (p0 >= 0) {\r\n const str = doc.location.href.substring(p0 + 1);\r\n const tokens = str.split(\"&\");\r\n tokens.forEach(token => {\r\n const p = token.split(\"=\");\r\n if (p.length == 2) {\r\n qs[p[0]] = p[1];\r\n }\r\n });\r\n }\r\n return qs;\r\n }\r\n\r\n /**\r\n * Helper to get and set url params for a given window.\r\n */\r\n export class Handler {\r\n private _window: Window;\r\n public get window(): Window {\r\n return this._window;\r\n }\r\n private get document(): Document {\r\n return this.window?.document;\r\n }\r\n private _allowedKeys: string[] = <any>null;\r\n public get allowedKeys(): string[] {\r\n return this._allowedKeys;\r\n }\r\n \r\n public constructor(window: Window, allowedKeys?: string[]) {\r\n this._window = window;\r\n this._allowedKeys = <string[]>allowedKeys;\r\n }\r\n \r\n public UpdateAllowedKeys(allowedKeys: string[]): void {\r\n this._allowedKeys = allowedKeys;\r\n let params = this.GetParams();\r\n this.refresh(params);\r\n }\r\n \r\n public UpdateParam(key: string, value: string | number): void {\r\n let params = this.GetParams();\r\n params[key + \"\"] = value + \"\";\r\n this.refresh(params);\r\n }\r\n \r\n public RemoveParam(key: string): void {\r\n let params = this.GetParams();\r\n params[key + \"\"] = <any>null;\r\n this.refresh(params);\r\n }\r\n \r\n public GetParamKeys(): string[] {\r\n let params = GetQueryString(this.document);\r\n return Object.keys(params);\r\n }\r\n \r\n public GetParams(): IDictionary<string> {\r\n return GetQueryString(this.document);\r\n }\r\n \r\n public GetParam(key: string): string {\r\n let params = this.GetParams();\r\n return params[key + \"\"];\r\n }\r\n \r\n public Clear(): void {\r\n this.refresh({});\r\n }\r\n \r\n private refresh(data: IDictionary<string | number>): void {\r\n const params: string[] = [];\r\n const keys = Object.keys(data);\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n if (this._allowedKeys == null || this._allowedKeys.includes(key)) {\r\n const val = data[key];\r\n if (!!val || val == 0) {\r\n params.push(`${key}=${val}`);\r\n }\r\n }\r\n }\r\n if (params.length > 0) {\r\n this.window.history.replaceState({}, <any>null, \"?\" + params.join(\"&\"));\r\n }\r\n else {\r\n this.window.history.replaceState({}, <any>null, \"\");\r\n }\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Entity as E } from \"../entity/entity\";\r\n\r\nexport namespace DataLab {\r\n export enum EReqKey {\r\n Primary = \"PrimarySelection\",\r\n Secondary = \"SecondarySelection\"\r\n }\r\n\r\n // WIP.\r\n export interface IQuery {\r\n [EReqKey.Primary]: {\r\n Items: any[]\r\n },\r\n [EReqKey.Secondary]?: any,\r\n Action?: string,\r\n PrimaryEntityTypeID?: string;\r\n PrimaryEntityID?: string;\r\n }\r\n\r\n export namespace Entity {\r\n export async function GetList(\r\n api: BruceApi.Api,\r\n query: IQuery, \r\n key?: EReqKey, \r\n skip?: number, \r\n load?: number): Promise<E.IEntity[]> \r\n {\r\n if (!key) {\r\n key = EReqKey.Primary;\r\n }\r\n if (!skip) {\r\n skip = 0;\r\n }\r\n if (!load) {\r\n load = 50;\r\n }\r\n\r\n const req = api.POST(`entities/datalab/getMatchingEntities/${key}?skip=${skip}&load=${load}`, \r\n query, \r\n Api.PrepReqParams()\r\n );\r\n const prom: Promise<E.IEntity[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n return prom;\r\n }\r\n }\r\n}"],"names":["A","Api","MAX_AREA_IN_DEGREES"],"mappings":"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"}
1
+ {"version":3,"file":"bruce-models.es5.js","sources":["../src/api/api.ts","../src/ann-document/ann-document.ts","../src/custom-form/custom-form.ts","../src/common/cache.ts","../src/api/abstract-api.ts","../src/api/bruce-api.ts","../src/api/cam-api.ts","../src/api/idm-api.ts","../src/api/global-api.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/bruce-event.ts","../src/common/camera.ts","../src/common/cartes.ts","../src/common/carto.ts","../src/common/delay-queue.ts","../src/common/geometry.ts","../src/common/utc.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-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/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-tile-source.ts","../src/server/pending-action.ts","../src/style/style.ts","../src/tileset/tileset-entities-map-tiles.ts","../src/tileset/tileset-ext-map-tiles.ts","../src/ucs/ucs.ts","../src/user/permission.ts","../src/user/session.ts","../src/user/user-group.ts","../src/user/user.ts","../src/account/account.ts","../src/util/encrypt-utils.ts","../src/util/math-utils.ts","../src/util/url-utils.ts","../src/data-lab/data-lab.ts"],"sourcesContent":["import { IDictionary } from \"../common/dictionary\";\r\n\r\n/**\r\n * Contains generic descriptions used for Bruce requests.\r\n */\r\nexport namespace Api {\r\n export enum ECacheKey {\r\n Id = \":\",\r\n Entity = \"entity\",\r\n EntityType = \"entitytype\",\r\n ProjectView = \"projectview\",\r\n ProjectViewBookmark = \"pvbookmark\",\r\n Tileset = \"tileset\",\r\n ClientFile = \"clientfile\",\r\n Session = \"session\",\r\n PendingAction = \"pendingaction\",\r\n EntitySource = \"entitysource\",\r\n ProgramKey = \"programkey\",\r\n Ucs = \"ucs\",\r\n Tag = \"tag\",\r\n Attachment = \"attachment\",\r\n Comment = \"comment\",\r\n Link = \"link\",\r\n AnnDocument = \"anndocument\",\r\n AttachmentType = \"attachmenttype\",\r\n Relation = \"relation\",\r\n RelationType = \"relationtype\",\r\n Lod = \"lod\",\r\n Style = \"style\",\r\n PublishTileset = \"publishtileset\",\r\n User = \"user\",\r\n UserEmail = \"useremail\",\r\n AccessToken = \"accesstoken\",\r\n UserGroup = \"usergroup\",\r\n Account = \"account\",\r\n CustomForm = \"customform\",\r\n ImportedFile = \"importedfile\"\r\n }\r\n export const DEFAULT_CACHE_DURATION = 60 * 5; // 5 minutes.\r\n export const TEMPLATE_ACCOUNT_ID = \"template\";\r\n export const ACCESS_TOKEN_HEADER = \"X-Access-Token\";\r\n \r\n /**\r\n * Possible environments we host Bruce apps on.\r\n * When these are matched, they should be case-insensitive.\r\n */\r\n export enum EEnv {\r\n DEV = \"DEV\",\r\n STG = \"STG\",\r\n UAT = \"UAT\",\r\n PROD = \"PROD\"\r\n }\r\n export type Env = EEnv | string;\r\n\r\n /**\r\n * Prepares a string to be included in a url.\r\n * @param str\r\n * @returns \r\n */\r\n export function Encode(str: string): string {\r\n return encodeURIComponent(str.replace(/\\+/g, \"%2B\").replace(/\\./g, \"%2E\"));\r\n }\r\n\r\n export interface IList<T> {\r\n Items: T[];\r\n TotalCount?: number;\r\n }\r\n\r\n export enum ESortOrder {\r\n None = 0,\r\n Asc = 1,\r\n Desc = -1\r\n }\r\n\r\n export enum EEncoding {\r\n UTF8 = \"UTF-8\",\r\n UTF16 = \"UTF-16BE\"\r\n }\r\n\r\n export interface IReqParams {\r\n headers?: IDictionary<string>;\r\n response?: {\r\n encoding?: EEncoding | string;\r\n }\r\n }\r\n\r\n /**\r\n * Prepares default settings for a request to Bruce Api.\r\n * Our requests WRONGLY have utf-16 for 95% of them. Please be wary of that.\r\n * @returns \r\n */\r\n export function PrepReqParams(): IReqParams {\r\n return { response: { encoding: Api.EEncoding.UTF16 } };\r\n }\r\n\r\n export interface IUploadReqParams extends IReqParams {\r\n onProgress?: (e: ProgressEvent) => void;\r\n formData?: IDictionary<string>;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../bruce-models\";\r\n\r\ntype Type = AnnDocument.EType | string;\r\n\r\n/**\r\n * Describes communication with the \"Annotated Document\" concept in Bruce.\r\n * Annotated documents are files with hotspots that can link to Entity records.\r\n */\r\nexport namespace AnnDocument {\r\n export function GetCacheKey(id: number) {\r\n return `${Api.ECacheKey.AnnDocument}${Api.ECacheKey.Id}${id}`;\r\n }\r\n\r\n export function GetListCacheKey(type: Type) {\r\n return Api.ECacheKey.AnnDocument + type;\r\n }\r\n\r\n export interface IDocument {\r\n ID?: number;\r\n Type: Type;\r\n Name: string;\r\n \"ClientFile.ID\": string;\r\n Settings: any;\r\n }\r\n\r\n export enum EType {\r\n SVG = \"SVG\"\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, docId: number): Promise<IDocument> {\r\n if (!docId) {\r\n throw(\"Doc ID is required.\");\r\n }\r\n const key = GetCacheKey(docId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`documentView/${docId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, type: Type): Promise<IDocument[]> {\r\n if (!type) {\r\n type = \"\";\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(type));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IDocument[]> = new Promise(async (res, rej) => {\r\n try {\r\n const url = \"documentViews\" + (type ? \"?type=\" + type : \"\");\r\n const data = await api.GET(url, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(type), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Markup } from \"../markup/markup\";\r\n\r\n/**\r\n * Describes the \"Custom Form\" concept within Bruce.\r\n * Custom forms are dynamic dialogs that get populated with Entity data.\r\n */\r\nexport namespace CustomForm {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.CustomForm + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(typeId: string): string {\r\n if (typeId) {\r\n return Api.ECacheKey.CustomForm + Api.ECacheKey.EntityType + Api.ECacheKey.Id + typeId;\r\n }\r\n return Api.ECacheKey.CustomForm;\r\n }\r\n\r\n export interface IForm {\r\n ID?: number;\r\n \"EntityType.ID\"?: string;\r\n Name?: string;\r\n Settings?: any | Markup.IMarkup;\r\n Type?: EType;\r\n }\r\n\r\n export enum EType {\r\n Form = \"GENERIC\",\r\n Markup = \"MARKUP\"\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, id: number): Promise<IForm> {\r\n if (!id) {\r\n throw(\"Id is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(id));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`customForm/${id}`, Api.PrepReqParams());\r\n api.Cache.Set(GetCacheKey(id), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, id: number): Promise<void> {\r\n if (!id) {\r\n throw(\"Id is required.\");\r\n }\r\n await api.DELETE(`customForm/${id}`, Api.PrepReqParams())\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, typeId: string): Promise<IForm[]> {\r\n const url = typeId ? `entityType/${typeId}/customForms` : \"customForms\";\r\n const cacheData = api.Cache.Get(GetListCacheKey(typeId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(url, Api.PrepReqParams());\r\n const prom = req.then((data) => {\r\n return data.Items;\r\n });\r\n api.Cache.Set(GetListCacheKey(typeId), prom, Api.DEFAULT_CACHE_DURATION);\r\n return prom;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IForm): Promise<IForm> {\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n data = await api.POST(`customForm/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\r\n return data;\r\n }\r\n}","import { IDictionary } from \"./dictionary\";\r\n\r\nclass CacheItem {\r\n public Id: string;\r\n public Data: any;\r\n public Duration: number;\r\n private _created: Date;\r\n\r\n\r\n constructor(id: string, data: any, duration: number) {\r\n this.Id = id;\r\n this.Data = data;\r\n this.Duration = duration;\r\n this._created = duration > -1 ? new Date() : <any>null;\r\n }\r\n\r\n public IsExpired(): boolean {\r\n if (this._created == null) {\r\n return false;\r\n }\r\n return (new Date().getTime() - this._created.getTime()) / 1000 > this.Duration;\r\n }\r\n}\r\n\r\ntype Key = string | number;\r\n\r\n/**\r\n * Simple local cache controller.\r\n */\r\nexport class CacheControl<T> {\r\n private data: IDictionary<CacheItem> = {};\r\n public Disabled: boolean = false;\r\n\r\n\r\n public Set(id: Key, data: T, duration: number = -1): void {\r\n this.data[id + \"\"] = new CacheItem(id + \"\", data, duration);\r\n }\r\n\r\n public Get(id: Key): T {\r\n if (this.Disabled) {\r\n return <any>null;\r\n }\r\n const item = this.data[id + \"\"];\r\n if (item == null) {\r\n return <any>null;\r\n }\r\n if (item.IsExpired()) {\r\n delete this.data[id + \"\"];\r\n return <any>null;\r\n }\r\n return item.Data;\r\n }\r\n\r\n public Clear(): void {\r\n this.data = {};\r\n }\r\n\r\n public Remove(id: Key): void {\r\n delete this.data[id + \"\"];\r\n }\r\n\r\n public RemoveByStartsWith(text: string): void {\r\n for (const key in this.data) {\r\n if (key.startsWith(text)) {\r\n delete this.data[key];\r\n }\r\n }\r\n }\r\n\r\n public RemoveByContains(text: string): void {\r\n for (const key in this.data) {\r\n if (key.includes(text)) {\r\n delete this.data[key];\r\n }\r\n }\r\n }\r\n\r\n public GetKeys(): string[] {\r\n if (this.Disabled) {\r\n return [];\r\n }\r\n return Object.keys(this.data);\r\n }\r\n\r\n public GetValues(): T[] {\r\n if (this.Disabled) {\r\n return [];\r\n }\r\n const values: T[] = [];\r\n for (const key in this.data) {\r\n const data = this.Get(key);\r\n if (data != null) {\r\n values.push(data);\r\n }\r\n }\r\n return values;\r\n }\r\n}","import { CacheControl } from \"../common/cache\";\r\nimport { Api } from \"./api\";\r\n\r\nasync function parseResult(data: Response, encoding?: string): Promise<any> {\r\n if (data.status == 200) {\r\n if (encoding) {\r\n const buffer = await data.arrayBuffer();\r\n return JSON.parse(new TextDecoder(encoding).decode(buffer));\r\n }\r\n else {\r\n return data.json();\r\n }\r\n }\r\n else {\r\n const error = await data.json();\r\n throw(error);\r\n }\r\n}\r\n\r\n/**\r\n * This is a base class for communication with an arbitrary Bruce Api.\r\n */\r\nexport class AbstractApi {\r\n private ssidHeader: string;\r\n private ssid: string = \"\";\r\n public Cache: CacheControl<any> = new CacheControl<any>();\r\n\r\n constructor(ssidHeader: string) {\r\n this.ssidHeader = ssidHeader;\r\n }\r\n\r\n public GetSessionId(): string {\r\n return this.ssid;\r\n }\r\n\r\n public SetSessionId(value: string): void {\r\n this.ssid = value;\r\n }\r\n\r\n public GetSessionHeader(): string {\r\n return this.ssidHeader;\r\n }\r\n\r\n public SetSessionHeader(value: string): void {\r\n this.ssidHeader = value;\r\n }\r\n\r\n public async get(url: string, params?: Api.IReqParams): Promise<any> {\r\n if (!params) {\r\n params = {};\r\n }\r\n params.headers = params.headers || {};\r\n params.headers = {\r\n \"Content-Type\": \"application/json;\",\r\n [this.ssidHeader]: this.ssid,\r\n ...params.headers\r\n };\r\n const res = await fetch(url, {\r\n headers: params.headers\r\n });\r\n return parseResult(res, params.response?.encoding);\r\n }\r\n\r\n public async delete(url: string, params?: Api.IReqParams): Promise<any> {\r\n if (!params) {\r\n params = {};\r\n }\r\n params.headers = params.headers || {};\r\n params.headers = {\r\n \"Content-Type\": \"application/json;\",\r\n [this.ssidHeader]: this.ssid,\r\n ...params.headers\r\n };\r\n const res = await fetch(url, {\r\n headers: params.headers,\r\n method: \"DELETE\"\r\n });\r\n return parseResult(res, params.response?.encoding);\r\n }\r\n\r\n public async post(url: string, data: any, params?: Api.IReqParams): Promise<any> {\r\n if (!params) {\r\n params = {};\r\n }\r\n params.headers = params.headers || {};\r\n params.headers = {\r\n \"Content-Type\": \"application/json;\",\r\n [this.ssidHeader]: this.ssid,\r\n ...params.headers\r\n };\r\n if (!data) {\r\n data = {};\r\n }\r\n if (typeof data != \"string\") {\r\n data = JSON.stringify(data);\r\n }\r\n const res = await fetch(url, {\r\n headers: params.headers,\r\n method: \"POST\",\r\n body: data\r\n });\r\n return parseResult(res, params.response?.encoding);\r\n }\r\n\r\n public async put(url: string, data: any, params?: Api.IReqParams): Promise<any> {\r\n if (!params) {\r\n params = {};\r\n }\r\n params.headers = params.headers || {};\r\n params.headers = {\r\n \"Content-Type\": \"application/json;\",\r\n [this.ssidHeader]: this.ssid,\r\n ...params.headers\r\n };\r\n if (!data) {\r\n data = {};\r\n }\r\n if (typeof data != \"string\") {\r\n data = JSON.stringify(data);\r\n }\r\n const res = await fetch(url, {\r\n headers: params.headers,\r\n method: \"PUT\",\r\n body: data\r\n });\r\n return parseResult(res, params.response?.encoding);\r\n }\r\n\r\n public async upload(url: string, blob: Blob, params?: Api.IUploadReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n try {\r\n let xhr = new XMLHttpRequest();\r\n const headers = <any>params?.headers;\r\n if (headers) {\r\n const headerKeys = Object.keys(headers);\r\n for (let i = 0; i < headerKeys.length; i++) {\r\n const key = headerKeys[i];\r\n const value = headers[key];\r\n xhr.setRequestHeader(key, value);\r\n }\r\n }\r\n if (params?.onProgress) {\r\n if (xhr.upload) {\r\n xhr.upload.onprogress = params?.onProgress;\r\n }\r\n else {\r\n xhr.addEventListener(\"progress\", params?.onProgress);\r\n }\r\n }\r\n xhr.onreadystatechange = (e) => {\r\n if (xhr.readyState == 4) {\r\n if (xhr.status >= 400) {\r\n rej(e);\r\n }\r\n else {\r\n try {\r\n res(JSON.parse(xhr.responseText));\r\n }\r\n catch (e) {\r\n console.error(e, xhr.responseText);\r\n res(xhr.responseText);\r\n }\r\n }\r\n }\r\n };\r\n xhr.open(\"POST\", url, true);\r\n if (this.ssid) {\r\n xhr.setRequestHeader(this.ssidHeader, this.ssid);\r\n }\r\n const formData = new FormData();\r\n if (params?.formData) {\r\n for (const key in params.formData) {\r\n formData.append(key, params.formData[key]);\r\n }\r\n }\r\n formData.append(\"file\", blob);\r\n xhr.send(formData);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n }\r\n}","import { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\n\r\nexport namespace BruceApi {\r\n export interface IGetter {\r\n env: A.EEnv;\r\n accountId: string;\r\n getApi: (accountId: string, env: A.EEnv) => BruceApi.Api;\r\n }\r\n\r\n /**\r\n * This is the request handler for Bruce Api, \r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\n export class Api extends AbstractApi {\r\n private baseUrl: string = \"\";\r\n private accountId: string;\r\n private env: A.Env;\r\n \r\n constructor(accountId: string, env?: A.Env) {\r\n super(\"x-sessionid\");\r\n this.accountId = accountId;\r\n this.env = env ?? A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n \r\n private setBaseUrl(): void {\r\n const prefix = `https://${this.accountId}.api.nextspace`;\r\n let url: string;\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url = prefix + \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url = prefix + \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url = prefix + \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url = prefix + \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n this.baseUrl = url;\r\n }\r\n \r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n \r\n public SetBaseUrl(url: string): void {\r\n this.baseUrl = url;\r\n if (!this.baseUrl.endsWith(\"/\")) {\r\n this.baseUrl += \"/\";\r\n }\r\n }\r\n \r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.get(this.baseUrl + url, params);\r\n }\r\n \r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.delete(this.baseUrl + url, params);\r\n }\r\n \r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.post(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async PUT(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.put(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return this.upload(this.baseUrl + url, blob, params);\r\n }\r\n }\r\n}","import { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\n\r\n/**\r\n * This is the request handler for Cam Api, \r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\nexport namespace CamApi {\r\n export interface IGetter {\r\n env: A.EEnv;\r\n getApi: (env: A.EEnv) => CamApi.Api;\r\n }\r\n\r\n export class Api extends AbstractApi {\r\n private baseUrl: string = \"\";\r\n private env: A.Env;\r\n \r\n constructor(env?: A.Env) {\r\n super(\"SSID\");\r\n this.env = env ?? A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n \r\n private setBaseUrl(): void {\r\n const prefix = \"https://cam.nextspace\";\r\n let url: string;\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url = prefix + \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url = prefix + \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url = prefix + \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url = prefix + \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n this.baseUrl = url;\r\n }\r\n \r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n \r\n public SetBaseUrl(url: string): void {\r\n this.baseUrl = url;\r\n if (!this.baseUrl.endsWith(\"/\")) {\r\n this.baseUrl += \"/\";\r\n }\r\n }\r\n \r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.get(this.baseUrl + url, params);\r\n }\r\n \r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.delete(this.baseUrl + url, params);\r\n }\r\n \r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.post(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return this.upload(this.baseUrl + url, blob, params);\r\n }\r\n }\r\n}","import { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\n\r\nexport namespace IdmApi {\r\n export interface IGetter {\r\n env: A.EEnv;\r\n getApi: (env: A.EEnv) => IdmApi.Api;\r\n }\r\n\r\n /**\r\n * This is the request handler for Idm Api, \r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\n export class Api extends AbstractApi {\r\n private baseUrl: string = \"\";\r\n private env: A.Env;\r\n \r\n constructor(env?: A.Env) {\r\n super(\"SSID\");\r\n this.env = env ?? A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n \r\n private setBaseUrl(): void {\r\n const prefix = \"https://idm.nextspace\";\r\n let url: string;\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url = prefix + \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url = prefix + \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url = prefix + \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url = prefix + \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv1=\" + env);\r\n }\r\n this.baseUrl = url;\r\n }\r\n \r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n \r\n public SetBaseUrl(url: string): void {\r\n this.baseUrl = url;\r\n if (!this.baseUrl.endsWith(\"/\")) {\r\n this.baseUrl += \"/\";\r\n }\r\n }\r\n \r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.get(this.baseUrl + url, params);\r\n }\r\n \r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.delete(this.baseUrl + url, params);\r\n }\r\n \r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.post(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return this.upload(this.baseUrl + url, blob, params);\r\n }\r\n }\r\n}","import { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\n\r\nexport namespace GlobalApi {\r\n export interface IGetter {\r\n env: A.EEnv;\r\n getApi: (env: A.EEnv) => GlobalApi.Api;\r\n }\r\n\r\n /**\r\n * This is the request handler for Global Api, \r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\n export class Api extends AbstractApi {\r\n private baseUrl: string = \"\";\r\n private env: A.Env;\r\n \r\n constructor(env?: A.Env) {\r\n super(\"SSID\");\r\n this.env = env ?? A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n \r\n private setBaseUrl(): void {\r\n let url: string;\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url = \"https://bruceglobal.nextspace-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url = \"https://bruceglobal.nextspace-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url = \"https://bruceglobal.api.nextspace-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url = \"https://bruceglobal.api.nextspace.host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n this.baseUrl = url;\r\n }\r\n \r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n \r\n public SetBaseUrl(url: string): void {\r\n this.baseUrl = url;\r\n if (!this.baseUrl.endsWith(\"/\")) {\r\n this.baseUrl += \"/\";\r\n }\r\n }\r\n \r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.get(this.baseUrl + url, params);\r\n }\r\n \r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return this.delete(this.baseUrl + url, params);\r\n }\r\n \r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return this.post(this.baseUrl + url, data, params);\r\n }\r\n \r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return this.upload(this.baseUrl + url, blob, params);\r\n }\r\n }\r\n}","export namespace Color {\r\n export interface IColor {\r\n // Max: 255, Min: 0.\r\n red: number;\r\n green: number;\r\n blue: number;\r\n // Max: 1, Min: 0.\r\n alpha: number ;\r\n }\r\n\r\n export enum EBlendMode {\r\n HIGHLIGHT,\r\n REPLACE,\r\n MIX\r\n }\r\n\r\n export interface IBlendSettings {\r\n blendMode?: EBlendMode;\r\n // 1 = 100% new color. 0 = original color.\r\n blendPercent?: number;\r\n }\r\n\r\n export function RandomColor(): IColor {\r\n // https://stackoverflow.com/a/7352887\r\n const brightness = 4;\r\n const rgb = [Math.random() * 256, Math.random() * 256, Math.random() * 256];\r\n const mix = [brightness * 51, brightness * 51, brightness * 51];\r\n const mixedrgb = [rgb[0] + mix[0], rgb[1] + mix[1], rgb[2] + mix[2]].map(function(x){\r\n return Math.round(x / 2.0);\r\n });\r\n const str = \"rgba(\" + mixedrgb.join(\",\") + \",0.9\" + \")\";\r\n return ColorFromStr(str);\r\n }\r\n\r\n /**\r\n * Attempts to parse a given color string into a model.\r\n * @param str \r\n * @returns \r\n */\r\n export function ColorFromStr(str: string): IColor {\r\n let r,g,b,a;\r\n const rgba = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([^\\)]+)\\s*)?\\)$/.exec(str);\r\n if (rgba) {\r\n r = parseInt(rgba[1]);\r\n g = parseInt(rgba[2]);\r\n b = parseInt(rgba[3]);\r\n a = rgba[4] != null ? parseFloat(rgba[4]) : 1;\r\n return {\r\n red: r,\r\n green: g,\r\n blue: b,\r\n alpha: a\r\n }\r\n }\r\n if (str.charAt(0) == \"#\") {\r\n str = str.substring(1);\r\n }\r\n if (str.length == 6) {\r\n // rgb.\r\n const parsed = /^(.{2})(.{2})(.{2})/.exec(str);\r\n if (!parsed) {\r\n return <any>null;\r\n }\r\n r = parseInt(parsed[1], 16);\r\n g = parseInt(parsed[2], 16);\r\n b = parseInt(parsed[3], 16);\r\n a = 1;\r\n }\r\n else if (str.length == 8) {\r\n // rgba.\r\n const parsed = /^(.{2})(.{2})(.{2})(.{2})/.exec(str);\r\n if (!parsed) {\r\n return <any>null;\r\n }\r\n r = parseInt(parsed[1], 16);\r\n g = parseInt(parsed[2], 16);\r\n b = parseInt(parsed[3], 16);\r\n a = parseInt(parsed[4], 16);\r\n if (a != 0) {\r\n a = a/255;\r\n }\r\n }\r\n else {\r\n return <any>null;\r\n }\r\n if (a == null) {\r\n a = 1;\r\n }\r\n return {\r\n red: r,\r\n blue: b,\r\n green: g,\r\n alpha: a\r\n }\r\n }\r\n}","export namespace ObjectUtils {\r\n /**\r\n * Generates a Bruce compatible UID.\r\n * @returns \r\n */\r\n export function UId(): string {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\r\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n}","/**\r\n * Utility to help with parsing and wrapping Bruce paths.\r\n */\r\nexport namespace PathUtils {\r\n export function Parse(str: string): string[] {\r\n if (!str) {\r\n return [];\r\n }\r\n const broken: string[] = str.split(\"\\\"/\\\"\");\r\n if (broken.length > 0) {\r\n let top = broken[0];\r\n if (top.length > 0) {\r\n if (top.charAt(0) == \"\\\"\") {\r\n top = top.substring(1);\r\n }\r\n broken[0] = top;\r\n }\r\n const endIndex = broken.length - 1;\r\n let bot = broken[endIndex];\r\n if (bot.length > 0) {\r\n if (bot.charAt(bot.length - 1) == \"\\\"\") {\r\n bot = bot.substring(0, bot.length - 1);\r\n }\r\n broken[endIndex] = bot;\r\n }\r\n }\r\n return broken;\r\n }\r\n\r\n export function Wrap(path: string[]): string {\r\n let tmp: string = \"\\\"\";\r\n for (let i = 0; i < path.length; i++) {\r\n let section = path[i];\r\n tmp += section;\r\n if (i < path.length - 1) {\r\n tmp += \"\\\"/\\\"\";\r\n }\r\n }\r\n tmp += \"\\\"\";\r\n return tmp;\r\n }\r\n\r\n export function ParseLegacy(str: string): string[] {\r\n const broken: string[] = str.split(\".\");\r\n for (let i = 0; i < broken.length; i++) {\r\n let piece = broken[0];\r\n if (piece.charAt(0) == \"\\\"\") {\r\n piece = broken[0] = piece.substring(1);\r\n }\r\n if (piece.charAt(piece.length - 1) == \"\\\"\") {\r\n broken[0] = piece.substring(0, piece.length - 1);\r\n }\r\n }\r\n return broken;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Bounds } from \"../common/bounds\";\r\nimport { Carto } from \"../common/carto\";\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\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(entityId: string): 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 };\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 }\r\n\r\n export async function Get(api: BruceApi.Api, entityId: string): Promise<IEntity> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const key = GetCacheKey(entityId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entity/${entityId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetListByIds(api: BruceApi.Api, entityIds: string[]): Promise<IEntity[]> {\r\n if (!entityIds.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n const reqs: Promise<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);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n reqs.push(cacheData);\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 req: Promise<Api.IList<IEntity>> = api.POST(\"entities\", reqData, Api.PrepReqParams());\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<IEntity> = new Promise(async (res) => {\r\n try {\r\n const data = await req;\r\n const item = <IEntity>data.Items.find(x => x.Bruce.ID == entityId);\r\n res(item);\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.Cache.Set(key, prom, Api.DEFAULT_CACHE_DURATION);\r\n reqs.push(prom);\r\n }\r\n }\r\n return (await Promise.all(reqs)).filter(x => !!x);\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, entityId: string): Promise<void> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n\r\n export async function DeleteList(api: BruceApi.Api, entityIds: string[]): Promise<void> {\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());\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IEntity, override: boolean): Promise<IEntity> {\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 data = await api.POST(reqUrl, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(<string>data.Bruce.ID));\r\n return data;\r\n }\r\n\r\n export function RemoveTag(data: IEntity, tagId: number): void {\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(data: IEntity, tagId: number): void {\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(data: IEntity, path: string[], value: any): void {\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(data: IEntity, path: string[]): any {\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 export function CalculateName(entity: IEntity, type: EntityType.IEntityType): string {\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(entity, path);\r\n if (name) {\r\n return name;\r\n }\r\n }\r\n }\r\n return <string>entity.Bruce.ID;\r\n }\r\n\r\n export namespace Filter {\r\n export namespace V1 {\r\n export type AttrFilter = IDictionary<any>;\r\n\r\n export interface IFilter {\r\n orderBy?: any;\r\n entityTypeId?: string;\r\n layerIds?: number[];\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?: AttrFilter;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, filter: IFilter): Promise<IEntity[]> {\r\n if (!filter?.entityTypeId) {\r\n throw(\"Entity Type ID is required.\");\r\n }\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 requestFilter[\"Bruce.Layer.ID\"] = {\r\n equals: 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 let url = \"entities\" +\r\n \r\n // Page size and index.\r\n `?PageSize=${filter.pageSize}&PageIndex=${filter.pageIndex}` +\r\n \r\n // Entity type id.\r\n (filter.entityTypeId ? `&BruceEntityType=${filter.entityTypeId}` : \"\") +\r\n \r\n // Lod.\r\n (filter.lodCategoryId ? \"&LODType=\" + filter.lodCategoryId : \"\") +\r\n \r\n // Attribute filter.\r\n (!requestFilter ? \"\" : \"&Filter=\" + Api.Encode(JSON.stringify(requestFilter))) +\r\n \r\n // Order by attribute + sort order.\r\n (!filter.orderBy ? \"\" : \"&OrderBy=\" + filter.orderBy) +\r\n (filter.sortOrder ? `&SortOrder=${filter.sortOrder == Api.ESortOrder.Asc ? \"ASC\" : \"DESC\"}` : \"\");\r\n \r\n const data = await api.GET(url, Api.PrepReqParams());\r\n const entities = data.Items;\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.Cache.Set(GetCacheKey(id), entity, Api.DEFAULT_CACHE_DURATION);\r\n }\r\n return entities;\r\n }\r\n }\r\n\r\n // TODO: Helpers for constructing the filter.\r\n }\r\n}","import { Entity } from \"../entity/entity\";\r\nimport { PathUtils } from \"../util/path-utils\";\r\n\r\nfunction getVariable(str: string): { text: string, path: string } {\r\n const start = str.indexOf(\"${\");\r\n if (start > -1) {\r\n const end = str.indexOf(\"}\");\r\n if (end > -1) {\r\n if (start < end) {\r\n return { path: str.substring(start + 2, end), text: str.substring(start, end) };\r\n }\r\n }\r\n }\r\n return <any>null;\r\n}\r\n\r\n/**\r\n * Utilities for parsing \"Bruce variables\", typically within strings.\r\n * \r\n * A Bruce variable is a string that starts with \"${\" and ends with \"}\".\r\n * Within those brackets is a path to an attribute in an entity.\r\n */\r\nexport namespace BruceVariable {\r\n /**\r\n * Replaces all Bruce variables in a string with the value of the attribute.\r\n * @param str \r\n * @param data \r\n * @param legacyParse \r\n * @returns \r\n */\r\n export function SwapValues(str: string, data: Entity.IEntity, legacyParse?: boolean): string {\r\n if (!legacyParse) {\r\n legacyParse = false;\r\n }\r\n while (true) {\r\n const variable = getVariable(str);\r\n if (variable) {\r\n const path = legacyParse ? PathUtils.ParseLegacy(variable.path) : PathUtils.Parse(variable.path);\r\n let value = \"\";\r\n if (path.length > 0) {\r\n value = Entity.GetValue(data, path);\r\n }\r\n str = str.replace(variable.text, value);\r\n } \r\n else {\r\n break;\r\n }\r\n }\r\n return str;\r\n }\r\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 * Utility for calculating values from Bruce fields.\r\n * These fields are typically found in entity styles.\r\n */\r\nexport namespace Calculator {\r\n export enum EValueType {\r\n Color,\r\n Input,\r\n Gradient,\r\n Mapping,\r\n TagColor,\r\n RandomColor\r\n }\r\n\r\n export interface IMappingOption {\r\n fieldValue: string;\r\n appliedValue: string;\r\n }\r\n\r\n export interface IMappingValue {\r\n field: string;\r\n values: IMappingOption[];\r\n }\r\n\r\n export interface IGradientPoint {\r\n position: number;\r\n color: string;\r\n }\r\n\r\n export interface IGradientValue {\r\n field: string;\r\n min: number;\r\n max: number;\r\n points: IGradientPoint[];\r\n }\r\n\r\n export interface IField {\r\n value: IGradientValue | IMappingValue | string | number;\r\n type: EValueType;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options.\r\n * The context calling this should validate results and parse stuff if needed.\r\n * @param fields \r\n * @param entity \r\n * @param tags \r\n * @returns \r\n */\r\n export function GetValue(fields: IField[], entity: Entity.IEntity, tags: any[]): string | number | Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n if (value) {\r\n value = Color.ColorFromStr(value);\r\n }\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetMappingValue(value: IMappingValue, entity: Entity.IEntity): string | number {\r\n const attrPath: string[] = PathUtils.Parse(value.field);\r\n const eValue: number = +Entity.GetValue(entity, attrPath);\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 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 return <any>null;\r\n }\r\n\r\n export function GetGradientValue(value: IGradientValue, entity: Entity.IEntity): Color.IColor {\r\n const attrPath: string[] = PathUtils.Parse(value.field);\r\n let eValue: any = Entity.GetValue(entity, attrPath);\r\n eValue = Math.min(Math.max(eValue, value.min), value.max);\r\n if (eValue < value.points[0].position) {\r\n return Color.ColorFromStr(value.points[0].color);\r\n }\r\n for (let i = 0; i < value.points.length - 1; i++) {\r\n const pointA = value.points[i];\r\n const pointB = value.points[i+1];\r\n\r\n if (eValue >= pointA.position && eValue <= pointB.position) {\r\n if (pointA.position == pointB.position) {\r\n return Color.ColorFromStr(pointA.color);\r\n }\r\n const distance = (eValue - pointA.position)/(pointB.position - pointA.position);\r\n const colorA = Color.ColorFromStr(pointA.color);\r\n const colorB = Color.ColorFromStr(pointB.color);\r\n return {\r\n red: colorA.red + (colorB.red - colorA.red) * distance,\r\n green: colorA.green + (colorB.green - colorA.green) * distance,\r\n blue: colorA.blue + (colorB.blue - colorA.blue) * distance,\r\n alpha: colorA.alpha + (colorB.alpha - colorA.alpha) * distance\r\n }\r\n }\r\n }\r\n return Color.ColorFromStr(value.points[value.points.length - 1].color);\r\n }\r\n\r\n export function GetInputValue(value: string, entity: Entity.IEntity): string | number {\r\n if (typeof value == \"string\") {\r\n try {\r\n value = BruceVariable.SwapValues(value, entity);\r\n return eval(value);\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\");\r\n }\r\n if (!suppress) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n return <any>value;\r\n }\r\n}","interface IBruceEventCallback {\r\n _id: number;\r\n removeCallback: () => void;\r\n callback: (data: any) => void;\r\n}\r\n\r\n/**\r\n * Simple event utility.\r\n * Instantiate the model, then subscribe and trigger events.\r\n */\r\nexport class BruceEvent<TArgs> {\r\n // Counter to help differentiate subscriptions.\r\n private _counter: number = 0;\r\n\r\n // Record of all callback subscriptions for this event.\r\n private callbacks: IBruceEventCallback[] = [];\r\n\r\n\r\n public Subscribe(callback: (data: TArgs) => void): (() => void) {\r\n let id = this._counter++;\r\n let newBruceEventCallback: IBruceEventCallback = {\r\n \t_id: id,\r\n \tremoveCallback: () => {\r\n \t\tthis.Unsubscribe(id);\r\n \t},\r\n \tcallback: callback\r\n };\r\n this.callbacks.push(newBruceEventCallback);\r\n return newBruceEventCallback.removeCallback;\r\n }\r\n\r\n public Unsubscribe(id: number): void {\r\n let index = this.callbacks.findIndex(x => x._id == id);\r\n if (index > -1) {\r\n this.callbacks.splice(index, 1);\r\n }\r\n }\r\n\r\n public Trigger(data?: TArgs): void {\r\n let callbacks = this.callbacks;\r\n for (let i = 0; i < callbacks.length; i++) {\r\n let callback = callbacks[i];\r\n if (callback.callback) {\r\n callback.callback(data);\r\n }\r\n }\r\n }\r\n\r\n public Clear(): void {\r\n this.callbacks = [];\r\n }\r\n}","export namespace Camera {\r\n export enum EFrustum {\r\n Perspective,\r\n Orthographic\r\n }\r\n}","/**\r\n * Describes 2d and 3d coordinates.\r\n * \r\n * In 2d the x/y typically refers to a window left/top offset.\r\n * In 3d the x/y/z, the units are in meters.\r\n */\r\nexport namespace Cartes {\r\n export interface ICartes2 {\r\n x: number;\r\n y: number;\r\n }\r\n\r\n export interface ICartes3 extends ICartes2 {\r\n z: number;\r\n }\r\n\r\n export function ValidateCartes2(cartes: ICartes2): boolean {\r\n if (!cartes) {\r\n return false;\r\n }\r\n else if (!cartes.x && cartes.x != 0) {\r\n return false;\r\n }\r\n else if (!cartes.y && cartes.y != 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function ValidateCartes3(cartes: ICartes3): boolean {\r\n if (!ValidateCartes2(cartes)) {\r\n return false;\r\n }\r\n else if (!cartes.z && cartes.z != 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function IsEqualCartes2(a: ICartes2, b: ICartes2): boolean {\r\n if (a.x != b.x) {\r\n return false;\r\n }\r\n else if (a.y != b.y) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function IsEqualCartes3(a: ICartes3, b: ICartes3): boolean {\r\n if (!IsEqualCartes2(a, b)) {\r\n return false;\r\n }\r\n else if (a.z != b.z) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n}","/**\r\n * Describes a geographic point.\r\n * The units of the stored data should be in Degrees.\r\n * Utilities may use this in Radians for temporary calculations.\r\n */\r\nexport namespace Carto {\r\n export interface ICarto {\r\n latitude: number;\r\n longitude: number;\r\n altitude: number;\r\n }\r\n\r\n export function ValidateCarto(carto: ICarto): boolean {\r\n if (!carto) {\r\n return false;\r\n }\r\n else if (!carto.longitude && carto.longitude != 0) {\r\n return false;\r\n }\r\n else if (!carto.latitude && carto.latitude != 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function IsEqual(a: ICarto, b: ICarto): boolean {\r\n if (a.longitude != b.longitude) {\r\n return false;\r\n }\r\n else if (a.latitude != b.latitude) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function GetCenter(list: ICarto[]): ICarto {\r\n let center = { \r\n longitude: 0, \r\n latitude: 0, \r\n altitude: 0 \r\n };\r\n for (let i = 0; i < list.length; i++) {\r\n const carto = list[i];\r\n center.longitude += carto.longitude;\r\n center.latitude += carto.latitude;\r\n if (carto.altitude) {\r\n center.altitude += carto.altitude;\r\n }\r\n }\r\n if (center.longitude) {\r\n center.longitude /= list.length;\r\n }\r\n if (center.latitude) {\r\n center.latitude /= list.length;\r\n }\r\n if (center.altitude) {\r\n center.altitude /= list.length;\r\n }\r\n return center;\r\n }\r\n}","/**\r\n * Controls the flow of method calls.\r\n * If you have a method that may be called often, but you don't want it to run often, use this.\r\n */\r\nexport class DelayQueue {\r\n // The callback is the method we want to control queue for.\r\n private callback: () => void;\r\n\r\n // Millisecond delay.\r\n public delay: number = 200;\r\n\r\n // Date-time stamp for the last callback call.\r\n private lastCallTime: number = <any>null;\r\n\r\n // The delay timeout for calling update.\r\n private delayTimeout: any;\r\n\r\n\r\n constructor(callback: () => void, delay: number = 200) {\r\n this.callback = callback;\r\n this.delay = delay;\r\n }\r\n\r\n public Call(force: boolean = false): void {\r\n if (this.lastCallTime == null) {\r\n force = true;\r\n }\r\n if (force) {\r\n let endDate = new Date().getTime();\r\n this.doCall(endDate);\r\n }\r\n else {\r\n const endDate = new Date().getTime();\r\n const seconds = (endDate - this.lastCallTime) / 1000;\r\n const delay = this.delay / 1000;\r\n if (seconds > delay) {\r\n this.doCall(endDate);\r\n }\r\n else if (this.delayTimeout == null) {\r\n const diff = (delay - seconds) * 1000;\r\n this.delayTimeout = setTimeout(() => {\r\n this.delayTimeout = null;\r\n this.Call();\r\n }, diff + 0.02);\r\n }\r\n }\r\n }\r\n\r\n private doCall(endDate: number): void {\r\n if (this.delayTimeout != null) {\r\n clearTimeout(this.delayTimeout);\r\n this.delayTimeout = null;\r\n }\r\n this.lastCallTime = endDate;\r\n this.callback();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.delayTimeout != null) {\r\n clearTimeout(this.delayTimeout);\r\n this.delayTimeout = null;\r\n }\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(data: string): Carto.ICarto[] {\r\n data = data.replace(/[^\\d.,-\\s]/g, \"\");\r\n\r\n let splitterCoordinates = \" \";\r\n let splitterAxis = \",\";\r\n const commaIndex = data.indexOf(\",\");\r\n const spaceIndex = data.indexOf(\" \");\r\n if ((spaceIndex > -1 && commaIndex > spaceIndex) || commaIndex <= -1) {\r\n splitterCoordinates = \",\";\r\n splitterAxis = \" \";\r\n }\r\n\r\n let points = data.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 = +coords[0];\r\n const latitude = +coords[1];\r\n const altitude = 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}","/**\r\n * Describes a Bruce stored date.\r\n */\r\nexport namespace UTC {\r\n export enum EMonth {\r\n January = 1,\r\n February = 2,\r\n March = 3,\r\n April = 4,\r\n May = 5,\r\n June = 6,\r\n July = 7,\r\n August = 8,\r\n September = 9,\r\n October = 10,\r\n November = 11,\r\n December = 12\r\n }\r\n\r\n export interface IUTC {\r\n d: number;\r\n hh: number;\r\n m: EMonth | number;\r\n mm: number;\r\n ss: number;\r\n y: number;\r\n }\r\n\r\n export function ToDate(utc: IUTC): Date {\r\n return new Date(utc.y, utc.m - 1, utc.d, utc.hh, utc.mm, utc.ss, 0);\r\n }\r\n\r\n export function FromDate(date: Date): IUTC {\r\n return {\r\n y: date.getUTCFullYear(),\r\n m: date.getUTCMonth() + 1,\r\n d: date.getUTCDate(),\r\n hh: date.getUTCHours(),\r\n mm: date.getUTCMinutes(),\r\n ss: date.getUTCSeconds()\r\n };\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\ntype Type = EntityAttachmentType.EType | string;\r\n\r\n/**\r\n * Describes the \"Entity Attachment Type\" concept within Bruce.\r\n * It is a record that describes the purpose of an attachment.\r\n */\r\nexport namespace EntityAttachmentType {\r\n export function GetCacheKey(id: Type): string {\r\n return Api.ECacheKey.AttachmentType + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.AttachmentType;\r\n }\r\n\r\n export interface IType {\r\n Description: string;\r\n ID: string | EType;\r\n Name: string;\r\n }\r\n\r\n export enum EType {\r\n Photo = \"photo\",\r\n Document = \"document\"\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, id: Type): Promise<void> {\r\n if (!id) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entityAttachmentType/${id}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IType): Promise<IType> {\r\n if (!data?.ID) {\r\n throw(\"Type ID is required.\");\r\n }\r\n data = await api.POST(`entityAttachmentType/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IType[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IType[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityAttachmentTypes`, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../bruce-models\";\r\nimport { ClientFile } from \"../client-file/client-file\";\r\nimport { EntityAttachmentType } from \"./entity-attachment-type\";\r\n\r\ntype Type = EntityAttachmentType.EType | string;\r\n\r\n/**\r\n * Describes the \"Entity Attachment\" concept within Bruce.\r\n * An entity attachment is an arbitrary file record that is linked to an entity record.\r\n * The same file can be attached to multiple entities.\r\n */\r\nexport namespace EntityAttachment {\r\n export function GetCacheKey(entityId: string, typeId: Type, fileId: string): string {\r\n return Api.ECacheKey.Attachment + Api.ECacheKey.Id + entityId + Api.ECacheKey.Id + typeId + Api.ECacheKey.Id + fileId;\r\n }\r\n\r\n export function GetListCacheKey(entityId: string): string {\r\n return Api.ECacheKey.Attachment + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface IAttachment {\r\n ClientFile: ClientFile.IClientFile;\r\n Group: string;\r\n \"ClientFile.ID\": string;\r\n DisplayOrder: number;\r\n \"Entity.ID\": string;\r\n \"EntityAttachmentType.ID\": Type;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IAttachment): Promise<IAttachment> {\r\n if (!data?.[\"Entity.ID\"] || !data?.[\"EntityAttachmentType.ID\"] || !data?.[\"ClientFile.ID\"]) {\r\n throw(\"Entity ID, Type ID, and File ID are required.\");\r\n }\r\n const url = `entity/${data[\"Entity.ID\"]}/attachment/${data[\"EntityAttachmentType.ID\"]}/${data[\"ClientFile.ID\"]}`;\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data[\"Entity.ID\"], data[\"EntityAttachmentType.ID\"], data[\"ClientFile.ID\"]));\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(data[\"Entity.ID\"]));\r\n return data;\r\n }\r\n\r\n export async function UpdateOrder(api: BruceApi.Api, entityId: string, typeId: Type, fileIds: string[]): Promise<void> {\r\n if (!entityId || !typeId || !fileIds?.length) {\r\n throw(\"Entity ID, Type ID, and File IDs are required.\");\r\n }\r\n const reqData = {\r\n \t\"DisplayOrder.Start\": 0,\r\n \t\"ClientFile.ID\": fileIds\r\n };\r\n await api.POST(`entity/${entityId}/attachments/${typeId}/setOrder`, reqData, Api.PrepReqParams());\r\n for (let i = 0; i < fileIds.length; i++) {\r\n api.Cache.Remove(GetCacheKey(entityId, typeId, fileIds[i]));\r\n }\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, data: IAttachment): Promise<void> {\r\n if (!data?.[\"Entity.ID\"] || !data?.[\"EntityAttachmentType.ID\"] || !data?.[\"ClientFile.ID\"]) {\r\n throw(\"Entity ID, Type ID, and File ID are required.\");\r\n }\r\n const reqData = {\r\n \t\"ClientFile.ID\": [data[\"ClientFile.ID\"]]\r\n };\r\n await api.POST(`entity/${data[\"Entity.ID\"]}/attachments/${data[\"EntityAttachmentType.ID\"]}/delete`, reqData, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data[\"Entity.ID\"], data[\"EntityAttachmentType.ID\"], data[\"ClientFile.ID\"]));\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(data[\"Entity.ID\"]));\r\n }\r\n\r\n export async function DeleteByFileIds(api: BruceApi.Api, entityId: string, typeId: Type, fileIds: string[]): Promise<void> {\r\n if (!entityId || !typeId || !fileIds?.length) {\r\n throw(\"Entity ID, Type ID, and File IDs are required.\");\r\n }\r\n const reqData = {\r\n \t\"ClientFile.ID\": fileIds\r\n };\r\n await api.POST(`entity/${entityId}/attachments/${typeId}/delete`, reqData, Api.PrepReqParams());\r\n for (let i = 0; i < fileIds.length; i++) {\r\n api.Cache.Remove(GetCacheKey(entityId, typeId, fileIds[i]));\r\n }\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\r\n }\r\n\r\n export async function GetListByEntityId(api: BruceApi.Api, entityId: string): Promise<IAttachment[]> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IAttachment[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/attachments`, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityId), req);\r\n return req;\r\n }\r\n\r\n export async function Upload(api: BruceApi.Api, file: Blob, entityId: string, typeId: Type, onProgress?: (e: ProgressEvent) => void): Promise<IAttachment> {\r\n if (!entityId || !typeId || !file) {\r\n throw(\"Entity ID, Type ID, and File are required.\");\r\n }\r\n const url = `entity/${entityId}/attachment/${typeId}`;\r\n const req = await api.UPLOAD(url, file, { onProgress: onProgress });\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, UTC } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"Entity Comment\" concept within Bruce.\r\n * An entity comment is a user written message that is linked to an entity record.\r\n */\r\nexport namespace EntityComment {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.Comment + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(entityId: string): string {\r\n return Api.ECacheKey.Comment + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface IComment {\r\n Comment: string;\r\n \"Created.ByUser.ID\": string;\r\n \"Created.Date\": UTC.IUTC;\r\n ID: number;\r\n RepliesCount: number;\r\n \"ReplyTo.Comment.ID\": number;\r\n \"TargetObject.ID\": string;\r\n \"TargetObject.Type\": string;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IComment): Promise<IComment> {\r\n if (!data?.[\"TargetObject.ID\"]) {\r\n throw(\"TargetObject.ID (entity id) is required.\");\r\n }\r\n const url = `entity/${data[\"TargetObject.ID\"]}/comment` + (data.ID == null ? \"\" : \"/\" + data.ID);\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\r\n return data;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, entityId: string, commentId: number): Promise<void> {\r\n if (!commentId) {\r\n throw(\"Comment ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/comment/${commentId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(commentId));\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\r\n }\r\n\r\n export async function GetListByEntityId(api: BruceApi.Api, entityId: string): Promise<IComment[]> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IComment[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/comments`, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityId), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"Entity Link\" concept within Bruce.\r\n * An entity link is a URL linked to an entity record.\r\n */\r\nexport namespace EntityLink {\r\n export function GetCacheKey(id: number): string {\r\n return Api.ECacheKey.Link + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(entityId: string): string {\r\n return Api.ECacheKey.Link + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface ILink {\r\n DisplayName: string;\r\n ID?: number;\r\n \"Entity.ID\": string;\r\n URL: string;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: ILink): Promise<ILink> {\r\n if (!data?.[\"Entity.ID\"]) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const url = `entity/${data[\"Entity.ID\"]}/link` + (data.ID == null ? \"\" : \"/\" + data.ID);\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(<number>data.ID));\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\r\n return data;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, entityId: string, linkId: number): Promise<void> {\r\n if (!linkId) {\r\n throw(\"Link ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/link/${linkId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(linkId));\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\r\n }\r\n\r\n export async function GetListByEntityId(api: BruceApi.Api, entityId: string): Promise<ILink[]> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<ILink[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/links`, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityId), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ClientFile } from \"../client-file/client-file\";\r\n\r\n/**\r\n * Describes the \"Entity LOD\" concept within Bruce.\r\n * LOD stands for Level of Detail.\r\n * An lod record is a possible 2d/3d visualization of the entity record.\r\n * The most common kind is a GLB.\r\n */\r\nexport namespace EntityLod {\r\n export function GetCacheKey(url: string): string {\r\n return Api.ECacheKey.Lod + Api.ECacheKey.Id + url;\r\n }\r\n\r\n export function GetTypeListKey(typeId: string, group: string): string {\r\n return Api.ECacheKey.Lod + Api.ECacheKey.EntityType + typeId + Api.ECacheKey.Id + group;\r\n }\r\n\r\n export interface ILod {\r\n ClientFile?: ClientFile.IClientFile;\r\n \"ClientFile.ID\": string;\r\n \"Entity.ID\": string;\r\n \"LODCategory.Key\": string;\r\n Level: number;\r\n Group?: string;\r\n }\r\n\r\n export function GetUrl(api: BruceApi.Api, entityId: string, categoryId: string, level: number, strict?: boolean): string {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n if (!categoryId) {\r\n categoryId = \"GLB\";\r\n }\r\n if (!level) {\r\n level = 0;\r\n }\r\n let url: string = api.GetBaseUrl() + `entity/${entityId}/lod/${categoryId}/${level}`;\r\n if (strict) {\r\n url = url + \"?strict=true\";\r\n }\r\n return url;\r\n }\r\n\r\n export async function GetUrlFileId(api: BruceApi.Api, url: string): Promise<string> {\r\n if (!url) {\r\n throw(\"Url is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(url));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<string> = new Promise(async (res, rej) => {\r\n try {\r\n const record: ILod = await api.get(url, Api.PrepReqParams());\r\n res(record[\"ClientFile.ID\"]);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetCacheKey(url), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetLods(api: BruceApi.Api, params: Filter.IListParams): Promise<Filter.IListResItem[]> {\r\n if (!params?.Items?.length) {\r\n throw(\"Items are required.\");\r\n }\r\n const data = await api.POST(\"entity/getlods\", params);\r\n return data.Items;\r\n }\r\n\r\n /**\r\n * Returns lods for a specified entity type.\r\n * @param api \r\n * @param typeId \r\n * @param group default is \"DEFAULT\".\r\n */\r\n export async function GetTypeLods(api: BruceApi.Api, typeId: string, group?: string): Promise<ILod[]> {\r\n if (!group) {\r\n group = \"DEFAULT\";\r\n }\r\n const cacheData = api.Cache.Get(GetTypeListKey(typeId, group));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const url = `entityType/${typeId}/lods?includeClientFiles=yes` + (group ? \"&group=\" + group : \"\");\r\n const req = api.GET(url, Api.PrepReqParams());\r\n const prom: Promise<ILod[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetTypeListKey(typeId, group), prom, Api.DEFAULT_CACHE_DURATION);\r\n return prom;\r\n }\r\n\r\n export namespace Filter {\r\n export interface IListParamsItem {\r\n \"entityId\": string,\r\n \"categoryId\": string,\r\n \"group\"?: string,\r\n \"level\"?: number\r\n }\r\n \r\n export interface IListParams {\r\n \"strict\": boolean,\r\n \"externalSources\": boolean,\r\n \"Items\": IListParamsItem[]\r\n }\r\n \r\n export interface IListResItem {\r\n clientFileId: string;\r\n entityId: string;\r\n accountId: string;\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\n\r\n/**\r\n * Describes the \"Entity Relationship Type\" concept within Bruce.\r\n * A relationship type record describes the purpose of a relationship.\r\n */\r\nexport namespace EntityRelationType {\r\n export function GetCacheKey(id: string): string {\r\n return Api.ECacheKey.RelationType + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.RelationType;\r\n }\r\n\r\n export interface IType {\r\n ID: string;\r\n ForwardName: string;\r\n ReverseName: string;\r\n Name: string;\r\n FlipDisplayDirection?: boolean;\r\n EntityDisplaySettingID?: string;\r\n \"Relation.EntityType.ID\"?: string;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, typeId: string): Promise<IType> {\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const key = GetCacheKey(typeId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entityRelationType/${typeId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, typeId: string): Promise<void> {\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entityRelationType/${typeId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(typeId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IType[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IType[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"entityRelationTypes\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IType): Promise<IType> {\r\n if (!data?.ForwardName || !data?.ReverseName) {\r\n throw(\"Forward and reverse names are required.\");\r\n }\r\n if (!data.ID) {\r\n data.ID = ObjectUtils.UId();\r\n }\r\n data = await api.POST(`entityRelationType/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Entity } from \"./entity\";\r\n\r\n/**\r\n * Describes the \"Entity Relationship\" concept within Bruce.\r\n * An entity relationship is an arbitrary link between two entity records.\r\n * The relationship can have a \"data entity\" linked to it as well for the relationship to store arbitrary data about itself.\r\n */\r\nexport namespace EntityRelation {\r\n export function GetCacheKey(entityA: string, entityB: string, typeId: string): string {\r\n return `${Api.ECacheKey.Relation}${Api.ECacheKey.Id}${entityA}${Api.ECacheKey.Id}${entityB}${Api.ECacheKey.Id}${typeId}`;\r\n }\r\n\r\n export function GetEntityCacheKey(entityId: string): string {\r\n return Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export function GetListCacheKey(entityId: string, params: IListParams): string {\r\n return Api.ECacheKey.Relation + Api.ECacheKey.RelationType + \r\n Api.ECacheKey.Id + params.typeId + \r\n Api.ECacheKey.Id + params.oneWayOnly + \r\n Api.ECacheKey.Id + params.loadEntityData +\r\n Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface IRelation {\r\n \"Principal.Entity.ID\": string;\r\n \"Related.Entity.ID\": string;\r\n RelatedEntity?: Entity.IEntity;\r\n PrincipalEntity?: Entity.IEntity;\r\n \"Relation.Type.ID\": string;\r\n RelationType: any;\r\n \"Data.Entity.ID\"?: string;\r\n }\r\n\r\n export interface IListParams {\r\n typeId?: string;\r\n oneWayOnly?: boolean;\r\n loadEntityData?: boolean;\r\n }\r\n\r\n export async function Create(api: BruceApi.Api, data: IRelation): Promise<void> {\r\n if (!data[\"Principal.Entity.ID\"] || !data[\"Related.Entity.ID\"] || !data[\"Relation.Type.ID\"]) {\r\n throw(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\r\n }\r\n const reqData = {\r\n \"Related.Entity.ID\": [data[\"Related.Entity.ID\"]] \r\n };\r\n const url = `entity/${data[\"Principal.Entity.ID\"]}/relation/${data[\"Relation.Type.ID\"]}/add`;\r\n await api.POST(url, reqData, Api.PrepReqParams());\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + data[\"Relation.Type.ID\"]);\r\n if (data[\"Data.Entity.ID\"]) {\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + data[\"Data.Entity.ID\"]);\r\n }\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IRelation): Promise<IRelation> {\r\n if (!data[\"Principal.Entity.ID\"] || !data[\"Related.Entity.ID\"] || !data[\"Relation.Type.ID\"]) {\r\n throw(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\r\n }\r\n const url = `entity/${data[\"Principal.Entity.ID\"]}/otherEntityID/${data[\"Related.Entity.ID\"]}/relation/${data[\"Relation.Type.ID\"]}/update`;\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + data[\"Relation.Type.ID\"]);\r\n if (data[\"Data.Entity.ID\"]) {\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Entity + Api.ECacheKey.Id + data[\"Data.Entity.ID\"]);\r\n }\r\n return data;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, entityId: string, params: IListParams): Promise<IRelation[]> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n params = {\r\n typeId: \"\",\r\n oneWayOnly: false,\r\n loadEntityData: false,\r\n ...params\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityId, params));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IRelation[]> = new Promise(async (res, rej) => {\r\n try {\r\n let url = `entity/${entityId}/relations`;\r\n if (params.typeId) {\r\n url += \"/\" + params.typeId;\r\n }\r\n url += `?Oneway=${params.oneWayOnly}&LoadInfo=${params.loadEntityData}`;\r\n const data = await api.GET(url, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityId, params), req);\r\n return req;\r\n }\r\n\r\n export async function GetByDataEntityId(api: BruceApi.Api, entityId: string): Promise<IRelation> {\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetEntityCacheKey(entityId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entity/relation/${entityId}/dataentity`, Api.PrepReqParams());\r\n api.Cache.Set(GetEntityCacheKey(entityId), req);\r\n return req;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, IDictionary } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"Entity Source\" concept within Bruce.\r\n * An entity source is a record which links an arbitrary source id to a Bruce entity id.\r\n * For example an OSM building id to a Bruce entity id.\r\n */\r\nexport namespace EntitySource {\r\n export function GetCacheKey(sourceId: number, sourceKey: string): string {\r\n return `${Api.ECacheKey.EntitySource}${Api.ECacheKey.Id}${sourceId}${Api.ECacheKey.Id}${sourceKey}`;\r\n }\r\n\r\n export interface ISource {\r\n \"Entity.ID\": string;\r\n \"Source.ID\": number;\r\n \"SourceRecord.Key\": string;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, sourceId: number, sourceKey: string): Promise<ISource> {\r\n if (!sourceId || !sourceKey) {\r\n throw(\"Source ID and Source Key are required.\");\r\n }\r\n const key = GetCacheKey(sourceId, sourceKey);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entitysource/${sourceId}/${sourceKey}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetListByKeys(api: BruceApi.Api, sourceId: number, sourceKeys: string[]): Promise<ISource[]> {\r\n if (!sourceId || !sourceKeys.length) {\r\n throw(\"Source ID and Source Keys are required.\");\r\n }\r\n const reqKeys: string[] = [];\r\n const reqs: Promise<ISource>[] = [];\r\n for (let i = 0; i < sourceKeys.length; i++) {\r\n const sourceKey = sourceKeys[i];\r\n const cacheData = api.Cache.Get(GetCacheKey(sourceId, sourceKey));\r\n if (cacheData) {\r\n reqs.push(cacheData);\r\n } \r\n else {\r\n reqKeys.push(sourceKey);\r\n }\r\n }\r\n if (reqKeys.length) {\r\n const prom: Promise<ISource[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.POST(`entitysource/${sourceId}`, { SourceRecordKeys: reqKeys }, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n for (let i = 0; i < reqKeys.length; i++) {\r\n const req: Promise<ISource> = new Promise(async (res, rej) => {\r\n try {\r\n const sources = await prom;\r\n res(<ISource>sources.find((s: ISource) => s[\"SourceRecord.Key\"] === reqKeys[i]));\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n reqs.push(req);\r\n }\r\n }\r\n return (await Promise.all(reqs)).filter(x => !!x);\r\n }\r\n\r\n export async function GetEntityIdsBySourceKeys(api: BruceApi.Api, sourceId: number, sourceKeys: string[]): Promise<IDictionary<string>> {\r\n if (!sourceId || !sourceKeys.length) {\r\n throw(\"Source ID and Source Keys are required.\");\r\n }\r\n const result: IDictionary<string> = {};\r\n if (sourceKeys.length > 0) {\r\n const sources = await GetListByKeys(api, sourceId, sourceKeys);\r\n for (let i = 0; i < sources.length; i++) {\r\n const source = sources[i];\r\n for (let i = 0; i < sourceKeys.length; i++) {\r\n const key = sourceKeys[i];\r\n if (key == source[\"SourceRecord.Key\"]) {\r\n result[key] = source[\"Entity.ID\"];\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\n/**\r\n * Describes the \"Entity Tag\" concept within Bruce.\r\n * An entity tag is used to categorize an entity record.\r\n * Entity tags can be used in filters, or to restrict entity access.\r\n */\r\nexport namespace EntityTag {\r\n export function GetCacheKey(tagId: number): string {\r\n return `${Api.ECacheKey.Tag}${Api.ECacheKey.Id}${tagId}`;\r\n }\r\n\r\n export function GetListCacheKey(entityTypeId?: string): string {\r\n if (entityTypeId) {\r\n return Api.ECacheKey.Tag + Api.ECacheKey.EntityType + Api.ECacheKey.Id + entityTypeId;\r\n }\r\n return Api.ECacheKey.Tag;\r\n }\r\n\r\n export interface ITag {\r\n ID: number;\r\n Name?: string;\r\n Description?: string;\r\n IsAccessRestricted?: boolean;\r\n \"EntityType.ID\"?: string;\r\n Color?: string;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, tagId: number): Promise<ITag> {\r\n if (!tagId) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n const data = await GetListByIds(api, [tagId]);\r\n return data.length ? data[0] : <any>null;\r\n }\r\n\r\n export async function GetListByIds(api: BruceApi.Api, tagIds: number[]): Promise<ITag[]> {\r\n if (!tagIds.length) {\r\n throw(\"Tag Ids are empty.\");\r\n }\r\n const reqIds: number[] = [];\r\n const reqs: Promise<ITag>[] = [];\r\n for (let i = 0; i < tagIds.length; i++) {\r\n const tagId = tagIds[i];\r\n const cacheData = api.Cache.Get(GetCacheKey(tagId));\r\n if (cacheData) {\r\n reqs.push(cacheData);\r\n } \r\n else {\r\n reqIds.push(tagId);\r\n }\r\n }\r\n if (reqIds.length) {\r\n const prom: Promise<ITag[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.POST(\"layers/get\", { layerIds: reqIds }, Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n for (let i = 0; i < reqIds.length; i++) {\r\n const id = reqIds[i];\r\n const req: Promise<ITag> = new Promise(async (res, rej) => {\r\n try {\r\n const tags = await prom;\r\n const tag = tags.find((t: ITag) => t.ID === id);\r\n res(<ITag>tag);\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n api.Cache.Set(GetCacheKey(id), req, Api.DEFAULT_CACHE_DURATION);\r\n reqs.push(req);\r\n }\r\n }\r\n return (await Promise.all(reqs)).filter(x => !!x);\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, entityTypeId?: string): Promise<ITag[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey(entityTypeId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<ITag[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(entityTypeId ? `entityType/${entityTypeId}/layers` : \"layers\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(entityTypeId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, tagId: number): Promise<void> {\r\n if (!tagId) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n await api.DELETE(`layer/${tagId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(tagId));\r\n api.Cache.RemoveByStartsWith(GetListCacheKey());\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: ITag): Promise<ITag> {\r\n if (!data?.ID) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n const url = data.ID ? `layer/${data.ID}` : \"layer\";\r\n data = await api.POST(url, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.RemoveByStartsWith(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../bruce-models\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\n\r\n/**\r\n * Describes the \"Entity Type\" concept within Bruce.\r\n * An entity type is an \"expectation\" of what data \"should\" look like in a particular entity record.\r\n * The schema is stencils onto entity data to filter out what we should display or search against.\r\n */\r\nexport namespace EntityType {\r\n export function GetCacheKey(typeId: string): string {\r\n return `${Api.ECacheKey.EntityType}${Api.ECacheKey.Id}${typeId}`;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.EntityType;\r\n }\r\n\r\n export interface IEntityType {\r\n ID?: string;\r\n IsDeleted?: boolean;\r\n Name: string;\r\n Description?: string;\r\n Data?: any;\r\n DataSchema?: IAttribute;\r\n DisplayNameAttributePath?: string;\r\n \"DisplaySetting.ID\"?: number;\r\n AuthoringSettings?: {\r\n enabledTools: string[];\r\n defaultTool: string;\r\n };\r\n \"LastUpdate.Time\"?: UTC.IUTC;\r\n \"Parent.EntityType.ID\"?: string;\r\n }\r\n\r\n export interface IAttribute {\r\n Key: string;\r\n Name?: string;\r\n Type?: EAttributeType;\r\n Size?: number;\r\n IsIndexed?: boolean;\r\n IsArray?: boolean;\r\n IsImportant?: boolean;\r\n Description?: string;\r\n Structure?: IAttribute[];\r\n IsFamilyAttribute?: boolean;\r\n IsFamilyAttributeDefault?: boolean;\r\n Sources?: string[];\r\n }\r\n\r\n export enum EAttributeType {\r\n String = \"String\",\r\n Double = \"Double\",\r\n Integer = \"Integer\",\r\n Datetime = \"Datetime\",\r\n Structure = \"Structure\",\r\n Geometry = \"Geometry\"\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, typeId: string): Promise<IEntityType> {\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const key = GetCacheKey(typeId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entitytype/${typeId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, typeId: string): Promise<void> {\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entitytype/${typeId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(typeId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IEntityType[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IEntityType[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"entitytypes\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IEntityType): Promise<IEntityType> {\r\n if (!data) {\r\n data = <any>{};\r\n }\r\n if (!data.ID) {\r\n data.ID = ObjectUtils.UId();\r\n }\r\n if (!data.Name) {\r\n data.Name = data.ID;\r\n }\r\n data = await api.POST(`entitytype/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(<string>data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Bounds, IDictionary } from \"../../bruce-models\";\r\n\r\nclass Cell {\r\n public Fetched: boolean = false;\r\n public IsFetched: () => boolean = <any>null;\r\n public FetchPageIndex: number = 0;\r\n public Boundaries: Bounds.IBounds = <any>null;\r\n\r\n public GetBounds(): Bounds.IReqBounds {\r\n // Entity data works in -180 to 180 range.\r\n function prepareRangeForBounds(range: number): number {\r\n if (range > 180) {\r\n return range - 360;\r\n }\r\n return range;\r\n }\r\n\r\n // Add minor decimal as API crashes when giving it whole numbers.\r\n const maxLon = prepareRangeForBounds(this.Boundaries.maxLongitude) + 0.00001;\r\n const minLon = prepareRangeForBounds(this.Boundaries.minLongitude) - 0.00001;\r\n const maxLat = prepareRangeForBounds(this.Boundaries.maxLatitude) + 0.00001;\r\n const minLat = prepareRangeForBounds(this.Boundaries.minLatitude) - 0.00001;\r\n return {\r\n east: maxLon,\r\n north: maxLat,\r\n south: minLat,\r\n west: minLon\r\n };\r\n }\r\n}\r\n\r\nfunction floorValueToCellSize(size: number, value: number): number {\r\n return Math.floor(value / size) * size;\r\n}\r\n\r\nfunction getCellSizeFromHeight(height: number): number {\r\n if (height < 1000) {\r\n return 0.01;\r\n }\r\n if (height < 5000) {\r\n return 0.025;\r\n }\r\n else if (height < 10000) {\r\n return 0.05;\r\n }\r\n else if (height < 30000) {\r\n return 0.1;\r\n }\r\n else if (height < 70000) {\r\n return 0.2;\r\n }\r\n else if (height < 100000) {\r\n return 0.3;\r\n }\r\n else if (height < 150000) {\r\n return 0.4;\r\n }\r\n else if (height < 200000) {\r\n return 0.5;\r\n }\r\n else if (height < 300000) {\r\n return 0.6;\r\n }\r\n else if (height < 500000) {\r\n return 1;\r\n }\r\n return 1.5;\r\n}\r\n\r\nfunction getCell(cells: IDictionary<Cell>, cellSize: number, lon: number, maxLon: number, lat: number, maxLat: number): Cell {\r\n const id = cellSize + \"_\" + lon + \"_\" + maxLon + \"_\" + lat + \"_\" + maxLat;\r\n return cells[id];\r\n}\r\n\r\nfunction isCellFetched(cell: Cell): boolean {\r\n if (cell.Fetched) {\r\n return true;\r\n }\r\n // TODO: If all cells of the size smaller are fetched then this is fetched.\r\n // TODO: If this is a cell within a larger cell that is fetched then this is fetched.\r\n return false;\r\n}\r\n\r\nfunction getOrCreateCell(cells: IDictionary<Cell>, cellSize: number, lon: number, maxLon: number, lat: number, maxLat: number): Cell {\r\n const id = cellSize + \"_\" + lon + \"_\" + maxLon + \"_\" + lat + \"_\" + maxLat;\r\n let cell = getCell(cells, cellSize, lon, maxLon, lat, maxLat);\r\n if (!cell) {\r\n cell = cells[id] = new Cell();\r\n cell.Boundaries = <Bounds.IBounds>{\r\n minLatitude: lat,\r\n maxLatitude: maxLat,\r\n minLongitude: lon,\r\n maxLongitude: maxLon\r\n };\r\n cell.IsFetched = () => isCellFetched(cell);\r\n }\r\n return cell;\r\n}\r\n\r\n/**\r\n * This is a helper for making entity requests based on a grid area.\r\n * It will return grid cells based on given view-area then will remember when stuff- \r\n * was fully-fetched for those cells to avoid making duplicate requests.\r\n */\r\nexport namespace EntityGlobe {\r\n export class Grid {\r\n private cells: IDictionary<Cell> = {};\r\n \r\n public GetCellsForView(viewRect: Bounds.IReqBounds): Cell[] {\r\n const cells: Cell[] = [];\r\n const minLat = viewRect.south;\r\n const minLon = viewRect.west;\r\n const maxLat = viewRect.north;\r\n const maxLon = viewRect.east;\r\n const MAX_CELLS = 150;\r\n const cellDegreeSize = getCellSizeFromHeight(<number>viewRect.alt);\r\n const curMinLon = floorValueToCellSize(cellDegreeSize, minLon);\r\n const curMinLat = floorValueToCellSize(cellDegreeSize, minLat);\r\n const width = (maxLon - curMinLon) / cellDegreeSize;\r\n const height = (maxLat - curMinLat) / cellDegreeSize;\r\n for (let x = 0; x < width; x++) {\r\n for (let y = 0; y < height; y++) {\r\n const lon = x * cellDegreeSize + curMinLon;\r\n const lat = y * cellDegreeSize + curMinLat;\r\n const cell = getOrCreateCell(this.cells, cellDegreeSize, lon, lon + cellDegreeSize, lat, lat + cellDegreeSize);\r\n cells.push(cell);\r\n if (cells.length > MAX_CELLS) {\r\n break;\r\n }\r\n }\r\n }\r\n return cells;\r\n }\r\n }\r\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 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 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 \r\n constructor(api: BruceApi.Api, viewPort: ViewMonitor.IMonitor, typeId: string, batchSize: number, attrFilter: IDictionary<any>) {\r\n this.api = api;\r\n this.typeId = typeId;\r\n this.batchSize = batchSize;\r\n this.viewPort = viewPort;\r\n this.attrFilter = attrFilter;\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 \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 \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.viewRect);\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 while (retryAttempts > 0 && curCellIndex != null) {\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n if (retryDelay > 0) {\r\n await delay(retryDelay);\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 curCellIndex += 1;\r\n if (!cells[curCellIndex]) {\r\n curCellIndex = null;\r\n }\r\n continue;\r\n }\r\n \r\n try {\r\n const page = await Entity.Filter.V1.GetList(this.api,\r\n {\r\n pageSize: PAGE_SIZE,\r\n pageIndex : curCell.FetchPageIndex,\r\n entityTypeId: this.typeId,\r\n layerIds: this.tagIds,\r\n bounds: curCell.GetBounds(),\r\n sortOrder: Api.ESortOrder.Asc,\r\n entityTypeConditions: this.attrFilter\r\n }\r\n );\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n if (page) {\r\n this.onUpdate?.Trigger(page);\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 if (page.length <= 0 ) {\r\n curCell.Fetched = true; // Only mark as fetched when ALL pages are done.\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 (page.length > 0) {\r\n const first = page[0]?.Bruce?.ID;\r\n const last = page[page.length - 1]?.Bruce?.ID;\r\n if (prevFirstId == first && prevLastId == last) {\r\n break;\r\n }\r\n else {\r\n prevFirstId = <string>first;\r\n prevLastId = <string>last;\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.log(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\";\r\nimport { BruceEvent } from \"../../common/bruce-event\";\r\nimport { Carto } from \"../../common/carto\";\r\nimport { ViewMonitor } from \"./view-monitor\";\r\n\r\nconst MAX_AREA_IN_DEGREES = 90;\r\nconst GETTER_DELAY = 50;\r\n\r\n/**\r\n * This is a batched \"arbitrary data\" getter.\r\n * You feed it an array of data, then it will emit that data in batches when the view changes.\r\n */\r\nexport namespace BatchedDataGetter {\r\n export class Getter<T> {\r\n private viewPort: ViewMonitor.IMonitor\r\n private viewPortRemoval: () => void = <any>null;\r\n \r\n private batchSize: number;\r\n private viewRect: Bounds.IReqBounds = <any>null;\r\n private viewCenter: Carto.ICarto = <any>null;\r\n private getterInterval: any;\r\n private data: T[];\r\n \r\n private onUpdate: BruceEvent<T[]> = <any>null;\r\n public get OnUpdate(): BruceEvent<T[]> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<T[]>();\r\n }\r\n return this.onUpdate;\r\n }\r\n \r\n \r\n public constructor(data: T[], viewPort: ViewMonitor.IMonitor, batchSize: number) {\r\n this.data = data;\r\n this.viewPort = viewPort;\r\n this.batchSize = batchSize;\r\n this.viewPortRemoval = this.viewPort.Updated().Subscribe(() => {\r\n this.updateBounds();\r\n this.startGetterLoop();\r\n });\r\n }\r\n \r\n public Dispose(): void {\r\n this.viewPortRemoval?.();\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 startGetterLoop(): void {\r\n clearInterval(this.getterInterval);\r\n if (!this.viewRect || !this.viewCenter) {\r\n return;\r\n }\r\n let index = 0;\r\n this.getterInterval = setInterval(() => {\r\n this.processBatch(this.data.slice(index, index + this.batchSize));\r\n index += this.batchSize;\r\n if (index >= this.data.length) {\r\n clearInterval(this.getterInterval);\r\n }\r\n }, GETTER_DELAY);\r\n }\r\n \r\n private processBatch(batch: T[]): void {\r\n if (batch.length > 0) {\r\n this.onUpdate?.Trigger(batch);\r\n }\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, IDictionary } from \"../bruce-models\";\r\nimport { UTC } from \"../common/utc\";\r\n\r\n/**\r\n * Describes the \"Client File\" concept within Bruce.\r\n * A client file is a record of a file uploaded to Bruce.\r\n */\r\nexport namespace ClientFile {\r\n export function GetCacheKey(fileId: string): string {\r\n return `${Api.ECacheKey.ClientFile}${Api.ECacheKey.Id}${fileId}`;\r\n }\r\n\r\n export interface IClientFile {\r\n UploadedTimeUTC: UTC.IUTC;\r\n FileExt: string;\r\n ID: string;\r\n MIMEType: string;\r\n OriginalFileName: string;\r\n OriginalLength: number;\r\n \"UploadedByUser.ID\": string;\r\n Purpose: string;\r\n }\r\n\r\n export function GetUrl(api: BruceApi.Api, fileId: string): string {\r\n return `${api.GetBaseUrl()}/file/${fileId}`;\r\n }\r\n\r\n export function GetUrlWithExt(api: BruceApi.Api, file: IClientFile): string {\r\n return `${api.GetBaseUrl()}/file/${file.ID}${file.FileExt ? file.FileExt : \"\"}`;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, fileId: string): Promise<IClientFile> {\r\n if (!fileId) {\r\n throw(\"File ID is required.\");\r\n }\r\n const key = GetCacheKey(fileId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`file/${fileId}/details`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, fileIds: string[]): Promise<void> {\r\n if (!fileIds.length) {\r\n throw(\"File IDs are required.\");\r\n }\r\n const data = {\r\n Items: fileIds\r\n };\r\n await api.POST(\"deleteFiles\", data, Api.PrepReqParams());\r\n for (let i = 0; i < fileIds.length; i++) {\r\n const key = GetCacheKey(fileIds[i]);\r\n api.Cache.Remove(key);\r\n }\r\n }\r\n\r\n export async function Upload(api: BruceApi.Api, file: Blob, purpose?: string, onProgress?: (e: ProgressEvent) => void): Promise<IClientFile> {\r\n if (!file) {\r\n throw(\"File is required.\");\r\n }\r\n let formData: IDictionary<string> = <any>null;\r\n if (purpose) {\r\n formData = {\r\n \"Purpose\": purpose\r\n };\r\n }\r\n return api.UPLOAD(\"file/uploadNew\", file, { onProgress: onProgress, formData: formData });\r\n }\r\n\r\n export namespace Filter {\r\n export namespace V1 {\r\n export enum EColumn {\r\n ID = \"id\",\r\n Name = \"name\",\r\n DateTime = \"datetime\",\r\n MIMEType = \"mimeType\",\r\n Size = \"size\",\r\n User = \"user\",\r\n Extension = \"extension\"\r\n }\r\n \r\n export enum ESortOrder {\r\n ASC = \"asc\",\r\n DEC = \"desc\"\r\n }\r\n\r\n export enum ERowOperator {\r\n AND = \"AND\",\r\n OR = \"OR\"\r\n }\r\n\r\n export interface IRow {\r\n column: EColumn;\r\n value: any;\r\n valueOperator: string;\r\n includes: boolean;\r\n rowOperator: ERowOperator;\r\n rows?: IRow[];\r\n }\r\n\r\n export interface IFilter {\r\n PageSize?: number;\r\n PageIndex?: number;\r\n OrderBy?: EColumn;\r\n SortOrder?: ESortOrder;\r\n Purpose?: string;\r\n FilterRows?: IRow[];\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api, filter: IFilter): Promise<IClientFile[]> {\r\n const data = await api.POST(\"files/filtered\", filter, Api.PrepReqParams());\r\n return data.Items;\r\n }\r\n }\r\n\r\n\r\n // TODO: Helpers for constructing the filter.\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\ntype Id = ProgramKey.EProgramId | string;\r\n\r\n/**\r\n * Describes the \"Program Key\" concept within Bruce.\r\n * A program key is an access token for an arbitrary software.\r\n */\r\nexport namespace ProgramKey {\r\n export function GetCacheKey(programId: string): string {\r\n return Api.ECacheKey.ProgramKey + Api.ECacheKey.Id + programId;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.ProgramKey;\r\n }\r\n\r\n export enum EProgramId {\r\n CesiumIon = \"CesiumIon\",\r\n BingMaps = \"BingMaps\",\r\n Mapbox = \"Mapbox\"\r\n }\r\n\r\n export interface IKey {\r\n ProgramId: Id;\r\n Key: string;\r\n IsAccessRestricted?: boolean;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, programId: Id): Promise<IKey> {\r\n if (!programId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n const key = GetCacheKey(programId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`programkey/${programId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IKey[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IKey[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"programkeys\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, programId: Id): Promise<void> {\r\n if (!programId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n await api.DELETE(`programkey/${programId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(programId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IKey): Promise<IKey> {\r\n if (!data?.ProgramId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n data = await api.POST(\"programkey\", data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ProgramId));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Style } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes an expectation on what should be rendered for a menu item-\r\n * between a min-max distance of an entity to the camera.\r\n */\r\nexport namespace ZoomControl {\r\n export enum EDisplayType {\r\n Hidden = \"hidden\",\r\n Point = \"point\",\r\n Geometry = \"geometry\",\r\n Model3D = \"3d\"\r\n }\r\n\r\n export interface IItem {\r\n MinZoom?: number,\r\n MaxZoom?: number,\r\n DisplayType?: EDisplayType,\r\n StyleID?: number,\r\n Style?: Style.IEntitySettings;\r\n LODCategoryID?: string,\r\n LODLevel?: number | string;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { TilesetPointcloud } from \"./tileset-pointcloud\";\r\nimport { TilesetCad } from \"./tileset-cad\";\r\nimport { TilesetEntitiesMapTiles } from \"./tileset-entities-map-tiles\";\r\nimport { TilesetEntities } from \"./tileset-entities\";\r\nimport { TilesetExtMapTiles } from \"./tileset-ext-map-tiles\";\r\nimport { TilesetExtTerrainTiles } from \"./tileset-ext-terrain-tiles\";\r\nimport { TilesetMapTiles } from \"./tileset-map-tiles\";\r\nimport { TilesetTerrainTiles } from \"./tileset-terrain-tiles\";\r\nimport { PendingAction } from \"../server/pending-action\";\r\nimport { GlobalApi } from \"../api/global-api\";\r\n\r\ntype Settings = TilesetPointcloud.ISettings | \r\n TilesetCad.ISettings | \r\n TilesetEntitiesMapTiles.ISettings | \r\n TilesetEntities.ISettings | \r\n TilesetExtMapTiles.ISettings | \r\n TilesetExtTerrainTiles.ISettings | \r\n TilesetMapTiles.ISettings | \r\n TilesetTerrainTiles.ISettings;\r\n\r\n/**\r\n * Describes the \"Tileset\" concept in Bruce.\r\n * \r\n * Tilesets come in three possible variants,\r\n * 1- A set of instructions to generate a tileset.\r\n * 2- Settings to load a tileset hosted elsewhere.\r\n * 3- A set of user-provided files to serve.\r\n * \r\n * Read the individual tileset-type settings for each variant.\r\n */\r\nexport namespace Tileset {\r\n export function GetCacheKey(tilesetId: string, loadFiles: boolean): string {\r\n return `${Api.ECacheKey.Tileset}${Api.ECacheKey.Id}${tilesetId}${Api.ECacheKey.Id}${loadFiles}`;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.Tileset;\r\n }\r\n\r\n export interface ITileset {\r\n id: string;\r\n name: string;\r\n type: EType;\r\n rootFileName?: string;\r\n settings?: Settings;\r\n fileIds?: string[];\r\n creationTime?: UTC.IUTC;\r\n modificationTime?: UTC.IUTC;\r\n generateVersion?: number;\r\n isDeleteDisabled?: boolean;\r\n }\r\n\r\n export enum EType {\r\n PointCloud = \"POINT_CLOUD\",\r\n GeoMap = \"GEO_MAP\", // Previously gtfRasterMaps.\r\n EntitiesMap = \"ENTITIES_MAP\", // Previously rasterMap.\r\n EntitiesSet = \"ENTITIES_SET\", // Previously dynamic.\r\n Cad = \"MODEL\", // Generated CAD tileset from entity id.\r\n Terrain = \"GEO_TERR\",\r\n ExternalTerrain = \"EXTERNAL_TERR\",\r\n ExternalGeoMap = \"EXTERNAL_MAP\"\r\n }\r\n\r\n export enum EPivot {\r\n None = \"none\",\r\n Box = \"box\", \r\n Weight = \"weight\",\r\n UCS = \"ucs\"\r\n }\r\n\r\n export interface ITransform {\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n scale: number;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, tilesetId: string, loadFiles: boolean = false): Promise<ITileset> {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(tilesetId, loadFiles));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`tileset/get/${tilesetId}?noFiles=${loadFiles ? 0 : 1}`);\r\n api.Cache.Set(GetCacheKey(tilesetId, loadFiles), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<ITileset[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<ITileset[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"tileset/getList\")\r\n res(data);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, tilesetId: string): Promise<void> {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n await api.DELETE(`tileset/delete/${tilesetId}`);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + tilesetId);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: ITileset): Promise<ITileset> {\r\n if (!data?.name || !data?.type) {\r\n throw(\"Tileset name and type are required.\");\r\n }\r\n let isNew = !data.id;\r\n if (isNew) {\r\n const res: ITileset = await api.GET(`tileset/new?type=${data.type}&name=${Api.Encode(data.name)}`);\r\n data = {\r\n ...data,\r\n ...res\r\n }\r\n }\r\n data = await api.POST(`tileset`, data);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + data.id);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\r\n return data;\r\n }\r\n\r\n export async function UploadFile(api: BruceApi.Api, tilesetId: string, file: Blob, onProgress?: (e: ProgressEvent) => void): Promise<void> {\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n return api.UPLOAD(`tileset/uploadFile/${tilesetId}/files`, file, { onProgress: onProgress });\r\n }\r\n\r\n export async function DeleteFile(api: BruceApi.Api, tilesetId: string, file: string): Promise<void> {\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n await api.DELETE(`tileset/deleteFile/${tilesetId}/files/${file}`);\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export async function UploadSrcFile(api: BruceApi.Api, tilesetId: string, file: Blob, onProgress?: (e: ProgressEvent) => void): Promise<void> {\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/src`, file, { onProgress: onProgress });\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export async function DeleteSrcFile(api: BruceApi.Api, tilesetId: string, file: string): Promise<void> {\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n await api.DELETE(`tileset/deleteFile/${tilesetId}/src/${file}`);\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export function GetFileUrl(api: BruceApi.Api, tilesetId: string, file: string): string {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n if (!file) {\r\n file = \"\";\r\n }\r\n return api.GetBaseUrl() + `tileset/getFile/${tilesetId}/files/${file}`;\r\n }\r\n\r\n export function GetSrcFileUrl(api: BruceApi.Api, tilesetId: string, file: string): string {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n if (!file) {\r\n file = \"\";\r\n }\r\n return api.GetBaseUrl() + `tileset/getFile/${tilesetId}/src/${file}`;\r\n }\r\n\r\n export function GetPublicFileUrl(api: BruceApi.Api, tilesetId: string, file: string): string {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n if (!file) {\r\n file = \"\";\r\n }\r\n return api.GetBaseUrl() + `tileset/file/${tilesetId}/${file}`;\r\n }\r\n\r\n export async function Generate(api: BruceApi.Api, tilesetId: string): Promise<number> {\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n const res: PendingAction.IAction = await api.GET(`tileset/generate/${tilesetId}`);\r\n return res.ID;\r\n }\r\n\r\n export namespace Publish {\r\n export function GetCacheKey(accountId: string, tilesetId?: string): string {\r\n if (!tilesetId) {\r\n tilesetId = \"\";\r\n }\r\n return Api.ECacheKey.PublishTileset + Api.ECacheKey.Id + accountId + Api.ECacheKey.Id + tilesetId;\r\n }\r\n\r\n export interface IPublish {\r\n ID?: number;\r\n \"Tileset.ID\"?: string;\r\n \"PublishedBy.ClientAccount.ID\"?: string;\r\n \"PublishedBy.User.ID\"?: string;\r\n \"Published.DateTime\"?: UTC.IUTC;\r\n IsPublic: boolean;\r\n \"EnabledFor.ClientAccount.ID\"?: string[];\r\n }\r\n\r\n export async function Update(api: GlobalApi.Api, data: IPublish): Promise<IPublish> {\r\n if (!data?.[\"Tileset.ID\"] || !data?.[\"PublishedBy.ClientAccount.ID\"] || !data?.[\"PublishedBy.User.ID\"]) {\r\n throw(\"Tileset ID, client account ID, and user ID are required.\");\r\n }\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n const res: IPublish = await api.POST(`tileset/${data.ID}`, data);\r\n const req = {\r\n \"ClientAccount.ID\": data[\"EnabledFor.ClientAccount.ID\"]\r\n };\r\n data.ID = res.ID;\r\n await api.POST(`tileset/${data.ID}/enableForAccounts`, req);\r\n api.Cache.Remove(GetCacheKey(data[\"PublishedBy.ClientAccount.ID\"], data[\"Tileset.ID\"]));\r\n api.Cache.Remove(GetCacheKey(data[\"PublishedBy.ClientAccount.ID\"]));\r\n return data;\r\n }\r\n\r\n export async function Get(api: GlobalApi.Api, accountId: string, tilesetId: string): Promise<IPublish> {\r\n if (!accountId || !tilesetId) {\r\n throw(\"Client account ID and tileset ID are required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(accountId, tilesetId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`tilesetByPublisher/${accountId}/${tilesetId}`);\r\n api.Cache.Set(GetCacheKey(accountId, tilesetId), req);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: GlobalApi.Api, accountId: string): Promise<IPublish[]> {\r\n if (!accountId) {\r\n throw(\"Client account ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IPublish[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`tilesets/enabledForAccount/${accountId}`);\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetCacheKey(accountId), req);\r\n return req;\r\n }\r\n }\r\n}","import { 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 = \"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 }\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 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 LabelColor?: string;\r\n renderPriority?: number;\r\n }\r\n\r\n export function CreateFromEntityId(entityId: string, typeId: string, styleId?: number): IItem {\r\n return <Item.IBruceEntity>{\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: 8000,\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.IBruceEntities>{\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: 8000,\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 export interface IBruceEntities extends IItem {\r\n BruceEntity: {\r\n \"EntityType.ID\": string;\r\n Filter?: Entity.Filter.V1.AttrFilter;\r\n };\r\n CameraZoomSettings: ZoomControl.IItem[];\r\n showAllLayers: boolean;\r\n showAllLayersExcludeBelow: boolean;\r\n tagIds: number[];\r\n }\r\n \r\n export interface IBruceEntity extends IItem {\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 tagIds: number[];\r\n }\r\n \r\n export interface IArbTileset extends IItem {\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 }\r\n \r\n export interface ICadTileset extends IItem {\r\n FlyTo: boolean;\r\n tileset: ITileset;\r\n StyleMapping?: any[];\r\n styleId?: number;\r\n }\r\n \r\n export interface IPointcloud extends IItem {\r\n FlyTo: boolean;\r\n tileset: ITileset;\r\n }\r\n \r\n export interface IEntitiesRaster extends IItem {\r\n tileset: ITileset;\r\n }\r\n \r\n export interface IOsm extends IItem {\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 KML: {\r\n ClientFile: {\r\n ID: string;\r\n }\r\n }\r\n }\r\n \r\n export interface IEntitiesTileset extends IItem {\r\n FlyTo: boolean;\r\n tileset: ITileset;\r\n }\r\n\r\n export interface IEntitiesLoaded extends MenuItem.IItem {\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 BruceEntity: {\r\n EntityIds: string[];\r\n };\r\n CameraZoomSettings: ZoomControl.IItem[];\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 { UTC } from \"../common/utc\";\r\nimport { Markup } from \"../markup/markup\";\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 export interface IBookmarkSettings {\r\n selectedItemIds?: string[];\r\n order?: number;\r\n hiddenEntityIds?: string[];\r\n drawnRelationEntityIDs?: string[];\r\n imagery?: any[];\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 export interface IBookmark {\r\n ID?: string;\r\n Camera?: any;\r\n \"Created.ByUser.ID\"?: string;\r\n \"Created.Date\"?: UTC.IUTC;\r\n Note?: string;\r\n Settings?: IBookmarkSettings;\r\n Title?: string;\r\n \"UI.View.ID\"?: string;\r\n DisplayOrder?: number;\r\n \"Screenshot.ClientFile.ID\"?: string;\r\n \"UI.SlideGroup.ID\"?: number;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, viewId: string, bookmarkId: string): Promise<IBookmark> {\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 cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, viewId: string, bookmarkId: string): Promise<void> {\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());\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(api: BruceApi.Api, viewId: string): Promise<IBookmark[]> {\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetListCacheKey(viewId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IBookmark[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slides`, Api.PrepReqParams());;\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(viewId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, viewId: string, data: IBookmark): Promise<IBookmark> {\r\n if (!data?.Title) {\r\n data.Title = data.ID;\r\n }\r\n data = await api.POST(`ui.view/${viewId}/slide/${data.ID ? data.ID : \"\"}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(viewId, <string>data.ID));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n return data;\r\n }\r\n\r\n export async function SetOrder(api: BruceApi.Api, viewId: string, bookmarkIds: string[]): Promise<void> {\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());\r\n api.Cache.RemoveByStartsWith(GetListCacheKey(viewId));\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { MenuItem } from \"./menu-item\";\r\nimport { ProjectViewTileSource } from \"./project-view-tile-source\";\r\n\r\n/**\r\n * Describes the \"Project View\" concept within Bruce.\r\n * A project view is a collection of settings for a visualization application we support.\r\n * It will describe what panels to show and how, it will also describe all possible ways data can be displayed.\r\n */\r\nexport namespace ProjectView {\r\n export function GetCacheKey(viewId: string): string {\r\n return `${Api.ECacheKey.ProjectView}${Api.ECacheKey.Id}${viewId}`;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.ProjectView;\r\n }\r\n\r\n export interface IView {\r\n ID?: string;\r\n Name: string;\r\n Description?: string;\r\n Feature?: string[];\r\n \"CreatedByUser.ID\"?: string;\r\n CreatedTime?: UTC.IUTC;\r\n Settings?: IViewSettings;\r\n DefaultUISlideID?: string;\r\n CreatedByUIVersion?: string;\r\n }\r\n\r\n export interface IShadowSettings {\r\n IsShadowEnabled: boolean;\r\n IsShadowSoft: boolean;\r\n ShadowSampleSize: number;\r\n }\r\n\r\n export interface IViewSettings {\r\n BookmarkTransitionSpeed: number;\r\n Camera: any;\r\n CameraFrustum: number;\r\n CesiumMapSources: ProjectViewTileSource.IMapSource[];\r\n CesiumTerrainSources: ProjectViewTileSource.ITerrainSource[];\r\n ControlsSettings: any;\r\n DefaultMapTiles: string;\r\n DefaultTerrain: string;\r\n DisplayTimeline: boolean;\r\n GroundOcclusion: boolean;\r\n Extensions: any;\r\n GlobeColor: string;\r\n SelectionHighlightColor?: string;\r\n LayersMenu?: MenuItem.IItem[];\r\n OASettings?: any;\r\n LogoImage: any;\r\n LegendImage: any;\r\n IsRestricted: boolean;\r\n IsLoginRequired: boolean;\r\n TilesetBackfaceCulling: boolean;\r\n TopPanelComponents?: string[];\r\n LeftPanelComponents?: string[];\r\n PostProcessFXAA?: boolean;\r\n Shadows: boolean;\r\n Shadow: {\r\n StaticCamera: IShadowSettings;\r\n MovingCamera: IShadowSettings;\r\n }\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, viewId: string): Promise<IView> {\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const key = GetCacheKey(viewId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`ui.view/${viewId}`, Api.PrepReqParams());\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IView[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IView[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.view/list\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, viewId: string): Promise<void> {\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n await api.DELETE(`ui.view/${viewId}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(viewId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IView): Promise<IView> {\r\n if (!data) {\r\n data = <any>{};\r\n }\r\n const isNew = !data.ID;\r\n if (!data.ID) {\r\n data.ID = ObjectUtils.UId();\r\n }\r\n if (!data.Name) {\r\n data.Name = data.ID;\r\n }\r\n if (!data.CreatedByUIVersion) {\r\n data.CreatedByUIVersion = \"-1\";\r\n }\r\n if (isNew) {\r\n data = await api.POST(`ui.view/${data.ID}`, data, Api.PrepReqParams());\r\n }\r\n else {\r\n data = await api.PUT(`ui.view/${data.ID}`, data, Api.PrepReqParams());\r\n }\r\n api.Cache.Remove(GetCacheKey(<string>data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { ProjectView } from \"./project-view\";\r\n\r\nasync function getTemplateSettings(apiGetter: BruceApi.IGetter): Promise<ProjectView.IViewSettings> {\r\n const view = await ProjectView.Get(apiGetter.getApi(Api.TEMPLATE_ACCOUNT_ID, apiGetter.env), \"default\");\r\n return view.Settings ?? <ProjectView.IViewSettings>{};\r\n}\r\n\r\nfunction checkSourceToTemplate(items: ProjectViewTileSource.ISource[], templateItem: ProjectViewTileSource.ISource, addIfMissing: boolean): void {\r\n const index = items.findIndex(x => x.Name === templateItem.Name);\r\n if (index > -1) {\r\n templateItem.IsDefault = true;\r\n templateItem.IsEnabled = items[index].IsEnabled;\r\n items[index] = templateItem;\r\n }\r\n else if (addIfMissing) {\r\n templateItem.IsDefault = true;\r\n items.push(templateItem);\r\n }\r\n}\r\n\r\n/**\r\n * Describes a terrain or map source that are found in project view records.\r\n * This is a concept we want to trash as we're moving towards storing tileset ids instead.\r\n * This will help at least understand and manage this dying concept.\r\n */\r\nexport namespace ProjectViewTileSource {\r\n export interface ISource {\r\n SourceUrl?: string;\r\n IsEnabled?: boolean;\r\n IsDefault?: boolean;\r\n Name: string;\r\n Tooltip?: string;\r\n IconUrl?: string;\r\n }\r\n\r\n export interface IMapSource extends ISource {\r\n SourceUrl?: string;\r\n IonAssetID?: number,\r\n MapBoxID?: string;\r\n MapBoxUsername?: string;\r\n ProgramKey?: string;\r\n FileExtension?: string,\r\n Minimum?: number;\r\n Maximum?: number;\r\n Type?: string;\r\n }\r\n\r\n export interface ITerrainSource extends ISource {\r\n RequestWaterMask?: boolean;\r\n RequestVertexNormals?: boolean;\r\n }\r\n\r\n export async function MergeMapTemplateData(getter: BruceApi.IGetter, items: IMapSource[], addIfMissing: boolean): Promise<IMapSource[]> {\r\n const settings = await getTemplateSettings(getter);\r\n const maps = settings.CesiumMapSources ?? [];\r\n for (let i = 0; i < maps.length; i++) {\r\n const mapSource = maps[i];\r\n checkSourceToTemplate(items, mapSource, addIfMissing);\r\n }\r\n return [];\r\n }\r\n\r\n export async function MergeTerrainTemplateData(getter: BruceApi.IGetter, items: ITerrainSource[], addIfMissing: boolean): Promise<IMapSource[]> {\r\n const settings = await getTemplateSettings(getter);\r\n const terrains = settings.CesiumTerrainSources ?? [];\r\n for (let i = 0; i < terrains.length; i++) {\r\n const terrainSource = terrains[i];\r\n checkSourceToTemplate(items, terrainSource, addIfMissing);\r\n }\r\n return [];\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, UTC } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"Pending Action\" concept within Bruce.\r\n * A pending action is a record of a server-side background process.\r\n * This record is used to monitor its progress and completion state.\r\n */\r\nexport namespace PendingAction {\r\n export interface IAction {\r\n ID: number;\r\n \"CreatedBy.Application\": string;\r\n \"Created.Time\": UTC.IUTC;\r\n \"CreatedByUser.ID\": string;\r\n Result: string;\r\n Progress: number;\r\n \"Completed.Time\": UTC.IUTC;\r\n Description: string;\r\n Status: EStatus;\r\n lastUpdated: UTC.IUTC;\r\n }\r\n\r\n export enum EStatus {\r\n InProgress = \"IN_PROGRESS\",\r\n Cancelled = \"CANCELLED\",\r\n Complete = \"COMPLETE\",\r\n Failed = \"FAILED\"\r\n }\r\n\r\n export interface IMessage {\r\n \"PendingAction.ID\": number;\r\n ID: number;\r\n \"CreatedBy.Application\": string;\r\n \"Created.Time\": UTC.IUTC;\r\n \"Message.Type\": string;\r\n Message: string;\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, actionId: number): Promise<IAction> {\r\n if (!actionId) {\r\n throw(\"Action ID is required.\");\r\n }\r\n return api.GET(`pendingAction/${actionId}`, Api.PrepReqParams());\r\n }\r\n\r\n export async function GetRelevantList(api: BruceApi.Api, stricter: boolean = false): Promise<IAction[]> {\r\n const data = await api.GET(`pendingActions/important?Update=${stricter}`, Api.PrepReqParams());\r\n return data.Items;\r\n }\r\n\r\n export async function GetMessages(api: BruceApi.Api, actionId: number, order?: Api.ESortOrder, startIndex?: number, amount?: number): Promise<IMessage[]> {\r\n if (amount == null) {\r\n amount = 500;\r\n }\r\n if (startIndex == null) {\r\n startIndex = 0;\r\n }\r\n if (order == null) {\r\n order = Api.ESortOrder.Asc;\r\n }\r\n const args = `?SortOrder=${order == Api.ESortOrder.Desc ? \"DESC\" : \"ASC\"}&PageSize=${amount}&PageIndex=${startIndex}`; \r\n const data = await api.GET(`pendingAction/${actionId}/progressMessages` + args, Api.PrepReqParams());\r\n return data.Items;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, Calculator } from \"../bruce-models\";\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 ClusterNearbyEntities?: boolean;\r\n MinimumEntitiesCountForClustering?: Calculator.IField[];\r\n Type: EPointType;\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 }\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 altitudeOption?: any;\r\n zIndex?: Calculator.IField[];\r\n }\r\n\r\n export interface IPolylineSettings {\r\n lineColor: Calculator.IField[];\r\n lineWidth: Calculator.IField[];\r\n altitudeOption?: any;\r\n zIndex?: Calculator.IField[];\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 function GetList(api: BruceApi.Api): Promise<IStyle[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IStyle[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.entityDisplaySettings\", Api.PrepReqParams());\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export function Get(api: BruceApi.Api, id: number): Promise<IStyle> {\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(id));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams());\r\n api.Cache.Set(GetCacheKey(id), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IStyle): Promise<IStyle> {\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 data = await api.POST(`ui.entityDisplaySetting/${data.ID}`, data, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, id: number): Promise<void> {\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n await api.DELETE(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams());\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n}","import { Bounds } from \"../common/bounds\";\r\n\r\n/**\r\n * Describes expected settings for an entities-map tileset.\r\n * This is the kind of tileset generated from arbitrary Bruce entities- \r\n * which produced map tiles of the entity vector geometry.\r\n */\r\nexport namespace TilesetEntitiesMapTiles {\r\n export enum ETileSize {\r\n IMG_256 = 256,\r\n IMG_512 = 512,\r\n IMG_1024 = 1024,\r\n IMG_2048 = 2048\r\n }\r\n\r\n export interface ISettings {\r\n imageSize: ETileSize;\r\n levelMin: number;\r\n levelMax: number;\r\n entityTypeId: string;\r\n styleId: number;\r\n filter: any;\r\n boundaries: Bounds.IBounds;\r\n }\r\n}","/**\r\n * Describes settings for an external map-tiles tileset.\r\n * This will serve content from elsewhere with the assumption that the data is valid map tiles.\r\n */\r\nexport namespace TilesetExtMapTiles {\r\n export enum EType {\r\n TileMapImagery = \"TileMapImagery\",\r\n OpenStreetMapImagery = \"OpenStreetMapImagery\",\r\n MapBoxImagery = \"MapBoxImagery\",\r\n CesiumIon = \"CesiumIon\"\r\n }\r\n\r\n export interface ISettings {\r\n url?: string;\r\n mapType?: EType;\r\n sourceExt?: string;\r\n ionId?: number;\r\n mapBoxStyleId?: string;\r\n mapBoxAccount?: string;\r\n mapBoxKey?: string;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, Tileset } from \"../bruce-models\";\r\n\r\n/**\r\n * Describes the \"UCS\" concept within Bruce.\r\n * A UCS is a user-coordinate-system.\r\n * It is a description of an offset to apply to tilesets so that they can all align with each other.\r\n */\r\nexport namespace Ucs {\r\n export function GetCacheKey(id: number, expandUsage: boolean): string {\r\n return Api.ECacheKey.Ucs + Api.ECacheKey.Id + id + Api.ECacheKey + expandUsage;\r\n }\r\n \r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.Ucs;\r\n }\r\n\r\n export interface IUcs {\r\n id?: number;\r\n name?: string;\r\n description?: string;\r\n pivot?: any;\r\n epsg?: number;\r\n state?: EState;\r\n latitude?: number;\r\n longitude?: number;\r\n altitude?: number;\r\n tilesets?: Tileset.ITileset[];\r\n }\r\n\r\n export enum EState {\r\n Undefined = \"undef\",\r\n Prepared = \"ready\"\r\n }\r\n\r\n export async function Get(api: BruceApi.Api, ucsId: number, expandUsage?: boolean): Promise<IUcs> {\r\n if (!ucsId) {\r\n throw(\"UCS ID is required.\");\r\n }\r\n if (!expandUsage) {\r\n expandUsage = false;\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(ucsId, expandUsage));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`ucs/${ucsId}`);\r\n api.Cache.Set(GetCacheKey(ucsId, expandUsage), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: BruceApi.Api, ucsId: number): Promise<void> {\r\n if (!ucsId) {\r\n throw(\"UCS ID is required.\");\r\n }\r\n await api.DELETE(`ucs/${ucsId}`);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Ucs + Api.ECacheKey.Id + ucsId);\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(api: BruceApi.Api): Promise<IUcs[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey());\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(\"ucs\");\r\n api.Cache.Set(GetListCacheKey(), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: BruceApi.Api, data: IUcs): Promise<IUcs> {\r\n if (!data?.name) {\r\n throw(\"UCS name is required.\");\r\n }\r\n data = await api.POST(`ucs${ !data.id ? \"\" : \"/\" + data.id }`, data);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Ucs + Api.ECacheKey.Id + data.id);\r\n api.Cache.Remove(GetListCacheKey());\r\n return data;\r\n }\r\n}","export namespace Permission {\r\n export type Perm = EPerm | string;\r\n\r\n export enum EPerm {\r\n ADMIN = \"ADMIN\",\r\n LOGIN = \"LOGIN\",\r\n DELETE_ENTITY_TYPE = \"DELETE_ENTITY_TYPE\",\r\n CREATE_ENTITY_TYPE = \"CREATE_ENTITY_TYPE\",\r\n UPDATE_ENTITY_TYPE = \"UPDATE_ENTITY_TYPE\"\r\n }\r\n\r\n export enum EPermPrefix {\r\n ACCESS_PROJECT_VIEW = \"UIVIEW_\",\r\n MANAGE_PROJECT_VIEW_BOOKMARKS = \"UIVIEW_MANAGE_BOOKMARKS_\",\r\n ACCESS_TILESET = \"TILESET_\"\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { Permission } from \"./permission\";\r\nimport { User } from \"./user\";\r\n\r\n/**\r\n * Describes the \"Session\" concept within Bruce.\r\n * A session is a set of settings produced from a user or access token login.\r\n * The session describes what the access should be allowed to do.\r\n */\r\nexport namespace Session {\r\n function GetCacheKey(sessionId: string): string {\r\n return `${Api.ECacheKey.Session}${Api.ECacheKey.Id}${sessionId}`;\r\n }\r\n\r\n export interface ISession {\r\n AccessPermissions: IAccountPermissions;\r\n HypeportalAccessPermisssions?: ISuperPermissions;\r\n \"ClientAccount.ID\": string;\r\n ID: string;\r\n IP: string;\r\n LastAccessTime: UTC.IUTC;\r\n User: User.IUser;\r\n }\r\n\r\n export interface IAccountPermissions {\r\n \"ClientAccount.ID\"?: string;\r\n EnabledFeatures?: Permission.Perm[];\r\n UserGroups?: string[];\r\n }\r\n\r\n export interface ISuperPermissions {\r\n EnabledFeatures?: Permission.Perm[];\r\n UserGroups?: string[];\r\n }\r\n\r\n export async function Get(api: IdmApi.Api, sessionId: string): Promise<ISession> {\r\n if (!sessionId) {\r\n throw(\"Session ID is required.\");\r\n }\r\n const key = GetCacheKey(sessionId);\r\n const cacheData = api.Cache.Get(key);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`session/${sessionId}`);\r\n api.Cache.Set(key, req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Login(api: IdmApi.Api, username: string, password: string, accountId?: string): Promise<ISession> {\r\n if (!username || !password) {\r\n throw(\"Username and password are required.\");\r\n }\r\n const data: any = await api.POST(\"login\", {\r\n account: accountId ? accountId : \"\",\r\n login: username,\r\n password: password\r\n });\r\n const session: ISession = data?.Session;\r\n const ssid = session?.ID;\r\n api.SetSessionId(ssid);\r\n api.Cache.Remove(GetCacheKey(ssid));\r\n return session;\r\n }\r\n\r\n export async function Logout(api: IdmApi.Api): Promise<void> {\r\n const ssid = api.GetSessionId();\r\n if (ssid) {\r\n await api.POST(\"logout\", null);\r\n api.SetSessionId(<any>null);\r\n api.Cache.Remove(GetCacheKey(ssid));\r\n }\r\n }\r\n\r\n export function IsPermEnabled(session: ISession, accountId: string, perm: string): boolean {\r\n if (!perm) {\r\n throw(\"Perm is required.\");\r\n }\r\n perm = perm.toLocaleUpperCase();\r\n const perms = <User.IAccessPermission>session?.User?.AccessPermissions?.find(x => x[\"ClientAccount.ID\"] == accountId);\r\n if (!perms) {\r\n return false;\r\n }\r\n if (!perms.UserGroups) {\r\n perms.UserGroups = [];\r\n }\r\n for (let i = 0; i < perms.UserGroups.length; i++) {\r\n const group = perms.UserGroups[i];\r\n if (typeof group != \"string\") {\r\n const features = group.Features;\r\n if (features && features.findIndex(x => x.toLocaleUpperCase() == perm) > -1) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n export function IsSuperPermEnabled(session: ISession, perm: string): boolean {\r\n if (!perm) {\r\n throw(\"Perm is required.\");\r\n }\r\n perm = perm.toLocaleUpperCase();\r\n const accessPerms = session?.HypeportalAccessPermisssions?.EnabledFeatures ?? [];\r\n return accessPerms.findIndex(x => x.toLocaleUpperCase() == perm) > -1;\r\n }\r\n\r\n export function IsAccountAdmin(session: ISession, accountId: string): boolean {\r\n return IsPermEnabled(session, accountId, Permission.EPerm.ADMIN);\r\n }\r\n\r\n export function IsSuperAdmin(session: ISession): boolean {\r\n return IsSuperPermEnabled(session, Permission.EPerm.ADMIN);\r\n }\r\n}","import { IdmApi, Permission } from \"../bruce-models\";\r\nimport { User } from \"./user\";\r\n\r\n/**\r\n * Describes the \"User Group\" concept within Bruce.\r\n * A user group is a collection of permissions (\"Features\") and what users should be in the group.\r\n */\r\nexport namespace UserGroup {\r\n export interface IGroup {\r\n \"ClientAccount.ID\"?: string;\r\n \"Features\": Permission.Perm[];\r\n \"ID\": string;\r\n \"Name\"?: string;\r\n }\r\n\r\n export async function GetByName(api: IdmApi.Api, accountId: string, name: string): Promise<IGroup> {\r\n if (!name || !accountId) {\r\n throw(\"Name and AccountID are required.\");\r\n }\r\n return api.GET(`account/${accountId}/userGroupByName/${name}`);\r\n }\r\n\r\n export async function GetUsers(api: IdmApi.Api, accountId: string, id: string): Promise<User.IUser[]> {\r\n if (!accountId || !id) {\r\n throw(\"AccountID and ID are required.\");\r\n }\r\n const data = await api.GET(`userGroup/${accountId}/${id}/users`);\r\n return data.Items;\r\n }\r\n\r\n export async function GetListByPerm(api: IdmApi.Api, accountId: string, perm: Permission.Perm): Promise<IGroup[]> {\r\n if (!accountId || !perm) {\r\n throw(\"AccountID and Perm are required.\");\r\n }\r\n const data = await api.GET(`userGroupsByFeature/${accountId}/${perm}`);\r\n return data.Items;\r\n }\r\n\r\n export async function GetList(api: IdmApi.Api, accountId: string): Promise<IGroup[]> {\r\n if (!accountId) {\r\n throw(\"AccountID is required.\");\r\n }\r\n const data = await api.GET(`userGroups/${accountId}`);\r\n return data.Items;\r\n }\r\n\r\n export async function Delete(api: IdmApi.Api, accountId: string, id: string): Promise<void> {\r\n if (!accountId || !id) {\r\n throw(\"AccountID and ID are required.\");\r\n }\r\n return api.DELETE(`account/${accountId}/userGroupID/${id}`);\r\n }\r\n\r\n export async function Update(api: IdmApi.Api, data: IGroup): Promise<IGroup> {\r\n if (!data.Name || !data[\"ClientAccount.ID\"]) {\r\n throw(\"User group name and client account ID are required.\");\r\n }\r\n data = await api.POST(`userGroup${data.ID ? (\"/\" + data.ID) : \"\"}`, data);\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { UserGroup } from \"./user-group\";\r\n\r\n/**\r\n * Describes the \"User\" concept within Bruce.\r\n * A user is either a login-user or an access-token.\r\n * \r\n * You cannot login using an access-token, but both concepts are- \r\n * treated the same way in terms of permissions and user groups.\r\n */\r\nexport namespace User {\r\n export function GetCacheKey(userId: string, accountId?: string): string {\r\n if (!accountId) {\r\n accountId = \"\";\r\n }\r\n return Api.ECacheKey.User + Api.ECacheKey.Id + userId + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export function GetEmailCacheKey(email: string, accountId?: string): string {\r\n if (!accountId) {\r\n accountId = \"\";\r\n }\r\n return Api.ECacheKey.User + Api.ECacheKey.UserEmail + email + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export interface IUser {\r\n AccessPermissions?: IAccessPermission[];\r\n Email?: string;\r\n Login?: string;\r\n FullName?: string;\r\n ID?: string;\r\n IsActivated?: boolean;\r\n IsDisabled?: boolean;\r\n IsPasswordChangeRequired?: boolean;\r\n Mobile?: string;\r\n Password?: string;\r\n Settings?: any;\r\n Type?: EType;\r\n }\r\n\r\n export enum EType {\r\n User = \"LOGIN_USER\",\r\n AccessToken = \"ACCESS_TOKEN\"\r\n }\r\n\r\n export interface IAccessPermission {\r\n \"ClientAccount.ID\": string;\r\n \"UserGroup.ID\"?: string[];\r\n \"UserGroups\"?: UserGroup.IGroup[];\r\n }\r\n\r\n export async function Get(api: IdmApi.Api, id: string, accountId?: string): Promise<IUser> {\r\n if (!id) {\r\n throw(\"ID is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetCacheKey(id, <string>accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`user/${id}${accountId ? `?clientAccountID=${accountId}` : \"\"}`);\r\n api.Cache.Set(GetCacheKey(id, <string>accountId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Update(api: IdmApi.Api, data: IUser): Promise<IUser> {\r\n if (!data?.ID || !data?.Type) {\r\n throw(\"ID and Type are required.\");\r\n }\r\n data = await api.POST(`user/${data.ID}`, data);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + data.ID);\r\n if (data.Type == EType.AccessToken) {\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n }\r\n else if (data.Type == EType.User) {\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.User + Api.ECacheKey.Account);\r\n }\r\n return data;\r\n }\r\n\r\n export async function GetUsernameAvailable(api: IdmApi.Api, username: string): Promise<boolean> {\r\n if (!username) {\r\n throw(\"Username is required.\");\r\n }\r\n const req = api.GET(`user/loginavailable/${username}`);\r\n const prom: Promise<boolean> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res(data.IsAvailable);\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n return prom;\r\n }\r\n\r\n export namespace LoginUser {\r\n export function GetListCacheKey(accountId: string): string {\r\n return Api.ECacheKey.User + Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export async function GetByEmail(api: IdmApi.Api, email: string, accountId?: string): Promise<IUser> {\r\n if (!email) {\r\n throw(\"Email is required.\");\r\n }\r\n const cacheData = api.Cache.Get(GetEmailCacheKey(email, <string>accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`userByEmail/${email}${accountId ? `?clientAccountID=${accountId}` : \"\"}`);\r\n api.Cache.Set(GetEmailCacheKey(email, <string>accountId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetList(api: IdmApi.Api, accountId: string, exclusive?: boolean): Promise<IUser[]> {\r\n if (!accountId) {\r\n throw(\"Client account ID is required.\");\r\n }\r\n if (!exclusive) {\r\n exclusive = false;\r\n }\r\n const cacheData = exclusive ? null : api.Cache.Get(GetListCacheKey(accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IUser[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`users?clientAccountID=${accountId}${exclusive ? \"&allExcludingClientAccount=true\" : \"\" }`);\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n req.then((users) => {\r\n for (let i = 0; i < users.length; i++) {\r\n api.Cache.Set(GetCacheKey(<string>users[i].ID, accountId), users[i]);\r\n }\r\n });\r\n if (!exclusive) {\r\n api.Cache.Set(GetListCacheKey(accountId), req, Api.DEFAULT_CACHE_DURATION);\r\n }\r\n return req;\r\n }\r\n\r\n /**\r\n * Sends a signup email to the specified email address.\r\n * @param api \r\n * @param email \r\n * @returns \r\n */\r\n export async function Signup(api: IdmApi.Api, email: string): Promise<void> {\r\n if (!email) {\r\n throw(\"Email is required.\");\r\n }\r\n return api.POST(\"clientaccount/signup\", {\r\n Email: email\r\n });\r\n }\r\n\r\n /**\r\n * Sends a new signup email using a previous one's expired code.\r\n * @param api \r\n * @param expiredCode \r\n * @returns \r\n */\r\n export async function SignupResend(api: IdmApi.Api, expiredCode: string): Promise<void> {\r\n if (!expiredCode) {\r\n throw(\"Expired activation code is required.\");\r\n }\r\n return api.POST(`clientaccount/signup/resend?activationKey=${Api.Encode(expiredCode)}`, null);\r\n }\r\n\r\n /**\r\n * Completes signup using user data and a signup code.\r\n * @param api \r\n * @param code \r\n * @param data \r\n * @param accountId \r\n * @returns \r\n */\r\n export async function SignupComplete(api: IdmApi.Api, code: string, data: IUser, accountId?: string): Promise<IUser> {\r\n if (!code || !data?.Login || !data?.Password) {\r\n throw(\"Login, password, and activation code are required.\");\r\n }\r\n data = JSON.parse(JSON.stringify(data));\r\n data.IsActivated = true;\r\n data.IsDisabled = false;\r\n (<any>data).key = code;\r\n const res: IUser = await api.POST(`UserActivate/${accountId ? accountId : \"\"}`, data);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + res.ID);\r\n if (data.Email) {\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.UserEmail + data.Email);\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Sends a password reset email to the specified email address.\r\n * @param api \r\n * @param accountId \r\n * @param email \r\n * @returns user id associated with provided email.\r\n */\r\n export async function ForgotPassword(api: IdmApi.Api, accountId: string, email: string): Promise<string> {\r\n if (!accountId || !email) {\r\n throw(\"Account ID and email are required.\");\r\n }\r\n const req = api.POST(`UserForgotPassword/${accountId}`, {\r\n Email: email\r\n });\r\n const prom: Promise<string> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res(data.ID);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * Completes password reset using a password reset code and new password.\r\n * @param api \r\n * @param code \r\n * @param userId \r\n * @param password \r\n * @returns \r\n */\r\n export async function ForgotPasswordComplete(api: IdmApi.Api, code: string, userId: string, password: string): Promise<IUser> {\r\n const user = await Get(api, userId, \"\");\r\n return api.POST(\"UserSetNameAndPassword\", {\r\n ID: userId,\r\n Email: user.Email,\r\n ActivationCode: code,\r\n Password: password,\r\n FullName: user.FullName\r\n });\r\n }\r\n }\r\n\r\n export namespace AccessToken {\r\n export function GetListCacheKey(accountId: string): string {\r\n return Api.ECacheKey.AccessToken + Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export async function GetList(api: IdmApi.Api, accountId: string): Promise<IUser[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey(accountId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<IUser[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"usersByClientAccount/accessTokens\");\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n req.then((users) => {\r\n for (let i = 0; i < users.length; i++) {\r\n api.Cache.Set(GetCacheKey(<string>users[i].ID, accountId), users[i]);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(accountId), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function Delete(api: IdmApi.Api, id: string): Promise<void> {\r\n await api.DELETE(`accessToken/${id}`);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + id);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n }\r\n\r\n export async function Create(api: IdmApi.Api, data: IUser): Promise<IUser> {\r\n if (!data) {\r\n data = {};\r\n }\r\n if (data.Type == EType.User) {\r\n throw(\"User type is not allowed.\");\r\n }\r\n if (!data.Type) {\r\n data.Type = EType.AccessToken;\r\n }\r\n data = await api.POST(\"accessToken\", data);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n return data;\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { CamApi } from \"../api/cam-api\";\r\nimport { IdmApi } from \"../api/idm-api\";\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 enum EDbRegion {\r\n USA = \"US\",\r\n Paris = \"EU\",\r\n Singapore = \"SE\",\r\n Australia = \"AU\"\r\n }\r\n\r\n export const DbRegions = [\r\n {\r\n name: \"North California, USA\",\r\n value: EDbRegion.USA\r\n },\r\n {\r\n name: \"Paris, France\",\r\n value: EDbRegion.Paris\r\n },\r\n {\r\n name: \"Singapore\",\r\n value: EDbRegion.Singapore\r\n },\r\n {\r\n name: \"Sydney, Australia\",\r\n value: EDbRegion.Australia\r\n }\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 // This will depend on what \"appSettingsId\" you request for.\r\n \"Application.Settings\"?: any;\r\n }\r\n\r\n export async function Get(api: CamApi.Api, id: string): Promise<IAccount> {\r\n const cacheData = api.Cache.Get(GetCacheKey(id));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`account/${id}`);\r\n api.Cache.Set(GetCacheKey(id), req, Api.DEFAULT_CACHE_DURATION);\r\n return req;\r\n }\r\n\r\n export async function GetRelatedList(api: IdmApi.Api): Promise<IAccount[]> {\r\n const cacheData = api.Cache.Get(GetListCacheKey(api.GetSessionId()));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(\"user/relatedClientAccounts\");\r\n const prom: Promise<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(items);\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n api.Cache.Set(GetListCacheKey(api.GetSessionId()), prom, Api.DEFAULT_CACHE_DURATION);\r\n return prom;\r\n }\r\n\r\n export async function GetAppSettings(api: CamApi.Api, id: string, appId: string): Promise<any> {\r\n const cacheData = api.Cache.Get(GetCacheKey(id, appId));\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`account/${id}?ApplicationID=${appId}`);\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(settings);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n api.Cache.Set(GetCacheKey(id, appId), prom, Api.DEFAULT_CACHE_DURATION);\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 api \r\n * @param id \r\n * @param appId \r\n * @param data \r\n * @returns \r\n */\r\n export async function UpdateAppSettings(api: CamApi.Api, id: string, appId: string, data: any): Promise<any> {\r\n data = await api.POST(`account/${id}/applicationSettings/${appId}`, data);\r\n api.Cache.RemoveByStartsWith(Api.ECacheKey.Account + Api.ECacheKey.Id + id);\r\n return data;\r\n }\r\n\r\n /**\r\n * Creates a new Bruce account using given details.\r\n * @param api \r\n * @param id \r\n * @param name \r\n * @param region \r\n * @returns \r\n */\r\n export async function Create(api: BruceApi.Api, id: string, name: string, region: EDbRegion): Promise<IAccount> {\r\n if (!id || !name || !region) {\r\n throw new Error(\"Id, Name and Region are required.\");\r\n }\r\n const reqData = {\r\n \"Name\": name,\r\n \"DBLocation\": region\r\n }\r\n const res = api.POST(`clientAccount/${id}`, reqData, Api.PrepReqParams());\r\n api.Cache.Remove(GetListCacheKey(api.GetSessionId()));\r\n return res;\r\n }\r\n}","export namespace EncryptUtils {\r\n // https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\r\n export function Cyrb53Hash(str: string, seed: number = 0): number {\r\n let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\r\n for (let i = 0, ch; i < str.length; i++) {\r\n ch = str.charCodeAt(i);\r\n h1 = Math.imul(h1 ^ ch, 2654435761);\r\n h2 = Math.imul(h2 ^ ch, 1597334677);\r\n }\r\n h1 = Math.imul(h1 ^ (h1>>>16), 2246822507) ^ Math.imul(h2 ^ (h2>>>13), 3266489909);\r\n h2 = Math.imul(h2 ^ (h2>>>16), 2246822507) ^ Math.imul(h1 ^ (h1>>>13), 3266489909);\r\n return (4294967296 * (2097151 & h2) + (h1>>>0));\r\n }\r\n}","export namespace MathUtils {\r\n /**\r\n * Rounds a number to a given number of decimal places.\r\n * @param num \r\n * @param decimals \r\n * @returns \r\n */\r\n export function Round(num: number, decimals: number = 0): number {\r\n if (decimals <= 0) {\r\n return Math.round(num);\r\n }\r\n let tmp = \"1\";\r\n for (let i = 0; i < decimals; i++) {\r\n tmp += \"0\";\r\n }\r\n const d = parseFloat(tmp);\r\n return Math.round((num + Number.EPSILON) * d) / d;\r\n }\r\n\r\n /**\r\n * Returns a random integer between min (inclusive) and max (inclusive).\r\n * @param min \r\n * @param max \r\n * @returns \r\n */\r\n export function RandInt(min: number, max: number): number {\r\n if (min == max) {\r\n return min;\r\n }\r\n else if (min > max) {\r\n throw(\"Min is greater than max.\");\r\n }\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n}","import { IDictionary } from \"../common/dictionary\";\r\n\r\n/**\r\n * Utility to help with url manipulation.\r\n */\r\nexport namespace UrlUtils {\r\n export function GetQueryString(doc: Document): IDictionary<string> {\r\n const qs: any = {};\r\n const p0 = doc.location.href.indexOf(\"?\");\r\n if (p0 >= 0) {\r\n const str = doc.location.href.substring(p0 + 1);\r\n const tokens = str.split(\"&\");\r\n tokens.forEach(token => {\r\n const p = token.split(\"=\");\r\n if (p.length == 2) {\r\n qs[p[0]] = p[1];\r\n }\r\n });\r\n }\r\n return qs;\r\n }\r\n\r\n /**\r\n * Helper to get and set url params for a given window.\r\n */\r\n export class Handler {\r\n private _window: Window;\r\n public get window(): Window {\r\n return this._window;\r\n }\r\n private get document(): Document {\r\n return this.window?.document;\r\n }\r\n private _allowedKeys: string[] = <any>null;\r\n public get allowedKeys(): string[] {\r\n return this._allowedKeys;\r\n }\r\n \r\n public constructor(window: Window, allowedKeys?: string[]) {\r\n this._window = window;\r\n this._allowedKeys = <string[]>allowedKeys;\r\n }\r\n \r\n public UpdateAllowedKeys(allowedKeys: string[]): void {\r\n this._allowedKeys = allowedKeys;\r\n let params = this.GetParams();\r\n this.refresh(params);\r\n }\r\n \r\n public UpdateParam(key: string, value: string | number): void {\r\n let params = this.GetParams();\r\n params[key + \"\"] = value + \"\";\r\n this.refresh(params);\r\n }\r\n \r\n public RemoveParam(key: string): void {\r\n let params = this.GetParams();\r\n params[key + \"\"] = <any>null;\r\n this.refresh(params);\r\n }\r\n \r\n public GetParamKeys(): string[] {\r\n let params = GetQueryString(this.document);\r\n return Object.keys(params);\r\n }\r\n \r\n public GetParams(): IDictionary<string> {\r\n return GetQueryString(this.document);\r\n }\r\n \r\n public GetParam(key: string): string {\r\n let params = this.GetParams();\r\n return params[key + \"\"];\r\n }\r\n \r\n public Clear(): void {\r\n this.refresh({});\r\n }\r\n \r\n private refresh(data: IDictionary<string | number>): void {\r\n const params: string[] = [];\r\n const keys = Object.keys(data);\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n if (this._allowedKeys == null || this._allowedKeys.includes(key)) {\r\n const val = data[key];\r\n if (!!val || val == 0) {\r\n params.push(`${key}=${val}`);\r\n }\r\n }\r\n }\r\n if (params.length > 0) {\r\n this.window.history.replaceState({}, <any>null, \"?\" + params.join(\"&\"));\r\n }\r\n else {\r\n this.window.history.replaceState({}, <any>null, \"\");\r\n }\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Entity as E } from \"../entity/entity\";\r\n\r\nexport namespace DataLab {\r\n export enum EReqKey {\r\n Primary = \"PrimarySelection\",\r\n Secondary = \"SecondarySelection\"\r\n }\r\n\r\n // WIP.\r\n export interface IQuery {\r\n [EReqKey.Primary]: {\r\n Items: any[]\r\n },\r\n [EReqKey.Secondary]?: any,\r\n Action?: string,\r\n PrimaryEntityTypeID?: string;\r\n PrimaryEntityID?: string;\r\n }\r\n\r\n export namespace Entity {\r\n export async function GetList(\r\n api: BruceApi.Api,\r\n query: IQuery, \r\n key?: EReqKey, \r\n skip?: number, \r\n load?: number): Promise<E.IEntity[]> \r\n {\r\n if (!key) {\r\n key = EReqKey.Primary;\r\n }\r\n if (!skip) {\r\n skip = 0;\r\n }\r\n if (!load) {\r\n load = 50;\r\n }\r\n\r\n const req = api.POST(`entities/datalab/getMatchingEntities/${key}?skip=${skip}&load=${load}`, \r\n query, \r\n Api.PrepReqParams()\r\n );\r\n const prom: Promise<E.IEntity[]> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res(data.Items);\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n return prom;\r\n }\r\n }\r\n}"],"names":["A","Api","MAX_AREA_IN_DEGREES"],"mappings":"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"}