bruce-models 2.3.0 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bruce-models.es5.js","sources":["../src/api/api.ts","../src/ann-document/ann-document.ts","../src/custom-form/custom-form.ts","../src/custom-form/custom-form-content.ts","../src/common/cache.ts","../src/api/abstract-api.ts","../src/account/account.ts","../src/server/message-broker.ts","../src/api/guardian-api.ts","../src/server/hosting-location.ts","../src/api/bruce-api.ts","../src/api/cam-api.ts","../src/api/idm-api.ts","../src/api/global-api.ts","../src/api/api-getters.ts","../src/common/color.ts","../src/util/object-utils.ts","../src/util/path-utils.ts","../src/entity/entity.ts","../src/common/bruce-variable.ts","../src/calculator/calculator.ts","../src/common/geometry.ts","../src/common/bounds.ts","../src/common/bruce-event.ts","../src/common/camera.ts","../src/common/cartes.ts","../src/common/carto.ts","../src/common/delay-queue.ts","../src/common/utc.ts","../src/common/lru-cache.ts","../src/entity/entity-attachment-type.ts","../src/entity/entity-attachment.ts","../src/entity/entity-comment.ts","../src/entity/entity-link.ts","../src/entity/entity-lod.ts","../src/entity/entity-lod-category.ts","../src/entity/entity-relation-type.ts","../src/entity/entity-relation.ts","../src/entity/entity-source.ts","../src/entity/entity-tag.ts","../src/entity/entity-type.ts","../src/entity/getters/entity-globe.ts","../src/entity/getters/entity-filter-getter.ts","../src/entity/getters/batched-data-getter.ts","../src/util/math-utils.ts","../src/entity/entity-coords.ts","../src/entity/entity-type-visual-settings.ts","../src/entity/entity-attribute.ts","../src/internal/uploader.ts","../src/client-file/client-file.ts","../src/program-key/program-key.ts","../src/project/zoom-control.ts","../src/tileset/tileset.ts","../src/project/menu-item.ts","../src/project/project-view-bookmark.ts","../src/project/project-view.ts","../src/project/project-view-legacy-tile.ts","../src/project/project-view-tile.ts","../src/server/pending-action.ts","../src/style/style.ts","../src/user/permission.ts","../src/user/session.ts","../src/user/user-group.ts","../src/user/user.ts","../src/account/account-invite.ts","../src/util/encrypt-utils.ts","../src/util/url-utils.ts","../src/data-lab/data-lab.ts","../src/import/import-cad.ts","../src/import/import-csv.ts","../src/import/import-json.ts","../src/import/import-kml.ts","../src/import/imported-file.ts","../src/markup/markup.ts","../src/plugin/plugin.ts"],"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 EntityCoords = \"entitycoords\",\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 LodCategory = \"lodcategory\",\r\n Style = \"style\",\r\n PublishTileset = \"publishtileset\",\r\n User = \"user\",\r\n UserSettings = \"usersettings\",\r\n UserEmail = \"useremail\",\r\n AccessToken = \"accesstoken\",\r\n UserGroup = \"usergroup\",\r\n Account = \"account\",\r\n DatabaseRegion = \"databaseregion\",\r\n CustomForm = \"customform\",\r\n ImportedFile = \"importedfile\",\r\n Plugin = \"plugin\"\r\n }\r\n export const DEFAULT_CACHE_DURATION = 60; // 1 minute.\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 // False = cache is enabled by default for req-params.\r\n export let DEFAULT_NO_CACHE = false;\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 // Default is Api.DEFAULT_CACHE_STATE.\r\n // If true then local cache check will be skipped.\r\n noCache?: boolean;\r\n // Request headers.\r\n headers?: IDictionary<string>;\r\n }\r\n\r\n export interface IRes {\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 * @param base\r\n * @returns\r\n */\r\n export function PrepReqParams(base?: Api.IReqParams | IUploadReqParams): IReqParams | IUploadReqParams {\r\n base = {\r\n ...base\r\n };\r\n return base;\r\n }\r\n\r\n export interface IUploadReqParams extends IReqParams {\r\n onProgress?: (e: ProgressEvent) => void;\r\n formData?: IDictionary<string> | FormData;\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 IHotspot {\r\n X: number;\r\n Y: number;\r\n Key: string;\r\n Description?: string;\r\n LinkedEntity?: {\r\n \"Entity.ID\": string;\r\n };\r\n }\r\n\r\n export interface ISettings {\r\n Hotspots?: IHotspot[];\r\n DrawingScaleFactorX?: number;\r\n DrawingScaleFactorY?: number;\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?: ISettings;\r\n }\r\n\r\n export enum EType {\r\n SVG = \"SVG\"\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n docId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n document: IDocument\r\n }> {\r\n const { api, docId, req: reqParams } = params;\r\n if (!docId) {\r\n throw(\"Doc ID is required.\");\r\n }\r\n const key = GetCacheKey(docId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`documentView/${docId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n document: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n docType?: Type,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n documents: IDocument[]\r\n }> {\r\n let { api, docType: type, req: reqParams } = params;\r\n if (!type) {\r\n type = \"\";\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(type), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = 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(reqParams));\r\n res({\r\n documents: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(type),\r\n value: req,\r\n req: reqParams\r\n });\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\nimport { CustomFormContent } from \"./custom-form-content\";\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?: CustomFormContent.ISection | 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(params: {\r\n api: BruceApi.Api,\r\n formId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n form: IForm\r\n }> {\r\n const { api, formId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Id is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`customForm/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n form: data\r\n });\r\n } catch (err) {\r\n rej(err);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n formId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, formId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Id is required.\");\r\n }\r\n await api.DELETE(`customForm/${id}`, Api.PrepReqParams(reqParams))\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n entityTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n forms: IForm[]\r\n }> {\r\n const { api, entityTypeId: typeId, req: reqParams } = params;\r\n const url = typeId ? `entityType/${typeId}/customForms` : \"customForms\";\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(typeId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(url, Api.PrepReqParams(reqParams));\r\n const prom = req.then((data) => {\r\n return {\r\n forms: data.Items\r\n };\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(typeId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n form: IForm,\r\n reqParams?: Api.IReqParams\r\n }): Promise<{\r\n form: IForm\r\n }> {\r\n const { api, form: data, reqParams } = params;\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n const res = await api.POST(`customForm/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\r\n return {\r\n form: res\r\n };\r\n }\r\n}","/**\r\n * Describes content of a GENERIC type custom form.\r\n * The alternative type is MARKUP (Markup.IMarkup).\r\n */\r\nexport namespace CustomFormContent {\r\n export enum ECellType {\r\n StaticText = 0,\r\n DataValue,\r\n StaticPicture,\r\n SubSection,\r\n ButtonMore,\r\n EntityPhoto,\r\n EmbeddedMedia,\r\n Chart\r\n }\r\n\r\n export enum EFlowDirection {\r\n Vertically = \"v\",\r\n Horizontally = \"h\"\r\n }\r\n\r\n export interface ISection extends ICell {\r\n Heading?: {\r\n Icon?: string;\r\n Caption?: string;\r\n };\r\n Direction?: EFlowDirection;\r\n Entries?: CellContent.Content[];\r\n }\r\n\r\n export interface ICell {\r\n Type?: ECellType;\r\n Style?: {\r\n BackgroundColor?: string;\r\n TextColor?: string;\r\n };\r\n }\r\n\r\n export namespace CellContent {\r\n export type Content = IStatic | IDataValue | IStaticImage | IMoreButton | IEntityPhoto | IEmbeddedMedia | IChart;\r\n\r\n export interface IStatic extends ICell {\r\n Text?: string;\r\n }\r\n \r\n export interface IDataValue extends ICell {\r\n LabelIcon?: string;\r\n LabelText?: string;\r\n ValuePath?: string;\r\n }\r\n \r\n export interface IStaticImage extends ICell {\r\n ImageUrl?: string;\r\n }\r\n \r\n export interface IMoreButton extends ICell {\r\n ReferredCustomFormID?: number;\r\n }\r\n \r\n export interface IEntityPhoto extends ICell {}\r\n \r\n export interface IEmbeddedMedia {\r\n HTML?: string;\r\n }\r\n \r\n export interface IChart extends ICell {\r\n chartData?: any;\r\n }\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 * @param id\r\n * @param data\r\n * @param duration in seconds until considered expired.\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// Milliseconds between each data cleaning.\r\nconst CLEANER_INTERVAL = 5000;\r\n// Max number of items to clean in each cleaning.\r\nconst MAX_CLEAN_BATCH = 100;\r\n// (Default) Max idle time to keep the cleaner alive.\r\n// Set to default API cache duration by default.\r\nconst DEFAULT_MAX_CLEAN_IDLE = 60 * 5;\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 private cleanerInterval: any = null;\r\n // Max idle time to keep the cleaner alive.\r\n // This value is increased when a new item is added with a larger cache duration.\r\n private maxCleanIdle = DEFAULT_MAX_CLEAN_IDLE;\r\n\r\n constructor(id: string) {\r\n\r\n }\r\n\r\n /**\r\n * @param id\r\n * @param data\r\n * @param duration seconds to keep the data in cache. -1 for infinite.\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 if (duration > -1) {\r\n this.startCleaning();\r\n if (this.maxCleanIdle < duration) {\r\n // Add 5 seconds to be sure cleaner stays alive to get it.\r\n this.maxCleanIdle = duration + 5;\r\n }\r\n }\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 this.stopCleaning();\r\n }\r\n\r\n public Remove(id: Key): void {\r\n delete this.data[id + \"\"];\r\n if (Object.keys(this.data).length <= 0) {\r\n this.stopCleaning();\r\n }\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 if (Object.keys(this.data).length <= 0) {\r\n this.stopCleaning();\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 if (Object.keys(this.data).length <= 0) {\r\n this.stopCleaning();\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\r\n private startCleaning() {\r\n if (this.cleanerInterval == null) {\r\n let cleanIdleStart: number = null;\r\n this.cleanerInterval = setInterval(() => {\r\n let cleaned = 0;\r\n for (const key in this.data) {\r\n const item = this.data[key];\r\n if (item.IsExpired()) {\r\n delete this.data[key];\r\n cleaned += 1;\r\n }\r\n if (cleaned >= MAX_CLEAN_BATCH) {\r\n break;\r\n }\r\n }\r\n if (cleaned <= 0) {\r\n // Stop cleaner if nothing in cache.\r\n if (Object.keys(this.data).length <= 0) {\r\n this.stopCleaning();\r\n }\r\n // Stop cleaner if idle time is reached.\r\n else {\r\n if (cleanIdleStart == null) {\r\n cleanIdleStart = new Date().getTime();\r\n }\r\n const now = new Date().getTime();\r\n if (now - cleanIdleStart > this.maxCleanIdle * 1000) {\r\n this.stopCleaning();\r\n }\r\n }\r\n }\r\n else {\r\n cleanIdleStart = null;\r\n }\r\n }, CLEANER_INTERVAL);\r\n }\r\n }\r\n\r\n private stopCleaning() {\r\n if (this.cleanerInterval != null) {\r\n clearInterval(this.cleanerInterval);\r\n this.cleanerInterval = null;\r\n this.maxCleanIdle = DEFAULT_MAX_CLEAN_IDLE;\r\n }\r\n }\r\n}","import { CacheControl } from \"../common/cache\";\r\nimport { Api } from \"./api\";\r\n\r\n// TODO: Currently checks for CSV vs json specifically,\r\n// Need to see if our api is generally good at setting content-type headers.\r\n// Make it less specific to CSV.\r\nasync function parseResult(data: Response): Promise<any> {\r\n if (data.status == 200) {\r\n let type = data.headers.get(\"Content-Type\");\r\n if (type) {\r\n type = type.trim().toLowerCase();\r\n }\r\n\r\n let encoding = \"\";\r\n const charset = type ? type.split(\";\").find((x) => x.startsWith(\"charset=\")) : \"\";\r\n if (charset && charset.includes(\"=\")) {\r\n encoding = charset.split(\"=\")[1];\r\n encoding = encoding.toLowerCase();\r\n }\r\n // Our API has a very specific utf-16 encoding.\r\n if (encoding == \"utf-16\") {\r\n encoding = Api.EEncoding.UTF16;\r\n }\r\n if (!encoding || encoding == \"utf-8\") {\r\n const text = await data.text();\r\n if (!text || !text.trim()) {\r\n return null;\r\n }\r\n if (type && type.includes(\"text/csv\")) {\r\n return text;\r\n }\r\n return JSON.parse(text);\r\n }\r\n else {\r\n const buffer = await data.arrayBuffer();\r\n const text = new TextDecoder(encoding).decode(buffer);\r\n if (type && type.includes(\"text/csv\")) {\r\n return text;\r\n }\r\n return JSON.parse(text);\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 protected baseUrl: string = \"\";\r\n public Cache: CacheControl<any>;\r\n\r\n constructor(params: {\r\n ssidHeader?: string,\r\n cacheId?: string\r\n }) {\r\n this.ssidHeader = params?.ssidHeader;\r\n this.Cache = new CacheControl<any>(params?.cacheId);\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 GetCacheItem(key: string, reqParams?: Api.IReqParams) {\r\n let noCache = reqParams?.noCache;\r\n if (noCache == null) {\r\n noCache = Api.DEFAULT_NO_CACHE;\r\n }\r\n if (noCache) {\r\n return null;\r\n }\r\n return this.Cache.Get(key);\r\n }\r\n\r\n public async SetCacheItem(params: {\r\n key: string,\r\n value: any,\r\n duration?: number,\r\n req?: Api.IReqParams\r\n }) {\r\n let {key, value, duration, req} = params;\r\n let noCache = req?.noCache;\r\n if (noCache == null) {\r\n noCache = Api.DEFAULT_NO_CACHE;\r\n }\r\n if (noCache) {\r\n return;\r\n }\r\n if (isNaN(duration)) {\r\n duration = Api.DEFAULT_CACHE_DURATION;\r\n }\r\n await this.Cache.Set(key, value, duration);\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 ...params.headers\r\n };\r\n if (this.ssidHeader && this.ssid) {\r\n params.headers[this.ssidHeader] = this.ssid;\r\n }\r\n const res = await fetch(url, {\r\n headers: params.headers\r\n });\r\n return parseResult(res);\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 ...params.headers\r\n };\r\n if (this.ssidHeader && this.ssid) {\r\n params.headers[this.ssidHeader] = this.ssid;\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);\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 ...params.headers\r\n };\r\n if (this.ssidHeader && this.ssid) {\r\n params.headers[this.ssidHeader] = this.ssid;\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);\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 ...params.headers\r\n };\r\n if (this.ssidHeader && this.ssid) {\r\n params.headers[this.ssidHeader] = this.ssid;\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);\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.ssidHeader && this.ssid) {\r\n xhr.setRequestHeader(this.ssidHeader, this.ssid);\r\n }\r\n let formData;\r\n if (params?.formData instanceof FormData) {\r\n formData = params?.formData;\r\n }\r\n else {\r\n 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 }\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 { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { CamApi } from \"../api/cam-api\";\r\nimport { GuardianApi } from \"../api/guardian-api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { AccountSettings } from \"./account-settings\";\r\n\r\nconst ACCOUNT_EXCLUSIONS = [\"hyperportal\", \"hypeportal\", \"bviewer\"];\r\n\r\n/**\r\n * Describes the \"Client Account\" concept within Bruce.\r\n * A client account is a database instance that holds one or many users.\r\n */\r\nexport namespace Account {\r\n export function GetCacheKey(accountId: string, appSettingsId?: string): string {\r\n if (appSettingsId) {\r\n return Api.ECacheKey.Account + Api.ECacheKey.Id + accountId + Api.ECacheKey + appSettingsId;\r\n }\r\n return Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export function GetListCacheKey(ssid: string): string {\r\n return Api.ECacheKey.Account + Api.ECacheKey.Session + Api.ECacheKey.Id + ssid;\r\n }\r\n\r\n export function GetDbRegionListCacheKey() {\r\n return Api.ECacheKey.DatabaseRegion;\r\n }\r\n\r\n export enum EAppId {\r\n BruceApi = \"BruceAPI\",\r\n Navigator = \"Navigator\",\r\n }\r\n\r\n export type AppId = EAppId | string;\r\n\r\n export enum EStarterContent {\r\n Default = \"default\",\r\n None = \"none\"\r\n }\r\n\r\n export interface IAccount {\r\n ID?: string;\r\n Name?: string;\r\n \"ClientAccount.ID\"?: string;\r\n \"Application.ID\"?: string;\r\n \"BruceAPI\"?: string;\r\n \"Settings\"?: any;\r\n \"OwnerUser.ID\"?: string;\r\n // This will depend on what \"appSettingsId\" you request for.\r\n \"Application.Settings\"?: AccountSettings.Settings;\r\n }\r\n\r\n export async function Get(params: {\r\n api: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n account: IAccount\r\n }> {\r\n const { api, accountId: id, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`account/${id}`, reqParams);\r\n const resData = {\r\n account: req\r\n };\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: resData,\r\n req: reqParams\r\n });\r\n return resData;\r\n }\r\n\r\n export async function GetRelatedList(params: {\r\n api: IdmApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n accounts: IAccount[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(api.GetSessionId()), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(\"user/relatedClientAccounts\", reqParams);\r\n const prom: Promise<{ accounts: IAccount[] }> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n const items = data.Items.filter((x: IAccount) => !ACCOUNT_EXCLUSIONS.includes(<string>x.ID))\r\n res({\r\n accounts: items\r\n });\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(api.GetSessionId()),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetAppSettings(params: {\r\n api: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n appId: AppId,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: AccountSettings.Settings\r\n }> {\r\n const { api, accountId: id, appId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id, appId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`account/${id}?ApplicationID=${appId}`, reqParams);\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n const settings = data?.[ \"Application.Settings\" ] ?? {};\r\n res({\r\n settings: settings\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id, appId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * WARNING: Do not update API settings without knowing what you're doing.\r\n * @param params\r\n * @returns\r\n */\r\n export async function UpdateAppSettings(params: {\r\n api: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n appId: string,\r\n settings: AccountSettings.Settings,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: AccountSettings.Settings\r\n }> {\r\n const { api, accountId: id, appId, settings: data, req: reqParams } = params;\r\n const res = await api.POST(`account/${id}/applicationSettings/${appId}`, data, reqParams);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Account + Api.ECacheKey.Id + id);\r\n return {\r\n settings: res\r\n };\r\n }\r\n\r\n /**\r\n * Creates a new Bruce account using given details.\r\n * @param params\r\n * @returns\r\n */\r\n export async function Create(params: {\r\n api: BruceApi.Api,\r\n accountId: string,\r\n name: string,\r\n hostingLocationKey: string,\r\n starterContent?: EStarterContent,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n account: IAccount\r\n }> {\r\n let { api, accountId: id, name, hostingLocationKey, starterContent, req: reqParams } = params;\r\n if (!id || !name || !hostingLocationKey) {\r\n throw new Error(\"Id, Name and hostingLocationKey are required.\");\r\n }\r\n if (!starterContent) {\r\n starterContent = EStarterContent.None;\r\n }\r\n const reqData = {\r\n \"Name\": name,\r\n \"HostingLocation.Key\": hostingLocationKey,\r\n \"StarterContent\": starterContent\r\n }\r\n const res = await api.POST(`clientAccount/${id}`, reqData, Api.PrepReqParams(reqParams));\r\n const resData = {\r\n account: res\r\n };\r\n api.Cache.Remove(GetListCacheKey(api.GetSessionId()));\r\n return resData;\r\n }\r\n}","import { Api } from \"../api/api\";\r\n\r\nexport namespace MessageBroker {\r\n export enum EAction {\r\n // Subscribes a client to topic messages on a server side.\r\n SUBSCRIBE = \"subscribe\",\r\n // Subscribes a client to a topic without notifying other clients.\r\n SUBSCRIBE_SHADOW = \"subscribeShadow\",\r\n // Unsubscribes clients from topic messages on a server side\r\n UNSUBSCRIBE = \"unsubscribe\",\r\n // Sends a message to all topic subscribers.\r\n BROADCAST = \"broadcast\",\r\n // Requests topic subscribers without subscribing.\r\n GET_TOPIC_SUBSCRIBERS = \"getTopicSubscribers\"\r\n }\r\n\r\n export type SubscribeType = EAction.SUBSCRIBE | EAction.SUBSCRIBE_SHADOW;\r\n\r\n export interface IMessageBase {\r\n topic: string;\r\n event?: string;\r\n data?: any;\r\n }\r\n\r\n export interface IMessage extends IMessageBase {\r\n // Timestamp of message.\r\n time?: number;\r\n // User id of message sender.\r\n user?: string;\r\n action: EAction;\r\n }\r\n\r\n export interface IBroker {\r\n /**\r\n * Add a subscriber to a topic.\r\n * @param topic \r\n * @param callback \r\n * @param action \r\n */\r\n Subscribe: (topic: string, callback: (msg: IMessage) => void, type?: SubscribeType) => void,\r\n /**\r\n * Remove a subscriber from a topic.\r\n * @param topic \r\n * @param callback \r\n */\r\n Unsubscribe: (topic: string, callback: (msg: IMessage) => void) => void,\r\n /**\r\n * Send message to server.\r\n * @param base \r\n * @returns \r\n */\r\n SendMessage: (base: IMessageBase | IMessage) => void;\r\n SetUserId: (userId: string) => void;\r\n IsConnected: boolean;\r\n }\r\n\r\n /**\r\n * Communicates with a server message broker.\r\n */\r\n export class WebSocketBroker implements IBroker {\r\n private subscriptions = new Map<string, ((msg: IMessage) => void)[]>();\r\n private ws: WebSocket;\r\n private reconnects: number = 0;\r\n private maxReconnects: number = 5;\r\n private userId: string;\r\n private uri: string;\r\n private env: Api.Env;\r\n\r\n public constructor(uri: string, env?: Api.Env) {\r\n this.uri = uri;\r\n this.env = env ? env : Api.EEnv.PROD;\r\n this.connect();\r\n }\r\n\r\n public get IsConnected(): boolean {\r\n return this.ws.readyState === WebSocket.OPEN;\r\n }\r\n\r\n public SetUserId(userId: string): void {\r\n this.userId = this.userId ? this.userId : userId;\r\n }\r\n\r\n private connect() {\r\n try {\r\n if (!WebSocket) {\r\n throw new Error(\"WebSocket is not supported by this browser\");\r\n }\r\n this.ws = new WebSocket(this.formatApiUri(this.uri));\r\n this.ws.onopen = this.onOpen.bind(this);\r\n this.ws.onmessage = this.onMessage.bind(this);\r\n this.ws.onerror = this.onError.bind(this);\r\n this.ws.onclose = this.onClose.bind(this);\r\n } \r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private formatApiUri(uri: string): string {\r\n const ws = document.location.protocol === \"https:\" ? \"wss\" : \"ws\";\r\n return uri.replace(/^(https|http)/, ws) + \"websocket\";\r\n }\r\n\r\n private onOpen(ev: any): void {\r\n if (this.env === Api.EEnv.DEV) {\r\n console.log(\"MessageBroker connection opened: \", ev);\r\n }\r\n }\r\n\r\n private onClose(ev: any): void {\r\n if (this.env === Api.EEnv.DEV) {\r\n console.log(\"MessageBroker connection closed, trying to reconnect: \", ev);\r\n }\r\n if (this.reconnects < this.maxReconnects) {\r\n this.reconnects += 1;\r\n setTimeout(() => this.connect(), 5000 * this.reconnects);\r\n }\r\n }\r\n\r\n private onMessage(ev: any): void {\r\n const data: IMessage = JSON.parse(ev.data);\r\n this.subscriptions.get(data.topic)?.forEach(cb => cb(data));\r\n }\r\n\r\n private onError(ev: any): void {\r\n console.error(\"MessageBroker connection error: \", ev);\r\n }\r\n\r\n private addSubscriber(topic: string, callback: (msg: IMessage) => void): void {\r\n const subscribers = this.subscriptions.get(topic) || [];\r\n if (subscribers.includes(callback)) {\r\n return;\r\n }\r\n subscribers.push(callback);\r\n this.subscriptions.set(topic, subscribers);\r\n }\r\n\r\n /**\r\n * Send message to server.\r\n * @param base \r\n * @returns \r\n */\r\n public SendMessage(base: IMessageBase | IMessage): void {\r\n if (this.ws.readyState !== WebSocket.OPEN) {\r\n return;\r\n }\r\n try {\r\n const msg = base as IMessage;\r\n if (!msg.event) {\r\n msg.event = EAction.BROADCAST;\r\n }\r\n let message = base.data ? base.data : {};\r\n if (typeof message == \"object\") {\r\n message = JSON.stringify(message);\r\n }\r\n msg.data = message;\r\n\r\n const outgoingMessage: IMessage = { ...msg, user: this.userId, time: Date.now() };\r\n this.ws.send(JSON.stringify(outgoingMessage));\r\n } \r\n catch (e) {\r\n console.warn(e);\r\n }\r\n }\r\n\r\n /**\r\n * Add a subscriber to a topic.\r\n * @param topic \r\n * @param callback \r\n * @param action \r\n */\r\n public Subscribe(topic: string, callback: (msg: IMessage) => void, action?: SubscribeType): void {\r\n if (!action) {\r\n action = EAction.SUBSCRIBE;\r\n }\r\n this.addSubscriber(topic, callback);\r\n this.SendMessage({ topic, action });\r\n }\r\n\r\n /**\r\n * Remove a subscriber from a topic.\r\n * @param topic \r\n * @param callback \r\n */\r\n public Unsubscribe(topic: string, callback: (msg: IMessage) => void): void {\r\n const subscribers = this.subscriptions.get(topic) || [];\r\n this.subscriptions.set(topic, subscribers.filter(fn => fn != callback));\r\n this.SendMessage({ topic, action: EAction.UNSUBSCRIBE });\r\n }\r\n\r\n public RequestTopicUsers(topic: string, callback: (msg: IMessage) => void): void {\r\n this.addSubscriber(topic, callback);\r\n this.SendMessage({ topic, event: EAction.GET_TOPIC_SUBSCRIBERS });\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/Idm Api,\r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\nexport namespace GuardianApi {\r\n export interface IGetter {\r\n // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n // Should return using app defaults if no params are specified.\r\n getApi: (env?: A.EEnv) => GuardianApi.Api;\r\n }\r\n\r\n export class Api extends AbstractApi {\r\n private env: A.Env;\r\n\r\n constructor(params: {\r\n env?: A.Env\r\n }) {\r\n super({\r\n ssidHeader: \"x-sessionid\",\r\n cacheId: `GUARDIAN_API_${params?.env}_`\r\n });\r\n this.env = params?.env ? params.env : A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n\r\n private setBaseUrl(): void {\r\n let url = \"https://guardian.nextspace\";\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url += \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url += \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url += \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url += \".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 { Account } from \"../account/account\";\r\nimport { AccountSettings } from \"../account/account-settings\";\r\nimport { Api } from \"../api/api\";\r\nimport { GuardianApi } from \"../api/guardian-api\";\r\n\r\n/**\r\n * A hosting location is a record for a possible bruce-api server configuration.\r\n * A hosting location will have one or many database servers as well, this is an additional setting.\r\n */\r\nexport namespace HostingLocation {\r\n export interface ILocation {\r\n // Internal ID.\r\n ID: number;\r\n // External ID.\r\n Key: string;\r\n // Indicates if creation of a new bruce account is allowed in this region.\r\n // This should dictate if the record is visible in UI dropdowns as well for non-super-admins.\r\n IsEnabledForNewAccounts: boolean;\r\n DisplayName?: string;\r\n Description?: string;\r\n // Eg: \"us-west-1\".\r\n AWSRegion?: string;\r\n // Eg: \"Singapore\".\r\n Country?: string;\r\n // Eg: \"Vultr\".\r\n Hoster?: string;\r\n // Eg: \"San Francisco\".\r\n City?: string;\r\n // URL template to the corresponding API instance.\r\n // Eg: \"https://<ACCOUNTID>.api.nextspace-us.host/\".\r\n BruceAPIURL?: string;\r\n // Comma separated list of Api.EEnv.\r\n Environment?: string;\r\n // Arbitrary settings for the particular location.\r\n // For example this may include CDN template URLs.\r\n Settings?: any;\r\n }\r\n\r\n /**\r\n * @Warning: This will not return the Settings property.\r\n * @param params\r\n * @returns\r\n */\r\n export async function GetList(params: {\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n locations: ILocation[]\r\n }> {\r\n const res = await params.api.GET(\"hostinglocations\", Api.PrepReqParams(params.req));\r\n return {\r\n locations: res.Items\r\n };\r\n }\r\n\r\n export async function GetById(params: {\r\n id: number,\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n const { id, api, req } = params;\r\n if (!id) {\r\n throw(\"Invalid id\");\r\n }\r\n const res = await api.GET(`hostinglocation/id/${id}`, Api.PrepReqParams(req));\r\n return {\r\n location: res\r\n };\r\n }\r\n\r\n export async function GetByKey(params: {\r\n key: string,\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n const { key, api, req } = params;\r\n if (!key) {\r\n throw(\"Invalid key\");\r\n }\r\n const res = await api.GET(`hostinglocation/key/${key}`, Api.PrepReqParams(req));\r\n return {\r\n location: res\r\n };\r\n }\r\n\r\n /**\r\n * Returns hostingLocationKey from given db url.\r\n * Some older accounts don't have this set, so we need to guess it.\r\n * @param params\r\n * @returns\r\n */\r\n export function GuessKey(params: {\r\n // Database connection string.\r\n DBServer?: string\r\n }) {\r\n const { DBServer: databaseUrl } = params;\r\n if (databaseUrl.includes(\"hyperfarm-prod-instance-1\")) {\r\n return \"HYPERFARM\";\r\n }\r\n if (databaseUrl.includes(\"prod-syd1.nextspace.host\")) {\r\n return \"AU-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-nyc1.nextspace.host\")) {\r\n return \"US-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-ams1.nextspace.host\")) {\r\n return \"EU-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-sing1.nextspace.host\")) {\r\n return \"SE-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"dev-first\")) {\r\n return \"DEV-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\".ap-southeast-1.\")) {\r\n return \"SE\";\r\n }\r\n else if (databaseUrl.includes(\".us-west-1.\")) {\r\n return \"US\";\r\n }\r\n else if (databaseUrl.includes(\".eu-west-3.\")) {\r\n return \"EU\";\r\n }\r\n else if (databaseUrl.includes(\"bruce-prod-au\")) {\r\n return \"AU\";\r\n }\r\n else if (databaseUrl.includes(\"bruce-dev\")) {\r\n return \"DEV\";\r\n }\r\n return null;\r\n }\r\n\r\n export async function GetKeyByAccountId(params: {\r\n // Either accountId or apiSettings must be provided.\r\n accountId?: string,\r\n apiSettings?: AccountSettings.IBruceApi,\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n key: string,\r\n // Indicates if the key was inferred by legacy data.\r\n isLegacy?: boolean\r\n }> {\r\n const { accountId, apiSettings, api, req } = params;\r\n if (!accountId && !apiSettings) {\r\n throw(\"Invalid accountId or apiSettings\");\r\n }\r\n const settings = apiSettings ? apiSettings : (await Account.GetAppSettings({\r\n api,\r\n accountId,\r\n appId: Account.EAppId.BruceApi\r\n })).settings as AccountSettings.IBruceApi;\r\n let hostingKey = settings[\"HostingLocation.Key\"];\r\n let isLegacy = false;\r\n if (!hostingKey) {\r\n hostingKey = settings.DBLocation;\r\n isLegacy = true;\r\n }\r\n if (!hostingKey) {\r\n hostingKey = GuessKey({\r\n DBServer: settings.DBServer\r\n });\r\n isLegacy = true;\r\n }\r\n return {\r\n key: hostingKey,\r\n isLegacy\r\n };\r\n }\r\n\r\n export async function GetByAccountId(params: {\r\n // Either accountId or apiSettings must be provided.\r\n accountId?: string,\r\n apiSettings?: AccountSettings.IBruceApi,\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n const { accountId, apiSettings, api, req } = params;\r\n const data = await GetKeyByAccountId({\r\n accountId,\r\n apiSettings,\r\n api,\r\n req\r\n });\r\n if (!data?.key) {\r\n return null;\r\n }\r\n const key = await GetByKey({\r\n key: data.key,\r\n api,\r\n req\r\n });\r\n return key;\r\n }\r\n}","import { Account } from \"../account/account\";\r\nimport { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\nimport { MessageBroker } from \"../server/message-broker\";\r\nimport { AccountSettings } from \"../account/account-settings\";\r\nimport { GuardianApi } from \"./guardian-api\";\r\nimport { HostingLocation } from \"../server/hosting-location\";\r\n\r\nexport namespace BruceApi {\r\n export interface IGetter {\r\n // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n accountId: string;\r\n // Should return using app defaults if no params are specified.\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 accountId: string;\r\n private env: A.Env;\r\n private loadProm: Promise<void>;\r\n private loadCancelled: boolean = false;\r\n private messageBroker: MessageBroker.IBroker;\r\n public get MessageBroker(): MessageBroker.IBroker {\r\n return this.messageBroker;\r\n }\r\n // Used for entity GET list-by-filter requests.\r\n // When set and viaCdn = true when performing an entity request, this will be used in place for base-url.\r\n // Eg: \"https://d3pb232f6pp9if.cloudfront.net/entitiesListForCDN/alex\"\r\n public EntityCdnUrl: string;\r\n // Works only for static/dynamic tilesets.\r\n // When set and viaCdn = true when getting a legacy tileset file, this will be used in place for base-url.\r\n // Eg: \"https://d15gsaz0jz5ika.cloudfront.net/alex/<TILESETID>/file/<FILEPATH>\"\r\n public LegacyTilesetCdnUrl: string;\r\n\r\n // Indicates if the init process has finished loading.\r\n // This means the regional base url has been set and message broker is ready.\r\n public get Loading(): Promise<void> {\r\n return this.loadProm;\r\n }\r\n\r\n /**\r\n * @param params\r\n */\r\n constructor(params: {\r\n // Required client account to connect to.\r\n accountId: string,\r\n // Default is PROD.\r\n env?: A.Env,\r\n // @Deprecated, use loadConfig instead.\r\n loadRegionalBaseUrl?: boolean\r\n // True to load settings for regional base url and CDN.\r\n /// Default = false.\r\n loadConfig?: boolean\r\n // Guardian instance used for regional url loading.\r\n // If not provided then a new instance of the API is made.\r\n guardian?: GuardianApi.Api,\r\n }) {\r\n super({\r\n ssidHeader: \"x-sessionid\",\r\n cacheId: `BRUCE_API_${params?.env}_${params?.accountId}_`\r\n });\r\n let {accountId, env, guardian, loadRegionalBaseUrl, loadConfig} = params;\r\n this.accountId = accountId;\r\n this.env = env ?? A.EEnv.PROD;\r\n\r\n if (loadRegionalBaseUrl) {\r\n loadConfig = true;\r\n }\r\n if (!guardian && loadConfig) {\r\n guardian = new GuardianApi.Api({\r\n env: this.env\r\n });\r\n }\r\n this.loadProm = this.init(guardian, loadConfig);\r\n }\r\n\r\n /**\r\n * Loads regional base url and sets up message broker.\r\n * @param guardian Required for loading regional base url.\r\n * @param loadConfig\r\n * @returns\r\n */\r\n private async init(\r\n guardian?: GuardianApi.Api,\r\n loadConfig?: boolean\r\n ): Promise<void> {\r\n if (!this.accountId) {\r\n throw(\"accountId is required.\");\r\n }\r\n\r\n // Set using a stable default.\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 if (guardian && loadConfig) {\r\n // Attempt to load an account specific base url.\r\n // This could be one with a region specific endpoint.\r\n try {\r\n const settings = (await Account.GetAppSettings({\r\n api: guardian,\r\n accountId: this.accountId,\r\n appId: Account.EAppId.BruceApi\r\n })).settings as AccountSettings.IBruceApi;\r\n if (this.loadCancelled) {\r\n console.warn(\"BruceApi: Loading was cancelled due to SetBaseUrl being called, not setting regional base url.\");\r\n return;\r\n }\r\n let endpoint = settings.BruceAPIURL?.[env];\r\n if (typeof endpoint == \"string\") {\r\n if (!endpoint.endsWith(\"/\")) {\r\n endpoint += \"/\";\r\n }\r\n this.baseUrl = endpoint;\r\n }\r\n\r\n const host = await HostingLocation.GetByAccountId({\r\n accountId: this.accountId,\r\n apiSettings: settings,\r\n api: guardian\r\n });\r\n const hostSettings = host?.location?.Settings;\r\n if (hostSettings?.CDN) {\r\n this.EntityCdnUrl = hostSettings.CDN.entityURL?.[env];\r\n // We need to fix our configs.\r\n if (this.EntityCdnUrl) {\r\n if (this.EntityCdnUrl.includes(\"entitiesListForCDN\")) {\r\n this.EntityCdnUrl = this.EntityCdnUrl.replace(\"<ACCOUNT>\", this.accountId);\r\n }\r\n else {\r\n this.EntityCdnUrl = this.EntityCdnUrl.replace(\"<ACCOUNT>\", \"entitiesListForCDN/\" + this.accountId);\r\n }\r\n }\r\n this.LegacyTilesetCdnUrl = hostSettings.CDN.legacyTilesetURL?.[env];\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n try {\r\n this.messageBroker = new MessageBroker.WebSocketBroker(this.baseUrl, this.env);\r\n }\r\n catch (e) {\r\n console.warn(\"BruceApi: Failed to create message broker.\", e);\r\n }\r\n }\r\n\r\n /**\r\n * Warning: This method does not wait for init to finish loading.\r\n * This means the url could be changed once fully initialized.\r\n * The url will be valid either way, but the loaded one may be faster as it is region specific.\r\n * Await the \"Loading\" promise if you care about this.\r\n * @returns\r\n */\r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n\r\n /**\r\n * Warning: This will cancel the init process.\r\n * The init process loads a region specific endpoint.\r\n * Setting a base url will stop that process from completing.\r\n * @param url\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 this.loadCancelled = true;\r\n }\r\n\r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.get(this.baseUrl + url, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\r\n }\r\n\r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.delete(this.baseUrl + url, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\r\n }\r\n\r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.post(this.baseUrl + url, data, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\r\n }\r\n\r\n public async PUT(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.put(this.baseUrl + url, data, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\r\n }\r\n\r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.upload(this.baseUrl + url, blob, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\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 * @deprecated Please use GuardianApi instead.\r\n */\r\nexport namespace CamApi {\r\n export interface IGetter {\r\n // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n // Should return using app defaults if no params are specified.\r\n getApi: (env?: A.EEnv) => CamApi.Api;\r\n }\r\n\r\n export class Api extends AbstractApi {\r\n private env: A.Env;\r\n\r\n constructor(params: {\r\n env?: A.Env\r\n }) {\r\n super({\r\n ssidHeader: \"x-sessionid\",\r\n cacheId: `CAM_API_${params?.env}_`\r\n });\r\n this.env = params?.env ? params.env : A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n\r\n private setBaseUrl(): void {\r\n let codeWord = \"cam\"\r\n let url = \"https://<CODEWORD>.nextspace\";\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n codeWord = \"guardian\";\r\n url += \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n codeWord = \"guardian\";\r\n url += \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n codeWord = \"guardian\";\r\n url += \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url += \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n url = url.replace(\"<CODEWORD>\", codeWord);\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\n/**\r\n * * @deprecated Please use GuardianApi instead.\r\n */\r\nexport namespace IdmApi {\r\n export interface IGetter {\r\n // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n // Should return using app defaults if no params are specified.\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 env: A.Env;\r\n\r\n constructor(params: {\r\n env?: A.Env\r\n }) {\r\n super({\r\n ssidHeader: \"SSID\",\r\n cacheId: `IDM_API_${params?.env}_`\r\n });\r\n this.env = params?.env ? params.env : A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n\r\n private setBaseUrl(): void {\r\n let codeWord = \"idm\"\r\n let url = \"https://<CODEWORD>.nextspace\";\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n codeWord = \"guardian\";\r\n url += \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n codeWord = \"guardian\";\r\n url += \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n codeWord = \"guardian\";\r\n url += \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url += \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n url = url.replace(\"<CODEWORD>\", codeWord);\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 // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n // Should return using app defaults if no params are specified.\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 env: A.Env;\r\n\r\n constructor(params: {\r\n env?: A.Env\r\n }) {\r\n super({\r\n ssidHeader: \"x-sessionid\",\r\n cacheId: `GLOBAL_API_${params?.env}_`\r\n });\r\n this.env = params?.env ? params.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}","import { IDictionary } from \"../common/dictionary\";\r\nimport { Api } from \"./api\";\r\nimport { BruceApi } from \"./bruce-api\";\r\nimport { CamApi } from \"./cam-api\";\r\nimport { GlobalApi } from \"./global-api\";\r\nimport { GuardianApi } from \"./guardian-api\";\r\nimport { IdmApi } from \"./idm-api\";\r\n\r\nexport class ApiGetters {\r\n private bruce: IDictionary<BruceApi.Api> = {};\r\n private idm: IDictionary<IdmApi.Api> = {};\r\n private cam: IDictionary<CamApi.Api> = {};\r\n private guardian: IDictionary<GuardianApi.Api> = {};\r\n private global: IDictionary<GlobalApi.Api> = {};\r\n private accountId: string;\r\n private env: Api.EEnv;\r\n private sessionId: string;\r\n\r\n constructor(params: {\r\n accountId: string,\r\n env?: Api.EEnv,\r\n sessionId?: string\r\n }) {\r\n this.accountId = params?.accountId;\r\n this.env = params?.env ? params.env : Api.EEnv.PROD;\r\n this.sessionId = params?.sessionId;\r\n }\r\n\r\n public SetAccountId(accountId: string) {\r\n this.accountId = accountId;\r\n }\r\n\r\n public GetAccountId(): string {\r\n return this.accountId;\r\n }\r\n\r\n public SetEnv(env: Api.EEnv) {\r\n this.env = env;\r\n }\r\n\r\n public GetEnv(): Api.EEnv {\r\n return this.env;\r\n }\r\n\r\n public SetSessionId(sessionId: string) {\r\n this.sessionId = sessionId;\r\n for (const key in this.bruce) {\r\n this.bruce[key].SetSessionId(sessionId);\r\n }\r\n for (const key in this.idm) {\r\n this.idm[key].SetSessionId(sessionId);\r\n }\r\n for (const key in this.cam) {\r\n this.cam[key].SetSessionId(sessionId);\r\n }\r\n for (const key in this.global) {\r\n this.global[key].SetSessionId(sessionId);\r\n }\r\n }\r\n\r\n public GetSessionId(): string {\r\n return this.sessionId;\r\n }\r\n\r\n public GetBruceApi(params: {\r\n accountId?: string,\r\n env?: Api.EEnv\r\n }): BruceApi.Api {\r\n let {accountId, env} = params;\r\n accountId = accountId ? accountId : this.accountId;\r\n env = env ? env : this.env;\r\n const key = `${accountId}-${env}`;\r\n if (!this.bruce[key]) {\r\n this.bruce[key] = new BruceApi.Api({\r\n accountId,\r\n env,\r\n loadRegionalBaseUrl: true\r\n });\r\n this.bruce[key].SetSessionId(this.sessionId);\r\n }\r\n return this.bruce[key];\r\n }\r\n\r\n public GetBruceGetter(): BruceApi.IGetter {\r\n return {\r\n accountId: this.accountId,\r\n env: this.env,\r\n getApi: (accountId?: string, env?: Api.EEnv) => {\r\n return this.GetBruceApi({accountId, env});\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deprecated: Use GetGuardianApi instead.\r\n * @returns\r\n */\r\n public GetIdmApi(params: {\r\n env?: Api.EEnv\r\n }): IdmApi.Api {\r\n let {env} = params;\r\n env = env ? env : this.env;\r\n const key = `${env}`;\r\n if (!this.idm[key]) {\r\n this.idm[key] = new IdmApi.Api({\r\n env\r\n });\r\n this.idm[key].SetSessionId(this.sessionId);\r\n }\r\n return this.idm[key];\r\n }\r\n\r\n /**\r\n * Deprecated: Use GetGuardianGetter instead.\r\n * @returns\r\n */\r\n public GetIdmGetter(): IdmApi.IGetter {\r\n return {\r\n env: this.env,\r\n getApi: (env?: Api.EEnv) => {\r\n return this.GetIdmApi({env});\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deprecated: Use GetGuardianApi instead.\r\n * @returns\r\n */\r\n public GetCamApi(params: {\r\n env?: Api.EEnv\r\n }): CamApi.Api {\r\n let {env} = params;\r\n env = env ? env : this.env;\r\n const key = `${env}`;\r\n if (!this.cam[key]) {\r\n this.cam[key] = new CamApi.Api({\r\n env\r\n });\r\n this.cam[key].SetSessionId(this.sessionId);\r\n }\r\n return this.cam[key];\r\n }\r\n\r\n /**\r\n * Deprecated: Use GetGuardianGetter instead.\r\n * @returns\r\n */\r\n public GetCamGetter(): CamApi.IGetter {\r\n return {\r\n env: this.env,\r\n getApi: (env?: Api.EEnv) => {\r\n return this.GetCamApi({env});\r\n }\r\n }\r\n }\r\n\r\n public GetGlobalApi(params: {\r\n env?: Api.EEnv\r\n }): GlobalApi.Api {\r\n let {env} = params;\r\n env = env ? env : this.env;\r\n const key = `${env}`;\r\n if (!this.global[key]) {\r\n this.global[key] = new GlobalApi.Api({\r\n env\r\n });\r\n this.global[key].SetSessionId(this.sessionId);\r\n }\r\n return this.global[key];\r\n }\r\n\r\n public GetGlobalGetter(): GlobalApi.IGetter {\r\n return {\r\n env: this.env,\r\n getApi: (env?: Api.EEnv) => {\r\n return this.GetGlobalApi({env});\r\n }\r\n }\r\n }\r\n\r\n public GetGuardianApi(params: {\r\n env?: Api.EEnv\r\n }): GuardianApi.Api {\r\n let {env} = params;\r\n env = env ? env : this.env;\r\n const key = `${env}`;\r\n if (!this.guardian[key]) {\r\n this.guardian[key] = new GuardianApi.Api({\r\n env\r\n });\r\n this.guardian[key].SetSessionId(this.sessionId);\r\n }\r\n return this.guardian[key];\r\n }\r\n\r\n public GetGuardianGetter(): GuardianApi.IGetter {\r\n return {\r\n env: this.env,\r\n getApi: (env?: Api.EEnv) => {\r\n return this.GetGuardianApi({env});\r\n }\r\n }\r\n }\r\n}","export namespace Color {\n export interface IColor {\n // Max: 255, Min: 0.\n red: number;\n green: number;\n blue: number;\n // Max: 1, Min: 0.\n alpha: number ;\n }\n\n export enum EBlendMode {\n HIGHLIGHT,\n REPLACE,\n MIX\n }\n\n export interface IBlendSettings {\n blendMode?: EBlendMode;\n // 1 = 100% new color. 0 = original color.\n blendPercent?: number;\n }\n\n export function RandomColor(): IColor {\n // https://stackoverflow.com/a/7352887\n const brightness = 4;\n const rgb = [Math.random() * 256, Math.random() * 256, Math.random() * 256];\n const mix = [brightness * 51, brightness * 51, brightness * 51];\n const mixedrgb = [rgb[0] + mix[0], rgb[1] + mix[1], rgb[2] + mix[2]].map(function(x){\n return Math.round(x / 2.0);\n });\n const str = \"rgba(\" + mixedrgb.join(\",\") + \",0.9\" + \")\";\n return ColorFromStr(str);\n }\n\n /**\n * Attempts to parse a given color string into a model.\n * @param str \n * @returns \n */\n export function ColorFromStr(str: string): IColor {\n let r,g,b,a;\n const rgba = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([^\\)]+)\\s*)?\\)$/.exec(str);\n if (rgba) {\n r = parseInt(rgba[1]);\n g = parseInt(rgba[2]);\n b = parseInt(rgba[3]);\n a = rgba[4] != null ? parseFloat(rgba[4]) : 1;\n return {\n red: r,\n green: g,\n blue: b,\n alpha: a\n }\n }\n if (str.charAt(0) == \"#\") {\n str = str.substring(1);\n }\n if (str.length == 6) {\n // rgb.\n const parsed = /^(.{2})(.{2})(.{2})/.exec(str);\n if (!parsed) {\n return <any>null;\n }\n r = parseInt(parsed[1], 16);\n g = parseInt(parsed[2], 16);\n b = parseInt(parsed[3], 16);\n a = 1;\n }\n else if (str.length == 8) {\n // rgba.\n const parsed = /^(.{2})(.{2})(.{2})(.{2})/.exec(str);\n if (!parsed) {\n return <any>null;\n }\n r = parseInt(parsed[1], 16);\n g = parseInt(parsed[2], 16);\n b = parseInt(parsed[3], 16);\n a = parseInt(parsed[4], 16);\n if (a != 0) {\n a = a/255;\n }\n }\n else {\n return <any>null;\n }\n if (a == null) {\n a = 1;\n }\n return {\n red: r,\n blue: b,\n green: g,\n alpha: a\n }\n }\n}","export namespace ObjectUtils {\n /**\n * Generates a Bruce compatible UID.\n * @returns \n */\n export function UId(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n}","/**\n * Utility to help with parsing and wrapping Bruce paths.\n */\nexport namespace PathUtils {\n export function Parse(str: string): string[] {\n if (!str) {\n return [];\n }\n const broken: string[] = str.split(\"\\\"/\\\"\");\n if (broken.length > 0) {\n let top = broken[0];\n if (top.length > 0) {\n if (top.charAt(0) == \"\\\"\") {\n top = top.substring(1);\n }\n broken[0] = top;\n }\n const endIndex = broken.length - 1;\n let bot = broken[endIndex];\n if (bot.length > 0) {\n if (bot.charAt(bot.length - 1) == \"\\\"\") {\n bot = bot.substring(0, bot.length - 1);\n }\n broken[endIndex] = bot;\n }\n }\n return broken;\n }\n\n export function Wrap(path: string[]): string {\n let tmp: string = \"\\\"\";\n for (let i = 0; i < path.length; i++) {\n let section = path[i];\n tmp += section;\n if (i < path.length - 1) {\n tmp += \"\\\"/\\\"\";\n }\n }\n tmp += \"\\\"\";\n return tmp;\n }\n\n export function ParseLegacy(str: string): string[] {\n const broken: string[] = str.split(\".\");\n for (let i = 0; i < broken.length; i++) {\n let piece = broken[0];\n if (piece.charAt(0) == \"\\\"\") {\n piece = broken[0] = piece.substring(1);\n }\n if (piece.charAt(piece.length - 1) == \"\\\"\") {\n broken[0] = piece.substring(0, piece.length - 1);\n }\n }\n return broken;\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Bounds } from \"../common/bounds\";\r\nimport { Geometry } from \"../common/geometry\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { Transform } from \"../common/transform\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { EntityType } from \"./entity-type\";\r\nimport { PathUtils } from \"../util/path-utils\";\r\nimport { IDictionary } from \"../common/dictionary\";\r\nimport { Carto } from \"../bruce-models\";\r\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, entityTypeId?: string, expandLocation?: boolean): string {\r\n if (!entityTypeId) {\r\n entityTypeId = \"\";\r\n }\r\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}${String(entityTypeId)}${String(Boolean(expandLocation))}`;\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 // Available if expandLocation is true.\r\n // Related tileset ids if any.\r\n tilesetID?: string[];\r\n // Available if expandLocation is true.\r\n // Relative offset to parent node.\r\n worldPosition?: number[][];\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n // (Optional) Entity type ID to load specific schema.\r\n entityTypeId?: string;\r\n expandLocation?: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entity: IEntity\r\n }> {\r\n const { api, entityId, req: reqParams, expandLocation, entityTypeId } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const key = GetCacheKey(entityId, entityTypeId, expandLocation);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const urlParams = new URLSearchParams();\r\n if (expandLocation) {\r\n urlParams.append(\"$expand\", \"location\");\r\n }\r\n if (entityTypeId) {\r\n urlParams.append(\"BruceEntityType\", entityTypeId);\r\n }\r\n const data = await api.GET(\r\n `entity/${entityId}?${urlParams.toString()}`,\r\n Api.PrepReqParams(reqParams)\r\n );\r\n res({\r\n entity: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetListByIds(params: {\r\n api: BruceApi.Api,\r\n entityIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entities: IEntity[]\r\n }> {\r\n const { api, entityIds, req: reqParams } = params;\r\n if (!entityIds.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n const reqs: Promise<{ entity: IEntity }>[] = [];\r\n const reqIds: string[] = [];\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n const key = GetCacheKey(entityId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\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<Entity.IEntity>> = api.POST(\"entities\", reqData, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < reqIds.length; i++) {\r\n const entityId = reqIds[i];\r\n const key = GetCacheKey(entityId);\r\n const prom: Promise<{ entity: IEntity }> = new Promise(async (res) => {\r\n try {\r\n const data = await req;\r\n const item = data.Items.find(x => x.Bruce.ID == entityId);\r\n res({\r\n entity: item\r\n });\r\n }\r\n catch (e) {\r\n // No showing error as we don't want to see it 2000 times.\r\n }\r\n res(<any>null);\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n reqs.push(prom);\r\n }\r\n }\r\n return {\r\n entities: (await Promise.all(reqs)).map(x => x?.entity).filter(x => !!x)\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n\r\n export async function DeleteList(params: {\r\n api: BruceApi.Api,\r\n entityIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityIds, req: reqParams } = params;\r\n if (!entityIds?.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n await api.POST(\"deleteEntities\", {\r\n Items: entityIds\r\n }, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n entity: IEntity,\r\n override: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entity: IEntity\r\n }> {\r\n const { api, entity: data, override, req: reqParams } = params;\r\n if (!data?.Bruce?.[\"EntityType.ID\"]) {\r\n throw(\"Entity Type ID is required.\");\r\n }\r\n if (!data?.Bruce?.ID) {\r\n data.Bruce = {\r\n ...data.Bruce,\r\n ID: ObjectUtils.UId()\r\n };\r\n }\r\n const reqUrl = `entity/${data.Bruce.ID}/?dataoverride=${override}&BruceEntityType=${data.Bruce[\"EntityType.ID\"]}`;\r\n const res = await api.POST(reqUrl, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(<string>data.Bruce.ID));\r\n return {\r\n entity: res\r\n };\r\n }\r\n\r\n export function RemoveTag(params: {\r\n entity: IEntity,\r\n tagId: number\r\n }): void {\r\n const { entity: data, tagId } = params;\r\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\r\n const index = tags.indexOf(tagId);\r\n if (index >= 0) {\r\n tags.splice(index, 1);\r\n data.Bruce[\"Layer.ID\"] = tags;\r\n }\r\n }\r\n\r\n export function AddTag(params: {\r\n entity: IEntity,\r\n tagId: number\r\n }): void {\r\n const { entity: data, tagId } = params;\r\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\r\n if (!tags.includes(tagId)) {\r\n tags.push(tagId);\r\n data.Bruce[\"Layer.ID\"] = tags;\r\n }\r\n }\r\n\r\n export function SetValue(params: {\r\n entity: IEntity,\r\n path: string[],\r\n value: any\r\n }): void {\r\n const { entity: data, path, value } = params;\r\n let curData = data;\r\n for (let i = 0; i < path.length; i++) {\r\n const step = path[i];\r\n if (!curData[step] || typeof curData[step] != \"object\") {\r\n curData[step] = {};\r\n }\r\n if (i >= path.length - 1) {\r\n curData[step] = value;\r\n break;\r\n }\r\n curData = curData[step];\r\n }\r\n }\r\n\r\n export function GetValue(params: {\r\n entity: IEntity,\r\n path: string[]\r\n }): any {\r\n const { entity: data, path } = params;\r\n // Backwards compatibility.\r\n if (path.length == 1 && path[0] == \"ID\") {\r\n return data.Bruce?.ID;\r\n }\r\n let curData = data;\r\n for (let i = 0; i < path.length; i++) {\r\n const step = path[i];\r\n if (!curData[step]) {\r\n return null;\r\n }\r\n if (i >= path.length - 1) {\r\n return curData[step];\r\n }\r\n curData = curData[step];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Calculates an entity's name based on attribute priority set in the type.\r\n * @param params\r\n * If true, will return the entity ID if no name can be calculated.\r\n * Otherwise it returns null.\r\n * @returns\r\n */\r\n export function CalculateName(params: {\r\n entity: IEntity,\r\n type: EntityType.IEntityType,\r\n defaultToId?: boolean\r\n }): string {\r\n const { entity, type, defaultToId = true } = params;\r\n const attrStr = type.DisplayNameAttributePath;\r\n if (attrStr) {\r\n const attrPaths = attrStr.split(\",\");\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const pathStr = attrPaths[i];\r\n const path = PathUtils.Parse(pathStr);\r\n const name = Entity.GetValue({\r\n entity: entity,\r\n path\r\n });\r\n if (name && typeof name != \"object\") {\r\n return name;\r\n }\r\n }\r\n }\r\n return defaultToId ? entity.Bruce.ID : null;\r\n }\r\n\r\n export interface IFilter {\r\n orderBy?: any;\r\n entityTypeId?: string;\r\n layerIds?: number[];\r\n bounds?: Bounds.IReqBounds;\r\n pageSize?: number;\r\n pageIndex?: number;\r\n lodCategoryId?: string;\r\n sortOrder?: Api.ESortOrder;\r\n entityTypeConditions?: IDictionary<any>;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n filter: IFilter,\r\n // Default = false.\r\n viaCdn?: boolean;\r\n // (Optional) Cache killing token to append to the request url.\r\n viaCdnCacheToken?: number | string;\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entities: IEntity[]\r\n }> {\r\n const { api, filter, req: reqParams, viaCdn, viaCdnCacheToken } = params;\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\r\n const body = {\r\n SortOrder: filter.sortOrder == Api.ESortOrder.Asc ? \"ASC\" : \"DESC\",\r\n OrderBy: filter.orderBy,\r\n Filter: requestFilter,\r\n LODType: filter.lodCategoryId,\r\n BruceEntityType: filter.entityTypeId,\r\n PageIndex: filter.pageIndex,\r\n PageSize: filter.pageSize\r\n };\r\n\r\n let entities = [];\r\n if (viaCdn && api.EntityCdnUrl) {\r\n const url = new URL(api.EntityCdnUrl);\r\n const urlParams = new URLSearchParams(url.search);\r\n urlParams.set(\"cacheToken\", String(viaCdnCacheToken ? viaCdnCacheToken : 0));\r\n if (body.SortOrder) {\r\n urlParams.set(\"SortOrder\", body.SortOrder);\r\n }\r\n if (body.OrderBy) {\r\n urlParams.set(\"OrderBy\", body.OrderBy);\r\n }\r\n if (body.Filter) {\r\n urlParams.set(\"Filter\", JSON.stringify(body.Filter));\r\n }\r\n if (body.LODType) {\r\n urlParams.set(\"LODType\", body.LODType);\r\n }\r\n if (body.BruceEntityType) {\r\n urlParams.set(\"BruceEntityType\", body.BruceEntityType);\r\n }\r\n if (body.PageIndex) {\r\n urlParams.set(\"PageIndex\", String(body.PageIndex));\r\n }\r\n if (body.PageSize) {\r\n urlParams.set(\"PageSize\", String(body.PageSize));\r\n }\r\n const urlStr = url.toString() + \"?\" + urlParams.toString();\r\n const data = await api.get(urlStr, Api.PrepReqParams(reqParams));\r\n entities = data.Items;\r\n }\r\n else {\r\n const data = await api.POST(\"entities\", body, Api.PrepReqParams(reqParams));\r\n entities = data.Items;\r\n // Only caching when non-CDN.\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = entity.Bruce.ID;\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: {\r\n entity: entity\r\n },\r\n req: reqParams\r\n });\r\n }\r\n }\r\n return {\r\n entities\r\n };\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 const path = str.substring(start + 2, end);\r\n const txt = str.substring(start, end + 1);\r\n return { path: path, text: txt };\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(params: {\r\n str: string,\r\n entity: Entity.IEntity,\r\n legacyParse?: boolean\r\n }): string {\r\n let { str, entity: data, legacyParse } = params;\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({\r\n entity: data,\r\n path: path\r\n });\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 * Example: ${Test.Test1}\r\n * Needs to become [\"Test\", \"Test1\"].\r\n * We need to cull this in admin-ui.\r\n * @param path\r\n * @returns Possible paths this legacy one could mean.\r\n */\r\nfunction parseLegacyPath(path: string): string[][] {\r\n if (!path) {\r\n return [];\r\n }\r\n const paths = [];\r\n if (path.startsWith(\"${\") && path.endsWith(\"}\")) {\r\n path = path.replace(\"${\", \"\");\r\n path = path.replace(\"}\", \"\");\r\n }\r\n // Split by dots.\r\n paths.push(PathUtils.ParseLegacy(path));\r\n // Take string as is.\r\n paths.push([path]);\r\n // Split by backslashes.\r\n paths.push(PathUtils.Parse(path));\r\n return paths;\r\n}\r\n\r\n/**\r\n * Utility for calculating values from Bruce fields.\r\n * These fields are typically found in entity styles.\r\n */\r\nexport namespace Calculator {\r\n export enum EValueType {\r\n Color,\r\n Input,\r\n Gradient,\r\n Mapping,\r\n TagColor,\r\n RandomColor\r\n }\r\n\r\n export interface IMappingOption {\r\n fieldValue: string;\r\n appliedValue: string;\r\n }\r\n\r\n export interface IMappingValue {\r\n field: string;\r\n values: IMappingOption[];\r\n }\r\n\r\n export interface IGradientPoint {\r\n position: number;\r\n color: string;\r\n }\r\n\r\n export interface IGradientValue {\r\n field: string;\r\n min: number;\r\n max: number;\r\n points: IGradientPoint[];\r\n }\r\n\r\n export interface IField {\r\n value: IGradientValue | IMappingValue | string | number;\r\n type: EValueType;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options.\r\n * The context calling this should validate results and parse stuff if needed.\r\n * @deprecated use specific calls: eg GetColor or GetNumber.\r\n * @param fields\r\n * @param entity\r\n * @param tags\r\n * @returns\r\n */\r\n export function GetValue(fields: IField[], entity: Entity.IEntity, tags: any[]): string | number | Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n if (value) {\r\n value = Color.ColorFromStr(value);\r\n }\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options with assumption that desired result is a color.\r\n * Will return null if a color is not found.\r\n * @param fields\r\n * @param entity\r\n * @param tags\r\n */\r\n export function GetColor(fields: IField[], entity: Entity.IEntity, tags: any[]): Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (typeof value === \"string\") {\r\n value = Color.ColorFromStr(value);\r\n }\r\n if (value && typeof value === \"object\" && (value.red || value.red == 0)) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetNumber(fields: IField[], entity: Entity.IEntity, tags: any[]): number {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n }\r\n if (value != \"\" && value != null && value != undefined) {\r\n value = Number(value);\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetString(fields: IField[], entity: Entity.IEntity, tags: any[]): string {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Gradient:\r\n value = String(GetGradientValue(<IGradientValue>field.value, entity));\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n value = String(GetInputValue(<string>field.value, entity));\r\n break;\r\n case EValueType.Mapping:\r\n value = String(GetMappingValue(<IMappingValue>field.value, entity));\r\n break;\r\n case EValueType.RandomColor:\r\n var color = Color.RandomColor();\r\n value = `rgba(${color.red},${color.green},${color.blue},${color.alpha})`;\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = tag.Color;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetMappingValue(value: IMappingValue, entity: Entity.IEntity): string | number {\r\n const attrPaths: string[][] = parseLegacyPath(value.field);\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const attrPath = attrPaths[i];\r\n let eValue: any = Entity.GetValue({\r\n entity: entity,\r\n path: attrPath\r\n });\r\n const isValueNum = !isNaN(+eValue);\r\n for (let i = 0; i < value.values.length; i++) {\r\n const option = value.values[i];\r\n const mapValue = option.fieldValue;\r\n const isMapValueNum = !isNaN(+mapValue);\r\n\r\n if (isValueNum && isMapValueNum) {\r\n if (+mapValue == +eValue) {\r\n return option.appliedValue;\r\n }\r\n const mapSplit = mapValue.split(\"-\");\r\n if (mapSplit.length == 2) {\r\n const min = mapSplit[0];\r\n const max = mapSplit[1];\r\n if (min != \"\") {\r\n if (+eValue < +min) {\r\n continue;\r\n }\r\n }\r\n if (max != \"\") {\r\n if (+eValue > +max) {\r\n continue;\r\n }\r\n }\r\n if (min == \"\" && max == \"\") {\r\n continue;\r\n }\r\n return option.appliedValue;\r\n }\r\n }\r\n else {\r\n if (mapValue == eValue) {\r\n return option.appliedValue;\r\n }\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetGradientValue(value: IGradientValue, entity: Entity.IEntity): Color.IColor {\r\n const attrPaths: string[][] = parseLegacyPath(value.field);\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const attrPath = attrPaths[i];\r\n let eValue: any = Entity.GetValue({\r\n entity: entity,\r\n path: attrPath\r\n });\r\n eValue = Math.min(Math.max(eValue, value.min), value.max);\r\n if (eValue < value.points[0].position) {\r\n return Color.ColorFromStr(value.points[0].color);\r\n }\r\n for (let i = 0; i < value.points.length - 1; i++) {\r\n const pointA = value.points[i];\r\n const pointB = value.points[i+1];\r\n\r\n if (eValue >= pointA.position && eValue <= pointB.position) {\r\n if (pointA.position == pointB.position) {\r\n return Color.ColorFromStr(pointA.color);\r\n }\r\n const distance = (eValue - pointA.position)/(pointB.position - pointA.position);\r\n const colorA = Color.ColorFromStr(pointA.color);\r\n const colorB = Color.ColorFromStr(pointB.color);\r\n return {\r\n red: colorA.red + (colorB.red - colorA.red) * distance,\r\n green: colorA.green + (colorB.green - colorA.green) * distance,\r\n blue: colorA.blue + (colorB.blue - colorA.blue) * distance,\r\n alpha: colorA.alpha + (colorB.alpha - colorA.alpha) * distance\r\n }\r\n }\r\n }\r\n }\r\n return Color.ColorFromStr(value.points[value.points.length - 1].color);\r\n }\r\n\r\n export function GetInputValue(value: string, entity: Entity.IEntity): string | number {\r\n if (typeof value == \"string\") {\r\n try {\r\n value = BruceVariable.SwapValues({\r\n str: value,\r\n entity: entity\r\n });\r\n // Check if it includes a math operation.\r\n const MATH_REGEX = /(\\d+\\.?\\d*|\\.\\d+)([+\\-*/])(\\d+\\.?\\d*|\\.\\d+)/;\r\n if (MATH_REGEX.test(value)) {\r\n // https://rollupjs.org/guide/en/#avoiding-eval\r\n // This stops eval warning.\r\n const eval2 = eval;\r\n return eval2(value);\r\n }\r\n }\r\n catch (exception) {\r\n const e = exception as any;\r\n let suppress: boolean = false;\r\n if (e && typeof e == \"object\") {\r\n const msg: string = e.message;\r\n suppress = !!msg && (msg.includes(\"Unexpected end\") || msg.includes(\"got end of script\"));\r\n }\r\n if (!suppress) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n}","import { Carto } from \"./carto\";\r\n\r\n/**\r\n * Describes vector geometry that Bruce uses.\r\n */\r\nexport namespace Geometry {\r\n export interface IGeometry {\r\n // Polygon array is an array of rings.\r\n // There should be 1 outer ring and 0 or more inner rings.\r\n Polygon?: IPolygonRing[];\r\n MultiGeometry?: IGeometry[];\r\n Point?: string;\r\n LineString?: string;\r\n MultiSurface?: string;\r\n }\r\n\r\n export interface IPolygonRing {\r\n LinearRing: string;\r\n Facing: EPolygonRingType;\r\n Height?: number;\r\n }\r\n\r\n export enum EPolygonRingType {\r\n Boundaries = \"out\",\r\n Hole = \"in\"\r\n }\r\n\r\n /**\r\n * Turns an array of points into string vector geometry that Bruce can use.\r\n * This is used for saving polyline and polygon data.\r\n * @param points \r\n * @returns \r\n */\r\n export function LineStrFromPoints(points: Carto.ICarto[]): string {\r\n if (!points.length) {\r\n throw(\"points is empty.\");\r\n }\r\n let carto: Carto.ICarto = points[0];\r\n let lineString = `${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\r\n for (let i = 1; i < points.length; i++) {\r\n carto = points[i];\r\n lineString += ` ${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\r\n }\r\n return lineString;\r\n }\r\n\r\n /**\r\n * Removes same points that occur in a row.\r\n * This will not modify the original array.\r\n * @param positions \r\n * @returns \r\n */\r\n export function RemoveRepeatPoints(positions: Carto.ICarto[]): Carto.ICarto[] {\r\n const filteredList = [];\r\n for (let i = 0; i < positions.length; i++) {\r\n const pos = positions[i];\r\n const lastPos = filteredList.length > 0 ? filteredList[filteredList.length - 1] : null;\r\n if (!lastPos || (pos.latitude != lastPos.latitude || pos.longitude != lastPos.longitude || pos.altitude != lastPos.altitude)) {\r\n filteredList.push(pos); \r\n }\r\n }\r\n return filteredList;\r\n }\r\n\r\n export function ParsePoints(pointsStr: string): Carto.ICarto[] {\r\n pointsStr = pointsStr.replace(/[^\\d.,-\\s]/g, \"\");\r\n\r\n let splitterCoordinates = \" \";\r\n let splitterAxis = \",\";\r\n const commaIndex = pointsStr.indexOf(\",\");\r\n const spaceIndex = pointsStr.indexOf(\" \");\r\n if ((spaceIndex > -1 && commaIndex > spaceIndex) || commaIndex <= -1) {\r\n splitterCoordinates = \",\";\r\n splitterAxis = \" \";\r\n }\r\n\r\n let points = pointsStr.trim().split(splitterCoordinates);\r\n points = points.filter(a => a != \"\");\r\n\r\n const result: Carto.ICarto[] = [];\r\n for (let i = 0; i < points.length; i++) {\r\n const pointData = points[i];\r\n const coords = pointData.trim().split(splitterAxis);\r\n if (coords.length == 2 || coords.length == 3) {\r\n const longitude = Number(coords[0]);\r\n const latitude = Number(coords[1]);\r\n const altitude = Number(coords.length >= 3 ? coords[2] : 0);\r\n if (longitude != null && latitude != null) {\r\n result.push({\r\n altitude: altitude,\r\n latitude: latitude,\r\n longitude: longitude\r\n });\r\n }\r\n else {\r\n console.warn(\"Invalid point data detected.\", pointData);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Parses both string and object Bruce geometry.\r\n * String geometry is legacy Bruce data.\r\n * @param geometry \r\n * @returns \r\n */\r\n export function ParseGeometry(geometry: any): IGeometry {\r\n if (typeof geometry == \"string\") {\r\n let positions: Carto.ICarto[] = [];\r\n const geometryParsed: string[] = (geometry || \"\").split(\";\");\r\n for (let i = 0; i < geometryParsed.length; i++) {\r\n const data = geometryParsed[i];\r\n const points = ParsePoints(data);\r\n if (points && points.length > 0) {\r\n positions = positions.concat(points);\r\n }\r\n }\r\n positions = RemoveRepeatPoints(positions);\r\n const newGeometry: IGeometry = {};\r\n if (positions.length > 0) {\r\n const topPoint = positions[0];\r\n newGeometry.Point = `${topPoint.latitude},${topPoint.longitude}` + (topPoint.altitude != null ? `,${topPoint.altitude}` : \"\");\r\n if (positions.length > 1) {\r\n newGeometry.Polygon = [{ Facing: EPolygonRingType.Boundaries, LinearRing: LineStrFromPoints(positions) }];\r\n }\r\n if (positions.length > 2) {\r\n newGeometry.LineString = LineStrFromPoints(positions);\r\n }\r\n }\r\n return newGeometry;\r\n }\r\n return geometry;\r\n }\r\n}","import { Entity } from \"../entity/entity\";\nimport { Carto } from \"./carto\";\nimport { Geometry } from \"./geometry\";\n\nexport namespace Bounds {\n /**\n * Description of an entity's bounding box.\n */\n export interface IBounds {\n maxLatitude: number;\n maxLongitude: number;\n minLatitude: number;\n minLongitude: number;\n maxAltitude: number;\n minAltitude: number;\n }\n\n /**\n * Describes the boundaries used in entity requests.\n */\n export interface IReqBounds {\n south: number;\n west: number;\n north: number;\n east: number;\n\n // Used to exclude requests from UI that fall outside of min-max boundaries.\n // TODO: Migrate into \"entity-filter-getter.ts\", \"entity-globe.ts\" and then remove from here.\n alt?: number;\n }\n\n /**\n * Calculates boundaries from entity.\n * This will not use the set entity boundaries and instead calculate from geometry and location.\n * @param entity \n */\n export function FromEntity(entity: Entity.IEntity): IBounds {\n const bounds: IBounds = {\n maxAltitude: null,\n maxLatitude: null,\n maxLongitude: null,\n minAltitude: null,\n minLatitude: null,\n minLongitude: null\n };\n const points: Carto.ICarto[] = [];\n if (entity.location) {\n points.push(entity.location);\n }\n if (entity.geometry) {\n if (entity.geometry.Point) {\n points.push(...Geometry.ParsePoints(entity.geometry.Point));\n }\n if (entity.geometry.LineString) {\n points.push(...Geometry.ParsePoints(entity.geometry.LineString));\n }\n if (entity.geometry.Polygon) {\n for (const ring of entity.geometry.Polygon) {\n points.push(...Geometry.ParsePoints(ring.LinearRing));\n }\n }\n }\n for (const point of points) {\n if (bounds.maxLatitude == null || point.latitude > bounds.maxLatitude) {\n bounds.maxLatitude = point.latitude;\n }\n if (bounds.maxLongitude == null || point.longitude > bounds.maxLongitude) {\n bounds.maxLongitude = point.longitude;\n }\n if (bounds.maxAltitude == null || point.altitude > bounds.maxAltitude) {\n bounds.maxAltitude = point.altitude;\n }\n if (bounds.minLatitude == null || point.latitude < bounds.minLatitude) {\n bounds.minLatitude = point.latitude;\n }\n if (bounds.minLongitude == null || point.longitude < bounds.minLongitude) {\n bounds.minLongitude = point.longitude;\n }\n if (bounds.minAltitude == null || point.altitude < bounds.minAltitude) {\n bounds.minAltitude = point.altitude;\n }\n }\n return bounds;\n }\n}","interface IBruceEventCallback {\n _id: number;\n removeCallback: () => void;\n callback: (data: any) => void;\n}\n\n/**\n * Simple event utility.\n * Instantiate the model, then subscribe and trigger events.\n */\nexport class BruceEvent<TArgs> {\n // Counter to help differentiate subscriptions.\n private _counter: number = 0;\n\n // Record of all callback subscriptions for this event.\n private callbacks: IBruceEventCallback[] = [];\n\n\n public Subscribe(callback: (data: TArgs) => void): (() => void) {\n let id = this._counter++;\n let newBruceEventCallback: IBruceEventCallback = {\n \t_id: id,\n \tremoveCallback: () => {\n \t\tthis.Unsubscribe(id);\n \t},\n \tcallback: callback\n };\n this.callbacks.push(newBruceEventCallback);\n return newBruceEventCallback.removeCallback;\n }\n\n public Unsubscribe(id: number): void {\n let index = this.callbacks.findIndex(x => x._id == id);\n if (index > -1) {\n this.callbacks.splice(index, 1);\n }\n }\n\n public Trigger(data?: TArgs): void {\n let callbacks = this.callbacks;\n for (let i = 0; i < callbacks.length; i++) {\n let callback = callbacks[i];\n if (callback.callback) {\n callback.callback(data);\n }\n }\n }\n\n public Clear(): void {\n this.callbacks = [];\n }\n}","export namespace Camera {\n export enum EFrustum {\n Perspective,\n Orthographic\n }\n}","/**\n * Describes 2d and 3d coordinates.\n * \n * In 2d the x/y typically refers to a window left/top offset.\n * In 3d the x/y/z, the units are in meters.\n */\nexport namespace Cartes {\n export interface ICartes2 {\n x: number;\n y: number;\n }\n\n export interface ICartes3 extends ICartes2 {\n z: number;\n }\n\n export function ValidateCartes2(cartes: ICartes2): boolean {\n if (!cartes) {\n return false;\n }\n else if (!cartes.x && cartes.x != 0) {\n return false;\n }\n else if (!cartes.y && cartes.y != 0) {\n return false;\n }\n return true;\n }\n\n export function ValidateCartes3(cartes: ICartes3): boolean {\n if (!ValidateCartes2(cartes)) {\n return false;\n }\n else if (!cartes.z && cartes.z != 0) {\n return false;\n }\n return true;\n }\n\n export function IsEqualCartes2(a: ICartes2, b: ICartes2): boolean {\n if (a.x != b.x) {\n return false;\n }\n else if (a.y != b.y) {\n return false;\n }\n return true;\n }\n\n export function IsEqualCartes3(a: ICartes3, b: ICartes3): boolean {\n if (!IsEqualCartes2(a, b)) {\n return false;\n }\n else if (a.z != b.z) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the given ring is closed.\n * A ring is closed if the first and last point are equal.\n * A ring with less than 2 points is not closed.\n * @param points \n * @returns \n */\n export function IsRing2Closed(points: ICartes2[]) {\n if (points.length < 2) {\n return false;\n }\n else if (!IsEqualCartes2(points[0], points[points.length - 1])) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the given ring is closed.\n * A ring is closed if the first and last point are equal.\n * A ring with less than 2 points is not closed.\n * @param points \n * @returns \n */\n export function IsRing3Closed(points: ICartes3[]) {\n if (points.length < 2) {\n return false;\n }\n else if (!IsEqualCartes3(points[0], points[points.length - 1])) {\n return false;\n }\n return true;\n }\n\n /**\n * Closes given ring by adding the first point to the end of the array.\n * This will mutate the given array.\n * Will not do anything if the ring is already closed.\n * @param points \n * @returns \n */\n export function CloseRing2(points: ICartes2[]) {\n if (points.length < 2) {\n return;\n }\n else if (IsRing2Closed(points)) {\n return;\n }\n points.push(points[0]);\n }\n\n /**\n * Closes given ring by adding the first point to the end of the array.\n * This will mutate the given array.\n * Will not do anything if the ring is already closed.\n * @param points \n * @returns \n */\n export function CloseRing3(points: ICartes3[]) {\n if (points.length < 2) {\n return;\n }\n else if (IsRing3Closed(points)) {\n return;\n }\n points.push(points[0]);\n }\n}","/**\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}","/**\n * Controls the flow of method calls.\n * If you have a method that may be called often, but you don't want it to run often, use this.\n */\nexport class DelayQueue {\n // The callback is the method we want to control queue for.\n private callback: () => void;\n\n // Millisecond delay.\n public delay: number = 200;\n\n // Date-time stamp for the last callback call.\n private lastCallTime: number = <any>null;\n\n // The delay timeout for calling update.\n private delayTimeout: any;\n\n\n constructor(callback: () => void, delay: number = 200) {\n this.callback = callback;\n this.delay = delay;\n }\n\n public Call(force: boolean = false): void {\n if (this.lastCallTime == null) {\n force = true;\n }\n if (force) {\n let endDate = new Date().getTime();\n this.doCall(endDate);\n }\n else {\n const endDate = new Date().getTime();\n const seconds = (endDate - this.lastCallTime) / 1000;\n const delay = this.delay / 1000;\n if (seconds > delay) {\n this.doCall(endDate);\n }\n else if (this.delayTimeout == null) {\n const diff = (delay - seconds) * 1000;\n this.delayTimeout = setTimeout(() => {\n this.delayTimeout = null;\n this.Call();\n }, diff + 0.02);\n }\n }\n }\n\n private doCall(endDate: number): void {\n if (this.delayTimeout != null) {\n clearTimeout(this.delayTimeout);\n this.delayTimeout = null;\n }\n this.lastCallTime = endDate;\n this.callback();\n }\n\n public Dispose(): void {\n if (this.delayTimeout != null) {\n clearTimeout(this.delayTimeout);\n this.delayTimeout = null;\n }\n }\n}","/**\n * Describes a Bruce stored date.\n */\nexport namespace UTC {\n export enum EMonth {\n January = 1,\n February = 2,\n March = 3,\n April = 4,\n May = 5,\n June = 6,\n July = 7,\n August = 8,\n September = 9,\n October = 10,\n November = 11,\n December = 12\n }\n\n export interface IUTC {\n d: number;\n hh: number;\n m: EMonth | number;\n mm: number;\n ss: number;\n y: number;\n }\n\n export function ToDate(utc: IUTC): Date {\n return new Date(utc.y, utc.m - 1, utc.d, utc.hh, utc.mm, utc.ss, 0);\n }\n\n export function FromDate(date: Date): IUTC {\n return {\n y: date.getUTCFullYear(),\n m: date.getUTCMonth() + 1,\n d: date.getUTCDate(),\n hh: date.getUTCHours(),\n mm: date.getUTCMinutes(),\n ss: date.getUTCSeconds()\n };\n }\n}","export class LRUCache<TKey, TValue> {\r\n private readonly capacity: number;\r\n private readonly cache: Map<TKey, TValue>;\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity;\r\n this.cache = new Map<TKey, TValue>();\r\n }\r\n\r\n public Get(key: TKey): TValue | undefined {\r\n const value = this.cache.get(key);\r\n if (value) {\r\n this.cache.delete(key);\r\n this.cache.set(key, value);\r\n }\r\n return value;\r\n }\r\n\r\n public Set(key: TKey, value: TValue): void {\r\n if (this.cache.size >= this.capacity) {\r\n const leastRecentlyUsedKey = this.cache.keys().next().value;\r\n this.cache.delete(leastRecentlyUsedKey);\r\n }\r\n this.cache.set(key, value);\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(params: {\r\n api: BruceApi.Api,\r\n attachmentTypeId: Type,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, attachmentTypeId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entityAttachmentType/${id}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n attachmentType: IType,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n attachmentType: IType\r\n }> {\r\n const { api, attachmentType: data, req: reqParams } = params;\r\n if (!data?.ID) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const res = await api.POST(`entityAttachmentType/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n attachmentType: res\r\n };\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n reqParams?: Api.IReqParams\r\n }): Promise<{\r\n attachmentTypes: IType[]\r\n }> {\r\n const { api, reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityAttachmentTypes`, Api.PrepReqParams(reqParams));\r\n res({\r\n attachmentTypes: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\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(id: number): string {\r\n return Api.ECacheKey.Attachment + Api.ECacheKey.Id + id;\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 ID: number;\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(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n attachments: IAttachment[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n attachments: IAttachment[]\r\n }> {\r\n const { api, attachments, req, entityId } = params;\r\n if (!attachments?.length) {\r\n return {\r\n attachments: []\r\n };\r\n }\r\n const res = await api.POST(`entity/${entityId}/attachments`, {\r\n attachments\r\n }, Api.PrepReqParams(req));\r\n for (let i = 0; i < attachments.length; i++) {\r\n if (attachments[i].ID) {\r\n api.Cache.Remove(GetCacheKey(attachments[i].ID));\r\n }\r\n }\r\n api.Cache.Remove(GetListCacheKey(entityId));\r\n return {\r\n attachments: res.attachments\r\n };\r\n }\r\n\r\n export async function UpdateOrder(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n attachmentTypeId: Type,\r\n attachments: IAttachment[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityId, attachmentTypeId: typeId, attachments, req: reqParams } = params;\r\n if (!entityId || !typeId || !attachments?.length) {\r\n throw(\"Entity ID, Type ID, and Attachments are required.\");\r\n }\r\n const reqData = {\r\n \t\"DisplayOrder.Start\": 0,\r\n \t\"ClientFile.ID\": attachments.map(x => x[\"ClientFile.ID\"])\r\n };\r\n await api.POST(`entity/${entityId}/attachments/${typeId}/setOrder`, reqData, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < attachments.length; i++) {\r\n api.Cache.Remove(GetCacheKey(attachments[i].ID));\r\n }\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n attachmentId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, attachmentId, entityId, req } = params;\r\n if (!attachmentId || !entityId) {\r\n throw(\"Entity id and attachment id.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/attachments/${attachmentId}`, Api.PrepReqParams(req));\r\n api.Cache.Remove(GetCacheKey(attachmentId));\r\n }\r\n\r\n export async function GetListByEntityId(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n attachments: IAttachment[]\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/attachments`, Api.PrepReqParams(reqParams));\r\n res({\r\n attachments: (data.attachments ? data.attachments : data.Items)\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Upload(params: {\r\n api: BruceApi.Api,\r\n file: Blob,\r\n entityId: string,\r\n attachmentTypeId: Type,\r\n req?: Api.IUploadReqParams\r\n }): Promise<{\r\n attachment: IAttachment\r\n }> {\r\n const { api, file, entityId, attachmentTypeId: typeId, req: reqParams } = params;\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 res = await api.UPLOAD(url, file, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetListCacheKey(entityId));\r\n return {\r\n attachment: res\r\n };\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(params: {\r\n api: BruceApi.Api,\r\n comment: IComment,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n comment: IComment\r\n }> {\r\n const { api, comment: data, req: reqParams } = params;\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 const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\r\n return {\r\n comment: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n commentId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityId, commentId, req: reqParams } = params;\r\n if (!commentId) {\r\n throw(\"Comment ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/comment/${commentId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(commentId));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\r\n }\r\n\r\n export async function GetListByEntityId(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n comments: IComment[]\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/comments`, Api.PrepReqParams(reqParams));\r\n res({\r\n comments: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityId),\r\n value: req,\r\n req: reqParams\r\n });\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(params: {\r\n api: BruceApi.Api,\r\n link: ILink,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n link: ILink\r\n }> {\r\n const { api, link: data, req: reqParams } = params;\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 const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(<number>data.ID));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\r\n return {\r\n link: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n linkId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityId, linkId, req: reqParams } = params;\r\n if (!linkId) {\r\n throw(\"Link ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/link/${linkId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(linkId));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\r\n }\r\n\r\n export async function GetListByEntityId(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n links: ILink[]\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/links`, Api.PrepReqParams(reqParams));\r\n res({\r\n links: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityId),\r\n value: req,\r\n req: reqParams\r\n });\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 function GetEntityListKey(entityId: string): string {\r\n return Api.ECacheKey.Lod + Api.ECacheKey.Entity + entityId;\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 interface IEntityLodUpdate {\r\n \"ClientFile.ID\": string;\r\n \"LODCategory.Key\": string;\r\n Level: number;\r\n }\r\n\r\n export function GetUrl(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n categoryId: string,\r\n level: number,\r\n strict?: boolean\r\n }): {\r\n url: string\r\n } {\r\n let { api, entityId, categoryId, level, strict } = params;\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 {\r\n url: url\r\n };\r\n }\r\n\r\n export async function GetUrlFileId(params: {\r\n api: BruceApi.Api,\r\n url: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n clientFileId: string\r\n }> {\r\n const { api, url, req: reqParams } = params;\r\n if (!url) {\r\n throw(\"Url is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(url), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const record: ILod = await api.get(url, Api.PrepReqParams(reqParams));\r\n res({\r\n clientFileId: record[\"ClientFile.ID\"]\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(url),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function GetLods(params: {\r\n api: BruceApi.Api,\r\n filter: Filter.IListParams,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n lods: Filter.IListResItem[]\r\n }> {\r\n const { api, filter, req: reqParams } = params;\r\n if (!filter?.Items?.length) {\r\n throw(\"Items are required.\");\r\n }\r\n const data = await api.POST(\"entity/getlods\", filter, reqParams);\r\n return {\r\n lods: data.Items\r\n };\r\n }\r\n\r\n export async function GetEntityLods(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n lods: ILod[]\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity id is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetEntityListKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entity/${entityId}/lods?includeClientFiles=yes`, Api.PrepReqParams(reqParams));\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n lods: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetEntityListKey(entityId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * Returns lods for a specified entity type.\r\n * @param params\r\n */\r\n export async function GetTypeLods(params: {\r\n api: BruceApi.Api,\r\n entityTypeId: string,\r\n group?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n lods: ILod[]\r\n }> {\r\n let { api, entityTypeId: typeId, group, req: reqParams } = params;\r\n if (!group) {\r\n group = \"DEFAULT\";\r\n }\r\n const cacheData = await api.GetCacheItem(GetTypeListKey(typeId, group), reqParams);\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(reqParams));\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n lods: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetTypeListKey(typeId, group),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n } & IEntityLodUpdate): Promise<void> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!params[\"ClientFile.ID\"] || !params[\"LODCategory.Key\"] || (!params.Level && params.Level !== 0)) {\r\n throw(\"ClientFile.ID, LODCategory.Key and Level are required.\");\r\n }\r\n const res = await api.POST(`entity/${entityId}/lod/${params[\"LODCategory.Key\"]}/${params.Level}`, {\r\n \"Level\": params.Level,\r\n \"ClientFile.ID\": params[\"ClientFile.ID\"]\r\n }, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetEntityListKey(entityId));\r\n return res;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n lodCategoryId: string,\r\n level: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, entityId, lodCategoryId, level, req: reqParams } = params;\r\n if (!entityId || !lodCategoryId) {\r\n throw(\"Entity ID and LOD Category ID are required.\");\r\n }\r\n level = +level;\r\n if (isNaN(level)) {\r\n throw(\"Level is required. It must be a number.\");\r\n }\r\n await api.POST(`entity/${entityId}/deleteLODs`, {\r\n Items: [{ \"LODCategory.Key\": lodCategoryId, \"Level\": level }]\r\n }, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetEntityListKey(entityId));\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\n\r\nexport namespace EntityLodCategory {\r\n export function GetCacheKey(id: string): string {\r\n return Api.ECacheKey.LodCategory + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.LodCategory;\r\n }\r\n\r\n export interface ICategory {\r\n Description?: string;\r\n Key: string;\r\n Name: string;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n categories: ICategory[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheKey = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheKey) {\r\n return cacheKey;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"lodCategories\", Api.PrepReqParams(reqParams));\r\n res({\r\n categories: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n categoryId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n category: ICategory\r\n }> {\r\n const { api, categoryId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Lod category id is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`lodCategory/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n category: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n categoryId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, categoryId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Lod category id is required.\");\r\n }\r\n await api.DELETE(`lodCategory/${id}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n category: ICategory,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n category: ICategory\r\n }> {\r\n const { api, category: data, req: reqParams } = params;\r\n if (!data.Key || !data.Name) {\r\n throw(\"Lod category key and name are required.\");\r\n }\r\n const res = await api.POST(`lodCategory/${data.Key}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.Key));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n category: res\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(params: {\r\n api: BruceApi.Api,\r\n relationTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relationType: IType\r\n }> {\r\n const { api, relationTypeId: typeId, req: reqParams } = params;\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const key = GetCacheKey(typeId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityRelationType/${typeId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n relationType: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n relationTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, relationTypeId: typeId, req: reqParams } = params;\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entityRelationType/${typeId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(typeId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relationTypes: IType[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"entityRelationTypes\", Api.PrepReqParams(reqParams));\r\n res({\r\n relationTypes: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n relationType: IType,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relationType: IType\r\n }> {\r\n const { api, relationType: data, req: reqParams } = params;\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 const res = await api.POST(`entityRelationType/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n relationType: res\r\n };\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.relationTypeId +\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 relationTypeId?: string;\r\n oneWayOnly?: boolean;\r\n loadEntityData?: boolean;\r\n }\r\n\r\n export async function Create(params: {\r\n api: BruceApi.Api,\r\n relation: IRelation,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, relation: data, req: reqParams } = params;\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(reqParams));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\r\n await 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 await 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 Delete(params: {\r\n api: BruceApi.Api,\r\n principalEntityId: string,\r\n relatedEntityId: string,\r\n relationTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, principalEntityId, relatedEntityId, relationTypeId, req: reqParams } = params;\r\n if (!principalEntityId || !relatedEntityId || !relationTypeId) {\r\n throw new Error(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\r\n }\r\n const url = `entity/${principalEntityId}/relation/${relationTypeId}/delete`;\r\n await api.POST(url, {\r\n \"Related.Entity.ID\": [relatedEntityId]\r\n }, Api.PrepReqParams(reqParams));\r\n\r\n // Remove related cache entries\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + principalEntityId);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + relatedEntityId);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + relationTypeId);\r\n }\r\n\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n relation: IRelation,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, relation: data, req: reqParams } = params;\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 const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\r\n await 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 await 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 GetList(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n filter: IListParams,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relations: IRelation[]\r\n }> {\r\n let { api, entityId, filter, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n filter = {\r\n relationTypeId: \"\",\r\n oneWayOnly: false,\r\n loadEntityData: false,\r\n ...filter\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityId, filter), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n let url = `entity/${entityId}/relations`;\r\n if (filter.relationTypeId) {\r\n url += \"/\" + filter.relationTypeId;\r\n }\r\n url += `?Oneway=${filter.oneWayOnly}&LoadInfo=${filter.loadEntityData}`;\r\n const data = await api.GET(url, Api.PrepReqParams(reqParams));\r\n res({\r\n relations: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityId, filter),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function GetByDataEntityId(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relation: IRelation\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetEntityCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/relation/${entityId}/dataentity`, Api.PrepReqParams(reqParams));\r\n res({\r\n relation: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetEntityCacheKey(entityId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\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(params: {\r\n api: BruceApi.Api,\r\n sourceId: number,\r\n sourceKey: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n source: ISource\r\n }> {\r\n const { api, sourceId, sourceKey, req: reqParams } = params;\r\n if (!sourceId || !sourceKey) {\r\n throw(\"Source ID and Source Key are required.\");\r\n }\r\n const res = await GetListByKeys({\r\n api: api,\r\n sourceId: sourceId,\r\n sourceKeys: [sourceKey],\r\n req: reqParams\r\n })\r\n return {\r\n source: res.sources?.length ? res.sources[0] : null\r\n };\r\n }\r\n\r\n export async function GetListByKeys(params: {\r\n api: BruceApi.Api,\r\n sourceId: number,\r\n sourceKeys: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n sources: ISource[]\r\n }> {\r\n const { api, sourceId, sourceKeys, req: reqParams } = params;\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 = await api.GetCacheItem(GetCacheKey(sourceId, sourceKey), reqParams);\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(reqParams));\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 {\r\n sources: (await Promise.all(reqs)).filter(x => !!x)\r\n };\r\n }\r\n\r\n export async function GetEntityIdsBySourceKeys(params: {\r\n api: BruceApi.Api,\r\n sourceId: number,\r\n sourceKeys: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n // Source key to entity id mapping.\r\n idMapping: IDictionary<string>\r\n }> {\r\n const { api, sourceId, sourceKeys, req: reqParams } = params;\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({\r\n api,\r\n sourceId,\r\n sourceKeys,\r\n req: reqParams\r\n });\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 {\r\n idMapping: result\r\n };\r\n }\r\n\r\n export async function CreateLink(params: {\r\n api: BruceApi.Api\r\n source: ISource\r\n }): Promise<{\r\n source: ISource\r\n }> {\r\n const {source} = params;\r\n if (!source[\"Entity.ID\"] || !source[\"Source.ID\"] || !source[\"SourceRecord.Key\"]) {\r\n throw(\"Entity ID, Source ID and Source Key are required.\");\r\n }\r\n const res = await params.api.POST(\"entitysource\", source);\r\n const cacheKey = GetCacheKey(source[\"Source.ID\"], source[\"SourceRecord.Key\"]);\r\n await params.api.Cache.Remove(cacheKey);\r\n return {\r\n source: res\r\n }\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 \"Parent.Layer.ID\"?: number;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n tagId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tag: ITag\r\n }> {\r\n const { api, tagId, req: reqParams } = params;\r\n if (!tagId) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n const {tags} = await GetListByIds({\r\n api,\r\n tagIds: [tagId],\r\n req: reqParams\r\n });\r\n return {\r\n tag: tags.length ? tags[0] : null\r\n };\r\n }\r\n\r\n export async function GetListByIds(params: {\r\n api: BruceApi.Api,\r\n tagIds: number[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tags: ITag[]\r\n }> {\r\n const { api, tagIds, req: reqParams } = params;\r\n if (!tagIds.length) {\r\n throw(\"Tag Ids are empty.\");\r\n }\r\n const reqIds: number[] = [];\r\n const reqs: Promise<{ tag: ITag }>[] = [];\r\n for (let i = 0; i < tagIds.length; i++) {\r\n const tagId = tagIds[i];\r\n const cacheData = await api.GetCacheItem(GetCacheKey(tagId), reqParams);\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(reqParams));\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<{ tag: 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({\r\n tag: tag\r\n });\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: req,\r\n req: reqParams\r\n });\r\n reqs.push(req);\r\n }\r\n }\r\n return {\r\n tags: (await Promise.all(reqs)).map(x => x?.tag).filter(x => !!x)\r\n };\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n entityTypeId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tags: ITag[]\r\n }> {\r\n const { api, entityTypeId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityTypeId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(entityTypeId ? `entityType/${entityTypeId}/layers` : \"layers\", Api.PrepReqParams(reqParams));\r\n res({\r\n tags: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityTypeId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n tagId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tagId, req: reqParams } = params;\r\n if (!tagId) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n await api.DELETE(`layer/${tagId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(tagId));\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n tag: ITag,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tag: ITag\r\n }> {\r\n const { api, tag: data, req: reqParams } = params;\r\n const url = data.ID ? `layer/${data.ID}` : \"layer\";\r\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey());\r\n return {\r\n tag: res\r\n };\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { Entity } from \"./entity\";\r\nimport { EntityAttribute } from \"./entity-attribute\";\r\nimport { EntityTypeVisualSettings } from \"./entity-type-visual-settings\";\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?: Entity.IEntity;\r\n DataSchema?: {\r\n Key: \"root\",\r\n Name?: \"Root\",\r\n Structure: EntityAttribute.IAttribute[],\r\n Type: EntityAttribute.EType.Structure\r\n };\r\n DisplayNameAttributePath?: string;\r\n IsStrictSchema?: boolean;\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 VisualSettings?: EntityTypeVisualSettings.ISettings;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n entityTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entityType: IEntityType\r\n }> {\r\n const { api, entityTypeId: typeId, req: reqParams } = params;\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const key = GetCacheKey(typeId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entitytype/${typeId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n entityType: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityTypeId: typeId, req: reqParams } = params;\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entitytype/${typeId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(typeId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entityTypes: IEntityType[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"entitytypes\", Api.PrepReqParams(reqParams));\r\n res({\r\n entityTypes: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams,\r\n duration: 60 * 5 // 5 minutes.\r\n });\r\n return req;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n entityType: IEntityType,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entityType: IEntityType\r\n }> {\r\n let { api, entityType: data, req: reqParams } = params;\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 const res = await api.POST(`entitytype/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(<string>data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n entityType: res\r\n };\r\n }\r\n}","import { Bounds } from \"../../common/bounds\";\r\nimport { Carto } from \"../../common/carto\";\r\nimport { IDictionary } from \"../../common/dictionary\";\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 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 public Fetching: boolean = false;\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\n export class Grid {\r\n private cells: IDictionary<Cell> = {};\r\n\r\n public GetCellsForView(cameraPos: Carto.ICarto, 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 let centerX = cameraPos?.longitude;\r\n let centerY = cameraPos?.latitude;\r\n if (isNaN(centerX) || isNaN(centerY)) {\r\n centerX = (minLon + maxLon) / 2;\r\n centerY = (minLat + maxLat) / 2;\r\n }\r\n\r\n const width = Math.ceil((maxLon - curMinLon) / cellDegreeSize);\r\n const height = Math.ceil((maxLat - curMinLat) / cellDegreeSize);\r\n\r\n const cellDistances: { x: number, y: number, dist: number }[] = [];\r\n\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 cellCenterX = lon + cellDegreeSize / 2;\r\n const cellCenterY = lat + cellDegreeSize / 2;\r\n const dist = Math.sqrt(Math.pow(cellCenterX - centerX, 2) + Math.pow(cellCenterY - centerY, 2));\r\n cellDistances.push({ x, y, dist });\r\n }\r\n }\r\n\r\n cellDistances.sort((a, b) => a.dist - b.dist);\r\n\r\n for (const { x, y } of cellDistances) {\r\n const lon = x * cellDegreeSize + curMinLon;\r\n const lat = y * cellDegreeSize + curMinLat;\r\n const [id, 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}\r\n\r\nfunction intersects(l: Bounds.IReqBounds, r: Bounds.IReqBounds): boolean {\r\n const { west: w, south: s, north: n, east: e } = l;\r\n const { west: wr, south: sr, north: nr, east: er } = r;\r\n return !(e <= wr || w >= er || n <= sr || s >= nr);\r\n}\r\n\r\nfunction contains(l: Bounds.IReqBounds, r: Bounds.IReqBounds): boolean {\r\n const { west: w, south: s, north: n, east: e } = l;\r\n const { west: wr, south: sr, north: nr, east: er } = r;\r\n return !(er < e || wr > w || nr > n || sr < s);\r\n}\r\n\r\nfunction crop(rect: Bounds.IReqBounds, by: Bounds.IReqBounds): Bounds.IReqBounds {\r\n let { west: w, south: s, north: n, east: e } = rect;\r\n const { west: wc, south: sc, north: nc, east: ec } = by;\r\n w = Math.max(w, ec);\r\n e = Math.min(e, wc);\r\n s = Math.max(s, nc);\r\n n = Math.min(n, sc);\r\n return { west: w, south: s, north: n, east: e };\r\n}\r\n\r\nfunction intersection(l: Bounds.IReqBounds, r: Bounds.IReqBounds): number {\r\n const { west: w, south: s, north: n, east: e } = l;\r\n const { west: wr, south: sr, north: nr, east: er } = r;\r\n const x = Math.min(e, er) - Math.max(w, wr);\r\n const y = Math.min(n, nr) - Math.max(s, sr);\r\n return (x > 0 && y > 0) ? x * y : 0;\r\n}\r\n\r\nfunction area(rect: Bounds.IReqBounds): number {\r\n let { west: w, south: s, north: n, east: e } = rect;\r\n return Math.abs((e - w) * (n - s));\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 isCellFetched(cell: EntityGlobe.Cell): boolean {\r\n if (cell.Fetched) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction getOrCreateCell(cells: IDictionary<EntityGlobe.Cell>, cellSize: number, lon: number, maxLon: number, lat: number, maxLat: number): [string, EntityGlobe.Cell] {\r\n const id = cellSize + \"_\" + lon + \"_\" + maxLon + \"_\" + lat + \"_\" + maxLat;\r\n let cell = cells[id];\r\n if (!cell) {\r\n cell = cells[id] = new EntityGlobe.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\r\n return [id, cell];\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 onScanUpdate: BruceEvent<EntityGlobe.Cell[]> = <any>null;\r\n public get OnScanUpdate(): BruceEvent<EntityGlobe.Cell[]> {\r\n if (!this.onScanUpdate) {\r\n this.onScanUpdate = new BruceEvent<EntityGlobe.Cell[]>();\r\n }\r\n return this.onScanUpdate;\r\n }\r\n\r\n private api: BruceApi.Api;\r\n private viewPort: ViewMonitor.IMonitor;\r\n private viewPortChangeRemoval: () => void = <any>null;\r\n private cells: EntityGlobe.Grid = <any>null;\r\n private registeredItems: IDictionary<regMenuItemGetter> = {};\r\n private getterLoopId: number = 0;\r\n\r\n private viaCdn: boolean;\r\n private typeId: string;\r\n private batchSize: number;\r\n private tagIds: number[] = <any>null;\r\n private minHeight = 0;\r\n private maxHeight = 100000;\r\n private attrFilter: IDictionary<any>;\r\n private viewRect: Bounds.IReqBounds = <any>null;\r\n private viewCenter: Carto.ICarto = <any>null;\r\n\r\n constructor(\r\n api: BruceApi.Api,\r\n viewPort: ViewMonitor.IMonitor,\r\n typeId: string,\r\n batchSize?: number,\r\n attrFilter?: IDictionary<any>,\r\n viaCdn?: boolean\r\n ) {\r\n this.api = api;\r\n this.typeId = typeId;\r\n this.viaCdn = Boolean(viaCdn);\r\n this.batchSize = isNaN(batchSize) ? 300 : batchSize;\r\n this.viewPort = viewPort;\r\n this.attrFilter = attrFilter;\r\n this.updateBounds();\r\n }\r\n\r\n /**\r\n * Returns id that represents the combined menu item parameters.\r\n * If integrity changes while a request is running, the request will not emit a response.\r\n * @returns\r\n */\r\n private getIntegrityId() {\r\n return this.tagIds == null ? \"\" : this.tagIds.join();\r\n }\r\n\r\n private viewAreaSub(): void {\r\n this.viewAreaDispose();\r\n this.viewPortChangeRemoval = this.viewPort.Updated().Subscribe(() => {\r\n this.updateBounds();\r\n this.startGetterLoop();\r\n });\r\n }\r\n\r\n private viewAreaDispose(): void {\r\n this.viewPortChangeRemoval?.();\r\n }\r\n\r\n public GetMenuItems(): string[] {\r\n return Object.keys(this.registeredItems);\r\n }\r\n\r\n public IncludeMenuItem(menuItemId: string, layerIds: number[], minHeight: number, maxHeight: number): void {\r\n this.registeredItems[menuItemId] = new regMenuItemGetter(layerIds, minHeight, maxHeight);\r\n this.updateState();\r\n }\r\n\r\n public ExcludeMenuItem(menuItemId: string): void {\r\n this.registeredItems[menuItemId] = <any>null;\r\n delete this.registeredItems[menuItemId];\r\n this.updateState();\r\n }\r\n\r\n private updateBounds(): void {\r\n const viewRect = this.viewPort.GetBounds();\r\n const poi = this.viewPort.GetTarget();\r\n if (viewRect && poi) {\r\n if (Math.abs(viewRect.west - viewRect.east) > MAX_AREA_IN_DEGREES) {\r\n return;\r\n }\r\n if (Math.abs(viewRect.south - viewRect.north) > MAX_AREA_IN_DEGREES) {\r\n return;\r\n }\r\n this.viewRect = viewRect;\r\n this.viewCenter = poi;\r\n }\r\n }\r\n\r\n private updateState(): void {\r\n const tagIds: number[] = [];\r\n const menuItemIds = this.GetMenuItems();\r\n let minHeight = null;\r\n let maxHeight = null;\r\n for (let i = 0; i < menuItemIds.length; i++) {\r\n const menuItem = this.registeredItems[menuItemIds[i]];\r\n if (menuItem) {\r\n if (maxHeight == null || maxHeight < menuItem.MaxHeight) {\r\n maxHeight = menuItem.MaxHeight;\r\n }\r\n if (minHeight == null || minHeight > menuItem.MinHeight) {\r\n minHeight = menuItem.MinHeight;\r\n }\r\n\r\n const itemLayerIds = menuItem.TagIds;\r\n if (itemLayerIds) {\r\n for (let j = 0; j < itemLayerIds.length; j++) {\r\n const itemLayerId = itemLayerIds[j];\r\n if (!tagIds.includes(itemLayerId)) {\r\n tagIds.push(itemLayerId);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (menuItemIds.length > 0) {\r\n // Reset cells so none are marked as fetched.\r\n this.cells = new EntityGlobe.Grid();\r\n this.tagIds = tagIds;\r\n this.minHeight = <number>minHeight;\r\n this.maxHeight = <number>maxHeight;\r\n this.updateBounds();\r\n this.startGetterLoop();\r\n this.viewAreaSub();\r\n }\r\n else {\r\n this.getterLoopId += 1;\r\n this.viewAreaDispose();\r\n }\r\n }\r\n\r\n private postStatus(status: IStatusUpdate): void {\r\n this.LastStateUpdates[status.msg] = status;\r\n this.onStateUpdate?.Trigger(status);\r\n }\r\n\r\n private startGetterLoop(): void {\r\n // Increase id so that existing loops stop.\r\n this.getterLoopId += 1;\r\n const loopId = this.getterLoopId;\r\n const loopIntegrity = this.getIntegrityId();\r\n\r\n new Promise(async () => {\r\n // Minor delay to stop 50 menu items enabling doing their first request all together.\r\n // This gives it time to recognize only 1 request is needed.\r\n // Would be better to not use this delay but we're on a clock.\r\n await delay(100);\r\n\r\n const MIN_HEIGHT = this.minHeight;\r\n const MAX_HEIGHT = this.maxHeight;\r\n const PAGE_SIZE = this.batchSize;\r\n let retryAttempts = MAX_RETRY_ATTEMPTS;\r\n let retryDelay = 0;\r\n let prevFirstId: string = \"\";\r\n let prevLastId: string = \"\";\r\n let prevTicks = 0;\r\n\r\n while ((!this.viewCenter || !this.viewRect) && this.getterLoopId == loopId) {\r\n await delay(RETRY_DELAY_INCREMENT);\r\n }\r\n if (this.getterLoopId != loopId) {\r\n return;\r\n }\r\n const alt = <number>this.viewRect.alt;\r\n if (alt > MAX_HEIGHT || (alt < MIN_HEIGHT && MIN_HEIGHT > 0)) {\r\n return;\r\n }\r\n\r\n const cells = this.cells.GetCellsForView(this.viewCenter, this.viewRect);\r\n this.onScanUpdate?.Trigger(cells);\r\n let curCellIndex = cells.length > 0 ? 0 : null;\r\n\r\n let postedScanning = false;\r\n let postedLoading = false;\r\n\r\n let total = 0\r\n while (retryAttempts > 0 && curCellIndex != null) {\r\n if (retryDelay > 0) {\r\n await delay(retryDelay);\r\n }\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n\r\n if (!postedScanning) {\r\n this.postStatus({ msg: EStatus.Scanning, revoking: false });\r\n postedScanning = true;\r\n }\r\n\r\n const curCell = cells[curCellIndex];\r\n if (curCell.IsFetched()) {\r\n curCell.Fetching = false;\r\n curCellIndex += 1;\r\n if (cells[curCellIndex]) {\r\n cells[curCellIndex].Fetching = true;\r\n }\r\n else {\r\n curCellIndex = null;\r\n }\r\n this.onScanUpdate?.Trigger(cells);\r\n continue;\r\n }\r\n\r\n try {\r\n let {entities} = await Entity.GetList({\r\n api: this.api,\r\n filter: {\r\n pageSize: PAGE_SIZE,\r\n pageIndex : curCell.FetchPageIndex,\r\n entityTypeId: this.typeId,\r\n layerIds: this.tagIds,\r\n bounds: curCell.GetBounds(),\r\n sortOrder: Api.ESortOrder.Asc,\r\n entityTypeConditions: this.attrFilter\r\n },\r\n viaCdn: this.viaCdn,\r\n req: {\r\n noCache: true\r\n }\r\n });\r\n\r\n const integrity = this.getIntegrityId();\r\n if (loopIntegrity == integrity && entities) {\r\n this.onUpdate?.Trigger(entities);\r\n }\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n if (entities.length) {\r\n total += entities.length;\r\n }\r\n if (!postedLoading) {\r\n this.postStatus({ msg: EStatus.Loading, revoking: false });\r\n postedLoading = true;\r\n }\r\n\r\n // Only mark as fetched when ALL pages are done.\r\n if (entities.length <= 0 ) {\r\n curCell.Fetched = true;\r\n curCell.Fetching = false;\r\n this.onScanUpdate?.Trigger(cells);\r\n continue;\r\n }\r\n\r\n // Checking to make sure it's not just the same batch over and over again.\r\n if (entities.length > 0) {\r\n const first = entities[0]?.Bruce?.ID;\r\n const last = entities[entities.length - 1]?.Bruce?.ID;\r\n if (prevFirstId == first && prevLastId == last) {\r\n prevTicks += 1;\r\n if (prevTicks > 3) {\r\n break;\r\n }\r\n }\r\n else {\r\n prevFirstId = first;\r\n prevLastId = last;\r\n prevTicks = 0;\r\n }\r\n }\r\n curCell.FetchPageIndex++;\r\n\r\n // Request passed so let's assume it was server hiccup and refresh counts.\r\n retryAttempts = MAX_RETRY_ATTEMPTS;\r\n retryDelay = 0;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n\r\n // Request failed so let's add a delay and try again soon.\r\n retryDelay += RETRY_DELAY_INCREMENT;\r\n retryAttempts -= 1;\r\n }\r\n\r\n await delay(REQUEST_PAGE_DELAY);\r\n }\r\n\r\n if (postedLoading) {\r\n this.postStatus({ msg: EStatus.Loading, revoking: true });\r\n }\r\n if (postedScanning) {\r\n this.postStatus({ msg: EStatus.Scanning, revoking: true });\r\n }\r\n });\r\n }\r\n }\r\n}","import { Bounds } from \"../../common/bounds\";\nimport { BruceEvent } from \"../../common/bruce-event\";\nimport { Carto } from \"../../common/carto\";\nimport { ViewMonitor } from \"./view-monitor\";\n\nconst MAX_AREA_IN_DEGREES = 90;\nconst GETTER_DELAY = 50;\n\n/**\n * This is a batched \"arbitrary data\" getter.\n * You feed it an array of data, then it will emit that data in batches when the view changes.\n */\nexport namespace BatchedDataGetter {\n export class Getter<T> {\n private viewPort: ViewMonitor.IMonitor\n private viewPortRemoval: () => void = <any>null;\n \n private batchSize: number;\n private viewRect: Bounds.IReqBounds = <any>null;\n private viewCenter: Carto.ICarto = <any>null;\n private getterInterval: any;\n private data: T[];\n \n private onUpdate: BruceEvent<T[]> = <any>null;\n public get OnUpdate(): BruceEvent<T[]> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<T[]>();\n }\n return this.onUpdate;\n }\n \n \n public constructor(data: T[], viewPort: ViewMonitor.IMonitor, batchSize: number) {\n this.data = data;\n this.viewPort = viewPort;\n this.batchSize = batchSize;\n }\n\n public Start(): void {\n this.viewPortRemoval = this.viewPort.Updated().Subscribe(() => {\n this.updateViewport();\n });\n this.updateViewport();\n }\n\n public Dispose(): void {\n this.viewPortRemoval?.();\n }\n\n private updateViewport(): void {\n this.updateBounds();\n this.startGetterLoop();\n }\n \n private updateBounds(): void {\n const viewRect = this.viewPort.GetBounds();\n const poi = this.viewPort.GetTarget();\n if (viewRect && poi) {\n if (Math.abs(viewRect.west - viewRect.east) > MAX_AREA_IN_DEGREES) {\n return;\n }\n if (Math.abs(viewRect.south - viewRect.north) > MAX_AREA_IN_DEGREES) {\n return;\n }\n this.viewRect = viewRect;\n this.viewCenter = poi;\n }\n }\n \n private startGetterLoop(): void {\n clearInterval(this.getterInterval);\n if (!this.viewRect || !this.viewCenter) {\n return;\n }\n let index = 0;\n const onTick = (): boolean => {\n this.processBatch(this.data.slice(index, index + this.batchSize));\n index += this.batchSize;\n return index >= this.data.length;\n };\n if (!onTick()) {\n this.getterInterval = setInterval(() => {\n if (onTick()) {\n clearInterval(this.getterInterval);\n }\n }, GETTER_DELAY);\n }\n }\n \n private processBatch(batch: T[]): void {\n if (batch.length > 0) {\n this.onUpdate?.Trigger(batch);\n }\n }\n }\n}","export namespace MathUtils {\n /**\n * Rounds a number to a given number of decimal places.\n * @param num \n * @param decimals \n * @returns \n */\n export function Round(num: number, decimals: number = 0): number {\n if (decimals <= 0) {\n return Math.round(num);\n }\n let tmp = \"1\";\n for (let i = 0; i < decimals; i++) {\n tmp += \"0\";\n }\n const d = parseFloat(tmp);\n return Math.round((num + Number.EPSILON) * d) / d;\n }\n\n /**\n * Returns a random integer between min (inclusive) and max (inclusive).\n * @param min \n * @param max \n * @returns \n */\n export function RandInt(min: number, max: number): number {\n if (min == max) {\n return min;\n }\n else if (min > max) {\n throw(\"Min is greater than max.\");\n }\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Carto } from \"../common/carto\";\r\nimport { Transform } from \"../common/transform\";\r\nimport { MathUtils } from \"../util/math-utils\";\r\nimport { Entity } from \"./entity\";\r\n\r\nexport namespace EntityCoords {\r\n export const UCS_ENTITY_TYPE_ID = \"Bruce_UCS_Type\";\r\n\r\n export function GetCacheKey(entityId: string): string {\r\n return Api.ECacheKey.EntityCoords + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface IUcs {\r\n name: string;\r\n location: Carto.ICarto;\r\n \"Entity.ID\": string;\r\n transform: Transform.ITransform;\r\n }\r\n\r\n export interface IEntityCoords extends Entity.IEntity {\r\n ucs?: IUcs;\r\n }\r\n\r\n export interface IRelToPointParams {\r\n point: Carto.ICarto;\r\n test: boolean;\r\n name?: string;\r\n }\r\n\r\n export interface IRelToEpsgParams {\r\n epsg: number;\r\n test: boolean;\r\n name?: string;\r\n }\r\n\r\n export interface IRelToUcsParams {\r\n ucsId: string;\r\n test: boolean;\r\n name?: boolean;\r\n }\r\n\r\n export async function GetEntityCoords(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n coords: IEntityCoords\r\n }> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/ucs`, reqParams);\r\n res({\r\n coords: data\r\n });\r\n } catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(entityId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function EntityRelativeToPoint(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n } & IRelToPointParams): Promise<{\r\n coords: IEntityCoords\r\n }> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n if (!params.test) {\r\n await UnlinkCoords({\r\n api,\r\n rootEntityId: entityId,\r\n req: reqParams\r\n });\r\n }\r\n const point = params.point;\r\n const name = params.name || `${MathUtils.Round(point.latitude, 4)}, ${MathUtils.Round(point.longitude, 4)}`;\r\n const res = await api.POST(`entity/${entityId}/ucs`, {\r\n \"ucs\": {\r\n \"Entity.ID\": null,\r\n \"name\": name,\r\n \"location\": {\r\n \"latitude\": point.latitude,\r\n \"longitude\": point.longitude,\r\n \"altitude\": point.altitude,\r\n \"coordinates\": {\r\n \"Entity.ID\": entityId\r\n }\r\n }\r\n },\r\n \"test\": params.test\r\n }, reqParams);\r\n if (!params.test) {\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n return {\r\n coords: res\r\n };\r\n }\r\n\r\n export async function EntityRelativeToEpsg(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n } & IRelToEpsgParams): Promise<{\r\n coords: IEntityCoords\r\n }> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n if (!params.test) {\r\n await UnlinkCoords({\r\n api,\r\n rootEntityId: entityId,\r\n req: reqParams\r\n });\r\n }\r\n const epsg = params.epsg;\r\n const name = params.name ?? \"EPSG: \" + epsg;\r\n const res = await api.POST(`entity/${entityId}/ucs`, {\r\n \"ucs\": {\r\n \"Entity.ID\": null,\r\n \"name\": name,\r\n \"location\": {\r\n \"coordinates\": {\r\n \"SRID\": \"EPSG:\" + epsg,\r\n \"Entity.ID\": entityId\r\n }\r\n }\r\n },\r\n \"test\": params.test\r\n }, reqParams);\r\n if (!params.test) {\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n return {\r\n coords: res\r\n };\r\n }\r\n\r\n export async function EntityRelativeToUcs(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n } & IRelToUcsParams): Promise<{\r\n coords: IEntityCoords\r\n }> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n if (!params.test) {\r\n await UnlinkCoords({\r\n api,\r\n rootEntityId: entityId,\r\n req: reqParams\r\n });\r\n }\r\n const ucsId = params.ucsId;\r\n const res = await api.POST(`entity/${entityId}/ucs`, {\r\n \"ucs\": {\r\n \"Entity.ID\": ucsId\r\n },\r\n \"test\": params.test\r\n }, reqParams);\r\n if (!params.test) {\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n return {\r\n coords: res\r\n };\r\n }\r\n\r\n export async function UnlinkCoords(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n return api.DELETE(`entity/${entityId}/ucs`, reqParams);\r\n }\r\n}","export namespace EntityTypeVisualSettings {\r\n export enum EAction {\r\n LeftClick = \"LeftClick.CustomForm.ID\",\r\n RightClick = \"RightClick.CustomForm.ID\",\r\n DoubleClick = \"DoubleClick.CustomForm.ID\",\r\n MouseHover = \"MouseHover.CustomForm.ID\"\r\n }\r\n\r\n export interface ISettings {\r\n // Custom forms to display when a certain action is performed on related entities.\r\n // If the form is set to 0, that means use the default panel instead of a form.\r\n // When the form value is -1 that means don't display anything.\r\n CustomForms?: {\r\n // Default is 0.\r\n [EAction.LeftClick]?: number,\r\n // Default is -1.\r\n [EAction.RightClick]?: number,\r\n // Default is -1.\r\n [EAction.MouseHover]?: number,\r\n // Default is -1.\r\n [EAction.DoubleClick]?: number\r\n }\r\n }\r\n}","export namespace EntityAttribute {\r\n export enum EType {\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 Dictionary = \"Dictionary\",\r\n Boolean = \"Boolean\"\r\n }\r\n\r\n export interface IAttribute {\r\n Key: string;\r\n Name?: string;\r\n Type?: EType;\r\n Size?: number;\r\n IsIndexed?: boolean;\r\n IsArray?: boolean;\r\n IsImportant?: boolean;\r\n Description?: string;\r\n Metadata?: IMetadata;\r\n Structure?: IAttribute[];\r\n IsFamilyAttribute?: boolean;\r\n IsFamilyAttributeDefault?: boolean;\r\n Sources?: string[];\r\n }\r\n\r\n export interface IMetadata {\r\n Description?: string;\r\n Mandatory?: boolean;\r\n Dictionary?: IDictionary;\r\n }\r\n \r\n export interface IDictionary {\r\n UseAttribute?: boolean;\r\n EntityTypeID?: string;\r\n SourceAttributePath?: string;\r\n\r\n // exists so UI components don't break - depreciated. \r\n SourceAttribute?: IAttribute;\r\n }\r\n\r\n export function GetAttribute(items: IAttribute[], path: string[]): IAttribute {\r\n if (!items || !path || !path.length) {\r\n return null;\r\n }\r\n const key = path[0];\r\n const item = items.find((i) => i.Key === key);\r\n if (!item || !item.Structure || !path.length) {\r\n return item;\r\n }\r\n return GetAttribute(item.Structure, path.slice(1));\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\nexport namespace Uploader {\r\n export const MIN_LARGE_FILE_SIZE = 100000000; // 100MB.\r\n\r\n export interface IProgress {\r\n percent: number;\r\n uploaded: boolean;\r\n }\r\n\r\n export async function DoMultiPartUpload(params: {\r\n file: File,\r\n api: BruceApi.Api,\r\n urlSuffix: string,\r\n req?: Api.IUploadReqParams,\r\n onProgress?: (progress: IProgress) => void\r\n }) {\r\n const { file, api, urlSuffix: url, req, onProgress } = params;\r\n const FILE_PORTION_SIZE = 100000000; // 100MB.\r\n let fileSize = file.size;\r\n let fileOffset = 0;\r\n let filePartsCount = fileSize / FILE_PORTION_SIZE;\r\n let t = Math.trunc(filePartsCount);\r\n filePartsCount = filePartsCount > t ? t + 1 : t;\r\n let filePartIndex = 1;\r\n let uploadToken = ObjectUtils.UId();\r\n let data: any;\r\n while (fileOffset < fileSize) {\r\n let partSize = Math.min(FILE_PORTION_SIZE, fileSize - fileOffset);\r\n let retryCount: number = 5;\r\n let retryWait: number = 1000;\r\n while (retryCount > 0) {\r\n try {\r\n const blob = file.slice(fileOffset, fileOffset + partSize);\r\n const formData = new FormData();\r\n formData.append(\"originalFileName\", file.name);\r\n formData.append(\"token\", uploadToken);\r\n formData.append(\"count\", \"\" + filePartsCount);\r\n formData.append(\"part\", \"\" + filePartIndex);\r\n formData.append(\"file\", blob);\r\n const reqParams = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n reqParams.formData = formData;\r\n reqParams.onProgress = (progress: ProgressEvent) => {\r\n const sofar = fileOffset + progress.loaded;\r\n const percent = Math.round ((sofar / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n data = await api.UPLOAD(url, blob, reqParams)\r\n retryCount = 0;\r\n }\r\n catch (up) {\r\n retryCount -= 1;\r\n if (retryCount <= 0) {\r\n throw up;\r\n }\r\n await new Promise((res) => setTimeout(res, retryWait));\r\n retryWait = retryWait * 2;\r\n }\r\n }\r\n fileOffset += partSize;\r\n filePartIndex++;\r\n }\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, IDictionary } from \"../bruce-models\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { Uploader } from \"../internal/uploader\";\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(params: {\r\n api: BruceApi.Api,\r\n fileId: string\r\n }): string {\r\n const { api, fileId } = params;\r\n return `${api.GetBaseUrl()}file/${fileId}`;\r\n }\r\n\r\n export function GetUrlWithExt(params: {\r\n api: BruceApi.Api,\r\n file: IClientFile\r\n }): string {\r\n const { api, file } = params;\r\n return `${api.GetBaseUrl()}file/${file.ID}${file.FileExt ? file.FileExt : \"\"}`;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n fileId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n clientFile: IClientFile\r\n }> {\r\n const { api, fileId, req: reqParams } = params;\r\n if (!fileId) {\r\n throw(\"File ID is required.\");\r\n }\r\n const key = GetCacheKey(fileId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`file/${fileId}/details`, Api.PrepReqParams(reqParams));\r\n res({\r\n clientFile: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n fileIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, fileIds, req: reqParams } = params;\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(reqParams));\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(params: {\r\n api: BruceApi.Api,\r\n file: File,\r\n purpose?: string,\r\n onProgress?: (progress: Uploader.IProgress) => void,\r\n req?: Api.IUploadReqParams\r\n }): Promise<{\r\n clientFile: IClientFile\r\n }> {\r\n let { api, file, purpose, req, onProgress } = params;\r\n if (!file) {\r\n throw(\"File is required.\");\r\n }\r\n const size = file?.size;\r\n if (!size) {\r\n throw(\"You cannot upload a 0byte sized file.\");\r\n }\r\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n let clientFile: IClientFile;\r\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\r\n clientFile = await Uploader.DoMultiPartUpload({\r\n api,\r\n file,\r\n urlSuffix: \"fileUpload\",\r\n req,\r\n onProgress\r\n });\r\n }\r\n else {\r\n req.onProgress = (progress: ProgressEvent) => {\r\n const percent = Math.round ((progress.loaded / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n clientFile = await api.UPLOAD(\"file/uploadNew\", file, req);\r\n }\r\n if (clientFile?.ID && purpose) {\r\n await UpdatePurpose({\r\n api,\r\n fileId: clientFile.ID,\r\n purpose,\r\n req\r\n })\r\n }\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return {\r\n clientFile\r\n };\r\n }\r\n\r\n export async function UpdatePurpose(params: {\r\n api: BruceApi.Api,\r\n fileId: string,\r\n purpose: string,\r\n req?: Api.IReqParams\r\n }) {\r\n let { api, fileId, purpose, req: reqParams } = params;\r\n if (!purpose) {\r\n purpose = \"\";\r\n }\r\n await api.POST(\"file/updatepurpose/\" + fileId + \"/?Purpose=\" + purpose, {\r\n Purpose: purpose\r\n }, Api.PrepReqParams(reqParams));\r\n const cacheKey = GetCacheKey(fileId);\r\n api.Cache.RemoveByContains(cacheKey);\r\n }\r\n\r\n /**\r\n * Uploads a temp file.\r\n * This will return a temp file id which can be used in various endpoints.\r\n * @param params\r\n * @returns\r\n */\r\n export async function UploadTemp(params: {\r\n api: BruceApi.Api,\r\n file: File,\r\n onProgress?: (progress: Uploader.IProgress) => void,\r\n req?: Api.IUploadReqParams\r\n }): Promise<{\r\n tempFileId: string\r\n }> {\r\n let { api, file, req, onProgress } = params;\r\n if (!file) {\r\n throw(\"File is required.\");\r\n }\r\n const size = file?.size;\r\n if (!size) {\r\n throw(\"You cannot upload a 0byte sized file.\");\r\n }\r\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n let tempFile: any;\r\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\r\n tempFile = await Uploader.DoMultiPartUpload({\r\n api,\r\n file,\r\n urlSuffix: \"tempFileUpload\",\r\n req,\r\n onProgress\r\n });\r\n }\r\n else {\r\n req.onProgress = (progress: ProgressEvent) => {\r\n const percent = Math.round ((progress.loaded / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n tempFile = await api.UPLOAD(\"file/uploadTemp\", file, req);\r\n }\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return {\r\n tempFileId: tempFile[\"TempFile.ID\"]\r\n };\r\n }\r\n\r\n export namespace Filter {\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\r\n export interface IFilter {\r\n PageSize?: number;\r\n PageIndex?: number;\r\n OrderBy?: Filter.EColumn;\r\n SortOrder?: Filter.ESortOrder;\r\n Purpose?: string;\r\n FilterRows?: Filter.IRow[];\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n filter: IFilter,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n clientFiles: IClientFile[],\r\n // Total available matching the filter.\r\n // This is not the total returned in the current page.\r\n totalCount: number\r\n }> {\r\n const { api, filter, req: reqParams } = params;\r\n const data = await api.POST(\"files/filtered\", filter, Api.PrepReqParams(reqParams));\r\n return {\r\n clientFiles: data.Items,\r\n totalCount: data.TotalCount\r\n };\r\n }\r\n\r\n export namespace Processor {\r\n export interface IResult {\r\n success: boolean;\r\n clientFileId: string;\r\n clientFileName: string;\r\n }\r\n\r\n export enum EConvertExt {\r\n GLB = \".glb\",\r\n SKP = \".skp\",\r\n }\r\n\r\n export async function ConvertFormat(params: {\r\n api: BruceApi.Api,\r\n fileId: string,\r\n ext: EConvertExt | string,\r\n req?: Api.IReqParams\r\n }): Promise<IResult> {\r\n const { api, fileId: clientFileId, ext, req: reqParams } = params;\r\n if (!clientFileId || !ext) {\r\n throw(\"Client File ID and extension are required.\");\r\n }\r\n return api.POST(\"convertFileToFile\", {\r\n clientFileId: clientFileId,\r\n destinationFormat: ext,\r\n operations: []\r\n }, reqParams);\r\n }\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 Google = \"Google\"\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(params: {\r\n api: BruceApi.Api,\r\n programId: Id,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n programKey: IKey\r\n }> {\r\n const { api, programId, req: reqParams } = params;\r\n if (!programId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n const key = GetCacheKey(programId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`programkey/${programId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n programKey: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n programKeys: IKey[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"programkeys\", Api.PrepReqParams(reqParams));\r\n res({\r\n programKeys: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n programId: Id,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, programId, req: reqParams } = params;\r\n if (!programId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n await api.DELETE(`programkey/${programId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(programId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n programKey: IKey,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n programKey: IKey\r\n }> {\r\n const { api, programKey: data, req: reqParams } = params;\r\n if (!data?.ProgramId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n const res = await api.POST(\"programkey\", data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ProgramId));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n programKey: res\r\n };\r\n }\r\n}","import { Style } from \"../bruce-models\";\n\n/**\n * Describes an expectation on what should be rendered for a menu item-\n * between a min-max distance of an entity to the camera.\n */\nexport namespace ZoomControl {\n export enum EDisplayType {\n Hidden = \"hidden\",\n Point = \"point\",\n Geometry = \"geometry\",\n Model3D = \"3d\"\n }\n\n export interface IItem {\n MinZoom?: number,\n MaxZoom?: number,\n DisplayType?: EDisplayType,\n StyleID?: number,\n Style?: Style.IEntitySettings;\n LODCategoryID?: string,\n LODLevel?: number | string;\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { PendingAction } from \"../server/pending-action\";\r\nimport { GlobalApi } from \"../api/global-api\";\r\nimport { Transform } from \"../common/transform\";\r\nimport { Carto } from \"../common/carto\";\r\nimport { Bounds } from \"../common/bounds\";\r\nimport { IDictionary } from \"../bruce-models\";\r\nimport { Uploader } from \"../internal/uploader\";\r\n\r\ntype Settings = Tileset.Settings.IPointcloud |\r\n Tileset.Settings.ICad |\r\n Tileset.Settings.IEntitiesMap |\r\n Tileset.Settings.IEntities |\r\n Tileset.Settings.IExternalMap |\r\n Tileset.Settings.IExternalTerrain |\r\n Tileset.Settings.IMap |\r\n Tileset.Settings.ITerrain;\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 loadUrl?: string;\r\n isRestricted?: 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 LegacyEntitiesSet = \"D\",\r\n LegacyStatic = \"S\",\r\n LegacyExternal = \"X\"\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 async function Get(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n loadFiles?: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tileset: ITileset\r\n }> {\r\n const { api, tilesetId, loadFiles, req: reqParams } = params;\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(tilesetId, loadFiles), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`tileset/get/${tilesetId}?noFiles=${Boolean(loadFiles) ? 0 : 1}`, reqParams);\r\n res({\r\n tileset: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(tilesetId, loadFiles),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * Returns tileset types for given tileset ids.\r\n * @param params\r\n * @returns\r\n */\r\n export async function GetTypes(params: {\r\n api: BruceApi.Api,\r\n tilesetIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n // Tileset id -> type mapping.\r\n typeMapping: IDictionary<EType>\r\n }> {\r\n // Our api is auto-converting legacy types right now which makes it impossible to know what they are.\r\n // This uses the legacy end-point which doesn't do that...\r\n const { api, tilesetIds, req: reqParams } = params;\r\n const mapping = {};\r\n if (tilesetIds.length == 1) {\r\n const tileset = await api.GET(\"ui.tileset/\" + tilesetIds[0], Api.PrepReqParams(reqParams));\r\n if (tileset) {\r\n mapping[tilesetIds[0]] = tileset.Type;\r\n }\r\n }\r\n else if (tilesetIds.length > 1) {\r\n const tilesets = await api.GET(\"ui.tilesets\", Api.PrepReqParams(reqParams));\r\n for (const tileset of tilesets) {\r\n if (tilesetIds.indexOf(tileset.ID) >= 0) {\r\n mapping[tileset.ID] = tileset.Type;\r\n }\r\n }\r\n }\r\n return {\r\n typeMapping: mapping\r\n };\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tilesets: ITileset[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"tileset/getList\", reqParams)\r\n res({\r\n tilesets: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tilesetId, req: reqParams } = params;\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n await api.DELETE(`tileset/delete/${tilesetId}`, reqParams);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + tilesetId);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n tileset: ITileset,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tileset: ITileset\r\n }> {\r\n let { api, tileset: data, req: reqParams } = params;\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)}`, reqParams);\r\n data = {\r\n ...res,\r\n ...data,\r\n settings: {\r\n ...res.settings,\r\n ...data.settings\r\n },\r\n id: res.id\r\n }\r\n }\r\n await api.POST(`tileset/update/${data.id}`, data, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + data.id);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\r\n return {\r\n tileset: data\r\n };\r\n }\r\n\r\n export async function UploadFile(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: File,\r\n onProgress?: (progress: Uploader.IProgress) => void,\r\n req?: Api.IUploadReqParams\r\n }): Promise<void> {\r\n let { api, file, req, tilesetId, onProgress } = params;\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n const size = file?.size;\r\n if (!size) {\r\n throw(\"You cannot upload a 0byte sized file.\");\r\n }\r\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\r\n await Uploader.DoMultiPartUpload({\r\n api,\r\n file,\r\n urlSuffix: `tileset/uploadFileEx/${tilesetId}/add`,\r\n req,\r\n onProgress\r\n });\r\n }\r\n else {\r\n req.onProgress = (progress: ProgressEvent) => {\r\n const percent = Math.round ((progress.loaded / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/files`, file, req);\r\n }\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n }\r\n\r\n export async function DeleteFile(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tilesetId, file, req: reqParams } = params;\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}`, reqParams);\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export async function UploadSrcFile(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: File,\r\n onProgress?: (progress: Uploader.IProgress) => void,\r\n req?: Api.IUploadReqParams\r\n }): Promise<void> {\r\n let { api, file, req, tilesetId, onProgress } = params;\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n const size = file?.size;\r\n if (!size) {\r\n throw(\"You cannot upload a 0byte sized file.\");\r\n }\r\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\r\n await Uploader.DoMultiPartUpload({\r\n api,\r\n file,\r\n urlSuffix: `tileset/uploadFileEx/${tilesetId}/src`,\r\n req,\r\n onProgress\r\n });\r\n }\r\n else {\r\n req.onProgress = (progress: ProgressEvent) => {\r\n const percent = Math.round ((progress.loaded / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/src`, file, req);\r\n }\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return;\r\n }\r\n\r\n export async function DeleteSrcFile(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tilesetId, file, req: reqParams } = params;\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}`, reqParams);\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export function GetFileUrl(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string\r\n }): string {\r\n let { api, tilesetId, file } = params;\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(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string\r\n }): string {\r\n let { api, tilesetId, file } = params;\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(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string\r\n }): string {\r\n let { api, tilesetId, file } = params;\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(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n pendingActionId: number\r\n }> {\r\n const { api, tilesetId, req: reqParams } = params;\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}`, Api.PrepReqParams(reqParams));\r\n return {\r\n pendingActionId: res.ID\r\n };\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 Name: string;\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(params: {\r\n api: GlobalApi.Api,\r\n published: IPublish,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n published: IPublish\r\n }> {\r\n const { api, published: data, req: reqParams } = params;\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, reqParams);\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, reqParams);\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 {\r\n published: data\r\n };\r\n }\r\n\r\n export async function Get(params: {\r\n api: GlobalApi.Api,\r\n accountId: string,\r\n tilesetId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n published: IPublish\r\n }> {\r\n const { api, accountId, tilesetId, req: reqParams } = params;\r\n if (!accountId || !tilesetId) {\r\n throw(\"Client account ID and tileset ID are required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(accountId, tilesetId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`tilesetByPublisher/${accountId}/${tilesetId}`, reqParams);\r\n res({\r\n published: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(accountId, tilesetId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: GlobalApi.Api,\r\n accountId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n published: IPublish[]\r\n }> {\r\n const { api, accountId, req: reqParams } = params;\r\n if (!accountId) {\r\n throw(\"Client account ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`tilesets/enabledForAccount/${accountId}`, reqParams);\r\n res({\r\n published: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(accountId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n }\r\n\r\n export namespace Settings {\r\n export interface ICad {\r\n rootEntityId: string;\r\n entityTypeId: string;\r\n styleId?: number;\r\n lodKey?: string;\r\n movePivot?: Tileset.EPivot;\r\n ucsId?: number;\r\n epsg?: number;\r\n thumbFileId?: string;\r\n location?: Carto.ICarto;\r\n offset?: any;\r\n transform?: Transform.ITransform;\r\n doubleSided?: boolean;\r\n b3dmFileSize?: number;\r\n maximumScreenSpaceError?: number;\r\n }\r\n\r\n export enum EMapTileSize {\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 IEntitiesMap {\r\n imageSize: EMapTileSize;\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 export interface IEntities {\r\n zoomControl?: any[];\r\n boundaries?: Bounds.IBounds;\r\n filter?: any;\r\n altitudeRefType?: string;\r\n terrainSource?: string;\r\n terrainUri?: string;\r\n doubleSided?: boolean;\r\n entityTypeId?: string;\r\n styleId?: number;\r\n }\r\n\r\n export enum EExternalMapType {\r\n TileMapImagery = \"TileMapImagery\",\r\n OpenStreetMapImagery = \"OpenStreetMapImagery\",\r\n MapBoxImagery = \"MapBoxImagery\",\r\n CesiumIon = \"CesiumIon\"\r\n }\r\n\r\n export interface IExternalMap {\r\n url?: string;\r\n mapType?: EExternalMapType;\r\n sourceExt?: string;\r\n ionId?: number;\r\n mapBoxStyleId?: string;\r\n mapBoxAccount?: string;\r\n mapBoxKey?: string;\r\n }\r\n\r\n export interface IExternalTerrain {\r\n requestVertexNormals?: boolean;\r\n url?: string;\r\n }\r\n\r\n export interface IMap {\r\n sourceFileId: string;\r\n imageSize: number;\r\n levelMin: number;\r\n levelMax: number;\r\n boundaries?: Bounds.IBounds;\r\n }\r\n\r\n export interface IPointcloud {\r\n sourceFileIds: string[];\r\n location: Carto.ICarto;\r\n transform: Transform.ITransform;\r\n pntFileSize?: number;\r\n epsg?: number;\r\n attenuation?: boolean;\r\n attenuationMax?: number;\r\n movePivot?: Tileset.EPivot;\r\n maximumScreenSpaceError?: number;\r\n }\r\n\r\n export interface ITerrain {\r\n sourceFileId?: string;\r\n startLevel?: number;\r\n }\r\n }\r\n}","import { IDictionary } from \"../bruce-models\";\r\nimport { Entity } from \"../entity/entity\";\r\nimport { Tileset } from \"../tileset/tileset\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { ZoomControl } from \"./zoom-control\";\r\n\r\n/**\r\n * Describes a menu item found in project views.\r\n * Menu items are used to dictate what data to load in a scene.\r\n * A menu item may be a container for other items.\r\n */\r\nexport namespace MenuItem {\r\n export enum EType {\r\n None = \"NONE\",\r\n Entities = \"BruceEntity\",\r\n Entity = \"SingleEntity\",\r\n Osm = \"OSMBuildingsTileset\",\r\n CadTileset = \"ModelTileset\",\r\n ArbTileset = \"ArbitraryTileset\",\r\n IonTileset = \"Cesium3DTileset\",\r\n Kml = \"StaticKML\",\r\n EntityTileset = \"EntitiesTileset\",\r\n EntityRaster = \"RasterEntitiesTileset\",\r\n PointCloud = \"PointCloudTileset\",\r\n EntitiesLoaded = \"LoadedEntities\",\r\n EntitiesIds = \"EntitiesIds\",\r\n Relations = \"Relations\",\r\n GooglePhotoTileset = \"GooglePhotoTileset\"\r\n }\r\n\r\n export interface ILegend {\r\n model3d: boolean;\r\n point: boolean;\r\n polygon: boolean;\r\n polylines: boolean;\r\n tileset3d: boolean;\r\n }\r\n\r\n export interface IAuthorSettings {\r\n // If true, the clicked entity will be read and used to update the authored entity.\r\n readClickedEntity?: boolean;\r\n // Optional relationship type to use when relating to the clicked entity.\r\n clickedRelationTypeId?: string;\r\n // If set, specified attributes will be copied between the clicked and authored entities.\r\n copyClickedAttrMapping?: {\r\n // String is a wrapped path, check PathUtils.\r\n fromPathStr: string;\r\n toPathStr: string;\r\n }[];\r\n }\r\n\r\n export interface IItem {\r\n id: string;\r\n Caption: string;\r\n Children?: IItem[];\r\n Type: EType;\r\n hideChildren?: boolean;\r\n legend?: ILegend;\r\n authoringEnabled?: boolean;\r\n authoring?: IAuthorSettings;\r\n LabelColor?: string;\r\n renderPriority?: number;\r\n // Default = false.\r\n cdnEnabled?: boolean;\r\n // Used to kill cache. Default = 0.\r\n // Tilesets have their own counter within their records.\r\n // This is used for non-tileset items.\r\n cdnCounter?: number;\r\n }\r\n\r\n export function CreateFromEntityId(entityId: string, typeId: string, styleId?: number): IItem {\r\n return <Item.IEntity>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.Entity,\r\n Caption: \"Generated Entity Menu Item\",\r\n BruceEntity: {\r\n \"EntityType.ID\": typeId,\r\n EntityId: entityId\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n MaxZoom: 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.IEntities>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.Entities,\r\n Caption: \"Generated Entity Type Menu Item\",\r\n BruceEntity: {\r\n \"EntityType.ID\": typeId\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n MaxZoom: 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 IEntities extends IItem {\r\n BruceEntity: {\r\n \"EntityType.ID\": string;\r\n Filter?: IDictionary<string>;\r\n // If true, menu item will display individual sub-items for tags.\r\n ExpandLayers?: boolean;\r\n // If ExpandLayers = true, this is the saved sub-items to render.\r\n // If this is null or empty, that means there is nothing to render for this menu item.\r\n SelectedExpandLayers?: number[];\r\n };\r\n CameraZoomSettings: ZoomControl.IItem[];\r\n\r\n // If BruceEntity.ExpandLayers = true,\r\n // this will dictate if camera should be used to scan for tags in view.\r\n filterLayersByCameraLocation?: boolean;\r\n showAllLayersExcludeBelow?: boolean;\r\n layers?: number[];\r\n extLayers?: {\r\n ID: number,\r\n checked: boolean\r\n }[];\r\n }\r\n\r\n export interface IEntity extends IItem {\r\n BruceEntity: {\r\n \"EntityType.ID\": string;\r\n EntityId: string;\r\n };\r\n CameraZoomSettings: ZoomControl.IItem[];\r\n showAllLayers?: boolean;\r\n showAllLayersExcludeBelow?: boolean;\r\n }\r\n\r\n export interface IArbTileset extends IItem {\r\n FlyTo?: boolean;\r\n BruceEntity?: {\r\n \"EntityType.ID\"?: string;\r\n };\r\n tileset?: ITileset;\r\n StyleMapping?: any[];\r\n styleId?: number;\r\n ApplyStyles?: boolean;\r\n IonResource?: {\r\n AssetID: string | number;\r\n }\r\n }\r\n export interface IIonTileset extends IArbTileset {};\r\n\r\n export interface ICadTileset extends IItem {\r\n tileset: ITileset;\r\n FlyTo?: boolean;\r\n StyleMapping?: any[];\r\n StyleBlending?: {\r\n // Hightlight = 0, replace = 1, mix = 2.\r\n blendMode: 0 | 1 | 2;\r\n // 1 = 100% new colour. 0 = original colour.\r\n blendPercent: number;\r\n };\r\n styleId?: number;\r\n BruceEntity?: {\r\n // Optional restriction.\r\n // When not null, only entities matching supplied ids will be visible.\r\n EntityIds?: string[];\r\n // Optional styling.\r\n // When entity ids are set, other entities can optionally be \"ghosts\".\r\n // This means they will be available but at low opacity.\r\n Ghosts?: boolean;\r\n }\r\n }\r\n\r\n export interface IPointcloud extends IItem {\r\n 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 // Arbitrarily hosted file to load instead of a client file.\r\n fileUrl?: string;\r\n }[]\r\n }\r\n\r\n export interface IEntitiesTileset extends IItem {\r\n 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 export interface IEntityRelations extends MenuItem.IItem {\r\n BruceEntity: {\r\n EntityIds: string[];\r\n },\r\n // Empty = render all types.\r\n relationTypeIds?: string[]\r\n }\r\n\r\n export interface IGooglePhotoTileset extends IItem {\r\n // Css color string to apply to the tileset.\r\n // This follows Cesium logic for when color is pure white,\r\n // that means don't apply colour and only apply alpha.\r\n colorMask?: string;\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { IDictionary } from \"../bruce-models\";\r\nimport { Camera } from \"../common/camera\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { Markup } from \"../markup/markup\";\r\nimport { ProjectViewTile } from \"./project-view-tile\";\r\n\r\n/**\r\n * Describe the \"Project View Bookmark\" concept within Bruce.\r\n * This is referred to as \"slides\" in older code.\r\n *\r\n * A bookmark is a snapshot of what should be displayed and how in a particular project view.\r\n */\r\nexport namespace ProjectViewBookmark {\r\n export function GetCacheKey(viewId: string, bookmarkId: string): string {\r\n return `${Api.ECacheKey.ProjectViewBookmark}${Api.ECacheKey.Id}${viewId}${Api.ECacheKey.Id}${bookmarkId}`;\r\n }\r\n\r\n export function GetListCacheKey(viewId: string): string {\r\n return `${Api.ECacheKey.ProjectViewBookmark}${Api.ECacheKey.Id}${viewId}`;\r\n }\r\n\r\n // This is the expected default version for the DataVersion value.\r\n // This value should NOT be changed without looking at our API and seeing what the default value is.\r\n export const DEFAULT_DATA_VERSION = 1;\r\n\r\n export interface IBaseBookmark {\r\n ID?: string;\r\n Title?: string;\r\n Note?: string;\r\n \"Screenshot.ClientFile.ID\"?: string;\r\n \"UI.View.ID\"?: string;\r\n \"Created.ByUser.ID\"?: string;\r\n \"Created.Date\"?: UTC.IUTC;\r\n \"UI.SlideGroup.ID\"?: number;\r\n // This is the version of the data in the bookmark.\r\n // This is used to determine how to parse the bookmark's settings.\r\n // 1 - 10,000 are reserved for Nextspace use.\r\n DataVersion: number;\r\n DisplayOrder?: number;\r\n Settings?: IBaseSettings;\r\n }\r\n\r\n /**\r\n * These are the base settings expected in any bookmark data-version.\r\n * The only exception is data-version = 1 which is our deprecated legacy format.\r\n */\r\n export interface IBaseSettings {\r\n menuItemIds?: string[];\r\n }\r\n\r\n export type Bookmark = LegacyNavigator.IBookmark | Navigator.IBookmark | IBaseBookmark;\r\n\r\n export namespace LegacyNavigator {\r\n export const DATA_VERSION = 1;\r\n\r\n export interface IBookmark extends IBaseBookmark {\r\n Camera?: ICamera;\r\n Settings?: ISettings;\r\n }\r\n\r\n export interface IBookmarkImagery {\r\n title: string;\r\n contrast: number;\r\n hue: number;\r\n saturation: number;\r\n gamma: number;\r\n brightness: number;\r\n alpha: number;\r\n }\r\n\r\n export interface ISettings extends IBaseSettings {\r\n selectedItemIds?: string[];\r\n order?: number;\r\n hiddenEntityIds?: string[];\r\n drawnRelationEntityIDs?: string[];\r\n imagery?: IBookmarkImagery[];\r\n terrain?: string;\r\n globeColor?: string;\r\n shadows?: boolean;\r\n groundOcclusion?: boolean;\r\n ambientOcclusion?: boolean;\r\n markup?: Markup.IMarkup;\r\n cameraFrustum?: Camera.EFrustum;\r\n displayTimeline?: boolean;\r\n timelineSettings?: any;\r\n }\r\n\r\n /**\r\n * Lat,lon is in degrees.\r\n * Altitude is meters relative to ground.\r\n * Heading, pitch, roll are in radians.\r\n */\r\n export interface ICamera {\r\n position: {\r\n latitude: number;\r\n longitude: number;\r\n height: number;\r\n };\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export const DATA_VERSION = 2;\r\n\r\n export interface IBookmark extends IBaseBookmark {\r\n Camera?: ICamera;\r\n Settings?: ISettings;\r\n }\r\n\r\n export interface ISettings extends IBaseSettings {\r\n groundOcclusion?: boolean;\r\n // Null = use default, empty array = no imagery.\r\n imagery?: ProjectViewTile.IBookmarkImagery[];\r\n terrain?: ProjectViewTile.IBookmarkTerrain;\r\n // Css color string to apply to the base globe.\r\n globeColor?: string;\r\n // 0 = 0%, 1 = 100%. Default is 100%.\r\n globeAlpha?: number;\r\n // If true, the globe will be hidden. Default is false.\r\n globeHidden?: boolean;\r\n markup?: Markup.IMarkup;\r\n shadows?: IShadows;\r\n ambientOcclusion?: IAmbientOcclusion;\r\n lighting?: ILighting;\r\n quality?: IQuality;\r\n // iso8601 date time string.\r\n dateTime?: string;\r\n // Entity id -> opacity. Where 1 = 100% opacity.\r\n entityOpacityMap?: IDictionary<number>;\r\n // Null = use default, empty array = deselect.\r\n // If default is null then selected ids should not be altered.\r\n selectedEntityIds?: string[];\r\n hiddenEntityIds?: string[];\r\n isolatedEntityIds?: string[];\r\n // This enables lighting that makes terrain elevation apparent.\r\n hillShades?: boolean;\r\n // A bit of an awkward transition from the old system.\r\n // We render \"all\" relationships for given entity ids.\r\n // This will create a menu item under the hood, later we will use menu items directly.\r\n renderedEntityRelations?: string[];\r\n }\r\n\r\n export interface IShadows {\r\n enabled: boolean;\r\n soften: boolean;\r\n pixelSize: number;\r\n darkness: number;\r\n }\r\n\r\n export interface IAmbientOcclusion {\r\n enabled: boolean;\r\n intensity: number;\r\n lengthCap: number;\r\n bias: number;\r\n blurStepSize: number;\r\n stepSize: number;\r\n }\r\n\r\n export interface ILighting {\r\n color: string;\r\n intensity: number;\r\n }\r\n\r\n export interface IQuality {\r\n fxaa: boolean;\r\n }\r\n\r\n export interface ICamera {\r\n // Meters relative to ground.\r\n altitude: number;\r\n // In degrees.\r\n latitude: number;\r\n longitude: number;\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n // Milliseconds transition from current position to bookmark.\r\n transition?: number;\r\n // If frustum is different between two bookmarks, transition should be instant.\r\n cameraFrustum?: Camera.EFrustum;\r\n }\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n bookmarkId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmark: Bookmark\r\n }> {\r\n const { api, viewId, bookmarkId, req: reqParams } = params;\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 = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n bookmark: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n bookmarkId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, viewId, bookmarkId, req: reqParams } = params;\r\n if (!viewId || !bookmarkId) {\r\n throw(\"View ID and Bookmark ID are required.\");\r\n }\r\n await api.DELETE(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId, bookmarkId));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmarks: Bookmark[]\r\n }> {\r\n const { api, viewId, req: reqParams } = params;\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(viewId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slides`, Api.PrepReqParams(reqParams));;\r\n const items = data.Items ? data.Items : [];\r\n // Cache individual items.\r\n // Maybe better to load list cache when getting 1 slide and seeing if it's in there.\r\n // WARNING: Right now the data matches, in the future the list may contain a shortened result.\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i] as ProjectViewBookmark.IBaseBookmark;\r\n const prom = new Promise((res) => {\r\n res({\r\n bookmark: item\r\n });\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(viewId, item.ID),\r\n value: prom,\r\n req: reqParams\r\n });\r\n }\r\n res({\r\n bookmarks: items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(viewId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n bookmark: Bookmark,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmark: Bookmark\r\n }> {\r\n const { api, viewId, bookmark: data, req: reqParams } = params;\r\n if (!data?.Title) {\r\n data.Title = data.ID;\r\n }\r\n const res = await api.POST(`ui.view/${viewId}/slide/${data.ID ? data.ID : \"\"}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId, <string>data.ID));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n return {\r\n bookmark: res\r\n };\r\n }\r\n\r\n export async function SetOrder(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n bookmarkIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, viewId, bookmarkIds, req: reqParams } = params;\r\n const reqData = {\r\n \t\"UISlide.ID\": bookmarkIds,\r\n \t\"DisplayOrder.Start\": 0\r\n };\r\n await api.POST(`ui.view/${viewId}/slides/setOrder`, reqData, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey(viewId));\r\n }\r\n}","import { Api } from \"../api/api\";\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 { ProjectViewLegacyTile } from \"./project-view-legacy-tile\";\r\nimport { ProjectViewTile } from \"./project-view-tile\";\r\nimport { ProjectViewBookmark } from \"./project-view-bookmark\";\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 // This is the expected default version for the DataVersion value.\r\n // This value should NOT be changed without looking at our API and seeing what the default value is.\r\n export const DEFAULT_DATA_VERSION = 1;\r\n\r\n export interface IBaseView {\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 DefaultUISlideID?: string;\r\n CreatedByUIVersion?: string;\r\n // This is the version of the data in the view.\r\n // This is used to determine how to parse the view's settings.\r\n // 1 - 10,000 are reserved for Nextspace use.\r\n DataVersion: number;\r\n // Admin only property for what email should be the project view's support line.\r\n SupportEmail?: string;\r\n Settings?: IBaseSettings;\r\n // If true, this view is considered the default for the account.\r\n // Operator may use this project view to load default settings.\r\n IsDefault?: boolean;\r\n }\r\n\r\n /**\r\n * These are the base settings expected in any project view data-version.\r\n * The only exception is data-version = 1 which is our deprecated legacy format.\r\n */\r\n export interface IBaseSettings {\r\n // Menu item structure that defines how and what to load in the scene.\r\n menuItems?: MenuItem.IItem[];\r\n // If true, anonymous users won't be able to access the view.\r\n IsLoginRequired?: boolean;\r\n // If true, users must have the permission \"Permission.EPermPrefix.ACCESS_PROJECT_VIEW + view.ID\" to access the view.\r\n IsRestricted?: boolean;\r\n }\r\n\r\n export type View = LegacyNavigator.IView | Navigator.IView | IBaseView;\r\n\r\n export namespace LegacyNavigator {\r\n export const DATA_VERSION = 1;\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 ISettings extends IBaseSettings {\r\n BookmarkTransitionSpeed?: number;\r\n Camera?: any;\r\n CameraFrustum?: number;\r\n CesiumMapSources?: ProjectViewLegacyTile.IMapSource[];\r\n CesiumTerrainSources?: ProjectViewLegacyTile.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 TilesetBackfaceCulling?: boolean;\r\n TopPanelComponents?: string[];\r\n LeftPanelComponents?: string[];\r\n PostProcessFXAA?: boolean;\r\n Shadows?: boolean;\r\n CustomFormSettings?: any;\r\n PreloadEntityTypes?: boolean;\r\n ClickActions?: any;\r\n Shadow?: {\r\n StaticCamera?: IShadowSettings;\r\n MovingCamera?: IShadowSettings;\r\n }\r\n }\r\n\r\n export interface IView extends IBaseView {\r\n Settings: ISettings;\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export const DATA_VERSION = 2;\r\n\r\n export interface ISettings extends IBaseSettings {\r\n // Imagery and terrains that non-admin users can select from.\r\n // Sources used in bookmarks will automatically be added to this list.\r\n imageries?: ProjectViewTile.IViewImagery[];\r\n terrains?: ProjectViewTile.IViewTerrain[];\r\n // Defaults are values to apply for bookmarks when either the bookmark-\r\n // is missing or the value is missing in the bookmark settings.\r\n defaults?: {\r\n camera?: ProjectViewBookmark.Navigator.ICamera;\r\n settings?: ProjectViewBookmark.Navigator.ISettings;\r\n };\r\n // Describes how to present contact information to the users.\r\n // The contact email is set in \"view.SupportEmail\". Only an admin can read or write this value.\r\n contact?: IContact;\r\n plugins?: IPlugins;\r\n // Default is yellow at 0.5 opacity.\r\n selectionColor?: string;\r\n }\r\n\r\n /**\r\n * Describes how to present contact information to the users.\r\n */\r\n export interface IContact {\r\n // Default = false.\r\n // Indicates if the user should be able to reach support.\r\n enabled: boolean;\r\n // Description to display in the support dialog.\r\n // Null = application's default text.\r\n description?: string;\r\n // FontAwesome icon to use for the support dialog button.\r\n // Null = application's default icon.\r\n icon?: string;\r\n }\r\n\r\n export interface IPlugins {\r\n // Enabled plugin ids.\r\n enabledIds: string[];\r\n }\r\n\r\n export interface IView extends IBaseView {\r\n Settings: ISettings;\r\n }\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n view: View\r\n }> {\r\n const { api, viewId, req: reqParams } = params;\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const key = GetCacheKey(viewId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n view: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n views: View[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.view/list\", Api.PrepReqParams(reqParams));\r\n res({\r\n views: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, viewId, req: reqParams } = params;\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n await api.DELETE(`ui.view/${viewId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n view: View,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n view: View\r\n }> {\r\n let { api, view: data, req: reqParams } = params;\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(reqParams));\r\n }\r\n else {\r\n data = await api.PUT(`ui.view/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n }\r\n api.Cache.Remove(GetCacheKey(<string>data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n view: data\r\n };\r\n }\r\n}","import { BruceApi } from \"../api/bruce-api\";\r\nimport { Api } from \"../api/api\";\r\nimport { ProjectView } from \"./project-view\";\r\n\r\nasync function getTemplateSettings(apiGetter: BruceApi.IGetter, reqParams?: Api.IReqParams): Promise<ProjectView.LegacyNavigator.ISettings> {\r\n const {view} = await ProjectView.Get({\r\n api: apiGetter.getApi(Api.TEMPLATE_ACCOUNT_ID), \r\n viewId: \"default\", \r\n req: reqParams\r\n });\r\n return (view.Settings as ProjectView.LegacyNavigator.ISettings) ?? <ProjectView.LegacyNavigator.ISettings>{};\r\n}\r\n\r\nfunction checkSourceToTemplate(items: ProjectViewLegacyTile.ISource[], templateItem: ProjectViewLegacyTile.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 ProjectViewLegacyTile {\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(params: {\r\n getter: BruceApi.IGetter, \r\n sources: IMapSource[], \r\n addIfMissing: boolean, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n sources: IMapSource[]\r\n }> {\r\n const { getter, sources: items, addIfMissing, req: reqParams } = params;\r\n const settings = await getTemplateSettings(getter, reqParams);\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 sources: items\r\n };\r\n }\r\n\r\n export async function MergeTerrainTemplateData(params: {\r\n getter: BruceApi.IGetter, \r\n sources: ITerrainSource[], \r\n addIfMissing: boolean, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n sources: ITerrainSource[]\r\n }> {\r\n const { getter, sources: items, addIfMissing, req: reqParams } = params;\r\n const settings = await getTemplateSettings(getter, reqParams);\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 sources: items\r\n };\r\n }\r\n}","\r\nexport namespace ProjectViewTile {\r\n export type MapTileId = string | EDefaultImagery;\r\n export type TerrainTileId = string | EDefaultTerrain;\r\n\r\n export interface ITileMeta {\r\n // Null = using a default tile.\r\n // (Not the same as a template account one. Default means we don't have a database record of it.).\r\n accountId?: string;\r\n tilesetId: string;\r\n }\r\n\r\n export interface IViewTerrain extends ITileMeta {\r\n tilesetId: TerrainTileId;\r\n }\r\n\r\n export interface IViewImagery extends ITileMeta {\r\n tilesetId: MapTileId;\r\n }\r\n\r\n export interface IBookmarkImagery extends IViewImagery {\r\n // 0 - 1, 1 = 100% opacity.\r\n // Default = 1.\r\n alpha?: number;\r\n // Default = 1.\r\n brightness?: number;\r\n // Default = 1.\r\n saturation?: number;\r\n // Default = 1.\r\n contrast?: number;\r\n // Default = 1.\r\n gamma?: number;\r\n // Default = 0.\r\n hue?: number;\r\n }\r\n\r\n export interface IBookmarkTerrain extends IViewTerrain {\r\n\r\n }\r\n\r\n export enum EDefaultImagery {\r\n BingMapsAerial = \"bingmapsaerial\",\r\n BingMapsAerialWithLabels = \"bingmapsaerialwithlabels\",\r\n BingMapsRoads = \"bingmapsroads\",\r\n MapboxSatellite = \"mapboxsatellite\",\r\n MapBoxStreets = \"mapboxstreets\",\r\n MapBoxStreetsClassic = \"mapboxstreetsclassic\",\r\n EsriWorldImagery = \"esriworldimagery\",\r\n EsriWorldStreetMap = \"esriworldstreetmap\",\r\n EsriNationalGeographic = \"esrinationalgeographic\",\r\n OpenStreetMap = \"openstreetmap\",\r\n LINZ = \"linz\",\r\n StamenWaterColor = \"stamenwatercolor\",\r\n StamenToner = \"stamentoner\",\r\n Grid = \"grid\"\r\n }\r\n\r\n export interface IDefaultImagery {\r\n id: EDefaultImagery;\r\n name: string;\r\n iconUrl?: string;\r\n }\r\n\r\n /**\r\n * Prepared array for UI.\r\n * TODO: Im not happy with icon urls sitting in the code. I'd prefer we ship these icons in the library as files.\r\n */\r\n export const DefaultImagery: IDefaultImagery[] = [\r\n {\r\n id: EDefaultImagery.BingMapsAerial,\r\n name: \"Bing Maps Aerial\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingAerial.png\"\r\n },\r\n {\r\n id: EDefaultImagery.BingMapsAerialWithLabels,\r\n name: \"Bing Maps Aerial with Labels\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingAerialLabels.png\"\r\n },\r\n {\r\n id: EDefaultImagery.BingMapsRoads,\r\n name: \"Bing Maps Roads\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingRoads.png\"\r\n },\r\n {\r\n id: EDefaultImagery.MapboxSatellite,\r\n name: \"Mapbox Satellite\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxSatellite.png\"\r\n },\r\n {\r\n id: EDefaultImagery.MapBoxStreets,\r\n name: \"Mapbox Streets\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxTerrain.png\"\r\n },\r\n {\r\n id: EDefaultImagery.MapBoxStreetsClassic,\r\n name: \"Mapbox Streets Classic\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxStreets.png\"\r\n },\r\n {\r\n id: EDefaultImagery.EsriWorldImagery,\r\n name: \"Esri World Imagery\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriWorldImagery.png\"\r\n },\r\n {\r\n id: EDefaultImagery.EsriWorldStreetMap,\r\n name: \"Esri World Street Map\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriWorldStreetMap.png\"\r\n },\r\n {\r\n id: EDefaultImagery.EsriNationalGeographic,\r\n name: \"Esri National Geographic\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriNationalGeographic.png\"\r\n },\r\n {\r\n id: EDefaultImagery.OpenStreetMap,\r\n name: \"Open Street Map\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/openStreetMap.png\"\r\n },\r\n {\r\n id: EDefaultImagery.LINZ,\r\n name: \"LINZ\",\r\n iconUrl: \"https://template.ui.nextspace.host/media/linz.jpg\"\r\n },\r\n {\r\n id: EDefaultImagery.StamenWaterColor,\r\n name: \"Stamen Water Color\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/stamenWatercolor.png\"\r\n },\r\n {\r\n id: EDefaultImagery.StamenToner,\r\n name: \"Stamen Toner\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/stamenToner.png\"\r\n },\r\n {\r\n id: EDefaultImagery.Grid,\r\n name: \"Grid\",\r\n iconUrl: \"https://template.api.nextspace-uat.net/file/2885d8df-028b-4f5c-80b3-2634f7e7cf69.png\"\r\n }\r\n ];\r\n\r\n export enum EDefaultTerrain {\r\n CesiumWorldTerrain = \"cesiumworldterrain\",\r\n FlatTerrain = \"flatterrain\",\r\n LINZ = \"linz\"\r\n }\r\n\r\n export interface IDefaultTerrain {\r\n id: EDefaultTerrain;\r\n name: string;\r\n iconUrl?: string;\r\n }\r\n\r\n /**\r\n * Prepared array for UI.\r\n * TODO: Im not happy with icon urls sitting in the code. I'd prefer we ship these icons in the library as files.\r\n */\r\n export const DefaultTerrains: IDefaultTerrain[] = [\r\n {\r\n id: EDefaultTerrain.CesiumWorldTerrain,\r\n name: \"Cesium World Terrain\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/TerrainProviders/CesiumWorldTerrain.png\"\r\n },\r\n {\r\n id: EDefaultTerrain.LINZ,\r\n name: \"LINZ\",\r\n iconUrl: \"https://template.ui.nextspace.host/media/linz.jpg\"\r\n },\r\n {\r\n id: EDefaultTerrain.FlatTerrain,\r\n name: \"Flat Terrain\",\r\n }\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\": EMessageType | string;\r\n Message: string;\r\n }\r\n\r\n export enum EMessageType {\r\n Warn = \"WARNING\",\r\n Error = \"ERROR\",\r\n Status = \"STATUS\",\r\n Info = \"INFO\"\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n actionId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n action: IAction\r\n }> {\r\n const { api, actionId, req: reqParams } = params;\r\n if (!actionId) {\r\n throw(\"Action ID is required.\");\r\n }\r\n const data = await api.GET(`pendingAction/${actionId}`, Api.PrepReqParams(reqParams));\r\n return {\r\n action: data\r\n }\r\n }\r\n\r\n export async function GetRelevantList(params: {\r\n api: BruceApi.Api,\r\n stricter?: boolean,\r\n reqParams?: Api.IReqParams\r\n }): Promise<{\r\n actions: IAction[]\r\n }> {\r\n const { api, stricter, reqParams } = params;\r\n const data = await api.GET(`pendingActions/important?Update=${Boolean(stricter)}`, Api.PrepReqParams(reqParams));\r\n return {\r\n actions: data.Items\r\n };\r\n }\r\n\r\n export async function GetMessages(params: {\r\n api: BruceApi.Api,\r\n actionId: number,\r\n order?: Api.ESortOrder,\r\n startIndex?: number,\r\n amount?: number,\r\n types?: EMessageType[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n messages: IMessage[]\r\n }> {\r\n let { api, actionId, order, startIndex, amount, req: reqParams, types } = params;\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 let args = `?SortOrder=${order == Api.ESortOrder.Desc ? \"DESC\" : \"ASC\"}&PageSize=${amount}&PageIndex=${startIndex}`;\r\n if (types?.length) {\r\n for (let i = 0; i < types.length; i++) {\r\n args += `&Type=${types[i]}`;\r\n }\r\n }\r\n const data = await api.GET(`pendingAction/${actionId}/progressMessages` + args, Api.PrepReqParams(reqParams));\r\n return {\r\n messages: data.Items\r\n };\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 async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n styles: IStyle[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const res: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.entityDisplaySettings\", Api.PrepReqParams(reqParams));\r\n res({\r\n styles: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: res,\r\n req: reqParams\r\n });\r\n return res;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n styleId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n style: IStyle\r\n }> {\r\n const { api, styleId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n style: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n style: IStyle,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n style: IStyle\r\n }> {\r\n const { api, style: data, req: reqParams } = params;\r\n if (!data?.Name) {\r\n throw(\"Style name is required.\");\r\n }\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n const res = await api.POST(`ui.entityDisplaySetting/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n style: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n styleId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, styleId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n await api.DELETE(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n}","export namespace Permission {\n export type Perm = EPerm | string;\n\n export enum EPerm {\n ADMIN = \"ADMIN\",\n LOGIN = \"LOGIN\",\n DELETE_ENTITY_TYPE = \"DELETE_ENTITY_TYPE\",\n CREATE_ENTITY_TYPE = \"CREATE_ENTITY_TYPE\",\n UPDATE_ENTITY_TYPE = \"UPDATE_ENTITY_TYPE\"\n }\n\n export enum EPermPrefix {\n ACCESS_PROJECT_VIEW = \"UIVIEW_\",\n MANAGE_PROJECT_VIEW_BOOKMARKS = \"UIVIEW_MANAGE_BOOKMARKS_\",\n ACCESS_TILESET = \"TILESET_\"\n }\n}","import { Api } from \"../api/api\";\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(params: {\r\n api: IdmApi.Api,\r\n sessionId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n session: ISession\r\n }> {\r\n const { api, sessionId, req: reqParams } = params;\r\n if (!sessionId) {\r\n throw(\"Session ID is required.\");\r\n }\r\n const key = GetCacheKey(sessionId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`session/${sessionId}`, reqParams);\r\n res({\r\n session: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Login(params: {\r\n api: IdmApi.Api,\r\n username: string,\r\n password: string,\r\n accountId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n session: ISession\r\n }> {\r\n const { api, username, password, accountId, req: reqParams } = params;\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 }, reqParams);\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 {\r\n session: session\r\n };\r\n }\r\n\r\n export async function Logout(params: {\r\n api: IdmApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, req: reqParams } = params;\r\n const ssid = api.GetSessionId();\r\n if (ssid) {\r\n await api.POST(\"logout\", null, reqParams);\r\n api.SetSessionId(<any>null);\r\n api.Cache.Remove(GetCacheKey(ssid));\r\n }\r\n }\r\n\r\n export function IsPermEnabled(params: {\r\n session: ISession,\r\n accountId: string,\r\n perm: string\r\n }): boolean {\r\n let { session, accountId, perm } = params;\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(params: {\r\n session: ISession,\r\n perm: string\r\n }): boolean {\r\n let { session, perm } = params;\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(params: {\r\n session: ISession,\r\n accountId: string\r\n }): boolean {\r\n return IsPermEnabled({\r\n perm: Permission.EPerm.ADMIN,\r\n accountId: params.accountId,\r\n session: params.session\r\n });\r\n }\r\n\r\n export function IsSuperAdmin(params: {\r\n session: ISession\r\n }): boolean {\r\n return IsSuperPermEnabled({\r\n session: params.session,\r\n perm: Permission.EPerm.ADMIN\r\n });\r\n }\r\n}","import { Api, 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(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n name: string, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n group: IGroup\r\n }> {\r\n const { api, accountId, name, req: reqParams } = params;\r\n if (!name || !accountId) {\r\n throw(\"Name and AccountID are required.\");\r\n }\r\n const data = await api.GET(`account/${accountId}/userGroupByName/${name}`, reqParams);\r\n return {\r\n group: data\r\n };\r\n }\r\n\r\n export async function GetUsers(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n groupId: string, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n users: User.IUser[]\r\n }> {\r\n const { api, accountId, groupId: id, req: reqParams } = params;\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`, reqParams);\r\n return {\r\n users: data.Items\r\n };\r\n }\r\n\r\n export async function GetListByPerm(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n perm: Permission.Perm, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n groups: IGroup[]\r\n }> {\r\n const { api, accountId, perm, req: reqParams } = params;\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}`, reqParams);\r\n return {\r\n groups: data.Items\r\n };\r\n }\r\n\r\n export async function GetList(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n groups: IGroup[]\r\n }> {\r\n const { api, accountId, req: reqParams } = params;\r\n if (!accountId) {\r\n throw(\"AccountID is required.\");\r\n }\r\n const data = await api.GET(`userGroups/${accountId}`, reqParams);\r\n return {\r\n groups: data.Items\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n groupId: string, \r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, accountId, groupId: id, req: reqParams } = params;\r\n if (!accountId || !id) {\r\n throw(\"AccountID and ID are required.\");\r\n }\r\n return api.DELETE(`account/${accountId}/userGroupID/${id}`, reqParams);\r\n }\r\n\r\n export async function Update(params: {\r\n api: IdmApi.Api, \r\n group: IGroup, \r\n reqParams?: Api.IReqParams\r\n }): Promise<{\r\n group: IGroup\r\n }> {\r\n const { api, group: data, reqParams } = params;\r\n if (!data.Name || !data[\"ClientAccount.ID\"]) {\r\n throw(\"User group name and client account ID are required.\");\r\n }\r\n const res = await api.POST(`userGroup${data.ID ? (\"/\" + data.ID) : \"\"}`, data, reqParams);\r\n return {\r\n group: res\r\n };\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { BruceApi } from \"../bruce-models\";\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 function GetSettingsCacheKey(userId: string, appId: string): string {\r\n return Api.ECacheKey.User + Api.ECacheKey.UserSettings + userId + Api.ECacheKey.Id + appId;\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 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(params: {\r\n api: IdmApi.Api,\r\n userId: string,\r\n accountId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n const { api, userId: id, accountId, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id, <string>accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`user/${id}${accountId ? `?clientAccountID=${accountId}` : \"\"}`, reqParams)\r\n res({\r\n user: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id, <string>accountId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Update(params: {\r\n api: IdmApi.Api,\r\n user: IUser,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n const { api, user: data, req: reqParams } = params;\r\n if (!data?.ID || !data?.Type) {\r\n throw(\"ID and Type are required.\");\r\n }\r\n // When getting a user it is structured slightly different to when we update it.\r\n // We can make up the difference here.\r\n if (data.AccessPermissions?.length) {\r\n for (let i = 0; i < data.AccessPermissions.length; i++) {\r\n const perm = data.AccessPermissions[i];\r\n if (!perm[\"UserGroup.ID\"] && perm.UserGroups) {\r\n perm[\"UserGroup.ID\"] = [];\r\n for (let j = 0; j < perm.UserGroups.length; j++) {\r\n perm[\"UserGroup.ID\"].push(perm.UserGroups[j].ID);\r\n }\r\n }\r\n }\r\n }\r\n const res = await api.POST(`user/${data.ID}`, data, reqParams);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + data.ID);\r\n if (data.Type == EType.AccessToken) {\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n }\r\n else if (data.Type == EType.User) {\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.User + Api.ECacheKey.Account);\r\n }\r\n return {\r\n user: res\r\n };\r\n }\r\n\r\n /**\r\n * Loads settings for a given user + app.\r\n * The session's account id is used to separate settings between accounts.\r\n * @param params\r\n */\r\n export async function GetSettings(params: {\r\n api: IdmApi.Api,\r\n userId: string,\r\n appId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: any\r\n }> {\r\n const { api, userId, appId, req } = params;\r\n if (!userId || !appId) {\r\n throw(\"UserId and appId are required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetSettingsCacheKey(userId, appId), req);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`user/${userId}/application/${appId}/settings`);\r\n const settings = data?.Settings ? data.Settings : {};\r\n res({\r\n settings: settings\r\n });\r\n }\r\n catch (e) {\r\n // It will complain if an app id hasn't been used yet.\r\n // We need to suppress that error.\r\n if (e && typeof e == \"object\") {\r\n if (e.ERROR && typeof e.ERROR == \"object\" && e.ERROR.Type == \"NotFound\") {\r\n res({\r\n settings: {}\r\n });\r\n return;\r\n }\r\n }\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetSettingsCacheKey(userId, appId),\r\n value: prom,\r\n req: req\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * Updates settings for a given accId + user + app.\r\n * The settings update will replace the existing record, please ensure to merge with existing settings.\r\n * @param params\r\n */\r\n export async function UpdateSettings(params: {\r\n api: IdmApi.Api,\r\n accId: string,\r\n userId: string,\r\n appId: string,\r\n settings: any,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, accId, userId, appId, settings, req } = params;\r\n if (!accId || !userId || !appId) {\r\n throw(\"accId, userId and appId are required.\");\r\n }\r\n const postBody = {\r\n Settings: settings == null ? {} : settings,\r\n Application: appId,\r\n ClientAccountID: accId,\r\n UserID: userId\r\n };\r\n const prom = api.POST(`user/${userId}/application/${appId}/settings`, postBody, req);\r\n api.Cache.Remove(GetSettingsCacheKey(userId, appId));\r\n return prom;\r\n }\r\n\r\n export async function GetUsernameAvailable(params: {\r\n api: IdmApi.Api,\r\n username: string,\r\n excludeUserId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n isAvailable: boolean\r\n }> {\r\n const { api, username, excludeUserId, req: reqParams } = params;\r\n if (!username) {\r\n throw(\"Username is required.\");\r\n }\r\n const req = api.GET(`user/loginavailable/${username}${excludeUserId ? \"?excludeUserId=\" + excludeUserId : \"\"}`, reqParams);\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n isAvailable: data.IsAvailable\r\n });\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(params: {\r\n api: IdmApi.Api,\r\n email: string,\r\n accountId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n const { api, email, accountId, req: reqParams } = params;\r\n if (!email) {\r\n throw(\"Email is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetEmailCacheKey(email, <string>accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`userByEmail/${email}${accountId ? `?clientAccountID=${accountId}` : \"\"}`, reqParams);\r\n res({\r\n user: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetEmailCacheKey(email, <string>accountId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: IdmApi.Api,\r\n accountId: string,\r\n exclusive?: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n users: IUser[]\r\n }> {\r\n let { api, accountId, exclusive, req: reqParams } = params;\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 : await api.GetCacheItem(GetListCacheKey(accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`users?clientAccountID=${accountId}${exclusive ? \"&allExcludingClientAccount=true\" : \"\" }`, reqParams);\r\n res({\r\n users: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n req.then(async (data) => {\r\n const users = data.users;\r\n for (let i = 0; i < users.length; i++) {\r\n await api.SetCacheItem({\r\n key: GetCacheKey(<string>users[i].ID, accountId),\r\n value: {\r\n user: users[i]\r\n },\r\n req: reqParams\r\n });\r\n }\r\n });\r\n if (!exclusive) {\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(accountId),\r\n value: req,\r\n req: reqParams\r\n });\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 params\r\n * @returns\r\n */\r\n export async function Signup(params: {\r\n api: IdmApi.Api,\r\n email: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, email, req: reqParams } = params;\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 }, reqParams);\r\n }\r\n\r\n /**\r\n * Sends a new signup email using a previous one's expired code.\r\n * @param params\r\n * @returns\r\n */\r\n export async function SignupResend(params: {\r\n api: IdmApi.Api,\r\n expiredCode: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, expiredCode, req: reqParams } = params;\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, reqParams);\r\n }\r\n\r\n /**\r\n * Completes signup using user data and a signup code.\r\n * @param params\r\n * @returns\r\n */\r\n export async function SignupComplete(params: {\r\n api: IdmApi.Api,\r\n code: string,\r\n user: IUser,\r\n accountId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n let { api, code, user: data, accountId, req: reqParams } = params;\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, reqParams);\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 {\r\n user: res\r\n };\r\n }\r\n\r\n /**\r\n * Sends a password reset email to the specified email address.\r\n * @param params\r\n * @returns user id associated with provided email.\r\n */\r\n export async function ForgotPassword(params: {\r\n api: IdmApi.Api,\r\n accountId: string,\r\n email: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n userId: string\r\n }> {\r\n const { api, accountId, email, req: reqParams } = params;\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 }, reqParams);\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n userId: data.ID\r\n });\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 params\r\n * @returns\r\n */\r\n export async function ForgotPasswordComplete(params: {\r\n api: IdmApi.Api,\r\n code: string,\r\n userId: string,\r\n password: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n const { api, code, userId, password, req: reqParams } = params;\r\n const {user} = await Get({\r\n api: api,\r\n userId: userId,\r\n accountId: \"\",\r\n req: reqParams\r\n });\r\n const res = await 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 }, reqParams);\r\n return {\r\n user: res\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(params: {\r\n api: IdmApi.Api,\r\n accountId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n users: IUser[]\r\n }> {\r\n const { api, accountId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"usersByClientAccount/accessTokens\", reqParams);\r\n res({\r\n users: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n req.then(async (data) => {\r\n const users = data.tokens;\r\n for (let i = 0; i < users.length; i++) {\r\n await api.SetCacheItem({\r\n key: GetCacheKey(<string>users[i].ID, accountId),\r\n value: {\r\n user: users[i]\r\n },\r\n req: reqParams\r\n });\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(accountId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: IdmApi.Api,\r\n tokenId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tokenId: id, req: reqParams } = params;\r\n await api.DELETE(`accessToken/${id}`, reqParams);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + id);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n }\r\n\r\n export async function Create(params: {\r\n api: IdmApi.Api,\r\n token: IUser,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n let { api, token: data, req: reqParams } = params;\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, reqParams);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n return {\r\n user: data\r\n };\r\n }\r\n }\r\n}","\r\nimport { Api } from \"../api/api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { User } from \"../user/user\";\r\n\r\nexport namespace AccountInvite {\r\n export interface IInvite {\r\n ID: number;\r\n \"Account.ID\": string;\r\n \"Invited.User.ID\": string;\r\n \"InvitedBy.User.ID\": string;\r\n CreatedDate: UTC.IUTC;\r\n InviteMethod: EInviteMethod;\r\n IsExpired: boolean;\r\n Status: EStatus;\r\n }\r\n\r\n export enum EStatus {\r\n Denied = \"Denied\",\r\n Cancelled = \"Cancelled\",\r\n Sent = \"Sent\",\r\n NotSent = \"NotSent\",\r\n Accepted = \"Accepted\"\r\n }\r\n\r\n export enum EInviteMethod {\r\n Email = \"Email\",\r\n SMS = \"SMS\",\r\n Manual = \"Manual\"\r\n }\r\n\r\n export async function GetByCode(params: {\r\n api: IdmApi.Api,\r\n code: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n invite: IInvite\r\n }> {\r\n const { api, code, req } = params;\r\n const res = await api.GET(`invite/code?inviteCode=${code}`, Api.PrepReqParams(req));\r\n return res;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: IdmApi.Api,\r\n accountId?: string,\r\n userId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n invites: IInvite[],\r\n warnings?: string[]\r\n }> {\r\n const { api, accountId, userId, req } = params;\r\n const urlParams = new URLSearchParams();\r\n if (accountId) {\r\n urlParams.append(\"accountId\", accountId);\r\n }\r\n if (userId) {\r\n urlParams.append(\"userId\", userId);\r\n }\r\n const res = await api.GET(\"invites?\" + urlParams.toString(), Api.PrepReqParams(req));\r\n return res;\r\n }\r\n\r\n export async function Update(params: {\r\n api: IdmApi.Api,\r\n code: string,\r\n status: string,\r\n user?: User.IUser,\r\n req?: Api.IReqParams\r\n }) {\r\n const { api, code, status, user, req } = params;\r\n const res = await api.POST(\"invite/update\", {\r\n InviteCode: code,\r\n Status: status,\r\n User: user\r\n }, Api.PrepReqParams(req));\r\n return res;\r\n }\r\n\r\n export async function Create(params: {\r\n api: IdmApi.Api,\r\n accountId: string,\r\n login?: string,\r\n userId?: string,\r\n email?: string,\r\n mobile?: string,\r\n emailTemplateKey?: string,\r\n groupIds?: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n warnings?: string[],\r\n user: User.IUser,\r\n manualInviteCode?: string,\r\n invite: IInvite,\r\n manualInvite?: IInvite\r\n }> {\r\n const { api, accountId, login, userId, email, mobile, emailTemplateKey, groupIds, req } = params;\r\n const res = await api.POST(\"invite/new\", {\r\n accountId,\r\n login,\r\n email,\r\n mobile,\r\n userId,\r\n groupIds,\r\n emailTemplateKey\r\n }, Api.PrepReqParams(req));\r\n return res;\r\n }\r\n}","export namespace EncryptUtils {\n // https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\n export function Cyrb53Hash(str: string, seed: number = 0): number {\n let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1>>>16), 2246822507) ^ Math.imul(h2 ^ (h2>>>13), 3266489909);\n h2 = Math.imul(h2 ^ (h2>>>16), 2246822507) ^ Math.imul(h1 ^ (h1>>>13), 3266489909);\n return (4294967296 * (2097151 & h2) + (h1>>>0));\n }\n}","import { IDictionary } from \"../common/dictionary\";\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(urlParams: IDictionary<string | number>): void {\r\n const params: string[] = [];\r\n const keys = Object.keys(urlParams);\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 = urlParams[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 async function Run(params: {\r\n api: BruceApi.Api,\r\n query: IQuery, \r\n key?: EReqKey, \r\n skip?: number, \r\n load?: number, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entities: E.IEntity[]\r\n }> \r\n {\r\n let { api, query, key, skip, load, req: reqParams } = params;\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 const req = api.POST(`entities/datalab/getMatchingEntities/${key}?skip=${skip}&load=${load}`, \r\n query, \r\n Api.PrepReqParams(reqParams)\r\n );\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n entities: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n return prom;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\n/**\r\n * TODO: The analysis result is currently a mix of multiple layers of legacy.\r\n * We will first decide what we want it to do and then describe just the needed portions of the existing implementation.\r\n */\r\nexport namespace ImportCad {\r\n export interface IAnalyzeParams {\r\n \"TempFile.ID\": string;\r\n \"OriginalIFCFile.Name\": string;\r\n }\r\n\r\n export interface IAnalyzeRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export interface IImportParams {\r\n \"TempFile.ID\": string;\r\n \"OriginalIFCFile.Name\": string;\r\n \"IFCSettings\": {\r\n \"ClassificationRules\": {\r\n \"NewIFCStandard.Name\": string;\r\n \"IFCStandard\": string;\r\n \"IsExtendingAllowed\": boolean;\r\n \"AllowAddingNewEntityTypes\": boolean;\r\n \"AllowAddingNewAttributes\": boolean;\r\n \"EntityTypesDerivedFromAttribute\": string;\r\n }\r\n }\r\n }\r\n\r\n export interface IImportRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export async function Analyze(params: {\r\n api: BruceApi.Api, \r\n fileAnalyze: IAnalyzeParams, \r\n req?: Api.IReqParams\r\n }): Promise<IAnalyzeRes> {\r\n const { api, fileAnalyze, req: reqParams } = params;\r\n return api.POST(\"entities/PrepareIFCForImport\", fileAnalyze, Api.PrepReqParams(reqParams));\r\n }\r\n\r\n export async function ImportEntities(params: {\r\n api: BruceApi.Api, \r\n fileImport: IImportParams, \r\n req?: Api.IReqParams\r\n }): Promise<IImportRes> {\r\n const { api, fileImport, req: reqParams } = params;\r\n return api.POST(\"entities/importIFCWithProgress\", fileImport, Api.PrepReqParams(reqParams));\r\n }\r\n\r\n /**\r\n * Parses the completed pending action result from running \"ImportEntities\".\r\n * This will return the root entity's id if any is present.\r\n * @param paResult \r\n */\r\n export function ParseRootId(paResult: string | Object): string {\r\n try {\r\n const obj = typeof paResult == \"string\" ? JSON.parse(paResult) : paResult;\r\n if (obj?.result?.length) {\r\n return obj.result[0];\r\n }\r\n }\r\n catch {\r\n // Failed to parse json.\r\n }\r\n return <any>null;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\nexport namespace ImportCsv {\r\n export interface IImportParams {\r\n \"TempFile.ID\": string;\r\n \"CSVSettings\": {\r\n \"IsTitleRow\": boolean;\r\n \"Delimiter\": string;\r\n \"IsRecordQuoted\": boolean;\r\n \"Columns\": string[];\r\n },\r\n \"OriginalCSVFile.Name\": string;\r\n \"ImportMode\": string;\r\n \"EntityType.ID\": string;\r\n \"TargetDataSchema\": any;\r\n \"DataMapping\": any;\r\n \"Layers\": number[];\r\n \"SkipUnresolvedRows\": boolean;\r\n \"DeleteNonupdatedEntities\": boolean;\r\n \"Async\": boolean;\r\n \"SkipFailedEntities\": boolean;\r\n }\r\n\r\n export interface IImportRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export async function ImportEntities(params: {\r\n api: BruceApi.Api, \r\n fileImport: IImportParams, \r\n req?: Api.IReqParams\r\n }): Promise<IImportRes> {\r\n const { api, fileImport, req: reqParams } = params;\r\n return api.POST(\"entities/importCSVWithProgress2\", fileImport, Api.PrepReqParams(reqParams));\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { EntityTag } from \"../entity/entity-tag\";\r\n\r\nexport namespace ImportJson {\r\n export interface ITagExt extends EntityTag.ITag {\r\n IsSelected: boolean;\r\n }\r\n\r\n export interface IImportParams {\r\n \"TempFile.ID\": string;\r\n \"TempFile.Ext\": string;\r\n \"OriginalJsonFile.Name\": string;\r\n ImportMode: string;\r\n \"EntityType.ID\": string;\r\n DataMappingSchema: any;\r\n TargetDataSchema: any;\r\n Layers: ITagExt[];\r\n }\r\n\r\n export interface IImportRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export async function ImportEntities(params: {\r\n api: BruceApi.Api, \r\n fileImport: IImportParams, \r\n req?: Api.IReqParams\r\n }): Promise<IImportRes> {\r\n const { api, fileImport, req: reqParams } = params;\r\n return api.POST(\"entities/importJsonWithProgress\", fileImport, Api.PrepReqParams(reqParams));\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\nexport namespace ImportKml {\r\n export interface IImportParams {\r\n \"TempFile.ID\": string;\r\n \"OriginalKMLFile.Name\": string;\r\n KMLFolders: any[];\r\n ImportMode: string;\r\n TotalCount: number;\r\n }\r\n\r\n export interface IImportRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export async function ImportEntities(params: {\r\n api: BruceApi.Api, \r\n fileImport: IImportParams, \r\n req?: Api.IReqParams\r\n }): Promise<IImportRes> {\r\n const { api, fileImport, req: reqParams } = params;\r\n return api.POST(\"entities/importKMLWithProgress2\", fileImport, Api.PrepReqParams(reqParams));\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\nexport namespace ImportedFile {\r\n export function GetCacheKey(fileId: number): string {\r\n return Api.ECacheKey.ImportedFile + Api.ECacheKey.Id + fileId;\r\n }\r\n\r\n export function GetCacheKeyByRootId(rootId: string): string {\r\n return Api.ECacheKey.ImportedFile + Api.ECacheKey.Id + rootId;\r\n }\r\n\r\n export function GetListCacheKey(type: EFileType, pageIndex: number): string {\r\n return Api.ECacheKey.ImportedFile + type + pageIndex;\r\n }\r\n\r\n export interface IFile {\r\n ID: number;\r\n \"ClientFile.ID\": string;\r\n \"ImportedBy.User.ID\": string;\r\n \"Imported.DateTime\": any;\r\n \"EntityType.ID\": string;\r\n \"RootEntity.ID\": string;\r\n \"Source.ID\": number;\r\n \"PendingAction.ID\": number;\r\n NewEntitiesCount: number;\r\n UpdatedEntitiesCount: number;\r\n ClientFile: ClientFile.IClientFile;\r\n }\r\n\r\n export enum EFileType {\r\n CAD = \"CAD\",\r\n All = \"All\"\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n fileType?: EFileType,\r\n pageIndex?: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n importedFiles: IFile[]\r\n }> {\r\n let { api, fileType: type, pageIndex, req: reqParams } = params;\r\n if (!type) {\r\n type = EFileType.All;\r\n }\r\n if (!pageIndex) {\r\n pageIndex = 0;\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(type, pageIndex), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n\r\n let first = true;\r\n let url = \"entityImportFiles\";\r\n if (type != EFileType.All) {\r\n url += \"?FileType=\" + type;\r\n first = false;\r\n }\r\n if (pageIndex > 0) {\r\n url += (first ? \"?\" : \"&\") + \"pageIndex=\" + pageIndex;\r\n }\r\n const req = api.GET(url, Api.PrepReqParams(reqParams));\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n importedFiles: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(type, pageIndex),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetListByRootId(params: {\r\n api:BruceApi.Api,\r\n rootId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n importedFiles: IFile[]\r\n }> {\r\n const { api, rootId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKeyByRootId(rootId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityImportFiles?Entity.ID=${rootId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n importedFiles: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKeyByRootId(rootId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n importedFileId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n importedFile: IFile\r\n }> {\r\n const { api, importedFileId: fileId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKey(fileId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityImportFile/${fileId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n importedFile: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(fileId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n}","import { Cartes, EntityAttachmentType } from \"../bruce-models\";\r\n\r\n/**\r\n * Description of a \"Markup\" which is stored in custom-form or bookmark records.\r\n */\r\nexport namespace Markup {\r\n export interface IMarkup {\r\n divs?: Div.IDiv[];\r\n vectors?: (Line.ILine | FreePaint.IPaint)[];\r\n cesiumObjects?: (Polygon.IPolygon | Polyline.IPolyline | Circle.ICircle | Walkscore.IWalkscore)[];\r\n width?: number;\r\n height?: number;\r\n defaultCameraPos?: any;\r\n // Default = true.\r\n visible?: boolean;\r\n }\r\n\r\n export interface IElement {\r\n // Unique id of the element within the markup.\r\n // Warning: IAnchor elements are not elements and do not have an id.\r\n // Anchors only exist as sub elements to other items.\r\n id: string;\r\n // Human readable name for the element.\r\n // This is presented in editing screens to help differentiate elements.\r\n name?: string;\r\n // Default = true.\r\n visible?: boolean;\r\n // The screen position of the original drawn element.\r\n // Used to determine if anything needs to change based on viewer's screen size.\r\n screenWidth?: number;\r\n screenHeight?: number;\r\n }\r\n\r\n export namespace Div {\r\n // Types of div that can be created.\r\n export enum EType {\r\n // Default, no special handling.\r\n Default = \"default\",\r\n // Callout, assumes it will be positioned in 3d space.\r\n // Assumes existence of line that is used to anchor it.\r\n Callout = \"callout\"\r\n }\r\n\r\n export interface IDiv extends IElement {\r\n // Type of div. Determines how it is rendered / positioned.\r\n type?: EType;\r\n // The div's content.\r\n contentRows: IRow[];\r\n // Css box shadow.\r\n boxShadow?: IBoxShadow;\r\n // Css border radius.\r\n borderRadius?: number;\r\n // If the border radius should be in pixels or percent.\r\n borderUsingPercent?: boolean;\r\n // Css border color.\r\n borderColor?: string;\r\n // Css border width.\r\n borderWidth?: number;\r\n // Screen x/y position in pixels.\r\n x: number;\r\n y: number;\r\n // Width/height in pixels.\r\n width: number;\r\n height: number;\r\n }\r\n\r\n // Describes css box shadow.\r\n export interface IBoxShadow {\r\n horizontal: number;\r\n vertical: number;\r\n blur: number;\r\n spread: number;\r\n color: string;\r\n }\r\n\r\n // Describes a content row.\r\n export interface IRow {\r\n items: IRowItem[];\r\n height: number;\r\n }\r\n\r\n // Describes expected content of a row cell.\r\n export enum EItemType {\r\n // Default, no special handling.\r\n Default = \"DEFAULT\",\r\n // Embed, assume content is html.\r\n // Make it take over the whole cell instead of padding it and such.\r\n Embed = \"EMBED\",\r\n // Content is expected to be an SVG or font-awesome icon.\r\n Icon = \"ICON\",\r\n // Content is expected to be an image.\r\n Image = \"IMAGE\"\r\n }\r\n\r\n export interface IRowItem {\r\n // Text or HTML to display.\r\n text?: string;\r\n // Embedded HTML to render when item type is \"EMBED\".\r\n // Different to text as text will be auto-cleaned.\r\n embedRaw?: string;\r\n // Embedded ICON to render when item type is \"ICON\".\r\n // Icon is expected to be a font-awesome icon.\r\n icon?: string;\r\n // Action ot perform when this cell is clicked.\r\n action?: ItemAction.IItemAction;\r\n // Background image to use.\r\n bgImage?: IRowItemImage;\r\n // Css background color.\r\n backgroundColor?: string;\r\n // Css font color.\r\n fontColor?: string;\r\n // Css font size.\r\n fontSize?: number;\r\n // Css horizontal text alignment.\r\n textAlign?: string;\r\n // Css vertical text alignment.\r\n verticalAlign?: string;\r\n // Padding in pixels to apply to all 4 sides.\r\n padding?: number;\r\n // Css text shadow.\r\n textShadow?: ITextShadow;\r\n // Expected content type. Dictates if special handling is needed.\r\n contentType?: EItemType;\r\n // Width of the cell in percent of total row width.\r\n width?: number;\r\n }\r\n\r\n // Describes a cell's background image.\r\n export interface IRowItemImage {\r\n // Client file id of the image.\r\n FileID?: string;\r\n // If the markup's entity's default image should be used.\r\n UseEntityDefault?: boolean;\r\n }\r\n\r\n // Describes css text shadow.\r\n export interface ITextShadow {\r\n horizontal: number;\r\n vertical: number;\r\n blur: number;\r\n color: string;\r\n }\r\n\r\n export namespace ItemAction {\r\n export interface IActionLinkParams {\r\n // URL to open.\r\n // URL may be a path to the markup's entity's attribute data.\r\n // If \"${\" and \"}\" exist in the URL, then it has entity attribute data.\r\n URL?: string;\r\n // If the URL should be opened in a new tab.\r\n openInNewTab?: boolean;\r\n // If the markup should be closed when the link is opened.\r\n closeMarkupOnOpen?: boolean;\r\n }\r\n \r\n export interface IActionBookmarkParams {\r\n // Id of the bookmark to enable.\r\n // Assumes view id matches currently rendering view.\r\n bookmarkID?: string;\r\n }\r\n\r\n export interface IActionInfoViewParams {\r\n\r\n }\r\n\r\n export interface IActionRelationParams {\r\n\r\n }\r\n\r\n export interface IActionGalleryParams {\r\n documentType?: EntityAttachmentType.EType | string;\r\n }\r\n\r\n export interface IItemAction {\r\n type: ItemAction.EType;\r\n params: IActionLinkParams | IActionInfoViewParams | IActionRelationParams | IActionGalleryParams;\r\n }\r\n\r\n // Types of actions that can be performed when a cell is clicked.\r\n // Null = \"NONE\".\r\n export enum EType {\r\n None = \"NONE\",\r\n // Open a link specified in params.\r\n OpenLink = \"LINK\",\r\n // Open the markup's entity's details panel.\r\n OpenInfoView = \"INFOVIEW\",\r\n // Open the markup's entity's gallery popup.\r\n OpenEntityGallery = \"GALLERY\",\r\n // Toggle visibility of the markup's entity's relationships.\r\n ToggleRelationships = \"RELATIONSHIPS\",\r\n // Dictates this cell can be used to drag the div around.\r\n Draggable = \"DRAGABBLE\",\r\n // Closes the markup.\r\n Close = \"CLOSE\",\r\n // Opens a bookmark specified in params.\r\n OpenBookmark = \"BOOKMARK\"\r\n }\r\n }\r\n\r\n export const DEFAULT: IDiv = {\r\n contentRows: [\r\n {\r\n height: 100,\r\n items: [\r\n {\r\n contentType: EItemType.Default,\r\n text: \"Type here...\",\r\n width: 100,\r\n backgroundColor: \"white\",\r\n fontColor: \"black\",\r\n textAlign: \"center\",\r\n verticalAlign: \"center\",\r\n fontSize: 15\r\n }\r\n ]\r\n }\r\n ],\r\n height: null,\r\n width: null,\r\n id: null,\r\n x: null,\r\n y: null,\r\n borderColor: \"black\",\r\n borderWidth: 1,\r\n borderUsingPercent: false,\r\n borderRadius: 8,\r\n type: EType.Default\r\n };\r\n }\r\n\r\n export namespace Line {\r\n // Describes a line end's head.\r\n export enum ELineHead {\r\n None = \"NONE\",\r\n Circle = \"CIRCLE\",\r\n Arrow = \"ARROW\"\r\n }\r\n\r\n export interface ILine extends IElement {\r\n pathType: \"LINE\";\r\n // SVG path string.\r\n path: string;\r\n // SVG transform string.\r\n transform: string;\r\n // Snaps determine where the ends of the line snap to.\r\n // This can be 3d positions, screen positions or links to markup DIVs.\r\n // Calculated positions of the snaps will then alter the path of the line.\r\n snaps: IAnchor[];\r\n // Css color of the line.\r\n brushColor?: string;\r\n // Css stroke width of the line.\r\n brushSize?: number;\r\n // Determines if the line should angle towards its destination instead of being straight.\r\n angled?: boolean;\r\n // Backwards compatibility.\r\n // Use brushHead on anchors instead when available.\r\n brushHead?: ELineHead;\r\n // Css color of the brush head.\r\n outlineColor?: string;\r\n }\r\n\r\n // Dictates where on a DIV an anchor should snap to.\r\n export enum EAnchorDivSide {\r\n TopLeft = 0,\r\n TopRight = 1,\r\n BottomLeft = 2,\r\n BottomRight = 3,\r\n Center = 4,\r\n CenterLeft = 5,\r\n CenterRight = 6,\r\n CenterTop = 7,\r\n CenterBottom = 8\r\n }\r\n\r\n // Dictates what end of the line an anchor should render on.\r\n export enum EAnchorLineSide {\r\n Start = 0,\r\n End = 1,\r\n }\r\n\r\n export interface IAnchor {\r\n // Id of markup DIV that this anchor is attached to.\r\n id?: string;\r\n // Side of the markup DIV we are attached to.\r\n snapPosition?: EAnchorDivSide;\r\n // Side of the line we are attached to.\r\n side?: EAnchorLineSide;\r\n // How the anchor should be drawn in the context of a line.\r\n brushHead?: ELineHead;\r\n // Css fill color.\r\n fill?: string;\r\n // Determines size of anchor's \"ARROW\" head.\r\n size?: number;\r\n // Multiplied by \"size\" to determine size of anchor \"CIRCLE\" head.\r\n outlineFactor?: number;\r\n // Css stroke color.\r\n stroke?: string;\r\n // 3d world position.\r\n cartesian?: Cartes.ICartes3;\r\n // 2d screen position.\r\n screenPos?: Cartes.ICartes2;\r\n // If the anchor's position should be relative to the markup's entity.\r\n positionFromEntity?: boolean;\r\n }\r\n\r\n export const DEFAULT: ILine = {\r\n brushColor: \"rgba(255, 255, 255, 1)\",\r\n brushSize: 4,\r\n path: null,\r\n pathType: \"LINE\",\r\n transform: null,\r\n snaps: null,\r\n id: null\r\n };\r\n }\r\n\r\n export namespace FreePaint {\r\n // Describes a free-paint end's head.\r\n export enum EPaintHead {\r\n None = \"NONE\",\r\n Circle = \"CIRCLE\",\r\n Arrow = \"ARROW\"\r\n }\r\n\r\n export interface IPaint extends IElement {\r\n pathType: \"PLAIN\";\r\n // SVG path string.\r\n path: string;\r\n // SVG transform string.\r\n transform: string;\r\n // Css color of the line.\r\n brushColor?: string;\r\n // Css stroke width of the line.\r\n brushSize?: number;\r\n // Style of the ends of the free-paint.\r\n brushHead?: EPaintHead;\r\n // Css color of the brush head if one is used.\r\n // Eg arrow or circle heads.\r\n outlineColor?: string;\r\n }\r\n\r\n export const DEFAULT: IPaint = {\r\n brushColor: \"rgba(255, 255, 255, 1)\",\r\n brushSize: 4,\r\n path: null,\r\n pathType: \"PLAIN\",\r\n transform: null,\r\n id: null\r\n };\r\n }\r\n\r\n export namespace Polygon {\r\n // Determines if terrain and 3d models should be overlapped or not.\r\n export enum EClassificationType {\r\n // 3d models and terrain are overlapped.\r\n Both = \"BOTH\",\r\n // Only terrain is overlapped.\r\n Terrain = \"TERRAIN\"\r\n }\r\n\r\n export interface IPolygon extends IElement {\r\n type: \"POLYGON\";\r\n // 3d positions of the polygon.\r\n positions: Cartes.ICartes3[];\r\n // Css color of the polygon.\r\n color?: string;\r\n // Css color of the polygon's outline.\r\n outlineColor?: string;\r\n // Width of the polygon's outline in pixels.\r\n outlineWidth?: number;\r\n // Height of the polygon in meters.\r\n extrudedHeight?: number;\r\n // Determines if terrain and 3d models should be overlapped or not.\r\n classificationType?: EClassificationType;\r\n // Determines how many times to run Chaikin's algorithm on the polygon.\r\n // Null or 0 means no smoothing.\r\n smoothen?: number;\r\n }\r\n\r\n export const DEFAULT: IPolygon = {\r\n type: \"POLYGON\",\r\n id: null,\r\n positions: null,\r\n color: \"rgba(254, 234, 57, 0.54)\",\r\n outlineColor: \"rgba(215, 215, 215, 0)\",\r\n outlineWidth: 2,\r\n extrudedHeight: 0,\r\n classificationType: EClassificationType.Both,\r\n smoothen: 0\r\n };\r\n }\r\n\r\n export namespace Polyline {\r\n export interface IPolyline extends IElement {\r\n type: \"POLYLINE\";\r\n // 3d positions of the polyline.\r\n positions: Cartes.ICartes3[];\r\n // Css color of the polyline.\r\n color?: string;\r\n // Width of the polyline in pixels.\r\n outlineWidth?: number;\r\n // Determines how many times to run Chaikin's algorithm on the polygon.\r\n // Null or 0 means no smoothing.\r\n smoothen?: number;\r\n }\r\n\r\n export const DEFAULT: IPolyline = {\r\n type: \"POLYLINE\",\r\n id: null,\r\n positions: null,\r\n color: \"rgba(254, 234, 57, 0.54)\",\r\n outlineWidth: 4,\r\n smoothen: 0\r\n };\r\n }\r\n\r\n export namespace Circle {\r\n export interface ICircle extends IElement {\r\n type: \"CIRCLE\",\r\n // 3d position of the circle.\r\n position: Cartes.ICartes3;\r\n // Radius of the circle in meters.\r\n radius: number;\r\n // Css color of the circle.\r\n color?: string;\r\n // Width of the outline in meters.\r\n outlineWidth?: number;\r\n // Height of the circle in meters.\r\n extrudedHeight?: number;\r\n // Height of the circle's outline in meters.\r\n outlineExtrusion?: number;\r\n // Css color of the circle's outline.\r\n outlineColor?: string;\r\n }\r\n\r\n export const DEFAULT: ICircle = {\r\n type: \"CIRCLE\",\r\n id: null,\r\n position: null,\r\n radius: 50,\r\n color: \"rgba(254, 234, 57, 0.54)\"\r\n };\r\n }\r\n\r\n export namespace Walkscore {\r\n export interface IWalkscore extends IElement {\r\n type: \"WALKSCORE\";\r\n // 3d position of the walkscore.\r\n cartesian: Cartes.ICartes3;\r\n // Walkscore value out of 100.\r\n details: number;\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../common/utc\";\r\n\r\nexport namespace Plugin {\r\n export function GetCacheKey(pluginId: string): string {\r\n return `${Api.ECacheKey.Plugin}${Api.ECacheKey.Id}${pluginId}`;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.Plugin;\r\n }\r\n\r\n export interface IPlugin {\r\n ID: string,\r\n Name: string,\r\n Version: number,\r\n Icon: string,\r\n Location: string,\r\n IsAccessRestricted: boolean,\r\n IsLoginRequired: boolean,\r\n \"LastUpdated.Date\": UTC.IUTC,\r\n \"Created.Date\": UTC.IUTC\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n pluginId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n plugin: IPlugin\r\n }> {\r\n const { api, pluginId, req } = params;\r\n if (!pluginId) {\r\n throw (\"Plugin ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(pluginId), req);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.plugin/${pluginId}`, Api.PrepReqParams(req));\r\n res({\r\n plugin: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(pluginId),\r\n value: prom,\r\n req: req\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n plugins: IPlugin[]\r\n }> {\r\n const { api, req } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), req);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.plugins\", Api.PrepReqParams(req));\r\n res({\r\n plugins: data.Items\r\n })\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: prom,\r\n req: req\r\n });\r\n return prom;\r\n }\r\n\r\n export function GetLoadUrl(params: {\r\n api: BruceApi.Api,\r\n pluginId: string,\r\n cacheKey?: number | string,\r\n req?: Api.IReqParams\r\n }): {\r\n indexFileUrl: string\r\n } {\r\n let { api, pluginId, req, cacheKey } = params;\r\n if (!cacheKey) {\r\n cacheKey = 0;\r\n }\r\n return {\r\n indexFileUrl: `${api.GetBaseUrl()}ui.plugin/${pluginId}/file/index.jsc?version=${cacheKey}`\r\n };\r\n }\r\n}"],"names":["Api","A","MAX_AREA_IN_DEGREES"],"mappings":"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"}
1
+ {"version":3,"file":"bruce-models.es5.js","sources":["../src/api/api.ts","../src/ann-document/ann-document.ts","../src/custom-form/custom-form.ts","../src/custom-form/custom-form-content.ts","../src/common/cache.ts","../src/api/abstract-api.ts","../src/server/message-broker.ts","../src/api/guardian-api.ts","../src/account/account.ts","../src/server/hosting-location.ts","../src/api/bruce-api.ts","../src/api/cam-api.ts","../src/api/idm-api.ts","../src/api/global-api.ts","../src/api/api-getters.ts","../src/common/color.ts","../src/util/object-utils.ts","../src/util/path-utils.ts","../src/entity/entity.ts","../src/common/bruce-variable.ts","../src/calculator/calculator.ts","../src/common/geometry.ts","../src/common/bounds.ts","../src/common/bruce-event.ts","../src/common/camera.ts","../src/common/cartes.ts","../src/common/carto.ts","../src/common/delay-queue.ts","../src/common/utc.ts","../src/common/lru-cache.ts","../src/entity/entity-attachment-type.ts","../src/entity/entity-attachment.ts","../src/entity/entity-comment.ts","../src/entity/entity-link.ts","../src/entity/entity-lod.ts","../src/entity/entity-lod-category.ts","../src/entity/entity-relation-type.ts","../src/entity/entity-relation.ts","../src/entity/entity-source.ts","../src/entity/entity-tag.ts","../src/entity/entity-type.ts","../src/entity/getters/entity-globe.ts","../src/entity/getters/entity-filter-getter.ts","../src/entity/getters/batched-data-getter.ts","../src/util/math-utils.ts","../src/entity/entity-coords.ts","../src/entity/entity-type-visual-settings.ts","../src/entity/entity-attribute.ts","../src/internal/uploader.ts","../src/client-file/client-file.ts","../src/program-key/program-key.ts","../src/project/zoom-control.ts","../src/tileset/tileset.ts","../src/project/menu-item.ts","../src/project/project-view-bookmark.ts","../src/project/project-view.ts","../src/project/project-view-legacy-tile.ts","../src/project/project-view-tile.ts","../src/server/pending-action.ts","../src/style/style.ts","../src/user/permission.ts","../src/user/session.ts","../src/user/user-group.ts","../src/user/user.ts","../src/account/account-invite.ts","../src/util/encrypt-utils.ts","../src/util/url-utils.ts","../src/data-lab/data-lab.ts","../src/import/import-cad.ts","../src/import/import-csv.ts","../src/import/import-json.ts","../src/import/import-kml.ts","../src/import/imported-file.ts","../src/markup/markup.ts","../src/plugin/plugin.ts"],"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 EntityCoords = \"entitycoords\",\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 LodCategory = \"lodcategory\",\r\n Style = \"style\",\r\n PublishTileset = \"publishtileset\",\r\n User = \"user\",\r\n UserSettings = \"usersettings\",\r\n UserEmail = \"useremail\",\r\n AccessToken = \"accesstoken\",\r\n UserGroup = \"usergroup\",\r\n Account = \"account\",\r\n DatabaseRegion = \"databaseregion\",\r\n CustomForm = \"customform\",\r\n ImportedFile = \"importedfile\",\r\n Plugin = \"plugin\"\r\n }\r\n export const DEFAULT_CACHE_DURATION = 60; // 1 minute.\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 // False = cache is enabled by default for req-params.\r\n export let DEFAULT_NO_CACHE = false;\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 // Default is Api.DEFAULT_CACHE_STATE.\r\n // If true then local cache check will be skipped.\r\n noCache?: boolean;\r\n // Request headers.\r\n headers?: IDictionary<string>;\r\n }\r\n\r\n export interface IRes {\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 * @param base\r\n * @returns\r\n */\r\n export function PrepReqParams(base?: Api.IReqParams | IUploadReqParams): IReqParams | IUploadReqParams {\r\n base = {\r\n ...base\r\n };\r\n return base;\r\n }\r\n\r\n export interface IUploadReqParams extends IReqParams {\r\n onProgress?: (e: ProgressEvent) => void;\r\n formData?: IDictionary<string> | FormData;\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 IHotspot {\r\n X: number;\r\n Y: number;\r\n Key: string;\r\n Description?: string;\r\n LinkedEntity?: {\r\n \"Entity.ID\": string;\r\n };\r\n }\r\n\r\n export interface ISettings {\r\n Hotspots?: IHotspot[];\r\n DrawingScaleFactorX?: number;\r\n DrawingScaleFactorY?: number;\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?: ISettings;\r\n }\r\n\r\n export enum EType {\r\n SVG = \"SVG\"\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n docId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n document: IDocument\r\n }> {\r\n const { api, docId, req: reqParams } = params;\r\n if (!docId) {\r\n throw(\"Doc ID is required.\");\r\n }\r\n const key = GetCacheKey(docId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`documentView/${docId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n document: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n docType?: Type,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n documents: IDocument[]\r\n }> {\r\n let { api, docType: type, req: reqParams } = params;\r\n if (!type) {\r\n type = \"\";\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(type), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = 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(reqParams));\r\n res({\r\n documents: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(type),\r\n value: req,\r\n req: reqParams\r\n });\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\nimport { CustomFormContent } from \"./custom-form-content\";\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?: CustomFormContent.ISection | 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(params: {\r\n api: BruceApi.Api,\r\n formId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n form: IForm\r\n }> {\r\n const { api, formId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Id is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`customForm/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n form: data\r\n });\r\n } catch (err) {\r\n rej(err);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n formId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, formId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Id is required.\");\r\n }\r\n await api.DELETE(`customForm/${id}`, Api.PrepReqParams(reqParams))\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n entityTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n forms: IForm[]\r\n }> {\r\n const { api, entityTypeId: typeId, req: reqParams } = params;\r\n const url = typeId ? `entityType/${typeId}/customForms` : \"customForms\";\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(typeId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(url, Api.PrepReqParams(reqParams));\r\n const prom = req.then((data) => {\r\n return {\r\n forms: data.Items\r\n };\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(typeId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n form: IForm,\r\n reqParams?: Api.IReqParams\r\n }): Promise<{\r\n form: IForm\r\n }> {\r\n const { api, form: data, reqParams } = params;\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n const res = await api.POST(`customForm/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.CustomForm);\r\n return {\r\n form: res\r\n };\r\n }\r\n}","/**\r\n * Describes content of a GENERIC type custom form.\r\n * The alternative type is MARKUP (Markup.IMarkup).\r\n */\r\nexport namespace CustomFormContent {\r\n export enum ECellType {\r\n StaticText = 0,\r\n DataValue,\r\n StaticPicture,\r\n SubSection,\r\n ButtonMore,\r\n EntityPhoto,\r\n EmbeddedMedia,\r\n Chart\r\n }\r\n\r\n export enum EFlowDirection {\r\n Vertically = \"v\",\r\n Horizontally = \"h\"\r\n }\r\n\r\n export interface ISection extends ICell {\r\n Heading?: {\r\n Icon?: string;\r\n Caption?: string;\r\n };\r\n Direction?: EFlowDirection;\r\n Entries?: CellContent.Content[];\r\n }\r\n\r\n export interface ICell {\r\n Type?: ECellType;\r\n Style?: {\r\n BackgroundColor?: string;\r\n TextColor?: string;\r\n };\r\n }\r\n\r\n export namespace CellContent {\r\n export type Content = IStatic | IDataValue | IStaticImage | IMoreButton | IEntityPhoto | IEmbeddedMedia | IChart;\r\n\r\n export interface IStatic extends ICell {\r\n Text?: string;\r\n }\r\n \r\n export interface IDataValue extends ICell {\r\n LabelIcon?: string;\r\n LabelText?: string;\r\n ValuePath?: string;\r\n }\r\n \r\n export interface IStaticImage extends ICell {\r\n ImageUrl?: string;\r\n }\r\n \r\n export interface IMoreButton extends ICell {\r\n ReferredCustomFormID?: number;\r\n }\r\n \r\n export interface IEntityPhoto extends ICell {}\r\n \r\n export interface IEmbeddedMedia {\r\n HTML?: string;\r\n }\r\n \r\n export interface IChart extends ICell {\r\n chartData?: any;\r\n }\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 * @param id\r\n * @param data\r\n * @param duration in seconds until considered expired.\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// Milliseconds between each data cleaning.\r\nconst CLEANER_INTERVAL = 5000;\r\n// Max number of items to clean in each cleaning.\r\nconst MAX_CLEAN_BATCH = 100;\r\n// (Default) Max idle time to keep the cleaner alive.\r\n// Set to default API cache duration by default.\r\nconst DEFAULT_MAX_CLEAN_IDLE = 60 * 5;\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 private cleanerInterval: any = null;\r\n // Max idle time to keep the cleaner alive.\r\n // This value is increased when a new item is added with a larger cache duration.\r\n private maxCleanIdle = DEFAULT_MAX_CLEAN_IDLE;\r\n\r\n constructor(id: string) {\r\n\r\n }\r\n\r\n /**\r\n * @param id\r\n * @param data\r\n * @param duration seconds to keep the data in cache. -1 for infinite.\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 if (duration > -1) {\r\n this.startCleaning();\r\n if (this.maxCleanIdle < duration) {\r\n // Add 5 seconds to be sure cleaner stays alive to get it.\r\n this.maxCleanIdle = duration + 5;\r\n }\r\n }\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 this.stopCleaning();\r\n }\r\n\r\n public Remove(id: Key): void {\r\n delete this.data[id + \"\"];\r\n if (Object.keys(this.data).length <= 0) {\r\n this.stopCleaning();\r\n }\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 if (Object.keys(this.data).length <= 0) {\r\n this.stopCleaning();\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 if (Object.keys(this.data).length <= 0) {\r\n this.stopCleaning();\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\r\n private startCleaning() {\r\n if (this.cleanerInterval == null) {\r\n let cleanIdleStart: number = null;\r\n this.cleanerInterval = setInterval(() => {\r\n let cleaned = 0;\r\n for (const key in this.data) {\r\n const item = this.data[key];\r\n if (item.IsExpired()) {\r\n delete this.data[key];\r\n cleaned += 1;\r\n }\r\n if (cleaned >= MAX_CLEAN_BATCH) {\r\n break;\r\n }\r\n }\r\n if (cleaned <= 0) {\r\n // Stop cleaner if nothing in cache.\r\n if (Object.keys(this.data).length <= 0) {\r\n this.stopCleaning();\r\n }\r\n // Stop cleaner if idle time is reached.\r\n else {\r\n if (cleanIdleStart == null) {\r\n cleanIdleStart = new Date().getTime();\r\n }\r\n const now = new Date().getTime();\r\n if (now - cleanIdleStart > this.maxCleanIdle * 1000) {\r\n this.stopCleaning();\r\n }\r\n }\r\n }\r\n else {\r\n cleanIdleStart = null;\r\n }\r\n }, CLEANER_INTERVAL);\r\n }\r\n }\r\n\r\n private stopCleaning() {\r\n if (this.cleanerInterval != null) {\r\n clearInterval(this.cleanerInterval);\r\n this.cleanerInterval = null;\r\n this.maxCleanIdle = DEFAULT_MAX_CLEAN_IDLE;\r\n }\r\n }\r\n}","import { CacheControl } from \"../common/cache\";\r\nimport { Api } from \"./api\";\r\n\r\n// TODO: Currently checks for CSV vs json specifically,\r\n// Need to see if our api is generally good at setting content-type headers.\r\n// Make it less specific to CSV.\r\nasync function parseResult(data: Response): Promise<any> {\r\n if (data.status == 200) {\r\n let type = data.headers.get(\"Content-Type\");\r\n if (type) {\r\n type = type.trim().toLowerCase();\r\n }\r\n\r\n let encoding = \"\";\r\n const charset = type ? type.split(\";\").find((x) => x.startsWith(\"charset=\")) : \"\";\r\n if (charset && charset.includes(\"=\")) {\r\n encoding = charset.split(\"=\")[1];\r\n encoding = encoding.toLowerCase();\r\n }\r\n // Our API has a very specific utf-16 encoding.\r\n if (encoding == \"utf-16\") {\r\n encoding = Api.EEncoding.UTF16;\r\n }\r\n if (!encoding || encoding == \"utf-8\") {\r\n const text = await data.text();\r\n if (!text || !text.trim()) {\r\n return null;\r\n }\r\n if (type && type.includes(\"text/csv\")) {\r\n return text;\r\n }\r\n return JSON.parse(text);\r\n }\r\n else {\r\n const buffer = await data.arrayBuffer();\r\n const text = new TextDecoder(encoding).decode(buffer);\r\n if (type && type.includes(\"text/csv\")) {\r\n return text;\r\n }\r\n return JSON.parse(text);\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 protected baseUrl: string = \"\";\r\n public Cache: CacheControl<any>;\r\n\r\n constructor(params: {\r\n ssidHeader?: string,\r\n cacheId?: string\r\n }) {\r\n this.ssidHeader = params?.ssidHeader;\r\n this.Cache = new CacheControl<any>(params?.cacheId);\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 GetCacheItem(key: string, reqParams?: Api.IReqParams) {\r\n let noCache = reqParams?.noCache;\r\n if (noCache == null) {\r\n noCache = Api.DEFAULT_NO_CACHE;\r\n }\r\n if (noCache) {\r\n return null;\r\n }\r\n return this.Cache.Get(key);\r\n }\r\n\r\n public async SetCacheItem(params: {\r\n key: string,\r\n value: any,\r\n duration?: number,\r\n req?: Api.IReqParams\r\n }) {\r\n let {key, value, duration, req} = params;\r\n let noCache = req?.noCache;\r\n if (noCache == null) {\r\n noCache = Api.DEFAULT_NO_CACHE;\r\n }\r\n if (noCache) {\r\n return;\r\n }\r\n if (isNaN(duration)) {\r\n duration = Api.DEFAULT_CACHE_DURATION;\r\n }\r\n await this.Cache.Set(key, value, duration);\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 ...params.headers\r\n };\r\n if (this.ssidHeader && this.ssid) {\r\n params.headers[this.ssidHeader] = this.ssid;\r\n }\r\n const res = await fetch(url, {\r\n headers: params.headers\r\n });\r\n return parseResult(res);\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 ...params.headers\r\n };\r\n if (this.ssidHeader && this.ssid) {\r\n params.headers[this.ssidHeader] = this.ssid;\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);\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 ...params.headers\r\n };\r\n if (this.ssidHeader && this.ssid) {\r\n params.headers[this.ssidHeader] = this.ssid;\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);\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 ...params.headers\r\n };\r\n if (this.ssidHeader && this.ssid) {\r\n params.headers[this.ssidHeader] = this.ssid;\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);\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.ssidHeader && this.ssid) {\r\n xhr.setRequestHeader(this.ssidHeader, this.ssid);\r\n }\r\n let formData;\r\n if (params?.formData instanceof FormData) {\r\n formData = params?.formData;\r\n }\r\n else {\r\n 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 }\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 { Api } from \"../api/api\";\r\n\r\nexport namespace MessageBroker {\r\n export enum EAction {\r\n // Subscribes a client to topic messages on a server side.\r\n SUBSCRIBE = \"subscribe\",\r\n // Subscribes a client to a topic without notifying other clients.\r\n SUBSCRIBE_SHADOW = \"subscribeShadow\",\r\n // Unsubscribes clients from topic messages on a server side\r\n UNSUBSCRIBE = \"unsubscribe\",\r\n // Sends a message to all topic subscribers.\r\n BROADCAST = \"broadcast\",\r\n // Requests topic subscribers without subscribing.\r\n GET_TOPIC_SUBSCRIBERS = \"getTopicSubscribers\"\r\n }\r\n\r\n export type SubscribeType = EAction.SUBSCRIBE | EAction.SUBSCRIBE_SHADOW;\r\n\r\n export interface IMessageBase {\r\n topic: string;\r\n event?: string;\r\n data?: any;\r\n }\r\n\r\n export interface IMessage extends IMessageBase {\r\n // Timestamp of message.\r\n time?: number;\r\n // User id of message sender.\r\n user?: string;\r\n action: EAction;\r\n }\r\n\r\n export interface IBroker {\r\n /**\r\n * Add a subscriber to a topic.\r\n * @param topic \r\n * @param callback \r\n * @param action \r\n */\r\n Subscribe: (topic: string, callback: (msg: IMessage) => void, type?: SubscribeType) => void,\r\n /**\r\n * Remove a subscriber from a topic.\r\n * @param topic \r\n * @param callback \r\n */\r\n Unsubscribe: (topic: string, callback: (msg: IMessage) => void) => void,\r\n /**\r\n * Send message to server.\r\n * @param base \r\n * @returns \r\n */\r\n SendMessage: (base: IMessageBase | IMessage) => void;\r\n SetUserId: (userId: string) => void;\r\n IsConnected: boolean;\r\n }\r\n\r\n /**\r\n * Communicates with a server message broker.\r\n */\r\n export class WebSocketBroker implements IBroker {\r\n private subscriptions = new Map<string, ((msg: IMessage) => void)[]>();\r\n private ws: WebSocket;\r\n private reconnects: number = 0;\r\n private maxReconnects: number = 5;\r\n private userId: string;\r\n private uri: string;\r\n private env: Api.Env;\r\n\r\n public constructor(uri: string, env?: Api.Env) {\r\n this.uri = uri;\r\n this.env = env ? env : Api.EEnv.PROD;\r\n this.connect();\r\n }\r\n\r\n public get IsConnected(): boolean {\r\n return this.ws.readyState === WebSocket.OPEN;\r\n }\r\n\r\n public SetUserId(userId: string): void {\r\n this.userId = this.userId ? this.userId : userId;\r\n }\r\n\r\n private connect() {\r\n try {\r\n if (!WebSocket) {\r\n throw new Error(\"WebSocket is not supported by this browser\");\r\n }\r\n this.ws = new WebSocket(this.formatApiUri(this.uri));\r\n this.ws.onopen = this.onOpen.bind(this);\r\n this.ws.onmessage = this.onMessage.bind(this);\r\n this.ws.onerror = this.onError.bind(this);\r\n this.ws.onclose = this.onClose.bind(this);\r\n } \r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private formatApiUri(uri: string): string {\r\n const ws = document.location.protocol === \"https:\" ? \"wss\" : \"ws\";\r\n return uri.replace(/^(https|http)/, ws) + \"websocket\";\r\n }\r\n\r\n private onOpen(ev: any): void {\r\n if (this.env === Api.EEnv.DEV) {\r\n console.log(\"MessageBroker connection opened: \", ev);\r\n }\r\n }\r\n\r\n private onClose(ev: any): void {\r\n if (this.env === Api.EEnv.DEV) {\r\n console.log(\"MessageBroker connection closed, trying to reconnect: \", ev);\r\n }\r\n if (this.reconnects < this.maxReconnects) {\r\n this.reconnects += 1;\r\n setTimeout(() => this.connect(), 5000 * this.reconnects);\r\n }\r\n }\r\n\r\n private onMessage(ev: any): void {\r\n const data: IMessage = JSON.parse(ev.data);\r\n this.subscriptions.get(data.topic)?.forEach(cb => cb(data));\r\n }\r\n\r\n private onError(ev: any): void {\r\n console.error(\"MessageBroker connection error: \", ev);\r\n }\r\n\r\n private addSubscriber(topic: string, callback: (msg: IMessage) => void): void {\r\n const subscribers = this.subscriptions.get(topic) || [];\r\n if (subscribers.includes(callback)) {\r\n return;\r\n }\r\n subscribers.push(callback);\r\n this.subscriptions.set(topic, subscribers);\r\n }\r\n\r\n /**\r\n * Send message to server.\r\n * @param base \r\n * @returns \r\n */\r\n public SendMessage(base: IMessageBase | IMessage): void {\r\n if (this.ws.readyState !== WebSocket.OPEN) {\r\n return;\r\n }\r\n try {\r\n const msg = base as IMessage;\r\n if (!msg.event) {\r\n msg.event = EAction.BROADCAST;\r\n }\r\n let message = base.data ? base.data : {};\r\n if (typeof message == \"object\") {\r\n message = JSON.stringify(message);\r\n }\r\n msg.data = message;\r\n\r\n const outgoingMessage: IMessage = { ...msg, user: this.userId, time: Date.now() };\r\n this.ws.send(JSON.stringify(outgoingMessage));\r\n } \r\n catch (e) {\r\n console.warn(e);\r\n }\r\n }\r\n\r\n /**\r\n * Add a subscriber to a topic.\r\n * @param topic \r\n * @param callback \r\n * @param action \r\n */\r\n public Subscribe(topic: string, callback: (msg: IMessage) => void, action?: SubscribeType): void {\r\n if (!action) {\r\n action = EAction.SUBSCRIBE;\r\n }\r\n this.addSubscriber(topic, callback);\r\n this.SendMessage({ topic, action });\r\n }\r\n\r\n /**\r\n * Remove a subscriber from a topic.\r\n * @param topic \r\n * @param callback \r\n */\r\n public Unsubscribe(topic: string, callback: (msg: IMessage) => void): void {\r\n const subscribers = this.subscriptions.get(topic) || [];\r\n this.subscriptions.set(topic, subscribers.filter(fn => fn != callback));\r\n this.SendMessage({ topic, action: EAction.UNSUBSCRIBE });\r\n }\r\n\r\n public RequestTopicUsers(topic: string, callback: (msg: IMessage) => void): void {\r\n this.addSubscriber(topic, callback);\r\n this.SendMessage({ topic, event: EAction.GET_TOPIC_SUBSCRIBERS });\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/Idm Api,\r\n * it should be passed to any method that wants to communicate with this particular api.\r\n */\r\nexport namespace GuardianApi {\r\n export interface IGetter {\r\n // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n // Should return using app defaults if no params are specified.\r\n getApi: (env?: A.EEnv) => GuardianApi.Api;\r\n }\r\n\r\n export class Api extends AbstractApi {\r\n private env: A.Env;\r\n\r\n constructor(params: {\r\n env?: A.Env\r\n }) {\r\n super({\r\n ssidHeader: \"x-sessionid\",\r\n cacheId: `GUARDIAN_API_${params?.env}_`\r\n });\r\n this.env = params?.env ? params.env : A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n\r\n private setBaseUrl(): void {\r\n let url = \"https://guardian.nextspace\";\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n url += \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n url += \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n url += \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url += \".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 { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { CamApi } from \"../api/cam-api\";\r\nimport { GuardianApi } from \"../api/guardian-api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { AccountSettings } from \"./account-settings\";\r\n\r\nconst ACCOUNT_EXCLUSIONS = [\"hyperportal\", \"hypeportal\", \"bviewer\"];\r\n\r\n/**\r\n * Describes the \"Client Account\" concept within Bruce.\r\n * A client account is a database instance that holds one or many users.\r\n */\r\nexport namespace Account {\r\n export function GetCacheKey(accountId: string, appSettingsId?: string): string {\r\n if (appSettingsId) {\r\n return Api.ECacheKey.Account + Api.ECacheKey.Id + accountId + Api.ECacheKey + appSettingsId;\r\n }\r\n return Api.ECacheKey.Account + Api.ECacheKey.Id + accountId;\r\n }\r\n\r\n export function GetListCacheKey(ssid: string): string {\r\n return Api.ECacheKey.Account + Api.ECacheKey.Session + Api.ECacheKey.Id + ssid;\r\n }\r\n\r\n export function GetDbRegionListCacheKey() {\r\n return Api.ECacheKey.DatabaseRegion;\r\n }\r\n\r\n export enum EAppId {\r\n BruceApi = \"BruceAPI\",\r\n Navigator = \"Navigator\",\r\n }\r\n\r\n export type AppId = EAppId | string;\r\n\r\n export enum EStarterContent {\r\n Default = \"default\",\r\n None = \"none\"\r\n }\r\n\r\n export interface IAccount {\r\n ID?: string;\r\n Name?: string;\r\n \"ClientAccount.ID\"?: string;\r\n \"Application.ID\"?: string;\r\n \"BruceAPI\"?: string;\r\n \"Settings\"?: any;\r\n \"OwnerUser.ID\"?: string;\r\n // This will depend on what \"appSettingsId\" you request for.\r\n \"Application.Settings\"?: AccountSettings.Settings;\r\n }\r\n\r\n export async function Get(params: {\r\n api: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n account: IAccount\r\n }> {\r\n const { api, accountId: id, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`account/${id}`, reqParams);\r\n const resData = {\r\n account: req\r\n };\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: resData,\r\n req: reqParams\r\n });\r\n return resData;\r\n }\r\n\r\n export async function GetRelatedList(params: {\r\n api: IdmApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n accounts: IAccount[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(api.GetSessionId()), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(\"user/relatedClientAccounts\", reqParams);\r\n const prom: Promise<{ accounts: IAccount[] }> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n const items = data.Items.filter((x: IAccount) => !ACCOUNT_EXCLUSIONS.includes(<string>x.ID))\r\n res({\r\n accounts: items\r\n });\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(api.GetSessionId()),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetAppSettings(params: {\r\n api: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n appId: AppId,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: AccountSettings.Settings\r\n }> {\r\n const { api, accountId: id, appId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id, appId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = await api.GET(`account/${id}?ApplicationID=${appId}`, reqParams);\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n const settings = data?.[ \"Application.Settings\" ] ?? {};\r\n res({\r\n settings: settings\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id, appId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * WARNING: Do not update API settings without knowing what you're doing.\r\n * @param params\r\n * @returns\r\n */\r\n export async function UpdateAppSettings(params: {\r\n api: CamApi.Api | GuardianApi.Api,\r\n accountId: string,\r\n appId: string,\r\n settings: AccountSettings.Settings,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: AccountSettings.Settings\r\n }> {\r\n const { api, accountId: id, appId, settings: data, req: reqParams } = params;\r\n const res = await api.POST(`account/${id}/applicationSettings/${appId}`, data, reqParams);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Account + Api.ECacheKey.Id + id);\r\n return {\r\n settings: res\r\n };\r\n }\r\n\r\n /**\r\n * Creates a new Bruce account using given details.\r\n * @param params\r\n * @returns\r\n */\r\n export async function Create(params: {\r\n api: BruceApi.Api,\r\n accountId: string,\r\n name: string,\r\n hostingLocationKey: string,\r\n starterContent?: EStarterContent,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n account: IAccount\r\n }> {\r\n let { api, accountId: id, name, hostingLocationKey, starterContent, req: reqParams } = params;\r\n if (!id || !name || !hostingLocationKey) {\r\n throw new Error(\"Id, Name and hostingLocationKey are required.\");\r\n }\r\n if (!starterContent) {\r\n starterContent = EStarterContent.None;\r\n }\r\n const reqData = {\r\n \"Name\": name,\r\n \"HostingLocation.Key\": hostingLocationKey,\r\n \"StarterContent\": starterContent\r\n }\r\n const res = await api.POST(`clientAccount/${id}`, reqData, Api.PrepReqParams(reqParams));\r\n const resData = {\r\n account: res\r\n };\r\n api.Cache.Remove(GetListCacheKey(api.GetSessionId()));\r\n return resData;\r\n }\r\n}","import { Account } from \"../account/account\";\r\nimport { AccountSettings } from \"../account/account-settings\";\r\nimport { Api } from \"../api/api\";\r\nimport { GuardianApi } from \"../api/guardian-api\";\r\n\r\n/**\r\n * A hosting location is a record for a possible bruce-api server configuration.\r\n * A hosting location will have one or many database servers as well, this is an additional setting.\r\n */\r\nexport namespace HostingLocation {\r\n export interface ILocation {\r\n // Internal ID.\r\n ID: number;\r\n // External ID.\r\n Key: string;\r\n // Indicates if creation of a new bruce account is allowed in this region.\r\n // This should dictate if the record is visible in UI dropdowns as well for non-super-admins.\r\n IsEnabledForNewAccounts: boolean;\r\n DisplayName?: string;\r\n Description?: string;\r\n // Eg: \"us-west-1\".\r\n AWSRegion?: string;\r\n // Eg: \"Singapore\".\r\n Country?: string;\r\n // Eg: \"Vultr\".\r\n Hoster?: string;\r\n // Eg: \"San Francisco\".\r\n City?: string;\r\n // URL template to the corresponding API instance.\r\n // Eg: \"https://<ACCOUNTID>.api.nextspace-us.host/\".\r\n BruceAPIURL?: string;\r\n // Comma separated list of Api.EEnv.\r\n Environment?: string;\r\n // Arbitrary settings for the particular location.\r\n // For example this may include CDN template URLs.\r\n Settings?: any;\r\n }\r\n\r\n /**\r\n * @Warning: This will not return the Settings property.\r\n * @param params\r\n * @returns\r\n */\r\n export async function GetList(params: {\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n locations: ILocation[]\r\n }> {\r\n const res = await params.api.GET(\"hostinglocations\", Api.PrepReqParams(params.req));\r\n return {\r\n locations: res.Items\r\n };\r\n }\r\n\r\n export async function GetById(params: {\r\n id: number,\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n const { id, api, req } = params;\r\n if (!id) {\r\n throw(\"Invalid id\");\r\n }\r\n const res = await api.GET(`hostinglocation/id/${id}`, Api.PrepReqParams(req));\r\n return {\r\n location: res\r\n };\r\n }\r\n\r\n export async function GetByKey(params: {\r\n key: string,\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n const { key, api, req } = params;\r\n if (!key) {\r\n throw(\"Invalid key\");\r\n }\r\n const res = await api.GET(`hostinglocation/key/${key}`, Api.PrepReqParams(req));\r\n return {\r\n location: res\r\n };\r\n }\r\n\r\n /**\r\n * Returns hostingLocationKey from given db url.\r\n * Some older accounts don't have this set, so we need to guess it.\r\n * @param params\r\n * @returns\r\n */\r\n export function GuessKey(params: {\r\n // Database connection string.\r\n DBServer?: string\r\n }) {\r\n const { DBServer: databaseUrl } = params;\r\n if (databaseUrl.includes(\"hyperfarm-prod-instance-1\")) {\r\n return \"HYPERFARM\";\r\n }\r\n if (databaseUrl.includes(\"prod-syd1.nextspace.host\")) {\r\n return \"AU-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-nyc1.nextspace.host\")) {\r\n return \"US-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-ams1.nextspace.host\")) {\r\n return \"EU-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"prod-sing1.nextspace.host\")) {\r\n return \"SE-VULTR-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\"dev-first\")) {\r\n return \"DEV-FIRST\";\r\n }\r\n else if (databaseUrl.includes(\".ap-southeast-1.\")) {\r\n return \"SE\";\r\n }\r\n else if (databaseUrl.includes(\".us-west-1.\")) {\r\n return \"US\";\r\n }\r\n else if (databaseUrl.includes(\".eu-west-3.\")) {\r\n return \"EU\";\r\n }\r\n else if (databaseUrl.includes(\"bruce-prod-au\")) {\r\n return \"AU\";\r\n }\r\n else if (databaseUrl.includes(\"bruce-dev\")) {\r\n return \"DEV\";\r\n }\r\n return null;\r\n }\r\n\r\n export async function GetKeyByAccountId(params: {\r\n // Either accountId or apiSettings must be provided.\r\n accountId?: string,\r\n apiSettings?: AccountSettings.IBruceApi,\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n key: string,\r\n // Indicates if the key was inferred by legacy data.\r\n isLegacy?: boolean\r\n }> {\r\n const { accountId, apiSettings, api, req } = params;\r\n if (!accountId && !apiSettings) {\r\n throw(\"Invalid accountId or apiSettings\");\r\n }\r\n const settings = apiSettings ? apiSettings : (await Account.GetAppSettings({\r\n api,\r\n accountId,\r\n appId: Account.EAppId.BruceApi\r\n })).settings as AccountSettings.IBruceApi;\r\n let hostingKey = settings[\"HostingLocation.Key\"];\r\n let isLegacy = false;\r\n if (!hostingKey) {\r\n hostingKey = settings.DBLocation;\r\n isLegacy = true;\r\n }\r\n if (!hostingKey) {\r\n hostingKey = GuessKey({\r\n DBServer: settings.DBServer\r\n });\r\n isLegacy = true;\r\n }\r\n return {\r\n key: hostingKey,\r\n isLegacy\r\n };\r\n }\r\n\r\n export async function GetByAccountId(params: {\r\n // Either accountId or apiSettings must be provided.\r\n accountId?: string,\r\n apiSettings?: AccountSettings.IBruceApi,\r\n api: GuardianApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n location: ILocation\r\n }> {\r\n const { accountId, apiSettings, api, req } = params;\r\n const data = await GetKeyByAccountId({\r\n accountId,\r\n apiSettings,\r\n api,\r\n req\r\n });\r\n if (!data?.key) {\r\n return null;\r\n }\r\n const key = await GetByKey({\r\n key: data.key,\r\n api,\r\n req\r\n });\r\n return key;\r\n }\r\n}","import { Account } from \"../account/account\";\r\nimport { AbstractApi } from \"./abstract-api\";\r\nimport { Api as A } from \"./api\";\r\nimport { MessageBroker } from \"../server/message-broker\";\r\nimport { AccountSettings } from \"../account/account-settings\";\r\nimport { GuardianApi } from \"./guardian-api\";\r\nimport { HostingLocation } from \"../server/hosting-location\";\r\n\r\nexport namespace BruceApi {\r\n export interface IGetter {\r\n // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n accountId: string;\r\n // Should return using app defaults if no params are specified.\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 accountId: string;\r\n private env: A.Env;\r\n private loadProm: Promise<void>;\r\n private loadCancelled: boolean = false;\r\n private messageBroker: MessageBroker.IBroker;\r\n public get MessageBroker(): MessageBroker.IBroker {\r\n return this.messageBroker;\r\n }\r\n // Used for entity GET list-by-filter requests.\r\n // When set and viaCdn = true when performing an entity request, this will be used in place for base-url.\r\n // Eg: \"https://d3pb232f6pp9if.cloudfront.net/entitiesListForCDN/alex\"\r\n public EntityCdnUrl: string;\r\n // Works only for static/dynamic tilesets.\r\n // When set and viaCdn = true when getting a legacy tileset file, this will be used in place for base-url.\r\n // Eg: \"https://d15gsaz0jz5ika.cloudfront.net/alex/<TILESETID>/file/<FILEPATH>\"\r\n public LegacyTilesetCdnUrl: string;\r\n\r\n // Indicates if the init process has finished loading.\r\n // This means the regional base url has been set and message broker is ready.\r\n public get Loading(): Promise<void> {\r\n return this.loadProm;\r\n }\r\n\r\n /**\r\n * @param params\r\n */\r\n constructor(params: {\r\n // Required client account to connect to.\r\n accountId: string,\r\n // Default is PROD.\r\n env?: A.Env,\r\n // @Deprecated, use loadConfig instead.\r\n loadRegionalBaseUrl?: boolean\r\n // True to load settings for regional base url and CDN.\r\n /// Default = false.\r\n loadConfig?: boolean\r\n // Guardian instance used for regional url loading.\r\n // If not provided then a new instance of the API is made.\r\n guardian?: GuardianApi.Api,\r\n }) {\r\n super({\r\n ssidHeader: \"x-sessionid\",\r\n cacheId: `BRUCE_API_${params?.env}_${params?.accountId}_`\r\n });\r\n let {accountId, env, guardian, loadRegionalBaseUrl, loadConfig} = params;\r\n this.accountId = accountId;\r\n this.env = env ?? A.EEnv.PROD;\r\n\r\n if (loadRegionalBaseUrl) {\r\n loadConfig = true;\r\n }\r\n if (!guardian && loadConfig) {\r\n guardian = new GuardianApi.Api({\r\n env: this.env\r\n });\r\n }\r\n this.loadProm = this.init(guardian, loadConfig);\r\n }\r\n\r\n /**\r\n * Loads regional base url and sets up message broker.\r\n * @param guardian Required for loading regional base url.\r\n * @param loadConfig\r\n * @returns\r\n */\r\n private async init(\r\n guardian?: GuardianApi.Api,\r\n loadConfig?: boolean\r\n ): Promise<void> {\r\n if (!this.accountId) {\r\n throw(\"accountId is required.\");\r\n }\r\n\r\n const env = this.env.toUpperCase();\r\n let domain = \"nextspace.host\";\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n domain = \"nextspace-dev.net\";\r\n break;\r\n case A.EEnv.STG:\r\n domain = \"nextspace-stg.net\";\r\n break;\r\n case A.EEnv.UAT:\r\n domain = \"nextspace-uat.net\";\r\n break;\r\n case A.EEnv.PROD:\r\n domain = \"nextspace.host\";\r\n break;\r\n default:\r\n console.error(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n\r\n // Set using a stable default.\r\n this.baseUrl = `https://${this.accountId}.api.${domain}/`;\r\n\r\n if (guardian && loadConfig) {\r\n try {\r\n const host = await HostingLocation.GetByAccountId({\r\n accountId: this.accountId,\r\n api: guardian\r\n });\r\n if (host?.location) {\r\n const settings = host.location.Settings;\r\n\r\n // Attempt to load regional base url.\r\n // First try go through settings.\r\n let urlSet = false;\r\n if (settings?.BruceAPIURL) {\r\n let envUrl = settings.BruceAPIURL[env];\r\n if (envUrl) {\r\n envUrl = envUrl\r\n .replace(\"<ACCOUNTID>\", this.accountId)\r\n .replace(\"<ACCOUNT>\", this.accountId)\r\n if (envUrl && envUrl.length > 1) {\r\n this.baseUrl = envUrl;\r\n urlSet = true;\r\n }\r\n }\r\n }\r\n // Try go through host location's base url.\r\n // This may be wrong env which is why it's used as fallback right now.\r\n if (!urlSet && host.location.BruceAPIURL) {\r\n const regionalUrl = host.location.BruceAPIURL\r\n .replace(\"<ACCOUNTID>\", this.accountId)\r\n .replace(\"<ACCOUNT>\", this.accountId)\r\n .replace(\"<DOMAIN>\", domain);\r\n if (regionalUrl && regionalUrl.length > 1) {\r\n this.baseUrl = regionalUrl;\r\n urlSet = true;\r\n }\r\n }\r\n\r\n // Attempt to load CDN settings.\r\n if (settings?.CDN) {\r\n this.EntityCdnUrl = settings.CDN.entityURL?.[env];\r\n // We need to fix our configs.\r\n if (this.EntityCdnUrl) {\r\n if (this.EntityCdnUrl.includes(\"entitiesListForCDN\")) {\r\n this.EntityCdnUrl = this.EntityCdnUrl.replace(\"<ACCOUNT>\", this.accountId);\r\n }\r\n else {\r\n this.EntityCdnUrl = this.EntityCdnUrl.replace(\"<ACCOUNT>\", \"entitiesListForCDN/\" + this.accountId);\r\n }\r\n }\r\n this.LegacyTilesetCdnUrl = settings.CDN.legacyTilesetURL?.[env];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n try {\r\n this.messageBroker = new MessageBroker.WebSocketBroker(this.baseUrl, this.env);\r\n }\r\n catch (e) {\r\n console.warn(\"BruceApi: Failed to create message broker.\", e);\r\n }\r\n }\r\n\r\n /**\r\n * Warning: This method does not wait for init to finish loading.\r\n * This means the url could be changed once fully initialized.\r\n * The url will be valid either way, but the loaded one may be faster as it is region specific.\r\n * Await the \"Loading\" promise if you care about this.\r\n * @returns\r\n */\r\n public GetBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n\r\n /**\r\n * Warning: This will cancel the init process.\r\n * The init process loads a region specific endpoint.\r\n * Setting a base url will stop that process from completing.\r\n * @param url\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 this.loadCancelled = true;\r\n }\r\n\r\n public async GET(url: string, params?: A.IReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.get(this.baseUrl + url, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\r\n }\r\n\r\n public async DELETE(url: string, params?: A.IReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.delete(this.baseUrl + url, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\r\n }\r\n\r\n public async POST(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.post(this.baseUrl + url, data, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\r\n }\r\n\r\n public async PUT(url: string, data: any, params?: A.IReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.put(this.baseUrl + url, data, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\r\n }\r\n\r\n public async UPLOAD(url: string, blob: Blob, params?: A.IUploadReqParams): Promise<any> {\r\n return new Promise((res, rej) => {\r\n this.loadProm.then(() => {\r\n this.upload(this.baseUrl + url, blob, params).then(res).catch(rej);\r\n }).catch(rej);\r\n });\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 * @deprecated Please use GuardianApi instead.\r\n */\r\nexport namespace CamApi {\r\n export interface IGetter {\r\n // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n // Should return using app defaults if no params are specified.\r\n getApi: (env?: A.EEnv) => CamApi.Api;\r\n }\r\n\r\n export class Api extends AbstractApi {\r\n private env: A.Env;\r\n\r\n constructor(params: {\r\n env?: A.Env\r\n }) {\r\n super({\r\n ssidHeader: \"x-sessionid\",\r\n cacheId: `CAM_API_${params?.env}_`\r\n });\r\n this.env = params?.env ? params.env : A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n\r\n private setBaseUrl(): void {\r\n let codeWord = \"cam\"\r\n let url = \"https://<CODEWORD>.nextspace\";\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n codeWord = \"guardian\";\r\n url += \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n codeWord = \"guardian\";\r\n url += \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n codeWord = \"guardian\";\r\n url += \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url += \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n url = url.replace(\"<CODEWORD>\", codeWord);\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\n/**\r\n * * @deprecated Please use GuardianApi instead.\r\n */\r\nexport namespace IdmApi {\r\n export interface IGetter {\r\n // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n // Should return using app defaults if no params are specified.\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 env: A.Env;\r\n\r\n constructor(params: {\r\n env?: A.Env\r\n }) {\r\n super({\r\n ssidHeader: \"SSID\",\r\n cacheId: `IDM_API_${params?.env}_`\r\n });\r\n this.env = params?.env ? params.env : A.EEnv.PROD;\r\n this.setBaseUrl();\r\n }\r\n\r\n private setBaseUrl(): void {\r\n let codeWord = \"idm\"\r\n let url = \"https://<CODEWORD>.nextspace\";\r\n const env = this.env.toUpperCase();\r\n switch (env) {\r\n case A.EEnv.DEV:\r\n codeWord = \"guardian\";\r\n url += \"-dev.net/\";\r\n break;\r\n case A.EEnv.STG:\r\n codeWord = \"guardian\";\r\n url += \"-stg.net/\";\r\n break;\r\n case A.EEnv.UAT:\r\n codeWord = \"guardian\";\r\n url += \"-uat.net/\";\r\n break;\r\n case A.EEnv.PROD:\r\n url += \".host/\";\r\n break;\r\n default:\r\n throw(\"Specified Environment is not valid. SuppliedEnv=\" + env);\r\n }\r\n url = url.replace(\"<CODEWORD>\", codeWord);\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 // Default settings the getter's app is running on.\r\n env: A.EEnv;\r\n // Should return using app defaults if no params are specified.\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 env: A.Env;\r\n\r\n constructor(params: {\r\n env?: A.Env\r\n }) {\r\n super({\r\n ssidHeader: \"x-sessionid\",\r\n cacheId: `GLOBAL_API_${params?.env}_`\r\n });\r\n this.env = params?.env ? params.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}","import { IDictionary } from \"../common/dictionary\";\r\nimport { Api } from \"./api\";\r\nimport { BruceApi } from \"./bruce-api\";\r\nimport { CamApi } from \"./cam-api\";\r\nimport { GlobalApi } from \"./global-api\";\r\nimport { GuardianApi } from \"./guardian-api\";\r\nimport { IdmApi } from \"./idm-api\";\r\n\r\nexport class ApiGetters {\r\n private bruce: IDictionary<BruceApi.Api> = {};\r\n private idm: IDictionary<IdmApi.Api> = {};\r\n private cam: IDictionary<CamApi.Api> = {};\r\n private guardian: IDictionary<GuardianApi.Api> = {};\r\n private global: IDictionary<GlobalApi.Api> = {};\r\n private accountId: string;\r\n private env: Api.EEnv;\r\n private sessionId: string;\r\n\r\n constructor(params: {\r\n accountId: string,\r\n env?: Api.EEnv,\r\n sessionId?: string\r\n }) {\r\n this.accountId = params?.accountId;\r\n this.env = params?.env ? params.env : Api.EEnv.PROD;\r\n this.sessionId = params?.sessionId;\r\n }\r\n\r\n public SetAccountId(accountId: string) {\r\n this.accountId = accountId;\r\n }\r\n\r\n public GetAccountId(): string {\r\n return this.accountId;\r\n }\r\n\r\n public SetEnv(env: Api.EEnv) {\r\n this.env = env;\r\n }\r\n\r\n public GetEnv(): Api.EEnv {\r\n return this.env;\r\n }\r\n\r\n public SetSessionId(sessionId: string) {\r\n this.sessionId = sessionId;\r\n for (const key in this.bruce) {\r\n this.bruce[key].SetSessionId(sessionId);\r\n }\r\n for (const key in this.idm) {\r\n this.idm[key].SetSessionId(sessionId);\r\n }\r\n for (const key in this.cam) {\r\n this.cam[key].SetSessionId(sessionId);\r\n }\r\n for (const key in this.global) {\r\n this.global[key].SetSessionId(sessionId);\r\n }\r\n }\r\n\r\n public GetSessionId(): string {\r\n return this.sessionId;\r\n }\r\n\r\n public GetBruceApi(params: {\r\n accountId?: string,\r\n env?: Api.EEnv\r\n }): BruceApi.Api {\r\n let {accountId, env} = params;\r\n accountId = accountId ? accountId : this.accountId;\r\n env = env ? env : this.env;\r\n const key = `${accountId}-${env}`;\r\n if (!this.bruce[key]) {\r\n this.bruce[key] = new BruceApi.Api({\r\n accountId,\r\n env,\r\n loadRegionalBaseUrl: true\r\n });\r\n this.bruce[key].SetSessionId(this.sessionId);\r\n }\r\n return this.bruce[key];\r\n }\r\n\r\n public GetBruceGetter(): BruceApi.IGetter {\r\n return {\r\n accountId: this.accountId,\r\n env: this.env,\r\n getApi: (accountId?: string, env?: Api.EEnv) => {\r\n return this.GetBruceApi({accountId, env});\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deprecated: Use GetGuardianApi instead.\r\n * @returns\r\n */\r\n public GetIdmApi(params: {\r\n env?: Api.EEnv\r\n }): IdmApi.Api {\r\n let {env} = params;\r\n env = env ? env : this.env;\r\n const key = `${env}`;\r\n if (!this.idm[key]) {\r\n this.idm[key] = new IdmApi.Api({\r\n env\r\n });\r\n this.idm[key].SetSessionId(this.sessionId);\r\n }\r\n return this.idm[key];\r\n }\r\n\r\n /**\r\n * Deprecated: Use GetGuardianGetter instead.\r\n * @returns\r\n */\r\n public GetIdmGetter(): IdmApi.IGetter {\r\n return {\r\n env: this.env,\r\n getApi: (env?: Api.EEnv) => {\r\n return this.GetIdmApi({env});\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deprecated: Use GetGuardianApi instead.\r\n * @returns\r\n */\r\n public GetCamApi(params: {\r\n env?: Api.EEnv\r\n }): CamApi.Api {\r\n let {env} = params;\r\n env = env ? env : this.env;\r\n const key = `${env}`;\r\n if (!this.cam[key]) {\r\n this.cam[key] = new CamApi.Api({\r\n env\r\n });\r\n this.cam[key].SetSessionId(this.sessionId);\r\n }\r\n return this.cam[key];\r\n }\r\n\r\n /**\r\n * Deprecated: Use GetGuardianGetter instead.\r\n * @returns\r\n */\r\n public GetCamGetter(): CamApi.IGetter {\r\n return {\r\n env: this.env,\r\n getApi: (env?: Api.EEnv) => {\r\n return this.GetCamApi({env});\r\n }\r\n }\r\n }\r\n\r\n public GetGlobalApi(params: {\r\n env?: Api.EEnv\r\n }): GlobalApi.Api {\r\n let {env} = params;\r\n env = env ? env : this.env;\r\n const key = `${env}`;\r\n if (!this.global[key]) {\r\n this.global[key] = new GlobalApi.Api({\r\n env\r\n });\r\n this.global[key].SetSessionId(this.sessionId);\r\n }\r\n return this.global[key];\r\n }\r\n\r\n public GetGlobalGetter(): GlobalApi.IGetter {\r\n return {\r\n env: this.env,\r\n getApi: (env?: Api.EEnv) => {\r\n return this.GetGlobalApi({env});\r\n }\r\n }\r\n }\r\n\r\n public GetGuardianApi(params: {\r\n env?: Api.EEnv\r\n }): GuardianApi.Api {\r\n let {env} = params;\r\n env = env ? env : this.env;\r\n const key = `${env}`;\r\n if (!this.guardian[key]) {\r\n this.guardian[key] = new GuardianApi.Api({\r\n env\r\n });\r\n this.guardian[key].SetSessionId(this.sessionId);\r\n }\r\n return this.guardian[key];\r\n }\r\n\r\n public GetGuardianGetter(): GuardianApi.IGetter {\r\n return {\r\n env: this.env,\r\n getApi: (env?: Api.EEnv) => {\r\n return this.GetGuardianApi({env});\r\n }\r\n }\r\n }\r\n}","export namespace Color {\n export interface IColor {\n // Max: 255, Min: 0.\n red: number;\n green: number;\n blue: number;\n // Max: 1, Min: 0.\n alpha: number ;\n }\n\n export enum EBlendMode {\n HIGHLIGHT,\n REPLACE,\n MIX\n }\n\n export interface IBlendSettings {\n blendMode?: EBlendMode;\n // 1 = 100% new color. 0 = original color.\n blendPercent?: number;\n }\n\n export function RandomColor(): IColor {\n // https://stackoverflow.com/a/7352887\n const brightness = 4;\n const rgb = [Math.random() * 256, Math.random() * 256, Math.random() * 256];\n const mix = [brightness * 51, brightness * 51, brightness * 51];\n const mixedrgb = [rgb[0] + mix[0], rgb[1] + mix[1], rgb[2] + mix[2]].map(function(x){\n return Math.round(x / 2.0);\n });\n const str = \"rgba(\" + mixedrgb.join(\",\") + \",0.9\" + \")\";\n return ColorFromStr(str);\n }\n\n /**\n * Attempts to parse a given color string into a model.\n * @param str \n * @returns \n */\n export function ColorFromStr(str: string): IColor {\n let r,g,b,a;\n const rgba = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([^\\)]+)\\s*)?\\)$/.exec(str);\n if (rgba) {\n r = parseInt(rgba[1]);\n g = parseInt(rgba[2]);\n b = parseInt(rgba[3]);\n a = rgba[4] != null ? parseFloat(rgba[4]) : 1;\n return {\n red: r,\n green: g,\n blue: b,\n alpha: a\n }\n }\n if (str.charAt(0) == \"#\") {\n str = str.substring(1);\n }\n if (str.length == 6) {\n // rgb.\n const parsed = /^(.{2})(.{2})(.{2})/.exec(str);\n if (!parsed) {\n return <any>null;\n }\n r = parseInt(parsed[1], 16);\n g = parseInt(parsed[2], 16);\n b = parseInt(parsed[3], 16);\n a = 1;\n }\n else if (str.length == 8) {\n // rgba.\n const parsed = /^(.{2})(.{2})(.{2})(.{2})/.exec(str);\n if (!parsed) {\n return <any>null;\n }\n r = parseInt(parsed[1], 16);\n g = parseInt(parsed[2], 16);\n b = parseInt(parsed[3], 16);\n a = parseInt(parsed[4], 16);\n if (a != 0) {\n a = a/255;\n }\n }\n else {\n return <any>null;\n }\n if (a == null) {\n a = 1;\n }\n return {\n red: r,\n blue: b,\n green: g,\n alpha: a\n }\n }\n}","export namespace ObjectUtils {\n /**\n * Generates a Bruce compatible UID.\n * @returns \n */\n export function UId(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n}","/**\n * Utility to help with parsing and wrapping Bruce paths.\n */\nexport namespace PathUtils {\n export function Parse(str: string): string[] {\n if (!str) {\n return [];\n }\n const broken: string[] = str.split(\"\\\"/\\\"\");\n if (broken.length > 0) {\n let top = broken[0];\n if (top.length > 0) {\n if (top.charAt(0) == \"\\\"\") {\n top = top.substring(1);\n }\n broken[0] = top;\n }\n const endIndex = broken.length - 1;\n let bot = broken[endIndex];\n if (bot.length > 0) {\n if (bot.charAt(bot.length - 1) == \"\\\"\") {\n bot = bot.substring(0, bot.length - 1);\n }\n broken[endIndex] = bot;\n }\n }\n return broken;\n }\n\n export function Wrap(path: string[]): string {\n let tmp: string = \"\\\"\";\n for (let i = 0; i < path.length; i++) {\n let section = path[i];\n tmp += section;\n if (i < path.length - 1) {\n tmp += \"\\\"/\\\"\";\n }\n }\n tmp += \"\\\"\";\n return tmp;\n }\n\n export function ParseLegacy(str: string): string[] {\n const broken: string[] = str.split(\".\");\n for (let i = 0; i < broken.length; i++) {\n let piece = broken[0];\n if (piece.charAt(0) == \"\\\"\") {\n piece = broken[0] = piece.substring(1);\n }\n if (piece.charAt(piece.length - 1) == \"\\\"\") {\n broken[0] = piece.substring(0, piece.length - 1);\n }\n }\n return broken;\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Bounds } from \"../common/bounds\";\r\nimport { Geometry } from \"../common/geometry\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { Transform } from \"../common/transform\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { EntityType } from \"./entity-type\";\r\nimport { PathUtils } from \"../util/path-utils\";\r\nimport { IDictionary } from \"../common/dictionary\";\r\nimport { Carto } from \"../bruce-models\";\r\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, entityTypeId?: string, expandLocation?: boolean): string {\r\n if (!entityTypeId) {\r\n entityTypeId = \"\";\r\n }\r\n return `${Api.ECacheKey.Entity}${Api.ECacheKey.Id}${entityId}${String(entityTypeId)}${String(Boolean(expandLocation))}`;\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 // Available if expandLocation is true.\r\n // Related tileset ids if any.\r\n tilesetID?: string[];\r\n // Available if expandLocation is true.\r\n // Relative offset to parent node.\r\n worldPosition?: number[][];\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n // (Optional) Entity type ID to load specific schema.\r\n entityTypeId?: string;\r\n expandLocation?: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entity: IEntity\r\n }> {\r\n const { api, entityId, req: reqParams, expandLocation, entityTypeId } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const key = GetCacheKey(entityId, entityTypeId, expandLocation);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const urlParams = new URLSearchParams();\r\n if (expandLocation) {\r\n urlParams.append(\"$expand\", \"location\");\r\n }\r\n if (entityTypeId) {\r\n urlParams.append(\"BruceEntityType\", entityTypeId);\r\n }\r\n const data = await api.GET(\r\n `entity/${entityId}?${urlParams.toString()}`,\r\n Api.PrepReqParams(reqParams)\r\n );\r\n res({\r\n entity: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetListByIds(params: {\r\n api: BruceApi.Api,\r\n entityIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entities: IEntity[]\r\n }> {\r\n const { api, entityIds, req: reqParams } = params;\r\n if (!entityIds.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n const reqs: Promise<{ entity: IEntity }>[] = [];\r\n const reqIds: string[] = [];\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n const key = GetCacheKey(entityId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\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<Entity.IEntity>> = api.POST(\"entities\", reqData, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < reqIds.length; i++) {\r\n const entityId = reqIds[i];\r\n const key = GetCacheKey(entityId);\r\n const prom: Promise<{ entity: IEntity }> = new Promise(async (res) => {\r\n try {\r\n const data = await req;\r\n const item = data.Items.find(x => x.Bruce.ID == entityId);\r\n res({\r\n entity: item\r\n });\r\n }\r\n catch (e) {\r\n // No showing error as we don't want to see it 2000 times.\r\n }\r\n res(<any>null);\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n reqs.push(prom);\r\n }\r\n }\r\n return {\r\n entities: (await Promise.all(reqs)).map(x => x?.entity).filter(x => !!x)\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n\r\n export async function DeleteList(params: {\r\n api: BruceApi.Api,\r\n entityIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityIds, req: reqParams } = params;\r\n if (!entityIds?.length) {\r\n throw(\"Entity IDs are required.\");\r\n }\r\n await api.POST(\"deleteEntities\", {\r\n Items: entityIds\r\n }, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n entity: IEntity,\r\n override: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entity: IEntity\r\n }> {\r\n const { api, entity: data, override, req: reqParams } = params;\r\n if (!data?.Bruce?.[\"EntityType.ID\"]) {\r\n throw(\"Entity Type ID is required.\");\r\n }\r\n if (!data?.Bruce?.ID) {\r\n data.Bruce = {\r\n ...data.Bruce,\r\n ID: ObjectUtils.UId()\r\n };\r\n }\r\n const reqUrl = `entity/${data.Bruce.ID}/?dataoverride=${override}&BruceEntityType=${data.Bruce[\"EntityType.ID\"]}`;\r\n const res = await api.POST(reqUrl, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(<string>data.Bruce.ID));\r\n return {\r\n entity: res\r\n };\r\n }\r\n\r\n export function RemoveTag(params: {\r\n entity: IEntity,\r\n tagId: number\r\n }): void {\r\n const { entity: data, tagId } = params;\r\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\r\n const index = tags.indexOf(tagId);\r\n if (index >= 0) {\r\n tags.splice(index, 1);\r\n data.Bruce[\"Layer.ID\"] = tags;\r\n }\r\n }\r\n\r\n export function AddTag(params: {\r\n entity: IEntity,\r\n tagId: number\r\n }): void {\r\n const { entity: data, tagId } = params;\r\n const tags = data.Bruce[\"Layer.ID\"] ?? [];\r\n if (!tags.includes(tagId)) {\r\n tags.push(tagId);\r\n data.Bruce[\"Layer.ID\"] = tags;\r\n }\r\n }\r\n\r\n export function SetValue(params: {\r\n entity: IEntity,\r\n path: string[],\r\n value: any\r\n }): void {\r\n const { entity: data, path, value } = params;\r\n let curData = data;\r\n for (let i = 0; i < path.length; i++) {\r\n const step = path[i];\r\n if (!curData[step] || typeof curData[step] != \"object\") {\r\n curData[step] = {};\r\n }\r\n if (i >= path.length - 1) {\r\n curData[step] = value;\r\n break;\r\n }\r\n curData = curData[step];\r\n }\r\n }\r\n\r\n export function GetValue(params: {\r\n entity: IEntity,\r\n path: string[]\r\n }): any {\r\n const { entity: data, path } = params;\r\n // Backwards compatibility.\r\n if (path.length == 1 && path[0] == \"ID\") {\r\n return data.Bruce?.ID;\r\n }\r\n let curData = data;\r\n for (let i = 0; i < path.length; i++) {\r\n const step = path[i];\r\n if (!curData[step]) {\r\n return null;\r\n }\r\n if (i >= path.length - 1) {\r\n return curData[step];\r\n }\r\n curData = curData[step];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Calculates an entity's name based on attribute priority set in the type.\r\n * @param params\r\n * If true, will return the entity ID if no name can be calculated.\r\n * Otherwise it returns null.\r\n * @returns\r\n */\r\n export function CalculateName(params: {\r\n entity: IEntity,\r\n type: EntityType.IEntityType,\r\n defaultToId?: boolean\r\n }): string {\r\n const { entity, type, defaultToId = true } = params;\r\n const attrStr = type.DisplayNameAttributePath;\r\n if (attrStr) {\r\n const attrPaths = attrStr.split(\",\");\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const pathStr = attrPaths[i];\r\n const path = PathUtils.Parse(pathStr);\r\n const name = Entity.GetValue({\r\n entity: entity,\r\n path\r\n });\r\n if (name && typeof name != \"object\") {\r\n return name;\r\n }\r\n }\r\n }\r\n return defaultToId ? entity.Bruce.ID : null;\r\n }\r\n\r\n export interface IFilter {\r\n orderBy?: any;\r\n entityTypeId?: string;\r\n layerIds?: number[];\r\n bounds?: Bounds.IReqBounds;\r\n pageSize?: number;\r\n pageIndex?: number;\r\n lodCategoryId?: string;\r\n sortOrder?: Api.ESortOrder;\r\n entityTypeConditions?: IDictionary<any>;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n filter: IFilter,\r\n // Default = false.\r\n viaCdn?: boolean;\r\n // (Optional) Cache killing token to append to the request url.\r\n viaCdnCacheToken?: number | string;\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entities: IEntity[]\r\n }> {\r\n const { api, filter, req: reqParams, viaCdn, viaCdnCacheToken } = params;\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\r\n const body = {\r\n SortOrder: filter.sortOrder == Api.ESortOrder.Asc ? \"ASC\" : \"DESC\",\r\n OrderBy: filter.orderBy,\r\n Filter: requestFilter,\r\n LODType: filter.lodCategoryId,\r\n BruceEntityType: filter.entityTypeId,\r\n PageIndex: filter.pageIndex,\r\n PageSize: filter.pageSize\r\n };\r\n\r\n let entities = [];\r\n if (viaCdn && api.EntityCdnUrl) {\r\n const url = new URL(api.EntityCdnUrl);\r\n const urlParams = new URLSearchParams(url.search);\r\n urlParams.set(\"cacheToken\", String(viaCdnCacheToken ? viaCdnCacheToken : 0));\r\n if (body.SortOrder) {\r\n urlParams.set(\"SortOrder\", body.SortOrder);\r\n }\r\n if (body.OrderBy) {\r\n urlParams.set(\"OrderBy\", body.OrderBy);\r\n }\r\n if (body.Filter) {\r\n urlParams.set(\"Filter\", JSON.stringify(body.Filter));\r\n }\r\n if (body.LODType) {\r\n urlParams.set(\"LODType\", body.LODType);\r\n }\r\n if (body.BruceEntityType) {\r\n urlParams.set(\"BruceEntityType\", body.BruceEntityType);\r\n }\r\n if (body.PageIndex) {\r\n urlParams.set(\"PageIndex\", String(body.PageIndex));\r\n }\r\n if (body.PageSize) {\r\n urlParams.set(\"PageSize\", String(body.PageSize));\r\n }\r\n const urlStr = url.toString() + \"?\" + urlParams.toString();\r\n const data = await api.get(urlStr, Api.PrepReqParams(reqParams));\r\n entities = data.Items;\r\n }\r\n else {\r\n const data = await api.POST(\"entities\", body, Api.PrepReqParams(reqParams));\r\n entities = data.Items;\r\n // Only caching when non-CDN.\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = entity.Bruce.ID;\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: {\r\n entity: entity\r\n },\r\n req: reqParams\r\n });\r\n }\r\n }\r\n return {\r\n entities\r\n };\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 const path = str.substring(start + 2, end);\r\n const txt = str.substring(start, end + 1);\r\n return { path: path, text: txt };\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(params: {\r\n str: string,\r\n entity: Entity.IEntity,\r\n legacyParse?: boolean\r\n }): string {\r\n let { str, entity: data, legacyParse } = params;\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({\r\n entity: data,\r\n path: path\r\n });\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 * Example: ${Test.Test1}\r\n * Needs to become [\"Test\", \"Test1\"].\r\n * We need to cull this in admin-ui.\r\n * @param path\r\n * @returns Possible paths this legacy one could mean.\r\n */\r\nfunction parseLegacyPath(path: string): string[][] {\r\n if (!path) {\r\n return [];\r\n }\r\n const paths = [];\r\n if (path.startsWith(\"${\") && path.endsWith(\"}\")) {\r\n path = path.replace(\"${\", \"\");\r\n path = path.replace(\"}\", \"\");\r\n }\r\n // Split by dots.\r\n paths.push(PathUtils.ParseLegacy(path));\r\n // Take string as is.\r\n paths.push([path]);\r\n // Split by backslashes.\r\n paths.push(PathUtils.Parse(path));\r\n return paths;\r\n}\r\n\r\n/**\r\n * Utility for calculating values from Bruce fields.\r\n * These fields are typically found in entity styles.\r\n */\r\nexport namespace Calculator {\r\n export enum EValueType {\r\n Color,\r\n Input,\r\n Gradient,\r\n Mapping,\r\n TagColor,\r\n RandomColor\r\n }\r\n\r\n export interface IMappingOption {\r\n fieldValue: string;\r\n appliedValue: string;\r\n }\r\n\r\n export interface IMappingValue {\r\n field: string;\r\n values: IMappingOption[];\r\n }\r\n\r\n export interface IGradientPoint {\r\n position: number;\r\n color: string;\r\n }\r\n\r\n export interface IGradientValue {\r\n field: string;\r\n min: number;\r\n max: number;\r\n points: IGradientPoint[];\r\n }\r\n\r\n export interface IField {\r\n value: IGradientValue | IMappingValue | string | number;\r\n type: EValueType;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options.\r\n * The context calling this should validate results and parse stuff if needed.\r\n * @deprecated use specific calls: eg GetColor or GetNumber.\r\n * @param fields\r\n * @param entity\r\n * @param tags\r\n * @returns\r\n */\r\n export function GetValue(fields: IField[], entity: Entity.IEntity, tags: any[]): string | number | Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n if (value) {\r\n value = Color.ColorFromStr(value);\r\n }\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n /**\r\n * Calculates the value of arbitrary field options with assumption that desired result is a color.\r\n * Will return null if a color is not found.\r\n * @param fields\r\n * @param entity\r\n * @param tags\r\n */\r\n export function GetColor(fields: IField[], entity: Entity.IEntity, tags: any[]): Color.IColor {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Color:\r\n value = <string>field.value;\r\n break;\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n case EValueType.RandomColor:\r\n value = Color.RandomColor();\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = Color.ColorFromStr(tag.Color);\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (typeof value === \"string\") {\r\n value = Color.ColorFromStr(value);\r\n }\r\n if (value && typeof value === \"object\" && (value.red || value.red == 0)) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetNumber(fields: IField[], entity: Entity.IEntity, tags: any[]): number {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Gradient:\r\n value = GetGradientValue(<IGradientValue>field.value, entity);\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n value = GetInputValue(<string>field.value, entity);\r\n break;\r\n case EValueType.Mapping:\r\n value = GetMappingValue(<IMappingValue>field.value, entity);\r\n break;\r\n }\r\n if (value != \"\" && value != null && value != undefined) {\r\n value = Number(value);\r\n }\r\n if (value || value == 0) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetString(fields: IField[], entity: Entity.IEntity, tags: any[]): string {\r\n if (!tags) {\r\n tags = [];\r\n }\r\n if (!entity) {\r\n entity = <any>{};\r\n }\r\n for (let i = 0; i < fields.length; i++) {\r\n const field = fields[i];\r\n let value: any;\r\n switch (field.type) {\r\n case EValueType.Gradient:\r\n value = String(GetGradientValue(<IGradientValue>field.value, entity));\r\n break;\r\n case EValueType.Color:\r\n case EValueType.Input:\r\n value = String(GetInputValue(<string>field.value, entity));\r\n break;\r\n case EValueType.Mapping:\r\n value = String(GetMappingValue(<IMappingValue>field.value, entity));\r\n break;\r\n case EValueType.RandomColor:\r\n var color = Color.RandomColor();\r\n value = `rgba(${color.red},${color.green},${color.blue},${color.alpha})`;\r\n break;\r\n case EValueType.TagColor:\r\n for (let i = 0; i < tags.length; i++) {\r\n const tag = tags[i];\r\n if (tag.Color) {\r\n value = tag.Color;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n if (value) {\r\n return value;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetMappingValue(value: IMappingValue, entity: Entity.IEntity): string | number {\r\n const attrPaths: string[][] = parseLegacyPath(value.field);\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const attrPath = attrPaths[i];\r\n let eValue: any = Entity.GetValue({\r\n entity: entity,\r\n path: attrPath\r\n });\r\n const isValueNum = !isNaN(+eValue);\r\n for (let i = 0; i < value.values.length; i++) {\r\n const option = value.values[i];\r\n const mapValue = option.fieldValue;\r\n const isMapValueNum = !isNaN(+mapValue);\r\n\r\n if (isValueNum && isMapValueNum) {\r\n if (+mapValue == +eValue) {\r\n return option.appliedValue;\r\n }\r\n const mapSplit = mapValue.split(\"-\");\r\n if (mapSplit.length == 2) {\r\n const min = mapSplit[0];\r\n const max = mapSplit[1];\r\n if (min != \"\") {\r\n if (+eValue < +min) {\r\n continue;\r\n }\r\n }\r\n if (max != \"\") {\r\n if (+eValue > +max) {\r\n continue;\r\n }\r\n }\r\n if (min == \"\" && max == \"\") {\r\n continue;\r\n }\r\n return option.appliedValue;\r\n }\r\n }\r\n else {\r\n if (mapValue == eValue) {\r\n return option.appliedValue;\r\n }\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetGradientValue(value: IGradientValue, entity: Entity.IEntity): Color.IColor {\r\n const attrPaths: string[][] = parseLegacyPath(value.field);\r\n for (let i = 0; i < attrPaths.length; i++) {\r\n const attrPath = attrPaths[i];\r\n let eValue: any = Entity.GetValue({\r\n entity: entity,\r\n path: attrPath\r\n });\r\n eValue = Math.min(Math.max(eValue, value.min), value.max);\r\n if (eValue < value.points[0].position) {\r\n return Color.ColorFromStr(value.points[0].color);\r\n }\r\n for (let i = 0; i < value.points.length - 1; i++) {\r\n const pointA = value.points[i];\r\n const pointB = value.points[i+1];\r\n\r\n if (eValue >= pointA.position && eValue <= pointB.position) {\r\n if (pointA.position == pointB.position) {\r\n return Color.ColorFromStr(pointA.color);\r\n }\r\n const distance = (eValue - pointA.position)/(pointB.position - pointA.position);\r\n const colorA = Color.ColorFromStr(pointA.color);\r\n const colorB = Color.ColorFromStr(pointB.color);\r\n return {\r\n red: colorA.red + (colorB.red - colorA.red) * distance,\r\n green: colorA.green + (colorB.green - colorA.green) * distance,\r\n blue: colorA.blue + (colorB.blue - colorA.blue) * distance,\r\n alpha: colorA.alpha + (colorB.alpha - colorA.alpha) * distance\r\n }\r\n }\r\n }\r\n }\r\n return Color.ColorFromStr(value.points[value.points.length - 1].color);\r\n }\r\n\r\n export function GetInputValue(value: string, entity: Entity.IEntity): string | number {\r\n if (typeof value == \"string\") {\r\n try {\r\n value = BruceVariable.SwapValues({\r\n str: value,\r\n entity: entity\r\n });\r\n // Check if it includes a math operation.\r\n const MATH_REGEX = /(\\d+\\.?\\d*|\\.\\d+)([+\\-*/])(\\d+\\.?\\d*|\\.\\d+)/;\r\n if (MATH_REGEX.test(value)) {\r\n // https://rollupjs.org/guide/en/#avoiding-eval\r\n // This stops eval warning.\r\n const eval2 = eval;\r\n return eval2(value);\r\n }\r\n }\r\n catch (exception) {\r\n const e = exception as any;\r\n let suppress: boolean = false;\r\n if (e && typeof e == \"object\") {\r\n const msg: string = e.message;\r\n suppress = !!msg && (msg.includes(\"Unexpected end\") || msg.includes(\"got end of script\"));\r\n }\r\n if (!suppress) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n}","import { Carto } from \"./carto\";\r\n\r\n/**\r\n * Describes vector geometry that Bruce uses.\r\n */\r\nexport namespace Geometry {\r\n export interface IGeometry {\r\n // Polygon array is an array of rings.\r\n // There should be 1 outer ring and 0 or more inner rings.\r\n Polygon?: IPolygonRing[];\r\n MultiGeometry?: IGeometry[];\r\n Point?: string;\r\n LineString?: string;\r\n MultiSurface?: string;\r\n }\r\n\r\n export interface IPolygonRing {\r\n LinearRing: string;\r\n Facing: EPolygonRingType;\r\n Height?: number;\r\n }\r\n\r\n export enum EPolygonRingType {\r\n Boundaries = \"out\",\r\n Hole = \"in\"\r\n }\r\n\r\n /**\r\n * Turns an array of points into string vector geometry that Bruce can use.\r\n * This is used for saving polyline and polygon data.\r\n * @param points \r\n * @returns \r\n */\r\n export function LineStrFromPoints(points: Carto.ICarto[]): string {\r\n if (!points.length) {\r\n throw(\"points is empty.\");\r\n }\r\n let carto: Carto.ICarto = points[0];\r\n let lineString = `${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\r\n for (let i = 1; i < points.length; i++) {\r\n carto = points[i];\r\n lineString += ` ${carto.longitude},${carto.latitude}` + (carto.altitude != null ? `,${carto.altitude}` : \"\");\r\n }\r\n return lineString;\r\n }\r\n\r\n /**\r\n * Removes same points that occur in a row.\r\n * This will not modify the original array.\r\n * @param positions \r\n * @returns \r\n */\r\n export function RemoveRepeatPoints(positions: Carto.ICarto[]): Carto.ICarto[] {\r\n const filteredList = [];\r\n for (let i = 0; i < positions.length; i++) {\r\n const pos = positions[i];\r\n const lastPos = filteredList.length > 0 ? filteredList[filteredList.length - 1] : null;\r\n if (!lastPos || (pos.latitude != lastPos.latitude || pos.longitude != lastPos.longitude || pos.altitude != lastPos.altitude)) {\r\n filteredList.push(pos); \r\n }\r\n }\r\n return filteredList;\r\n }\r\n\r\n export function ParsePoints(pointsStr: string): Carto.ICarto[] {\r\n pointsStr = pointsStr.replace(/[^\\d.,-\\s]/g, \"\");\r\n\r\n let splitterCoordinates = \" \";\r\n let splitterAxis = \",\";\r\n const commaIndex = pointsStr.indexOf(\",\");\r\n const spaceIndex = pointsStr.indexOf(\" \");\r\n if ((spaceIndex > -1 && commaIndex > spaceIndex) || commaIndex <= -1) {\r\n splitterCoordinates = \",\";\r\n splitterAxis = \" \";\r\n }\r\n\r\n let points = pointsStr.trim().split(splitterCoordinates);\r\n points = points.filter(a => a != \"\");\r\n\r\n const result: Carto.ICarto[] = [];\r\n for (let i = 0; i < points.length; i++) {\r\n const pointData = points[i];\r\n const coords = pointData.trim().split(splitterAxis);\r\n if (coords.length == 2 || coords.length == 3) {\r\n const longitude = Number(coords[0]);\r\n const latitude = Number(coords[1]);\r\n const altitude = Number(coords.length >= 3 ? coords[2] : 0);\r\n if (longitude != null && latitude != null) {\r\n result.push({\r\n altitude: altitude,\r\n latitude: latitude,\r\n longitude: longitude\r\n });\r\n }\r\n else {\r\n console.warn(\"Invalid point data detected.\", pointData);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Parses both string and object Bruce geometry.\r\n * String geometry is legacy Bruce data.\r\n * @param geometry \r\n * @returns \r\n */\r\n export function ParseGeometry(geometry: any): IGeometry {\r\n if (typeof geometry == \"string\") {\r\n let positions: Carto.ICarto[] = [];\r\n const geometryParsed: string[] = (geometry || \"\").split(\";\");\r\n for (let i = 0; i < geometryParsed.length; i++) {\r\n const data = geometryParsed[i];\r\n const points = ParsePoints(data);\r\n if (points && points.length > 0) {\r\n positions = positions.concat(points);\r\n }\r\n }\r\n positions = RemoveRepeatPoints(positions);\r\n const newGeometry: IGeometry = {};\r\n if (positions.length > 0) {\r\n const topPoint = positions[0];\r\n newGeometry.Point = `${topPoint.latitude},${topPoint.longitude}` + (topPoint.altitude != null ? `,${topPoint.altitude}` : \"\");\r\n if (positions.length > 1) {\r\n newGeometry.Polygon = [{ Facing: EPolygonRingType.Boundaries, LinearRing: LineStrFromPoints(positions) }];\r\n }\r\n if (positions.length > 2) {\r\n newGeometry.LineString = LineStrFromPoints(positions);\r\n }\r\n }\r\n return newGeometry;\r\n }\r\n return geometry;\r\n }\r\n}","import { Entity } from \"../entity/entity\";\nimport { Carto } from \"./carto\";\nimport { Geometry } from \"./geometry\";\n\nexport namespace Bounds {\n /**\n * Description of an entity's bounding box.\n */\n export interface IBounds {\n maxLatitude: number;\n maxLongitude: number;\n minLatitude: number;\n minLongitude: number;\n maxAltitude: number;\n minAltitude: number;\n }\n\n /**\n * Describes the boundaries used in entity requests.\n */\n export interface IReqBounds {\n south: number;\n west: number;\n north: number;\n east: number;\n\n // Used to exclude requests from UI that fall outside of min-max boundaries.\n // TODO: Migrate into \"entity-filter-getter.ts\", \"entity-globe.ts\" and then remove from here.\n alt?: number;\n }\n\n /**\n * Calculates boundaries from entity.\n * This will not use the set entity boundaries and instead calculate from geometry and location.\n * @param entity \n */\n export function FromEntity(entity: Entity.IEntity): IBounds {\n const bounds: IBounds = {\n maxAltitude: null,\n maxLatitude: null,\n maxLongitude: null,\n minAltitude: null,\n minLatitude: null,\n minLongitude: null\n };\n const points: Carto.ICarto[] = [];\n if (entity.location) {\n points.push(entity.location);\n }\n if (entity.geometry) {\n if (entity.geometry.Point) {\n points.push(...Geometry.ParsePoints(entity.geometry.Point));\n }\n if (entity.geometry.LineString) {\n points.push(...Geometry.ParsePoints(entity.geometry.LineString));\n }\n if (entity.geometry.Polygon) {\n for (const ring of entity.geometry.Polygon) {\n points.push(...Geometry.ParsePoints(ring.LinearRing));\n }\n }\n }\n for (const point of points) {\n if (bounds.maxLatitude == null || point.latitude > bounds.maxLatitude) {\n bounds.maxLatitude = point.latitude;\n }\n if (bounds.maxLongitude == null || point.longitude > bounds.maxLongitude) {\n bounds.maxLongitude = point.longitude;\n }\n if (bounds.maxAltitude == null || point.altitude > bounds.maxAltitude) {\n bounds.maxAltitude = point.altitude;\n }\n if (bounds.minLatitude == null || point.latitude < bounds.minLatitude) {\n bounds.minLatitude = point.latitude;\n }\n if (bounds.minLongitude == null || point.longitude < bounds.minLongitude) {\n bounds.minLongitude = point.longitude;\n }\n if (bounds.minAltitude == null || point.altitude < bounds.minAltitude) {\n bounds.minAltitude = point.altitude;\n }\n }\n return bounds;\n }\n}","interface IBruceEventCallback {\n _id: number;\n removeCallback: () => void;\n callback: (data: any) => void;\n}\n\n/**\n * Simple event utility.\n * Instantiate the model, then subscribe and trigger events.\n */\nexport class BruceEvent<TArgs> {\n // Counter to help differentiate subscriptions.\n private _counter: number = 0;\n\n // Record of all callback subscriptions for this event.\n private callbacks: IBruceEventCallback[] = [];\n\n\n public Subscribe(callback: (data: TArgs) => void): (() => void) {\n let id = this._counter++;\n let newBruceEventCallback: IBruceEventCallback = {\n \t_id: id,\n \tremoveCallback: () => {\n \t\tthis.Unsubscribe(id);\n \t},\n \tcallback: callback\n };\n this.callbacks.push(newBruceEventCallback);\n return newBruceEventCallback.removeCallback;\n }\n\n public Unsubscribe(id: number): void {\n let index = this.callbacks.findIndex(x => x._id == id);\n if (index > -1) {\n this.callbacks.splice(index, 1);\n }\n }\n\n public Trigger(data?: TArgs): void {\n let callbacks = this.callbacks;\n for (let i = 0; i < callbacks.length; i++) {\n let callback = callbacks[i];\n if (callback.callback) {\n callback.callback(data);\n }\n }\n }\n\n public Clear(): void {\n this.callbacks = [];\n }\n}","export namespace Camera {\n export enum EFrustum {\n Perspective,\n Orthographic\n }\n}","/**\n * Describes 2d and 3d coordinates.\n * \n * In 2d the x/y typically refers to a window left/top offset.\n * In 3d the x/y/z, the units are in meters.\n */\nexport namespace Cartes {\n export interface ICartes2 {\n x: number;\n y: number;\n }\n\n export interface ICartes3 extends ICartes2 {\n z: number;\n }\n\n export function ValidateCartes2(cartes: ICartes2): boolean {\n if (!cartes) {\n return false;\n }\n else if (!cartes.x && cartes.x != 0) {\n return false;\n }\n else if (!cartes.y && cartes.y != 0) {\n return false;\n }\n return true;\n }\n\n export function ValidateCartes3(cartes: ICartes3): boolean {\n if (!ValidateCartes2(cartes)) {\n return false;\n }\n else if (!cartes.z && cartes.z != 0) {\n return false;\n }\n return true;\n }\n\n export function IsEqualCartes2(a: ICartes2, b: ICartes2): boolean {\n if (a.x != b.x) {\n return false;\n }\n else if (a.y != b.y) {\n return false;\n }\n return true;\n }\n\n export function IsEqualCartes3(a: ICartes3, b: ICartes3): boolean {\n if (!IsEqualCartes2(a, b)) {\n return false;\n }\n else if (a.z != b.z) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the given ring is closed.\n * A ring is closed if the first and last point are equal.\n * A ring with less than 2 points is not closed.\n * @param points \n * @returns \n */\n export function IsRing2Closed(points: ICartes2[]) {\n if (points.length < 2) {\n return false;\n }\n else if (!IsEqualCartes2(points[0], points[points.length - 1])) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns true if the given ring is closed.\n * A ring is closed if the first and last point are equal.\n * A ring with less than 2 points is not closed.\n * @param points \n * @returns \n */\n export function IsRing3Closed(points: ICartes3[]) {\n if (points.length < 2) {\n return false;\n }\n else if (!IsEqualCartes3(points[0], points[points.length - 1])) {\n return false;\n }\n return true;\n }\n\n /**\n * Closes given ring by adding the first point to the end of the array.\n * This will mutate the given array.\n * Will not do anything if the ring is already closed.\n * @param points \n * @returns \n */\n export function CloseRing2(points: ICartes2[]) {\n if (points.length < 2) {\n return;\n }\n else if (IsRing2Closed(points)) {\n return;\n }\n points.push(points[0]);\n }\n\n /**\n * Closes given ring by adding the first point to the end of the array.\n * This will mutate the given array.\n * Will not do anything if the ring is already closed.\n * @param points \n * @returns \n */\n export function CloseRing3(points: ICartes3[]) {\n if (points.length < 2) {\n return;\n }\n else if (IsRing3Closed(points)) {\n return;\n }\n points.push(points[0]);\n }\n}","/**\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}","/**\n * Controls the flow of method calls.\n * If you have a method that may be called often, but you don't want it to run often, use this.\n */\nexport class DelayQueue {\n // The callback is the method we want to control queue for.\n private callback: () => void;\n\n // Millisecond delay.\n public delay: number = 200;\n\n // Date-time stamp for the last callback call.\n private lastCallTime: number = <any>null;\n\n // The delay timeout for calling update.\n private delayTimeout: any;\n\n\n constructor(callback: () => void, delay: number = 200) {\n this.callback = callback;\n this.delay = delay;\n }\n\n public Call(force: boolean = false): void {\n if (this.lastCallTime == null) {\n force = true;\n }\n if (force) {\n let endDate = new Date().getTime();\n this.doCall(endDate);\n }\n else {\n const endDate = new Date().getTime();\n const seconds = (endDate - this.lastCallTime) / 1000;\n const delay = this.delay / 1000;\n if (seconds > delay) {\n this.doCall(endDate);\n }\n else if (this.delayTimeout == null) {\n const diff = (delay - seconds) * 1000;\n this.delayTimeout = setTimeout(() => {\n this.delayTimeout = null;\n this.Call();\n }, diff + 0.02);\n }\n }\n }\n\n private doCall(endDate: number): void {\n if (this.delayTimeout != null) {\n clearTimeout(this.delayTimeout);\n this.delayTimeout = null;\n }\n this.lastCallTime = endDate;\n this.callback();\n }\n\n public Dispose(): void {\n if (this.delayTimeout != null) {\n clearTimeout(this.delayTimeout);\n this.delayTimeout = null;\n }\n }\n}","/**\n * Describes a Bruce stored date.\n */\nexport namespace UTC {\n export enum EMonth {\n January = 1,\n February = 2,\n March = 3,\n April = 4,\n May = 5,\n June = 6,\n July = 7,\n August = 8,\n September = 9,\n October = 10,\n November = 11,\n December = 12\n }\n\n export interface IUTC {\n d: number;\n hh: number;\n m: EMonth | number;\n mm: number;\n ss: number;\n y: number;\n }\n\n export function ToDate(utc: IUTC): Date {\n return new Date(utc.y, utc.m - 1, utc.d, utc.hh, utc.mm, utc.ss, 0);\n }\n\n export function FromDate(date: Date): IUTC {\n return {\n y: date.getUTCFullYear(),\n m: date.getUTCMonth() + 1,\n d: date.getUTCDate(),\n hh: date.getUTCHours(),\n mm: date.getUTCMinutes(),\n ss: date.getUTCSeconds()\n };\n }\n}","export class LRUCache<TKey, TValue> {\r\n private readonly capacity: number;\r\n private readonly cache: Map<TKey, TValue>;\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity;\r\n this.cache = new Map<TKey, TValue>();\r\n }\r\n\r\n public Get(key: TKey): TValue | undefined {\r\n const value = this.cache.get(key);\r\n if (value) {\r\n this.cache.delete(key);\r\n this.cache.set(key, value);\r\n }\r\n return value;\r\n }\r\n\r\n public Set(key: TKey, value: TValue): void {\r\n if (this.cache.size >= this.capacity) {\r\n const leastRecentlyUsedKey = this.cache.keys().next().value;\r\n this.cache.delete(leastRecentlyUsedKey);\r\n }\r\n this.cache.set(key, value);\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(params: {\r\n api: BruceApi.Api,\r\n attachmentTypeId: Type,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, attachmentTypeId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entityAttachmentType/${id}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n attachmentType: IType,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n attachmentType: IType\r\n }> {\r\n const { api, attachmentType: data, req: reqParams } = params;\r\n if (!data?.ID) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const res = await api.POST(`entityAttachmentType/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n attachmentType: res\r\n };\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n reqParams?: Api.IReqParams\r\n }): Promise<{\r\n attachmentTypes: IType[]\r\n }> {\r\n const { api, reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityAttachmentTypes`, Api.PrepReqParams(reqParams));\r\n res({\r\n attachmentTypes: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\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(id: number): string {\r\n return Api.ECacheKey.Attachment + Api.ECacheKey.Id + id;\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 ID: number;\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(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n attachments: IAttachment[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n attachments: IAttachment[]\r\n }> {\r\n const { api, attachments, req, entityId } = params;\r\n if (!attachments?.length) {\r\n return {\r\n attachments: []\r\n };\r\n }\r\n const res = await api.POST(`entity/${entityId}/attachments`, {\r\n attachments\r\n }, Api.PrepReqParams(req));\r\n for (let i = 0; i < attachments.length; i++) {\r\n if (attachments[i].ID) {\r\n api.Cache.Remove(GetCacheKey(attachments[i].ID));\r\n }\r\n }\r\n api.Cache.Remove(GetListCacheKey(entityId));\r\n return {\r\n attachments: res.attachments\r\n };\r\n }\r\n\r\n export async function UpdateOrder(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n attachmentTypeId: Type,\r\n attachments: IAttachment[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityId, attachmentTypeId: typeId, attachments, req: reqParams } = params;\r\n if (!entityId || !typeId || !attachments?.length) {\r\n throw(\"Entity ID, Type ID, and Attachments are required.\");\r\n }\r\n const reqData = {\r\n \t\"DisplayOrder.Start\": 0,\r\n \t\"ClientFile.ID\": attachments.map(x => x[\"ClientFile.ID\"])\r\n };\r\n await api.POST(`entity/${entityId}/attachments/${typeId}/setOrder`, reqData, Api.PrepReqParams(reqParams));\r\n for (let i = 0; i < attachments.length; i++) {\r\n api.Cache.Remove(GetCacheKey(attachments[i].ID));\r\n }\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey(entityId));\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n attachmentId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, attachmentId, entityId, req } = params;\r\n if (!attachmentId || !entityId) {\r\n throw(\"Entity id and attachment id.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/attachments/${attachmentId}`, Api.PrepReqParams(req));\r\n api.Cache.Remove(GetCacheKey(attachmentId));\r\n }\r\n\r\n export async function GetListByEntityId(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n attachments: IAttachment[]\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/attachments`, Api.PrepReqParams(reqParams));\r\n res({\r\n attachments: (data.attachments ? data.attachments : data.Items)\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Upload(params: {\r\n api: BruceApi.Api,\r\n file: Blob,\r\n entityId: string,\r\n attachmentTypeId: Type,\r\n req?: Api.IUploadReqParams\r\n }): Promise<{\r\n attachment: IAttachment\r\n }> {\r\n const { api, file, entityId, attachmentTypeId: typeId, req: reqParams } = params;\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 res = await api.UPLOAD(url, file, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetListCacheKey(entityId));\r\n return {\r\n attachment: res\r\n };\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(params: {\r\n api: BruceApi.Api,\r\n comment: IComment,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n comment: IComment\r\n }> {\r\n const { api, comment: data, req: reqParams } = params;\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 const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\r\n return {\r\n comment: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n commentId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityId, commentId, req: reqParams } = params;\r\n if (!commentId) {\r\n throw(\"Comment ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/comment/${commentId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(commentId));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Comment + Api.ECacheKey.Entity);\r\n }\r\n\r\n export async function GetListByEntityId(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n comments: IComment[]\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/comments`, Api.PrepReqParams(reqParams));\r\n res({\r\n comments: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityId),\r\n value: req,\r\n req: reqParams\r\n });\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(params: {\r\n api: BruceApi.Api,\r\n link: ILink,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n link: ILink\r\n }> {\r\n const { api, link: data, req: reqParams } = params;\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 const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(<number>data.ID));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\r\n return {\r\n link: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n linkId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityId, linkId, req: reqParams } = params;\r\n if (!linkId) {\r\n throw(\"Link ID is required.\");\r\n }\r\n await api.DELETE(`entity/${entityId}/link/${linkId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(linkId));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Link + Api.ECacheKey.Entity);\r\n }\r\n\r\n export async function GetListByEntityId(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n links: ILink[]\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/links`, Api.PrepReqParams(reqParams));\r\n res({\r\n links: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityId),\r\n value: req,\r\n req: reqParams\r\n });\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 function GetEntityListKey(entityId: string): string {\r\n return Api.ECacheKey.Lod + Api.ECacheKey.Entity + entityId;\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 interface IEntityLodUpdate {\r\n \"ClientFile.ID\": string;\r\n \"LODCategory.Key\": string;\r\n Level: number;\r\n }\r\n\r\n export function GetUrl(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n categoryId: string,\r\n level: number,\r\n strict?: boolean\r\n }): {\r\n url: string\r\n } {\r\n let { api, entityId, categoryId, level, strict } = params;\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 {\r\n url: url\r\n };\r\n }\r\n\r\n export async function GetUrlFileId(params: {\r\n api: BruceApi.Api,\r\n url: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n clientFileId: string\r\n }> {\r\n const { api, url, req: reqParams } = params;\r\n if (!url) {\r\n throw(\"Url is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(url), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const record: ILod = await api.get(url, Api.PrepReqParams(reqParams));\r\n res({\r\n clientFileId: record[\"ClientFile.ID\"]\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(url),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function GetLods(params: {\r\n api: BruceApi.Api,\r\n filter: Filter.IListParams,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n lods: Filter.IListResItem[]\r\n }> {\r\n const { api, filter, req: reqParams } = params;\r\n if (!filter?.Items?.length) {\r\n throw(\"Items are required.\");\r\n }\r\n const data = await api.POST(\"entity/getlods\", filter, reqParams);\r\n return {\r\n lods: data.Items\r\n };\r\n }\r\n\r\n export async function GetEntityLods(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n lods: ILod[]\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity id is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetEntityListKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req = api.GET(`entity/${entityId}/lods?includeClientFiles=yes`, Api.PrepReqParams(reqParams));\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n lods: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetEntityListKey(entityId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * Returns lods for a specified entity type.\r\n * @param params\r\n */\r\n export async function GetTypeLods(params: {\r\n api: BruceApi.Api,\r\n entityTypeId: string,\r\n group?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n lods: ILod[]\r\n }> {\r\n let { api, entityTypeId: typeId, group, req: reqParams } = params;\r\n if (!group) {\r\n group = \"DEFAULT\";\r\n }\r\n const cacheData = await api.GetCacheItem(GetTypeListKey(typeId, group), reqParams);\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(reqParams));\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n lods: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetTypeListKey(typeId, group),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n } & IEntityLodUpdate): Promise<void> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!params[\"ClientFile.ID\"] || !params[\"LODCategory.Key\"] || (!params.Level && params.Level !== 0)) {\r\n throw(\"ClientFile.ID, LODCategory.Key and Level are required.\");\r\n }\r\n const res = await api.POST(`entity/${entityId}/lod/${params[\"LODCategory.Key\"]}/${params.Level}`, {\r\n \"Level\": params.Level,\r\n \"ClientFile.ID\": params[\"ClientFile.ID\"]\r\n }, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetEntityListKey(entityId));\r\n return res;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n lodCategoryId: string,\r\n level: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n let { api, entityId, lodCategoryId, level, req: reqParams } = params;\r\n if (!entityId || !lodCategoryId) {\r\n throw(\"Entity ID and LOD Category ID are required.\");\r\n }\r\n level = +level;\r\n if (isNaN(level)) {\r\n throw(\"Level is required. It must be a number.\");\r\n }\r\n await api.POST(`entity/${entityId}/deleteLODs`, {\r\n Items: [{ \"LODCategory.Key\": lodCategoryId, \"Level\": level }]\r\n }, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetEntityListKey(entityId));\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\n\r\nexport namespace EntityLodCategory {\r\n export function GetCacheKey(id: string): string {\r\n return Api.ECacheKey.LodCategory + Api.ECacheKey.Id + id;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.LodCategory;\r\n }\r\n\r\n export interface ICategory {\r\n Description?: string;\r\n Key: string;\r\n Name: string;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n categories: ICategory[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheKey = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheKey) {\r\n return cacheKey;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"lodCategories\", Api.PrepReqParams(reqParams));\r\n res({\r\n categories: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n categoryId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n category: ICategory\r\n }> {\r\n const { api, categoryId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Lod category id is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`lodCategory/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n category: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n categoryId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, categoryId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Lod category id is required.\");\r\n }\r\n await api.DELETE(`lodCategory/${id}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n category: ICategory,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n category: ICategory\r\n }> {\r\n const { api, category: data, req: reqParams } = params;\r\n if (!data.Key || !data.Name) {\r\n throw(\"Lod category key and name are required.\");\r\n }\r\n const res = await api.POST(`lodCategory/${data.Key}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.Key));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n category: res\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(params: {\r\n api: BruceApi.Api,\r\n relationTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relationType: IType\r\n }> {\r\n const { api, relationTypeId: typeId, req: reqParams } = params;\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const key = GetCacheKey(typeId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityRelationType/${typeId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n relationType: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n relationTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, relationTypeId: typeId, req: reqParams } = params;\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entityRelationType/${typeId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(typeId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relationTypes: IType[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"entityRelationTypes\", Api.PrepReqParams(reqParams));\r\n res({\r\n relationTypes: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n relationType: IType,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relationType: IType\r\n }> {\r\n const { api, relationType: data, req: reqParams } = params;\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 const res = await api.POST(`entityRelationType/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n relationType: res\r\n };\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.relationTypeId +\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 relationTypeId?: string;\r\n oneWayOnly?: boolean;\r\n loadEntityData?: boolean;\r\n }\r\n\r\n export async function Create(params: {\r\n api: BruceApi.Api,\r\n relation: IRelation,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, relation: data, req: reqParams } = params;\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(reqParams));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\r\n await 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 await 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 Delete(params: {\r\n api: BruceApi.Api,\r\n principalEntityId: string,\r\n relatedEntityId: string,\r\n relationTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, principalEntityId, relatedEntityId, relationTypeId, req: reqParams } = params;\r\n if (!principalEntityId || !relatedEntityId || !relationTypeId) {\r\n throw new Error(\"Principal Entity ID, Related Entity ID, and Relation Type ID are required.\");\r\n }\r\n const url = `entity/${principalEntityId}/relation/${relationTypeId}/delete`;\r\n await api.POST(url, {\r\n \"Related.Entity.ID\": [relatedEntityId]\r\n }, Api.PrepReqParams(reqParams));\r\n\r\n // Remove related cache entries\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + principalEntityId);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + relatedEntityId);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.RelationType + Api.ECacheKey.Id + relationTypeId);\r\n }\r\n\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n relation: IRelation,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, relation: data, req: reqParams } = params;\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 const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Principal.Entity.ID\"]);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Relation + Api.ECacheKey.Id + data[\"Related.Entity.ID\"]);\r\n await 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 await 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 GetList(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n filter: IListParams,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relations: IRelation[]\r\n }> {\r\n let { api, entityId, filter, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n filter = {\r\n relationTypeId: \"\",\r\n oneWayOnly: false,\r\n loadEntityData: false,\r\n ...filter\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityId, filter), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n let url = `entity/${entityId}/relations`;\r\n if (filter.relationTypeId) {\r\n url += \"/\" + filter.relationTypeId;\r\n }\r\n url += `?Oneway=${filter.oneWayOnly}&LoadInfo=${filter.loadEntityData}`;\r\n const data = await api.GET(url, Api.PrepReqParams(reqParams));\r\n res({\r\n relations: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityId, filter),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function GetByDataEntityId(params: {\r\n api: BruceApi.Api,\r\n entityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n relation: IRelation\r\n }> {\r\n const { api, entityId, req: reqParams } = params;\r\n if (!entityId) {\r\n throw(\"Entity ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetEntityCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/relation/${entityId}/dataentity`, Api.PrepReqParams(reqParams));\r\n res({\r\n relation: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetEntityCacheKey(entityId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\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(params: {\r\n api: BruceApi.Api,\r\n sourceId: number,\r\n sourceKey: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n source: ISource\r\n }> {\r\n const { api, sourceId, sourceKey, req: reqParams } = params;\r\n if (!sourceId || !sourceKey) {\r\n throw(\"Source ID and Source Key are required.\");\r\n }\r\n const res = await GetListByKeys({\r\n api: api,\r\n sourceId: sourceId,\r\n sourceKeys: [sourceKey],\r\n req: reqParams\r\n })\r\n return {\r\n source: res.sources?.length ? res.sources[0] : null\r\n };\r\n }\r\n\r\n export async function GetListByKeys(params: {\r\n api: BruceApi.Api,\r\n sourceId: number,\r\n sourceKeys: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n sources: ISource[]\r\n }> {\r\n const { api, sourceId, sourceKeys, req: reqParams } = params;\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 = await api.GetCacheItem(GetCacheKey(sourceId, sourceKey), reqParams);\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(reqParams));\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 {\r\n sources: (await Promise.all(reqs)).filter(x => !!x)\r\n };\r\n }\r\n\r\n export async function GetEntityIdsBySourceKeys(params: {\r\n api: BruceApi.Api,\r\n sourceId: number,\r\n sourceKeys: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n // Source key to entity id mapping.\r\n idMapping: IDictionary<string>\r\n }> {\r\n const { api, sourceId, sourceKeys, req: reqParams } = params;\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({\r\n api,\r\n sourceId,\r\n sourceKeys,\r\n req: reqParams\r\n });\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 {\r\n idMapping: result\r\n };\r\n }\r\n\r\n export async function CreateLink(params: {\r\n api: BruceApi.Api\r\n source: ISource\r\n }): Promise<{\r\n source: ISource\r\n }> {\r\n const {source} = params;\r\n if (!source[\"Entity.ID\"] || !source[\"Source.ID\"] || !source[\"SourceRecord.Key\"]) {\r\n throw(\"Entity ID, Source ID and Source Key are required.\");\r\n }\r\n const res = await params.api.POST(\"entitysource\", source);\r\n const cacheKey = GetCacheKey(source[\"Source.ID\"], source[\"SourceRecord.Key\"]);\r\n await params.api.Cache.Remove(cacheKey);\r\n return {\r\n source: res\r\n }\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 \"Parent.Layer.ID\"?: number;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n tagId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tag: ITag\r\n }> {\r\n const { api, tagId, req: reqParams } = params;\r\n if (!tagId) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n const {tags} = await GetListByIds({\r\n api,\r\n tagIds: [tagId],\r\n req: reqParams\r\n });\r\n return {\r\n tag: tags.length ? tags[0] : null\r\n };\r\n }\r\n\r\n export async function GetListByIds(params: {\r\n api: BruceApi.Api,\r\n tagIds: number[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tags: ITag[]\r\n }> {\r\n const { api, tagIds, req: reqParams } = params;\r\n if (!tagIds.length) {\r\n throw(\"Tag Ids are empty.\");\r\n }\r\n const reqIds: number[] = [];\r\n const reqs: Promise<{ tag: ITag }>[] = [];\r\n for (let i = 0; i < tagIds.length; i++) {\r\n const tagId = tagIds[i];\r\n const cacheData = await api.GetCacheItem(GetCacheKey(tagId), reqParams);\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(reqParams));\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<{ tag: 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({\r\n tag: tag\r\n });\r\n }\r\n catch (e) {\r\n rej(<any>e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: req,\r\n req: reqParams\r\n });\r\n reqs.push(req);\r\n }\r\n }\r\n return {\r\n tags: (await Promise.all(reqs)).map(x => x?.tag).filter(x => !!x)\r\n };\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n entityTypeId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tags: ITag[]\r\n }> {\r\n const { api, entityTypeId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(entityTypeId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(entityTypeId ? `entityType/${entityTypeId}/layers` : \"layers\", Api.PrepReqParams(reqParams));\r\n res({\r\n tags: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(entityTypeId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n tagId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tagId, req: reqParams } = params;\r\n if (!tagId) {\r\n throw(\"Tag ID is required.\");\r\n }\r\n await api.DELETE(`layer/${tagId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(tagId));\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n tag: ITag,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tag: ITag\r\n }> {\r\n const { api, tag: data, req: reqParams } = params;\r\n const url = data.ID ? `layer/${data.ID}` : \"layer\";\r\n const res = await api.POST(url, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey());\r\n return {\r\n tag: res\r\n };\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { Entity } from \"./entity\";\r\nimport { EntityAttribute } from \"./entity-attribute\";\r\nimport { EntityTypeVisualSettings } from \"./entity-type-visual-settings\";\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?: Entity.IEntity;\r\n DataSchema?: {\r\n Key: \"root\",\r\n Name?: \"Root\",\r\n Structure: EntityAttribute.IAttribute[],\r\n Type: EntityAttribute.EType.Structure\r\n };\r\n DisplayNameAttributePath?: string;\r\n IsStrictSchema?: boolean;\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 VisualSettings?: EntityTypeVisualSettings.ISettings;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n entityTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entityType: IEntityType\r\n }> {\r\n const { api, entityTypeId: typeId, req: reqParams } = params;\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n const key = GetCacheKey(typeId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entitytype/${typeId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n entityType: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n entityTypeId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, entityTypeId: typeId, req: reqParams } = params;\r\n if (!typeId) {\r\n throw(\"Type ID is required.\");\r\n }\r\n await api.DELETE(`entitytype/${typeId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(typeId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entityTypes: IEntityType[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"entitytypes\", Api.PrepReqParams(reqParams));\r\n res({\r\n entityTypes: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams,\r\n duration: 60 * 5 // 5 minutes.\r\n });\r\n return req;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n entityType: IEntityType,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entityType: IEntityType\r\n }> {\r\n let { api, entityType: data, req: reqParams } = params;\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 const res = await api.POST(`entitytype/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(<string>data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n entityType: res\r\n };\r\n }\r\n}","import { Bounds } from \"../../common/bounds\";\r\nimport { Carto } from \"../../common/carto\";\r\nimport { IDictionary } from \"../../common/dictionary\";\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 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 public Fetching: boolean = false;\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\n export class Grid {\r\n private cells: IDictionary<Cell> = {};\r\n\r\n public GetCellsForView(cameraPos: Carto.ICarto, 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 let centerX = cameraPos?.longitude;\r\n let centerY = cameraPos?.latitude;\r\n if (isNaN(centerX) || isNaN(centerY)) {\r\n centerX = (minLon + maxLon) / 2;\r\n centerY = (minLat + maxLat) / 2;\r\n }\r\n\r\n const width = Math.ceil((maxLon - curMinLon) / cellDegreeSize);\r\n const height = Math.ceil((maxLat - curMinLat) / cellDegreeSize);\r\n\r\n const cellDistances: { x: number, y: number, dist: number }[] = [];\r\n\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 cellCenterX = lon + cellDegreeSize / 2;\r\n const cellCenterY = lat + cellDegreeSize / 2;\r\n const dist = Math.sqrt(Math.pow(cellCenterX - centerX, 2) + Math.pow(cellCenterY - centerY, 2));\r\n cellDistances.push({ x, y, dist });\r\n }\r\n }\r\n\r\n cellDistances.sort((a, b) => a.dist - b.dist);\r\n\r\n for (const { x, y } of cellDistances) {\r\n const lon = x * cellDegreeSize + curMinLon;\r\n const lat = y * cellDegreeSize + curMinLat;\r\n const [id, 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}\r\n\r\nfunction intersects(l: Bounds.IReqBounds, r: Bounds.IReqBounds): boolean {\r\n const { west: w, south: s, north: n, east: e } = l;\r\n const { west: wr, south: sr, north: nr, east: er } = r;\r\n return !(e <= wr || w >= er || n <= sr || s >= nr);\r\n}\r\n\r\nfunction contains(l: Bounds.IReqBounds, r: Bounds.IReqBounds): boolean {\r\n const { west: w, south: s, north: n, east: e } = l;\r\n const { west: wr, south: sr, north: nr, east: er } = r;\r\n return !(er < e || wr > w || nr > n || sr < s);\r\n}\r\n\r\nfunction crop(rect: Bounds.IReqBounds, by: Bounds.IReqBounds): Bounds.IReqBounds {\r\n let { west: w, south: s, north: n, east: e } = rect;\r\n const { west: wc, south: sc, north: nc, east: ec } = by;\r\n w = Math.max(w, ec);\r\n e = Math.min(e, wc);\r\n s = Math.max(s, nc);\r\n n = Math.min(n, sc);\r\n return { west: w, south: s, north: n, east: e };\r\n}\r\n\r\nfunction intersection(l: Bounds.IReqBounds, r: Bounds.IReqBounds): number {\r\n const { west: w, south: s, north: n, east: e } = l;\r\n const { west: wr, south: sr, north: nr, east: er } = r;\r\n const x = Math.min(e, er) - Math.max(w, wr);\r\n const y = Math.min(n, nr) - Math.max(s, sr);\r\n return (x > 0 && y > 0) ? x * y : 0;\r\n}\r\n\r\nfunction area(rect: Bounds.IReqBounds): number {\r\n let { west: w, south: s, north: n, east: e } = rect;\r\n return Math.abs((e - w) * (n - s));\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 isCellFetched(cell: EntityGlobe.Cell): boolean {\r\n if (cell.Fetched) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction getOrCreateCell(cells: IDictionary<EntityGlobe.Cell>, cellSize: number, lon: number, maxLon: number, lat: number, maxLat: number): [string, EntityGlobe.Cell] {\r\n const id = cellSize + \"_\" + lon + \"_\" + maxLon + \"_\" + lat + \"_\" + maxLat;\r\n let cell = cells[id];\r\n if (!cell) {\r\n cell = cells[id] = new EntityGlobe.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\r\n return [id, cell];\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 onScanUpdate: BruceEvent<EntityGlobe.Cell[]> = <any>null;\r\n public get OnScanUpdate(): BruceEvent<EntityGlobe.Cell[]> {\r\n if (!this.onScanUpdate) {\r\n this.onScanUpdate = new BruceEvent<EntityGlobe.Cell[]>();\r\n }\r\n return this.onScanUpdate;\r\n }\r\n\r\n private api: BruceApi.Api;\r\n private viewPort: ViewMonitor.IMonitor;\r\n private viewPortChangeRemoval: () => void = <any>null;\r\n private cells: EntityGlobe.Grid = <any>null;\r\n private registeredItems: IDictionary<regMenuItemGetter> = {};\r\n private getterLoopId: number = 0;\r\n\r\n private viaCdn: boolean;\r\n private typeId: string;\r\n private batchSize: number;\r\n private tagIds: number[] = <any>null;\r\n private minHeight = 0;\r\n private maxHeight = 100000;\r\n private attrFilter: IDictionary<any>;\r\n private viewRect: Bounds.IReqBounds = <any>null;\r\n private viewCenter: Carto.ICarto = <any>null;\r\n\r\n constructor(\r\n api: BruceApi.Api,\r\n viewPort: ViewMonitor.IMonitor,\r\n typeId: string,\r\n batchSize?: number,\r\n attrFilter?: IDictionary<any>,\r\n viaCdn?: boolean\r\n ) {\r\n this.api = api;\r\n this.typeId = typeId;\r\n this.viaCdn = Boolean(viaCdn);\r\n this.batchSize = isNaN(batchSize) ? 300 : batchSize;\r\n this.viewPort = viewPort;\r\n this.attrFilter = attrFilter;\r\n this.updateBounds();\r\n }\r\n\r\n /**\r\n * Returns id that represents the combined menu item parameters.\r\n * If integrity changes while a request is running, the request will not emit a response.\r\n * @returns\r\n */\r\n private getIntegrityId() {\r\n return this.tagIds == null ? \"\" : this.tagIds.join();\r\n }\r\n\r\n private viewAreaSub(): void {\r\n this.viewAreaDispose();\r\n this.viewPortChangeRemoval = this.viewPort.Updated().Subscribe(() => {\r\n this.updateBounds();\r\n this.startGetterLoop();\r\n });\r\n }\r\n\r\n private viewAreaDispose(): void {\r\n this.viewPortChangeRemoval?.();\r\n }\r\n\r\n public GetMenuItems(): string[] {\r\n return Object.keys(this.registeredItems);\r\n }\r\n\r\n public IncludeMenuItem(menuItemId: string, layerIds: number[], minHeight: number, maxHeight: number): void {\r\n this.registeredItems[menuItemId] = new regMenuItemGetter(layerIds, minHeight, maxHeight);\r\n this.updateState();\r\n }\r\n\r\n public ExcludeMenuItem(menuItemId: string): void {\r\n this.registeredItems[menuItemId] = <any>null;\r\n delete this.registeredItems[menuItemId];\r\n this.updateState();\r\n }\r\n\r\n private updateBounds(): void {\r\n const viewRect = this.viewPort.GetBounds();\r\n const poi = this.viewPort.GetTarget();\r\n if (viewRect && poi) {\r\n if (Math.abs(viewRect.west - viewRect.east) > MAX_AREA_IN_DEGREES) {\r\n return;\r\n }\r\n if (Math.abs(viewRect.south - viewRect.north) > MAX_AREA_IN_DEGREES) {\r\n return;\r\n }\r\n this.viewRect = viewRect;\r\n this.viewCenter = poi;\r\n }\r\n }\r\n\r\n private updateState(): void {\r\n const tagIds: number[] = [];\r\n const menuItemIds = this.GetMenuItems();\r\n let minHeight = null;\r\n let maxHeight = null;\r\n for (let i = 0; i < menuItemIds.length; i++) {\r\n const menuItem = this.registeredItems[menuItemIds[i]];\r\n if (menuItem) {\r\n if (maxHeight == null || maxHeight < menuItem.MaxHeight) {\r\n maxHeight = menuItem.MaxHeight;\r\n }\r\n if (minHeight == null || minHeight > menuItem.MinHeight) {\r\n minHeight = menuItem.MinHeight;\r\n }\r\n\r\n const itemLayerIds = menuItem.TagIds;\r\n if (itemLayerIds) {\r\n for (let j = 0; j < itemLayerIds.length; j++) {\r\n const itemLayerId = itemLayerIds[j];\r\n if (!tagIds.includes(itemLayerId)) {\r\n tagIds.push(itemLayerId);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (menuItemIds.length > 0) {\r\n // Reset cells so none are marked as fetched.\r\n this.cells = new EntityGlobe.Grid();\r\n this.tagIds = tagIds;\r\n this.minHeight = <number>minHeight;\r\n this.maxHeight = <number>maxHeight;\r\n this.updateBounds();\r\n this.startGetterLoop();\r\n this.viewAreaSub();\r\n }\r\n else {\r\n this.getterLoopId += 1;\r\n this.viewAreaDispose();\r\n }\r\n }\r\n\r\n private postStatus(status: IStatusUpdate): void {\r\n this.LastStateUpdates[status.msg] = status;\r\n this.onStateUpdate?.Trigger(status);\r\n }\r\n\r\n private startGetterLoop(): void {\r\n // Increase id so that existing loops stop.\r\n this.getterLoopId += 1;\r\n const loopId = this.getterLoopId;\r\n const loopIntegrity = this.getIntegrityId();\r\n\r\n new Promise(async () => {\r\n // Minor delay to stop 50 menu items enabling doing their first request all together.\r\n // This gives it time to recognize only 1 request is needed.\r\n // Would be better to not use this delay but we're on a clock.\r\n await delay(100);\r\n\r\n const MIN_HEIGHT = this.minHeight;\r\n const MAX_HEIGHT = this.maxHeight;\r\n const PAGE_SIZE = this.batchSize;\r\n let retryAttempts = MAX_RETRY_ATTEMPTS;\r\n let retryDelay = 0;\r\n let prevFirstId: string = \"\";\r\n let prevLastId: string = \"\";\r\n let prevTicks = 0;\r\n\r\n while ((!this.viewCenter || !this.viewRect) && this.getterLoopId == loopId) {\r\n await delay(RETRY_DELAY_INCREMENT);\r\n }\r\n if (this.getterLoopId != loopId) {\r\n return;\r\n }\r\n const alt = <number>this.viewRect.alt;\r\n if (alt > MAX_HEIGHT || (alt < MIN_HEIGHT && MIN_HEIGHT > 0)) {\r\n return;\r\n }\r\n\r\n const cells = this.cells.GetCellsForView(this.viewCenter, this.viewRect);\r\n this.onScanUpdate?.Trigger(cells);\r\n let curCellIndex = cells.length > 0 ? 0 : null;\r\n\r\n let postedScanning = false;\r\n let postedLoading = false;\r\n\r\n let total = 0\r\n while (retryAttempts > 0 && curCellIndex != null) {\r\n if (retryDelay > 0) {\r\n await delay(retryDelay);\r\n }\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n\r\n if (!postedScanning) {\r\n this.postStatus({ msg: EStatus.Scanning, revoking: false });\r\n postedScanning = true;\r\n }\r\n\r\n const curCell = cells[curCellIndex];\r\n if (curCell.IsFetched()) {\r\n curCell.Fetching = false;\r\n curCellIndex += 1;\r\n if (cells[curCellIndex]) {\r\n cells[curCellIndex].Fetching = true;\r\n }\r\n else {\r\n curCellIndex = null;\r\n }\r\n this.onScanUpdate?.Trigger(cells);\r\n continue;\r\n }\r\n\r\n try {\r\n let {entities} = await Entity.GetList({\r\n api: this.api,\r\n filter: {\r\n pageSize: PAGE_SIZE,\r\n pageIndex : curCell.FetchPageIndex,\r\n entityTypeId: this.typeId,\r\n layerIds: this.tagIds,\r\n bounds: curCell.GetBounds(),\r\n sortOrder: Api.ESortOrder.Asc,\r\n entityTypeConditions: this.attrFilter\r\n },\r\n viaCdn: this.viaCdn,\r\n req: {\r\n noCache: true\r\n }\r\n });\r\n\r\n const integrity = this.getIntegrityId();\r\n if (loopIntegrity == integrity && entities) {\r\n this.onUpdate?.Trigger(entities);\r\n }\r\n if (this.getterLoopId != loopId) {\r\n break;\r\n }\r\n if (entities.length) {\r\n total += entities.length;\r\n }\r\n if (!postedLoading) {\r\n this.postStatus({ msg: EStatus.Loading, revoking: false });\r\n postedLoading = true;\r\n }\r\n\r\n // Only mark as fetched when ALL pages are done.\r\n if (entities.length <= 0 ) {\r\n curCell.Fetched = true;\r\n curCell.Fetching = false;\r\n this.onScanUpdate?.Trigger(cells);\r\n continue;\r\n }\r\n\r\n // Checking to make sure it's not just the same batch over and over again.\r\n if (entities.length > 0) {\r\n const first = entities[0]?.Bruce?.ID;\r\n const last = entities[entities.length - 1]?.Bruce?.ID;\r\n if (prevFirstId == first && prevLastId == last) {\r\n prevTicks += 1;\r\n if (prevTicks > 3) {\r\n break;\r\n }\r\n }\r\n else {\r\n prevFirstId = first;\r\n prevLastId = last;\r\n prevTicks = 0;\r\n }\r\n }\r\n curCell.FetchPageIndex++;\r\n\r\n // Request passed so let's assume it was server hiccup and refresh counts.\r\n retryAttempts = MAX_RETRY_ATTEMPTS;\r\n retryDelay = 0;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n\r\n // Request failed so let's add a delay and try again soon.\r\n retryDelay += RETRY_DELAY_INCREMENT;\r\n retryAttempts -= 1;\r\n }\r\n\r\n await delay(REQUEST_PAGE_DELAY);\r\n }\r\n\r\n if (postedLoading) {\r\n this.postStatus({ msg: EStatus.Loading, revoking: true });\r\n }\r\n if (postedScanning) {\r\n this.postStatus({ msg: EStatus.Scanning, revoking: true });\r\n }\r\n });\r\n }\r\n }\r\n}","import { Bounds } from \"../../common/bounds\";\nimport { BruceEvent } from \"../../common/bruce-event\";\nimport { Carto } from \"../../common/carto\";\nimport { ViewMonitor } from \"./view-monitor\";\n\nconst MAX_AREA_IN_DEGREES = 90;\nconst GETTER_DELAY = 50;\n\n/**\n * This is a batched \"arbitrary data\" getter.\n * You feed it an array of data, then it will emit that data in batches when the view changes.\n */\nexport namespace BatchedDataGetter {\n export class Getter<T> {\n private viewPort: ViewMonitor.IMonitor\n private viewPortRemoval: () => void = <any>null;\n \n private batchSize: number;\n private viewRect: Bounds.IReqBounds = <any>null;\n private viewCenter: Carto.ICarto = <any>null;\n private getterInterval: any;\n private data: T[];\n \n private onUpdate: BruceEvent<T[]> = <any>null;\n public get OnUpdate(): BruceEvent<T[]> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<T[]>();\n }\n return this.onUpdate;\n }\n \n \n public constructor(data: T[], viewPort: ViewMonitor.IMonitor, batchSize: number) {\n this.data = data;\n this.viewPort = viewPort;\n this.batchSize = batchSize;\n }\n\n public Start(): void {\n this.viewPortRemoval = this.viewPort.Updated().Subscribe(() => {\n this.updateViewport();\n });\n this.updateViewport();\n }\n\n public Dispose(): void {\n this.viewPortRemoval?.();\n }\n\n private updateViewport(): void {\n this.updateBounds();\n this.startGetterLoop();\n }\n \n private updateBounds(): void {\n const viewRect = this.viewPort.GetBounds();\n const poi = this.viewPort.GetTarget();\n if (viewRect && poi) {\n if (Math.abs(viewRect.west - viewRect.east) > MAX_AREA_IN_DEGREES) {\n return;\n }\n if (Math.abs(viewRect.south - viewRect.north) > MAX_AREA_IN_DEGREES) {\n return;\n }\n this.viewRect = viewRect;\n this.viewCenter = poi;\n }\n }\n \n private startGetterLoop(): void {\n clearInterval(this.getterInterval);\n if (!this.viewRect || !this.viewCenter) {\n return;\n }\n let index = 0;\n const onTick = (): boolean => {\n this.processBatch(this.data.slice(index, index + this.batchSize));\n index += this.batchSize;\n return index >= this.data.length;\n };\n if (!onTick()) {\n this.getterInterval = setInterval(() => {\n if (onTick()) {\n clearInterval(this.getterInterval);\n }\n }, GETTER_DELAY);\n }\n }\n \n private processBatch(batch: T[]): void {\n if (batch.length > 0) {\n this.onUpdate?.Trigger(batch);\n }\n }\n }\n}","export namespace MathUtils {\n /**\n * Rounds a number to a given number of decimal places.\n * @param num \n * @param decimals \n * @returns \n */\n export function Round(num: number, decimals: number = 0): number {\n if (decimals <= 0) {\n return Math.round(num);\n }\n let tmp = \"1\";\n for (let i = 0; i < decimals; i++) {\n tmp += \"0\";\n }\n const d = parseFloat(tmp);\n return Math.round((num + Number.EPSILON) * d) / d;\n }\n\n /**\n * Returns a random integer between min (inclusive) and max (inclusive).\n * @param min \n * @param max \n * @returns \n */\n export function RandInt(min: number, max: number): number {\n if (min == max) {\n return min;\n }\n else if (min > max) {\n throw(\"Min is greater than max.\");\n }\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { Carto } from \"../common/carto\";\r\nimport { Transform } from \"../common/transform\";\r\nimport { MathUtils } from \"../util/math-utils\";\r\nimport { Entity } from \"./entity\";\r\n\r\nexport namespace EntityCoords {\r\n export const UCS_ENTITY_TYPE_ID = \"Bruce_UCS_Type\";\r\n\r\n export function GetCacheKey(entityId: string): string {\r\n return Api.ECacheKey.EntityCoords + Api.ECacheKey.Entity + Api.ECacheKey.Id + entityId;\r\n }\r\n\r\n export interface IUcs {\r\n name: string;\r\n location: Carto.ICarto;\r\n \"Entity.ID\": string;\r\n transform: Transform.ITransform;\r\n }\r\n\r\n export interface IEntityCoords extends Entity.IEntity {\r\n ucs?: IUcs;\r\n }\r\n\r\n export interface IRelToPointParams {\r\n point: Carto.ICarto;\r\n test: boolean;\r\n name?: string;\r\n }\r\n\r\n export interface IRelToEpsgParams {\r\n epsg: number;\r\n test: boolean;\r\n name?: string;\r\n }\r\n\r\n export interface IRelToUcsParams {\r\n ucsId: string;\r\n test: boolean;\r\n name?: boolean;\r\n }\r\n\r\n export async function GetEntityCoords(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n coords: IEntityCoords\r\n }> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKey(entityId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entity/${entityId}/ucs`, reqParams);\r\n res({\r\n coords: data\r\n });\r\n } catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(entityId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function EntityRelativeToPoint(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n } & IRelToPointParams): Promise<{\r\n coords: IEntityCoords\r\n }> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n if (!params.test) {\r\n await UnlinkCoords({\r\n api,\r\n rootEntityId: entityId,\r\n req: reqParams\r\n });\r\n }\r\n const point = params.point;\r\n const name = params.name || `${MathUtils.Round(point.latitude, 4)}, ${MathUtils.Round(point.longitude, 4)}`;\r\n const res = await api.POST(`entity/${entityId}/ucs`, {\r\n \"ucs\": {\r\n \"Entity.ID\": null,\r\n \"name\": name,\r\n \"location\": {\r\n \"latitude\": point.latitude,\r\n \"longitude\": point.longitude,\r\n \"altitude\": point.altitude,\r\n \"coordinates\": {\r\n \"Entity.ID\": entityId\r\n }\r\n }\r\n },\r\n \"test\": params.test\r\n }, reqParams);\r\n if (!params.test) {\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n return {\r\n coords: res\r\n };\r\n }\r\n\r\n export async function EntityRelativeToEpsg(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n } & IRelToEpsgParams): Promise<{\r\n coords: IEntityCoords\r\n }> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n if (!params.test) {\r\n await UnlinkCoords({\r\n api,\r\n rootEntityId: entityId,\r\n req: reqParams\r\n });\r\n }\r\n const epsg = params.epsg;\r\n const name = params.name ?? \"EPSG: \" + epsg;\r\n const res = await api.POST(`entity/${entityId}/ucs`, {\r\n \"ucs\": {\r\n \"Entity.ID\": null,\r\n \"name\": name,\r\n \"location\": {\r\n \"coordinates\": {\r\n \"SRID\": \"EPSG:\" + epsg,\r\n \"Entity.ID\": entityId\r\n }\r\n }\r\n },\r\n \"test\": params.test\r\n }, reqParams);\r\n if (!params.test) {\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n return {\r\n coords: res\r\n };\r\n }\r\n\r\n export async function EntityRelativeToUcs(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n } & IRelToUcsParams): Promise<{\r\n coords: IEntityCoords\r\n }> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n if (!params.test) {\r\n await UnlinkCoords({\r\n api,\r\n rootEntityId: entityId,\r\n req: reqParams\r\n });\r\n }\r\n const ucsId = params.ucsId;\r\n const res = await api.POST(`entity/${entityId}/ucs`, {\r\n \"ucs\": {\r\n \"Entity.ID\": ucsId\r\n },\r\n \"test\": params.test\r\n }, reqParams);\r\n if (!params.test) {\r\n api.Cache.Remove(GetCacheKey(entityId));\r\n }\r\n return {\r\n coords: res\r\n };\r\n }\r\n\r\n export async function UnlinkCoords(params: {\r\n api: BruceApi.Api,\r\n rootEntityId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, rootEntityId: entityId, req: reqParams } = params;\r\n return api.DELETE(`entity/${entityId}/ucs`, reqParams);\r\n }\r\n}","export namespace EntityTypeVisualSettings {\r\n export enum EAction {\r\n LeftClick = \"LeftClick.CustomForm.ID\",\r\n RightClick = \"RightClick.CustomForm.ID\",\r\n DoubleClick = \"DoubleClick.CustomForm.ID\",\r\n MouseHover = \"MouseHover.CustomForm.ID\"\r\n }\r\n\r\n export interface ISettings {\r\n // Custom forms to display when a certain action is performed on related entities.\r\n // If the form is set to 0, that means use the default panel instead of a form.\r\n // When the form value is -1 that means don't display anything.\r\n CustomForms?: {\r\n // Default is 0.\r\n [EAction.LeftClick]?: number,\r\n // Default is -1.\r\n [EAction.RightClick]?: number,\r\n // Default is -1.\r\n [EAction.MouseHover]?: number,\r\n // Default is -1.\r\n [EAction.DoubleClick]?: number\r\n }\r\n }\r\n}","export namespace EntityAttribute {\r\n export enum EType {\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 Dictionary = \"Dictionary\",\r\n Boolean = \"Boolean\"\r\n }\r\n\r\n export interface IAttribute {\r\n Key: string;\r\n Name?: string;\r\n Type?: EType;\r\n Size?: number;\r\n IsIndexed?: boolean;\r\n IsArray?: boolean;\r\n IsImportant?: boolean;\r\n Description?: string;\r\n Metadata?: IMetadata;\r\n Structure?: IAttribute[];\r\n IsFamilyAttribute?: boolean;\r\n IsFamilyAttributeDefault?: boolean;\r\n Sources?: string[];\r\n }\r\n\r\n export interface IMetadata {\r\n Description?: string;\r\n Mandatory?: boolean;\r\n Dictionary?: IDictionary;\r\n }\r\n \r\n export interface IDictionary {\r\n UseAttribute?: boolean;\r\n EntityTypeID?: string;\r\n SourceAttributePath?: string;\r\n\r\n // exists so UI components don't break - depreciated. \r\n SourceAttribute?: IAttribute;\r\n }\r\n\r\n export function GetAttribute(items: IAttribute[], path: string[]): IAttribute {\r\n if (!items || !path || !path.length) {\r\n return null;\r\n }\r\n const key = path[0];\r\n const item = items.find((i) => i.Key === key);\r\n if (!item || !item.Structure || !path.length) {\r\n return item;\r\n }\r\n return GetAttribute(item.Structure, path.slice(1));\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\nexport namespace Uploader {\r\n export const MIN_LARGE_FILE_SIZE = 100000000; // 100MB.\r\n\r\n export interface IProgress {\r\n percent: number;\r\n uploaded: boolean;\r\n }\r\n\r\n export async function DoMultiPartUpload(params: {\r\n file: File,\r\n api: BruceApi.Api,\r\n urlSuffix: string,\r\n req?: Api.IUploadReqParams,\r\n onProgress?: (progress: IProgress) => void\r\n }) {\r\n const { file, api, urlSuffix: url, req, onProgress } = params;\r\n const FILE_PORTION_SIZE = 100000000; // 100MB.\r\n let fileSize = file.size;\r\n let fileOffset = 0;\r\n let filePartsCount = fileSize / FILE_PORTION_SIZE;\r\n let t = Math.trunc(filePartsCount);\r\n filePartsCount = filePartsCount > t ? t + 1 : t;\r\n let filePartIndex = 1;\r\n let uploadToken = ObjectUtils.UId();\r\n let data: any;\r\n while (fileOffset < fileSize) {\r\n let partSize = Math.min(FILE_PORTION_SIZE, fileSize - fileOffset);\r\n let retryCount: number = 5;\r\n let retryWait: number = 1000;\r\n while (retryCount > 0) {\r\n try {\r\n const blob = file.slice(fileOffset, fileOffset + partSize);\r\n const formData = new FormData();\r\n formData.append(\"originalFileName\", file.name);\r\n formData.append(\"token\", uploadToken);\r\n formData.append(\"count\", \"\" + filePartsCount);\r\n formData.append(\"part\", \"\" + filePartIndex);\r\n formData.append(\"file\", blob);\r\n const reqParams = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n reqParams.formData = formData;\r\n reqParams.onProgress = (progress: ProgressEvent) => {\r\n const sofar = fileOffset + progress.loaded;\r\n const percent = Math.round ((sofar / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n data = await api.UPLOAD(url, blob, reqParams)\r\n retryCount = 0;\r\n }\r\n catch (up) {\r\n retryCount -= 1;\r\n if (retryCount <= 0) {\r\n throw up;\r\n }\r\n await new Promise((res) => setTimeout(res, retryWait));\r\n retryWait = retryWait * 2;\r\n }\r\n }\r\n fileOffset += partSize;\r\n filePartIndex++;\r\n }\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return data;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi, IDictionary } from \"../bruce-models\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { Uploader } from \"../internal/uploader\";\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(params: {\r\n api: BruceApi.Api,\r\n fileId: string\r\n }): string {\r\n const { api, fileId } = params;\r\n return `${api.GetBaseUrl()}file/${fileId}`;\r\n }\r\n\r\n export function GetUrlWithExt(params: {\r\n api: BruceApi.Api,\r\n file: IClientFile\r\n }): string {\r\n const { api, file } = params;\r\n return `${api.GetBaseUrl()}file/${file.ID}${file.FileExt ? file.FileExt : \"\"}`;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n fileId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n clientFile: IClientFile\r\n }> {\r\n const { api, fileId, req: reqParams } = params;\r\n if (!fileId) {\r\n throw(\"File ID is required.\");\r\n }\r\n const key = GetCacheKey(fileId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`file/${fileId}/details`, Api.PrepReqParams(reqParams));\r\n res({\r\n clientFile: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n fileIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, fileIds, req: reqParams } = params;\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(reqParams));\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(params: {\r\n api: BruceApi.Api,\r\n file: File,\r\n purpose?: string,\r\n onProgress?: (progress: Uploader.IProgress) => void,\r\n req?: Api.IUploadReqParams\r\n }): Promise<{\r\n clientFile: IClientFile\r\n }> {\r\n let { api, file, purpose, req, onProgress } = params;\r\n if (!file) {\r\n throw(\"File is required.\");\r\n }\r\n const size = file?.size;\r\n if (!size) {\r\n throw(\"You cannot upload a 0byte sized file.\");\r\n }\r\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n let clientFile: IClientFile;\r\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\r\n clientFile = await Uploader.DoMultiPartUpload({\r\n api,\r\n file,\r\n urlSuffix: \"fileUpload\",\r\n req,\r\n onProgress\r\n });\r\n }\r\n else {\r\n req.onProgress = (progress: ProgressEvent) => {\r\n const percent = Math.round ((progress.loaded / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n clientFile = await api.UPLOAD(\"file/uploadNew\", file, req);\r\n }\r\n if (clientFile?.ID && purpose) {\r\n await UpdatePurpose({\r\n api,\r\n fileId: clientFile.ID,\r\n purpose,\r\n req\r\n })\r\n }\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return {\r\n clientFile\r\n };\r\n }\r\n\r\n export async function UpdatePurpose(params: {\r\n api: BruceApi.Api,\r\n fileId: string,\r\n purpose: string,\r\n req?: Api.IReqParams\r\n }) {\r\n let { api, fileId, purpose, req: reqParams } = params;\r\n if (!purpose) {\r\n purpose = \"\";\r\n }\r\n await api.POST(\"file/updatepurpose/\" + fileId + \"/?Purpose=\" + purpose, {\r\n Purpose: purpose\r\n }, Api.PrepReqParams(reqParams));\r\n const cacheKey = GetCacheKey(fileId);\r\n api.Cache.RemoveByContains(cacheKey);\r\n }\r\n\r\n /**\r\n * Uploads a temp file.\r\n * This will return a temp file id which can be used in various endpoints.\r\n * @param params\r\n * @returns\r\n */\r\n export async function UploadTemp(params: {\r\n api: BruceApi.Api,\r\n file: File,\r\n onProgress?: (progress: Uploader.IProgress) => void,\r\n req?: Api.IUploadReqParams\r\n }): Promise<{\r\n tempFileId: string\r\n }> {\r\n let { api, file, req, onProgress } = params;\r\n if (!file) {\r\n throw(\"File is required.\");\r\n }\r\n const size = file?.size;\r\n if (!size) {\r\n throw(\"You cannot upload a 0byte sized file.\");\r\n }\r\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n let tempFile: any;\r\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\r\n tempFile = await Uploader.DoMultiPartUpload({\r\n api,\r\n file,\r\n urlSuffix: \"tempFileUpload\",\r\n req,\r\n onProgress\r\n });\r\n }\r\n else {\r\n req.onProgress = (progress: ProgressEvent) => {\r\n const percent = Math.round ((progress.loaded / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n tempFile = await api.UPLOAD(\"file/uploadTemp\", file, req);\r\n }\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return {\r\n tempFileId: tempFile[\"TempFile.ID\"]\r\n };\r\n }\r\n\r\n export namespace Filter {\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\r\n export interface IFilter {\r\n PageSize?: number;\r\n PageIndex?: number;\r\n OrderBy?: Filter.EColumn;\r\n SortOrder?: Filter.ESortOrder;\r\n Purpose?: string;\r\n FilterRows?: Filter.IRow[];\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n filter: IFilter,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n clientFiles: IClientFile[],\r\n // Total available matching the filter.\r\n // This is not the total returned in the current page.\r\n totalCount: number\r\n }> {\r\n const { api, filter, req: reqParams } = params;\r\n const data = await api.POST(\"files/filtered\", filter, Api.PrepReqParams(reqParams));\r\n return {\r\n clientFiles: data.Items,\r\n totalCount: data.TotalCount\r\n };\r\n }\r\n\r\n export namespace Processor {\r\n export interface IResult {\r\n success: boolean;\r\n clientFileId: string;\r\n clientFileName: string;\r\n }\r\n\r\n export enum EConvertExt {\r\n GLB = \".glb\",\r\n SKP = \".skp\",\r\n }\r\n\r\n export async function ConvertFormat(params: {\r\n api: BruceApi.Api,\r\n fileId: string,\r\n ext: EConvertExt | string,\r\n req?: Api.IReqParams\r\n }): Promise<IResult> {\r\n const { api, fileId: clientFileId, ext, req: reqParams } = params;\r\n if (!clientFileId || !ext) {\r\n throw(\"Client File ID and extension are required.\");\r\n }\r\n return api.POST(\"convertFileToFile\", {\r\n clientFileId: clientFileId,\r\n destinationFormat: ext,\r\n operations: []\r\n }, reqParams);\r\n }\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 Google = \"Google\"\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(params: {\r\n api: BruceApi.Api,\r\n programId: Id,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n programKey: IKey\r\n }> {\r\n const { api, programId, req: reqParams } = params;\r\n if (!programId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n const key = GetCacheKey(programId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`programkey/${programId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n programKey: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n programKeys: IKey[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"programkeys\", Api.PrepReqParams(reqParams));\r\n res({\r\n programKeys: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n programId: Id,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, programId, req: reqParams } = params;\r\n if (!programId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n await api.DELETE(`programkey/${programId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(programId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n programKey: IKey,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n programKey: IKey\r\n }> {\r\n const { api, programKey: data, req: reqParams } = params;\r\n if (!data?.ProgramId) {\r\n throw(\"Program ID is required.\");\r\n }\r\n const res = await api.POST(\"programkey\", data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ProgramId));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n programKey: res\r\n };\r\n }\r\n}","import { Style } from \"../bruce-models\";\n\n/**\n * Describes an expectation on what should be rendered for a menu item-\n * between a min-max distance of an entity to the camera.\n */\nexport namespace ZoomControl {\n export enum EDisplayType {\n Hidden = \"hidden\",\n Point = \"point\",\n Geometry = \"geometry\",\n Model3D = \"3d\"\n }\n\n export interface IItem {\n MinZoom?: number,\n MaxZoom?: number,\n DisplayType?: EDisplayType,\n StyleID?: number,\n Style?: Style.IEntitySettings;\n LODCategoryID?: string,\n LODLevel?: number | string;\n }\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { PendingAction } from \"../server/pending-action\";\r\nimport { GlobalApi } from \"../api/global-api\";\r\nimport { Transform } from \"../common/transform\";\r\nimport { Carto } from \"../common/carto\";\r\nimport { Bounds } from \"../common/bounds\";\r\nimport { IDictionary } from \"../bruce-models\";\r\nimport { Uploader } from \"../internal/uploader\";\r\n\r\ntype Settings = Tileset.Settings.IPointcloud |\r\n Tileset.Settings.ICad |\r\n Tileset.Settings.IEntitiesMap |\r\n Tileset.Settings.IEntities |\r\n Tileset.Settings.IExternalMap |\r\n Tileset.Settings.IExternalTerrain |\r\n Tileset.Settings.IMap |\r\n Tileset.Settings.ITerrain;\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 loadUrl?: string;\r\n isRestricted?: 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 LegacyEntitiesSet = \"D\",\r\n LegacyStatic = \"S\",\r\n LegacyExternal = \"X\"\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 async function Get(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n loadFiles?: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tileset: ITileset\r\n }> {\r\n const { api, tilesetId, loadFiles, req: reqParams } = params;\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(tilesetId, loadFiles), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`tileset/get/${tilesetId}?noFiles=${Boolean(loadFiles) ? 0 : 1}`, reqParams);\r\n res({\r\n tileset: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(tilesetId, loadFiles),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * Returns tileset types for given tileset ids.\r\n * @param params\r\n * @returns\r\n */\r\n export async function GetTypes(params: {\r\n api: BruceApi.Api,\r\n tilesetIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n // Tileset id -> type mapping.\r\n typeMapping: IDictionary<EType>\r\n }> {\r\n // Our api is auto-converting legacy types right now which makes it impossible to know what they are.\r\n // This uses the legacy end-point which doesn't do that...\r\n const { api, tilesetIds, req: reqParams } = params;\r\n const mapping = {};\r\n if (tilesetIds.length == 1) {\r\n const tileset = await api.GET(\"ui.tileset/\" + tilesetIds[0], Api.PrepReqParams(reqParams));\r\n if (tileset) {\r\n mapping[tilesetIds[0]] = tileset.Type;\r\n }\r\n }\r\n else if (tilesetIds.length > 1) {\r\n const tilesets = await api.GET(\"ui.tilesets\", Api.PrepReqParams(reqParams));\r\n for (const tileset of tilesets) {\r\n if (tilesetIds.indexOf(tileset.ID) >= 0) {\r\n mapping[tileset.ID] = tileset.Type;\r\n }\r\n }\r\n }\r\n return {\r\n typeMapping: mapping\r\n };\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tilesets: ITileset[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"tileset/getList\", reqParams)\r\n res({\r\n tilesets: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tilesetId, req: reqParams } = params;\r\n if (!tilesetId) {\r\n throw(\"Tileset ID is required.\");\r\n }\r\n await api.DELETE(`tileset/delete/${tilesetId}`, reqParams);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + tilesetId);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n tileset: ITileset,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n tileset: ITileset\r\n }> {\r\n let { api, tileset: data, req: reqParams } = params;\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)}`, reqParams);\r\n data = {\r\n ...res,\r\n ...data,\r\n settings: {\r\n ...res.settings,\r\n ...data.settings\r\n },\r\n id: res.id\r\n }\r\n }\r\n await api.POST(`tileset/update/${data.id}`, data, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset + Api.ECacheKey.Id + data.id);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.Tileset);\r\n return {\r\n tileset: data\r\n };\r\n }\r\n\r\n export async function UploadFile(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: File,\r\n onProgress?: (progress: Uploader.IProgress) => void,\r\n req?: Api.IUploadReqParams\r\n }): Promise<void> {\r\n let { api, file, req, tilesetId, onProgress } = params;\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n const size = file?.size;\r\n if (!size) {\r\n throw(\"You cannot upload a 0byte sized file.\");\r\n }\r\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\r\n await Uploader.DoMultiPartUpload({\r\n api,\r\n file,\r\n urlSuffix: `tileset/uploadFileEx/${tilesetId}/add`,\r\n req,\r\n onProgress\r\n });\r\n }\r\n else {\r\n req.onProgress = (progress: ProgressEvent) => {\r\n const percent = Math.round ((progress.loaded / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/files`, file, req);\r\n }\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n }\r\n\r\n export async function DeleteFile(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tilesetId, file, req: reqParams } = params;\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}`, reqParams);\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export async function UploadSrcFile(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: File,\r\n onProgress?: (progress: Uploader.IProgress) => void,\r\n req?: Api.IUploadReqParams\r\n }): Promise<void> {\r\n let { api, file, req, tilesetId, onProgress } = params;\r\n if (!tilesetId || !file) {\r\n throw(\"Tileset ID and file are required.\");\r\n }\r\n const size = file?.size;\r\n if (!size) {\r\n throw(\"You cannot upload a 0byte sized file.\");\r\n }\r\n req = Api.PrepReqParams(req) as Api.IUploadReqParams;\r\n if (size > Uploader.MIN_LARGE_FILE_SIZE) {\r\n await Uploader.DoMultiPartUpload({\r\n api,\r\n file,\r\n urlSuffix: `tileset/uploadFileEx/${tilesetId}/src`,\r\n req,\r\n onProgress\r\n });\r\n }\r\n else {\r\n req.onProgress = (progress: ProgressEvent) => {\r\n const percent = Math.round ((progress.loaded / file.size) * 100);\r\n onProgress?.({\r\n percent: percent,\r\n uploaded: false\r\n });\r\n };\r\n await api.UPLOAD(`tileset/uploadFile/${tilesetId}/src`, file, req);\r\n }\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n onProgress?.({\r\n percent: 100,\r\n uploaded: true\r\n });\r\n return;\r\n }\r\n\r\n export async function DeleteSrcFile(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tilesetId, file, req: reqParams } = params;\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}`, reqParams);\r\n api.Cache.Remove(GetCacheKey(tilesetId, true));\r\n }\r\n\r\n export function GetFileUrl(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string\r\n }): string {\r\n let { api, tilesetId, file } = params;\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(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string\r\n }): string {\r\n let { api, tilesetId, file } = params;\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(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n file: string\r\n }): string {\r\n let { api, tilesetId, file } = params;\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(params: {\r\n api: BruceApi.Api,\r\n tilesetId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n pendingActionId: number\r\n }> {\r\n const { api, tilesetId, req: reqParams } = params;\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}`, Api.PrepReqParams(reqParams));\r\n return {\r\n pendingActionId: res.ID\r\n };\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 Name: string;\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(params: {\r\n api: GlobalApi.Api,\r\n published: IPublish,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n published: IPublish\r\n }> {\r\n const { api, published: data, req: reqParams } = params;\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, reqParams);\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, reqParams);\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 {\r\n published: data\r\n };\r\n }\r\n\r\n export async function Get(params: {\r\n api: GlobalApi.Api,\r\n accountId: string,\r\n tilesetId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n published: IPublish\r\n }> {\r\n const { api, accountId, tilesetId, req: reqParams } = params;\r\n if (!accountId || !tilesetId) {\r\n throw(\"Client account ID and tileset ID are required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(accountId, tilesetId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`tilesetByPublisher/${accountId}/${tilesetId}`, reqParams);\r\n res({\r\n published: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(accountId, tilesetId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: GlobalApi.Api,\r\n accountId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n published: IPublish[]\r\n }> {\r\n const { api, accountId, req: reqParams } = params;\r\n if (!accountId) {\r\n throw(\"Client account ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`tilesets/enabledForAccount/${accountId}`, reqParams);\r\n res({\r\n published: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(accountId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n }\r\n\r\n export namespace Settings {\r\n export interface ICad {\r\n rootEntityId: string;\r\n entityTypeId: string;\r\n styleId?: number;\r\n lodKey?: string;\r\n movePivot?: Tileset.EPivot;\r\n ucsId?: number;\r\n epsg?: number;\r\n thumbFileId?: string;\r\n location?: Carto.ICarto;\r\n offset?: any;\r\n transform?: Transform.ITransform;\r\n doubleSided?: boolean;\r\n b3dmFileSize?: number;\r\n maximumScreenSpaceError?: number;\r\n }\r\n\r\n export enum EMapTileSize {\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 IEntitiesMap {\r\n imageSize: EMapTileSize;\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 export interface IEntities {\r\n zoomControl?: any[];\r\n boundaries?: Bounds.IBounds;\r\n filter?: any;\r\n altitudeRefType?: string;\r\n terrainSource?: string;\r\n terrainUri?: string;\r\n doubleSided?: boolean;\r\n entityTypeId?: string;\r\n styleId?: number;\r\n }\r\n\r\n export enum EExternalMapType {\r\n TileMapImagery = \"TileMapImagery\",\r\n OpenStreetMapImagery = \"OpenStreetMapImagery\",\r\n MapBoxImagery = \"MapBoxImagery\",\r\n CesiumIon = \"CesiumIon\"\r\n }\r\n\r\n export interface IExternalMap {\r\n url?: string;\r\n mapType?: EExternalMapType;\r\n sourceExt?: string;\r\n ionId?: number;\r\n mapBoxStyleId?: string;\r\n mapBoxAccount?: string;\r\n mapBoxKey?: string;\r\n }\r\n\r\n export interface IExternalTerrain {\r\n requestVertexNormals?: boolean;\r\n url?: string;\r\n }\r\n\r\n export interface IMap {\r\n sourceFileId: string;\r\n imageSize: number;\r\n levelMin: number;\r\n levelMax: number;\r\n boundaries?: Bounds.IBounds;\r\n }\r\n\r\n export interface IPointcloud {\r\n sourceFileIds: string[];\r\n location: Carto.ICarto;\r\n transform: Transform.ITransform;\r\n pntFileSize?: number;\r\n epsg?: number;\r\n attenuation?: boolean;\r\n attenuationMax?: number;\r\n movePivot?: Tileset.EPivot;\r\n maximumScreenSpaceError?: number;\r\n }\r\n\r\n export interface ITerrain {\r\n sourceFileId?: string;\r\n startLevel?: number;\r\n }\r\n }\r\n}","import { IDictionary } from \"../bruce-models\";\r\nimport { Entity } from \"../entity/entity\";\r\nimport { Tileset } from \"../tileset/tileset\";\r\nimport { ObjectUtils } from \"../util/object-utils\";\r\nimport { ZoomControl } from \"./zoom-control\";\r\n\r\n/**\r\n * Describes a menu item found in project views.\r\n * Menu items are used to dictate what data to load in a scene.\r\n * A menu item may be a container for other items.\r\n */\r\nexport namespace MenuItem {\r\n export enum EType {\r\n None = \"NONE\",\r\n Entities = \"BruceEntity\",\r\n Entity = \"SingleEntity\",\r\n Osm = \"OSMBuildingsTileset\",\r\n CadTileset = \"ModelTileset\",\r\n ArbTileset = \"ArbitraryTileset\",\r\n IonTileset = \"Cesium3DTileset\",\r\n Kml = \"StaticKML\",\r\n EntityTileset = \"EntitiesTileset\",\r\n EntityRaster = \"RasterEntitiesTileset\",\r\n PointCloud = \"PointCloudTileset\",\r\n EntitiesLoaded = \"LoadedEntities\",\r\n EntitiesIds = \"EntitiesIds\",\r\n Relations = \"Relations\",\r\n GooglePhotoTileset = \"GooglePhotoTileset\"\r\n }\r\n\r\n export interface ILegend {\r\n model3d: boolean;\r\n point: boolean;\r\n polygon: boolean;\r\n polylines: boolean;\r\n tileset3d: boolean;\r\n }\r\n\r\n export interface IAuthorSettings {\r\n // If true, the clicked entity will be read and used to update the authored entity.\r\n readClickedEntity?: boolean;\r\n // Optional relationship type to use when relating to the clicked entity.\r\n clickedRelationTypeId?: string;\r\n // If set, specified attributes will be copied between the clicked and authored entities.\r\n copyClickedAttrMapping?: {\r\n // String is a wrapped path, check PathUtils.\r\n fromPathStr: string;\r\n toPathStr: string;\r\n }[];\r\n }\r\n\r\n export interface IItem {\r\n id: string;\r\n Caption: string;\r\n Children?: IItem[];\r\n Type: EType;\r\n hideChildren?: boolean;\r\n legend?: ILegend;\r\n authoringEnabled?: boolean;\r\n authoring?: IAuthorSettings;\r\n LabelColor?: string;\r\n renderPriority?: number;\r\n // Default = false.\r\n cdnEnabled?: boolean;\r\n // Used to kill cache. Default = 0.\r\n // Tilesets have their own counter within their records.\r\n // This is used for non-tileset items.\r\n cdnCounter?: number;\r\n }\r\n\r\n export function CreateFromEntityId(entityId: string, typeId: string, styleId?: number): IItem {\r\n return <Item.IEntity>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.Entity,\r\n Caption: \"Generated Entity Menu Item\",\r\n BruceEntity: {\r\n \"EntityType.ID\": typeId,\r\n EntityId: entityId\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n MaxZoom: 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.IEntities>{\r\n id: ObjectUtils.UId(),\r\n Type: EType.Entities,\r\n Caption: \"Generated Entity Type Menu Item\",\r\n BruceEntity: {\r\n \"EntityType.ID\": typeId\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n MaxZoom: 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 IEntities extends IItem {\r\n BruceEntity: {\r\n \"EntityType.ID\": string;\r\n Filter?: IDictionary<string>;\r\n // If true, menu item will display individual sub-items for tags.\r\n ExpandLayers?: boolean;\r\n // If ExpandLayers = true, this is the saved sub-items to render.\r\n // If this is null or empty, that means there is nothing to render for this menu item.\r\n SelectedExpandLayers?: number[];\r\n };\r\n CameraZoomSettings: ZoomControl.IItem[];\r\n\r\n // If BruceEntity.ExpandLayers = true,\r\n // this will dictate if camera should be used to scan for tags in view.\r\n filterLayersByCameraLocation?: boolean;\r\n showAllLayersExcludeBelow?: boolean;\r\n layers?: number[];\r\n extLayers?: {\r\n ID: number,\r\n checked: boolean\r\n }[];\r\n }\r\n\r\n export interface IEntity extends IItem {\r\n BruceEntity: {\r\n \"EntityType.ID\": string;\r\n EntityId: string;\r\n };\r\n CameraZoomSettings: ZoomControl.IItem[];\r\n showAllLayers?: boolean;\r\n showAllLayersExcludeBelow?: boolean;\r\n }\r\n\r\n export interface IArbTileset extends IItem {\r\n FlyTo?: boolean;\r\n BruceEntity?: {\r\n \"EntityType.ID\"?: string;\r\n };\r\n tileset?: ITileset;\r\n StyleMapping?: any[];\r\n styleId?: number;\r\n ApplyStyles?: boolean;\r\n IonResource?: {\r\n AssetID: string | number;\r\n }\r\n }\r\n export interface IIonTileset extends IArbTileset {};\r\n\r\n export interface ICadTileset extends IItem {\r\n tileset: ITileset;\r\n FlyTo?: boolean;\r\n StyleMapping?: any[];\r\n StyleBlending?: {\r\n // Hightlight = 0, replace = 1, mix = 2.\r\n blendMode: 0 | 1 | 2;\r\n // 1 = 100% new colour. 0 = original colour.\r\n blendPercent: number;\r\n };\r\n styleId?: number;\r\n BruceEntity?: {\r\n // Optional restriction.\r\n // When not null, only entities matching supplied ids will be visible.\r\n EntityIds?: string[];\r\n // Optional styling.\r\n // When entity ids are set, other entities can optionally be \"ghosts\".\r\n // This means they will be available but at low opacity.\r\n Ghosts?: boolean;\r\n }\r\n }\r\n\r\n export interface IPointcloud extends IItem {\r\n 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 // Arbitrarily hosted file to load instead of a client file.\r\n fileUrl?: string;\r\n }[]\r\n }\r\n\r\n export interface IEntitiesTileset extends IItem {\r\n 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 export interface IEntityRelations extends MenuItem.IItem {\r\n BruceEntity: {\r\n EntityIds: string[];\r\n },\r\n // Empty = render all types.\r\n relationTypeIds?: string[]\r\n }\r\n\r\n export interface IGooglePhotoTileset extends IItem {\r\n // Css color string to apply to the tileset.\r\n // This follows Cesium logic for when color is pure white,\r\n // that means don't apply colour and only apply alpha.\r\n colorMask?: string;\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { IDictionary } from \"../bruce-models\";\r\nimport { Camera } from \"../common/camera\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { Markup } from \"../markup/markup\";\r\nimport { ProjectViewTile } from \"./project-view-tile\";\r\n\r\n/**\r\n * Describe the \"Project View Bookmark\" concept within Bruce.\r\n * This is referred to as \"slides\" in older code.\r\n *\r\n * A bookmark is a snapshot of what should be displayed and how in a particular project view.\r\n */\r\nexport namespace ProjectViewBookmark {\r\n export function GetCacheKey(viewId: string, bookmarkId: string): string {\r\n return `${Api.ECacheKey.ProjectViewBookmark}${Api.ECacheKey.Id}${viewId}${Api.ECacheKey.Id}${bookmarkId}`;\r\n }\r\n\r\n export function GetListCacheKey(viewId: string): string {\r\n return `${Api.ECacheKey.ProjectViewBookmark}${Api.ECacheKey.Id}${viewId}`;\r\n }\r\n\r\n // This is the expected default version for the DataVersion value.\r\n // This value should NOT be changed without looking at our API and seeing what the default value is.\r\n export const DEFAULT_DATA_VERSION = 1;\r\n\r\n export interface IBaseBookmark {\r\n ID?: string;\r\n Title?: string;\r\n Note?: string;\r\n \"Screenshot.ClientFile.ID\"?: string;\r\n \"UI.View.ID\"?: string;\r\n \"Created.ByUser.ID\"?: string;\r\n \"Created.Date\"?: UTC.IUTC;\r\n \"UI.SlideGroup.ID\"?: number;\r\n // This is the version of the data in the bookmark.\r\n // This is used to determine how to parse the bookmark's settings.\r\n // 1 - 10,000 are reserved for Nextspace use.\r\n DataVersion: number;\r\n DisplayOrder?: number;\r\n Settings?: IBaseSettings;\r\n }\r\n\r\n /**\r\n * These are the base settings expected in any bookmark data-version.\r\n * The only exception is data-version = 1 which is our deprecated legacy format.\r\n */\r\n export interface IBaseSettings {\r\n menuItemIds?: string[];\r\n }\r\n\r\n export type Bookmark = LegacyNavigator.IBookmark | Navigator.IBookmark | IBaseBookmark;\r\n\r\n export namespace LegacyNavigator {\r\n export const DATA_VERSION = 1;\r\n\r\n export interface IBookmark extends IBaseBookmark {\r\n Camera?: ICamera;\r\n Settings?: ISettings;\r\n }\r\n\r\n export interface IBookmarkImagery {\r\n title: string;\r\n contrast: number;\r\n hue: number;\r\n saturation: number;\r\n gamma: number;\r\n brightness: number;\r\n alpha: number;\r\n }\r\n\r\n export interface ISettings extends IBaseSettings {\r\n selectedItemIds?: string[];\r\n order?: number;\r\n hiddenEntityIds?: string[];\r\n drawnRelationEntityIDs?: string[];\r\n imagery?: IBookmarkImagery[];\r\n terrain?: string;\r\n globeColor?: string;\r\n shadows?: boolean;\r\n groundOcclusion?: boolean;\r\n ambientOcclusion?: boolean;\r\n markup?: Markup.IMarkup;\r\n cameraFrustum?: Camera.EFrustum;\r\n displayTimeline?: boolean;\r\n timelineSettings?: any;\r\n }\r\n\r\n /**\r\n * Lat,lon is in degrees.\r\n * Altitude is meters relative to ground.\r\n * Heading, pitch, roll are in radians.\r\n */\r\n export interface ICamera {\r\n position: {\r\n latitude: number;\r\n longitude: number;\r\n height: number;\r\n };\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export const DATA_VERSION = 2;\r\n\r\n export interface IBookmark extends IBaseBookmark {\r\n Camera?: ICamera;\r\n Settings?: ISettings;\r\n }\r\n\r\n export interface ISettings extends IBaseSettings {\r\n groundOcclusion?: boolean;\r\n // Null = use default, empty array = no imagery.\r\n imagery?: ProjectViewTile.IBookmarkImagery[];\r\n terrain?: ProjectViewTile.IBookmarkTerrain;\r\n // Css color string to apply to the base globe.\r\n globeColor?: string;\r\n // 0 = 0%, 1 = 100%. Default is 100%.\r\n globeAlpha?: number;\r\n // If true, the globe will be hidden. Default is false.\r\n globeHidden?: boolean;\r\n markup?: Markup.IMarkup;\r\n shadows?: IShadows;\r\n ambientOcclusion?: IAmbientOcclusion;\r\n lighting?: ILighting;\r\n quality?: IQuality;\r\n // iso8601 date time string.\r\n dateTime?: string;\r\n // Entity id -> opacity. Where 1 = 100% opacity.\r\n entityOpacityMap?: IDictionary<number>;\r\n // Null = use default, empty array = deselect.\r\n // If default is null then selected ids should not be altered.\r\n selectedEntityIds?: string[];\r\n hiddenEntityIds?: string[];\r\n isolatedEntityIds?: string[];\r\n // This enables lighting that makes terrain elevation apparent.\r\n hillShades?: boolean;\r\n // A bit of an awkward transition from the old system.\r\n // We render \"all\" relationships for given entity ids.\r\n // This will create a menu item under the hood, later we will use menu items directly.\r\n renderedEntityRelations?: string[];\r\n }\r\n\r\n export interface IShadows {\r\n enabled: boolean;\r\n soften: boolean;\r\n pixelSize: number;\r\n darkness: number;\r\n }\r\n\r\n export interface IAmbientOcclusion {\r\n enabled: boolean;\r\n intensity: number;\r\n lengthCap: number;\r\n bias: number;\r\n blurStepSize: number;\r\n stepSize: number;\r\n }\r\n\r\n export interface ILighting {\r\n color: string;\r\n intensity: number;\r\n }\r\n\r\n export interface IQuality {\r\n fxaa: boolean;\r\n }\r\n\r\n export interface ICamera {\r\n // Meters relative to ground.\r\n altitude: number;\r\n // In degrees.\r\n latitude: number;\r\n longitude: number;\r\n heading: number;\r\n pitch: number;\r\n roll: number;\r\n // Milliseconds transition from current position to bookmark.\r\n transition?: number;\r\n // If frustum is different between two bookmarks, transition should be instant.\r\n cameraFrustum?: Camera.EFrustum;\r\n }\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n bookmarkId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmark: Bookmark\r\n }> {\r\n const { api, viewId, bookmarkId, req: reqParams } = params;\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 = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n bookmark: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n bookmarkId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, viewId, bookmarkId, req: reqParams } = params;\r\n if (!viewId || !bookmarkId) {\r\n throw(\"View ID and Bookmark ID are required.\");\r\n }\r\n await api.DELETE(`ui.view/${viewId}/slide/${bookmarkId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId, bookmarkId));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmarks: Bookmark[]\r\n }> {\r\n const { api, viewId, req: reqParams } = params;\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(viewId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}/slides`, Api.PrepReqParams(reqParams));;\r\n const items = data.Items ? data.Items : [];\r\n // Cache individual items.\r\n // Maybe better to load list cache when getting 1 slide and seeing if it's in there.\r\n // WARNING: Right now the data matches, in the future the list may contain a shortened result.\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i] as ProjectViewBookmark.IBaseBookmark;\r\n const prom = new Promise((res) => {\r\n res({\r\n bookmark: item\r\n });\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(viewId, item.ID),\r\n value: prom,\r\n req: reqParams\r\n });\r\n }\r\n res({\r\n bookmarks: items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(viewId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n bookmark: Bookmark,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n bookmark: Bookmark\r\n }> {\r\n const { api, viewId, bookmark: data, req: reqParams } = params;\r\n if (!data?.Title) {\r\n data.Title = data.ID;\r\n }\r\n const res = await api.POST(`ui.view/${viewId}/slide/${data.ID ? data.ID : \"\"}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId, <string>data.ID));\r\n api.Cache.Remove(GetListCacheKey(viewId));\r\n return {\r\n bookmark: res\r\n };\r\n }\r\n\r\n export async function SetOrder(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n bookmarkIds: string[],\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, viewId, bookmarkIds, req: reqParams } = params;\r\n const reqData = {\r\n \t\"UISlide.ID\": bookmarkIds,\r\n \t\"DisplayOrder.Start\": 0\r\n };\r\n await api.POST(`ui.view/${viewId}/slides/setOrder`, reqData, Api.PrepReqParams(reqParams));\r\n await api.Cache.RemoveByStartsWith(GetListCacheKey(viewId));\r\n }\r\n}","import { Api } from \"../api/api\";\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 { ProjectViewLegacyTile } from \"./project-view-legacy-tile\";\r\nimport { ProjectViewTile } from \"./project-view-tile\";\r\nimport { ProjectViewBookmark } from \"./project-view-bookmark\";\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 // This is the expected default version for the DataVersion value.\r\n // This value should NOT be changed without looking at our API and seeing what the default value is.\r\n export const DEFAULT_DATA_VERSION = 1;\r\n\r\n export interface IBaseView {\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 DefaultUISlideID?: string;\r\n CreatedByUIVersion?: string;\r\n // This is the version of the data in the view.\r\n // This is used to determine how to parse the view's settings.\r\n // 1 - 10,000 are reserved for Nextspace use.\r\n DataVersion: number;\r\n // Admin only property for what email should be the project view's support line.\r\n SupportEmail?: string;\r\n Settings?: IBaseSettings;\r\n // If true, this view is considered the default for the account.\r\n // Operator may use this project view to load default settings.\r\n IsDefault?: boolean;\r\n }\r\n\r\n /**\r\n * These are the base settings expected in any project view data-version.\r\n * The only exception is data-version = 1 which is our deprecated legacy format.\r\n */\r\n export interface IBaseSettings {\r\n // Menu item structure that defines how and what to load in the scene.\r\n menuItems?: MenuItem.IItem[];\r\n // If true, anonymous users won't be able to access the view.\r\n IsLoginRequired?: boolean;\r\n // If true, users must have the permission \"Permission.EPermPrefix.ACCESS_PROJECT_VIEW + view.ID\" to access the view.\r\n IsRestricted?: boolean;\r\n }\r\n\r\n export type View = LegacyNavigator.IView | Navigator.IView | IBaseView;\r\n\r\n export namespace LegacyNavigator {\r\n export const DATA_VERSION = 1;\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 ISettings extends IBaseSettings {\r\n BookmarkTransitionSpeed?: number;\r\n Camera?: any;\r\n CameraFrustum?: number;\r\n CesiumMapSources?: ProjectViewLegacyTile.IMapSource[];\r\n CesiumTerrainSources?: ProjectViewLegacyTile.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 TilesetBackfaceCulling?: boolean;\r\n TopPanelComponents?: string[];\r\n LeftPanelComponents?: string[];\r\n PostProcessFXAA?: boolean;\r\n Shadows?: boolean;\r\n CustomFormSettings?: any;\r\n PreloadEntityTypes?: boolean;\r\n ClickActions?: any;\r\n Shadow?: {\r\n StaticCamera?: IShadowSettings;\r\n MovingCamera?: IShadowSettings;\r\n }\r\n }\r\n\r\n export interface IView extends IBaseView {\r\n Settings: ISettings;\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export const DATA_VERSION = 2;\r\n\r\n export interface ISettings extends IBaseSettings {\r\n // Imagery and terrains that non-admin users can select from.\r\n // Sources used in bookmarks will automatically be added to this list.\r\n imageries?: ProjectViewTile.IViewImagery[];\r\n terrains?: ProjectViewTile.IViewTerrain[];\r\n // Defaults are values to apply for bookmarks when either the bookmark-\r\n // is missing or the value is missing in the bookmark settings.\r\n defaults?: {\r\n camera?: ProjectViewBookmark.Navigator.ICamera;\r\n settings?: ProjectViewBookmark.Navigator.ISettings;\r\n };\r\n // Describes how to present contact information to the users.\r\n // The contact email is set in \"view.SupportEmail\". Only an admin can read or write this value.\r\n contact?: IContact;\r\n plugins?: IPlugins;\r\n // Default is yellow at 0.5 opacity.\r\n selectionColor?: string;\r\n }\r\n\r\n /**\r\n * Describes how to present contact information to the users.\r\n */\r\n export interface IContact {\r\n // Default = false.\r\n // Indicates if the user should be able to reach support.\r\n enabled: boolean;\r\n // Description to display in the support dialog.\r\n // Null = application's default text.\r\n description?: string;\r\n // FontAwesome icon to use for the support dialog button.\r\n // Null = application's default icon.\r\n icon?: string;\r\n }\r\n\r\n export interface IPlugins {\r\n // Enabled plugin ids.\r\n enabledIds: string[];\r\n }\r\n\r\n export interface IView extends IBaseView {\r\n Settings: ISettings;\r\n }\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n view: View\r\n }> {\r\n const { api, viewId, req: reqParams } = params;\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n const key = GetCacheKey(viewId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.view/${viewId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n view: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n views: View[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.view/list\", Api.PrepReqParams(reqParams));\r\n res({\r\n views: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n viewId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, viewId, req: reqParams } = params;\r\n if (!viewId) {\r\n throw(\"View ID is required.\");\r\n }\r\n await api.DELETE(`ui.view/${viewId}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(viewId));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n view: View,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n view: View\r\n }> {\r\n let { api, view: data, req: reqParams } = params;\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(reqParams));\r\n }\r\n else {\r\n data = await api.PUT(`ui.view/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n }\r\n api.Cache.Remove(GetCacheKey(<string>data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n view: data\r\n };\r\n }\r\n}","import { BruceApi } from \"../api/bruce-api\";\r\nimport { Api } from \"../api/api\";\r\nimport { ProjectView } from \"./project-view\";\r\n\r\nasync function getTemplateSettings(apiGetter: BruceApi.IGetter, reqParams?: Api.IReqParams): Promise<ProjectView.LegacyNavigator.ISettings> {\r\n const {view} = await ProjectView.Get({\r\n api: apiGetter.getApi(Api.TEMPLATE_ACCOUNT_ID), \r\n viewId: \"default\", \r\n req: reqParams\r\n });\r\n return (view.Settings as ProjectView.LegacyNavigator.ISettings) ?? <ProjectView.LegacyNavigator.ISettings>{};\r\n}\r\n\r\nfunction checkSourceToTemplate(items: ProjectViewLegacyTile.ISource[], templateItem: ProjectViewLegacyTile.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 ProjectViewLegacyTile {\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(params: {\r\n getter: BruceApi.IGetter, \r\n sources: IMapSource[], \r\n addIfMissing: boolean, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n sources: IMapSource[]\r\n }> {\r\n const { getter, sources: items, addIfMissing, req: reqParams } = params;\r\n const settings = await getTemplateSettings(getter, reqParams);\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 sources: items\r\n };\r\n }\r\n\r\n export async function MergeTerrainTemplateData(params: {\r\n getter: BruceApi.IGetter, \r\n sources: ITerrainSource[], \r\n addIfMissing: boolean, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n sources: ITerrainSource[]\r\n }> {\r\n const { getter, sources: items, addIfMissing, req: reqParams } = params;\r\n const settings = await getTemplateSettings(getter, reqParams);\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 sources: items\r\n };\r\n }\r\n}","\r\nexport namespace ProjectViewTile {\r\n export type MapTileId = string | EDefaultImagery;\r\n export type TerrainTileId = string | EDefaultTerrain;\r\n\r\n export interface ITileMeta {\r\n // Null = using a default tile.\r\n // (Not the same as a template account one. Default means we don't have a database record of it.).\r\n accountId?: string;\r\n tilesetId: string;\r\n }\r\n\r\n export interface IViewTerrain extends ITileMeta {\r\n tilesetId: TerrainTileId;\r\n }\r\n\r\n export interface IViewImagery extends ITileMeta {\r\n tilesetId: MapTileId;\r\n }\r\n\r\n export interface IBookmarkImagery extends IViewImagery {\r\n // 0 - 1, 1 = 100% opacity.\r\n // Default = 1.\r\n alpha?: number;\r\n // Default = 1.\r\n brightness?: number;\r\n // Default = 1.\r\n saturation?: number;\r\n // Default = 1.\r\n contrast?: number;\r\n // Default = 1.\r\n gamma?: number;\r\n // Default = 0.\r\n hue?: number;\r\n }\r\n\r\n export interface IBookmarkTerrain extends IViewTerrain {\r\n\r\n }\r\n\r\n export enum EDefaultImagery {\r\n BingMapsAerial = \"bingmapsaerial\",\r\n BingMapsAerialWithLabels = \"bingmapsaerialwithlabels\",\r\n BingMapsRoads = \"bingmapsroads\",\r\n MapboxSatellite = \"mapboxsatellite\",\r\n MapBoxStreets = \"mapboxstreets\",\r\n MapBoxStreetsClassic = \"mapboxstreetsclassic\",\r\n EsriWorldImagery = \"esriworldimagery\",\r\n EsriWorldStreetMap = \"esriworldstreetmap\",\r\n EsriNationalGeographic = \"esrinationalgeographic\",\r\n OpenStreetMap = \"openstreetmap\",\r\n LINZ = \"linz\",\r\n StamenWaterColor = \"stamenwatercolor\",\r\n StamenToner = \"stamentoner\",\r\n Grid = \"grid\"\r\n }\r\n\r\n export interface IDefaultImagery {\r\n id: EDefaultImagery;\r\n name: string;\r\n iconUrl?: string;\r\n }\r\n\r\n /**\r\n * Prepared array for UI.\r\n * TODO: Im not happy with icon urls sitting in the code. I'd prefer we ship these icons in the library as files.\r\n */\r\n export const DefaultImagery: IDefaultImagery[] = [\r\n {\r\n id: EDefaultImagery.BingMapsAerial,\r\n name: \"Bing Maps Aerial\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingAerial.png\"\r\n },\r\n {\r\n id: EDefaultImagery.BingMapsAerialWithLabels,\r\n name: \"Bing Maps Aerial with Labels\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingAerialLabels.png\"\r\n },\r\n {\r\n id: EDefaultImagery.BingMapsRoads,\r\n name: \"Bing Maps Roads\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/bingRoads.png\"\r\n },\r\n {\r\n id: EDefaultImagery.MapboxSatellite,\r\n name: \"Mapbox Satellite\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxSatellite.png\"\r\n },\r\n {\r\n id: EDefaultImagery.MapBoxStreets,\r\n name: \"Mapbox Streets\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxTerrain.png\"\r\n },\r\n {\r\n id: EDefaultImagery.MapBoxStreetsClassic,\r\n name: \"Mapbox Streets Classic\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/mapboxStreets.png\"\r\n },\r\n {\r\n id: EDefaultImagery.EsriWorldImagery,\r\n name: \"Esri World Imagery\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriWorldImagery.png\"\r\n },\r\n {\r\n id: EDefaultImagery.EsriWorldStreetMap,\r\n name: \"Esri World Street Map\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriWorldStreetMap.png\"\r\n },\r\n {\r\n id: EDefaultImagery.EsriNationalGeographic,\r\n name: \"Esri National Geographic\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/esriNationalGeographic.png\"\r\n },\r\n {\r\n id: EDefaultImagery.OpenStreetMap,\r\n name: \"Open Street Map\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/openStreetMap.png\"\r\n },\r\n {\r\n id: EDefaultImagery.LINZ,\r\n name: \"LINZ\",\r\n iconUrl: \"https://template.ui.nextspace.host/media/linz.jpg\"\r\n },\r\n {\r\n id: EDefaultImagery.StamenWaterColor,\r\n name: \"Stamen Water Color\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/stamenWatercolor.png\"\r\n },\r\n {\r\n id: EDefaultImagery.StamenToner,\r\n name: \"Stamen Toner\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/ImageryProviders/stamenToner.png\"\r\n },\r\n {\r\n id: EDefaultImagery.Grid,\r\n name: \"Grid\",\r\n iconUrl: \"https://template.api.nextspace-uat.net/file/2885d8df-028b-4f5c-80b3-2634f7e7cf69.png\"\r\n }\r\n ];\r\n\r\n export enum EDefaultTerrain {\r\n CesiumWorldTerrain = \"cesiumworldterrain\",\r\n FlatTerrain = \"flatterrain\",\r\n LINZ = \"linz\"\r\n }\r\n\r\n export interface IDefaultTerrain {\r\n id: EDefaultTerrain;\r\n name: string;\r\n iconUrl?: string;\r\n }\r\n\r\n /**\r\n * Prepared array for UI.\r\n * TODO: Im not happy with icon urls sitting in the code. I'd prefer we ship these icons in the library as files.\r\n */\r\n export const DefaultTerrains: IDefaultTerrain[] = [\r\n {\r\n id: EDefaultTerrain.CesiumWorldTerrain,\r\n name: \"Cesium World Terrain\",\r\n iconUrl: \"https://template.ui.nextspace.host/Default/media/Cesium/TerrainProviders/CesiumWorldTerrain.png\"\r\n },\r\n {\r\n id: EDefaultTerrain.LINZ,\r\n name: \"LINZ\",\r\n iconUrl: \"https://template.ui.nextspace.host/media/linz.jpg\"\r\n },\r\n {\r\n id: EDefaultTerrain.FlatTerrain,\r\n name: \"Flat Terrain\",\r\n }\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\": EMessageType | string;\r\n Message: string;\r\n }\r\n\r\n export enum EMessageType {\r\n Warn = \"WARNING\",\r\n Error = \"ERROR\",\r\n Status = \"STATUS\",\r\n Info = \"INFO\"\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n actionId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n action: IAction\r\n }> {\r\n const { api, actionId, req: reqParams } = params;\r\n if (!actionId) {\r\n throw(\"Action ID is required.\");\r\n }\r\n const data = await api.GET(`pendingAction/${actionId}`, Api.PrepReqParams(reqParams));\r\n return {\r\n action: data\r\n }\r\n }\r\n\r\n export async function GetRelevantList(params: {\r\n api: BruceApi.Api,\r\n stricter?: boolean,\r\n reqParams?: Api.IReqParams\r\n }): Promise<{\r\n actions: IAction[]\r\n }> {\r\n const { api, stricter, reqParams } = params;\r\n const data = await api.GET(`pendingActions/important?Update=${Boolean(stricter)}`, Api.PrepReqParams(reqParams));\r\n return {\r\n actions: data.Items\r\n };\r\n }\r\n\r\n export async function GetMessages(params: {\r\n api: BruceApi.Api,\r\n actionId: number,\r\n order?: Api.ESortOrder,\r\n startIndex?: number,\r\n amount?: number,\r\n types?: EMessageType[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n messages: IMessage[]\r\n }> {\r\n let { api, actionId, order, startIndex, amount, req: reqParams, types } = params;\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 let args = `?SortOrder=${order == Api.ESortOrder.Desc ? \"DESC\" : \"ASC\"}&PageSize=${amount}&PageIndex=${startIndex}`;\r\n if (types?.length) {\r\n for (let i = 0; i < types.length; i++) {\r\n args += `&Type=${types[i]}`;\r\n }\r\n }\r\n const data = await api.GET(`pendingAction/${actionId}/progressMessages` + args, Api.PrepReqParams(reqParams));\r\n return {\r\n messages: data.Items\r\n };\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 async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n styles: IStyle[]\r\n }> {\r\n const { api, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const res: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.entityDisplaySettings\", Api.PrepReqParams(reqParams));\r\n res({\r\n styles: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: res,\r\n req: reqParams\r\n });\r\n return res;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n styleId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n style: IStyle\r\n }> {\r\n const { api, styleId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\r\n res({\r\n style: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Update(params: {\r\n api: BruceApi.Api,\r\n style: IStyle,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n style: IStyle\r\n }> {\r\n const { api, style: data, req: reqParams } = params;\r\n if (!data?.Name) {\r\n throw(\"Style name is required.\");\r\n }\r\n if (!data.ID) {\r\n data.ID = 0;\r\n }\r\n const res = await api.POST(`ui.entityDisplaySetting/${data.ID}`, data, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(data.ID));\r\n api.Cache.Remove(GetListCacheKey());\r\n return {\r\n style: res\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: BruceApi.Api,\r\n styleId: number,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, styleId: id, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"Style ID is required.\");\r\n }\r\n await api.DELETE(`ui.entityDisplaySetting/${id}`, Api.PrepReqParams(reqParams));\r\n api.Cache.Remove(GetCacheKey(id));\r\n api.Cache.Remove(GetListCacheKey());\r\n }\r\n}","export namespace Permission {\n export type Perm = EPerm | string;\n\n export enum EPerm {\n ADMIN = \"ADMIN\",\n LOGIN = \"LOGIN\",\n DELETE_ENTITY_TYPE = \"DELETE_ENTITY_TYPE\",\n CREATE_ENTITY_TYPE = \"CREATE_ENTITY_TYPE\",\n UPDATE_ENTITY_TYPE = \"UPDATE_ENTITY_TYPE\"\n }\n\n export enum EPermPrefix {\n ACCESS_PROJECT_VIEW = \"UIVIEW_\",\n MANAGE_PROJECT_VIEW_BOOKMARKS = \"UIVIEW_MANAGE_BOOKMARKS_\",\n ACCESS_TILESET = \"TILESET_\"\n }\n}","import { Api } from \"../api/api\";\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(params: {\r\n api: IdmApi.Api,\r\n sessionId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n session: ISession\r\n }> {\r\n const { api, sessionId, req: reqParams } = params;\r\n if (!sessionId) {\r\n throw(\"Session ID is required.\");\r\n }\r\n const key = GetCacheKey(sessionId);\r\n const cacheData = await api.GetCacheItem(key, reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`session/${sessionId}`, reqParams);\r\n res({\r\n session: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key,\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Login(params: {\r\n api: IdmApi.Api,\r\n username: string,\r\n password: string,\r\n accountId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n session: ISession\r\n }> {\r\n const { api, username, password, accountId, req: reqParams } = params;\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 }, reqParams);\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 {\r\n session: session\r\n };\r\n }\r\n\r\n export async function Logout(params: {\r\n api: IdmApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, req: reqParams } = params;\r\n const ssid = api.GetSessionId();\r\n if (ssid) {\r\n await api.POST(\"logout\", null, reqParams);\r\n api.SetSessionId(<any>null);\r\n api.Cache.Remove(GetCacheKey(ssid));\r\n }\r\n }\r\n\r\n export function IsPermEnabled(params: {\r\n session: ISession,\r\n accountId: string,\r\n perm: string\r\n }): boolean {\r\n let { session, accountId, perm } = params;\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(params: {\r\n session: ISession,\r\n perm: string\r\n }): boolean {\r\n let { session, perm } = params;\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(params: {\r\n session: ISession,\r\n accountId: string\r\n }): boolean {\r\n return IsPermEnabled({\r\n perm: Permission.EPerm.ADMIN,\r\n accountId: params.accountId,\r\n session: params.session\r\n });\r\n }\r\n\r\n export function IsSuperAdmin(params: {\r\n session: ISession\r\n }): boolean {\r\n return IsSuperPermEnabled({\r\n session: params.session,\r\n perm: Permission.EPerm.ADMIN\r\n });\r\n }\r\n}","import { Api, 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(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n name: string, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n group: IGroup\r\n }> {\r\n const { api, accountId, name, req: reqParams } = params;\r\n if (!name || !accountId) {\r\n throw(\"Name and AccountID are required.\");\r\n }\r\n const data = await api.GET(`account/${accountId}/userGroupByName/${name}`, reqParams);\r\n return {\r\n group: data\r\n };\r\n }\r\n\r\n export async function GetUsers(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n groupId: string, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n users: User.IUser[]\r\n }> {\r\n const { api, accountId, groupId: id, req: reqParams } = params;\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`, reqParams);\r\n return {\r\n users: data.Items\r\n };\r\n }\r\n\r\n export async function GetListByPerm(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n perm: Permission.Perm, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n groups: IGroup[]\r\n }> {\r\n const { api, accountId, perm, req: reqParams } = params;\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}`, reqParams);\r\n return {\r\n groups: data.Items\r\n };\r\n }\r\n\r\n export async function GetList(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n groups: IGroup[]\r\n }> {\r\n const { api, accountId, req: reqParams } = params;\r\n if (!accountId) {\r\n throw(\"AccountID is required.\");\r\n }\r\n const data = await api.GET(`userGroups/${accountId}`, reqParams);\r\n return {\r\n groups: data.Items\r\n };\r\n }\r\n\r\n export async function Delete(params: {\r\n api: IdmApi.Api, \r\n accountId: string, \r\n groupId: string, \r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, accountId, groupId: id, req: reqParams } = params;\r\n if (!accountId || !id) {\r\n throw(\"AccountID and ID are required.\");\r\n }\r\n return api.DELETE(`account/${accountId}/userGroupID/${id}`, reqParams);\r\n }\r\n\r\n export async function Update(params: {\r\n api: IdmApi.Api, \r\n group: IGroup, \r\n reqParams?: Api.IReqParams\r\n }): Promise<{\r\n group: IGroup\r\n }> {\r\n const { api, group: data, reqParams } = params;\r\n if (!data.Name || !data[\"ClientAccount.ID\"]) {\r\n throw(\"User group name and client account ID are required.\");\r\n }\r\n const res = await api.POST(`userGroup${data.ID ? (\"/\" + data.ID) : \"\"}`, data, reqParams);\r\n return {\r\n group: res\r\n };\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { BruceApi } from \"../bruce-models\";\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 function GetSettingsCacheKey(userId: string, appId: string): string {\r\n return Api.ECacheKey.User + Api.ECacheKey.UserSettings + userId + Api.ECacheKey.Id + appId;\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 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(params: {\r\n api: IdmApi.Api,\r\n userId: string,\r\n accountId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n const { api, userId: id, accountId, req: reqParams } = params;\r\n if (!id) {\r\n throw(\"ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(id, <string>accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`user/${id}${accountId ? `?clientAccountID=${accountId}` : \"\"}`, reqParams)\r\n res({\r\n user: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(id, <string>accountId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Update(params: {\r\n api: IdmApi.Api,\r\n user: IUser,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n const { api, user: data, req: reqParams } = params;\r\n if (!data?.ID || !data?.Type) {\r\n throw(\"ID and Type are required.\");\r\n }\r\n // When getting a user it is structured slightly different to when we update it.\r\n // We can make up the difference here.\r\n if (data.AccessPermissions?.length) {\r\n for (let i = 0; i < data.AccessPermissions.length; i++) {\r\n const perm = data.AccessPermissions[i];\r\n if (!perm[\"UserGroup.ID\"] && perm.UserGroups) {\r\n perm[\"UserGroup.ID\"] = [];\r\n for (let j = 0; j < perm.UserGroups.length; j++) {\r\n perm[\"UserGroup.ID\"].push(perm.UserGroups[j].ID);\r\n }\r\n }\r\n }\r\n }\r\n const res = await api.POST(`user/${data.ID}`, data, reqParams);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + data.ID);\r\n if (data.Type == EType.AccessToken) {\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n }\r\n else if (data.Type == EType.User) {\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.User + Api.ECacheKey.Account);\r\n }\r\n return {\r\n user: res\r\n };\r\n }\r\n\r\n /**\r\n * Loads settings for a given user + app.\r\n * The session's account id is used to separate settings between accounts.\r\n * @param params\r\n */\r\n export async function GetSettings(params: {\r\n api: IdmApi.Api,\r\n userId: string,\r\n appId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n settings: any\r\n }> {\r\n const { api, userId, appId, req } = params;\r\n if (!userId || !appId) {\r\n throw(\"UserId and appId are required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetSettingsCacheKey(userId, appId), req);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`user/${userId}/application/${appId}/settings`);\r\n const settings = data?.Settings ? data.Settings : {};\r\n res({\r\n settings: settings\r\n });\r\n }\r\n catch (e) {\r\n // It will complain if an app id hasn't been used yet.\r\n // We need to suppress that error.\r\n if (e && typeof e == \"object\") {\r\n if (e.ERROR && typeof e.ERROR == \"object\" && e.ERROR.Type == \"NotFound\") {\r\n res({\r\n settings: {}\r\n });\r\n return;\r\n }\r\n }\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetSettingsCacheKey(userId, appId),\r\n value: prom,\r\n req: req\r\n });\r\n return prom;\r\n }\r\n\r\n /**\r\n * Updates settings for a given accId + user + app.\r\n * The settings update will replace the existing record, please ensure to merge with existing settings.\r\n * @param params\r\n */\r\n export async function UpdateSettings(params: {\r\n api: IdmApi.Api,\r\n accId: string,\r\n userId: string,\r\n appId: string,\r\n settings: any,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, accId, userId, appId, settings, req } = params;\r\n if (!accId || !userId || !appId) {\r\n throw(\"accId, userId and appId are required.\");\r\n }\r\n const postBody = {\r\n Settings: settings == null ? {} : settings,\r\n Application: appId,\r\n ClientAccountID: accId,\r\n UserID: userId\r\n };\r\n const prom = api.POST(`user/${userId}/application/${appId}/settings`, postBody, req);\r\n api.Cache.Remove(GetSettingsCacheKey(userId, appId));\r\n return prom;\r\n }\r\n\r\n export async function GetUsernameAvailable(params: {\r\n api: IdmApi.Api,\r\n username: string,\r\n excludeUserId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n isAvailable: boolean\r\n }> {\r\n const { api, username, excludeUserId, req: reqParams } = params;\r\n if (!username) {\r\n throw(\"Username is required.\");\r\n }\r\n const req = api.GET(`user/loginavailable/${username}${excludeUserId ? \"?excludeUserId=\" + excludeUserId : \"\"}`, reqParams);\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n isAvailable: data.IsAvailable\r\n });\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(params: {\r\n api: IdmApi.Api,\r\n email: string,\r\n accountId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n const { api, email, accountId, req: reqParams } = params;\r\n if (!email) {\r\n throw(\"Email is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetEmailCacheKey(email, <string>accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`userByEmail/${email}${accountId ? `?clientAccountID=${accountId}` : \"\"}`, reqParams);\r\n res({\r\n user: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetEmailCacheKey(email, <string>accountId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: IdmApi.Api,\r\n accountId: string,\r\n exclusive?: boolean,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n users: IUser[]\r\n }> {\r\n let { api, accountId, exclusive, req: reqParams } = params;\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 : await api.GetCacheItem(GetListCacheKey(accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`users?clientAccountID=${accountId}${exclusive ? \"&allExcludingClientAccount=true\" : \"\" }`, reqParams);\r\n res({\r\n users: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n req.then(async (data) => {\r\n const users = data.users;\r\n for (let i = 0; i < users.length; i++) {\r\n await api.SetCacheItem({\r\n key: GetCacheKey(<string>users[i].ID, accountId),\r\n value: {\r\n user: users[i]\r\n },\r\n req: reqParams\r\n });\r\n }\r\n });\r\n if (!exclusive) {\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(accountId),\r\n value: req,\r\n req: reqParams\r\n });\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 params\r\n * @returns\r\n */\r\n export async function Signup(params: {\r\n api: IdmApi.Api,\r\n email: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, email, req: reqParams } = params;\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 }, reqParams);\r\n }\r\n\r\n /**\r\n * Sends a new signup email using a previous one's expired code.\r\n * @param params\r\n * @returns\r\n */\r\n export async function SignupResend(params: {\r\n api: IdmApi.Api,\r\n expiredCode: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, expiredCode, req: reqParams } = params;\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, reqParams);\r\n }\r\n\r\n /**\r\n * Completes signup using user data and a signup code.\r\n * @param params\r\n * @returns\r\n */\r\n export async function SignupComplete(params: {\r\n api: IdmApi.Api,\r\n code: string,\r\n user: IUser,\r\n accountId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n let { api, code, user: data, accountId, req: reqParams } = params;\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, reqParams);\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 {\r\n user: res\r\n };\r\n }\r\n\r\n /**\r\n * Sends a password reset email to the specified email address.\r\n * @param params\r\n * @returns user id associated with provided email.\r\n */\r\n export async function ForgotPassword(params: {\r\n api: IdmApi.Api,\r\n accountId: string,\r\n email: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n userId: string\r\n }> {\r\n const { api, accountId, email, req: reqParams } = params;\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 }, reqParams);\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n userId: data.ID\r\n });\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 params\r\n * @returns\r\n */\r\n export async function ForgotPasswordComplete(params: {\r\n api: IdmApi.Api,\r\n code: string,\r\n userId: string,\r\n password: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n const { api, code, userId, password, req: reqParams } = params;\r\n const {user} = await Get({\r\n api: api,\r\n userId: userId,\r\n accountId: \"\",\r\n req: reqParams\r\n });\r\n const res = await 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 }, reqParams);\r\n return {\r\n user: res\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(params: {\r\n api: IdmApi.Api,\r\n accountId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n users: IUser[]\r\n }> {\r\n const { api, accountId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(accountId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const req: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"usersByClientAccount/accessTokens\", reqParams);\r\n res({\r\n users: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n req.then(async (data) => {\r\n const users = data.tokens;\r\n for (let i = 0; i < users.length; i++) {\r\n await api.SetCacheItem({\r\n key: GetCacheKey(<string>users[i].ID, accountId),\r\n value: {\r\n user: users[i]\r\n },\r\n req: reqParams\r\n });\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(accountId),\r\n value: req,\r\n req: reqParams\r\n });\r\n return req;\r\n }\r\n\r\n export async function Delete(params: {\r\n api: IdmApi.Api,\r\n tokenId: string,\r\n req?: Api.IReqParams\r\n }): Promise<void> {\r\n const { api, tokenId: id, req: reqParams } = params;\r\n await api.DELETE(`accessToken/${id}`, reqParams);\r\n api.Cache.RemoveByContains(Api.ECacheKey.User + Api.ECacheKey.Id + id);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n }\r\n\r\n export async function Create(params: {\r\n api: IdmApi.Api,\r\n token: IUser,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n user: IUser\r\n }> {\r\n let { api, token: data, req: reqParams } = params;\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, reqParams);\r\n await api.Cache.RemoveByStartsWith(Api.ECacheKey.AccessToken + Api.ECacheKey.Account);\r\n return {\r\n user: data\r\n };\r\n }\r\n }\r\n}","\r\nimport { Api } from \"../api/api\";\r\nimport { IdmApi } from \"../api/idm-api\";\r\nimport { UTC } from \"../common/utc\";\r\nimport { User } from \"../user/user\";\r\n\r\nexport namespace AccountInvite {\r\n export interface IInvite {\r\n ID: number;\r\n \"Account.ID\": string;\r\n \"Invited.User.ID\": string;\r\n \"InvitedBy.User.ID\": string;\r\n CreatedDate: UTC.IUTC;\r\n InviteMethod: EInviteMethod;\r\n IsExpired: boolean;\r\n Status: EStatus;\r\n }\r\n\r\n export enum EStatus {\r\n Denied = \"Denied\",\r\n Cancelled = \"Cancelled\",\r\n Sent = \"Sent\",\r\n NotSent = \"NotSent\",\r\n Accepted = \"Accepted\"\r\n }\r\n\r\n export enum EInviteMethod {\r\n Email = \"Email\",\r\n SMS = \"SMS\",\r\n Manual = \"Manual\"\r\n }\r\n\r\n export async function GetByCode(params: {\r\n api: IdmApi.Api,\r\n code: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n invite: IInvite\r\n }> {\r\n const { api, code, req } = params;\r\n const res = await api.GET(`invite/code?inviteCode=${code}`, Api.PrepReqParams(req));\r\n return res;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: IdmApi.Api,\r\n accountId?: string,\r\n userId?: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n invites: IInvite[],\r\n warnings?: string[]\r\n }> {\r\n const { api, accountId, userId, req } = params;\r\n const urlParams = new URLSearchParams();\r\n if (accountId) {\r\n urlParams.append(\"accountId\", accountId);\r\n }\r\n if (userId) {\r\n urlParams.append(\"userId\", userId);\r\n }\r\n const res = await api.GET(\"invites?\" + urlParams.toString(), Api.PrepReqParams(req));\r\n return res;\r\n }\r\n\r\n export async function Update(params: {\r\n api: IdmApi.Api,\r\n code: string,\r\n status: string,\r\n user?: User.IUser,\r\n req?: Api.IReqParams\r\n }) {\r\n const { api, code, status, user, req } = params;\r\n const res = await api.POST(\"invite/update\", {\r\n InviteCode: code,\r\n Status: status,\r\n User: user\r\n }, Api.PrepReqParams(req));\r\n return res;\r\n }\r\n\r\n export async function Create(params: {\r\n api: IdmApi.Api,\r\n accountId: string,\r\n login?: string,\r\n userId?: string,\r\n email?: string,\r\n mobile?: string,\r\n emailTemplateKey?: string,\r\n groupIds?: string[],\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n warnings?: string[],\r\n user: User.IUser,\r\n manualInviteCode?: string,\r\n invite: IInvite,\r\n manualInvite?: IInvite\r\n }> {\r\n const { api, accountId, login, userId, email, mobile, emailTemplateKey, groupIds, req } = params;\r\n const res = await api.POST(\"invite/new\", {\r\n accountId,\r\n login,\r\n email,\r\n mobile,\r\n userId,\r\n groupIds,\r\n emailTemplateKey\r\n }, Api.PrepReqParams(req));\r\n return res;\r\n }\r\n}","export namespace EncryptUtils {\n // https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\n export function Cyrb53Hash(str: string, seed: number = 0): number {\n let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1>>>16), 2246822507) ^ Math.imul(h2 ^ (h2>>>13), 3266489909);\n h2 = Math.imul(h2 ^ (h2>>>16), 2246822507) ^ Math.imul(h1 ^ (h1>>>13), 3266489909);\n return (4294967296 * (2097151 & h2) + (h1>>>0));\n }\n}","import { IDictionary } from \"../common/dictionary\";\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(urlParams: IDictionary<string | number>): void {\r\n const params: string[] = [];\r\n const keys = Object.keys(urlParams);\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 = urlParams[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 async function Run(params: {\r\n api: BruceApi.Api,\r\n query: IQuery, \r\n key?: EReqKey, \r\n skip?: number, \r\n load?: number, \r\n req?: Api.IReqParams\r\n }): Promise<{\r\n entities: E.IEntity[]\r\n }> \r\n {\r\n let { api, query, key, skip, load, req: reqParams } = params;\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 const req = api.POST(`entities/datalab/getMatchingEntities/${key}?skip=${skip}&load=${load}`, \r\n query, \r\n Api.PrepReqParams(reqParams)\r\n );\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n entities: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n return prom;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\n/**\r\n * TODO: The analysis result is currently a mix of multiple layers of legacy.\r\n * We will first decide what we want it to do and then describe just the needed portions of the existing implementation.\r\n */\r\nexport namespace ImportCad {\r\n export interface IAnalyzeParams {\r\n \"TempFile.ID\": string;\r\n \"OriginalIFCFile.Name\": string;\r\n }\r\n\r\n export interface IAnalyzeRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export interface IImportParams {\r\n \"TempFile.ID\": string;\r\n \"OriginalIFCFile.Name\": string;\r\n \"IFCSettings\": {\r\n \"ClassificationRules\": {\r\n \"NewIFCStandard.Name\": string;\r\n \"IFCStandard\": string;\r\n \"IsExtendingAllowed\": boolean;\r\n \"AllowAddingNewEntityTypes\": boolean;\r\n \"AllowAddingNewAttributes\": boolean;\r\n \"EntityTypesDerivedFromAttribute\": string;\r\n }\r\n }\r\n }\r\n\r\n export interface IImportRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export async function Analyze(params: {\r\n api: BruceApi.Api, \r\n fileAnalyze: IAnalyzeParams, \r\n req?: Api.IReqParams\r\n }): Promise<IAnalyzeRes> {\r\n const { api, fileAnalyze, req: reqParams } = params;\r\n return api.POST(\"entities/PrepareIFCForImport\", fileAnalyze, Api.PrepReqParams(reqParams));\r\n }\r\n\r\n export async function ImportEntities(params: {\r\n api: BruceApi.Api, \r\n fileImport: IImportParams, \r\n req?: Api.IReqParams\r\n }): Promise<IImportRes> {\r\n const { api, fileImport, req: reqParams } = params;\r\n return api.POST(\"entities/importIFCWithProgress\", fileImport, Api.PrepReqParams(reqParams));\r\n }\r\n\r\n /**\r\n * Parses the completed pending action result from running \"ImportEntities\".\r\n * This will return the root entity's id if any is present.\r\n * @param paResult \r\n */\r\n export function ParseRootId(paResult: string | Object): string {\r\n try {\r\n const obj = typeof paResult == \"string\" ? JSON.parse(paResult) : paResult;\r\n if (obj?.result?.length) {\r\n return obj.result[0];\r\n }\r\n }\r\n catch {\r\n // Failed to parse json.\r\n }\r\n return <any>null;\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\nexport namespace ImportCsv {\r\n export interface IImportParams {\r\n \"TempFile.ID\": string;\r\n \"CSVSettings\": {\r\n \"IsTitleRow\": boolean;\r\n \"Delimiter\": string;\r\n \"IsRecordQuoted\": boolean;\r\n \"Columns\": string[];\r\n },\r\n \"OriginalCSVFile.Name\": string;\r\n \"ImportMode\": string;\r\n \"EntityType.ID\": string;\r\n \"TargetDataSchema\": any;\r\n \"DataMapping\": any;\r\n \"Layers\": number[];\r\n \"SkipUnresolvedRows\": boolean;\r\n \"DeleteNonupdatedEntities\": boolean;\r\n \"Async\": boolean;\r\n \"SkipFailedEntities\": boolean;\r\n }\r\n\r\n export interface IImportRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export async function ImportEntities(params: {\r\n api: BruceApi.Api, \r\n fileImport: IImportParams, \r\n req?: Api.IReqParams\r\n }): Promise<IImportRes> {\r\n const { api, fileImport, req: reqParams } = params;\r\n return api.POST(\"entities/importCSVWithProgress2\", fileImport, Api.PrepReqParams(reqParams));\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { EntityTag } from \"../entity/entity-tag\";\r\n\r\nexport namespace ImportJson {\r\n export interface ITagExt extends EntityTag.ITag {\r\n IsSelected: boolean;\r\n }\r\n\r\n export interface IImportParams {\r\n \"TempFile.ID\": string;\r\n \"TempFile.Ext\": string;\r\n \"OriginalJsonFile.Name\": string;\r\n ImportMode: string;\r\n \"EntityType.ID\": string;\r\n DataMappingSchema: any;\r\n TargetDataSchema: any;\r\n Layers: ITagExt[];\r\n }\r\n\r\n export interface IImportRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export async function ImportEntities(params: {\r\n api: BruceApi.Api, \r\n fileImport: IImportParams, \r\n req?: Api.IReqParams\r\n }): Promise<IImportRes> {\r\n const { api, fileImport, req: reqParams } = params;\r\n return api.POST(\"entities/importJsonWithProgress\", fileImport, Api.PrepReqParams(reqParams));\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\n\r\nexport namespace ImportKml {\r\n export interface IImportParams {\r\n \"TempFile.ID\": string;\r\n \"OriginalKMLFile.Name\": string;\r\n KMLFolders: any[];\r\n ImportMode: string;\r\n TotalCount: number;\r\n }\r\n\r\n export interface IImportRes {\r\n PendingActionID: number;\r\n }\r\n\r\n export async function ImportEntities(params: {\r\n api: BruceApi.Api, \r\n fileImport: IImportParams, \r\n req?: Api.IReqParams\r\n }): Promise<IImportRes> {\r\n const { api, fileImport, req: reqParams } = params;\r\n return api.POST(\"entities/importKMLWithProgress2\", fileImport, Api.PrepReqParams(reqParams));\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\nexport namespace ImportedFile {\r\n export function GetCacheKey(fileId: number): string {\r\n return Api.ECacheKey.ImportedFile + Api.ECacheKey.Id + fileId;\r\n }\r\n\r\n export function GetCacheKeyByRootId(rootId: string): string {\r\n return Api.ECacheKey.ImportedFile + Api.ECacheKey.Id + rootId;\r\n }\r\n\r\n export function GetListCacheKey(type: EFileType, pageIndex: number): string {\r\n return Api.ECacheKey.ImportedFile + type + pageIndex;\r\n }\r\n\r\n export interface IFile {\r\n ID: number;\r\n \"ClientFile.ID\": string;\r\n \"ImportedBy.User.ID\": string;\r\n \"Imported.DateTime\": any;\r\n \"EntityType.ID\": string;\r\n \"RootEntity.ID\": string;\r\n \"Source.ID\": number;\r\n \"PendingAction.ID\": number;\r\n NewEntitiesCount: number;\r\n UpdatedEntitiesCount: number;\r\n ClientFile: ClientFile.IClientFile;\r\n }\r\n\r\n export enum EFileType {\r\n CAD = \"CAD\",\r\n All = \"All\"\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n fileType?: EFileType,\r\n pageIndex?: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n importedFiles: IFile[]\r\n }> {\r\n let { api, fileType: type, pageIndex, req: reqParams } = params;\r\n if (!type) {\r\n type = EFileType.All;\r\n }\r\n if (!pageIndex) {\r\n pageIndex = 0;\r\n }\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(type, pageIndex), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n\r\n let first = true;\r\n let url = \"entityImportFiles\";\r\n if (type != EFileType.All) {\r\n url += \"?FileType=\" + type;\r\n first = false;\r\n }\r\n if (pageIndex > 0) {\r\n url += (first ? \"?\" : \"&\") + \"pageIndex=\" + pageIndex;\r\n }\r\n const req = api.GET(url, Api.PrepReqParams(reqParams));\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await req;\r\n res({\r\n importedFiles: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(type, pageIndex),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetListByRootId(params: {\r\n api:BruceApi.Api,\r\n rootId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n importedFiles: IFile[]\r\n }> {\r\n const { api, rootId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKeyByRootId(rootId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityImportFiles?Entity.ID=${rootId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n importedFiles: data.Items\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKeyByRootId(rootId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n importedFileId: number,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n importedFile: IFile\r\n }> {\r\n const { api, importedFileId: fileId, req: reqParams } = params;\r\n const cacheData = await api.GetCacheItem(GetCacheKey(fileId), reqParams);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`entityImportFile/${fileId}`, Api.PrepReqParams(reqParams));\r\n res({\r\n importedFile: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(fileId),\r\n value: prom,\r\n req: reqParams\r\n });\r\n return prom;\r\n }\r\n\r\n}","import { Cartes, EntityAttachmentType } from \"../bruce-models\";\r\n\r\n/**\r\n * Description of a \"Markup\" which is stored in custom-form or bookmark records.\r\n */\r\nexport namespace Markup {\r\n export interface IMarkup {\r\n divs?: Div.IDiv[];\r\n vectors?: (Line.ILine | FreePaint.IPaint)[];\r\n cesiumObjects?: (Polygon.IPolygon | Polyline.IPolyline | Circle.ICircle | Walkscore.IWalkscore)[];\r\n width?: number;\r\n height?: number;\r\n defaultCameraPos?: any;\r\n // Default = true.\r\n visible?: boolean;\r\n }\r\n\r\n export interface IElement {\r\n // Unique id of the element within the markup.\r\n // Warning: IAnchor elements are not elements and do not have an id.\r\n // Anchors only exist as sub elements to other items.\r\n id: string;\r\n // Human readable name for the element.\r\n // This is presented in editing screens to help differentiate elements.\r\n name?: string;\r\n // Default = true.\r\n visible?: boolean;\r\n // The screen position of the original drawn element.\r\n // Used to determine if anything needs to change based on viewer's screen size.\r\n screenWidth?: number;\r\n screenHeight?: number;\r\n }\r\n\r\n export namespace Div {\r\n // Types of div that can be created.\r\n export enum EType {\r\n // Default, no special handling.\r\n Default = \"default\",\r\n // Callout, assumes it will be positioned in 3d space.\r\n // Assumes existence of line that is used to anchor it.\r\n Callout = \"callout\"\r\n }\r\n\r\n export interface IDiv extends IElement {\r\n // Type of div. Determines how it is rendered / positioned.\r\n type?: EType;\r\n // The div's content.\r\n contentRows: IRow[];\r\n // Css box shadow.\r\n boxShadow?: IBoxShadow;\r\n // Css border radius.\r\n borderRadius?: number;\r\n // If the border radius should be in pixels or percent.\r\n borderUsingPercent?: boolean;\r\n // Css border color.\r\n borderColor?: string;\r\n // Css border width.\r\n borderWidth?: number;\r\n // Screen x/y position in pixels.\r\n x: number;\r\n y: number;\r\n // Width/height in pixels.\r\n width: number;\r\n height: number;\r\n }\r\n\r\n // Describes css box shadow.\r\n export interface IBoxShadow {\r\n horizontal: number;\r\n vertical: number;\r\n blur: number;\r\n spread: number;\r\n color: string;\r\n }\r\n\r\n // Describes a content row.\r\n export interface IRow {\r\n items: IRowItem[];\r\n height: number;\r\n }\r\n\r\n // Describes expected content of a row cell.\r\n export enum EItemType {\r\n // Default, no special handling.\r\n Default = \"DEFAULT\",\r\n // Embed, assume content is html.\r\n // Make it take over the whole cell instead of padding it and such.\r\n Embed = \"EMBED\",\r\n // Content is expected to be an SVG or font-awesome icon.\r\n Icon = \"ICON\",\r\n // Content is expected to be an image.\r\n Image = \"IMAGE\"\r\n }\r\n\r\n export interface IRowItem {\r\n // Text or HTML to display.\r\n text?: string;\r\n // Embedded HTML to render when item type is \"EMBED\".\r\n // Different to text as text will be auto-cleaned.\r\n embedRaw?: string;\r\n // Embedded ICON to render when item type is \"ICON\".\r\n // Icon is expected to be a font-awesome icon.\r\n icon?: string;\r\n // Action ot perform when this cell is clicked.\r\n action?: ItemAction.IItemAction;\r\n // Background image to use.\r\n bgImage?: IRowItemImage;\r\n // Css background color.\r\n backgroundColor?: string;\r\n // Css font color.\r\n fontColor?: string;\r\n // Css font size.\r\n fontSize?: number;\r\n // Css horizontal text alignment.\r\n textAlign?: string;\r\n // Css vertical text alignment.\r\n verticalAlign?: string;\r\n // Padding in pixels to apply to all 4 sides.\r\n padding?: number;\r\n // Css text shadow.\r\n textShadow?: ITextShadow;\r\n // Expected content type. Dictates if special handling is needed.\r\n contentType?: EItemType;\r\n // Width of the cell in percent of total row width.\r\n width?: number;\r\n }\r\n\r\n // Describes a cell's background image.\r\n export interface IRowItemImage {\r\n // Client file id of the image.\r\n FileID?: string;\r\n // If the markup's entity's default image should be used.\r\n UseEntityDefault?: boolean;\r\n }\r\n\r\n // Describes css text shadow.\r\n export interface ITextShadow {\r\n horizontal: number;\r\n vertical: number;\r\n blur: number;\r\n color: string;\r\n }\r\n\r\n export namespace ItemAction {\r\n export interface IActionLinkParams {\r\n // URL to open.\r\n // URL may be a path to the markup's entity's attribute data.\r\n // If \"${\" and \"}\" exist in the URL, then it has entity attribute data.\r\n URL?: string;\r\n // If the URL should be opened in a new tab.\r\n openInNewTab?: boolean;\r\n // If the markup should be closed when the link is opened.\r\n closeMarkupOnOpen?: boolean;\r\n }\r\n \r\n export interface IActionBookmarkParams {\r\n // Id of the bookmark to enable.\r\n // Assumes view id matches currently rendering view.\r\n bookmarkID?: string;\r\n }\r\n\r\n export interface IActionInfoViewParams {\r\n\r\n }\r\n\r\n export interface IActionRelationParams {\r\n\r\n }\r\n\r\n export interface IActionGalleryParams {\r\n documentType?: EntityAttachmentType.EType | string;\r\n }\r\n\r\n export interface IItemAction {\r\n type: ItemAction.EType;\r\n params: IActionLinkParams | IActionInfoViewParams | IActionRelationParams | IActionGalleryParams;\r\n }\r\n\r\n // Types of actions that can be performed when a cell is clicked.\r\n // Null = \"NONE\".\r\n export enum EType {\r\n None = \"NONE\",\r\n // Open a link specified in params.\r\n OpenLink = \"LINK\",\r\n // Open the markup's entity's details panel.\r\n OpenInfoView = \"INFOVIEW\",\r\n // Open the markup's entity's gallery popup.\r\n OpenEntityGallery = \"GALLERY\",\r\n // Toggle visibility of the markup's entity's relationships.\r\n ToggleRelationships = \"RELATIONSHIPS\",\r\n // Dictates this cell can be used to drag the div around.\r\n Draggable = \"DRAGABBLE\",\r\n // Closes the markup.\r\n Close = \"CLOSE\",\r\n // Opens a bookmark specified in params.\r\n OpenBookmark = \"BOOKMARK\"\r\n }\r\n }\r\n\r\n export const DEFAULT: IDiv = {\r\n contentRows: [\r\n {\r\n height: 100,\r\n items: [\r\n {\r\n contentType: EItemType.Default,\r\n text: \"Type here...\",\r\n width: 100,\r\n backgroundColor: \"white\",\r\n fontColor: \"black\",\r\n textAlign: \"center\",\r\n verticalAlign: \"center\",\r\n fontSize: 15\r\n }\r\n ]\r\n }\r\n ],\r\n height: null,\r\n width: null,\r\n id: null,\r\n x: null,\r\n y: null,\r\n borderColor: \"black\",\r\n borderWidth: 1,\r\n borderUsingPercent: false,\r\n borderRadius: 8,\r\n type: EType.Default\r\n };\r\n }\r\n\r\n export namespace Line {\r\n // Describes a line end's head.\r\n export enum ELineHead {\r\n None = \"NONE\",\r\n Circle = \"CIRCLE\",\r\n Arrow = \"ARROW\"\r\n }\r\n\r\n export interface ILine extends IElement {\r\n pathType: \"LINE\";\r\n // SVG path string.\r\n path: string;\r\n // SVG transform string.\r\n transform: string;\r\n // Snaps determine where the ends of the line snap to.\r\n // This can be 3d positions, screen positions or links to markup DIVs.\r\n // Calculated positions of the snaps will then alter the path of the line.\r\n snaps: IAnchor[];\r\n // Css color of the line.\r\n brushColor?: string;\r\n // Css stroke width of the line.\r\n brushSize?: number;\r\n // Determines if the line should angle towards its destination instead of being straight.\r\n angled?: boolean;\r\n // Backwards compatibility.\r\n // Use brushHead on anchors instead when available.\r\n brushHead?: ELineHead;\r\n // Css color of the brush head.\r\n outlineColor?: string;\r\n }\r\n\r\n // Dictates where on a DIV an anchor should snap to.\r\n export enum EAnchorDivSide {\r\n TopLeft = 0,\r\n TopRight = 1,\r\n BottomLeft = 2,\r\n BottomRight = 3,\r\n Center = 4,\r\n CenterLeft = 5,\r\n CenterRight = 6,\r\n CenterTop = 7,\r\n CenterBottom = 8\r\n }\r\n\r\n // Dictates what end of the line an anchor should render on.\r\n export enum EAnchorLineSide {\r\n Start = 0,\r\n End = 1,\r\n }\r\n\r\n export interface IAnchor {\r\n // Id of markup DIV that this anchor is attached to.\r\n id?: string;\r\n // Side of the markup DIV we are attached to.\r\n snapPosition?: EAnchorDivSide;\r\n // Side of the line we are attached to.\r\n side?: EAnchorLineSide;\r\n // How the anchor should be drawn in the context of a line.\r\n brushHead?: ELineHead;\r\n // Css fill color.\r\n fill?: string;\r\n // Determines size of anchor's \"ARROW\" head.\r\n size?: number;\r\n // Multiplied by \"size\" to determine size of anchor \"CIRCLE\" head.\r\n outlineFactor?: number;\r\n // Css stroke color.\r\n stroke?: string;\r\n // 3d world position.\r\n cartesian?: Cartes.ICartes3;\r\n // 2d screen position.\r\n screenPos?: Cartes.ICartes2;\r\n // If the anchor's position should be relative to the markup's entity.\r\n positionFromEntity?: boolean;\r\n }\r\n\r\n export const DEFAULT: ILine = {\r\n brushColor: \"rgba(255, 255, 255, 1)\",\r\n brushSize: 4,\r\n path: null,\r\n pathType: \"LINE\",\r\n transform: null,\r\n snaps: null,\r\n id: null\r\n };\r\n }\r\n\r\n export namespace FreePaint {\r\n // Describes a free-paint end's head.\r\n export enum EPaintHead {\r\n None = \"NONE\",\r\n Circle = \"CIRCLE\",\r\n Arrow = \"ARROW\"\r\n }\r\n\r\n export interface IPaint extends IElement {\r\n pathType: \"PLAIN\";\r\n // SVG path string.\r\n path: string;\r\n // SVG transform string.\r\n transform: string;\r\n // Css color of the line.\r\n brushColor?: string;\r\n // Css stroke width of the line.\r\n brushSize?: number;\r\n // Style of the ends of the free-paint.\r\n brushHead?: EPaintHead;\r\n // Css color of the brush head if one is used.\r\n // Eg arrow or circle heads.\r\n outlineColor?: string;\r\n }\r\n\r\n export const DEFAULT: IPaint = {\r\n brushColor: \"rgba(255, 255, 255, 1)\",\r\n brushSize: 4,\r\n path: null,\r\n pathType: \"PLAIN\",\r\n transform: null,\r\n id: null\r\n };\r\n }\r\n\r\n export namespace Polygon {\r\n // Determines if terrain and 3d models should be overlapped or not.\r\n export enum EClassificationType {\r\n // 3d models and terrain are overlapped.\r\n Both = \"BOTH\",\r\n // Only terrain is overlapped.\r\n Terrain = \"TERRAIN\"\r\n }\r\n\r\n export interface IPolygon extends IElement {\r\n type: \"POLYGON\";\r\n // 3d positions of the polygon.\r\n positions: Cartes.ICartes3[];\r\n // Css color of the polygon.\r\n color?: string;\r\n // Css color of the polygon's outline.\r\n outlineColor?: string;\r\n // Width of the polygon's outline in pixels.\r\n outlineWidth?: number;\r\n // Height of the polygon in meters.\r\n extrudedHeight?: number;\r\n // Determines if terrain and 3d models should be overlapped or not.\r\n classificationType?: EClassificationType;\r\n // Determines how many times to run Chaikin's algorithm on the polygon.\r\n // Null or 0 means no smoothing.\r\n smoothen?: number;\r\n }\r\n\r\n export const DEFAULT: IPolygon = {\r\n type: \"POLYGON\",\r\n id: null,\r\n positions: null,\r\n color: \"rgba(254, 234, 57, 0.54)\",\r\n outlineColor: \"rgba(215, 215, 215, 0)\",\r\n outlineWidth: 2,\r\n extrudedHeight: 0,\r\n classificationType: EClassificationType.Both,\r\n smoothen: 0\r\n };\r\n }\r\n\r\n export namespace Polyline {\r\n export interface IPolyline extends IElement {\r\n type: \"POLYLINE\";\r\n // 3d positions of the polyline.\r\n positions: Cartes.ICartes3[];\r\n // Css color of the polyline.\r\n color?: string;\r\n // Width of the polyline in pixels.\r\n outlineWidth?: number;\r\n // Determines how many times to run Chaikin's algorithm on the polygon.\r\n // Null or 0 means no smoothing.\r\n smoothen?: number;\r\n }\r\n\r\n export const DEFAULT: IPolyline = {\r\n type: \"POLYLINE\",\r\n id: null,\r\n positions: null,\r\n color: \"rgba(254, 234, 57, 0.54)\",\r\n outlineWidth: 4,\r\n smoothen: 0\r\n };\r\n }\r\n\r\n export namespace Circle {\r\n export interface ICircle extends IElement {\r\n type: \"CIRCLE\",\r\n // 3d position of the circle.\r\n position: Cartes.ICartes3;\r\n // Radius of the circle in meters.\r\n radius: number;\r\n // Css color of the circle.\r\n color?: string;\r\n // Width of the outline in meters.\r\n outlineWidth?: number;\r\n // Height of the circle in meters.\r\n extrudedHeight?: number;\r\n // Height of the circle's outline in meters.\r\n outlineExtrusion?: number;\r\n // Css color of the circle's outline.\r\n outlineColor?: string;\r\n }\r\n\r\n export const DEFAULT: ICircle = {\r\n type: \"CIRCLE\",\r\n id: null,\r\n position: null,\r\n radius: 50,\r\n color: \"rgba(254, 234, 57, 0.54)\"\r\n };\r\n }\r\n\r\n export namespace Walkscore {\r\n export interface IWalkscore extends IElement {\r\n type: \"WALKSCORE\";\r\n // 3d position of the walkscore.\r\n cartesian: Cartes.ICartes3;\r\n // Walkscore value out of 100.\r\n details: number;\r\n }\r\n }\r\n}","import { Api } from \"../api/api\";\r\nimport { BruceApi } from \"../api/bruce-api\";\r\nimport { UTC } from \"../common/utc\";\r\n\r\nexport namespace Plugin {\r\n export function GetCacheKey(pluginId: string): string {\r\n return `${Api.ECacheKey.Plugin}${Api.ECacheKey.Id}${pluginId}`;\r\n }\r\n\r\n export function GetListCacheKey(): string {\r\n return Api.ECacheKey.Plugin;\r\n }\r\n\r\n export interface IPlugin {\r\n ID: string,\r\n Name: string,\r\n Version: number,\r\n Icon: string,\r\n Location: string,\r\n IsAccessRestricted: boolean,\r\n IsLoginRequired: boolean,\r\n \"LastUpdated.Date\": UTC.IUTC,\r\n \"Created.Date\": UTC.IUTC\r\n }\r\n\r\n export async function Get(params: {\r\n api: BruceApi.Api,\r\n pluginId: string,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n plugin: IPlugin\r\n }> {\r\n const { api, pluginId, req } = params;\r\n if (!pluginId) {\r\n throw (\"Plugin ID is required.\");\r\n }\r\n const cacheData = await api.GetCacheItem(GetCacheKey(pluginId), req);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(`ui.plugin/${pluginId}`, Api.PrepReqParams(req));\r\n res({\r\n plugin: data\r\n });\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetCacheKey(pluginId),\r\n value: prom,\r\n req: req\r\n });\r\n return prom;\r\n }\r\n\r\n export async function GetList(params: {\r\n api: BruceApi.Api,\r\n req?: Api.IReqParams\r\n }): Promise<{\r\n plugins: IPlugin[]\r\n }> {\r\n const { api, req } = params;\r\n const cacheData = await api.GetCacheItem(GetListCacheKey(), req);\r\n if (cacheData) {\r\n return cacheData;\r\n }\r\n const prom: Promise<any> = new Promise(async (res, rej) => {\r\n try {\r\n const data = await api.GET(\"ui.plugins\", Api.PrepReqParams(req));\r\n res({\r\n plugins: data.Items\r\n })\r\n }\r\n catch (e) {\r\n rej(e);\r\n }\r\n });\r\n await api.SetCacheItem({\r\n key: GetListCacheKey(),\r\n value: prom,\r\n req: req\r\n });\r\n return prom;\r\n }\r\n\r\n export function GetLoadUrl(params: {\r\n api: BruceApi.Api,\r\n pluginId: string,\r\n cacheKey?: number | string,\r\n req?: Api.IReqParams\r\n }): {\r\n indexFileUrl: string\r\n } {\r\n let { api, pluginId, req, cacheKey } = params;\r\n if (!cacheKey) {\r\n cacheKey = 0;\r\n }\r\n return {\r\n indexFileUrl: `${api.GetBaseUrl()}ui.plugin/${pluginId}/file/index.jsc?version=${cacheKey}`\r\n };\r\n }\r\n}"],"names":["Api","A","MAX_AREA_IN_DEGREES"],"mappings":"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"}