@itwin/core-backend 5.11.0-dev.1 → 5.11.0-dev.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -1
- package/lib/cjs/BlobContainerService.d.ts +14 -1
- package/lib/cjs/BlobContainerService.d.ts.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +1 -1
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js +4 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/Element.d.ts +1 -1
- package/lib/cjs/Element.js +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/Entity.d.ts +3 -3
- package/lib/cjs/Entity.js +3 -3
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +5 -3
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/NativeHost.js +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/Relationship.d.ts +1 -1
- package/lib/cjs/Relationship.js +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.d.ts +4 -9
- package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.js +31 -15
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
- package/lib/esm/BlobContainerService.d.ts +14 -1
- package/lib/esm/BlobContainerService.d.ts.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/CloudSqlite.d.ts +1 -1
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js +4 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/Element.d.ts +1 -1
- package/lib/esm/Element.js +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/Entity.d.ts +3 -3
- package/lib/esm/Entity.js +3 -3
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +5 -3
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/NativeHost.js +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/Relationship.d.ts +1 -1
- package/lib/esm/Relationship.js +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/test/standalone/CloudSqlite.test.d.ts +2 -0
- package/lib/esm/test/standalone/CloudSqlite.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/CloudSqlite.test.js +43 -0
- package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.js +118 -1
- package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +2 -2
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/SettingsEditor.d.ts +4 -9
- package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsEditor.js +31 -15
- package/lib/esm/workspace/SettingsEditor.js.map +1 -1
- package/package.json +15 -15
package/lib/cjs/Entity.d.ts
CHANGED
|
@@ -119,7 +119,7 @@ export declare class Entity {
|
|
|
119
119
|
* @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.
|
|
120
120
|
* @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.
|
|
121
121
|
* @throws Error if metadata for the class cannot be retrieved.
|
|
122
|
-
* @deprecated in 5.10.0. Obtain a `SchemaView` via `iModel.getSchemaView()` and iterate `view.findClass(entity.classFullName)?.getProperties()` yourself. SchemaView does not expose the `BisCore.CustomHandledProperty` custom attribute, so the `includeCustom: false` filter must be replicated by the caller (query the custom-handled property set via ECSql) if needed.
|
|
122
|
+
* @deprecated in 5.10.0 - will not be removed until after 2026-09-03. Obtain a `SchemaView` via `iModel.getSchemaView()` and iterate `view.findClass(entity.classFullName)?.getProperties()` yourself. SchemaView does not expose the `BisCore.CustomHandledProperty` custom attribute, so the `includeCustom: false` filter must be replicated by the caller (query the custom-handled property set via ECSql) if needed.
|
|
123
123
|
*
|
|
124
124
|
* @example
|
|
125
125
|
* ```typescript
|
|
@@ -146,11 +146,11 @@ export declare class Entity {
|
|
|
146
146
|
* @throws [[IModelError]] if there is a problem querying the schema
|
|
147
147
|
* @returns The metadata for the current entity
|
|
148
148
|
* @public @preview
|
|
149
|
-
* @deprecated in 5.10.0. Obtain a `SchemaView` via `iModel.getSchemaView()` and call `view.findClass(entity.classFullName)` to retrieve a `SchemaView.Class`. The returned type differs from `EntityClass | RelationshipClass` and offers a synchronous, snapshot-style API.
|
|
149
|
+
* @deprecated in 5.10.0 - will not be removed until after 2026-09-03. Obtain a `SchemaView` via `iModel.getSchemaView()` and call `view.findClass(entity.classFullName)` to retrieve a `SchemaView.Class`. The returned type differs from `EntityClass | RelationshipClass` and offers a synchronous, snapshot-style API.
|
|
150
150
|
*/
|
|
151
151
|
getMetaData(): Promise<EntityClass | RelationshipClass>;
|
|
152
152
|
/** @internal
|
|
153
|
-
* @deprecated in 5.10.0. Internal callers should obtain a `SchemaView` via `iModel.getSchemaView()` (or retain a pre-loaded one) and call `view.findClass(...)` instead. Note that `getSchemaView()` is async.
|
|
153
|
+
* @deprecated in 5.10.0 - will not be removed until after 2026-09-03. Internal callers should obtain a `SchemaView` via `iModel.getSchemaView()` (or retain a pre-loaded one) and call `view.findClass(...)` instead. Note that `getSchemaView()` is async.
|
|
154
154
|
*/
|
|
155
155
|
getMetaDataSync(): EntityClass | RelationshipClass;
|
|
156
156
|
/** @internal */
|
package/lib/cjs/Entity.js
CHANGED
|
@@ -165,7 +165,7 @@ class Entity {
|
|
|
165
165
|
* @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.
|
|
166
166
|
* @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.
|
|
167
167
|
* @throws Error if metadata for the class cannot be retrieved.
|
|
168
|
-
* @deprecated in 5.10.0. Obtain a `SchemaView` via `iModel.getSchemaView()` and iterate `view.findClass(entity.classFullName)?.getProperties()` yourself. SchemaView does not expose the `BisCore.CustomHandledProperty` custom attribute, so the `includeCustom: false` filter must be replicated by the caller (query the custom-handled property set via ECSql) if needed.
|
|
168
|
+
* @deprecated in 5.10.0 - will not be removed until after 2026-09-03. Obtain a `SchemaView` via `iModel.getSchemaView()` and iterate `view.findClass(entity.classFullName)?.getProperties()` yourself. SchemaView does not expose the `BisCore.CustomHandledProperty` custom attribute, so the `includeCustom: false` filter must be replicated by the caller (query the custom-handled property set via ECSql) if needed.
|
|
169
169
|
*
|
|
170
170
|
* @example
|
|
171
171
|
* ```typescript
|
|
@@ -203,7 +203,7 @@ class Entity {
|
|
|
203
203
|
* @throws [[IModelError]] if there is a problem querying the schema
|
|
204
204
|
* @returns The metadata for the current entity
|
|
205
205
|
* @public @preview
|
|
206
|
-
* @deprecated in 5.10.0. Obtain a `SchemaView` via `iModel.getSchemaView()` and call `view.findClass(entity.classFullName)` to retrieve a `SchemaView.Class`. The returned type differs from `EntityClass | RelationshipClass` and offers a synchronous, snapshot-style API.
|
|
206
|
+
* @deprecated in 5.10.0 - will not be removed until after 2026-09-03. Obtain a `SchemaView` via `iModel.getSchemaView()` and call `view.findClass(entity.classFullName)` to retrieve a `SchemaView.Class`. The returned type differs from `EntityClass | RelationshipClass` and offers a synchronous, snapshot-style API.
|
|
207
207
|
*/
|
|
208
208
|
async getMetaData() {
|
|
209
209
|
if (this._metadata) {
|
|
@@ -219,7 +219,7 @@ class Entity {
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
/** @internal
|
|
222
|
-
* @deprecated in 5.10.0. Internal callers should obtain a `SchemaView` via `iModel.getSchemaView()` (or retain a pre-loaded one) and call `view.findClass(...)` instead. Note that `getSchemaView()` is async.
|
|
222
|
+
* @deprecated in 5.10.0 - will not be removed until after 2026-09-03. Internal callers should obtain a `SchemaView` via `iModel.getSchemaView()` (or retain a pre-loaded one) and call `view.findClass(...)` instead. Note that `getSchemaView()` is async.
|
|
223
223
|
*/
|
|
224
224
|
getMetaDataSync() {
|
|
225
225
|
if (this._metadata) {
|
package/lib/cjs/Entity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Entity.js","sourceRoot":"","sources":["../../src/Entity.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Schema\r\n */\r\n\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { ElementLoadOptions, EntityProps, EntityReferenceSet, PropertyCallback, PropertyMetaData } from \"@itwin/core-common\";\r\nimport type { IModelDb } from \"./IModelDb\";\r\nimport { Schema } from \"./Schema\";\r\nimport { ECClass, EntityClass, Property, RelationshipClass, SchemaItemKey } from \"@itwin/ecschema-metadata\";\r\nimport { _nativeDb } from \"./internal/Symbols\";\r\n\r\n/** Represents a row returned by an ECSql query. The row is returned as a map of property names to values.\r\n * ECSqlRow has same schema as declared in ECSchema for the class and similar to if ECSQL SELECT * FROM <schema>:<class> were executed.\r\n * @beta */\r\nexport interface ECSqlRow {\r\n [key: string]: any\r\n}\r\n\r\n/** Set of properties that are used to deserialize an [[EntityProps]] from an ECSqlRow.\r\n * @beta */\r\nexport interface DeserializeEntityArgs {\r\n /** Row to deserialize */\r\n row: ECSqlRow;\r\n /** The IModel that contains this Entity */\r\n iModel: IModelDb;\r\n /** The options used when loading */\r\n options?: {\r\n /** Options used when loading an element */\r\n element?: ElementLoadOptions;\r\n }\r\n}\r\n\r\n/** A property of an [[Entity]] that needs to be custom handled during deserialization and serialization.\r\n * @beta */\r\nexport interface CustomHandledProperty {\r\n /** The name of the property as it appears in the ECSqlRow */\r\n readonly propertyName: string;\r\n /** Where the property is defined */\r\n readonly source: \"Class\" | \"Computed\";\r\n}\r\n\r\n/** Represents one of the fundamental building block in an [[IModelDb]]: as an [[Element]], [[Model]], or [[Relationship]].\r\n * Every subclass of Entity represents one BIS [ECClass]($ecschema-metadata).\r\n * An Entity is typically instantiated from an [EntityProps]($common) and can be converted back to this representation via [[Entity.toJSON]].\r\n * @public @preview\r\n */\r\nexport class Entity {\r\n /** An immutable property used to discriminate between [[Entity]] and [EntityProps]($common), used to inform the TypeScript compiler that these two types\r\n * are never substitutable for one another. To obtain an EntityProps from an Entity, use [[Entity.toJSON]].\r\n */\r\n public readonly isInstanceOfEntity = true as const;\r\n /** The Schema that defines this class. */\r\n public static schema: typeof Schema; // TODO: Schema key on the static level, but it requires a version which may differ between imodels\r\n\r\n private get _ctor(): typeof Entity { return this.constructor as typeof Entity; }\r\n\r\n /** The name of the BIS class associated with this class.\r\n * @note Every subclass of Entity **MUST** override this method to identify its BIS class.\r\n * Failure to do so will ordinarily result in an error when the class is registered, since there may only\r\n * be one JavaScript class for a given BIS class (usually the errant class will collide with its superclass.)\r\n */\r\n public static get className(): string { return \"Entity\"; }\r\n\r\n /** Serves as a unique identifier for this class. Typed variant of [[classFullName]].\r\n * @public @preview\r\n */\r\n public static get schemaItemKey(): SchemaItemKey {\r\n // We cannot cache this here because the className gets overridden in subclasses\r\n return new SchemaItemKey(this.className, this.schema.schemaKey);\r\n }\r\n\r\n /** Cached Metadata for the ECClass */\r\n protected _metadata?: EntityClass | RelationshipClass;\r\n\r\n /** When working with an Entity it can be useful to set property values directly, bypassing the compiler's type checking.\r\n * This property makes such code slightly less tedious to read and write.\r\n * @internal\r\n */\r\n public get asAny(): any { return this; }\r\n\r\n /** The name of the BIS Schema that defines this class */\r\n public get schemaName(): string { return this._ctor.schema.schemaName; }\r\n\r\n /** The name of the BIS class associated with this class. */\r\n public get className(): string { return this._ctor.className; }\r\n\r\n /** The [[IModelDb]] that contains this Entity */\r\n public iModel: IModelDb;\r\n\r\n /** The Id of this Entity. May be invalid if the Entity has not yet been saved in the database. */\r\n public id: Id64String;\r\n\r\n\r\n protected constructor(props: EntityProps, iModel: IModelDb) {\r\n this.iModel = iModel;\r\n this.id = Id64.fromJSON(props.id);\r\n // copy all auto-handled properties from input to the object being constructed\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.forEachProperty((propName: string, meta: PropertyMetaData) => (this as any)[propName] = meta.createProperty((props as any)[propName]), false);\r\n }\r\n\r\n /** Invoke the constructor of the specified `Entity` subclass.\r\n * @internal\r\n */\r\n public static instantiate(subclass: typeof Entity, props: EntityProps, iModel: IModelDb): Entity {\r\n return new subclass(props, iModel);\r\n }\r\n\r\n /** List of properties that are need to be custom handled during deserialization and serialization.\r\n * These properties differ between the ECSql instance of an Entity and the Entity itself.\r\n * @beta */\r\n protected static readonly _customHandledProps: CustomHandledProperty[] = [\r\n { propertyName: \"id\", source: \"Class\" },\r\n { propertyName: \"className\", source: \"Class\" },\r\n { propertyName: \"jsonProperties\", source: \"Class\" }\r\n ];\r\n\r\n /** Get the list of properties that are custom handled by this class and its superclasses.\r\n * @internal */\r\n private static getCustomHandledProperties(): readonly CustomHandledProperty[] {\r\n if (this.name === \"Entity\") {\r\n return this._customHandledProps;\r\n }\r\n\r\n const superClass = Object.getPrototypeOf(this) as typeof Entity;\r\n return [\r\n ...superClass.getCustomHandledProperties(),\r\n ...this._customHandledProps,\r\n ];\r\n }\r\n\r\n /** Converts an ECSqlRow of an Entity to an EntityProps. This is used to deserialize an Entity from the database.\r\n * @beta */\r\n public static deserialize(props: DeserializeEntityArgs): EntityProps {\r\n const enProps: EntityProps = {\r\n classFullName: props.row.classFullName,\r\n id: props.row.id,\r\n }\r\n\r\n // Handles cases where id64 ints are stored in the jsonProperties and converts them to hex before parsing as a json object in js\r\n if (props.row.jsonProperties) {\r\n enProps.jsonProperties = JSON.parse(props.iModel[_nativeDb].patchJsonProperties(props.row.jsonProperties));\r\n }\r\n // Auto handles all properties that are not in the 'customHandledProperties' list\r\n const customHandledProperties = this.getCustomHandledProperties();\r\n Object.keys(props.row)\r\n .filter((propertyName) => customHandledProperties.find((val) => val.propertyName === propertyName) === undefined)\r\n .forEach((propertyName) => (enProps as ECSqlRow)[propertyName] = props.row[propertyName]\r\n );\r\n // Handles custom relClassNames to use '.' instead of ':'\r\n Object.keys(enProps).forEach((propertyName) => {\r\n if ((enProps as ECSqlRow)[propertyName].relClassName !== undefined && propertyName !== \"modeledElement\" && propertyName !== \"parentModel\") {\r\n (enProps as ECSqlRow)[propertyName].relClassName = (enProps as ECSqlRow)[propertyName].relClassName.replace(':', '.');\r\n }\r\n });\r\n return enProps;\r\n }\r\n\r\n /** Converts an EntityProps to an ECSqlRow. This is used to serialize an Entity to prepare to write it to the database.\r\n * @beta */\r\n public static serialize(props: EntityProps, _iModel: IModelDb): ECSqlRow {\r\n const inst: ECSqlRow = {\r\n classFullName: props.classFullName,\r\n id: props.id,\r\n }\r\n\r\n const customHandledProperties = this.getCustomHandledProperties();\r\n Object.keys(props)\r\n .filter((propertyName) => customHandledProperties.find((val) => val.propertyName === propertyName) === undefined)\r\n .forEach((propertyName) => inst[propertyName] = (props as ECSqlRow)[propertyName]\r\n );\r\n return inst;\r\n }\r\n\r\n /** Obtain the JSON representation of this Entity. Subclasses of [[Entity]] typically override this method to return their corresponding sub-type of [EntityProps]($common) -\r\n * for example, [[GeometricElement.toJSON]] returns a [GeometricElementProps]($common).\r\n */\r\n public toJSON(): EntityProps {\r\n const val: any = {};\r\n val.classFullName = this.classFullName;\r\n if (Id64.isValid(this.id))\r\n val.id = this.id;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.forEachProperty((propName: string) => val[propName] = (this as any)[propName], false);\r\n return val;\r\n }\r\n\r\n /** Call a function for each property of this Entity.\r\n * @param func The callback to be invoked on each property\r\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\r\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Obtain a `SchemaView` via `iModel.getSchemaView()` and iterate `view.findClass(entity.classFullName)?.getProperties()` instead. (`forEach` is also deprecated.)\r\n *\r\n * @example\r\n * ```typescript\r\n * // Deprecated method\r\n * entity.forEachProperty((name, propMetaData) => {\r\n * console.log(`Property name: ${name}, Property type: ${propMetaData.primitiveType}`);\r\n * });\r\n *\r\n * // New method\r\n * entity.forEach((name, property) => {\r\n * console.log(`Property name: ${name}, Property type: ${property.propertyType}`);\r\n * });\r\n * ```\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public forEachProperty(func: PropertyCallback, includeCustom: boolean = true) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.iModel.forEachMetaData(this.classFullName, true, func, includeCustom);\r\n }\r\n\r\n /**\r\n * Call a function for each property of this Entity.\r\n * @param func The callback to be invoked on each property.\r\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\r\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\r\n * @throws Error if metadata for the class cannot be retrieved.\r\n * @deprecated in 5.10.0. Obtain a `SchemaView` via `iModel.getSchemaView()` and iterate `view.findClass(entity.classFullName)?.getProperties()` yourself. SchemaView does not expose the `BisCore.CustomHandledProperty` custom attribute, so the `includeCustom: false` filter must be replicated by the caller (query the custom-handled property set via ECSql) if needed.\r\n *\r\n * @example\r\n * ```typescript\r\n * const view = await entity.iModel.getSchemaView();\r\n * const cls = view.findClass(entity.classFullName);\r\n * if (cls) {\r\n * for (const property of cls.getProperties()) {\r\n * console.log(`Property name: ${property.name}, Kind: ${property.kind}`);\r\n * }\r\n * }\r\n * ```\r\n */\r\n public forEach(func: PropertyHandler, includeCustom: boolean = true) {\r\n const item = this._metadata ?? this.iModel.schemaContext.getSchemaItemSync(this.schemaItemKey);\r\n\r\n if (EntityClass.isEntityClass(item) || RelationshipClass.isRelationshipClass(item)) {\r\n for (const property of item.getPropertiesSync()) {\r\n if (includeCustom || !property.customAttributes?.has(`BisCore.CustomHandledProperty`))\r\n func(property.name, property);\r\n }\r\n } else {\r\n throw new Error(`Cannot get metadata for ${this.classFullName}. Class is not an EntityClass or RelationshipClass.`);\r\n }\r\n }\r\n\r\n /** Get the full BIS class name of this Entity in the form \"schema:class\" */\r\n public static get classFullName(): string { return `${this.schema.schemaName}:${this.className}`; }\r\n\r\n /** Get the full BIS class name of this Entity in the form \"schema:class\". */\r\n public get classFullName(): string { return this._ctor.classFullName; }\r\n /**\r\n * Get the item key used by the ecschema-metadata package to identify this entity class\r\n * @public @preview\r\n */\r\n public get schemaItemKey(): SchemaItemKey { return this._ctor.schemaItemKey; }\r\n\r\n /** Query metadata for this entity class from the iModel's schema. Returns cached metadata if available.\r\n * @throws [[IModelError]] if there is a problem querying the schema\r\n * @returns The metadata for the current entity\r\n * @public @preview\r\n * @deprecated in 5.10.0. Obtain a `SchemaView` via `iModel.getSchemaView()` and call `view.findClass(entity.classFullName)` to retrieve a `SchemaView.Class`. The returned type differs from `EntityClass | RelationshipClass` and offers a synchronous, snapshot-style API.\r\n */\r\n public async getMetaData(): Promise<EntityClass | RelationshipClass> {\r\n if (this._metadata) {\r\n return this._metadata;\r\n }\r\n\r\n const ecClass = await this.iModel.schemaContext.getSchemaItem(this.schemaItemKey, ECClass);\r\n if (EntityClass.isEntityClass(ecClass) || RelationshipClass.isRelationshipClass(ecClass)) {\r\n this._metadata = ecClass;\r\n return this._metadata;\r\n } else {\r\n throw new Error(`Cannot get metadata for ${this.classFullName}`);\r\n }\r\n }\r\n\r\n /** @internal\r\n * @deprecated in 5.10.0. Internal callers should obtain a `SchemaView` via `iModel.getSchemaView()` (or retain a pre-loaded one) and call `view.findClass(...)` instead. Note that `getSchemaView()` is async.\r\n */\r\n public getMetaDataSync(): EntityClass | RelationshipClass {\r\n if (this._metadata) {\r\n return this._metadata;\r\n }\r\n\r\n const ecClass = this.iModel.schemaContext.getSchemaItemSync(this.schemaItemKey, ECClass);\r\n if (EntityClass.isEntityClass(ecClass) || RelationshipClass.isRelationshipClass(ecClass)) {\r\n this._metadata = ecClass;\r\n return this._metadata;\r\n } else {\r\n throw new Error(`Cannot get metadata for ${this.classFullName}`);\r\n }\r\n }\r\n \r\n /** @internal */\r\n public static get protectedOperations(): string[] { return []; }\r\n\r\n /** return whether this Entity class is a subclass of another Entity class\r\n * @note the subclass-ness is checked according to JavaScript inheritance, to check the underlying raw EC class's\r\n * inheritance, you can use [ECClass.is]($ecschema-metadata)\r\n * @note this should have a type of `is<T extends typeof Entity>(otherClass: T): this is T` but can't because of\r\n * typescript's restriction on the `this` type in static methods\r\n */\r\n public static is(otherClass: typeof Entity): boolean {\r\n // inline of @itwin/core-bentley's isSubclassOf due to protected constructor.\r\n return this === otherClass || this.prototype instanceof otherClass;\r\n }\r\n\r\n /** whether this JavaScript class was generated for this ECClass because there was no registered custom implementation\r\n * ClassRegistry overrides this when generating a class\r\n * @internal\r\n */\r\n public static get isGeneratedClass() { return false; }\r\n\r\n /** Get the set of this entity's *entity references*, [EntityReferenceSet]($backend). An *entity reference* is any id\r\n * stored on the entity, in its EC properties or json fields.\r\n * This is important for cloning operations but can be useful in other situations as well.\r\n * @see this.collectReferenceIds\r\n * @beta\r\n */\r\n public getReferenceIds(): EntityReferenceSet {\r\n const referenceIds = new EntityReferenceSet();\r\n this.collectReferenceIds(referenceIds);\r\n return referenceIds;\r\n }\r\n\r\n /** Collect the Ids of this entity's *references* at this level of the class hierarchy.\r\n * A *reference* is any entity referenced by this entity's EC Data, including json fields.\r\n * This is important for cloning operations but can be useful in other situations as well.\r\n * @param _referenceIds The Id64Set to populate with reference Ids.\r\n * @note This should be overridden (with `super` called) at each level the class hierarchy that introduces references.\r\n * @see getReferenceIds\r\n * @beta\r\n */\r\n protected collectReferenceIds(_referenceIds: EntityReferenceSet): void {\r\n return; // no references by default\r\n }\r\n}\r\n\r\n/** A callback function to process properties of an Entity\r\n * @public @preview\r\n */\r\nexport type PropertyHandler = (name: string, property: Property) => void;\r\n\r\n/** Parameter type that can accept both abstract constructor types and non-abstract constructor types for `instanceof` to test.\r\n * @public @preview\r\n */\r\nexport type EntityClassType<T> = Function & { prototype: T }; // eslint-disable-line @typescript-eslint/no-unsafe-function-type\r\n"]}
|
|
1
|
+
{"version":3,"file":"Entity.js","sourceRoot":"","sources":["../../src/Entity.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Schema\r\n */\r\n\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { ElementLoadOptions, EntityProps, EntityReferenceSet, PropertyCallback, PropertyMetaData } from \"@itwin/core-common\";\r\nimport type { IModelDb } from \"./IModelDb\";\r\nimport { Schema } from \"./Schema\";\r\nimport { ECClass, EntityClass, Property, RelationshipClass, SchemaItemKey } from \"@itwin/ecschema-metadata\";\r\nimport { _nativeDb } from \"./internal/Symbols\";\r\n\r\n/** Represents a row returned by an ECSql query. The row is returned as a map of property names to values.\r\n * ECSqlRow has same schema as declared in ECSchema for the class and similar to if ECSQL SELECT * FROM <schema>:<class> were executed.\r\n * @beta */\r\nexport interface ECSqlRow {\r\n [key: string]: any\r\n}\r\n\r\n/** Set of properties that are used to deserialize an [[EntityProps]] from an ECSqlRow.\r\n * @beta */\r\nexport interface DeserializeEntityArgs {\r\n /** Row to deserialize */\r\n row: ECSqlRow;\r\n /** The IModel that contains this Entity */\r\n iModel: IModelDb;\r\n /** The options used when loading */\r\n options?: {\r\n /** Options used when loading an element */\r\n element?: ElementLoadOptions;\r\n }\r\n}\r\n\r\n/** A property of an [[Entity]] that needs to be custom handled during deserialization and serialization.\r\n * @beta */\r\nexport interface CustomHandledProperty {\r\n /** The name of the property as it appears in the ECSqlRow */\r\n readonly propertyName: string;\r\n /** Where the property is defined */\r\n readonly source: \"Class\" | \"Computed\";\r\n}\r\n\r\n/** Represents one of the fundamental building block in an [[IModelDb]]: as an [[Element]], [[Model]], or [[Relationship]].\r\n * Every subclass of Entity represents one BIS [ECClass]($ecschema-metadata).\r\n * An Entity is typically instantiated from an [EntityProps]($common) and can be converted back to this representation via [[Entity.toJSON]].\r\n * @public @preview\r\n */\r\nexport class Entity {\r\n /** An immutable property used to discriminate between [[Entity]] and [EntityProps]($common), used to inform the TypeScript compiler that these two types\r\n * are never substitutable for one another. To obtain an EntityProps from an Entity, use [[Entity.toJSON]].\r\n */\r\n public readonly isInstanceOfEntity = true as const;\r\n /** The Schema that defines this class. */\r\n public static schema: typeof Schema; // TODO: Schema key on the static level, but it requires a version which may differ between imodels\r\n\r\n private get _ctor(): typeof Entity { return this.constructor as typeof Entity; }\r\n\r\n /** The name of the BIS class associated with this class.\r\n * @note Every subclass of Entity **MUST** override this method to identify its BIS class.\r\n * Failure to do so will ordinarily result in an error when the class is registered, since there may only\r\n * be one JavaScript class for a given BIS class (usually the errant class will collide with its superclass.)\r\n */\r\n public static get className(): string { return \"Entity\"; }\r\n\r\n /** Serves as a unique identifier for this class. Typed variant of [[classFullName]].\r\n * @public @preview\r\n */\r\n public static get schemaItemKey(): SchemaItemKey {\r\n // We cannot cache this here because the className gets overridden in subclasses\r\n return new SchemaItemKey(this.className, this.schema.schemaKey);\r\n }\r\n\r\n /** Cached Metadata for the ECClass */\r\n protected _metadata?: EntityClass | RelationshipClass;\r\n\r\n /** When working with an Entity it can be useful to set property values directly, bypassing the compiler's type checking.\r\n * This property makes such code slightly less tedious to read and write.\r\n * @internal\r\n */\r\n public get asAny(): any { return this; }\r\n\r\n /** The name of the BIS Schema that defines this class */\r\n public get schemaName(): string { return this._ctor.schema.schemaName; }\r\n\r\n /** The name of the BIS class associated with this class. */\r\n public get className(): string { return this._ctor.className; }\r\n\r\n /** The [[IModelDb]] that contains this Entity */\r\n public iModel: IModelDb;\r\n\r\n /** The Id of this Entity. May be invalid if the Entity has not yet been saved in the database. */\r\n public id: Id64String;\r\n\r\n\r\n protected constructor(props: EntityProps, iModel: IModelDb) {\r\n this.iModel = iModel;\r\n this.id = Id64.fromJSON(props.id);\r\n // copy all auto-handled properties from input to the object being constructed\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.forEachProperty((propName: string, meta: PropertyMetaData) => (this as any)[propName] = meta.createProperty((props as any)[propName]), false);\r\n }\r\n\r\n /** Invoke the constructor of the specified `Entity` subclass.\r\n * @internal\r\n */\r\n public static instantiate(subclass: typeof Entity, props: EntityProps, iModel: IModelDb): Entity {\r\n return new subclass(props, iModel);\r\n }\r\n\r\n /** List of properties that are need to be custom handled during deserialization and serialization.\r\n * These properties differ between the ECSql instance of an Entity and the Entity itself.\r\n * @beta */\r\n protected static readonly _customHandledProps: CustomHandledProperty[] = [\r\n { propertyName: \"id\", source: \"Class\" },\r\n { propertyName: \"className\", source: \"Class\" },\r\n { propertyName: \"jsonProperties\", source: \"Class\" }\r\n ];\r\n\r\n /** Get the list of properties that are custom handled by this class and its superclasses.\r\n * @internal */\r\n private static getCustomHandledProperties(): readonly CustomHandledProperty[] {\r\n if (this.name === \"Entity\") {\r\n return this._customHandledProps;\r\n }\r\n\r\n const superClass = Object.getPrototypeOf(this) as typeof Entity;\r\n return [\r\n ...superClass.getCustomHandledProperties(),\r\n ...this._customHandledProps,\r\n ];\r\n }\r\n\r\n /** Converts an ECSqlRow of an Entity to an EntityProps. This is used to deserialize an Entity from the database.\r\n * @beta */\r\n public static deserialize(props: DeserializeEntityArgs): EntityProps {\r\n const enProps: EntityProps = {\r\n classFullName: props.row.classFullName,\r\n id: props.row.id,\r\n }\r\n\r\n // Handles cases where id64 ints are stored in the jsonProperties and converts them to hex before parsing as a json object in js\r\n if (props.row.jsonProperties) {\r\n enProps.jsonProperties = JSON.parse(props.iModel[_nativeDb].patchJsonProperties(props.row.jsonProperties));\r\n }\r\n // Auto handles all properties that are not in the 'customHandledProperties' list\r\n const customHandledProperties = this.getCustomHandledProperties();\r\n Object.keys(props.row)\r\n .filter((propertyName) => customHandledProperties.find((val) => val.propertyName === propertyName) === undefined)\r\n .forEach((propertyName) => (enProps as ECSqlRow)[propertyName] = props.row[propertyName]\r\n );\r\n // Handles custom relClassNames to use '.' instead of ':'\r\n Object.keys(enProps).forEach((propertyName) => {\r\n if ((enProps as ECSqlRow)[propertyName].relClassName !== undefined && propertyName !== \"modeledElement\" && propertyName !== \"parentModel\") {\r\n (enProps as ECSqlRow)[propertyName].relClassName = (enProps as ECSqlRow)[propertyName].relClassName.replace(':', '.');\r\n }\r\n });\r\n return enProps;\r\n }\r\n\r\n /** Converts an EntityProps to an ECSqlRow. This is used to serialize an Entity to prepare to write it to the database.\r\n * @beta */\r\n public static serialize(props: EntityProps, _iModel: IModelDb): ECSqlRow {\r\n const inst: ECSqlRow = {\r\n classFullName: props.classFullName,\r\n id: props.id,\r\n }\r\n\r\n const customHandledProperties = this.getCustomHandledProperties();\r\n Object.keys(props)\r\n .filter((propertyName) => customHandledProperties.find((val) => val.propertyName === propertyName) === undefined)\r\n .forEach((propertyName) => inst[propertyName] = (props as ECSqlRow)[propertyName]\r\n );\r\n return inst;\r\n }\r\n\r\n /** Obtain the JSON representation of this Entity. Subclasses of [[Entity]] typically override this method to return their corresponding sub-type of [EntityProps]($common) -\r\n * for example, [[GeometricElement.toJSON]] returns a [GeometricElementProps]($common).\r\n */\r\n public toJSON(): EntityProps {\r\n const val: any = {};\r\n val.classFullName = this.classFullName;\r\n if (Id64.isValid(this.id))\r\n val.id = this.id;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.forEachProperty((propName: string) => val[propName] = (this as any)[propName], false);\r\n return val;\r\n }\r\n\r\n /** Call a function for each property of this Entity.\r\n * @param func The callback to be invoked on each property\r\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\r\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Obtain a `SchemaView` via `iModel.getSchemaView()` and iterate `view.findClass(entity.classFullName)?.getProperties()` instead. (`forEach` is also deprecated.)\r\n *\r\n * @example\r\n * ```typescript\r\n * // Deprecated method\r\n * entity.forEachProperty((name, propMetaData) => {\r\n * console.log(`Property name: ${name}, Property type: ${propMetaData.primitiveType}`);\r\n * });\r\n *\r\n * // New method\r\n * entity.forEach((name, property) => {\r\n * console.log(`Property name: ${name}, Property type: ${property.propertyType}`);\r\n * });\r\n * ```\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public forEachProperty(func: PropertyCallback, includeCustom: boolean = true) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.iModel.forEachMetaData(this.classFullName, true, func, includeCustom);\r\n }\r\n\r\n /**\r\n * Call a function for each property of this Entity.\r\n * @param func The callback to be invoked on each property.\r\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\r\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\r\n * @throws Error if metadata for the class cannot be retrieved.\r\n * @deprecated in 5.10.0 - will not be removed until after 2026-09-03. Obtain a `SchemaView` via `iModel.getSchemaView()` and iterate `view.findClass(entity.classFullName)?.getProperties()` yourself. SchemaView does not expose the `BisCore.CustomHandledProperty` custom attribute, so the `includeCustom: false` filter must be replicated by the caller (query the custom-handled property set via ECSql) if needed.\r\n *\r\n * @example\r\n * ```typescript\r\n * const view = await entity.iModel.getSchemaView();\r\n * const cls = view.findClass(entity.classFullName);\r\n * if (cls) {\r\n * for (const property of cls.getProperties()) {\r\n * console.log(`Property name: ${property.name}, Kind: ${property.kind}`);\r\n * }\r\n * }\r\n * ```\r\n */\r\n public forEach(func: PropertyHandler, includeCustom: boolean = true) {\r\n const item = this._metadata ?? this.iModel.schemaContext.getSchemaItemSync(this.schemaItemKey);\r\n\r\n if (EntityClass.isEntityClass(item) || RelationshipClass.isRelationshipClass(item)) {\r\n for (const property of item.getPropertiesSync()) {\r\n if (includeCustom || !property.customAttributes?.has(`BisCore.CustomHandledProperty`))\r\n func(property.name, property);\r\n }\r\n } else {\r\n throw new Error(`Cannot get metadata for ${this.classFullName}. Class is not an EntityClass or RelationshipClass.`);\r\n }\r\n }\r\n\r\n /** Get the full BIS class name of this Entity in the form \"schema:class\" */\r\n public static get classFullName(): string { return `${this.schema.schemaName}:${this.className}`; }\r\n\r\n /** Get the full BIS class name of this Entity in the form \"schema:class\". */\r\n public get classFullName(): string { return this._ctor.classFullName; }\r\n /**\r\n * Get the item key used by the ecschema-metadata package to identify this entity class\r\n * @public @preview\r\n */\r\n public get schemaItemKey(): SchemaItemKey { return this._ctor.schemaItemKey; }\r\n\r\n /** Query metadata for this entity class from the iModel's schema. Returns cached metadata if available.\r\n * @throws [[IModelError]] if there is a problem querying the schema\r\n * @returns The metadata for the current entity\r\n * @public @preview\r\n * @deprecated in 5.10.0 - will not be removed until after 2026-09-03. Obtain a `SchemaView` via `iModel.getSchemaView()` and call `view.findClass(entity.classFullName)` to retrieve a `SchemaView.Class`. The returned type differs from `EntityClass | RelationshipClass` and offers a synchronous, snapshot-style API.\r\n */\r\n public async getMetaData(): Promise<EntityClass | RelationshipClass> {\r\n if (this._metadata) {\r\n return this._metadata;\r\n }\r\n\r\n const ecClass = await this.iModel.schemaContext.getSchemaItem(this.schemaItemKey, ECClass);\r\n if (EntityClass.isEntityClass(ecClass) || RelationshipClass.isRelationshipClass(ecClass)) {\r\n this._metadata = ecClass;\r\n return this._metadata;\r\n } else {\r\n throw new Error(`Cannot get metadata for ${this.classFullName}`);\r\n }\r\n }\r\n\r\n /** @internal\r\n * @deprecated in 5.10.0 - will not be removed until after 2026-09-03. Internal callers should obtain a `SchemaView` via `iModel.getSchemaView()` (or retain a pre-loaded one) and call `view.findClass(...)` instead. Note that `getSchemaView()` is async.\r\n */\r\n public getMetaDataSync(): EntityClass | RelationshipClass {\r\n if (this._metadata) {\r\n return this._metadata;\r\n }\r\n\r\n const ecClass = this.iModel.schemaContext.getSchemaItemSync(this.schemaItemKey, ECClass);\r\n if (EntityClass.isEntityClass(ecClass) || RelationshipClass.isRelationshipClass(ecClass)) {\r\n this._metadata = ecClass;\r\n return this._metadata;\r\n } else {\r\n throw new Error(`Cannot get metadata for ${this.classFullName}`);\r\n }\r\n }\r\n \r\n /** @internal */\r\n public static get protectedOperations(): string[] { return []; }\r\n\r\n /** return whether this Entity class is a subclass of another Entity class\r\n * @note the subclass-ness is checked according to JavaScript inheritance, to check the underlying raw EC class's\r\n * inheritance, you can use [ECClass.is]($ecschema-metadata)\r\n * @note this should have a type of `is<T extends typeof Entity>(otherClass: T): this is T` but can't because of\r\n * typescript's restriction on the `this` type in static methods\r\n */\r\n public static is(otherClass: typeof Entity): boolean {\r\n // inline of @itwin/core-bentley's isSubclassOf due to protected constructor.\r\n return this === otherClass || this.prototype instanceof otherClass;\r\n }\r\n\r\n /** whether this JavaScript class was generated for this ECClass because there was no registered custom implementation\r\n * ClassRegistry overrides this when generating a class\r\n * @internal\r\n */\r\n public static get isGeneratedClass() { return false; }\r\n\r\n /** Get the set of this entity's *entity references*, [EntityReferenceSet]($backend). An *entity reference* is any id\r\n * stored on the entity, in its EC properties or json fields.\r\n * This is important for cloning operations but can be useful in other situations as well.\r\n * @see this.collectReferenceIds\r\n * @beta\r\n */\r\n public getReferenceIds(): EntityReferenceSet {\r\n const referenceIds = new EntityReferenceSet();\r\n this.collectReferenceIds(referenceIds);\r\n return referenceIds;\r\n }\r\n\r\n /** Collect the Ids of this entity's *references* at this level of the class hierarchy.\r\n * A *reference* is any entity referenced by this entity's EC Data, including json fields.\r\n * This is important for cloning operations but can be useful in other situations as well.\r\n * @param _referenceIds The Id64Set to populate with reference Ids.\r\n * @note This should be overridden (with `super` called) at each level the class hierarchy that introduces references.\r\n * @see getReferenceIds\r\n * @beta\r\n */\r\n protected collectReferenceIds(_referenceIds: EntityReferenceSet): void {\r\n return; // no references by default\r\n }\r\n}\r\n\r\n/** A callback function to process properties of an Entity\r\n * @public @preview\r\n */\r\nexport type PropertyHandler = (name: string, property: Property) => void;\r\n\r\n/** Parameter type that can accept both abstract constructor types and non-abstract constructor types for `instanceof` to test.\r\n * @public @preview\r\n */\r\nexport type EntityClassType<T> = Function & { prototype: T }; // eslint-disable-line @typescript-eslint/no-unsafe-function-type\r\n"]}
|
package/lib/cjs/IModelHost.d.ts
CHANGED
|
@@ -298,9 +298,11 @@ export declare class IModelHost {
|
|
|
298
298
|
* @beta
|
|
299
299
|
*/
|
|
300
300
|
static get appWorkspace(): Workspace;
|
|
301
|
-
/** Obtain the [[Workspace]] for an iTwin by discovering its settings
|
|
302
|
-
*
|
|
303
|
-
*
|
|
301
|
+
/** Obtain the [[Workspace]] for an iTwin by discovering its settings containers.
|
|
302
|
+
* Named dictionary resources from the account iTwin container are loaded at [[SettingsPriority.organization]];
|
|
303
|
+
* resources from the requested iTwin's container (when different from the account iTwin) are loaded at
|
|
304
|
+
* [[SettingsPriority.iTwin]].
|
|
305
|
+
* @note This method requires an internet connection to discover the containers.
|
|
304
306
|
* To use an iTwin workspace offline, use the overload that accepts [[WorkspaceDbSettingsProps]].
|
|
305
307
|
* @note The returned workspace is caller-owned. Call `close` when finished.
|
|
306
308
|
* @beta
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelHost.d.ts","sourceRoot":"","sources":["../../src/IModelHost.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"IModelHost.d.ts","sourceRoot":"","sources":["../../src/IModelHost.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelHost.js","sourceRoot":"","sources":["../../src/IModelHost.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module IModelHost\r\n */\r\n\r\n// To avoid circular load errors, the \"Element\" classes must be loaded before IModelHost.\r\nimport \"./IModelDb\"; // DO NOT REMOVE OR MOVE THIS LINE!\r\n\r\nimport { IModelNative, loadNativePlatform } from \"./internal/NativePlatform\";\r\nimport * as os from \"node:os\";\r\nimport { NativeLibrary } from \"@bentley/imodeljs-native\";\r\nimport { AccessToken, assert, BeEvent, BentleyStatus, DbResult, Guid, GuidString, IModelStatus, Logger, Mutable, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport { AuthorizationClient, IModelError, ITwinSettingsError, LocalDirName, SessionProps } from \"@itwin/core-common\";\r\nimport { AzureServerStorage, AzureServerStorageConfig, BlobServiceClientWrapper } from \"@itwin/object-storage-azure\";\r\nimport { BlobServiceClient, StorageSharedKeyCredential } from \"@azure/storage-blob\";\r\nimport type { ServerStorage } from \"@itwin/object-storage-core\";\r\nimport { BackendHubAccess, CreateNewIModelProps } from \"./BackendHubAccess\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { BisCoreSchema } from \"./BisCoreSchema\";\r\nimport { BriefcaseManager } from \"./BriefcaseManager\";\r\nimport { CloudSqlite } from \"./CloudSqlite\";\r\nimport { FunctionalSchema } from \"./domains/FunctionalSchema\";\r\nimport { GenericSchema } from \"./domains/GenericSchema\";\r\nimport { EditTxn } from \"./EditTxn\";\r\nimport { GeoCoordConfig } from \"./GeoCoordConfig\";\r\nimport { IModelJsFs } from \"./IModelJsFs\";\r\nimport { DevToolsRpcImpl } from \"./rpc-impl/DevToolsRpcImpl\";\r\nimport { IModelReadRpcImpl } from \"./rpc-impl/IModelReadRpcImpl\";\r\nimport { IModelTileRpcImpl } from \"./rpc-impl/IModelTileRpcImpl\";\r\nimport { SnapshotIModelRpcImpl } from \"./rpc-impl/SnapshotIModelRpcImpl\";\r\nimport { initializeRpcBackend } from \"./RpcBackend\";\r\nimport { TileStorage } from \"./TileStorage\";\r\nimport { type Setting, SettingsContainer, SettingsDictionary, SettingsPriority } from \"./workspace/Settings\";\r\nimport { settingsWorkspaceDbName } from \"./workspace/SettingsDb\";\r\nimport { SettingsContainers, SettingsEditor } from \"./workspace/SettingsEditor\";\r\nimport { SettingsSchemas } from \"./workspace/SettingsSchemas\";\r\nimport { Workspace, WorkspaceDbLoadError, WorkspaceDbSettingsProps, WorkspaceOpts } from \"./workspace/Workspace\";\r\nimport { join, normalize as normalizeDir } from \"path\";\r\nimport { constructWorkspace, OwnedWorkspace, throwWorkspaceDbLoadErrors } from \"./internal/workspace/WorkspaceImpl\";\r\nimport { SettingsImpl } from \"./internal/workspace/SettingsImpl\";\r\nimport { constructSettingsSchemas } from \"./internal/workspace/SettingsSchemasImpl\";\r\nimport { _getHubAccess, _hubAccess, _setHubAccess } from \"./internal/Symbols\";\r\n\r\nconst loggerCategory = BackendLoggerCategory.IModelHost;\r\n\r\n// cspell:ignore nodereport fatalerror apicall alicloud rpcs\r\n\r\n/** @internal */\r\nexport interface CrashReportingConfigNameValuePair {\r\n name: string;\r\n value: string;\r\n}\r\n\r\n/** Configuration of the crash-reporting system.\r\n * @internal\r\n */\r\nexport interface CrashReportingConfig {\r\n /** The directory to which *.dmp and/or iModelJsNativeCrash*.properties.txt files are written. This directory will be created if it does not already exist. */\r\n crashDir: string;\r\n /** max # .dmp files that may exist in crashDir. The default is 50. */\r\n maxDumpsInDir?: number;\r\n /** Enable crash-dumps? If so, .dmp and .properties.txt files will be generated and written to crashDir in the event of an unhandled native-code exception. If not, only .properties.txt files will be written. The default is false. */\r\n enableCrashDumps?: boolean;\r\n /** If enableCrashDumps is true, do you want a full-memory dump? Defaults to false. */\r\n wantFullMemoryDumps?: boolean;\r\n /** Enable Node.js crash reporting? If so, report files will be generated in the event of an unhandled exception or fatal error and written to crashDir. The default is false. */\r\n enableNodeReport?: boolean;\r\n /** Additional name, value pairs to write to iModelJsNativeCrash*.properties.txt file in the event of a crash. */\r\n params?: CrashReportingConfigNameValuePair[];\r\n /** Run this .js file to process .dmp and Node.js crash reporting .json files in the event of a crash.\r\n * This script will be executed with a single command-line parameter: the name of the dump or Node.js report file.\r\n * In the case of a dump file, there will be a second file with the same basename and the extension \".properties.txt\".\r\n * Since it runs in a separate process, this script will have no access to the Javascript\r\n * context of the exiting backend. No default.\r\n */\r\n dumpProcessorScriptFileName?: string;\r\n /** Upload crash dump and node-reports to Bentley's crash-reporting service? Defaults to false */\r\n uploadToBentley?: boolean;\r\n}\r\n\r\n/** @beta */\r\nexport interface AzureBlobStorageCredentials {\r\n account: string;\r\n accessKey: string;\r\n baseUrl?: string;\r\n}\r\n\r\n/** Controls how iModel writes through the implicit transaction are enforced.\r\n *\r\n * Allowed values:\r\n * - \"allow\": preserve pre-version 5.8.0 behavior for backwards compatibility.\r\n * - \"log\": allow the operation but log each implicit write as an error case.\r\n * - \"throw\": reject writes through the implicit transaction and require explicit EditTxns.\r\n * @beta\r\n */\r\nexport type ImplicitWriteEnforcement = \"allow\" | \"log\" | \"throw\";\r\n\r\n/**\r\n * Options for [[IModelHost.startup]]\r\n * @public\r\n */\r\nexport interface IModelHostOptions {\r\n /**\r\n * The name of the *Profile* subdirectory of [[cacheDir]] for this process. If not present, \"default\" is used.\r\n * @see [[IModelHost.profileName]]\r\n * @beta\r\n */\r\n profileName?: string;\r\n\r\n /**\r\n * Root of the directory holding all the files that iTwin.js caches\r\n * - If not specified at startup a platform specific default is used -\r\n * - Windows: $(HOMEDIR)/AppData/Local/iModelJs/\r\n * - Mac/iOS: $(HOMEDIR)/Library/Caches/iModelJs/\r\n * - Linux: $(HOMEDIR)/.cache/iModelJs/\r\n * where $(HOMEDIR) is documented [here](https://nodejs.org/api/os.html#os_os_homedir)\r\n * - if specified, ensure it is set to a folder with read/write access.\r\n * @see [[IModelHost.cacheDir]] for the value it's set to after startup\r\n */\r\n cacheDir?: LocalDirName;\r\n\r\n /** The directory where application assets are found. */\r\n appAssetsDir?: LocalDirName;\r\n\r\n /**\r\n * Options for creating the [[IModelHost.appWorkspace]]\r\n * @beta\r\n */\r\n workspace?: WorkspaceOpts;\r\n\r\n /**\r\n * The kind of iModel hub server to use.\r\n */\r\n hubAccess?: BackendHubAccess;\r\n\r\n /** The Azure blob storage credentials to use for the tile cache service. If omitted and no external service implementation is provided, a local cache will be used.\r\n * @beta\r\n */\r\n tileCacheAzureCredentials?: AzureBlobStorageCredentials;\r\n\r\n /**\r\n * @beta\r\n * @note A reference implementation is set for AzureServerStorage from @itwin/object-storage-azure if [[tileCacheAzureCredentials]] property is set. To supply a different implementation for any service provider (such as AWS),\r\n * set this property with a custom ServerStorage.\r\n */\r\n tileCacheStorage?: ServerStorage;\r\n\r\n /** The maximum size in bytes to which a local sqlite database used for caching tiles can grow before it is purged of least-recently-used tiles.\r\n * The local cache is used only if an external cache has not been configured via [[tileCacheStorage]], and [[tileCacheAzureCredentials]].\r\n * Defaults to 1 GB. Must be an unsigned integer. A value of zero disables the local cache entirely.\r\n * @beta\r\n */\r\n maxTileCacheDbSize?: number;\r\n\r\n /** Whether to restrict tile cache URLs by client IP address (if available).\r\n * @beta\r\n */\r\n restrictTileUrlsByClientIp?: boolean;\r\n\r\n /** Whether to enable OpenTelemetry tracing.\r\n * Defaults to `false`.\r\n */\r\n enableOpenTelemetry?: boolean;\r\n\r\n /** Whether to compress cached tiles.\r\n * Defaults to `true`.\r\n */\r\n compressCachedTiles?: boolean;\r\n\r\n /** The time, in milliseconds, for which [IModelTileRpcInterface.requestTileTreeProps]($common) should wait before returning a \"pending\" status.\r\n * @internal\r\n */\r\n tileTreeRequestTimeout?: number;\r\n\r\n /** The time, in milliseconds, for which [IModelTileRpcInterface.requestTileContent]($common) should wait before returning a \"pending\" status.\r\n * @internal\r\n */\r\n tileContentRequestTimeout?: number;\r\n\r\n /** The backend will log when a tile took longer to load than this threshold in seconds.\r\n * @internal\r\n */\r\n logTileLoadTimeThreshold?: number;\r\n\r\n /** The backend will log when a tile is loaded with a size in bytes above this threshold.\r\n * @internal\r\n */\r\n logTileSizeThreshold?: number;\r\n\r\n /** Crash-reporting configuration\r\n * @internal\r\n */\r\n crashReportingConfig?: CrashReportingConfig;\r\n\r\n /** The AuthorizationClient used to obtain [AccessToken]($bentley)s. */\r\n authorizationClient?: AuthorizationClient;\r\n\r\n /**\r\n * Automatically enable shared channel when opening iModels for read/write (see [Working With Channels]($docs/learning/backend/Channel.md)).\r\n * If not present, defaults to `true` for backwards compatibility. This means that the shared channel may be edited by default. Generally\r\n * that is undesirable because it allows applications to \"accidentally\" modify data it shouldn't be allowed to modify. Unfortunately the\r\n * previous versions of iTwin.js allowed it so this is necessary so they won't break.\r\n * Will be changed to default to `false` in 5.0.\r\n */\r\n allowSharedChannel?: boolean;\r\n\r\n /**\r\n * Setting this to true will revert to the previous behavior of using the native side for all CRUD operations.\r\n * While set to false, the getElement(), getModel() and getAspect() functions will use a thinned down native workflow to read the entities from the database.\r\n * This workflow performs work previously done on the native side in the TS side, resulting in performance improvements, if errors are detected,\r\n * this option can be set to true to revert to old workflow.\r\n */\r\n disableThinnedNativeInstanceWorkflow?: boolean;\r\n\r\n /**\r\n * Configuration controlling whether to disable the creation of restore points during pull/merge operations.\r\n * @beta\r\n */\r\n disableRestorePointOnPullMerge?: true;\r\n /**\r\n * Configuration controlling whether incremental schema loading is enabled or disabled.\r\n * @beta\r\n */\r\n incrementalSchemaLoading?: \"enabled\" | \"disabled\";\r\n /**\r\n * Configuration controlling whether to use semantic rebase or not.\r\n * @beta\r\n */\r\n useSemanticRebase?: boolean;\r\n\r\n /**\r\n * Controls how writes through the implicit transaction are enforced.\r\n * See [[ImplicitWriteEnforcement]] for the allowed values.\r\n * Defaults to \"allow\" for backwards compatibility.\r\n * @beta\r\n */\r\n implicitWriteEnforcement?: ImplicitWriteEnforcement;\r\n}\r\n\r\n/** Configuration of core-backend.\r\n * @public\r\n */\r\nexport class IModelHostConfiguration implements IModelHostOptions {\r\n public static defaultTileRequestTimeout = 20 * 1000;\r\n public static defaultLogTileLoadTimeThreshold = 40;\r\n public static defaultLogTileSizeThreshold = 20 * 1000000;\r\n /** @internal */\r\n public static defaultMaxTileCacheDbSize = 1024 * 1024 * 1024;\r\n public appAssetsDir?: LocalDirName;\r\n public cacheDir?: LocalDirName;\r\n\r\n /** @beta */\r\n public workspace?: WorkspaceOpts;\r\n public hubAccess?: BackendHubAccess;\r\n /** The AuthorizationClient used to obtain [AccessToken]($bentley)s. */\r\n public authorizationClient?: AuthorizationClient;\r\n /** @beta */\r\n public restrictTileUrlsByClientIp?: boolean;\r\n public compressCachedTiles?: boolean;\r\n /** @beta */\r\n public tileCacheAzureCredentials?: AzureBlobStorageCredentials;\r\n /** @internal */\r\n public tileTreeRequestTimeout = IModelHostConfiguration.defaultTileRequestTimeout;\r\n /** @internal */\r\n public tileContentRequestTimeout = IModelHostConfiguration.defaultTileRequestTimeout;\r\n /** @internal */\r\n public logTileLoadTimeThreshold = IModelHostConfiguration.defaultLogTileLoadTimeThreshold;\r\n /** @internal */\r\n public logTileSizeThreshold = IModelHostConfiguration.defaultLogTileSizeThreshold;\r\n /** @internal */\r\n public crashReportingConfig?: CrashReportingConfig;\r\n /**\r\n * Configuration controlling whether to use the thinned down native instance functions for element, model, and aspect CRUD operations\r\n * or use the previous behavior of using the native side for all CRUD operations. Set to true to revert to the previous behavior.\r\n * @beta\r\n */\r\n public disableThinnedNativeInstanceWorkflow?: boolean;\r\n\r\n /**\r\n * Configuration controlling whether to disable the creation of restore points during pull/merge operations.\r\n * @beta\r\n */\r\n public disableRestorePointOnPullMerge?: true;\r\n /**\r\n * Configuration controlling whether incremental schema loading is disabled.\r\n * Default is \"disabled\" at the moment to preserve existing behavior.\r\n * @beta\r\n */\r\n public incrementalSchemaLoading: \"enabled\" | \"disabled\" = \"disabled\";\r\n /**\r\n * Configuration controlling whether to use semantic rebase or not. By default it is undefined meaning semantic rebase is not used.\r\n * @beta\r\n */\r\n public useSemanticRebase?: boolean;\r\n /**\r\n * Controls how writes through the implicit transaction are enforced.\r\n * See [[IModelHostOptions.implicitWriteEnforcement]] for the meaning of each allowed value.\r\n * @beta\r\n */\r\n public implicitWriteEnforcement: ImplicitWriteEnforcement = \"allow\";\r\n}\r\n\r\n/**\r\n * Settings for `IModelHost.appWorkspace`.\r\n * @note this includes the default dictionary from the SettingsSpecRegistry\r\n */\r\nclass ApplicationSettings extends SettingsImpl {\r\n private _remove?: VoidFunction;\r\n protected override verifyPriority(priority: SettingsPriority) {\r\n if (priority > SettingsPriority.application) // only application or lower may appear in ApplicationSettings\r\n throw new Error(\"Use IModelSettings\");\r\n }\r\n private updateDefaults() {\r\n const defaults: SettingsContainer = {};\r\n for (const [schemaName, val] of IModelHost.settingsSchemas.settingDefs) {\r\n if (val.default)\r\n defaults[schemaName] = val.default;\r\n }\r\n this.addDictionary({ name: \"_default_\", priority: 0 }, defaults);\r\n }\r\n\r\n public constructor() {\r\n super();\r\n this._remove = IModelHost.settingsSchemas.onSchemaChanged.addListener(() => this.updateDefaults());\r\n this.updateDefaults();\r\n }\r\n\r\n public override close() {\r\n if (this._remove) {\r\n this._remove();\r\n this._remove = undefined;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Settings for an iTwin. May only include settings priority for iTwin and organization.\r\n */\r\nclass ITwinWorkspaceSettings extends SettingsImpl {\r\n protected override verifyPriority(priority: SettingsPriority) {\r\n if (priority <= SettingsPriority.application)\r\n ITwinSettingsError.throwError(\"invalid-priority\", { message: `Settings with priority ${priority} cannot be added to an iTwin workspace.` });\r\n if (priority > SettingsPriority.iTwin)\r\n ITwinSettingsError.throwError(\"invalid-priority\", { message: `Settings with priority ${priority} cannot be added to an iTwin workspace.` });\r\n }\r\n\r\n public override * getSettingEntries<T extends Setting>(name: string): Iterable<{ value: T, dictionary: SettingsDictionary }> {\r\n yield* super.getSettingEntries(name);\r\n yield* IModelHost.appWorkspace.settings.getSettingEntries(name);\r\n }\r\n}\r\n\r\nconst definedInStartup = <T>(obj: T | undefined): T => {\r\n if (obj === undefined)\r\n throw new Error(\"IModelHost.startup must be called first\");\r\n return obj;\r\n};\r\n\r\n/** IModelHost initializes ($backend) and captures its configuration. A backend must call [[IModelHost.startup]] before using any backend classes.\r\n * See [the learning article]($docs/learning/backend/IModelHost.md)\r\n * @public\r\n */\r\nexport class IModelHost {\r\n private constructor() { }\r\n\r\n /** The AuthorizationClient used to obtain [AccessToken]($bentley)s. */\r\n public static authorizationClient?: AuthorizationClient;\r\n\r\n public static backendVersion = \"\";\r\n private static _profileName: string;\r\n private static _cacheDir = \"\";\r\n private static _settingsSchemas?: SettingsSchemas;\r\n private static _appWorkspace?: OwnedWorkspace;\r\n\r\n // Omit the hubAccess field from configuration so it stays internal.\r\n public static configuration?: Omit<IModelHostOptions, \"hubAccess\">;\r\n\r\n /**\r\n * The name of the *Profile* directory (a subdirectory of \"[[cacheDir]]/profiles/\") for this process.\r\n *\r\n * The *Profile* directory is used to cache data that is specific to a type-of-usage of the iTwin.js library.\r\n * It is important that information in the profile cache be consistent but isolated across sessions (i.e.\r\n * data for a profile is maintained between runs, but each profile is completely independent and\r\n * unaffected by the presence or use of others.)\r\n * @note **Only one process at a time may be using a given profile**, and an exception will be thrown by [[startup]]\r\n * if a second process attempts to use the same profile.\r\n * @beta\r\n */\r\n public static get profileName(): string {\r\n return this._profileName;\r\n }\r\n\r\n /** The full path of the Profile directory.\r\n * @see [[profileName]]\r\n * @beta\r\n */\r\n public static get profileDir(): LocalDirName {\r\n return join(this._cacheDir, \"profiles\", this._profileName);\r\n }\r\n\r\n /** Event raised during startup to allow loading settings data */\r\n public static readonly onWorkspaceStartup = new BeEvent<() => void>();\r\n\r\n /** Event raised just after the backend IModelHost was started */\r\n public static readonly onAfterStartup = new BeEvent<() => void>();\r\n\r\n /** Event raised just before the backend IModelHost is to be shut down */\r\n public static readonly onBeforeShutdown = new BeEvent<() => void>();\r\n\r\n /** @internal */\r\n public static readonly session: Mutable<SessionProps> = { applicationId: \"2686\", applicationVersion: \"1.0.0\", sessionId: \"\" };\r\n\r\n /** A uniqueId for this session */\r\n public static get sessionId() { return this.session.sessionId; }\r\n public static set sessionId(id: GuidString) { this.session.sessionId = id; }\r\n\r\n /** The Id of this application - needs to be set only if it is an agent application. The applicationId will otherwise originate at the frontend. */\r\n public static get applicationId() { return this.session.applicationId; }\r\n public static set applicationId(id: string) { this.session.applicationId = id; }\r\n\r\n /** The version of this application - needs to be set if is an agent application. The applicationVersion will otherwise originate at the frontend. */\r\n public static get applicationVersion() { return this.session.applicationVersion; }\r\n public static set applicationVersion(version: string) { this.session.applicationVersion = version; }\r\n\r\n /** A string that can identify the current user to other users when collaborating. */\r\n public static userMoniker = \"unknown\";\r\n\r\n /** Root directory holding files that iTwin.js caches */\r\n public static get cacheDir(): LocalDirName { return this._cacheDir; }\r\n\r\n /** The application [[Workspace]] for this `IModelHost`\r\n * @note this `Workspace` only holds [[WorkspaceContainer]]s and [[Settings]] scoped to the currently loaded application(s).\r\n * All organization, iTwin, and iModel based containers or settings must be accessed through [[IModelDb.workspace]] and\r\n * attempting to add them to this Workspace will fail.\r\n * @beta\r\n */\r\n public static get appWorkspace(): Workspace { return definedInStartup(this._appWorkspace); }\r\n\r\n /** Obtain the [[Workspace]] for an iTwin by discovering its settings container.\r\n * All named dictionary resources in the container's [[WorkspaceDb]] are loaded into the workspace at [[SettingsPriority.iTwin]].\r\n * @note This method requires an internet connection to discover the container.\r\n * To use an iTwin workspace offline, use the overload that accepts [[WorkspaceDbSettingsProps]].\r\n * @note The returned workspace is caller-owned. Call `close` when finished.\r\n * @beta\r\n */\r\n public static async getITwinWorkspace(iTwinId: GuidString): Promise<OwnedWorkspace>;\r\n /** Obtain the [[Workspace]] for an iTwin.\r\n * The supplied [[WorkspaceDbSettingsProps]] are passed directly to [[Workspace.loadSettingsDictionary]].\r\n * @note You can derive these from the `settingsSources` property on a previously returned workspace.\r\n * @note The returned workspace is caller-owned. Call `close` when finished.\r\n * @beta\r\n */\r\n public static async getITwinWorkspace(props: WorkspaceDbSettingsProps | WorkspaceDbSettingsProps[]): Promise<OwnedWorkspace>;\r\n /** @internal */\r\n public static async getITwinWorkspace(args: GuidString | WorkspaceDbSettingsProps | WorkspaceDbSettingsProps[]): Promise<OwnedWorkspace> {\r\n const isITwinId = typeof args === \"string\";\r\n const workspace = constructWorkspace(new ITwinWorkspaceSettings());\r\n\r\n try {\r\n const settingsSources = isITwinId ? await SettingsContainers.getITwinSettingsSources(args) : args;\r\n if (undefined === settingsSources)\r\n return workspace;\r\n\r\n workspace.settingsSources = settingsSources;\r\n\r\n const problems: WorkspaceDbLoadError[] = [];\r\n await workspace.loadSettingsDictionary(settingsSources, problems);\r\n\r\n if (problems.length > 0) {\r\n const label = isITwinId ? `iTwin '${args}'` : \"the supplied settings workspace db properties\";\r\n throwWorkspaceDbLoadErrors(`attempting to load workspace settings for ${label}`, problems);\r\n }\r\n\r\n return workspace;\r\n } catch (error) {\r\n workspace.close();\r\n throw error;\r\n }\r\n }\r\n\r\n /** Save a named [[SettingsDictionary]] to the iTwin's settings container.\r\n * If no iTwin settings container exists for `iTwinId`, one is created.\r\n * The dictionary is stored as a named resource in the container's default [[WorkspaceDb]], where `name` is used as the resource name.\r\n * @param iTwinId The iTwin whose settings container should be updated.\r\n * @param name The name of the dictionary, used as the resource name in the [[WorkspaceDb]].\r\n * @param settings The settings key-value pairs to store.\r\n * @note uses [[IModelHost.userMoniker]] as the user name for acquiring the write lock on the settings container.\r\n * @beta\r\n */\r\n public static async saveSettingDictionary(iTwinId: GuidString, name: string, settings: SettingsContainer): Promise<void> {\r\n const { editor, container } = await SettingsEditor.constructForITwin(iTwinId);\r\n try {\r\n await container.withEditableDb(this.userMoniker, (db) => {\r\n db.updateSettingsResource(settings, name);\r\n }, { dbName: settingsWorkspaceDbName });\r\n } finally {\r\n editor.close();\r\n }\r\n }\r\n\r\n /** Delete a named [[SettingsDictionary]] from the iTwin's settings container.\r\n * If no iTwin settings container exists, this method does nothing.\r\n * @param iTwinId The iTwin whose settings container should be updated.\r\n * @param name The name of the dictionary (resource name) to delete.\r\n * @note uses [[IModelHost.userMoniker]] as the user name for acquiring the write lock on the settings container.\r\n * @beta\r\n */\r\n public static async deleteSettingDictionary(iTwinId: GuidString, name: string): Promise<void> {\r\n const settingsEditor = await SettingsEditor.getForITwin(iTwinId);\r\n if (undefined === settingsEditor)\r\n return;\r\n\r\n const { editor, container } = settingsEditor;\r\n try {\r\n await container.withEditableDb(this.userMoniker, (db) => {\r\n db.removeString(name);\r\n }, { dbName: settingsWorkspaceDbName });\r\n } finally {\r\n editor.close();\r\n }\r\n }\r\n\r\n /** The registry of schemas describing the [[Setting]]s for the application session.\r\n * Applications should register their schemas via methods like [[SettingsSchemas.addGroup]].\r\n * @beta\r\n */\r\n public static get settingsSchemas(): SettingsSchemas { return definedInStartup(this._settingsSchemas); }\r\n\r\n /** The optional [[FileNameResolver]] that resolves keys and partial file names for snapshot iModels.\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. When opening a snapshot by file name, ensure to pass already resolved path. Using a key to open a snapshot is now deprecated.\r\n */\r\n public static snapshotFileNameResolver?: FileNameResolver; // eslint-disable-line @typescript-eslint/no-deprecated\r\n\r\n /** Get the current access token for this IModelHost, or a blank string if none is available.\r\n * @note for web backends, this will *always* return a blank string because the backend itself has no token (but never needs one either.)\r\n * For all IpcHosts, where this backend is servicing a single frontend, this will be the user's token. For ElectronHost, the backend\r\n * obtains the token and forwards it to the frontend.\r\n * @note accessTokens expire periodically and are automatically refreshed, if possible. Therefore tokens should not be saved, and the value\r\n * returned by this method may change over time throughout the course of a session.\r\n */\r\n public static async getAccessToken(): Promise<AccessToken> {\r\n try {\r\n return (await IModelHost.authorizationClient?.getAccessToken()) ?? \"\";\r\n } catch {\r\n return \"\";\r\n }\r\n }\r\n\r\n private static loadNative(options: IModelHostOptions) {\r\n loadNativePlatform();\r\n\r\n if (options.crashReportingConfig && options.crashReportingConfig.crashDir && !ProcessDetector.isElectronAppBackend && !ProcessDetector.isMobileAppBackend) {\r\n IModelNative.platform.setCrashReporting(options.crashReportingConfig);\r\n\r\n Logger.logTrace(loggerCategory, \"Configured crash reporting\", {\r\n enableCrashDumps: options.crashReportingConfig?.enableCrashDumps,\r\n wantFullMemoryDumps: options.crashReportingConfig?.wantFullMemoryDumps,\r\n enableNodeReport: options.crashReportingConfig?.enableNodeReport,\r\n uploadToBentley: options.crashReportingConfig?.uploadToBentley,\r\n });\r\n\r\n if (options.crashReportingConfig.enableNodeReport) {\r\n if (process.report !== undefined) {\r\n process.report.reportOnFatalError = true;\r\n process.report.reportOnUncaughtException = true;\r\n process.report.directory = options.crashReportingConfig.crashDir;\r\n Logger.logTrace(loggerCategory, \"Configured Node.js crash reporting\");\r\n } else {\r\n Logger.logWarning(loggerCategory, \"Unable to configure Node.js crash reporting\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public static tileStorage?: TileStorage;\r\n\r\n private static _hubAccess?: BackendHubAccess;\r\n /** @internal */\r\n public static [_setHubAccess](hubAccess: BackendHubAccess | undefined) { this._hubAccess = hubAccess; }\r\n\r\n /** get the current hubAccess, if present.\r\n * @internal\r\n */\r\n public static [_getHubAccess](): BackendHubAccess | undefined { return this._hubAccess; }\r\n\r\n /** Provides access to the IModelHub for this IModelHost\r\n * @internal\r\n * @note If [[IModelHostOptions.hubAccess]] was undefined when initializing this class, accessing this property will throw an error.\r\n * To determine whether one is present, use [[_getHubAccess]].\r\n */\r\n public static get [_hubAccess](): BackendHubAccess {\r\n if (IModelHost._hubAccess === undefined)\r\n throw new IModelError(IModelStatus.BadRequest, \"No BackendHubAccess supplied in IModelHostOptions\");\r\n return IModelHost._hubAccess;\r\n }\r\n\r\n private static initializeWorkspace(configuration: IModelHostOptions) {\r\n const settingAssets = join(KnownLocations.packageAssetsDir, \"Settings\");\r\n this._settingsSchemas = constructSettingsSchemas();\r\n this._settingsSchemas.addDirectory(join(settingAssets, \"Schemas\"));\r\n this._appWorkspace = constructWorkspace(new ApplicationSettings(), configuration.workspace);\r\n\r\n // Create the CloudCache for Workspaces. This will fail if another process is already using the same profile.\r\n try {\r\n this.appWorkspace.getCloudCache();\r\n } catch (e: any) {\r\n throw (e.errorNumber === DbResult.BE_SQLITE_BUSY) ? new IModelError(DbResult.BE_SQLITE_BUSY, `Profile [${this.profileDir}] is already in use by another process`) : e;\r\n }\r\n\r\n this.appWorkspace.settings.addDirectory(settingAssets, SettingsPriority.defaults);\r\n\r\n GeoCoordConfig.onStartup();\r\n // allow applications to load their default settings\r\n this.onWorkspaceStartup.raiseEvent();\r\n }\r\n\r\n private static _isValid = false;\r\n\r\n /** true between a successful call to [[startup]] and before [[shutdown]] */\r\n public static get isValid() {\r\n return IModelHost._isValid;\r\n }\r\n\r\n /** This method must be called before any iTwin.js services are used.\r\n * @param options Host configuration data.\r\n * Raises [[onAfterStartup]].\r\n * @see [[shutdown]].\r\n */\r\n public static async startup(options?: IModelHostOptions): Promise<void> {\r\n if (this._isValid)\r\n return; // we're already initialized\r\n this._isValid = true;\r\n\r\n options = options ?? {};\r\n if (this.sessionId === \"\")\r\n this.sessionId = Guid.createValue();\r\n\r\n this.authorizationClient = options.authorizationClient;\r\n\r\n this.backendVersion = require(\"../../package.json\").version; // eslint-disable-line @typescript-eslint/no-require-imports\r\n initializeRpcBackend(options.enableOpenTelemetry);\r\n\r\n this.loadNative(options);\r\n this.setupCacheDir(options);\r\n this.initializeWorkspace(options);\r\n EditTxn.implicitWriteEnforcement = options.implicitWriteEnforcement ?? \"allow\";\r\n BriefcaseManager.initialize(join(this._cacheDir, \"imodels\"));\r\n\r\n [\r\n IModelReadRpcImpl,\r\n IModelTileRpcImpl,\r\n SnapshotIModelRpcImpl, // eslint-disable-line @typescript-eslint/no-deprecated\r\n DevToolsRpcImpl,\r\n ].forEach((rpc) => rpc.register()); // register all of the RPC implementations\r\n\r\n [\r\n BisCoreSchema,\r\n GenericSchema,\r\n FunctionalSchema,\r\n ].forEach((schema) => schema.registerSchema()); // register all of the schemas\r\n\r\n const { hubAccess, ...otherOptions } = options;\r\n if (undefined !== hubAccess)\r\n this._hubAccess = hubAccess;\r\n\r\n this.configuration = otherOptions;\r\n this.setupTileCache();\r\n\r\n process.once(\"beforeExit\", IModelHost.shutdown);\r\n this.onAfterStartup.raiseEvent();\r\n }\r\n\r\n private static setupCacheDir(configuration: IModelHostOptions) {\r\n this._cacheDir = normalizeDir(configuration.cacheDir ?? NativeLibrary.defaultCacheDir);\r\n IModelJsFs.recursiveMkDirSync(this._cacheDir);\r\n\r\n this._profileName = configuration.profileName ?? \"default\";\r\n Logger.logInfo(loggerCategory, `cacheDir: [${this.cacheDir}], profileDir: [${this.profileDir}]`);\r\n }\r\n\r\n /** This method must be called when an iTwin.js host is shut down. Raises [[onBeforeShutdown]] */\r\n public static async shutdown(this: void): Promise<void> {\r\n // Note: This method is set as a node listener where `this` is unbound. Call private method to\r\n // ensure `this` is correct. Don't combine these methods.\r\n return IModelHost.doShutdown();\r\n }\r\n\r\n /**\r\n * Create a new iModel.\r\n * @returns the Guid of the newly created iModel.\r\n * @throws [IModelError]($common) in case of errors.\r\n * @note If [[IModelHostOptions.hubAccess]] was undefined in the call to [[startup]], this function will throw an error.\r\n */\r\n public static async createNewIModel(arg: CreateNewIModelProps): Promise<GuidString> {\r\n return this[_hubAccess].createNewIModel(arg);\r\n }\r\n\r\n private static async doShutdown() {\r\n if (!this._isValid)\r\n return;\r\n\r\n this._isValid = false;\r\n this.onBeforeShutdown.raiseEvent();\r\n\r\n this.configuration = undefined;\r\n EditTxn.implicitWriteEnforcement = \"allow\";\r\n this.tileStorage = undefined;\r\n\r\n this._appWorkspace?.close();\r\n this._appWorkspace = undefined;\r\n this._settingsSchemas = undefined;\r\n\r\n CloudSqlite.CloudCaches.destroy();\r\n process.removeListener(\"beforeExit\", IModelHost.shutdown);\r\n }\r\n\r\n /**\r\n * Add or update a property that should be included in a crash report.\r\n * @internal\r\n */\r\n public static setCrashReportProperty(name: string, value: string): void {\r\n IModelNative.platform.setCrashReportProperty(name, value);\r\n }\r\n\r\n /**\r\n * Remove a previously defined property so that will not be included in a crash report.\r\n * @internal\r\n */\r\n public static removeCrashReportProperty(name: string): void {\r\n IModelNative.platform.setCrashReportProperty(name, undefined);\r\n }\r\n\r\n /**\r\n * Get all properties that will be included in a crash report.\r\n * @internal\r\n */\r\n public static getCrashReportProperties(): CrashReportingConfigNameValuePair[] {\r\n return IModelNative.platform.getCrashReportProperties();\r\n }\r\n\r\n /** The directory where application assets may be found */\r\n public static get appAssetsDir(): string | undefined {\r\n return undefined !== IModelHost.configuration ? IModelHost.configuration.appAssetsDir : undefined;\r\n }\r\n\r\n /** The time, in milliseconds, for which IModelTileRpcInterface.requestTileTreeProps should wait before returning a \"pending\" status.\r\n * @internal\r\n */\r\n public static get tileTreeRequestTimeout(): number {\r\n return IModelHost.configuration?.tileTreeRequestTimeout ?? IModelHostConfiguration.defaultTileRequestTimeout;\r\n }\r\n /** The time, in milliseconds, for which IModelTileRpcInterface.requestTileContent should wait before returning a \"pending\" status.\r\n * @internal\r\n */\r\n public static get tileContentRequestTimeout(): number {\r\n return IModelHost.configuration?.tileContentRequestTimeout ?? IModelHostConfiguration.defaultTileRequestTimeout;\r\n }\r\n\r\n /** The backend will log when a tile took longer to load than this threshold in seconds. */\r\n public static get logTileLoadTimeThreshold(): number {\r\n return IModelHost.configuration?.logTileLoadTimeThreshold ?? IModelHostConfiguration.defaultLogTileLoadTimeThreshold;\r\n }\r\n /** The backend will log when a tile is loaded with a size in bytes above this threshold. */\r\n public static get logTileSizeThreshold(): number {\r\n return IModelHost.configuration?.logTileSizeThreshold ?? IModelHostConfiguration.defaultLogTileSizeThreshold;\r\n }\r\n\r\n /** Whether external tile caching is active.\r\n * @internal\r\n */\r\n public static get usingExternalTileCache(): boolean {\r\n return undefined !== IModelHost.tileStorage;\r\n }\r\n\r\n /** Whether to restrict tile cache URLs by client IP address.\r\n * @internal\r\n */\r\n public static get restrictTileUrlsByClientIp(): boolean {\r\n return undefined !== IModelHost.configuration && (IModelHost.configuration.restrictTileUrlsByClientIp ? true : false);\r\n }\r\n\r\n /** Whether to compress cached tiles.\r\n * @internal\r\n */\r\n public static get compressCachedTiles(): boolean {\r\n return false !== IModelHost.configuration?.compressCachedTiles;\r\n }\r\n\r\n /**\r\n * Whether to use semantic rebase or not.\r\n * @internal\r\n */\r\n public static get useSemanticRebase(): boolean {\r\n return undefined !== IModelHost.configuration && (IModelHost.configuration.useSemanticRebase ? true : false);\r\n }\r\n\r\n private static setupTileCache() {\r\n assert(undefined !== IModelHost.configuration);\r\n const config = IModelHost.configuration;\r\n const storage = config.tileCacheStorage;\r\n const credentials = config.tileCacheAzureCredentials;\r\n\r\n if (!storage && !credentials) {\r\n IModelNative.platform.setMaxTileCacheSize(config.maxTileCacheDbSize ?? IModelHostConfiguration.defaultMaxTileCacheDbSize);\r\n return;\r\n }\r\n\r\n IModelNative.platform.setMaxTileCacheSize(0);\r\n if (credentials) {\r\n if (storage)\r\n throw new IModelError(BentleyStatus.ERROR, \"Cannot use both Azure and custom cloud storage providers for tile cache.\");\r\n this.setupAzureTileCache(credentials);\r\n }\r\n if (storage)\r\n IModelHost.tileStorage = new TileStorage(storage);\r\n }\r\n\r\n private static setupAzureTileCache(credentials: AzureBlobStorageCredentials) {\r\n const storageConfig: AzureServerStorageConfig = {\r\n accountName: credentials.account,\r\n accountKey: credentials.accessKey,\r\n baseUrl: credentials.baseUrl ?? `https://${credentials.account}.blob.core.windows.net`,\r\n }\r\n const blobServiceClient = new BlobServiceClient(\r\n storageConfig.baseUrl,\r\n new StorageSharedKeyCredential(storageConfig.accountName, storageConfig.accountKey),\r\n );\r\n const azureStorage: ServerStorage = new AzureServerStorage(storageConfig, new BlobServiceClientWrapper(blobServiceClient))\r\n IModelHost.tileStorage = new TileStorage(azureStorage);\r\n }\r\n\r\n /** @internal */\r\n public static computeSchemaChecksum(arg: { schemaXmlPath: string, referencePaths: string[], exactMatch?: boolean }): string {\r\n return IModelNative.platform.computeSchemaChecksum(arg);\r\n }\r\n}\r\n\r\n/** Information about the platform on which the app is running.\r\n * @public\r\n */\r\nexport class Platform {\r\n /** Get the name of the platform. */\r\n public static get platformName(): \"win32\" | \"linux\" | \"darwin\" | \"ios\" | \"android\" | \"uwp\" {\r\n return process.platform as any;\r\n }\r\n}\r\n\r\n/** Well known directories that may be used by the application.\r\n * @public\r\n */\r\nexport class KnownLocations {\r\n\r\n /** The directory where the imodeljs-native assets are stored. */\r\n public static get nativeAssetsDir(): LocalDirName {\r\n return IModelNative.platform.DgnDb.getAssetsDir();\r\n }\r\n\r\n /** The directory where the core-backend assets are stored. */\r\n public static get packageAssetsDir(): LocalDirName {\r\n return join(__dirname, \"assets\");\r\n }\r\n\r\n /** The temporary directory. */\r\n public static get tmpdir(): LocalDirName {\r\n return os.tmpdir();\r\n }\r\n}\r\n\r\n/** Extend this class to provide custom file name resolution behavior.\r\n * @note Only `tryResolveKey` and/or `tryResolveFileName` need to be overridden as the implementations of `resolveKey` and `resolveFileName` work for most purposes.\r\n * @see [[IModelHost.snapshotFileNameResolver]]\r\n * @public\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. When opening a snapshot by file name, ensure to pass already resolved path. Using a key to open a snapshot is now deprecated.\r\n */\r\nexport abstract class FileNameResolver {\r\n /** Resolve a file name from the specified key.\r\n * @param _fileKey The key that identifies the file name in a `Map` or other similar data structure.\r\n * @returns The resolved file name or `undefined` if not found.\r\n */\r\n public tryResolveKey(_fileKey: string): string | undefined { return undefined; }\r\n /** Resolve a file name from the specified key.\r\n * @param fileKey The key that identifies the file name in a `Map` or other similar data structure.\r\n * @returns The resolved file name.\r\n * @throws [[IModelError]] if not found.\r\n */\r\n public resolveKey(fileKey: string): string {\r\n const resolvedFileName: string | undefined = this.tryResolveKey(fileKey);\r\n if (undefined === resolvedFileName) {\r\n throw new IModelError(IModelStatus.NotFound, `${fileKey} not resolved`);\r\n }\r\n return resolvedFileName;\r\n }\r\n /** Resolve the input file name, which may be a partial name, into a full path file name.\r\n * @param inFileName The partial file name.\r\n * @returns The resolved full path file name or `undefined` if not found.\r\n */\r\n public tryResolveFileName(inFileName: string): string | undefined { return inFileName; }\r\n /** Resolve the input file name, which may be a partial name, into a full path file name.\r\n * @param inFileName The partial file name.\r\n * @returns The resolved full path file name.\r\n * @throws [[IModelError]] if not found.\r\n */\r\n public resolveFileName(inFileName: string): string {\r\n const resolvedFileName: string | undefined = this.tryResolveFileName(inFileName);\r\n if (undefined === resolvedFileName) {\r\n throw new IModelError(IModelStatus.NotFound, `${inFileName} not resolved`);\r\n }\r\n return resolvedFileName;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"IModelHost.js","sourceRoot":"","sources":["../../src/IModelHost.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module IModelHost\r\n */\r\n\r\n// To avoid circular load errors, the \"Element\" classes must be loaded before IModelHost.\r\nimport \"./IModelDb\"; // DO NOT REMOVE OR MOVE THIS LINE!\r\n\r\nimport { IModelNative, loadNativePlatform } from \"./internal/NativePlatform\";\r\nimport * as os from \"node:os\";\r\nimport { NativeLibrary } from \"@bentley/imodeljs-native\";\r\nimport { AccessToken, assert, BeEvent, BentleyStatus, DbResult, Guid, GuidString, IModelStatus, Logger, Mutable, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport { AuthorizationClient, IModelError, ITwinSettingsError, LocalDirName, SessionProps } from \"@itwin/core-common\";\r\nimport { AzureServerStorage, AzureServerStorageConfig, BlobServiceClientWrapper } from \"@itwin/object-storage-azure\";\r\nimport { BlobServiceClient, StorageSharedKeyCredential } from \"@azure/storage-blob\";\r\nimport type { ServerStorage } from \"@itwin/object-storage-core\";\r\nimport { BackendHubAccess, CreateNewIModelProps } from \"./BackendHubAccess\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { BisCoreSchema } from \"./BisCoreSchema\";\r\nimport { BriefcaseManager } from \"./BriefcaseManager\";\r\nimport { CloudSqlite } from \"./CloudSqlite\";\r\nimport { FunctionalSchema } from \"./domains/FunctionalSchema\";\r\nimport { GenericSchema } from \"./domains/GenericSchema\";\r\nimport { EditTxn } from \"./EditTxn\";\r\nimport { GeoCoordConfig } from \"./GeoCoordConfig\";\r\nimport { IModelJsFs } from \"./IModelJsFs\";\r\nimport { DevToolsRpcImpl } from \"./rpc-impl/DevToolsRpcImpl\";\r\nimport { IModelReadRpcImpl } from \"./rpc-impl/IModelReadRpcImpl\";\r\nimport { IModelTileRpcImpl } from \"./rpc-impl/IModelTileRpcImpl\";\r\nimport { SnapshotIModelRpcImpl } from \"./rpc-impl/SnapshotIModelRpcImpl\";\r\nimport { initializeRpcBackend } from \"./RpcBackend\";\r\nimport { TileStorage } from \"./TileStorage\";\r\nimport { type Setting, SettingsContainer, SettingsDictionary, SettingsPriority } from \"./workspace/Settings\";\r\nimport { settingsWorkspaceDbName } from \"./workspace/SettingsDb\";\r\nimport { SettingsContainers, SettingsEditor } from \"./workspace/SettingsEditor\";\r\nimport { SettingsSchemas } from \"./workspace/SettingsSchemas\";\r\nimport { Workspace, WorkspaceDbLoadError, WorkspaceDbSettingsProps, WorkspaceOpts } from \"./workspace/Workspace\";\r\nimport { join, normalize as normalizeDir } from \"path\";\r\nimport { constructWorkspace, OwnedWorkspace, throwWorkspaceDbLoadErrors } from \"./internal/workspace/WorkspaceImpl\";\r\nimport { SettingsImpl } from \"./internal/workspace/SettingsImpl\";\r\nimport { constructSettingsSchemas } from \"./internal/workspace/SettingsSchemasImpl\";\r\nimport { _getHubAccess, _hubAccess, _setHubAccess } from \"./internal/Symbols\";\r\n\r\nconst loggerCategory = BackendLoggerCategory.IModelHost;\r\n\r\n// cspell:ignore nodereport fatalerror apicall alicloud rpcs\r\n\r\n/** @internal */\r\nexport interface CrashReportingConfigNameValuePair {\r\n name: string;\r\n value: string;\r\n}\r\n\r\n/** Configuration of the crash-reporting system.\r\n * @internal\r\n */\r\nexport interface CrashReportingConfig {\r\n /** The directory to which *.dmp and/or iModelJsNativeCrash*.properties.txt files are written. This directory will be created if it does not already exist. */\r\n crashDir: string;\r\n /** max # .dmp files that may exist in crashDir. The default is 50. */\r\n maxDumpsInDir?: number;\r\n /** Enable crash-dumps? If so, .dmp and .properties.txt files will be generated and written to crashDir in the event of an unhandled native-code exception. If not, only .properties.txt files will be written. The default is false. */\r\n enableCrashDumps?: boolean;\r\n /** If enableCrashDumps is true, do you want a full-memory dump? Defaults to false. */\r\n wantFullMemoryDumps?: boolean;\r\n /** Enable Node.js crash reporting? If so, report files will be generated in the event of an unhandled exception or fatal error and written to crashDir. The default is false. */\r\n enableNodeReport?: boolean;\r\n /** Additional name, value pairs to write to iModelJsNativeCrash*.properties.txt file in the event of a crash. */\r\n params?: CrashReportingConfigNameValuePair[];\r\n /** Run this .js file to process .dmp and Node.js crash reporting .json files in the event of a crash.\r\n * This script will be executed with a single command-line parameter: the name of the dump or Node.js report file.\r\n * In the case of a dump file, there will be a second file with the same basename and the extension \".properties.txt\".\r\n * Since it runs in a separate process, this script will have no access to the Javascript\r\n * context of the exiting backend. No default.\r\n */\r\n dumpProcessorScriptFileName?: string;\r\n /** Upload crash dump and node-reports to Bentley's crash-reporting service? Defaults to false */\r\n uploadToBentley?: boolean;\r\n}\r\n\r\n/** @beta */\r\nexport interface AzureBlobStorageCredentials {\r\n account: string;\r\n accessKey: string;\r\n baseUrl?: string;\r\n}\r\n\r\n/** Controls how iModel writes through the implicit transaction are enforced.\r\n *\r\n * Allowed values:\r\n * - \"allow\": preserve pre-version 5.8.0 behavior for backwards compatibility.\r\n * - \"log\": allow the operation but log each implicit write as an error case.\r\n * - \"throw\": reject writes through the implicit transaction and require explicit EditTxns.\r\n * @beta\r\n */\r\nexport type ImplicitWriteEnforcement = \"allow\" | \"log\" | \"throw\";\r\n\r\n/**\r\n * Options for [[IModelHost.startup]]\r\n * @public\r\n */\r\nexport interface IModelHostOptions {\r\n /**\r\n * The name of the *Profile* subdirectory of [[cacheDir]] for this process. If not present, \"default\" is used.\r\n * @see [[IModelHost.profileName]]\r\n * @beta\r\n */\r\n profileName?: string;\r\n\r\n /**\r\n * Root of the directory holding all the files that iTwin.js caches\r\n * - If not specified at startup a platform specific default is used -\r\n * - Windows: $(HOMEDIR)/AppData/Local/iModelJs/\r\n * - Mac/iOS: $(HOMEDIR)/Library/Caches/iModelJs/\r\n * - Linux: $(HOMEDIR)/.cache/iModelJs/\r\n * where $(HOMEDIR) is documented [here](https://nodejs.org/api/os.html#os_os_homedir)\r\n * - if specified, ensure it is set to a folder with read/write access.\r\n * @see [[IModelHost.cacheDir]] for the value it's set to after startup\r\n */\r\n cacheDir?: LocalDirName;\r\n\r\n /** The directory where application assets are found. */\r\n appAssetsDir?: LocalDirName;\r\n\r\n /**\r\n * Options for creating the [[IModelHost.appWorkspace]]\r\n * @beta\r\n */\r\n workspace?: WorkspaceOpts;\r\n\r\n /**\r\n * The kind of iModel hub server to use.\r\n */\r\n hubAccess?: BackendHubAccess;\r\n\r\n /** The Azure blob storage credentials to use for the tile cache service. If omitted and no external service implementation is provided, a local cache will be used.\r\n * @beta\r\n */\r\n tileCacheAzureCredentials?: AzureBlobStorageCredentials;\r\n\r\n /**\r\n * @beta\r\n * @note A reference implementation is set for AzureServerStorage from @itwin/object-storage-azure if [[tileCacheAzureCredentials]] property is set. To supply a different implementation for any service provider (such as AWS),\r\n * set this property with a custom ServerStorage.\r\n */\r\n tileCacheStorage?: ServerStorage;\r\n\r\n /** The maximum size in bytes to which a local sqlite database used for caching tiles can grow before it is purged of least-recently-used tiles.\r\n * The local cache is used only if an external cache has not been configured via [[tileCacheStorage]], and [[tileCacheAzureCredentials]].\r\n * Defaults to 1 GB. Must be an unsigned integer. A value of zero disables the local cache entirely.\r\n * @beta\r\n */\r\n maxTileCacheDbSize?: number;\r\n\r\n /** Whether to restrict tile cache URLs by client IP address (if available).\r\n * @beta\r\n */\r\n restrictTileUrlsByClientIp?: boolean;\r\n\r\n /** Whether to enable OpenTelemetry tracing.\r\n * Defaults to `false`.\r\n */\r\n enableOpenTelemetry?: boolean;\r\n\r\n /** Whether to compress cached tiles.\r\n * Defaults to `true`.\r\n */\r\n compressCachedTiles?: boolean;\r\n\r\n /** The time, in milliseconds, for which [IModelTileRpcInterface.requestTileTreeProps]($common) should wait before returning a \"pending\" status.\r\n * @internal\r\n */\r\n tileTreeRequestTimeout?: number;\r\n\r\n /** The time, in milliseconds, for which [IModelTileRpcInterface.requestTileContent]($common) should wait before returning a \"pending\" status.\r\n * @internal\r\n */\r\n tileContentRequestTimeout?: number;\r\n\r\n /** The backend will log when a tile took longer to load than this threshold in seconds.\r\n * @internal\r\n */\r\n logTileLoadTimeThreshold?: number;\r\n\r\n /** The backend will log when a tile is loaded with a size in bytes above this threshold.\r\n * @internal\r\n */\r\n logTileSizeThreshold?: number;\r\n\r\n /** Crash-reporting configuration\r\n * @internal\r\n */\r\n crashReportingConfig?: CrashReportingConfig;\r\n\r\n /** The AuthorizationClient used to obtain [AccessToken]($bentley)s. */\r\n authorizationClient?: AuthorizationClient;\r\n\r\n /**\r\n * Automatically enable shared channel when opening iModels for read/write (see [Working With Channels]($docs/learning/backend/Channel.md)).\r\n * If not present, defaults to `true` for backwards compatibility. This means that the shared channel may be edited by default. Generally\r\n * that is undesirable because it allows applications to \"accidentally\" modify data it shouldn't be allowed to modify. Unfortunately the\r\n * previous versions of iTwin.js allowed it so this is necessary so they won't break.\r\n * Will be changed to default to `false` in 5.0.\r\n */\r\n allowSharedChannel?: boolean;\r\n\r\n /**\r\n * Setting this to true will revert to the previous behavior of using the native side for all CRUD operations.\r\n * While set to false, the getElement(), getModel() and getAspect() functions will use a thinned down native workflow to read the entities from the database.\r\n * This workflow performs work previously done on the native side in the TS side, resulting in performance improvements, if errors are detected,\r\n * this option can be set to true to revert to old workflow.\r\n */\r\n disableThinnedNativeInstanceWorkflow?: boolean;\r\n\r\n /**\r\n * Configuration controlling whether to disable the creation of restore points during pull/merge operations.\r\n * @beta\r\n */\r\n disableRestorePointOnPullMerge?: true;\r\n /**\r\n * Configuration controlling whether incremental schema loading is enabled or disabled.\r\n * @beta\r\n */\r\n incrementalSchemaLoading?: \"enabled\" | \"disabled\";\r\n /**\r\n * Configuration controlling whether to use semantic rebase or not.\r\n * @beta\r\n */\r\n useSemanticRebase?: boolean;\r\n\r\n /**\r\n * Controls how writes through the implicit transaction are enforced.\r\n * See [[ImplicitWriteEnforcement]] for the allowed values.\r\n * Defaults to \"allow\" for backwards compatibility.\r\n * @beta\r\n */\r\n implicitWriteEnforcement?: ImplicitWriteEnforcement;\r\n}\r\n\r\n/** Configuration of core-backend.\r\n * @public\r\n */\r\nexport class IModelHostConfiguration implements IModelHostOptions {\r\n public static defaultTileRequestTimeout = 20 * 1000;\r\n public static defaultLogTileLoadTimeThreshold = 40;\r\n public static defaultLogTileSizeThreshold = 20 * 1000000;\r\n /** @internal */\r\n public static defaultMaxTileCacheDbSize = 1024 * 1024 * 1024;\r\n public appAssetsDir?: LocalDirName;\r\n public cacheDir?: LocalDirName;\r\n\r\n /** @beta */\r\n public workspace?: WorkspaceOpts;\r\n public hubAccess?: BackendHubAccess;\r\n /** The AuthorizationClient used to obtain [AccessToken]($bentley)s. */\r\n public authorizationClient?: AuthorizationClient;\r\n /** @beta */\r\n public restrictTileUrlsByClientIp?: boolean;\r\n public compressCachedTiles?: boolean;\r\n /** @beta */\r\n public tileCacheAzureCredentials?: AzureBlobStorageCredentials;\r\n /** @internal */\r\n public tileTreeRequestTimeout = IModelHostConfiguration.defaultTileRequestTimeout;\r\n /** @internal */\r\n public tileContentRequestTimeout = IModelHostConfiguration.defaultTileRequestTimeout;\r\n /** @internal */\r\n public logTileLoadTimeThreshold = IModelHostConfiguration.defaultLogTileLoadTimeThreshold;\r\n /** @internal */\r\n public logTileSizeThreshold = IModelHostConfiguration.defaultLogTileSizeThreshold;\r\n /** @internal */\r\n public crashReportingConfig?: CrashReportingConfig;\r\n /**\r\n * Configuration controlling whether to use the thinned down native instance functions for element, model, and aspect CRUD operations\r\n * or use the previous behavior of using the native side for all CRUD operations. Set to true to revert to the previous behavior.\r\n * @beta\r\n */\r\n public disableThinnedNativeInstanceWorkflow?: boolean;\r\n\r\n /**\r\n * Configuration controlling whether to disable the creation of restore points during pull/merge operations.\r\n * @beta\r\n */\r\n public disableRestorePointOnPullMerge?: true;\r\n /**\r\n * Configuration controlling whether incremental schema loading is disabled.\r\n * Default is \"disabled\" at the moment to preserve existing behavior.\r\n * @beta\r\n */\r\n public incrementalSchemaLoading: \"enabled\" | \"disabled\" = \"disabled\";\r\n /**\r\n * Configuration controlling whether to use semantic rebase or not. By default it is undefined meaning semantic rebase is not used.\r\n * @beta\r\n */\r\n public useSemanticRebase?: boolean;\r\n /**\r\n * Controls how writes through the implicit transaction are enforced.\r\n * See [[IModelHostOptions.implicitWriteEnforcement]] for the meaning of each allowed value.\r\n * @beta\r\n */\r\n public implicitWriteEnforcement: ImplicitWriteEnforcement = \"allow\";\r\n}\r\n\r\n/**\r\n * Settings for `IModelHost.appWorkspace`.\r\n * @note this includes the default dictionary from the SettingsSpecRegistry\r\n */\r\nclass ApplicationSettings extends SettingsImpl {\r\n private _remove?: VoidFunction;\r\n protected override verifyPriority(priority: SettingsPriority) {\r\n if (priority > SettingsPriority.application) // only application or lower may appear in ApplicationSettings\r\n throw new Error(\"Use IModelSettings\");\r\n }\r\n private updateDefaults() {\r\n const defaults: SettingsContainer = {};\r\n for (const [schemaName, val] of IModelHost.settingsSchemas.settingDefs) {\r\n if (val.default)\r\n defaults[schemaName] = val.default;\r\n }\r\n this.addDictionary({ name: \"_default_\", priority: 0 }, defaults);\r\n }\r\n\r\n public constructor() {\r\n super();\r\n this._remove = IModelHost.settingsSchemas.onSchemaChanged.addListener(() => this.updateDefaults());\r\n this.updateDefaults();\r\n }\r\n\r\n public override close() {\r\n if (this._remove) {\r\n this._remove();\r\n this._remove = undefined;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Settings for an iTwin. May only include settings priority for iTwin and organization.\r\n */\r\nclass ITwinWorkspaceSettings extends SettingsImpl {\r\n protected override verifyPriority(priority: SettingsPriority) {\r\n if (priority <= SettingsPriority.application)\r\n ITwinSettingsError.throwError(\"invalid-priority\", { message: `Settings with priority ${priority} cannot be added to an iTwin workspace.` });\r\n if (priority > SettingsPriority.iTwin)\r\n ITwinSettingsError.throwError(\"invalid-priority\", { message: `Settings with priority ${priority} cannot be added to an iTwin workspace.` });\r\n }\r\n\r\n public override * getSettingEntries<T extends Setting>(name: string): Iterable<{ value: T, dictionary: SettingsDictionary }> {\r\n yield* super.getSettingEntries(name);\r\n yield* IModelHost.appWorkspace.settings.getSettingEntries(name);\r\n }\r\n}\r\n\r\nconst definedInStartup = <T>(obj: T | undefined): T => {\r\n if (obj === undefined)\r\n throw new Error(\"IModelHost.startup must be called first\");\r\n return obj;\r\n};\r\n\r\n/** IModelHost initializes ($backend) and captures its configuration. A backend must call [[IModelHost.startup]] before using any backend classes.\r\n * See [the learning article]($docs/learning/backend/IModelHost.md)\r\n * @public\r\n */\r\nexport class IModelHost {\r\n private constructor() { }\r\n\r\n /** The AuthorizationClient used to obtain [AccessToken]($bentley)s. */\r\n public static authorizationClient?: AuthorizationClient;\r\n\r\n public static backendVersion = \"\";\r\n private static _profileName: string;\r\n private static _cacheDir = \"\";\r\n private static _settingsSchemas?: SettingsSchemas;\r\n private static _appWorkspace?: OwnedWorkspace;\r\n\r\n // Omit the hubAccess field from configuration so it stays internal.\r\n public static configuration?: Omit<IModelHostOptions, \"hubAccess\">;\r\n\r\n /**\r\n * The name of the *Profile* directory (a subdirectory of \"[[cacheDir]]/profiles/\") for this process.\r\n *\r\n * The *Profile* directory is used to cache data that is specific to a type-of-usage of the iTwin.js library.\r\n * It is important that information in the profile cache be consistent but isolated across sessions (i.e.\r\n * data for a profile is maintained between runs, but each profile is completely independent and\r\n * unaffected by the presence or use of others.)\r\n * @note **Only one process at a time may be using a given profile**, and an exception will be thrown by [[startup]]\r\n * if a second process attempts to use the same profile.\r\n * @beta\r\n */\r\n public static get profileName(): string {\r\n return this._profileName;\r\n }\r\n\r\n /** The full path of the Profile directory.\r\n * @see [[profileName]]\r\n * @beta\r\n */\r\n public static get profileDir(): LocalDirName {\r\n return join(this._cacheDir, \"profiles\", this._profileName);\r\n }\r\n\r\n /** Event raised during startup to allow loading settings data */\r\n public static readonly onWorkspaceStartup = new BeEvent<() => void>();\r\n\r\n /** Event raised just after the backend IModelHost was started */\r\n public static readonly onAfterStartup = new BeEvent<() => void>();\r\n\r\n /** Event raised just before the backend IModelHost is to be shut down */\r\n public static readonly onBeforeShutdown = new BeEvent<() => void>();\r\n\r\n /** @internal */\r\n public static readonly session: Mutable<SessionProps> = { applicationId: \"2686\", applicationVersion: \"1.0.0\", sessionId: \"\" };\r\n\r\n /** A uniqueId for this session */\r\n public static get sessionId() { return this.session.sessionId; }\r\n public static set sessionId(id: GuidString) { this.session.sessionId = id; }\r\n\r\n /** The Id of this application - needs to be set only if it is an agent application. The applicationId will otherwise originate at the frontend. */\r\n public static get applicationId() { return this.session.applicationId; }\r\n public static set applicationId(id: string) { this.session.applicationId = id; }\r\n\r\n /** The version of this application - needs to be set if is an agent application. The applicationVersion will otherwise originate at the frontend. */\r\n public static get applicationVersion() { return this.session.applicationVersion; }\r\n public static set applicationVersion(version: string) { this.session.applicationVersion = version; }\r\n\r\n /** A string that can identify the current user to other users when collaborating. */\r\n public static userMoniker = \"unknown\";\r\n\r\n /** Root directory holding files that iTwin.js caches */\r\n public static get cacheDir(): LocalDirName { return this._cacheDir; }\r\n\r\n /** The application [[Workspace]] for this `IModelHost`\r\n * @note this `Workspace` only holds [[WorkspaceContainer]]s and [[Settings]] scoped to the currently loaded application(s).\r\n * All organization, iTwin, and iModel based containers or settings must be accessed through [[IModelDb.workspace]] and\r\n * attempting to add them to this Workspace will fail.\r\n * @beta\r\n */\r\n public static get appWorkspace(): Workspace { return definedInStartup(this._appWorkspace); }\r\n\r\n /** Obtain the [[Workspace]] for an iTwin by discovering its settings containers.\r\n * Named dictionary resources from the account iTwin container are loaded at [[SettingsPriority.organization]];\r\n * resources from the requested iTwin's container (when different from the account iTwin) are loaded at\r\n * [[SettingsPriority.iTwin]].\r\n * @note This method requires an internet connection to discover the containers.\r\n * To use an iTwin workspace offline, use the overload that accepts [[WorkspaceDbSettingsProps]].\r\n * @note The returned workspace is caller-owned. Call `close` when finished.\r\n * @beta\r\n */\r\n public static async getITwinWorkspace(iTwinId: GuidString): Promise<OwnedWorkspace>;\r\n /** Obtain the [[Workspace]] for an iTwin.\r\n * The supplied [[WorkspaceDbSettingsProps]] are passed directly to [[Workspace.loadSettingsDictionary]].\r\n * @note You can derive these from the `settingsSources` property on a previously returned workspace.\r\n * @note The returned workspace is caller-owned. Call `close` when finished.\r\n * @beta\r\n */\r\n public static async getITwinWorkspace(props: WorkspaceDbSettingsProps | WorkspaceDbSettingsProps[]): Promise<OwnedWorkspace>;\r\n /** @internal */\r\n public static async getITwinWorkspace(args: GuidString | WorkspaceDbSettingsProps | WorkspaceDbSettingsProps[]): Promise<OwnedWorkspace> {\r\n const isITwinId = typeof args === \"string\";\r\n const workspace = constructWorkspace(new ITwinWorkspaceSettings());\r\n\r\n try {\r\n const settingsSources = isITwinId ? await SettingsContainers.getITwinSettingsSources(args) : args;\r\n if (undefined === settingsSources)\r\n return workspace;\r\n\r\n workspace.settingsSources = settingsSources;\r\n\r\n const problems: WorkspaceDbLoadError[] = [];\r\n await workspace.loadSettingsDictionary(settingsSources, problems);\r\n\r\n if (problems.length > 0) {\r\n const label = isITwinId ? `iTwin '${args}'` : \"the supplied settings workspace db properties\";\r\n throwWorkspaceDbLoadErrors(`attempting to load workspace settings for ${label}`, problems);\r\n }\r\n\r\n return workspace;\r\n } catch (error) {\r\n workspace.close();\r\n throw error;\r\n }\r\n }\r\n\r\n /** Save a named [[SettingsDictionary]] to the iTwin's settings container.\r\n * If no iTwin settings container exists for `iTwinId`, one is created.\r\n * The dictionary is stored as a named resource in the container's default [[WorkspaceDb]], where `name` is used as the resource name.\r\n * @param iTwinId The iTwin whose settings container should be updated.\r\n * @param name The name of the dictionary, used as the resource name in the [[WorkspaceDb]].\r\n * @param settings The settings key-value pairs to store.\r\n * @note uses [[IModelHost.userMoniker]] as the user name for acquiring the write lock on the settings container.\r\n * @beta\r\n */\r\n public static async saveSettingDictionary(iTwinId: GuidString, name: string, settings: SettingsContainer): Promise<void> {\r\n const { editor, container } = await SettingsEditor.constructForITwin(iTwinId);\r\n try {\r\n await container.withEditableDb(this.userMoniker, (db) => {\r\n db.updateSettingsResource(settings, name);\r\n }, { dbName: settingsWorkspaceDbName });\r\n } finally {\r\n editor.close();\r\n }\r\n }\r\n\r\n /** Delete a named [[SettingsDictionary]] from the iTwin's settings container.\r\n * If no iTwin settings container exists, this method does nothing.\r\n * @param iTwinId The iTwin whose settings container should be updated.\r\n * @param name The name of the dictionary (resource name) to delete.\r\n * @note uses [[IModelHost.userMoniker]] as the user name for acquiring the write lock on the settings container.\r\n * @beta\r\n */\r\n public static async deleteSettingDictionary(iTwinId: GuidString, name: string): Promise<void> {\r\n const settingsEditor = await SettingsEditor.getForITwin(iTwinId);\r\n if (undefined === settingsEditor)\r\n return;\r\n\r\n const { editor, container } = settingsEditor;\r\n try {\r\n await container.withEditableDb(this.userMoniker, (db) => {\r\n db.removeString(name);\r\n }, { dbName: settingsWorkspaceDbName });\r\n } finally {\r\n editor.close();\r\n }\r\n }\r\n\r\n /** The registry of schemas describing the [[Setting]]s for the application session.\r\n * Applications should register their schemas via methods like [[SettingsSchemas.addGroup]].\r\n * @beta\r\n */\r\n public static get settingsSchemas(): SettingsSchemas { return definedInStartup(this._settingsSchemas); }\r\n\r\n /** The optional [[FileNameResolver]] that resolves keys and partial file names for snapshot iModels.\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. When opening a snapshot by file name, ensure to pass already resolved path. Using a key to open a snapshot is now deprecated.\r\n */\r\n public static snapshotFileNameResolver?: FileNameResolver; // eslint-disable-line @typescript-eslint/no-deprecated\r\n\r\n /** Get the current access token for this IModelHost, or a blank string if none is available.\r\n * @note for web backends, this will *always* return a blank string because the backend itself has no token (but never needs one either.)\r\n * For all IpcHosts, where this backend is servicing a single frontend, this will be the user's token. For ElectronHost, the backend\r\n * obtains the token and forwards it to the frontend.\r\n * @note accessTokens expire periodically and are automatically refreshed, if possible. Therefore tokens should not be saved, and the value\r\n * returned by this method may change over time throughout the course of a session.\r\n */\r\n public static async getAccessToken(): Promise<AccessToken> {\r\n try {\r\n return (await IModelHost.authorizationClient?.getAccessToken()) ?? \"\";\r\n } catch {\r\n return \"\";\r\n }\r\n }\r\n\r\n private static loadNative(options: IModelHostOptions) {\r\n loadNativePlatform();\r\n\r\n if (options.crashReportingConfig && options.crashReportingConfig.crashDir && !ProcessDetector.isElectronAppBackend && !ProcessDetector.isMobileAppBackend) {\r\n IModelNative.platform.setCrashReporting(options.crashReportingConfig);\r\n\r\n Logger.logTrace(loggerCategory, \"Configured crash reporting\", {\r\n enableCrashDumps: options.crashReportingConfig?.enableCrashDumps,\r\n wantFullMemoryDumps: options.crashReportingConfig?.wantFullMemoryDumps,\r\n enableNodeReport: options.crashReportingConfig?.enableNodeReport,\r\n uploadToBentley: options.crashReportingConfig?.uploadToBentley,\r\n });\r\n\r\n if (options.crashReportingConfig.enableNodeReport) {\r\n if (process.report !== undefined) {\r\n process.report.reportOnFatalError = true;\r\n process.report.reportOnUncaughtException = true;\r\n process.report.directory = options.crashReportingConfig.crashDir;\r\n Logger.logTrace(loggerCategory, \"Configured Node.js crash reporting\");\r\n } else {\r\n Logger.logWarning(loggerCategory, \"Unable to configure Node.js crash reporting\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public static tileStorage?: TileStorage;\r\n\r\n private static _hubAccess?: BackendHubAccess;\r\n /** @internal */\r\n public static [_setHubAccess](hubAccess: BackendHubAccess | undefined) { this._hubAccess = hubAccess; }\r\n\r\n /** get the current hubAccess, if present.\r\n * @internal\r\n */\r\n public static [_getHubAccess](): BackendHubAccess | undefined { return this._hubAccess; }\r\n\r\n /** Provides access to the IModelHub for this IModelHost\r\n * @internal\r\n * @note If [[IModelHostOptions.hubAccess]] was undefined when initializing this class, accessing this property will throw an error.\r\n * To determine whether one is present, use [[_getHubAccess]].\r\n */\r\n public static get [_hubAccess](): BackendHubAccess {\r\n if (IModelHost._hubAccess === undefined)\r\n throw new IModelError(IModelStatus.BadRequest, \"No BackendHubAccess supplied in IModelHostOptions\");\r\n return IModelHost._hubAccess;\r\n }\r\n\r\n private static initializeWorkspace(configuration: IModelHostOptions) {\r\n const settingAssets = join(KnownLocations.packageAssetsDir, \"Settings\");\r\n this._settingsSchemas = constructSettingsSchemas();\r\n this._settingsSchemas.addDirectory(join(settingAssets, \"Schemas\"));\r\n this._appWorkspace = constructWorkspace(new ApplicationSettings(), configuration.workspace);\r\n\r\n // Create the CloudCache for Workspaces. This will fail if another process is already using the same profile.\r\n try {\r\n this.appWorkspace.getCloudCache();\r\n } catch (e: any) {\r\n throw (e.errorNumber === DbResult.BE_SQLITE_BUSY) ? new IModelError(DbResult.BE_SQLITE_BUSY, `Profile [${this.profileDir}] is already in use by another process`) : e;\r\n }\r\n\r\n this.appWorkspace.settings.addDirectory(settingAssets, SettingsPriority.defaults);\r\n\r\n GeoCoordConfig.onStartup();\r\n // allow applications to load their default settings\r\n this.onWorkspaceStartup.raiseEvent();\r\n }\r\n\r\n private static _isValid = false;\r\n\r\n /** true between a successful call to [[startup]] and before [[shutdown]] */\r\n public static get isValid() {\r\n return IModelHost._isValid;\r\n }\r\n\r\n /** This method must be called before any iTwin.js services are used.\r\n * @param options Host configuration data.\r\n * Raises [[onAfterStartup]].\r\n * @see [[shutdown]].\r\n */\r\n public static async startup(options?: IModelHostOptions): Promise<void> {\r\n if (this._isValid)\r\n return; // we're already initialized\r\n this._isValid = true;\r\n\r\n options = options ?? {};\r\n if (this.sessionId === \"\")\r\n this.sessionId = Guid.createValue();\r\n\r\n this.authorizationClient = options.authorizationClient;\r\n\r\n this.backendVersion = require(\"../../package.json\").version; // eslint-disable-line @typescript-eslint/no-require-imports\r\n initializeRpcBackend(options.enableOpenTelemetry);\r\n\r\n this.loadNative(options);\r\n this.setupCacheDir(options);\r\n this.initializeWorkspace(options);\r\n EditTxn.implicitWriteEnforcement = options.implicitWriteEnforcement ?? \"allow\";\r\n BriefcaseManager.initialize(join(this._cacheDir, \"imodels\"));\r\n\r\n [\r\n IModelReadRpcImpl,\r\n IModelTileRpcImpl,\r\n SnapshotIModelRpcImpl, // eslint-disable-line @typescript-eslint/no-deprecated\r\n DevToolsRpcImpl,\r\n ].forEach((rpc) => rpc.register()); // register all of the RPC implementations\r\n\r\n [\r\n BisCoreSchema,\r\n GenericSchema,\r\n FunctionalSchema,\r\n ].forEach((schema) => schema.registerSchema()); // register all of the schemas\r\n\r\n const { hubAccess, ...otherOptions } = options;\r\n if (undefined !== hubAccess)\r\n this._hubAccess = hubAccess;\r\n\r\n this.configuration = otherOptions;\r\n this.setupTileCache();\r\n\r\n process.once(\"beforeExit\", IModelHost.shutdown);\r\n this.onAfterStartup.raiseEvent();\r\n }\r\n\r\n private static setupCacheDir(configuration: IModelHostOptions) {\r\n this._cacheDir = normalizeDir(configuration.cacheDir ?? NativeLibrary.defaultCacheDir);\r\n IModelJsFs.recursiveMkDirSync(this._cacheDir);\r\n\r\n this._profileName = configuration.profileName ?? \"default\";\r\n Logger.logInfo(loggerCategory, `cacheDir: [${this.cacheDir}], profileDir: [${this.profileDir}]`);\r\n }\r\n\r\n /** This method must be called when an iTwin.js host is shut down. Raises [[onBeforeShutdown]] */\r\n public static async shutdown(this: void): Promise<void> {\r\n // Note: This method is set as a node listener where `this` is unbound. Call private method to\r\n // ensure `this` is correct. Don't combine these methods.\r\n return IModelHost.doShutdown();\r\n }\r\n\r\n /**\r\n * Create a new iModel.\r\n * @returns the Guid of the newly created iModel.\r\n * @throws [IModelError]($common) in case of errors.\r\n * @note If [[IModelHostOptions.hubAccess]] was undefined in the call to [[startup]], this function will throw an error.\r\n */\r\n public static async createNewIModel(arg: CreateNewIModelProps): Promise<GuidString> {\r\n return this[_hubAccess].createNewIModel(arg);\r\n }\r\n\r\n private static async doShutdown() {\r\n if (!this._isValid)\r\n return;\r\n\r\n this._isValid = false;\r\n this.onBeforeShutdown.raiseEvent();\r\n\r\n this.configuration = undefined;\r\n EditTxn.implicitWriteEnforcement = \"allow\";\r\n this.tileStorage = undefined;\r\n\r\n this._appWorkspace?.close();\r\n this._appWorkspace = undefined;\r\n this._settingsSchemas = undefined;\r\n\r\n CloudSqlite.CloudCaches.destroy();\r\n process.removeListener(\"beforeExit\", IModelHost.shutdown);\r\n }\r\n\r\n /**\r\n * Add or update a property that should be included in a crash report.\r\n * @internal\r\n */\r\n public static setCrashReportProperty(name: string, value: string): void {\r\n IModelNative.platform.setCrashReportProperty(name, value);\r\n }\r\n\r\n /**\r\n * Remove a previously defined property so that will not be included in a crash report.\r\n * @internal\r\n */\r\n public static removeCrashReportProperty(name: string): void {\r\n IModelNative.platform.setCrashReportProperty(name, undefined);\r\n }\r\n\r\n /**\r\n * Get all properties that will be included in a crash report.\r\n * @internal\r\n */\r\n public static getCrashReportProperties(): CrashReportingConfigNameValuePair[] {\r\n return IModelNative.platform.getCrashReportProperties();\r\n }\r\n\r\n /** The directory where application assets may be found */\r\n public static get appAssetsDir(): string | undefined {\r\n return undefined !== IModelHost.configuration ? IModelHost.configuration.appAssetsDir : undefined;\r\n }\r\n\r\n /** The time, in milliseconds, for which IModelTileRpcInterface.requestTileTreeProps should wait before returning a \"pending\" status.\r\n * @internal\r\n */\r\n public static get tileTreeRequestTimeout(): number {\r\n return IModelHost.configuration?.tileTreeRequestTimeout ?? IModelHostConfiguration.defaultTileRequestTimeout;\r\n }\r\n /** The time, in milliseconds, for which IModelTileRpcInterface.requestTileContent should wait before returning a \"pending\" status.\r\n * @internal\r\n */\r\n public static get tileContentRequestTimeout(): number {\r\n return IModelHost.configuration?.tileContentRequestTimeout ?? IModelHostConfiguration.defaultTileRequestTimeout;\r\n }\r\n\r\n /** The backend will log when a tile took longer to load than this threshold in seconds. */\r\n public static get logTileLoadTimeThreshold(): number {\r\n return IModelHost.configuration?.logTileLoadTimeThreshold ?? IModelHostConfiguration.defaultLogTileLoadTimeThreshold;\r\n }\r\n /** The backend will log when a tile is loaded with a size in bytes above this threshold. */\r\n public static get logTileSizeThreshold(): number {\r\n return IModelHost.configuration?.logTileSizeThreshold ?? IModelHostConfiguration.defaultLogTileSizeThreshold;\r\n }\r\n\r\n /** Whether external tile caching is active.\r\n * @internal\r\n */\r\n public static get usingExternalTileCache(): boolean {\r\n return undefined !== IModelHost.tileStorage;\r\n }\r\n\r\n /** Whether to restrict tile cache URLs by client IP address.\r\n * @internal\r\n */\r\n public static get restrictTileUrlsByClientIp(): boolean {\r\n return undefined !== IModelHost.configuration && (IModelHost.configuration.restrictTileUrlsByClientIp ? true : false);\r\n }\r\n\r\n /** Whether to compress cached tiles.\r\n * @internal\r\n */\r\n public static get compressCachedTiles(): boolean {\r\n return false !== IModelHost.configuration?.compressCachedTiles;\r\n }\r\n\r\n /**\r\n * Whether to use semantic rebase or not.\r\n * @internal\r\n */\r\n public static get useSemanticRebase(): boolean {\r\n return undefined !== IModelHost.configuration && (IModelHost.configuration.useSemanticRebase ? true : false);\r\n }\r\n\r\n private static setupTileCache() {\r\n assert(undefined !== IModelHost.configuration);\r\n const config = IModelHost.configuration;\r\n const storage = config.tileCacheStorage;\r\n const credentials = config.tileCacheAzureCredentials;\r\n\r\n if (!storage && !credentials) {\r\n IModelNative.platform.setMaxTileCacheSize(config.maxTileCacheDbSize ?? IModelHostConfiguration.defaultMaxTileCacheDbSize);\r\n return;\r\n }\r\n\r\n IModelNative.platform.setMaxTileCacheSize(0);\r\n if (credentials) {\r\n if (storage)\r\n throw new IModelError(BentleyStatus.ERROR, \"Cannot use both Azure and custom cloud storage providers for tile cache.\");\r\n this.setupAzureTileCache(credentials);\r\n }\r\n if (storage)\r\n IModelHost.tileStorage = new TileStorage(storage);\r\n }\r\n\r\n private static setupAzureTileCache(credentials: AzureBlobStorageCredentials) {\r\n const storageConfig: AzureServerStorageConfig = {\r\n accountName: credentials.account,\r\n accountKey: credentials.accessKey,\r\n baseUrl: credentials.baseUrl ?? `https://${credentials.account}.blob.core.windows.net`,\r\n }\r\n const blobServiceClient = new BlobServiceClient(\r\n storageConfig.baseUrl,\r\n new StorageSharedKeyCredential(storageConfig.accountName, storageConfig.accountKey),\r\n );\r\n const azureStorage: ServerStorage = new AzureServerStorage(storageConfig, new BlobServiceClientWrapper(blobServiceClient))\r\n IModelHost.tileStorage = new TileStorage(azureStorage);\r\n }\r\n\r\n /** @internal */\r\n public static computeSchemaChecksum(arg: { schemaXmlPath: string, referencePaths: string[], exactMatch?: boolean }): string {\r\n return IModelNative.platform.computeSchemaChecksum(arg);\r\n }\r\n}\r\n\r\n/** Information about the platform on which the app is running.\r\n * @public\r\n */\r\nexport class Platform {\r\n /** Get the name of the platform. */\r\n public static get platformName(): \"win32\" | \"linux\" | \"darwin\" | \"ios\" | \"android\" | \"uwp\" {\r\n return process.platform as any;\r\n }\r\n}\r\n\r\n/** Well known directories that may be used by the application.\r\n * @public\r\n */\r\nexport class KnownLocations {\r\n\r\n /** The directory where the imodeljs-native assets are stored. */\r\n public static get nativeAssetsDir(): LocalDirName {\r\n return IModelNative.platform.DgnDb.getAssetsDir();\r\n }\r\n\r\n /** The directory where the core-backend assets are stored. */\r\n public static get packageAssetsDir(): LocalDirName {\r\n return join(__dirname, \"assets\");\r\n }\r\n\r\n /** The temporary directory. */\r\n public static get tmpdir(): LocalDirName {\r\n return os.tmpdir();\r\n }\r\n}\r\n\r\n/** Extend this class to provide custom file name resolution behavior.\r\n * @note Only `tryResolveKey` and/or `tryResolveFileName` need to be overridden as the implementations of `resolveKey` and `resolveFileName` work for most purposes.\r\n * @see [[IModelHost.snapshotFileNameResolver]]\r\n * @public\r\n * @deprecated in 4.10 - will not be removed until after 2026-06-13. When opening a snapshot by file name, ensure to pass already resolved path. Using a key to open a snapshot is now deprecated.\r\n */\r\nexport abstract class FileNameResolver {\r\n /** Resolve a file name from the specified key.\r\n * @param _fileKey The key that identifies the file name in a `Map` or other similar data structure.\r\n * @returns The resolved file name or `undefined` if not found.\r\n */\r\n public tryResolveKey(_fileKey: string): string | undefined { return undefined; }\r\n /** Resolve a file name from the specified key.\r\n * @param fileKey The key that identifies the file name in a `Map` or other similar data structure.\r\n * @returns The resolved file name.\r\n * @throws [[IModelError]] if not found.\r\n */\r\n public resolveKey(fileKey: string): string {\r\n const resolvedFileName: string | undefined = this.tryResolveKey(fileKey);\r\n if (undefined === resolvedFileName) {\r\n throw new IModelError(IModelStatus.NotFound, `${fileKey} not resolved`);\r\n }\r\n return resolvedFileName;\r\n }\r\n /** Resolve the input file name, which may be a partial name, into a full path file name.\r\n * @param inFileName The partial file name.\r\n * @returns The resolved full path file name or `undefined` if not found.\r\n */\r\n public tryResolveFileName(inFileName: string): string | undefined { return inFileName; }\r\n /** Resolve the input file name, which may be a partial name, into a full path file name.\r\n * @param inFileName The partial file name.\r\n * @returns The resolved full path file name.\r\n * @throws [[IModelError]] if not found.\r\n */\r\n public resolveFileName(inFileName: string): string {\r\n const resolvedFileName: string | undefined = this.tryResolveFileName(inFileName);\r\n if (undefined === resolvedFileName) {\r\n throw new IModelError(IModelStatus.NotFound, `${inFileName} not resolved`);\r\n }\r\n return resolvedFileName;\r\n }\r\n}\r\n"]}
|
package/lib/cjs/NativeHost.js
CHANGED
|
@@ -159,7 +159,7 @@ class NativeHost {
|
|
|
159
159
|
if (this._reachability !== status) {
|
|
160
160
|
this._reachability = status;
|
|
161
161
|
this.onInternetConnectivityChanged.raiseEvent(status);
|
|
162
|
-
if (core_bentley_1.ProcessDetector.isMobileAppBackend) {
|
|
162
|
+
if (core_bentley_1.ProcessDetector.isMobileAppBackend || core_bentley_1.ProcessDetector.isElectronAppBackend) {
|
|
163
163
|
// Merely referencing NativeHost from a non-native backend causes a runtime exception (even
|
|
164
164
|
// inside an if statement that checks that the backend is a mobile backend). This allows code
|
|
165
165
|
// that needs to check connectivity to do so without referencing NativeHost directly.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeHost.js","sourceRoot":"","sources":["../../src/NativeHost.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module NativeApp\r\n */\r\n\r\nimport { join } from \"path\";\r\nimport { AccessToken, assert, BeEvent, GuidString, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport {\r\n BriefcaseProps, InternetConnectivityStatus, LocalBriefcaseProps, NativeAppFunctions, nativeAppIpcStrings, NativeAppNotifications,\r\n OverriddenBy, RequestNewBriefcaseProps, StorageValue,\r\n} from \"@itwin/core-common\";\r\nimport { BriefcaseManager, RequestNewBriefcaseArg } from \"./BriefcaseManager\";\r\nimport { Downloads, ProgressFunction, ProgressStatus } from \"./CheckpointManager\";\r\nimport { IModelHost } from \"./IModelHost\";\r\nimport { IpcHandler, IpcHost, IpcHostOpts, throttleProgressCallback } from \"./IpcHost\";\r\nimport { NativeAppStorage } from \"./NativeAppStorage\";\r\nimport { CatalogIModelHandler } from \"./CatalogDb\";\r\nimport { setOnlineStatus } from \"./internal/OnlineStatus\";\r\n\r\n/**\r\n * Implementation of NativeAppFunctions\r\n */\r\nclass NativeAppHandler extends IpcHandler implements NativeAppFunctions {\r\n public get channelName() { return nativeAppIpcStrings.channelName; }\r\n\r\n public async getAccessToken(): Promise<AccessToken | undefined> {\r\n return IModelHost.authorizationClient?.getAccessToken();\r\n }\r\n\r\n public async checkInternetConnectivity(): Promise<InternetConnectivityStatus> {\r\n return NativeHost.checkInternetConnectivity();\r\n }\r\n public async overrideInternetConnectivity(by: OverriddenBy, status: InternetConnectivityStatus): Promise<void> {\r\n NativeHost.overrideInternetConnectivity(by, status);\r\n }\r\n public async acquireNewBriefcaseId(iModelId: GuidString): Promise<number> {\r\n return BriefcaseManager.acquireNewBriefcaseId({ iModelId });\r\n }\r\n public async getBriefcaseFileName(props: BriefcaseProps): Promise<string> {\r\n return BriefcaseManager.getFileName(props);\r\n }\r\n public async downloadBriefcase(request: RequestNewBriefcaseProps, reportProgress: boolean, progressInterval?: number): Promise<LocalBriefcaseProps> {\r\n const args: RequestNewBriefcaseArg = {\r\n ...request,\r\n accessToken: await this.getAccessToken(),\r\n onProgress: (_a: number, _b: number) => checkAbort(),\r\n };\r\n\r\n const checkAbort = () => {\r\n assert(undefined !== args.fileName);\r\n const job = Downloads.isInProgress(args.fileName);\r\n return (job && (job.request as any).abort === 1) ? ProgressStatus.Abort : ProgressStatus.Continue;\r\n };\r\n\r\n if (reportProgress) {\r\n const progressCallback: ProgressFunction = (loaded, total) => {\r\n IpcHost.send(`nativeApp.progress-${request.iModelId}`, { loaded, total });\r\n return checkAbort();\r\n };\r\n args.onProgress = throttleProgressCallback(progressCallback, checkAbort, progressInterval);\r\n }\r\n\r\n return BriefcaseManager.downloadBriefcase(args);\r\n }\r\n\r\n public async requestCancelDownloadBriefcase(fileName: string): Promise<boolean> {\r\n const job = Downloads.isInProgress(fileName);\r\n if (job)\r\n (job.request as any).abort = 1;\r\n return job !== undefined;\r\n }\r\n\r\n public async deleteBriefcaseFiles(fileName: string): Promise<void> {\r\n await BriefcaseManager.deleteBriefcaseFiles(fileName, await IModelHost.getAccessToken());\r\n }\r\n\r\n public async getCachedBriefcases(iModelId?: GuidString): Promise<LocalBriefcaseProps[]> {\r\n return BriefcaseManager.getCachedBriefcases(iModelId);\r\n }\r\n\r\n public async storageMgrOpen(storageId: string): Promise<string> {\r\n return NativeAppStorage.open(storageId).id;\r\n }\r\n\r\n public async storageMgrClose(storageId: string, deleteIt: boolean): Promise<void> {\r\n NativeAppStorage.find(storageId).close(deleteIt);\r\n }\r\n\r\n public async storageMgrNames(): Promise<string[]> {\r\n return NativeAppStorage.getStorageNames();\r\n }\r\n\r\n public async storageGetValueType(storageId: string, key: string): Promise<\"number\" | \"string\" | \"boolean\" | \"Uint8Array\" | \"null\" | undefined> {\r\n return NativeAppStorage.find(storageId).getValueType(key);\r\n }\r\n\r\n public async storageGet(storageId: string, key: string): Promise<StorageValue | undefined> {\r\n return NativeAppStorage.find(storageId).getData(key);\r\n }\r\n\r\n public async storageSet(storageId: string, key: string, value: StorageValue): Promise<void> {\r\n NativeAppStorage.find(storageId).setData(key, value);\r\n }\r\n\r\n public async storageRemove(storageId: string, key: string): Promise<void> {\r\n NativeAppStorage.find(storageId).removeData(key);\r\n }\r\n\r\n public async storageKeys(storageId: string): Promise<string[]> {\r\n return NativeAppStorage.find(storageId).getKeys();\r\n }\r\n\r\n public async storageRemoveAll(storageId: string): Promise<void> {\r\n NativeAppStorage.find(storageId).removeAll();\r\n }\r\n}\r\n\r\n/** Options for [[NativeHost.startup]]\r\n * @public\r\n */\r\nexport interface NativeHostOpts extends IpcHostOpts {\r\n nativeHost?: {\r\n /** Application name. Used, for example, to name the settings file. If not supplied, defaults to \"iTwinApp\". */\r\n applicationName?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Backend for desktop/mobile native applications\r\n * @public\r\n */\r\nexport class NativeHost {\r\n private static _reachability?: InternetConnectivityStatus;\r\n private static _applicationName: string;\r\n private constructor() { } // no instances - static methods only\r\n\r\n /** Event called when the internet connectivity changes, if known. */\r\n public static readonly onInternetConnectivityChanged = new BeEvent<(status: InternetConnectivityStatus) => void>();\r\n\r\n private static _appSettingsCacheDir?: string;\r\n\r\n /** Get the local cache folder for application settings */\r\n public static get appSettingsCacheDir(): string {\r\n return this._appSettingsCacheDir ??= join(IModelHost.cacheDir, \"appSettings\");\r\n }\r\n\r\n /** Send a notification to the NativeApp connected to this NativeHost. */\r\n public static notifyNativeFrontend<T extends keyof NativeAppNotifications>(methodName: T, ...args: Parameters<NativeAppNotifications[T]>) {\r\n return IpcHost.send(nativeAppIpcStrings.notifyChannel, methodName, ...args);\r\n }\r\n\r\n private static _isValid = false;\r\n public static get isValid(): boolean { return this._isValid; }\r\n public static get applicationName() { return this._applicationName; }\r\n /** Get the settings store for this NativeHost. */\r\n public static get settingsStore() {\r\n return NativeAppStorage.open(this.applicationName);\r\n }\r\n\r\n /**\r\n * Start the backend of a native app.\r\n * @note this method calls [[IpcHost.startup]] internally.\r\n */\r\n public static async startup(opt?: NativeHostOpts): Promise<void> {\r\n if (!this.isValid) {\r\n this._isValid = true;\r\n this.onInternetConnectivityChanged.addListener((status: InternetConnectivityStatus) =>\r\n NativeHost.notifyNativeFrontend(\"notifyInternetConnectivityChanged\", status));\r\n this._applicationName = opt?.nativeHost?.applicationName ?? \"iTwinApp\";\r\n }\r\n\r\n await IpcHost.startup(opt);\r\n if (IpcHost.isValid) { // for tests, we use NativeHost but don't have a frontend\r\n NativeAppHandler.register();\r\n CatalogIModelHandler.register();\r\n }\r\n }\r\n\r\n /** Shutdown native app backend. Also calls [[IpcHost.shutdown]] */\r\n public static async shutdown(): Promise<void> {\r\n this._isValid = false;\r\n this.onInternetConnectivityChanged.clear();\r\n await IpcHost.shutdown();\r\n }\r\n\r\n /** get current value of internet connectivity */\r\n public static checkInternetConnectivity(): InternetConnectivityStatus {\r\n return this._reachability ?? InternetConnectivityStatus.Online;\r\n }\r\n\r\n /**\r\n * Override internet connectivity state\r\n * @param _overridenBy who overrode the value.\r\n * @internal\r\n */\r\n public static overrideInternetConnectivity(_overridenBy: OverriddenBy, status: InternetConnectivityStatus): void {\r\n if (this._reachability !== status) {\r\n this._reachability = status;\r\n this.onInternetConnectivityChanged.raiseEvent(status);\r\n if (ProcessDetector.isMobileAppBackend) {\r\n // Merely referencing NativeHost from a non-native backend causes a runtime exception (even\r\n // inside an if statement that checks that the backend is a mobile backend). This allows code\r\n // that needs to check connectivity to do so without referencing NativeHost directly.\r\n setOnlineStatus(status === InternetConnectivityStatus.Online);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"NativeHost.js","sourceRoot":"","sources":["../../src/NativeHost.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module NativeApp\r\n */\r\n\r\nimport { join } from \"path\";\r\nimport { AccessToken, assert, BeEvent, GuidString, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport {\r\n BriefcaseProps, InternetConnectivityStatus, LocalBriefcaseProps, NativeAppFunctions, nativeAppIpcStrings, NativeAppNotifications,\r\n OverriddenBy, RequestNewBriefcaseProps, StorageValue,\r\n} from \"@itwin/core-common\";\r\nimport { BriefcaseManager, RequestNewBriefcaseArg } from \"./BriefcaseManager\";\r\nimport { Downloads, ProgressFunction, ProgressStatus } from \"./CheckpointManager\";\r\nimport { IModelHost } from \"./IModelHost\";\r\nimport { IpcHandler, IpcHost, IpcHostOpts, throttleProgressCallback } from \"./IpcHost\";\r\nimport { NativeAppStorage } from \"./NativeAppStorage\";\r\nimport { CatalogIModelHandler } from \"./CatalogDb\";\r\nimport { setOnlineStatus } from \"./internal/OnlineStatus\";\r\n\r\n/**\r\n * Implementation of NativeAppFunctions\r\n */\r\nclass NativeAppHandler extends IpcHandler implements NativeAppFunctions {\r\n public get channelName() { return nativeAppIpcStrings.channelName; }\r\n\r\n public async getAccessToken(): Promise<AccessToken | undefined> {\r\n return IModelHost.authorizationClient?.getAccessToken();\r\n }\r\n\r\n public async checkInternetConnectivity(): Promise<InternetConnectivityStatus> {\r\n return NativeHost.checkInternetConnectivity();\r\n }\r\n public async overrideInternetConnectivity(by: OverriddenBy, status: InternetConnectivityStatus): Promise<void> {\r\n NativeHost.overrideInternetConnectivity(by, status);\r\n }\r\n public async acquireNewBriefcaseId(iModelId: GuidString): Promise<number> {\r\n return BriefcaseManager.acquireNewBriefcaseId({ iModelId });\r\n }\r\n public async getBriefcaseFileName(props: BriefcaseProps): Promise<string> {\r\n return BriefcaseManager.getFileName(props);\r\n }\r\n public async downloadBriefcase(request: RequestNewBriefcaseProps, reportProgress: boolean, progressInterval?: number): Promise<LocalBriefcaseProps> {\r\n const args: RequestNewBriefcaseArg = {\r\n ...request,\r\n accessToken: await this.getAccessToken(),\r\n onProgress: (_a: number, _b: number) => checkAbort(),\r\n };\r\n\r\n const checkAbort = () => {\r\n assert(undefined !== args.fileName);\r\n const job = Downloads.isInProgress(args.fileName);\r\n return (job && (job.request as any).abort === 1) ? ProgressStatus.Abort : ProgressStatus.Continue;\r\n };\r\n\r\n if (reportProgress) {\r\n const progressCallback: ProgressFunction = (loaded, total) => {\r\n IpcHost.send(`nativeApp.progress-${request.iModelId}`, { loaded, total });\r\n return checkAbort();\r\n };\r\n args.onProgress = throttleProgressCallback(progressCallback, checkAbort, progressInterval);\r\n }\r\n\r\n return BriefcaseManager.downloadBriefcase(args);\r\n }\r\n\r\n public async requestCancelDownloadBriefcase(fileName: string): Promise<boolean> {\r\n const job = Downloads.isInProgress(fileName);\r\n if (job)\r\n (job.request as any).abort = 1;\r\n return job !== undefined;\r\n }\r\n\r\n public async deleteBriefcaseFiles(fileName: string): Promise<void> {\r\n await BriefcaseManager.deleteBriefcaseFiles(fileName, await IModelHost.getAccessToken());\r\n }\r\n\r\n public async getCachedBriefcases(iModelId?: GuidString): Promise<LocalBriefcaseProps[]> {\r\n return BriefcaseManager.getCachedBriefcases(iModelId);\r\n }\r\n\r\n public async storageMgrOpen(storageId: string): Promise<string> {\r\n return NativeAppStorage.open(storageId).id;\r\n }\r\n\r\n public async storageMgrClose(storageId: string, deleteIt: boolean): Promise<void> {\r\n NativeAppStorage.find(storageId).close(deleteIt);\r\n }\r\n\r\n public async storageMgrNames(): Promise<string[]> {\r\n return NativeAppStorage.getStorageNames();\r\n }\r\n\r\n public async storageGetValueType(storageId: string, key: string): Promise<\"number\" | \"string\" | \"boolean\" | \"Uint8Array\" | \"null\" | undefined> {\r\n return NativeAppStorage.find(storageId).getValueType(key);\r\n }\r\n\r\n public async storageGet(storageId: string, key: string): Promise<StorageValue | undefined> {\r\n return NativeAppStorage.find(storageId).getData(key);\r\n }\r\n\r\n public async storageSet(storageId: string, key: string, value: StorageValue): Promise<void> {\r\n NativeAppStorage.find(storageId).setData(key, value);\r\n }\r\n\r\n public async storageRemove(storageId: string, key: string): Promise<void> {\r\n NativeAppStorage.find(storageId).removeData(key);\r\n }\r\n\r\n public async storageKeys(storageId: string): Promise<string[]> {\r\n return NativeAppStorage.find(storageId).getKeys();\r\n }\r\n\r\n public async storageRemoveAll(storageId: string): Promise<void> {\r\n NativeAppStorage.find(storageId).removeAll();\r\n }\r\n}\r\n\r\n/** Options for [[NativeHost.startup]]\r\n * @public\r\n */\r\nexport interface NativeHostOpts extends IpcHostOpts {\r\n nativeHost?: {\r\n /** Application name. Used, for example, to name the settings file. If not supplied, defaults to \"iTwinApp\". */\r\n applicationName?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Backend for desktop/mobile native applications\r\n * @public\r\n */\r\nexport class NativeHost {\r\n private static _reachability?: InternetConnectivityStatus;\r\n private static _applicationName: string;\r\n private constructor() { } // no instances - static methods only\r\n\r\n /** Event called when the internet connectivity changes, if known. */\r\n public static readonly onInternetConnectivityChanged = new BeEvent<(status: InternetConnectivityStatus) => void>();\r\n\r\n private static _appSettingsCacheDir?: string;\r\n\r\n /** Get the local cache folder for application settings */\r\n public static get appSettingsCacheDir(): string {\r\n return this._appSettingsCacheDir ??= join(IModelHost.cacheDir, \"appSettings\");\r\n }\r\n\r\n /** Send a notification to the NativeApp connected to this NativeHost. */\r\n public static notifyNativeFrontend<T extends keyof NativeAppNotifications>(methodName: T, ...args: Parameters<NativeAppNotifications[T]>) {\r\n return IpcHost.send(nativeAppIpcStrings.notifyChannel, methodName, ...args);\r\n }\r\n\r\n private static _isValid = false;\r\n public static get isValid(): boolean { return this._isValid; }\r\n public static get applicationName() { return this._applicationName; }\r\n /** Get the settings store for this NativeHost. */\r\n public static get settingsStore() {\r\n return NativeAppStorage.open(this.applicationName);\r\n }\r\n\r\n /**\r\n * Start the backend of a native app.\r\n * @note this method calls [[IpcHost.startup]] internally.\r\n */\r\n public static async startup(opt?: NativeHostOpts): Promise<void> {\r\n if (!this.isValid) {\r\n this._isValid = true;\r\n this.onInternetConnectivityChanged.addListener((status: InternetConnectivityStatus) =>\r\n NativeHost.notifyNativeFrontend(\"notifyInternetConnectivityChanged\", status));\r\n this._applicationName = opt?.nativeHost?.applicationName ?? \"iTwinApp\";\r\n }\r\n\r\n await IpcHost.startup(opt);\r\n if (IpcHost.isValid) { // for tests, we use NativeHost but don't have a frontend\r\n NativeAppHandler.register();\r\n CatalogIModelHandler.register();\r\n }\r\n }\r\n\r\n /** Shutdown native app backend. Also calls [[IpcHost.shutdown]] */\r\n public static async shutdown(): Promise<void> {\r\n this._isValid = false;\r\n this.onInternetConnectivityChanged.clear();\r\n await IpcHost.shutdown();\r\n }\r\n\r\n /** get current value of internet connectivity */\r\n public static checkInternetConnectivity(): InternetConnectivityStatus {\r\n return this._reachability ?? InternetConnectivityStatus.Online;\r\n }\r\n\r\n /**\r\n * Override internet connectivity state\r\n * @param _overridenBy who overrode the value.\r\n * @internal\r\n */\r\n public static overrideInternetConnectivity(_overridenBy: OverriddenBy, status: InternetConnectivityStatus): void {\r\n if (this._reachability !== status) {\r\n this._reachability = status;\r\n this.onInternetConnectivityChanged.raiseEvent(status);\r\n if (ProcessDetector.isMobileAppBackend || ProcessDetector.isElectronAppBackend) {\r\n // Merely referencing NativeHost from a non-native backend causes a runtime exception (even\r\n // inside an if statement that checks that the backend is a mobile backend). This allows code\r\n // that needs to check connectivity to do so without referencing NativeHost directly.\r\n setOnlineStatus(status === InternetConnectivityStatus.Online);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|