@itwin/core-backend 3.3.0-dev.66 → 3.3.0-dev.69
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/lib/cjs/GeoCoordConfig.d.ts +1 -1
- package/lib/cjs/GeoCoordConfig.d.ts.map +1 -1
- package/lib/cjs/GeoCoordConfig.js +7 -7
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +53 -29
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +35 -51
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IpcHost.d.ts +2 -2
- package/lib/cjs/IpcHost.d.ts.map +1 -1
- package/lib/cjs/IpcHost.js +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.d.ts +2 -2
- package/lib/cjs/LocalhostIpcHost.d.ts.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/assets/Settings/backend.setting.json5 +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +6 -6
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js +19 -12
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/package.json +13 -13
|
@@ -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\nimport * as os from \"os\";\r\nimport * as path from \"path\";\r\nimport * as semver from \"semver\";\r\nimport { IModelJsNative, NativeLibrary } from \"@bentley/imodeljs-native\";\r\nimport { AccessToken, assert, BeEvent, Guid, GuidString, IModelStatus, Logger, LogLevel, Mutable, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport { AuthorizationClient, BentleyStatus, IModelError, LocalDirName, SessionProps } from \"@itwin/core-common\";\r\nimport { TelemetryManager } from \"@itwin/core-telemetry\";\r\nimport { BackendHubAccess } from \"./BackendHubAccess\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { BisCoreSchema } from \"./BisCoreSchema\";\r\nimport { BriefcaseManager } from \"./BriefcaseManager\";\r\nimport { AzureBlobStorage, AzureBlobStorageCredentials, CloudStorageService, CloudStorageTileUploader } from \"./CloudStorageBackend\";\r\nimport { FunctionalSchema } from \"./domains/FunctionalSchema\";\r\nimport { GenericSchema } from \"./domains/GenericSchema\";\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 { WipRpcImpl } from \"./rpc-impl/WipRpcImpl\";\r\nimport { initializeRpcBackend } from \"./RpcBackend\";\r\nimport { BaseSettings, SettingDictionary, SettingsPriority } from \"./workspace/Settings\";\r\nimport { SettingsSchemas } from \"./workspace/SettingsSchemas\";\r\nimport { ITwinWorkspace, Workspace, WorkspaceOpts } from \"./workspace/Workspace\";\r\n\r\nconst loggerCategory = BackendLoggerCategory.IModelHost;\r\n\r\n// cspell:ignore nodereport fatalerror apicall alicloud rpcs\r\n\r\n/** @alpha */\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 * @alpha\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-report? If so, node-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-report 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-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/** Configuration of core-backend.\r\n * @public\r\n */\r\nexport class IModelHostConfiguration {\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 * - Sub-folders within this folder organize various caches -\r\n * - bc/ -> Briefcases\r\n * - appSettings/ -> Offline application settings (only relevant in native applications)\r\n * - etc.\r\n * @see [[IModelHost.cacheDir]] for the value it's set to after startup\r\n */\r\n public cacheDir?: LocalDirName;\r\n\r\n /** Options for creating the [[Workspace]]\r\n * @beta\r\n */\r\n public workspace?: WorkspaceOpts;\r\n\r\n /** The directory where the app's assets are found. */\r\n public appAssetsDir?: LocalDirName;\r\n\r\n /** The kind of iModel hub server to use.\r\n * @beta\r\n */\r\n public 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 public tileCacheAzureCredentials?: AzureBlobStorageCredentials;\r\n\r\n /**\r\n * @beta\r\n * @note A reference implementation is set for [[AzureBlobStorage]] 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 [[CloudStorageService]].\r\n */\r\n public tileCacheService?: CloudStorageService;\r\n\r\n /** Whether to restrict tile cache URLs by client IP address (if available).\r\n * @beta\r\n */\r\n public restrictTileUrlsByClientIp?: boolean;\r\n\r\n /** Whether to compress cached tiles.\r\n * Defaults to `true`.\r\n */\r\n public 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 public tileTreeRequestTimeout = IModelHostConfiguration.defaultTileRequestTimeout;\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 public tileContentRequestTimeout = IModelHostConfiguration.defaultTileRequestTimeout;\r\n /** The default time, in milliseconds, used for [[tileTreeRequestTimeout]] and [[tileContentRequestTimeout]]. To change this, override one or both of those properties.\r\n * @internal\r\n */\r\n public static defaultTileRequestTimeout = 20 * 1000;\r\n\r\n /** The default time, in seconds, used for [[logTileLoadTimeThreshold]]. To change this, override that property.\r\n * @internal\r\n */\r\n public static defaultLogTileLoadTimeThreshold = 40;\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 public logTileLoadTimeThreshold: number = IModelHostConfiguration.defaultLogTileLoadTimeThreshold;\r\n\r\n /** The default size, in bytes, used for [[logTileSizeThreshold]]. To change this, override that property.\r\n * @internal\r\n */\r\n public static defaultLogTileSizeThreshold = 20 * 1000000;\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 public logTileSizeThreshold: number = IModelHostConfiguration.defaultLogTileSizeThreshold;\r\n\r\n /** Crash-reporting configuration\r\n * @alpha\r\n */\r\n public crashReportingConfig?: CrashReportingConfig;\r\n\r\n /** The AuthorizationClient used to get accessTokens\r\n * @beta\r\n */\r\n public authorizationClient?: AuthorizationClient;\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 BaseSettings {\r\n private _remove?: VoidFunction;\r\n protected override verifyPriority(priority: SettingsPriority) {\r\n if (priority >= SettingsPriority.iModel) // iModel settings may not appear in ApplicationSettings\r\n throw new Error(\"Use IModelSettings\");\r\n }\r\n private updateDefaults() {\r\n const defaults: SettingDictionary = {};\r\n for (const [schemaName, val] of SettingsSchemas.allSchemas) {\r\n if (val.default)\r\n defaults[schemaName] = val.default;\r\n }\r\n this.addDictionary(\"_default_\", 0, defaults);\r\n }\r\n\r\n public constructor() {\r\n super();\r\n this._remove = 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/** 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 public static authorizationClient?: AuthorizationClient;\r\n\r\n /** @alpha */\r\n public static readonly telemetry = new TelemetryManager();\r\n\r\n public static backendVersion = \"\";\r\n private static _cacheDir = \"\";\r\n private static _appWorkspace?: Workspace;\r\n\r\n private static _platform?: typeof IModelJsNative;\r\n /** @internal */\r\n public static get platform(): typeof IModelJsNative {\r\n if (this._platform === undefined)\r\n throw new Error(\"IModelHost.startup must be called first\");\r\n return this._platform;\r\n }\r\n\r\n public static configuration?: IModelHostConfiguration;\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 /** 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 this._appWorkspace!; } // eslint-disable-line @typescript-eslint/no-non-null-assertion\r\n\r\n /** The optional [[FileNameResolver]] that resolves keys and partial file names for snapshot iModels. */\r\n public static snapshotFileNameResolver?: FileNameResolver;\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 this.authorizationClient?.getAccessToken()) ?? \"\";\r\n } catch (e) {\r\n return \"\";\r\n }\r\n }\r\n\r\n /** @internal */\r\n public static flushLog() {\r\n return this.platform.flushLog();\r\n }\r\n /** @internal */\r\n public static loadNative(): void {\r\n const platform = Platform.load();\r\n this.registerPlatform(platform);\r\n }\r\n\r\n private static registerPlatform(platform: typeof IModelJsNative): void {\r\n this._platform = platform;\r\n if (undefined === platform)\r\n return;\r\n\r\n if (!ProcessDetector.isMobileAppBackend)\r\n this.validateNativePlatformVersion();\r\n\r\n platform.logger = Logger;\r\n }\r\n\r\n private static validateNativePlatformVersion(): void {\r\n const requiredVersion = require(\"../../package.json\").dependencies[\"@bentley/imodeljs-native\"]; // eslint-disable-line @typescript-eslint/no-var-requires\r\n const thisVersion = this.platform.version;\r\n if (semver.satisfies(thisVersion, requiredVersion))\r\n return;\r\n if (IModelJsFs.existsSync(path.join(__dirname, \"DevBuild.txt\"))) {\r\n console.log(\"Bypassing version checks for development build\"); // eslint-disable-line no-console\r\n return;\r\n }\r\n this._platform = undefined;\r\n throw new IModelError(IModelStatus.BadRequest, `imodeljs-native version is (${thisVersion}). core-backend requires version (${requiredVersion})`);\r\n }\r\n\r\n /**\r\n * @internal\r\n * @note Use [[IModelHostConfiguration.tileCacheService]] to set the service provider.\r\n */\r\n public static tileCacheService?: CloudStorageService;\r\n\r\n /** @internal */\r\n public static tileUploader?: CloudStorageTileUploader;\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 * @beta\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 * @beta\r\n * @note If [[IModelHostConfiguration.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 (this._hubAccess === undefined)\r\n throw new IModelError(IModelStatus.BadRequest, \"No BackendHubAccess supplied in IModelHostConfiguration\");\r\n return this._hubAccess;\r\n }\r\n\r\n private static initializeWorkspace(configuration: IModelHostConfiguration) {\r\n const settingAssets = path.join(KnownLocations.packageAssetsDir, \"Settings\");\r\n SettingsSchemas.addDirectory(path.join(settingAssets, \"Schemas\"));\r\n this._appWorkspace = new ITwinWorkspace(new ApplicationSettings(), configuration.workspace);\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 /** Returns true if IModelHost is started. */\r\n public static get isValid() { return this._isValid; }\r\n /** This method must be called before any iTwin.js services are used.\r\n * @param configuration Host configuration data.\r\n * Raises [[onAfterStartup]].\r\n * @see [[shutdown]].\r\n */\r\n public static async startup(configuration: IModelHostConfiguration = new IModelHostConfiguration()): Promise<void> {\r\n if (this._isValid)\r\n return; // we're already initialized\r\n this._isValid = true;\r\n\r\n if (IModelHost.sessionId === \"\")\r\n IModelHost.sessionId = Guid.createValue();\r\n\r\n this.authorizationClient = configuration.authorizationClient;\r\n\r\n this.logStartup();\r\n\r\n this.backendVersion = require(\"../../package.json\").version; // eslint-disable-line @typescript-eslint/no-var-requires\r\n initializeRpcBackend();\r\n\r\n if (this._platform === undefined) {\r\n try {\r\n this.loadNative();\r\n } catch (error) {\r\n Logger.logError(loggerCategory, \"Error registering/loading the native platform API\", () => (configuration));\r\n throw error;\r\n }\r\n }\r\n\r\n if (configuration.crashReportingConfig && configuration.crashReportingConfig.crashDir && !ProcessDetector.isElectronAppBackend && !ProcessDetector.isMobileAppBackend) {\r\n this.platform.setCrashReporting(configuration.crashReportingConfig);\r\n\r\n Logger.logTrace(loggerCategory, \"Configured crash reporting\", () => ({\r\n enableCrashDumps: configuration.crashReportingConfig?.enableCrashDumps,\r\n wantFullMemoryDumps: configuration.crashReportingConfig?.wantFullMemoryDumps,\r\n enableNodeReport: configuration.crashReportingConfig?.enableNodeReport,\r\n uploadToBentley: configuration.crashReportingConfig?.uploadToBentley,\r\n }));\r\n\r\n if (configuration.crashReportingConfig.enableNodeReport) {\r\n try {\r\n // node-report reports on V8 fatal errors and unhandled exceptions/Promise rejections.\r\n const nodereport = require(\"node-report/api\"); // eslint-disable-line @typescript-eslint/no-var-requires\r\n nodereport.setEvents(\"exception+fatalerror+apicall\");\r\n nodereport.setDirectory(configuration.crashReportingConfig.crashDir);\r\n nodereport.setVerbose(\"yes\");\r\n Logger.logTrace(loggerCategory, \"Configured native crash reporting (node-report)\");\r\n } catch (err) {\r\n Logger.logWarning(loggerCategory, \"node-report is not installed.\");\r\n }\r\n }\r\n }\r\n\r\n this.setupHostDirs(configuration);\r\n this.initializeWorkspace(configuration);\r\n\r\n BriefcaseManager.initialize(this._briefcaseCacheDir);\r\n\r\n [\r\n IModelReadRpcImpl,\r\n IModelTileRpcImpl,\r\n SnapshotIModelRpcImpl,\r\n WipRpcImpl,\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 if (undefined !== configuration.hubAccess)\r\n this._hubAccess = configuration.hubAccess;\r\n this.configuration = configuration;\r\n this.setupTileCache();\r\n\r\n this.platform.setUseTileCache(IModelHost.tileCacheService ? false : true);\r\n process.once(\"beforeExit\", IModelHost.shutdown);\r\n this.onAfterStartup.raiseEvent();\r\n }\r\n\r\n private static _briefcaseCacheDir: LocalDirName;\r\n\r\n private static logStartup() {\r\n if (!Logger.isEnabled(loggerCategory, LogLevel.Trace))\r\n return;\r\n\r\n // Extract the iModel details from environment - note this is very specific to Bentley hosted backends, but is quite useful for tracing\r\n let startupInfo: any = {};\r\n const serviceName = process.env.FABRIC_SERVICE_NAME;\r\n if (serviceName) {\r\n // e.g., fabric:/iModelWebViewer3.0/iModelJSGuest/1/08daaeb3-b56f-480b-9051-7efc834d18ae/512d971d-b641-4735-bb1c-c07ab3e44ce7/c1315fcce125ca40b2d405bb7809214daf8b4c85\r\n const serviceNameComponents = serviceName.split(\"/\");\r\n if (serviceNameComponents.length === 7) {\r\n startupInfo = {\r\n ...startupInfo,\r\n iTwinId: serviceNameComponents[4],\r\n iModelId: serviceNameComponents[5],\r\n changesetId: serviceNameComponents[6],\r\n };\r\n }\r\n }\r\n\r\n Logger.logTrace(loggerCategory, \"IModelHost.startup\", () => startupInfo);\r\n }\r\n\r\n private static setupHostDirs(configuration: IModelHostConfiguration) {\r\n const setupDir = (dir: LocalDirName) => {\r\n dir = path.normalize(dir);\r\n IModelJsFs.recursiveMkDirSync(dir);\r\n return dir;\r\n };\r\n this._cacheDir = setupDir(configuration.cacheDir ?? NativeLibrary.defaultCacheDir);\r\n this._briefcaseCacheDir = path.join(this._cacheDir, \"imodels\");\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(): Promise<void> {\r\n // NB: This method is set as a node listener where `this` is unbound\r\n if (!IModelHost._isValid)\r\n return;\r\n\r\n IModelHost._isValid = false;\r\n IModelHost.onBeforeShutdown.raiseEvent();\r\n IModelHost.configuration = undefined;\r\n IModelHost.tileCacheService = undefined;\r\n IModelHost.tileUploader = undefined;\r\n await IModelHost.appWorkspace.close();\r\n IModelHost._appWorkspace = undefined;\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 * @param name The name of the property\r\n * @param value The value of the property\r\n * @alpha\r\n */\r\n public static setCrashReportProperty(name: string, value: string): void {\r\n assert(undefined !== this._platform);\r\n this._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 * @param name The name of the property\r\n * @alpha\r\n */\r\n public static removeCrashReportProperty(name: string): void {\r\n assert(undefined !== this._platform);\r\n this._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 * @alpha\r\n */\r\n public static getCrashReportProperties(): CrashReportingConfigNameValuePair[] {\r\n assert(undefined !== this._platform);\r\n return this._platform.getCrashReportProperties();\r\n }\r\n\r\n /** The directory where application assets may be found */\r\n public static get appAssetsDir(): string | undefined { return undefined !== IModelHost.configuration ? IModelHost.configuration.appAssetsDir : undefined; }\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 public static get tileTreeRequestTimeout(): number {\r\n return undefined !== IModelHost.configuration ? IModelHost.configuration.tileTreeRequestTimeout : IModelHostConfiguration.defaultTileRequestTimeout;\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 public static get tileContentRequestTimeout(): number {\r\n return undefined !== IModelHost.configuration ? 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 { return undefined !== IModelHost.configuration ? IModelHost.configuration.logTileLoadTimeThreshold : IModelHostConfiguration.defaultLogTileLoadTimeThreshold; }\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 { return undefined !== IModelHost.configuration ? IModelHost.configuration.logTileSizeThreshold : IModelHostConfiguration.defaultLogTileSizeThreshold; }\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.tileCacheService;\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 { return undefined !== IModelHost.configuration && (IModelHost.configuration.restrictTileUrlsByClientIp ? true : false); }\r\n\r\n /** Whether to compress cached tiles.\r\n * @internal\r\n */\r\n public static get compressCachedTiles(): boolean { return false !== IModelHost.configuration?.compressCachedTiles; }\r\n\r\n private static setupTileCache() {\r\n assert(undefined !== IModelHost.configuration);\r\n const config = IModelHost.configuration;\r\n const service = config.tileCacheService;\r\n const credentials = config.tileCacheAzureCredentials;\r\n\r\n if (!service && !credentials)\r\n return;\r\n\r\n IModelHost.tileUploader = new CloudStorageTileUploader();\r\n\r\n if (credentials && !service) {\r\n IModelHost.tileCacheService = new AzureBlobStorage(credentials);\r\n } else if (!credentials && service) {\r\n IModelHost.tileCacheService = service;\r\n } else {\r\n throw new IModelError(BentleyStatus.ERROR, \"Cannot use both Azure and custom cloud storage providers for tile cache.\");\r\n }\r\n }\r\n\r\n /** @internal */\r\n public static computeSchemaChecksum(arg: { schemaXmlPath: string, referencePaths: string[], exactMatch?: boolean }): string {\r\n return this.platform.computeSchemaChecksum(arg);\r\n }\r\n}\r\n\r\n/** Information about the platform on which the app is running. Also see [[KnownLocations]] and [[IModelJsFs]].\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 /** @internal */\r\n public static load(): typeof IModelJsNative {\r\n return ProcessDetector.isMobileAppBackend ? (process as any)._linkedBinding(\"iModelJsNative\") : NativeLibrary.load();\r\n }\r\n}\r\n\r\n/** Well known directories that may be used by the application. Also see [[Platform]]\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(): string { return IModelHost.platform.DgnDb.getAssetsDir(); }\r\n\r\n /** The directory where the core-backend assets are stored. */\r\n public static get packageAssetsDir(): string {\r\n return path.join(__dirname, \"assets\");\r\n }\r\n\r\n /** The temporary directory. */\r\n public static get tmpdir(): string {\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 */\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\nimport * as os from \"os\";\r\nimport * as path from \"path\";\r\nimport * as semver from \"semver\";\r\nimport { IModelJsNative, NativeLibrary } from \"@bentley/imodeljs-native\";\r\nimport { AccessToken, assert, BeEvent, Guid, GuidString, IModelStatus, Logger, LogLevel, Mutable, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport { AuthorizationClient, BentleyStatus, IModelError, LocalDirName, SessionProps } from \"@itwin/core-common\";\r\nimport { TelemetryManager } from \"@itwin/core-telemetry\";\r\nimport { BackendHubAccess } from \"./BackendHubAccess\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { BisCoreSchema } from \"./BisCoreSchema\";\r\nimport { BriefcaseManager } from \"./BriefcaseManager\";\r\nimport { AzureBlobStorage, AzureBlobStorageCredentials, CloudStorageService, CloudStorageTileUploader } from \"./CloudStorageBackend\";\r\nimport { FunctionalSchema } from \"./domains/FunctionalSchema\";\r\nimport { GenericSchema } from \"./domains/GenericSchema\";\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 { WipRpcImpl } from \"./rpc-impl/WipRpcImpl\";\r\nimport { initializeRpcBackend } from \"./RpcBackend\";\r\nimport { BaseSettings, SettingDictionary, SettingsPriority } from \"./workspace/Settings\";\r\nimport { SettingsSchemas } from \"./workspace/SettingsSchemas\";\r\nimport { ITwinWorkspace, Workspace, WorkspaceOpts } from \"./workspace/Workspace\";\r\n\r\nconst loggerCategory = BackendLoggerCategory.IModelHost;\r\n\r\n// cspell:ignore nodereport fatalerror apicall alicloud rpcs\r\n\r\n/** @alpha */\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 * @alpha\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-report? If so, node-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-report 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-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/**\r\n * Options for [[IModelHost.startup]]\r\n * @public\r\n */\r\nexport interface IModelHostOptions {\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 * - Sub-folders within this folder organize various caches -\r\n * - bc/ -> Briefcases\r\n * - appSettings/ -> Offline application settings (only relevant in native applications)\r\n * - etc.\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 [[Workspace]]\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 * @beta\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 [[AzureBlobStorage]] 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 [[CloudStorageService]].\r\n */\r\n tileCacheService?: CloudStorageService;\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 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 * @alpha\r\n */\r\n crashReportingConfig?: CrashReportingConfig;\r\n\r\n /** The AuthorizationClient used to get accessTokens\r\n * @beta\r\n */\r\n authorizationClient?: AuthorizationClient;\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\r\n public appAssetsDir?: LocalDirName;\r\n public cacheDir?: LocalDirName;\r\n\r\n /** @beta */\r\n public workspace?: WorkspaceOpts;\r\n /** @beta */\r\n public hubAccess?: BackendHubAccess;\r\n /** @beta */\r\n public authorizationClient?: AuthorizationClient;\r\n /** @beta */\r\n public tileCacheService?: CloudStorageService;\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 /** @alpha */\r\n public crashReportingConfig?: CrashReportingConfig;\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 BaseSettings {\r\n private _remove?: VoidFunction;\r\n protected override verifyPriority(priority: SettingsPriority) {\r\n if (priority >= SettingsPriority.iModel) // iModel settings may not appear in ApplicationSettings\r\n throw new Error(\"Use IModelSettings\");\r\n }\r\n private updateDefaults() {\r\n const defaults: SettingDictionary = {};\r\n for (const [schemaName, val] of SettingsSchemas.allSchemas) {\r\n if (val.default)\r\n defaults[schemaName] = val.default;\r\n }\r\n this.addDictionary(\"_default_\", 0, defaults);\r\n }\r\n\r\n public constructor() {\r\n super();\r\n this._remove = 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/** 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 public static authorizationClient?: AuthorizationClient;\r\n\r\n /** @alpha */\r\n public static readonly telemetry = new TelemetryManager();\r\n\r\n public static backendVersion = \"\";\r\n private static _cacheDir = \"\";\r\n private static _appWorkspace?: Workspace;\r\n\r\n private static _platform?: typeof IModelJsNative;\r\n /** @internal */\r\n public static get platform(): typeof IModelJsNative {\r\n if (this._platform === undefined)\r\n throw new Error(\"IModelHost.startup must be called first\");\r\n return this._platform;\r\n }\r\n\r\n public static configuration?: IModelHostOptions;\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 /** 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 this._appWorkspace!; } // eslint-disable-line @typescript-eslint/no-non-null-assertion\r\n\r\n /** The optional [[FileNameResolver]] that resolves keys and partial file names for snapshot iModels. */\r\n public static snapshotFileNameResolver?: FileNameResolver;\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 this.authorizationClient?.getAccessToken()) ?? \"\";\r\n } catch (e) {\r\n return \"\";\r\n }\r\n }\r\n\r\n /** @internal */\r\n public static flushLog() {\r\n return this.platform.flushLog();\r\n }\r\n /** @internal */\r\n public static loadNative(): void {\r\n const platform = Platform.load();\r\n this.registerPlatform(platform);\r\n }\r\n\r\n private static registerPlatform(platform: typeof IModelJsNative): void {\r\n this._platform = platform;\r\n if (undefined === platform)\r\n return;\r\n\r\n if (!ProcessDetector.isMobileAppBackend)\r\n this.validateNativePlatformVersion();\r\n\r\n platform.logger = Logger;\r\n }\r\n\r\n private static validateNativePlatformVersion(): void {\r\n const requiredVersion = require(\"../../package.json\").dependencies[\"@bentley/imodeljs-native\"]; // eslint-disable-line @typescript-eslint/no-var-requires\r\n const thisVersion = this.platform.version;\r\n if (semver.satisfies(thisVersion, requiredVersion))\r\n return;\r\n if (IModelJsFs.existsSync(path.join(__dirname, \"DevBuild.txt\"))) {\r\n console.log(\"Bypassing version checks for development build\"); // eslint-disable-line no-console\r\n return;\r\n }\r\n this._platform = undefined;\r\n throw new IModelError(IModelStatus.BadRequest, `imodeljs-native version is (${thisVersion}). core-backend requires version (${requiredVersion})`);\r\n }\r\n\r\n /**\r\n * @internal\r\n * @note Use [[IModelHostOptions.tileCacheService]] to set the service provider.\r\n */\r\n public static tileCacheService?: CloudStorageService;\r\n\r\n /** @internal */\r\n public static tileUploader?: CloudStorageTileUploader;\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 * @beta\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 * @beta\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 (this._hubAccess === undefined)\r\n throw new IModelError(IModelStatus.BadRequest, \"No BackendHubAccess supplied in IModelHostOptions\");\r\n return this._hubAccess;\r\n }\r\n\r\n private static initializeWorkspace(configuration: IModelHostOptions) {\r\n const settingAssets = path.join(KnownLocations.packageAssetsDir, \"Settings\");\r\n SettingsSchemas.addDirectory(path.join(settingAssets, \"Schemas\"));\r\n this._appWorkspace = new ITwinWorkspace(new ApplicationSettings(), configuration.workspace);\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 /** Returns true if IModelHost is started. */\r\n public static get isValid() { return this._isValid; }\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 (IModelHost.sessionId === \"\")\r\n IModelHost.sessionId = Guid.createValue();\r\n\r\n this.authorizationClient = options.authorizationClient;\r\n\r\n this.logStartup();\r\n\r\n this.backendVersion = require(\"../../package.json\").version; // eslint-disable-line @typescript-eslint/no-var-requires\r\n initializeRpcBackend();\r\n\r\n if (this._platform === undefined) {\r\n try {\r\n this.loadNative();\r\n } catch (error) {\r\n Logger.logError(loggerCategory, \"Error registering/loading the native platform API\", () => (options));\r\n throw error;\r\n }\r\n }\r\n\r\n if (options.crashReportingConfig && options.crashReportingConfig.crashDir && !ProcessDetector.isElectronAppBackend && !ProcessDetector.isMobileAppBackend) {\r\n this.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 try {\r\n // node-report reports on V8 fatal errors and unhandled exceptions/Promise rejections.\r\n const nodereport = require(\"node-report/api\"); // eslint-disable-line @typescript-eslint/no-var-requires\r\n nodereport.setEvents(\"exception+fatalerror+apicall\");\r\n nodereport.setDirectory(options.crashReportingConfig.crashDir);\r\n nodereport.setVerbose(\"yes\");\r\n Logger.logTrace(loggerCategory, \"Configured native crash reporting (node-report)\");\r\n } catch (err) {\r\n Logger.logWarning(loggerCategory, \"node-report is not installed.\");\r\n }\r\n }\r\n }\r\n\r\n this.setupHostDirs(options);\r\n this.initializeWorkspace(options);\r\n\r\n BriefcaseManager.initialize(this._briefcaseCacheDir);\r\n\r\n [\r\n IModelReadRpcImpl,\r\n IModelTileRpcImpl,\r\n SnapshotIModelRpcImpl,\r\n WipRpcImpl,\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 if (undefined !== options.hubAccess)\r\n this._hubAccess = options.hubAccess;\r\n\r\n this.configuration = options;\r\n this.setupTileCache();\r\n\r\n this.platform.setUseTileCache(IModelHost.tileCacheService ? false : true);\r\n process.once(\"beforeExit\", IModelHost.shutdown);\r\n this.onAfterStartup.raiseEvent();\r\n }\r\n\r\n private static _briefcaseCacheDir: LocalDirName;\r\n\r\n private static logStartup() {\r\n if (!Logger.isEnabled(loggerCategory, LogLevel.Trace))\r\n return;\r\n\r\n // Extract the iModel details from environment - note this is very specific to Bentley hosted backends, but is quite useful for tracing\r\n let startupInfo: any = {};\r\n const serviceName = process.env.FABRIC_SERVICE_NAME;\r\n if (serviceName) {\r\n // e.g., fabric:/iModelWebViewer3.0/iModelJSGuest/1/08daaeb3-b56f-480b-9051-7efc834d18ae/512d971d-b641-4735-bb1c-c07ab3e44ce7/c1315fcce125ca40b2d405bb7809214daf8b4c85\r\n const serviceNameComponents = serviceName.split(\"/\");\r\n if (serviceNameComponents.length === 7) {\r\n startupInfo = {\r\n ...startupInfo,\r\n iTwinId: serviceNameComponents[4],\r\n iModelId: serviceNameComponents[5],\r\n changesetId: serviceNameComponents[6],\r\n };\r\n }\r\n }\r\n\r\n Logger.logTrace(loggerCategory, \"IModelHost.startup\", () => startupInfo);\r\n }\r\n\r\n private static setupHostDirs(configuration: IModelHostOptions) {\r\n const setupDir = (dir: LocalDirName) => {\r\n dir = path.normalize(dir);\r\n IModelJsFs.recursiveMkDirSync(dir);\r\n return dir;\r\n };\r\n this._cacheDir = setupDir(configuration.cacheDir ?? NativeLibrary.defaultCacheDir);\r\n this._briefcaseCacheDir = path.join(this._cacheDir, \"imodels\");\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(): Promise<void> {\r\n // NB: This method is set as a node listener where `this` is unbound\r\n if (!IModelHost._isValid)\r\n return;\r\n\r\n IModelHost._isValid = false;\r\n IModelHost.onBeforeShutdown.raiseEvent();\r\n IModelHost.configuration = undefined;\r\n IModelHost.tileCacheService = undefined;\r\n IModelHost.tileUploader = undefined;\r\n IModelHost.appWorkspace.close();\r\n IModelHost._appWorkspace = undefined;\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 * @param name The name of the property\r\n * @param value The value of the property\r\n * @alpha\r\n */\r\n public static setCrashReportProperty(name: string, value: string): void {\r\n assert(undefined !== this._platform);\r\n this._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 * @param name The name of the property\r\n * @alpha\r\n */\r\n public static removeCrashReportProperty(name: string): void {\r\n assert(undefined !== this._platform);\r\n this._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 * @alpha\r\n */\r\n public static getCrashReportProperties(): CrashReportingConfigNameValuePair[] {\r\n assert(undefined !== this._platform);\r\n return this._platform.getCrashReportProperties();\r\n }\r\n\r\n /** The directory where application assets may be found */\r\n public static get appAssetsDir(): string | undefined { return undefined !== IModelHost.configuration ? IModelHost.configuration.appAssetsDir : undefined; }\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 { return IModelHost.configuration?.logTileLoadTimeThreshold ?? IModelHostConfiguration.defaultLogTileLoadTimeThreshold; }\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 { return IModelHost.configuration?.logTileSizeThreshold ?? IModelHostConfiguration.defaultLogTileSizeThreshold; }\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.tileCacheService;\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 { return undefined !== IModelHost.configuration && (IModelHost.configuration.restrictTileUrlsByClientIp ? true : false); }\r\n\r\n /** Whether to compress cached tiles.\r\n * @internal\r\n */\r\n public static get compressCachedTiles(): boolean { return false !== IModelHost.configuration?.compressCachedTiles; }\r\n\r\n private static setupTileCache() {\r\n assert(undefined !== IModelHost.configuration);\r\n const config = IModelHost.configuration;\r\n const service = config.tileCacheService;\r\n const credentials = config.tileCacheAzureCredentials;\r\n\r\n if (!service && !credentials)\r\n return;\r\n\r\n IModelHost.tileUploader = new CloudStorageTileUploader();\r\n\r\n if (credentials && !service) {\r\n IModelHost.tileCacheService = new AzureBlobStorage(credentials);\r\n } else if (!credentials && service) {\r\n IModelHost.tileCacheService = service;\r\n } else {\r\n throw new IModelError(BentleyStatus.ERROR, \"Cannot use both Azure and custom cloud storage providers for tile cache.\");\r\n }\r\n }\r\n\r\n /** @internal */\r\n public static computeSchemaChecksum(arg: { schemaXmlPath: string, referencePaths: string[], exactMatch?: boolean }): string {\r\n return this.platform.computeSchemaChecksum(arg);\r\n }\r\n}\r\n\r\n/** Information about the platform on which the app is running. Also see [[KnownLocations]] and [[IModelJsFs]].\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 /** @internal */\r\n public static load(): typeof IModelJsNative {\r\n return ProcessDetector.isMobileAppBackend ? (process as any)._linkedBinding(\"iModelJsNative\") : NativeLibrary.load();\r\n }\r\n}\r\n\r\n/** Well known directories that may be used by the application. Also see [[Platform]]\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(): string { return IModelHost.platform.DgnDb.getAssetsDir(); }\r\n\r\n /** The directory where the core-backend assets are stored. */\r\n public static get packageAssetsDir(): string {\r\n return path.join(__dirname, \"assets\");\r\n }\r\n\r\n /** The temporary directory. */\r\n public static get tmpdir(): string {\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 */\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/IpcHost.d.ts
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { EditingScopeNotifications, IpcAppNotifications, IpcListener, IpcSocketBackend, RemoveFunction, TxnNotifications } from "@itwin/core-common";
|
|
5
5
|
import { BriefcaseDb, StandaloneDb } from "./IModelDb";
|
|
6
|
-
import {
|
|
6
|
+
import { IModelHostOptions } from "./IModelHost";
|
|
7
7
|
/**
|
|
8
8
|
* Options for [[IpcHost.startup]]
|
|
9
9
|
* @public
|
|
10
10
|
*/
|
|
11
11
|
export interface IpcHostOpts {
|
|
12
|
-
iModelHost?:
|
|
12
|
+
iModelHost?: IModelHostOptions;
|
|
13
13
|
ipcHost?: {
|
|
14
14
|
/** The Ipc socket to use for communications with frontend. Allows undefined only for headless tests. */
|
|
15
15
|
socket?: IpcSocketBackend;
|
package/lib/cjs/IpcHost.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IpcHost.d.ts","sourceRoot":"","sources":["../../src/IpcHost.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EACgC,yBAAyB,EAC9D,mBAAmB,EAAmB,WAAW,EAAE,gBAAgB,EAAoC,cAAc,EACjG,gBAAgB,EACrC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAY,YAAY,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAc,
|
|
1
|
+
{"version":3,"file":"IpcHost.d.ts","sourceRoot":"","sources":["../../src/IpcHost.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EACgC,yBAAyB,EAC9D,mBAAmB,EAAmB,WAAW,EAAE,gBAAgB,EAAoC,cAAc,EACjG,gBAAgB,EACrC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAY,YAAY,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAc,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG7D;;;IAGI;AACJ,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,OAAO,CAAC,EAAE;QACR,wGAAwG;QACxG,MAAM,CAAC,EAAE,gBAAgB,CAAC;QAE1B,iDAAiD;QACjD,UAAU,CAAC,EAAE;YACX,OAAO,CAAC,EAAE,OAAO,CAAC;SACnB,CAAC;KACH,CAAC;CACH;AAED;;;;GAIG;AACH,qBAAa,OAAO;IAClB,OAAc,OAAO,UAAS;IAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,CAA+B;IAClD,2EAA2E;IAC3E,OAAO,CAAC,MAAM,KAAK,GAAG,GAA2C;IACjE,gIAAgI;IAChI,WAAkB,OAAO,IAAI,OAAO,CAAoC;IAExE;;;;OAIG;WACW,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIzD;;;;;OAKG;WACW,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,cAAc;IAGhG;;;;;OAKG;WACW,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,cAAc;IAGjF;;;;OAIG;WACW,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAI1E,OAAO,CAAC,MAAM,CAAC,MAAM;IAKrB,gBAAgB;WACF,iBAAiB,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAI/H,gBAAgB;WACF,UAAU,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAAE,SAAS,EAAE,WAAW,GAAG,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAIzJ,gBAAgB;WACF,kBAAkB,CAAC,CAAC,SAAS,MAAM,yBAAyB,EAAE,SAAS,EAAE,WAAW,GAAG,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAInL;;;;OAIG;WACiB,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7D,mEAAmE;WAC/C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAI9C;AAED;;;;;;;;;;;GAWG;AACH,8BAAsB,UAAU;IAC9B,+EAA+E;IAC/E,aAAoB,WAAW,IAAI,MAAM,CAAC;IAE1C;;;;;OAKG;WACW,QAAQ,IAAI,cAAc;CAuBzC"}
|
package/lib/cjs/IpcHost.js
CHANGED
|
@@ -128,7 +128,7 @@ class IpcHandler {
|
|
|
128
128
|
catch (err) {
|
|
129
129
|
const ret = {
|
|
130
130
|
error: {
|
|
131
|
-
name: (err && typeof
|
|
131
|
+
name: (err && typeof err === "object") ? err.constructor.name : "Unknown Error",
|
|
132
132
|
message: core_bentley_1.BentleyError.getErrorMessage(err),
|
|
133
133
|
errorNumber: (_a = err.errorNumber) !== null && _a !== void 0 ? _a : 0,
|
|
134
134
|
},
|
package/lib/cjs/IpcHost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IpcHost.js","sourceRoot":"","sources":["../../src/IpcHost.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 { assert, BentleyError, IModelStatus, Logger, LogLevel, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n ChangesetIndex, ChangesetIndexAndId, EditingScopeNotifications, IModelConnectionProps, IModelError, IModelRpcProps, IpcAppChannel, IpcAppFunctions,\r\n IpcAppNotifications, IpcInvokeReturn, IpcListener, IpcSocketBackend, iTwinChannel, OpenBriefcaseProps, RemoveFunction, StandaloneOpenOptions,\r\n TileTreeContentIds, TxnNotifications,\r\n} from \"@itwin/core-common\";\r\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { BriefcaseDb, IModelDb, StandaloneDb } from \"./IModelDb\";\r\nimport { IModelHost, IModelHostConfiguration } from \"./IModelHost\";\r\nimport { cancelTileContentRequests } from \"./rpc-impl/IModelTileRpcImpl\";\r\n\r\n/**\r\n * Options for [[IpcHost.startup]]\r\n * @public\r\n */\r\nexport interface IpcHostOpts {\r\n iModelHost?: IModelHostConfiguration;\r\n ipcHost?: {\r\n /** The Ipc socket to use for communications with frontend. Allows undefined only for headless tests. */\r\n socket?: IpcSocketBackend;\r\n\r\n /** don't send stack information on exceptions */\r\n exceptions?: {\r\n noStack?: boolean;\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Used by applications that have a dedicated backend. IpcHosts may send messages to their corresponding IpcApp.\r\n * @note if either end terminates, the other must too.\r\n * @public\r\n */\r\nexport class IpcHost {\r\n public static noStack = false;\r\n private static _ipc: IpcSocketBackend | undefined;\r\n /** Get the implementation of the [IpcSocketBackend]($common) interface. */\r\n private static get ipc(): IpcSocketBackend { return this._ipc!; } // eslint-disable-line @typescript-eslint/no-non-null-assertion\r\n /** Determine whether Ipc is available for this backend. This will only be true if [[startup]] has been called on this class. */\r\n public static get isValid(): boolean { return undefined !== this._ipc; }\r\n\r\n /**\r\n * Send a message to the frontend over an Ipc channel.\r\n * @param channel the name of the channel matching the name registered with [[IpcApp.addListener]].\r\n * @param data The content of the message.\r\n */\r\n public static send(channel: string, ...data: any[]): void {\r\n this.ipc.send(iTwinChannel(channel), ...data);\r\n }\r\n\r\n /**\r\n * Establish a handler for an Ipc channel to receive [[Frontend.invoke]] calls\r\n * @param channel The name of the channel for this handler.\r\n * @param handler A function that supplies the implementation for `channel`\r\n * @note returns A function to call to remove the handler.\r\n */\r\n public static handle(channel: string, handler: (...args: any[]) => Promise<any>): RemoveFunction {\r\n return this.ipc.handle(iTwinChannel(channel), handler);\r\n }\r\n /**\r\n * Establish a handler to receive messages sent via [[IpcApp.send]].\r\n * @param channel The name of the channel for the messages.\r\n * @param listener A function called when messages are sent over `channel`\r\n * @note returns A function to call to remove the listener.\r\n */\r\n public static addListener(channel: string, listener: IpcListener): RemoveFunction {\r\n return this.ipc.addListener(iTwinChannel(channel), listener);\r\n }\r\n /**\r\n * Remove a previously registered listener\r\n * @param channel The name of the channel for the listener previously registered with [[addListener]]\r\n * @param listener The function passed to [[addListener]]\r\n */\r\n public static removeListener(channel: string, listener: IpcListener): void {\r\n this.ipc.removeListener(iTwinChannel(channel), listener);\r\n }\r\n\r\n private static notify(channel: string, briefcase: BriefcaseDb | StandaloneDb, methodName: string, ...args: any[]) {\r\n if (this.isValid)\r\n return this.send(`${channel}:${briefcase.key}`, methodName, ...args);\r\n }\r\n\r\n /** @internal */\r\n public static notifyIpcFrontend<T extends keyof IpcAppNotifications>(methodName: T, ...args: Parameters<IpcAppNotifications[T]>) {\r\n return IpcHost.send(IpcAppChannel.AppNotify, methodName, ...args);\r\n }\r\n\r\n /** @internal */\r\n public static notifyTxns<T extends keyof TxnNotifications>(briefcase: BriefcaseDb | StandaloneDb, methodName: T, ...args: Parameters<TxnNotifications[T]>) {\r\n this.notify(IpcAppChannel.Txns, briefcase, methodName, ...args);\r\n }\r\n\r\n /** @internal */\r\n public static notifyEditingScope<T extends keyof EditingScopeNotifications>(briefcase: BriefcaseDb | StandaloneDb, methodName: T, ...args: Parameters<EditingScopeNotifications[T]>) {\r\n this.notify(IpcAppChannel.EditingScope, briefcase, methodName, ...args);\r\n }\r\n\r\n /**\r\n * Start the backend of an Ipc app.\r\n * @param opt\r\n * @note this method calls [[IModelHost.startup]] internally.\r\n */\r\n public static async startup(opt?: IpcHostOpts): Promise<void> {\r\n this._ipc = opt?.ipcHost?.socket;\r\n if (opt?.ipcHost?.exceptions?.noStack)\r\n this.noStack = true;\r\n\r\n if (this.isValid) { // for tests, we use IpcHost but don't have a frontend\r\n IpcAppHandler.register();\r\n }\r\n\r\n await IModelHost.startup(opt?.iModelHost);\r\n }\r\n\r\n /** Shutdown IpcHost backend. Also calls [[IModelHost.shutdown]] */\r\n public static async shutdown(): Promise<void> {\r\n this._ipc = undefined;\r\n await IModelHost.shutdown();\r\n }\r\n}\r\n\r\n/**\r\n * Base class for all implementations of an Ipc interface.\r\n *\r\n * Create a subclass to implement your Ipc interface. Your class should be declared like this:\r\n * ```ts\r\n * class MyHandler extends IpcHandler implements MyInterface\r\n * ```\r\n * to ensure all methods and signatures are correct.\r\n *\r\n * Then, call `MyClass.register` at startup to connect your class to your channel.\r\n * @public\r\n */\r\nexport abstract class IpcHandler {\r\n /** All subclasses must implement this method to specify their channel name. */\r\n public abstract get channelName(): string;\r\n\r\n /**\r\n * Register this class as the handler for methods on its channel. This static method creates a new instance\r\n * that becomes the handler and is `this` when its methods are called.\r\n * @returns A function that can be called to remove the handler.\r\n * @note this method should only be called once per channel. If it is called multiple times, subsequent calls replace the previous ones.\r\n */\r\n public static register(): RemoveFunction {\r\n const impl = new (this as any)() as IpcHandler; // create an instance of subclass. \"as any\" is necessary because base class is abstract\r\n return IpcHost.handle(impl.channelName, async (_evt: Event, funcName: string, ...args: any[]): Promise<IpcInvokeReturn> => {\r\n try {\r\n const func = (impl as any)[funcName];\r\n if (typeof func !== \"function\")\r\n throw new IModelError(IModelStatus.FunctionNotFound, `Method \"${impl.constructor.name}.${funcName}\" not found on IpcHandler registered for channel: ${impl.channelName}`);\r\n\r\n return { result: await func.call(impl, ...args) };\r\n } catch (err) {\r\n const ret: IpcInvokeReturn = {\r\n error: {\r\n name: (err && typeof (err) === \"object\") ? err.constructor.name : \"Unknown Error\",\r\n message: BentleyError.getErrorMessage(err),\r\n errorNumber: (err as any).errorNumber ?? 0,\r\n },\r\n };\r\n if (!IpcHost.noStack)\r\n ret.error.stack = BentleyError.getErrorStack(err);\r\n return ret;\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Implementation of IpcAppFunctions\r\n */\r\nclass IpcAppHandler extends IpcHandler implements IpcAppFunctions {\r\n public get channelName() { return IpcAppChannel.Functions; }\r\n\r\n public async log(_timestamp: number, level: LogLevel, category: string, message: string, metaData?: any): Promise<void> {\r\n switch (level) {\r\n case LogLevel.Error:\r\n Logger.logError(category, message, metaData);\r\n break;\r\n case LogLevel.Info:\r\n Logger.logInfo(category, message, metaData);\r\n break;\r\n case LogLevel.Trace:\r\n Logger.logTrace(category, message, metaData);\r\n break;\r\n case LogLevel.Warning:\r\n Logger.logWarning(category, message, metaData);\r\n break;\r\n }\r\n }\r\n\r\n public async cancelTileContentRequests(tokenProps: IModelRpcProps, contentIds: TileTreeContentIds[]): Promise<void> {\r\n return cancelTileContentRequests(tokenProps, contentIds);\r\n }\r\n public async cancelElementGraphicsRequests(key: string, requestIds: string[]): Promise<void> {\r\n return IModelDb.findByKey(key).nativeDb.cancelElementGraphicsRequests(requestIds);\r\n }\r\n public async openBriefcase(args: OpenBriefcaseProps): Promise<IModelConnectionProps> {\r\n const db = await BriefcaseDb.open(args);\r\n return db.toJSON();\r\n }\r\n public async openStandalone(filePath: string, openMode: OpenMode, opts?: StandaloneOpenOptions): Promise<IModelConnectionProps> {\r\n return StandaloneDb.openFile(filePath, openMode, opts).getConnectionProps();\r\n }\r\n public async closeIModel(key: string): Promise<void> {\r\n IModelDb.findByKey(key).close();\r\n }\r\n public async saveChanges(key: string, description?: string): Promise<void> {\r\n IModelDb.findByKey(key).saveChanges(description);\r\n }\r\n public async hasPendingTxns(key: string): Promise<boolean> {\r\n return IModelDb.findByKey(key).nativeDb.hasPendingTxns();\r\n }\r\n\r\n public async isUndoPossible(key: string): Promise<boolean> {\r\n return IModelDb.findByKey(key).nativeDb.isUndoPossible();\r\n }\r\n public async isRedoPossible(key: string): Promise<boolean> {\r\n return IModelDb.findByKey(key).nativeDb.isRedoPossible();\r\n }\r\n public async getUndoString(key: string): Promise<string> {\r\n return IModelDb.findByKey(key).nativeDb.getUndoString();\r\n }\r\n public async getRedoString(key: string): Promise<string> {\r\n return IModelDb.findByKey(key).nativeDb.getUndoString();\r\n }\r\n\r\n public async pullChanges(key: string, toIndex?: ChangesetIndex): Promise<ChangesetIndexAndId> {\r\n const iModelDb = BriefcaseDb.findByKey(key);\r\n await iModelDb.pullChanges({ toIndex });\r\n return iModelDb.changeset as ChangesetIndexAndId;\r\n }\r\n public async pushChanges(key: string, description: string): Promise<ChangesetIndexAndId> {\r\n const iModelDb = BriefcaseDb.findByKey(key);\r\n await iModelDb.pushChanges({ description });\r\n return iModelDb.changeset as ChangesetIndexAndId;\r\n }\r\n\r\n public async toggleGraphicalEditingScope(key: string, startSession: boolean): Promise<boolean> {\r\n const val: IModelJsNative.ErrorStatusOrResult<any, boolean> = IModelDb.findByKey(key).nativeDb.setGeometricModelTrackingEnabled(startSession);\r\n if (val.error)\r\n throw new IModelError(val.error.status, \"Failed to toggle graphical editing scope\");\r\n assert(undefined !== val.result);\r\n return val.result;\r\n }\r\n public async isGraphicalEditingSupported(key: string): Promise<boolean> {\r\n return IModelDb.findByKey(key).nativeDb.isGeometricModelTrackingSupported();\r\n }\r\n\r\n public async reverseTxns(key: string, numOperations: number): Promise<IModelStatus> {\r\n return IModelDb.findByKey(key).nativeDb.reverseTxns(numOperations);\r\n }\r\n public async reverseAllTxn(key: string): Promise<IModelStatus> {\r\n return IModelDb.findByKey(key).nativeDb.reverseAll();\r\n }\r\n public async reinstateTxn(key: string): Promise<IModelStatus> {\r\n return IModelDb.findByKey(key).nativeDb.reinstateTxn();\r\n }\r\n public async restartTxnSession(key: string): Promise<void> {\r\n return IModelDb.findByKey(key).nativeDb.restartTxnSession();\r\n }\r\n\r\n public async queryConcurrency(pool: \"io\" | \"cpu\"): Promise<number> {\r\n return IModelHost.platform.queryConcurrency(pool);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"IpcHost.js","sourceRoot":"","sources":["../../src/IpcHost.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 { assert, BentleyError, IModelStatus, Logger, LogLevel, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n ChangesetIndex, ChangesetIndexAndId, EditingScopeNotifications, IModelConnectionProps, IModelError, IModelRpcProps, IpcAppChannel, IpcAppFunctions,\r\n IpcAppNotifications, IpcInvokeReturn, IpcListener, IpcSocketBackend, iTwinChannel, OpenBriefcaseProps, RemoveFunction, StandaloneOpenOptions,\r\n TileTreeContentIds, TxnNotifications,\r\n} from \"@itwin/core-common\";\r\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { BriefcaseDb, IModelDb, StandaloneDb } from \"./IModelDb\";\r\nimport { IModelHost, IModelHostOptions } from \"./IModelHost\";\r\nimport { cancelTileContentRequests } from \"./rpc-impl/IModelTileRpcImpl\";\r\n\r\n/**\r\n * Options for [[IpcHost.startup]]\r\n * @public\r\n */\r\nexport interface IpcHostOpts {\r\n iModelHost?: IModelHostOptions;\r\n ipcHost?: {\r\n /** The Ipc socket to use for communications with frontend. Allows undefined only for headless tests. */\r\n socket?: IpcSocketBackend;\r\n\r\n /** don't send stack information on exceptions */\r\n exceptions?: {\r\n noStack?: boolean;\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Used by applications that have a dedicated backend. IpcHosts may send messages to their corresponding IpcApp.\r\n * @note if either end terminates, the other must too.\r\n * @public\r\n */\r\nexport class IpcHost {\r\n public static noStack = false;\r\n private static _ipc: IpcSocketBackend | undefined;\r\n /** Get the implementation of the [IpcSocketBackend]($common) interface. */\r\n private static get ipc(): IpcSocketBackend { return this._ipc!; } // eslint-disable-line @typescript-eslint/no-non-null-assertion\r\n /** Determine whether Ipc is available for this backend. This will only be true if [[startup]] has been called on this class. */\r\n public static get isValid(): boolean { return undefined !== this._ipc; }\r\n\r\n /**\r\n * Send a message to the frontend over an Ipc channel.\r\n * @param channel the name of the channel matching the name registered with [[IpcApp.addListener]].\r\n * @param data The content of the message.\r\n */\r\n public static send(channel: string, ...data: any[]): void {\r\n this.ipc.send(iTwinChannel(channel), ...data);\r\n }\r\n\r\n /**\r\n * Establish a handler for an Ipc channel to receive [[Frontend.invoke]] calls\r\n * @param channel The name of the channel for this handler.\r\n * @param handler A function that supplies the implementation for `channel`\r\n * @note returns A function to call to remove the handler.\r\n */\r\n public static handle(channel: string, handler: (...args: any[]) => Promise<any>): RemoveFunction {\r\n return this.ipc.handle(iTwinChannel(channel), handler);\r\n }\r\n /**\r\n * Establish a handler to receive messages sent via [[IpcApp.send]].\r\n * @param channel The name of the channel for the messages.\r\n * @param listener A function called when messages are sent over `channel`\r\n * @note returns A function to call to remove the listener.\r\n */\r\n public static addListener(channel: string, listener: IpcListener): RemoveFunction {\r\n return this.ipc.addListener(iTwinChannel(channel), listener);\r\n }\r\n /**\r\n * Remove a previously registered listener\r\n * @param channel The name of the channel for the listener previously registered with [[addListener]]\r\n * @param listener The function passed to [[addListener]]\r\n */\r\n public static removeListener(channel: string, listener: IpcListener): void {\r\n this.ipc.removeListener(iTwinChannel(channel), listener);\r\n }\r\n\r\n private static notify(channel: string, briefcase: BriefcaseDb | StandaloneDb, methodName: string, ...args: any[]) {\r\n if (this.isValid)\r\n return this.send(`${channel}:${briefcase.key}`, methodName, ...args);\r\n }\r\n\r\n /** @internal */\r\n public static notifyIpcFrontend<T extends keyof IpcAppNotifications>(methodName: T, ...args: Parameters<IpcAppNotifications[T]>) {\r\n return IpcHost.send(IpcAppChannel.AppNotify, methodName, ...args);\r\n }\r\n\r\n /** @internal */\r\n public static notifyTxns<T extends keyof TxnNotifications>(briefcase: BriefcaseDb | StandaloneDb, methodName: T, ...args: Parameters<TxnNotifications[T]>) {\r\n this.notify(IpcAppChannel.Txns, briefcase, methodName, ...args);\r\n }\r\n\r\n /** @internal */\r\n public static notifyEditingScope<T extends keyof EditingScopeNotifications>(briefcase: BriefcaseDb | StandaloneDb, methodName: T, ...args: Parameters<EditingScopeNotifications[T]>) {\r\n this.notify(IpcAppChannel.EditingScope, briefcase, methodName, ...args);\r\n }\r\n\r\n /**\r\n * Start the backend of an Ipc app.\r\n * @param opt\r\n * @note this method calls [[IModelHost.startup]] internally.\r\n */\r\n public static async startup(opt?: IpcHostOpts): Promise<void> {\r\n this._ipc = opt?.ipcHost?.socket;\r\n if (opt?.ipcHost?.exceptions?.noStack)\r\n this.noStack = true;\r\n\r\n if (this.isValid) { // for tests, we use IpcHost but don't have a frontend\r\n IpcAppHandler.register();\r\n }\r\n\r\n await IModelHost.startup(opt?.iModelHost);\r\n }\r\n\r\n /** Shutdown IpcHost backend. Also calls [[IModelHost.shutdown]] */\r\n public static async shutdown(): Promise<void> {\r\n this._ipc = undefined;\r\n await IModelHost.shutdown();\r\n }\r\n}\r\n\r\n/**\r\n * Base class for all implementations of an Ipc interface.\r\n *\r\n * Create a subclass to implement your Ipc interface. Your class should be declared like this:\r\n * ```ts\r\n * class MyHandler extends IpcHandler implements MyInterface\r\n * ```\r\n * to ensure all methods and signatures are correct.\r\n *\r\n * Then, call `MyClass.register` at startup to connect your class to your channel.\r\n * @public\r\n */\r\nexport abstract class IpcHandler {\r\n /** All subclasses must implement this method to specify their channel name. */\r\n public abstract get channelName(): string;\r\n\r\n /**\r\n * Register this class as the handler for methods on its channel. This static method creates a new instance\r\n * that becomes the handler and is `this` when its methods are called.\r\n * @returns A function that can be called to remove the handler.\r\n * @note this method should only be called once per channel. If it is called multiple times, subsequent calls replace the previous ones.\r\n */\r\n public static register(): RemoveFunction {\r\n const impl = new (this as any)() as IpcHandler; // create an instance of subclass. \"as any\" is necessary because base class is abstract\r\n return IpcHost.handle(impl.channelName, async (_evt: Event, funcName: string, ...args: any[]): Promise<IpcInvokeReturn> => {\r\n try {\r\n const func = (impl as any)[funcName];\r\n if (typeof func !== \"function\")\r\n throw new IModelError(IModelStatus.FunctionNotFound, `Method \"${impl.constructor.name}.${funcName}\" not found on IpcHandler registered for channel: ${impl.channelName}`);\r\n\r\n return { result: await func.call(impl, ...args) };\r\n } catch (err: any) {\r\n const ret: IpcInvokeReturn = {\r\n error: {\r\n name: (err && typeof err === \"object\") ? err.constructor.name : \"Unknown Error\",\r\n message: BentleyError.getErrorMessage(err),\r\n errorNumber: err.errorNumber ?? 0,\r\n },\r\n };\r\n if (!IpcHost.noStack)\r\n ret.error.stack = BentleyError.getErrorStack(err);\r\n return ret;\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Implementation of IpcAppFunctions\r\n */\r\nclass IpcAppHandler extends IpcHandler implements IpcAppFunctions {\r\n public get channelName() { return IpcAppChannel.Functions; }\r\n\r\n public async log(_timestamp: number, level: LogLevel, category: string, message: string, metaData?: any): Promise<void> {\r\n switch (level) {\r\n case LogLevel.Error:\r\n Logger.logError(category, message, metaData);\r\n break;\r\n case LogLevel.Info:\r\n Logger.logInfo(category, message, metaData);\r\n break;\r\n case LogLevel.Trace:\r\n Logger.logTrace(category, message, metaData);\r\n break;\r\n case LogLevel.Warning:\r\n Logger.logWarning(category, message, metaData);\r\n break;\r\n }\r\n }\r\n\r\n public async cancelTileContentRequests(tokenProps: IModelRpcProps, contentIds: TileTreeContentIds[]): Promise<void> {\r\n return cancelTileContentRequests(tokenProps, contentIds);\r\n }\r\n public async cancelElementGraphicsRequests(key: string, requestIds: string[]): Promise<void> {\r\n return IModelDb.findByKey(key).nativeDb.cancelElementGraphicsRequests(requestIds);\r\n }\r\n public async openBriefcase(args: OpenBriefcaseProps): Promise<IModelConnectionProps> {\r\n const db = await BriefcaseDb.open(args);\r\n return db.toJSON();\r\n }\r\n public async openStandalone(filePath: string, openMode: OpenMode, opts?: StandaloneOpenOptions): Promise<IModelConnectionProps> {\r\n return StandaloneDb.openFile(filePath, openMode, opts).getConnectionProps();\r\n }\r\n public async closeIModel(key: string): Promise<void> {\r\n IModelDb.findByKey(key).close();\r\n }\r\n public async saveChanges(key: string, description?: string): Promise<void> {\r\n IModelDb.findByKey(key).saveChanges(description);\r\n }\r\n public async hasPendingTxns(key: string): Promise<boolean> {\r\n return IModelDb.findByKey(key).nativeDb.hasPendingTxns();\r\n }\r\n\r\n public async isUndoPossible(key: string): Promise<boolean> {\r\n return IModelDb.findByKey(key).nativeDb.isUndoPossible();\r\n }\r\n public async isRedoPossible(key: string): Promise<boolean> {\r\n return IModelDb.findByKey(key).nativeDb.isRedoPossible();\r\n }\r\n public async getUndoString(key: string): Promise<string> {\r\n return IModelDb.findByKey(key).nativeDb.getUndoString();\r\n }\r\n public async getRedoString(key: string): Promise<string> {\r\n return IModelDb.findByKey(key).nativeDb.getUndoString();\r\n }\r\n\r\n public async pullChanges(key: string, toIndex?: ChangesetIndex): Promise<ChangesetIndexAndId> {\r\n const iModelDb = BriefcaseDb.findByKey(key);\r\n await iModelDb.pullChanges({ toIndex });\r\n return iModelDb.changeset as ChangesetIndexAndId;\r\n }\r\n public async pushChanges(key: string, description: string): Promise<ChangesetIndexAndId> {\r\n const iModelDb = BriefcaseDb.findByKey(key);\r\n await iModelDb.pushChanges({ description });\r\n return iModelDb.changeset as ChangesetIndexAndId;\r\n }\r\n\r\n public async toggleGraphicalEditingScope(key: string, startSession: boolean): Promise<boolean> {\r\n const val: IModelJsNative.ErrorStatusOrResult<any, boolean> = IModelDb.findByKey(key).nativeDb.setGeometricModelTrackingEnabled(startSession);\r\n if (val.error)\r\n throw new IModelError(val.error.status, \"Failed to toggle graphical editing scope\");\r\n assert(undefined !== val.result);\r\n return val.result;\r\n }\r\n public async isGraphicalEditingSupported(key: string): Promise<boolean> {\r\n return IModelDb.findByKey(key).nativeDb.isGeometricModelTrackingSupported();\r\n }\r\n\r\n public async reverseTxns(key: string, numOperations: number): Promise<IModelStatus> {\r\n return IModelDb.findByKey(key).nativeDb.reverseTxns(numOperations);\r\n }\r\n public async reverseAllTxn(key: string): Promise<IModelStatus> {\r\n return IModelDb.findByKey(key).nativeDb.reverseAll();\r\n }\r\n public async reinstateTxn(key: string): Promise<IModelStatus> {\r\n return IModelDb.findByKey(key).nativeDb.reinstateTxn();\r\n }\r\n public async restartTxnSession(key: string): Promise<void> {\r\n return IModelDb.findByKey(key).nativeDb.restartTxnSession();\r\n }\r\n\r\n public async queryConcurrency(pool: \"io\" | \"cpu\"): Promise<number> {\r\n return IModelHost.platform.queryConcurrency(pool);\r\n }\r\n}\r\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module IModelHost
|
|
3
3
|
*/
|
|
4
4
|
import * as ws from "ws";
|
|
5
|
-
import {
|
|
5
|
+
import { IModelHostOptions } from "./IModelHost";
|
|
6
6
|
/** @internal */
|
|
7
7
|
export interface LocalhostIpcHostOpts {
|
|
8
8
|
socketPort?: number;
|
|
@@ -15,7 +15,7 @@ export declare class LocalhostIpcHost {
|
|
|
15
15
|
static connect(connection: ws): void;
|
|
16
16
|
static startup(opts?: {
|
|
17
17
|
localhostIpcHost?: LocalhostIpcHostOpts;
|
|
18
|
-
iModelHost?:
|
|
18
|
+
iModelHost?: IModelHostOptions;
|
|
19
19
|
}): Promise<void>;
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=LocalhostIpcHost.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalhostIpcHost.d.ts","sourceRoot":"","sources":["../../src/LocalhostIpcHost.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAGzB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"LocalhostIpcHost.d.ts","sourceRoot":"","sources":["../../src/LocalhostIpcHost.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAGzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAuDD,gBAAgB;AAChB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsB;WAE9B,OAAO,CAAC,UAAU,EAAE,EAAE;WAIhB,OAAO,CAAC,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;QAAC,UAAU,CAAC,EAAE,iBAAiB,CAAA;KAAE;CAgB/G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalhostIpcHost.js","sourceRoot":"","sources":["../../src/LocalhostIpcHost.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,yBAAyB;AACzB,oDAAgK;AAChK,uCAAgD;AAShD,MAAM,cAAe,SAAQ,mCAAqB;IAIhD,YAAmB,IAA0B;;QAC3C,KAAK,EAAE,CAAC;QAHF,iBAAY,GAAoB,IAAI,GAAG,EAAE,CAAC;QAKhD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,IAAI,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;SACrF;IACH,CAAC;IAEM,IAAI,CAAC,OAA4B;QACtC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;YAC7C,OAAO,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACtC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,OAAO,CAAC,UAAc;QAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAEtC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC5D,IAAI,iCAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACrC,OAAO;aACR;YAED,KAAK,MAAM,QAAQ,IAAI,0BAAY,CAAC,SAAS,EAAE;gBAC7C,QAAQ,CAAC,EAAW,EAAE,OAAO,CAAC,CAAC;aAChC;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,UAAW,SAAQ,oBAAU;IAAnC;;QACS,gBAAW,GAAG,KAAK,CAAC;IAO7B,CAAC;IALQ,KAAK,CAAC,OAAO,CAAC,IAA2B;QAC9C,MAAM,UAAU,GAAG,kCAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC;QACjD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;IAC7F,CAAC;CACF;AAED,gBAAgB;AAChB,MAAa,gBAAgB;IAIpB,MAAM,CAAC,OAAO,CAAC,UAAc;QACjC,0BAAY,CAAC,SAA4B,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACjE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"LocalhostIpcHost.js","sourceRoot":"","sources":["../../src/LocalhostIpcHost.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\nimport * as ws from \"ws\";\r\nimport { InterceptedRpcRequest, IpcWebSocket, IpcWebSocketBackend, IpcWebSocketMessage, IpcWebSocketTransport, RpcSessionInvocation } from \"@itwin/core-common\";\r\nimport { IpcHandler, IpcHost } from \"./IpcHost\";\r\nimport { IModelHostOptions } from \"./IModelHost\";\r\n\r\n/** @internal */\r\nexport interface LocalhostIpcHostOpts {\r\n socketPort?: number;\r\n noServer?: boolean;\r\n}\r\n\r\nclass LocalTransport extends IpcWebSocketTransport {\r\n private _server: ws.Server | undefined;\r\n private _connections: Map<ws, number> = new Map();\r\n\r\n public constructor(opts: LocalhostIpcHostOpts) {\r\n super();\r\n\r\n if (!opts.noServer) {\r\n this._server = new ws.Server({ port: opts.socketPort ?? 3002 });\r\n this._server.on(\"connection\", (connection) => LocalhostIpcHost.connect(connection));\r\n }\r\n }\r\n\r\n public send(message: IpcWebSocketMessage): void {\r\n this._connections.forEach((last, connection) => {\r\n message.sequence = last + 1;\r\n this._connections.set(connection, message.sequence);\r\n const parts = this.serialize(message);\r\n parts.forEach((part) => connection.send(part));\r\n });\r\n }\r\n\r\n public connect(connection: ws) {\r\n this._connections.set(connection, -1);\r\n\r\n connection.on(\"message\", async (data) => {\r\n const message = await this.notifyIncoming(data, connection);\r\n if (IpcWebSocketMessage.skip(message)) {\r\n return;\r\n }\r\n\r\n for (const listener of IpcWebSocket.receivers) {\r\n listener({} as Event, message);\r\n }\r\n });\r\n\r\n connection.on(\"close\", () => {\r\n this._connections.delete(connection);\r\n this.notifyClose(connection);\r\n });\r\n }\r\n}\r\n\r\nclass RpcHandler extends IpcHandler {\r\n public channelName = \"RPC\";\r\n\r\n public async request(info: InterceptedRpcRequest) {\r\n const invocation = RpcSessionInvocation.create(info);\r\n const fulfillment = await invocation.fulfillment;\r\n return invocation.rejected ? Promise.reject(fulfillment.rawResult) : fulfillment.rawResult;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class LocalhostIpcHost {\r\n private static _initialized = false;\r\n private static _socket: IpcWebSocketBackend;\r\n\r\n public static connect(connection: ws) {\r\n (IpcWebSocket.transport as LocalTransport).connect(connection);\r\n }\r\n\r\n public static async startup(opts?: { localhostIpcHost?: LocalhostIpcHostOpts, iModelHost?: IModelHostOptions }) {\r\n let registerHandler = false;\r\n\r\n if (!this._initialized) {\r\n registerHandler = true;\r\n IpcWebSocket.transport = new LocalTransport(opts?.localhostIpcHost ?? {});\r\n this._socket = new IpcWebSocketBackend();\r\n this._initialized = true;\r\n }\r\n\r\n await IpcHost.startup({ ipcHost: { socket: this._socket }, iModelHost: opts?.iModelHost });\r\n\r\n if (registerHandler) {\r\n RpcHandler.register();\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -204,7 +204,7 @@ export interface Workspace {
|
|
|
204
204
|
*/
|
|
205
205
|
loadSettingsDictionary(settingRsc: WorkspaceResource.Name, db: WorkspaceDb, priority: SettingsPriority): void;
|
|
206
206
|
/** Close this Workspace. All WorkspaceContainers are dropped. */
|
|
207
|
-
close():
|
|
207
|
+
close(): void;
|
|
208
208
|
}
|
|
209
209
|
/**
|
|
210
210
|
* A WorkspaceContainer holds WorkspaceDbs.
|
|
@@ -230,7 +230,7 @@ export interface WorkspaceContainer {
|
|
|
230
230
|
/** Close and remove a currently opened [[WorkspaceDb]] from this Workspace. */
|
|
231
231
|
dropWorkspaceDb(container: WorkspaceDb): void;
|
|
232
232
|
/** Close this WorkspaceContainer. All currently opened WorkspaceDbs are dropped. */
|
|
233
|
-
close():
|
|
233
|
+
close(): void;
|
|
234
234
|
}
|
|
235
235
|
/** @internal */
|
|
236
236
|
export declare class ITwinWorkspace implements Workspace {
|
|
@@ -247,7 +247,7 @@ export declare class ITwinWorkspace implements Workspace {
|
|
|
247
247
|
getWorkspaceDbFromProps(dbProps: WorkspaceDb.Props, containerProps: WorkspaceContainer.Props, account?: WorkspaceAccount.Props): WorkspaceDb;
|
|
248
248
|
getWorkspaceDb(dbAlias: string): WorkspaceDb;
|
|
249
249
|
loadSettingsDictionary(settingRsc: WorkspaceResource.Name, db: WorkspaceDb, priority: SettingsPriority): void;
|
|
250
|
-
close():
|
|
250
|
+
close(): void;
|
|
251
251
|
resolveAccount(accountName: string): WorkspaceAccount.Props;
|
|
252
252
|
resolveContainer(containerName: string): WorkspaceContainer.Props & WorkspaceAccount.Alias;
|
|
253
253
|
resolveDatabase(databaseName: string): WorkspaceDb.Props & WorkspaceContainer.Alias;
|
|
@@ -295,8 +295,8 @@ export declare class ITwinWorkspaceContainer implements WorkspaceContainer {
|
|
|
295
295
|
resolveDbFileName(props: WorkspaceDb.Props): WorkspaceDb.DbFullName;
|
|
296
296
|
addWorkspaceDb(toAdd: ITwinWorkspaceDb): void;
|
|
297
297
|
getWorkspaceDb(props: WorkspaceDb.Props): WorkspaceDb;
|
|
298
|
-
dropWorkspaceDb(toDrop: WorkspaceDb):
|
|
299
|
-
close():
|
|
298
|
+
dropWorkspaceDb(toDrop: WorkspaceDb): void;
|
|
299
|
+
close(): void;
|
|
300
300
|
/** Delete all local files extracted by [[WorkspaceDb.getFile]] for this container. */
|
|
301
301
|
purgeContainerFiles(): void;
|
|
302
302
|
}
|
|
@@ -325,7 +325,7 @@ export declare class ITwinWorkspaceDb implements WorkspaceDb {
|
|
|
325
325
|
} | undefined;
|
|
326
326
|
constructor(props: WorkspaceDb.Props, container: WorkspaceContainer);
|
|
327
327
|
open(): void;
|
|
328
|
-
close():
|
|
328
|
+
close(): void;
|
|
329
329
|
getString(rscName: WorkspaceResource.Name): string | undefined;
|
|
330
330
|
/** Get a BlobIO reader for a blob WorkspaceResource.
|
|
331
331
|
* @note when finished, caller *must* call `close` on the BlobIO.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../../src/workspace/Workspace.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAE,WAAW,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"Workspace.d.ts","sourceRoot":"","sources":["../../../src/workspace/Workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ class ITwinWorkspace {
|
|
|
36
36
|
var _a;
|
|
37
37
|
this._containers = new Map();
|
|
38
38
|
this.settings = settings;
|
|
39
|
-
this.containerDir = (_a = opts === null || opts === void 0 ? void 0 : opts.containerDir) !== null && _a !== void 0 ? _a : (0, path_1.join)(
|
|
39
|
+
this.containerDir = (_a = opts === null || opts === void 0 ? void 0 : opts.containerDir) !== null && _a !== void 0 ? _a : (0, path_1.join)(IModelHost_1.IModelHost.cacheDir, "Workspace");
|
|
40
40
|
this._cloudCacheProps = opts === null || opts === void 0 ? void 0 : opts.cloudCacheProps;
|
|
41
41
|
let settingsFiles = opts === null || opts === void 0 ? void 0 : opts.settingsFiles;
|
|
42
42
|
if (settingsFiles) {
|
|
@@ -57,7 +57,13 @@ class ITwinWorkspace {
|
|
|
57
57
|
IModelJsFs_1.IModelJsFs.recursiveMkDirSync(cacheProps.rootDir);
|
|
58
58
|
if (cacheProps.clearContents)
|
|
59
59
|
fs.emptyDirSync(cacheProps.rootDir);
|
|
60
|
-
|
|
60
|
+
try {
|
|
61
|
+
this._cloudCache = new IModelHost_1.IModelHost.platform.CloudCache(cacheProps);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
core_bentley_1.Logger.logError("workspace", `error creating workspace cloud cache in ${cacheProps.rootDir}`);
|
|
65
|
+
throw e;
|
|
66
|
+
}
|
|
61
67
|
}
|
|
62
68
|
return this._cloudCache;
|
|
63
69
|
}
|
|
@@ -92,14 +98,15 @@ class ITwinWorkspace {
|
|
|
92
98
|
throw new Error(`could not load setting resource ${settingRsc}`);
|
|
93
99
|
this.settings.addJson(`${db.container.id}/${db.dbName}/${settingRsc}`, priority, setting);
|
|
94
100
|
}
|
|
95
|
-
|
|
96
|
-
var _a;
|
|
101
|
+
close() {
|
|
97
102
|
this.settings.close();
|
|
98
103
|
for (const [_id, container] of this._containers)
|
|
99
|
-
|
|
104
|
+
container.close();
|
|
100
105
|
this._containers.clear();
|
|
101
|
-
(
|
|
102
|
-
|
|
106
|
+
if (this._cloudCache) {
|
|
107
|
+
this._cloudCache.destroy();
|
|
108
|
+
this._cloudCache = undefined;
|
|
109
|
+
}
|
|
103
110
|
}
|
|
104
111
|
resolveAccount(accountName) {
|
|
105
112
|
const resolved = this.settings.resolveSetting(exports.WorkspaceSetting.Accounts, (val) => {
|
|
@@ -270,18 +277,18 @@ class ITwinWorkspaceContainer {
|
|
|
270
277
|
db.open();
|
|
271
278
|
return db;
|
|
272
279
|
}
|
|
273
|
-
|
|
280
|
+
dropWorkspaceDb(toDrop) {
|
|
274
281
|
const name = toDrop.dbName;
|
|
275
282
|
const wsDb = this._wsDbs.get(name);
|
|
276
283
|
if (wsDb === toDrop) {
|
|
277
284
|
this._wsDbs.delete(name);
|
|
278
|
-
|
|
285
|
+
wsDb.close();
|
|
279
286
|
}
|
|
280
287
|
}
|
|
281
|
-
|
|
288
|
+
close() {
|
|
282
289
|
var _a;
|
|
283
290
|
for (const [_name, db] of this._wsDbs)
|
|
284
|
-
|
|
291
|
+
db.close();
|
|
285
292
|
this._wsDbs.clear();
|
|
286
293
|
(_a = this.cloudContainer) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
287
294
|
}
|
|
@@ -322,7 +329,7 @@ class ITwinWorkspaceDb {
|
|
|
322
329
|
open() {
|
|
323
330
|
this.sqliteDb.openDb(this.dbFileName, core_bentley_1.OpenMode.Readonly, this.container.cloudContainer);
|
|
324
331
|
}
|
|
325
|
-
|
|
332
|
+
close() {
|
|
326
333
|
if (this.isOpen) {
|
|
327
334
|
this.onClose.raiseEvent();
|
|
328
335
|
this.sqliteDb.closeDb();
|