@itwin/core-backend 4.0.0-dev.1 → 4.0.0-dev.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +68 -1
- package/lib/cjs/BackendHubAccess.d.ts +226 -224
- package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
- package/lib/cjs/BackendHubAccess.js +41 -41
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.d.ts +90 -91
- package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js +98 -99
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.d.ts +21 -21
- package/lib/cjs/BisCoreSchema.js +60 -60
- package/lib/cjs/BlobContainerService.d.ts +120 -0
- package/lib/cjs/BlobContainerService.d.ts.map +1 -0
- package/lib/cjs/BlobContainerService.js +18 -0
- package/lib/cjs/BlobContainerService.js.map +1 -0
- package/lib/cjs/BriefcaseManager.d.ts +184 -170
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +421 -414
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/Category.d.ts +153 -153
- package/lib/cjs/Category.js +243 -243
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.d.ts +187 -187
- package/lib/cjs/ChangeSummaryManager.js +444 -445
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.d.ts +99 -99
- package/lib/cjs/ChangedElementsDb.js +165 -165
- package/lib/cjs/ChangedElementsManager.d.ts +39 -39
- package/lib/cjs/ChangedElementsManager.js +88 -88
- package/lib/cjs/ChannelControl.d.ts +70 -0
- package/lib/cjs/ChannelControl.d.ts.map +1 -0
- package/lib/cjs/ChannelControl.js +89 -0
- package/lib/cjs/ChannelControl.js.map +1 -0
- package/lib/cjs/CheckpointManager.d.ts +121 -121
- package/lib/cjs/CheckpointManager.d.ts.map +1 -1
- package/lib/cjs/CheckpointManager.js +351 -349
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.d.ts +79 -79
- package/lib/cjs/ClassRegistry.js +249 -245
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +572 -350
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js +374 -153
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.d.ts +399 -396
- package/lib/cjs/CodeService.d.ts.map +1 -1
- package/lib/cjs/CodeService.js +63 -63
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +58 -55
- package/lib/cjs/CodeSpecs.d.ts.map +1 -1
- package/lib/cjs/CodeSpecs.js +154 -124
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.d.ts +13 -13
- package/lib/cjs/ConcurrentQuery.d.ts.map +1 -1
- package/lib/cjs/ConcurrentQuery.js +36 -36
- package/lib/cjs/CustomViewState3dCreator.d.ts +21 -21
- package/lib/cjs/CustomViewState3dCreator.d.ts.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js +80 -81
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.d.ts +74 -71
- package/lib/cjs/DevTools.d.ts.map +1 -1
- package/lib/cjs/DevTools.js +156 -154
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +104 -106
- package/lib/cjs/DisplayStyle.d.ts.map +1 -1
- package/lib/cjs/DisplayStyle.js +251 -256
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +194 -191
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +351 -350
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.d.ts +18 -18
- package/lib/cjs/ECSchemaXmlContext.d.ts.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js +41 -41
- package/lib/cjs/ECSqlStatement.d.ts +473 -473
- package/lib/cjs/ECSqlStatement.js +791 -791
- package/lib/cjs/Element.d.ts +1105 -1109
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +1416 -1427
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +175 -179
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +202 -211
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.d.ts +9 -9
- package/lib/cjs/ElementGraphics.js +41 -41
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts +162 -162
- package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
- package/lib/cjs/ElementTreeWalker.js +409 -409
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.d.ts +102 -106
- package/lib/cjs/Entity.d.ts.map +1 -1
- package/lib/cjs/Entity.js +118 -134
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.d.ts +49 -49
- package/lib/cjs/EntityReferences.d.ts.map +1 -1
- package/lib/cjs/EntityReferences.js +95 -95
- package/lib/cjs/ExportGraphics.d.ts +317 -317
- package/lib/cjs/ExportGraphics.d.ts.map +1 -1
- package/lib/cjs/ExportGraphics.js +208 -208
- package/lib/cjs/ExternalSource.d.ts +95 -96
- package/lib/cjs/ExternalSource.d.ts.map +1 -1
- package/lib/cjs/ExternalSource.js +130 -131
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.d.ts +19 -19
- package/lib/cjs/GeoCoordConfig.js +85 -85
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeometrySummary.d.ts +4 -4
- package/lib/cjs/GeometrySummary.js +333 -333
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/HubMock.d.ts +94 -94
- package/lib/cjs/HubMock.js +220 -222
- package/lib/cjs/HubMock.js.map +1 -1
- package/lib/cjs/IModelCloneContext.d.ts +8 -8
- package/lib/cjs/IModelCloneContext.d.ts.map +1 -1
- package/lib/cjs/IModelCloneContext.js +15 -15
- package/lib/cjs/IModelDb.d.ts +1222 -1196
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +2389 -2392
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts +89 -89
- package/lib/cjs/IModelElementCloneContext.js +159 -159
- package/lib/cjs/IModelHost.d.ts +370 -369
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +476 -496
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelJsFs.d.ts +62 -62
- package/lib/cjs/IModelJsFs.js +139 -140
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/IpcHost.d.ts +104 -104
- package/lib/cjs/IpcHost.js +276 -278
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +311 -311
- package/lib/cjs/LineStyle.js +295 -295
- package/lib/cjs/LocalHub.d.ts +162 -162
- package/lib/cjs/LocalHub.d.ts.map +1 -1
- package/lib/cjs/LocalHub.js +579 -584
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.d.ts +21 -20
- package/lib/cjs/LocalhostIpcHost.d.ts.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js +79 -81
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/Material.d.ts +131 -131
- package/lib/cjs/Material.d.ts.map +1 -1
- package/lib/cjs/Material.js +185 -181
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +391 -392
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js +487 -485
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.d.ts +51 -51
- package/lib/cjs/NativeAppStorage.js +202 -202
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.d.ts +52 -52
- package/lib/cjs/NativeHost.d.ts.map +1 -1
- package/lib/cjs/NativeHost.js +158 -163
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.d.ts +156 -156
- package/lib/cjs/NavigationRelationship.js +225 -225
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.d.ts +51 -51
- package/lib/cjs/PromiseMemoizer.d.ts.map +1 -1
- package/lib/cjs/PromiseMemoizer.js +101 -101
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.d.ts +123 -132
- package/lib/cjs/PropertyStore.d.ts.map +1 -1
- package/lib/cjs/PropertyStore.js +179 -11
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.d.ts +413 -416
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +491 -494
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.d.ts +5 -5
- package/lib/cjs/RpcBackend.js +32 -32
- package/lib/cjs/SQLiteDb.d.ts +317 -219
- package/lib/cjs/SQLiteDb.d.ts.map +1 -1
- package/lib/cjs/SQLiteDb.js +318 -214
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.d.ts +55 -55
- package/lib/cjs/Schema.js +83 -83
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/ServerBasedLocks.d.ts +57 -57
- package/lib/cjs/ServerBasedLocks.js +168 -168
- package/lib/cjs/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/SqliteStatement.d.ts +360 -360
- package/lib/cjs/SqliteStatement.d.ts.map +1 -1
- package/lib/cjs/SqliteStatement.js +586 -586
- package/lib/cjs/Texture.d.ts +58 -58
- package/lib/cjs/Texture.js +82 -82
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.d.ts +44 -18
- package/lib/cjs/TileStorage.d.ts.map +1 -1
- package/lib/cjs/TileStorage.js +109 -90
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +202 -202
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +356 -356
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +429 -439
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +640 -646
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.d.ts +13 -13
- package/lib/cjs/ViewStateHydrator.js +103 -103
- package/lib/cjs/core-backend.d.ts +181 -184
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +205 -204
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.d.ts +101 -101
- package/lib/cjs/domains/FunctionalElements.js +145 -145
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.d.ts +13 -13
- package/lib/cjs/domains/FunctionalSchema.d.ts.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js +39 -40
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.d.ts +177 -177
- package/lib/cjs/domains/GenericElements.js +263 -263
- package/lib/cjs/domains/GenericSchema.d.ts +10 -10
- package/lib/cjs/domains/GenericSchema.js +28 -28
- package/lib/cjs/rpc/multipart.d.ts +11 -11
- package/lib/cjs/rpc/multipart.js +71 -71
- package/lib/cjs/rpc/tracing.d.ts +28 -28
- package/lib/cjs/rpc/tracing.js +73 -74
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.d.ts +9 -9
- package/lib/cjs/rpc/web/logging.js +43 -43
- package/lib/cjs/rpc/web/request.d.ts +6 -6
- package/lib/cjs/rpc/web/request.js +73 -74
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.d.ts +6 -6
- package/lib/cjs/rpc/web/response.js +105 -106
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.d.ts +15 -15
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js +32 -32
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +47 -47
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +293 -294
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts +20 -22
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +193 -205
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +36 -36
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js +166 -168
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +16 -16
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +42 -43
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/WipRpcImpl.d.ts +15 -15
- package/lib/cjs/rpc-impl/WipRpcImpl.js +37 -37
- package/lib/cjs/workspace/Settings.d.ts +186 -186
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js +155 -155
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.d.ts +75 -75
- package/lib/cjs/workspace/SettingsSchemas.js +190 -191
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +411 -414
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js +521 -543
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/package.json +25 -28
- package/lib/cjs/AliCloudStorageService.d.ts +0 -24
- package/lib/cjs/AliCloudStorageService.d.ts.map +0 -1
- package/lib/cjs/AliCloudStorageService.js +0 -72
- package/lib/cjs/AliCloudStorageService.js.map +0 -1
- package/lib/cjs/CloudStorageBackend.d.ts +0 -59
- package/lib/cjs/CloudStorageBackend.d.ts.map +0 -1
- package/lib/cjs/CloudStorageBackend.js +0 -174
- package/lib/cjs/CloudStorageBackend.js.map +0 -1
package/lib/cjs/IModelHost.js
CHANGED
|
@@ -1,497 +1,477 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
/** @packageDocumentation
|
|
7
|
-
* @module IModelHost
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.FileNameResolver = exports.KnownLocations = exports.Platform = exports.IModelHost = exports.IModelHostConfiguration = void 0;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const BackendLoggerCategory_1 = require("./BackendLoggerCategory");
|
|
22
|
-
const BisCoreSchema_1 = require("./BisCoreSchema");
|
|
23
|
-
const BriefcaseManager_1 = require("./BriefcaseManager");
|
|
24
|
-
const
|
|
25
|
-
const FunctionalSchema_1 = require("./domains/FunctionalSchema");
|
|
26
|
-
const GenericSchema_1 = require("./domains/GenericSchema");
|
|
27
|
-
const GeoCoordConfig_1 = require("./GeoCoordConfig");
|
|
28
|
-
const IModelJsFs_1 = require("./IModelJsFs");
|
|
29
|
-
const DevToolsRpcImpl_1 = require("./rpc-impl/DevToolsRpcImpl");
|
|
30
|
-
const IModelReadRpcImpl_1 = require("./rpc-impl/IModelReadRpcImpl");
|
|
31
|
-
const IModelTileRpcImpl_1 = require("./rpc-impl/IModelTileRpcImpl");
|
|
32
|
-
const SnapshotIModelRpcImpl_1 = require("./rpc-impl/SnapshotIModelRpcImpl");
|
|
33
|
-
const WipRpcImpl_1 = require("./rpc-impl/WipRpcImpl");
|
|
34
|
-
const RpcBackend_1 = require("./RpcBackend");
|
|
35
|
-
const TileStorage_1 = require("./TileStorage");
|
|
36
|
-
const Settings_1 = require("./workspace/Settings");
|
|
37
|
-
const SettingsSchemas_1 = require("./workspace/SettingsSchemas");
|
|
38
|
-
const Workspace_1 = require("./workspace/Workspace");
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
/** @internal */
|
|
48
|
-
this.
|
|
49
|
-
/** @internal */
|
|
50
|
-
this.
|
|
51
|
-
/** @internal */
|
|
52
|
-
this.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
IModelHostConfiguration.
|
|
58
|
-
IModelHostConfiguration.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
static
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
this.
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
IModelHost.
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
return
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* @internal
|
|
337
|
-
*/
|
|
338
|
-
static get
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
(0
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
if (
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
IModelHost.
|
|
424
|
-
|
|
425
|
-
/**
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
/**
|
|
430
|
-
static get
|
|
431
|
-
return
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
}
|
|
478
|
-
/** Resolve the input file name, which may be a partial name, into a full path file name.
|
|
479
|
-
* @param inFileName The partial file name.
|
|
480
|
-
* @returns The resolved full path file name or `undefined` if not found.
|
|
481
|
-
*/
|
|
482
|
-
tryResolveFileName(inFileName) { return inFileName; }
|
|
483
|
-
/** Resolve the input file name, which may be a partial name, into a full path file name.
|
|
484
|
-
* @param inFileName The partial file name.
|
|
485
|
-
* @returns The resolved full path file name.
|
|
486
|
-
* @throws [[IModelError]] if not found.
|
|
487
|
-
*/
|
|
488
|
-
resolveFileName(inFileName) {
|
|
489
|
-
const resolvedFileName = this.tryResolveFileName(inFileName);
|
|
490
|
-
if (undefined === resolvedFileName) {
|
|
491
|
-
throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `${inFileName} not resolved`);
|
|
492
|
-
}
|
|
493
|
-
return resolvedFileName;
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
exports.FileNameResolver = FileNameResolver;
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
/** @packageDocumentation
|
|
7
|
+
* @module IModelHost
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.FileNameResolver = exports.KnownLocations = exports.Platform = exports.IModelHost = exports.IModelHostConfiguration = void 0;
|
|
11
|
+
// To avoid circular load errors, the "Element" classes must be loaded before IModelHost.
|
|
12
|
+
require("./IModelDb"); // DO NOT REMOVE OR MOVE THIS LINE!
|
|
13
|
+
const os = require("os");
|
|
14
|
+
const imodeljs_native_1 = require("@bentley/imodeljs-native");
|
|
15
|
+
const cloud_agnostic_core_1 = require("@itwin/cloud-agnostic-core");
|
|
16
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
17
|
+
const core_common_1 = require("@itwin/core-common");
|
|
18
|
+
const core_telemetry_1 = require("@itwin/core-telemetry");
|
|
19
|
+
const object_storage_azure_1 = require("@itwin/object-storage-azure");
|
|
20
|
+
const object_storage_core_1 = require("@itwin/object-storage-core");
|
|
21
|
+
const BackendLoggerCategory_1 = require("./BackendLoggerCategory");
|
|
22
|
+
const BisCoreSchema_1 = require("./BisCoreSchema");
|
|
23
|
+
const BriefcaseManager_1 = require("./BriefcaseManager");
|
|
24
|
+
const CloudSqlite_1 = require("./CloudSqlite");
|
|
25
|
+
const FunctionalSchema_1 = require("./domains/FunctionalSchema");
|
|
26
|
+
const GenericSchema_1 = require("./domains/GenericSchema");
|
|
27
|
+
const GeoCoordConfig_1 = require("./GeoCoordConfig");
|
|
28
|
+
const IModelJsFs_1 = require("./IModelJsFs");
|
|
29
|
+
const DevToolsRpcImpl_1 = require("./rpc-impl/DevToolsRpcImpl");
|
|
30
|
+
const IModelReadRpcImpl_1 = require("./rpc-impl/IModelReadRpcImpl");
|
|
31
|
+
const IModelTileRpcImpl_1 = require("./rpc-impl/IModelTileRpcImpl");
|
|
32
|
+
const SnapshotIModelRpcImpl_1 = require("./rpc-impl/SnapshotIModelRpcImpl");
|
|
33
|
+
const WipRpcImpl_1 = require("./rpc-impl/WipRpcImpl");
|
|
34
|
+
const RpcBackend_1 = require("./RpcBackend");
|
|
35
|
+
const TileStorage_1 = require("./TileStorage");
|
|
36
|
+
const Settings_1 = require("./workspace/Settings");
|
|
37
|
+
const SettingsSchemas_1 = require("./workspace/SettingsSchemas");
|
|
38
|
+
const Workspace_1 = require("./workspace/Workspace");
|
|
39
|
+
const inversify_1 = require("inversify");
|
|
40
|
+
const path_1 = require("path");
|
|
41
|
+
const loggerCategory = BackendLoggerCategory_1.BackendLoggerCategory.IModelHost;
|
|
42
|
+
/** Configuration of core-backend.
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
class IModelHostConfiguration {
|
|
46
|
+
constructor() {
|
|
47
|
+
/** @internal */
|
|
48
|
+
this.tileTreeRequestTimeout = IModelHostConfiguration.defaultTileRequestTimeout;
|
|
49
|
+
/** @internal */
|
|
50
|
+
this.tileContentRequestTimeout = IModelHostConfiguration.defaultTileRequestTimeout;
|
|
51
|
+
/** @internal */
|
|
52
|
+
this.logTileLoadTimeThreshold = IModelHostConfiguration.defaultLogTileLoadTimeThreshold;
|
|
53
|
+
/** @internal */
|
|
54
|
+
this.logTileSizeThreshold = IModelHostConfiguration.defaultLogTileSizeThreshold;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
IModelHostConfiguration.defaultTileRequestTimeout = 20 * 1000;
|
|
58
|
+
IModelHostConfiguration.defaultLogTileLoadTimeThreshold = 40;
|
|
59
|
+
IModelHostConfiguration.defaultLogTileSizeThreshold = 20 * 1000000;
|
|
60
|
+
/** @internal */
|
|
61
|
+
IModelHostConfiguration.defaultMaxTileCacheDbSize = 1024 * 1024 * 1024;
|
|
62
|
+
exports.IModelHostConfiguration = IModelHostConfiguration;
|
|
63
|
+
/**
|
|
64
|
+
* Settings for `IModelHost.appWorkspace`.
|
|
65
|
+
* @note this includes the default dictionary from the SettingsSpecRegistry
|
|
66
|
+
*/
|
|
67
|
+
class ApplicationSettings extends Settings_1.BaseSettings {
|
|
68
|
+
verifyPriority(priority) {
|
|
69
|
+
if (priority >= Settings_1.SettingsPriority.iModel) // iModel settings may not appear in ApplicationSettings
|
|
70
|
+
throw new Error("Use IModelSettings");
|
|
71
|
+
}
|
|
72
|
+
updateDefaults() {
|
|
73
|
+
const defaults = {};
|
|
74
|
+
for (const [schemaName, val] of SettingsSchemas_1.SettingsSchemas.allSchemas) {
|
|
75
|
+
if (val.default)
|
|
76
|
+
defaults[schemaName] = val.default;
|
|
77
|
+
}
|
|
78
|
+
this.addDictionary("_default_", 0, defaults);
|
|
79
|
+
}
|
|
80
|
+
constructor() {
|
|
81
|
+
super();
|
|
82
|
+
this._remove = SettingsSchemas_1.SettingsSchemas.onSchemaChanged.addListener(() => this.updateDefaults());
|
|
83
|
+
this.updateDefaults();
|
|
84
|
+
}
|
|
85
|
+
close() {
|
|
86
|
+
if (this._remove) {
|
|
87
|
+
this._remove();
|
|
88
|
+
this._remove = undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** IModelHost initializes ($backend) and captures its configuration. A backend must call [[IModelHost.startup]] before using any backend classes.
|
|
93
|
+
* See [the learning article]($docs/learning/backend/IModelHost.md)
|
|
94
|
+
* @public
|
|
95
|
+
*/
|
|
96
|
+
class IModelHost {
|
|
97
|
+
constructor() { }
|
|
98
|
+
/** @internal */
|
|
99
|
+
static get platform() {
|
|
100
|
+
if (this._platform === undefined)
|
|
101
|
+
throw new Error("IModelHost.startup must be called first");
|
|
102
|
+
return this._platform;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The name of the *Profile* directory (a subdirectory of "[[cacheDir]]/profiles/") for this process.
|
|
106
|
+
*
|
|
107
|
+
* The *Profile* directory is used to cache data that is specific to a type-of-usage of the iTwin.js library.
|
|
108
|
+
* It is important that information in the profile cache be consistent but isolated across sessions (i.e.
|
|
109
|
+
* data for a profile is maintained between runs, but each profile is completely independent and
|
|
110
|
+
* unaffected by the presence ot use of others.)
|
|
111
|
+
* @note **Only one process at a time may be using a given profile**, and an exception will be thrown by [[startup]]
|
|
112
|
+
* if a second process attempts to use the same profile.
|
|
113
|
+
* @beta
|
|
114
|
+
*/
|
|
115
|
+
static get profileName() {
|
|
116
|
+
return this._profileName;
|
|
117
|
+
}
|
|
118
|
+
/** The full path of the Profile directory.
|
|
119
|
+
* @see [[profileName]]
|
|
120
|
+
* @beta
|
|
121
|
+
*/
|
|
122
|
+
static get profileDir() {
|
|
123
|
+
return (0, path_1.join)(this._cacheDir, "profiles", this._profileName);
|
|
124
|
+
}
|
|
125
|
+
/** A uniqueId for this session */
|
|
126
|
+
static get sessionId() { return this.session.sessionId; }
|
|
127
|
+
static set sessionId(id) { this.session.sessionId = id; }
|
|
128
|
+
/** The Id of this application - needs to be set only if it is an agent application. The applicationId will otherwise originate at the frontend. */
|
|
129
|
+
static get applicationId() { return this.session.applicationId; }
|
|
130
|
+
static set applicationId(id) { this.session.applicationId = id; }
|
|
131
|
+
/** The version of this application - needs to be set if is an agent application. The applicationVersion will otherwise originate at the frontend. */
|
|
132
|
+
static get applicationVersion() { return this.session.applicationVersion; }
|
|
133
|
+
static set applicationVersion(version) { this.session.applicationVersion = version; }
|
|
134
|
+
/** Root directory holding files that iTwin.js caches */
|
|
135
|
+
static get cacheDir() { return this._cacheDir; }
|
|
136
|
+
/** The application [[Workspace]] for this `IModelHost`
|
|
137
|
+
* @note this `Workspace` only holds [[WorkspaceContainer]]s and [[Settings]] scoped to the currently loaded application(s).
|
|
138
|
+
* All organization, iTwin, and iModel based containers or settings must be accessed through [[IModelDb.workspace]] and
|
|
139
|
+
* attempting to add them to this Workspace will fail.
|
|
140
|
+
* @beta
|
|
141
|
+
*/
|
|
142
|
+
static get appWorkspace() { return this._appWorkspace; } // eslint-disable-line @typescript-eslint/no-non-null-assertion
|
|
143
|
+
/** Get the current access token for this IModelHost, or a blank string if none is available.
|
|
144
|
+
* @note for web backends, this will *always* return a blank string because the backend itself has no token (but never needs one either.)
|
|
145
|
+
* For all IpcHosts, where this backend is servicing a single frontend, this will be the user's token. For ElectronHost, the backend
|
|
146
|
+
* obtains the token and forwards it to the frontend.
|
|
147
|
+
* @note accessTokens expire periodically and are automatically refreshed, if possible. Therefore tokens should not be saved, and the value
|
|
148
|
+
* returned by this method may change over time throughout the course of a session.
|
|
149
|
+
*/
|
|
150
|
+
static async getAccessToken() {
|
|
151
|
+
try {
|
|
152
|
+
return (await IModelHost.authorizationClient?.getAccessToken()) ?? "";
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
return "";
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** @internal */
|
|
159
|
+
static flushLog() {
|
|
160
|
+
return IModelHost.platform.flushLog();
|
|
161
|
+
}
|
|
162
|
+
static syncNativeLogLevels() {
|
|
163
|
+
this.platform.clearLogLevelCache();
|
|
164
|
+
}
|
|
165
|
+
static loadNative(options) {
|
|
166
|
+
if (undefined !== this._platform)
|
|
167
|
+
return;
|
|
168
|
+
this._platform = core_bentley_1.ProcessDetector.isMobileAppBackend ? process._linkedBinding("iModelJsNative") : imodeljs_native_1.NativeLibrary.load();
|
|
169
|
+
this._platform.logger = core_bentley_1.Logger;
|
|
170
|
+
core_bentley_1.Logger.logLevelChangedFn = () => IModelHost.syncNativeLogLevels(); // the arrow function exists only so that it can be spied in tests
|
|
171
|
+
if (options.crashReportingConfig && options.crashReportingConfig.crashDir && !core_bentley_1.ProcessDetector.isElectronAppBackend && !core_bentley_1.ProcessDetector.isMobileAppBackend) {
|
|
172
|
+
this.platform.setCrashReporting(options.crashReportingConfig);
|
|
173
|
+
core_bentley_1.Logger.logTrace(loggerCategory, "Configured crash reporting", {
|
|
174
|
+
enableCrashDumps: options.crashReportingConfig?.enableCrashDumps,
|
|
175
|
+
wantFullMemoryDumps: options.crashReportingConfig?.wantFullMemoryDumps,
|
|
176
|
+
enableNodeReport: options.crashReportingConfig?.enableNodeReport,
|
|
177
|
+
uploadToBentley: options.crashReportingConfig?.uploadToBentley,
|
|
178
|
+
});
|
|
179
|
+
if (options.crashReportingConfig.enableNodeReport) {
|
|
180
|
+
if (process.report !== undefined) {
|
|
181
|
+
process.report.reportOnFatalError = true;
|
|
182
|
+
process.report.reportOnUncaughtException = true;
|
|
183
|
+
process.report.directory = options.crashReportingConfig.crashDir;
|
|
184
|
+
core_bentley_1.Logger.logTrace(loggerCategory, "Configured Node.js crash reporting");
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
core_bentley_1.Logger.logWarning(loggerCategory, "Unable to configure Node.js crash reporting");
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/** @internal */
|
|
193
|
+
static setHubAccess(hubAccess) { this._hubAccess = hubAccess; }
|
|
194
|
+
/** get the current hubAccess, if present.
|
|
195
|
+
* @internal
|
|
196
|
+
*/
|
|
197
|
+
static getHubAccess() { return this._hubAccess; }
|
|
198
|
+
/** Provides access to the IModelHub for this IModelHost
|
|
199
|
+
* @internal
|
|
200
|
+
* @note If [[IModelHostOptions.hubAccess]] was undefined when initializing this class, accessing this property will throw an error.
|
|
201
|
+
* To determine whether one is present, use [[getHubAccess]].
|
|
202
|
+
*/
|
|
203
|
+
static get hubAccess() {
|
|
204
|
+
if (IModelHost._hubAccess === undefined)
|
|
205
|
+
throw new core_common_1.IModelError(core_bentley_1.IModelStatus.BadRequest, "No BackendHubAccess supplied in IModelHostOptions");
|
|
206
|
+
return IModelHost._hubAccess;
|
|
207
|
+
}
|
|
208
|
+
static initializeWorkspace(configuration) {
|
|
209
|
+
const settingAssets = (0, path_1.join)(KnownLocations.packageAssetsDir, "Settings");
|
|
210
|
+
SettingsSchemas_1.SettingsSchemas.addDirectory((0, path_1.join)(settingAssets, "Schemas"));
|
|
211
|
+
this._appWorkspace = new Workspace_1.ITwinWorkspace(new ApplicationSettings(), configuration.workspace);
|
|
212
|
+
// Create the CloudCache for Workspaces. This will fail if another process is already using the same profile.
|
|
213
|
+
try {
|
|
214
|
+
this.appWorkspace.getCloudCache();
|
|
215
|
+
}
|
|
216
|
+
catch (e) {
|
|
217
|
+
throw (e.errorNumber === core_bentley_1.DbResult.BE_SQLITE_BUSY) ? new core_common_1.IModelError(core_bentley_1.DbResult.BE_SQLITE_BUSY, `Profile [${this.profileDir}] is already in use by another process`) : e;
|
|
218
|
+
}
|
|
219
|
+
this.appWorkspace.settings.addDirectory(settingAssets, Settings_1.SettingsPriority.defaults);
|
|
220
|
+
GeoCoordConfig_1.GeoCoordConfig.onStartup();
|
|
221
|
+
// allow applications to load their default settings
|
|
222
|
+
this.onWorkspaceStartup.raiseEvent();
|
|
223
|
+
}
|
|
224
|
+
/** true between a successful call to [[startup]] and before [[shutdown]] */
|
|
225
|
+
static get isValid() {
|
|
226
|
+
return IModelHost._isValid;
|
|
227
|
+
}
|
|
228
|
+
/** This method must be called before any iTwin.js services are used.
|
|
229
|
+
* @param options Host configuration data.
|
|
230
|
+
* Raises [[onAfterStartup]].
|
|
231
|
+
* @see [[shutdown]].
|
|
232
|
+
*/
|
|
233
|
+
static async startup(options) {
|
|
234
|
+
if (this._isValid)
|
|
235
|
+
return; // we're already initialized
|
|
236
|
+
this._isValid = true;
|
|
237
|
+
options = options ?? {};
|
|
238
|
+
if (this.sessionId === "")
|
|
239
|
+
this.sessionId = core_bentley_1.Guid.createValue();
|
|
240
|
+
this.authorizationClient = options.authorizationClient;
|
|
241
|
+
this.backendVersion = require("../../package.json").version; // eslint-disable-line @typescript-eslint/no-var-requires
|
|
242
|
+
(0, RpcBackend_1.initializeRpcBackend)(options.enableOpenTelemetry);
|
|
243
|
+
this.loadNative(options);
|
|
244
|
+
this.setupCacheDir(options);
|
|
245
|
+
this.initializeWorkspace(options);
|
|
246
|
+
BriefcaseManager_1.BriefcaseManager.initialize((0, path_1.join)(this._cacheDir, "imodels"));
|
|
247
|
+
[
|
|
248
|
+
IModelReadRpcImpl_1.IModelReadRpcImpl,
|
|
249
|
+
IModelTileRpcImpl_1.IModelTileRpcImpl,
|
|
250
|
+
SnapshotIModelRpcImpl_1.SnapshotIModelRpcImpl,
|
|
251
|
+
WipRpcImpl_1.WipRpcImpl,
|
|
252
|
+
DevToolsRpcImpl_1.DevToolsRpcImpl,
|
|
253
|
+
].forEach((rpc) => rpc.register()); // register all of the RPC implementations
|
|
254
|
+
[
|
|
255
|
+
BisCoreSchema_1.BisCoreSchema,
|
|
256
|
+
GenericSchema_1.GenericSchema,
|
|
257
|
+
FunctionalSchema_1.FunctionalSchema,
|
|
258
|
+
].forEach((schema) => schema.registerSchema()); // register all of the schemas
|
|
259
|
+
if (undefined !== options.hubAccess)
|
|
260
|
+
this._hubAccess = options.hubAccess;
|
|
261
|
+
this.configuration = options;
|
|
262
|
+
this.setupTileCache();
|
|
263
|
+
process.once("beforeExit", IModelHost.shutdown);
|
|
264
|
+
this.onAfterStartup.raiseEvent();
|
|
265
|
+
}
|
|
266
|
+
static setupCacheDir(configuration) {
|
|
267
|
+
this._cacheDir = (0, path_1.normalize)(configuration.cacheDir ?? imodeljs_native_1.NativeLibrary.defaultCacheDir);
|
|
268
|
+
IModelJsFs_1.IModelJsFs.recursiveMkDirSync(this._cacheDir);
|
|
269
|
+
this._profileName = configuration.profileName ?? "default";
|
|
270
|
+
core_bentley_1.Logger.logInfo(loggerCategory, `cacheDir: [${this.cacheDir}], profileDir: [${this.profileDir}]`);
|
|
271
|
+
}
|
|
272
|
+
/** This method must be called when an iTwin.js host is shut down. Raises [[onBeforeShutdown]] */
|
|
273
|
+
static async shutdown() {
|
|
274
|
+
// Note: This method is set as a node listener where `this` is unbound. Call private method to
|
|
275
|
+
// ensure `this` is correct. Don't combine these methods.
|
|
276
|
+
return IModelHost.doShutdown();
|
|
277
|
+
}
|
|
278
|
+
static async doShutdown() {
|
|
279
|
+
if (!this._isValid)
|
|
280
|
+
return;
|
|
281
|
+
this._isValid = false;
|
|
282
|
+
this.onBeforeShutdown.raiseEvent();
|
|
283
|
+
this.configuration = undefined;
|
|
284
|
+
this.tileStorage = undefined;
|
|
285
|
+
this._appWorkspace?.close();
|
|
286
|
+
this._appWorkspace = undefined;
|
|
287
|
+
CloudSqlite_1.CloudSqlite.CloudCaches.destroy();
|
|
288
|
+
process.removeListener("beforeExit", IModelHost.shutdown);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Add or update a property that should be included in a crash report.
|
|
292
|
+
* @internal
|
|
293
|
+
*/
|
|
294
|
+
static setCrashReportProperty(name, value) {
|
|
295
|
+
this.platform.setCrashReportProperty(name, value);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Remove a previously defined property so that will not be included in a crash report.
|
|
299
|
+
* @internal
|
|
300
|
+
*/
|
|
301
|
+
static removeCrashReportProperty(name) {
|
|
302
|
+
this.platform.setCrashReportProperty(name, undefined);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get all properties that will be included in a crash report.
|
|
306
|
+
* @internal
|
|
307
|
+
*/
|
|
308
|
+
static getCrashReportProperties() {
|
|
309
|
+
return this.platform.getCrashReportProperties();
|
|
310
|
+
}
|
|
311
|
+
/** The directory where application assets may be found */
|
|
312
|
+
static get appAssetsDir() {
|
|
313
|
+
return undefined !== IModelHost.configuration ? IModelHost.configuration.appAssetsDir : undefined;
|
|
314
|
+
}
|
|
315
|
+
/** The time, in milliseconds, for which IModelTileRpcInterface.requestTileTreeProps should wait before returning a "pending" status.
|
|
316
|
+
* @internal
|
|
317
|
+
*/
|
|
318
|
+
static get tileTreeRequestTimeout() {
|
|
319
|
+
return IModelHost.configuration?.tileTreeRequestTimeout ?? IModelHostConfiguration.defaultTileRequestTimeout;
|
|
320
|
+
}
|
|
321
|
+
/** The time, in milliseconds, for which IModelTileRpcInterface.requestTileContent should wait before returning a "pending" status.
|
|
322
|
+
* @internal
|
|
323
|
+
*/
|
|
324
|
+
static get tileContentRequestTimeout() {
|
|
325
|
+
return IModelHost.configuration?.tileContentRequestTimeout ?? IModelHostConfiguration.defaultTileRequestTimeout;
|
|
326
|
+
}
|
|
327
|
+
/** The backend will log when a tile took longer to load than this threshold in seconds. */
|
|
328
|
+
static get logTileLoadTimeThreshold() {
|
|
329
|
+
return IModelHost.configuration?.logTileLoadTimeThreshold ?? IModelHostConfiguration.defaultLogTileLoadTimeThreshold;
|
|
330
|
+
}
|
|
331
|
+
/** The backend will log when a tile is loaded with a size in bytes above this threshold. */
|
|
332
|
+
static get logTileSizeThreshold() {
|
|
333
|
+
return IModelHost.configuration?.logTileSizeThreshold ?? IModelHostConfiguration.defaultLogTileSizeThreshold;
|
|
334
|
+
}
|
|
335
|
+
/** Whether external tile caching is active.
|
|
336
|
+
* @internal
|
|
337
|
+
*/
|
|
338
|
+
static get usingExternalTileCache() {
|
|
339
|
+
return undefined !== IModelHost.tileStorage;
|
|
340
|
+
}
|
|
341
|
+
/** Whether to restrict tile cache URLs by client IP address.
|
|
342
|
+
* @internal
|
|
343
|
+
*/
|
|
344
|
+
static get restrictTileUrlsByClientIp() {
|
|
345
|
+
return undefined !== IModelHost.configuration && (IModelHost.configuration.restrictTileUrlsByClientIp ? true : false);
|
|
346
|
+
}
|
|
347
|
+
/** Whether to compress cached tiles.
|
|
348
|
+
* @internal
|
|
349
|
+
*/
|
|
350
|
+
static get compressCachedTiles() {
|
|
351
|
+
return false !== IModelHost.configuration?.compressCachedTiles;
|
|
352
|
+
}
|
|
353
|
+
static setupTileCache() {
|
|
354
|
+
(0, core_bentley_1.assert)(undefined !== IModelHost.configuration);
|
|
355
|
+
const config = IModelHost.configuration;
|
|
356
|
+
const storage = config.tileCacheStorage;
|
|
357
|
+
const credentials = config.tileCacheAzureCredentials;
|
|
358
|
+
if (!storage && !credentials) {
|
|
359
|
+
this.platform.setMaxTileCacheSize(config.maxTileCacheDbSize ?? IModelHostConfiguration.defaultMaxTileCacheDbSize);
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
this.platform.setMaxTileCacheSize(0);
|
|
363
|
+
if (credentials) {
|
|
364
|
+
if (storage)
|
|
365
|
+
throw new core_common_1.IModelError(core_common_1.BentleyStatus.ERROR, "Cannot use both Azure and custom cloud storage providers for tile cache.");
|
|
366
|
+
this.setupAzureTileCache(credentials);
|
|
367
|
+
}
|
|
368
|
+
if (storage)
|
|
369
|
+
IModelHost.tileStorage = new TileStorage_1.TileStorage(storage);
|
|
370
|
+
}
|
|
371
|
+
static setupAzureTileCache(credentials) {
|
|
372
|
+
const config = {
|
|
373
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
374
|
+
ServerSideStorage: {
|
|
375
|
+
dependencyName: "azure",
|
|
376
|
+
accountName: credentials.account,
|
|
377
|
+
accountKey: credentials.accessKey,
|
|
378
|
+
baseUrl: credentials.baseUrl ?? `https://${credentials.account}.blob.core.windows.net`,
|
|
379
|
+
},
|
|
380
|
+
};
|
|
381
|
+
const ioc = new inversify_1.Container();
|
|
382
|
+
ioc.bind(cloud_agnostic_core_1.Types.dependenciesConfig).toConstantValue(config);
|
|
383
|
+
new object_storage_azure_1.AzureServerStorageBindings().register(ioc, config.ServerSideStorage);
|
|
384
|
+
IModelHost.tileStorage = new TileStorage_1.TileStorage(ioc.get(object_storage_core_1.ServerStorage));
|
|
385
|
+
}
|
|
386
|
+
/** @internal */
|
|
387
|
+
static computeSchemaChecksum(arg) {
|
|
388
|
+
return this.platform.computeSchemaChecksum(arg);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
/** @alpha */
|
|
392
|
+
IModelHost.telemetry = new core_telemetry_1.TelemetryManager();
|
|
393
|
+
IModelHost.backendVersion = "";
|
|
394
|
+
IModelHost._cacheDir = "";
|
|
395
|
+
/** Event raised during startup to allow loading settings data */
|
|
396
|
+
IModelHost.onWorkspaceStartup = new core_bentley_1.BeEvent();
|
|
397
|
+
/** Event raised just after the backend IModelHost was started */
|
|
398
|
+
IModelHost.onAfterStartup = new core_bentley_1.BeEvent();
|
|
399
|
+
/** Event raised just before the backend IModelHost is to be shut down */
|
|
400
|
+
IModelHost.onBeforeShutdown = new core_bentley_1.BeEvent();
|
|
401
|
+
/** @internal */
|
|
402
|
+
IModelHost.session = { applicationId: "2686", applicationVersion: "1.0.0", sessionId: "" };
|
|
403
|
+
/** A string that can identify the current user to other users when collaborating. */
|
|
404
|
+
IModelHost.userMoniker = "unknown";
|
|
405
|
+
IModelHost._isValid = false;
|
|
406
|
+
exports.IModelHost = IModelHost;
|
|
407
|
+
/** Information about the platform on which the app is running.
|
|
408
|
+
* @public
|
|
409
|
+
*/
|
|
410
|
+
class Platform {
|
|
411
|
+
/** Get the name of the platform. */
|
|
412
|
+
static get platformName() {
|
|
413
|
+
return process.platform;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
exports.Platform = Platform;
|
|
417
|
+
/** Well known directories that may be used by the application.
|
|
418
|
+
* @public
|
|
419
|
+
*/
|
|
420
|
+
class KnownLocations {
|
|
421
|
+
/** The directory where the imodeljs-native assets are stored. */
|
|
422
|
+
static get nativeAssetsDir() {
|
|
423
|
+
return IModelHost.platform.DgnDb.getAssetsDir();
|
|
424
|
+
}
|
|
425
|
+
/** The directory where the core-backend assets are stored. */
|
|
426
|
+
static get packageAssetsDir() {
|
|
427
|
+
return (0, path_1.join)(__dirname, "assets");
|
|
428
|
+
}
|
|
429
|
+
/** The temporary directory. */
|
|
430
|
+
static get tmpdir() {
|
|
431
|
+
return os.tmpdir();
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
exports.KnownLocations = KnownLocations;
|
|
435
|
+
/** Extend this class to provide custom file name resolution behavior.
|
|
436
|
+
* @note Only `tryResolveKey` and/or `tryResolveFileName` need to be overridden as the implementations of `resolveKey` and `resolveFileName` work for most purposes.
|
|
437
|
+
* @see [[IModelHost.snapshotFileNameResolver]]
|
|
438
|
+
* @public
|
|
439
|
+
*/
|
|
440
|
+
class FileNameResolver {
|
|
441
|
+
/** Resolve a file name from the specified key.
|
|
442
|
+
* @param _fileKey The key that identifies the file name in a `Map` or other similar data structure.
|
|
443
|
+
* @returns The resolved file name or `undefined` if not found.
|
|
444
|
+
*/
|
|
445
|
+
tryResolveKey(_fileKey) { return undefined; }
|
|
446
|
+
/** Resolve a file name from the specified key.
|
|
447
|
+
* @param fileKey The key that identifies the file name in a `Map` or other similar data structure.
|
|
448
|
+
* @returns The resolved file name.
|
|
449
|
+
* @throws [[IModelError]] if not found.
|
|
450
|
+
*/
|
|
451
|
+
resolveKey(fileKey) {
|
|
452
|
+
const resolvedFileName = this.tryResolveKey(fileKey);
|
|
453
|
+
if (undefined === resolvedFileName) {
|
|
454
|
+
throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `${fileKey} not resolved`);
|
|
455
|
+
}
|
|
456
|
+
return resolvedFileName;
|
|
457
|
+
}
|
|
458
|
+
/** Resolve the input file name, which may be a partial name, into a full path file name.
|
|
459
|
+
* @param inFileName The partial file name.
|
|
460
|
+
* @returns The resolved full path file name or `undefined` if not found.
|
|
461
|
+
*/
|
|
462
|
+
tryResolveFileName(inFileName) { return inFileName; }
|
|
463
|
+
/** Resolve the input file name, which may be a partial name, into a full path file name.
|
|
464
|
+
* @param inFileName The partial file name.
|
|
465
|
+
* @returns The resolved full path file name.
|
|
466
|
+
* @throws [[IModelError]] if not found.
|
|
467
|
+
*/
|
|
468
|
+
resolveFileName(inFileName) {
|
|
469
|
+
const resolvedFileName = this.tryResolveFileName(inFileName);
|
|
470
|
+
if (undefined === resolvedFileName) {
|
|
471
|
+
throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `${inFileName} not resolved`);
|
|
472
|
+
}
|
|
473
|
+
return resolvedFileName;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
exports.FileNameResolver = FileNameResolver;
|
|
497
477
|
//# sourceMappingURL=IModelHost.js.map
|