@itwin/core-backend 3.0.0-dev.90 → 3.0.0-dev.91

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/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@itwin/core-backend",
3
- "version": "3.0.0-dev.90",
3
+ "version": "3.0.0-dev.91",
4
4
  "description": "iTwin.js backend components",
5
5
  "main": "lib/cjs/core-backend.js",
6
6
  "typings": "lib/cjs/core-backend",
7
7
  "license": "MIT",
8
8
  "engines": {
9
- "node": ">=10.17.0 <15.0"
9
+ "node": ">=12.22.0 < 14.0 || >=14.17.0 <17.0"
10
10
  },
11
11
  "repository": {
12
12
  "type": "git",
@@ -24,75 +24,53 @@
24
24
  "url": "http://www.bentley.com"
25
25
  },
26
26
  "peerDependencies": {
27
- "@bentley/backend-itwin-client": "^3.0.0-dev.90",
28
- "@itwin/core-bentley": "^3.0.0-dev.90",
29
- "@itwin/ecschema-metadata": "^3.0.0-dev.90",
30
- "@itwin/core-geometry": "^3.0.0-dev.90",
31
- "@bentley/imodelhub-client": "^3.0.0-dev.90",
32
- "@itwin/core-common": "^3.0.0-dev.90",
33
- "@bentley/itwin-client": "^3.0.0-dev.90",
34
- "@bentley/telemetry-client": "^3.0.0-dev.90"
27
+ "@bentley/itwin-client": "^3.0.0-dev.91",
28
+ "@bentley/telemetry-client": "^3.0.0-dev.91",
29
+ "@itwin/core-bentley": "^3.0.0-dev.91",
30
+ "@itwin/core-common": "^3.0.0-dev.91",
31
+ "@itwin/core-geometry": "^3.0.0-dev.91",
32
+ "@itwin/ecschema-metadata": "^3.0.0-dev.91"
35
33
  },
36
34
  "//devDependencies": [
37
35
  "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install",
38
36
  "NOTE: All tools used by scripts in this package must be listed as devDependencies"
39
37
  ],
40
38
  "devDependencies": {
41
- "@bentley/backend-itwin-client": "3.0.0-dev.90",
42
- "@itwin/core-bentley": "3.0.0-dev.90",
43
- "@itwin/build-tools": "3.0.0-dev.90",
44
- "@bentley/itwin-registry-client": "3.0.0-dev.90",
45
- "@itwin/ecschema-metadata": "3.0.0-dev.90",
46
- "@itwin/eslint-plugin": "3.0.0-dev.90",
47
- "@itwin/core-geometry": "3.0.0-dev.90",
48
- "@bentley/imodelhub-client": "3.0.0-dev.90",
49
- "@itwin/core-common": "3.0.0-dev.90",
50
- "@bentley/itwin-client": "3.0.0-dev.90",
51
- "@itwin/oidc-signin-tool": "3.0.0-dev.90",
52
- "@itwin/perf-tools": "3.0.0-dev.90",
53
- "@bentley/telemetry-client": "3.0.0-dev.90",
39
+ "@bentley/itwin-client": "3.0.0-dev.91",
40
+ "@bentley/telemetry-client": "3.0.0-dev.91",
41
+ "@itwin/build-tools": "3.0.0-dev.91",
42
+ "@itwin/core-bentley": "3.0.0-dev.91",
43
+ "@itwin/core-common": "3.0.0-dev.91",
44
+ "@itwin/core-geometry": "3.0.0-dev.91",
45
+ "@itwin/ecschema-metadata": "3.0.0-dev.91",
46
+ "@itwin/eslint-plugin": "3.0.0-dev.91",
54
47
  "@types/chai": "^4.1.4",
55
48
  "@types/chai-as-promised": "^7",
56
- "@types/deep-assign": "^0.1.0",
57
- "@types/formidable": "^1.0.31",
58
49
  "@types/fs-extra": "^4.0.7",
59
- "@types/glob": "^5.0.35",
60
- "@types/lru-cache": "^5.1.0",
61
50
  "@types/mocha": "^8.2.2",
62
51
  "@types/multiparty": "^0.0.31",
63
52
  "@types/node": "14.14.31",
64
53
  "@types/semver": "^5.5.0",
65
54
  "@types/sinon": "^9.0.0",
66
55
  "@types/ws": "^6.0.4",
67
- "azurite": "^3.14.0",
68
56
  "chai": "^4.1.2",
69
57
  "chai-as-promised": "^7",
70
58
  "cpx": "^1.5.0",
71
59
  "dotenv": "^10.0.0",
72
60
  "dotenv-expand": "^5.1.0",
73
61
  "eslint": "^7.11.0",
74
- "event-stream": "~4.0.1",
75
62
  "internal-tools": "3.0.0-dev.69",
76
- "mkdirp": "^1.0.4",
77
63
  "mocha": "^8.3.2",
78
- "npm-run-all": "^4.1.5",
79
- "null-loader": "^0.1.1",
80
64
  "nyc": "^15.1.0",
81
- "openid-client": "^4.7.4",
82
65
  "rimraf": "^3.0.2",
83
66
  "sinon": "^9.0.2",
84
- "source-map-loader": "^1.0.0",
85
- "source-map-support": "^0.5.6",
86
- "typescript": "~4.4.0",
87
- "webpack": "4.42.0"
67
+ "typescript": "~4.4.0"
88
68
  },
89
69
  "dependencies": {
90
70
  "@azure/storage-blob": "^12.7.0",
91
71
  "@bentley/imodeljs-native": "3.0.14",
92
- "deep-assign": "^2.0.0",
93
72
  "form-data": "^2.3.2",
94
73
  "fs-extra": "^8.1.0",
95
- "glob": "^7.1.2",
96
74
  "js-base64": "^3.6.1",
97
75
  "multiparty": "^4.2.1",
98
76
  "semver": "^5.5.0",
@@ -117,21 +95,8 @@
117
95
  "copy:config": "internal-tools copy-config",
118
96
  "copy:test-assets": "cpx \"./src/test/assets/**/*\" ./lib/cjs/test/assets",
119
97
  "cover": "nyc npm -s test",
120
- "cover:integration": "nyc npm run -s test:integration",
121
98
  "extract-api": "betools extract-api --entry=core-backend",
122
99
  "lint": "eslint -f visualstudio \"./src/**/*.ts\" 1>&2",
123
- "pretest": "cpx ./src/test/logging.config.json ./lib/cjs/test",
124
- "test": "mocha --grep=\"#integration|#WebGLPerformance\" --invert",
125
- "azurite:setup": "mkdirp ./lib/cjs/test/azuriteStorage && azurite --silent --loose --location ./lib/cjs/test/azuriteStorage",
126
- "test:integration": "run-s pretest test:integration:azurite",
127
- "test:integration:azurite": "run-p -r azurite:setup test:integration:core",
128
- "test:integration:core": "mocha --grep=\"#integration|#WebGLPerformance\"",
129
- "perftest:pre": "npm run -s pretest && cpx \"./src/perftest/*.json\" ./lib/cjs/perftest",
130
- "perftest": "npm run -s perftest:crud && npm run -s perftest:cs && npm run -s perftest:elAspect && npm run -s perftest:schema",
131
- "perftest:crud": "npm run -s perftest:pre && mocha --timeout=999999999 --grep PerformanceElementsTests \"./lib/cjs/perftest/**/*.test.js\"",
132
- "perftest:cs": "npm run -s perftest:pre && mocha --timeout=999999999 --grep ImodelChangesetPerformance \"./lib/cjs/perftest/**/*.test.js\"",
133
- "perftest:elAspect": "npm run -s perftest:pre && mocha --timeout=999999999 --grep ElementAspectPerformance \"./lib/cjs/perftest/**/*.test.js\"",
134
- "perftest:schema": "npm run -s perftest:pre && mocha --timeout=999999999 --grep SchemaDesignPerf \"./lib/cjs/perftest/**/*.test.js\"",
135
- "perftest:tile": "npm run -s perftest:pre && mocha --timeout=999999999 --grep TilesGenerationPerformance \"./lib/cjs/perftest/**/*.test.js\""
100
+ "test": "mocha"
136
101
  }
137
102
  }
@@ -1,66 +0,0 @@
1
- /** @packageDocumentation
2
- * @module HubAccess
3
- */
4
- import { GuidString } from "@itwin/core-bentley";
5
- import { ChangeSet, IModelClient, Lock } from "@bentley/imodelhub-client";
6
- import { ChangesetFileProps, ChangesetId, ChangesetIndex, ChangesetProps, CodeProps, IModelVersion, LocalDirName } from "@itwin/core-common";
7
- import { AcquireNewBriefcaseIdArg, BriefcaseDbArg, BriefcaseIdArg, ChangesetArg, ChangesetRangeArg, CheckPointArg, CreateNewIModelProps, IModelIdArg, IModelNameArg, ITwinIdArg, LockProps, V2CheckpointAccessProps } from "./BackendHubAccess";
8
- import { CheckpointProps } from "./CheckpointManager";
9
- /** @internal */
10
- export declare class IModelHubBackend {
11
- private static _imodelClient?;
12
- private static _isIModelBankClient;
13
- private static changeSet0;
14
- static setIModelClient(client?: IModelClient): void;
15
- static get isUsingIModelBankClient(): boolean;
16
- static get iModelClient(): IModelClient;
17
- private static getAccessToken;
18
- static getLatestChangeset(arg: IModelIdArg): Promise<ChangesetProps>;
19
- static getChangesetFromNamedVersion(arg: IModelIdArg & {
20
- versionName: string;
21
- }): Promise<ChangesetProps>;
22
- static getChangesetFromVersion(arg: IModelIdArg & {
23
- version: IModelVersion;
24
- }): Promise<ChangesetProps>;
25
- static createNewIModel(arg: CreateNewIModelProps): Promise<GuidString>;
26
- static deleteIModel(arg: IModelIdArg & ITwinIdArg): Promise<void>;
27
- static queryIModelByName(arg: IModelNameArg): Promise<GuidString | undefined>;
28
- static pushChangeset(arg: IModelIdArg & {
29
- changesetProps: ChangesetFileProps;
30
- }): Promise<ChangesetIndex>;
31
- /** Releases a briefcaseId from iModelHub. After this call it is illegal to generate changesets for the released briefcaseId.
32
- * @note generally, this method should not be called directly. Instead use [[deleteBriefcaseFiles]].
33
- * @see deleteBriefcaseFiles
34
- */
35
- static releaseBriefcase(arg: BriefcaseIdArg): Promise<void>;
36
- static getMyBriefcaseIds(arg: IModelIdArg): Promise<number[]>;
37
- static acquireNewBriefcaseId(arg: AcquireNewBriefcaseIdArg): Promise<number>;
38
- static toChangeSetProps(cs: ChangeSet): ChangesetProps;
39
- private static toChangeSetFileProps;
40
- static downloadChangeset(arg: ChangesetArg & {
41
- targetDir: LocalDirName;
42
- }): Promise<ChangesetFileProps>;
43
- static queryChangeset(arg: ChangesetArg): Promise<ChangesetProps>;
44
- private static getQueryFromRange;
45
- /** queries for change sets in the specified range. */
46
- static queryChangesets(arg: ChangesetRangeArg): Promise<ChangesetProps[]>;
47
- /** Downloads change sets in the specified range. */
48
- static downloadChangesets(arg: ChangesetRangeArg & {
49
- targetDir: LocalDirName;
50
- }): Promise<ChangesetFileProps[]>;
51
- static downloadV1Checkpoint(arg: CheckPointArg): Promise<ChangesetId>;
52
- static queryV2Checkpoint(arg: CheckpointProps): Promise<V2CheckpointAccessProps | undefined>;
53
- static downloadV2Checkpoint(arg: CheckPointArg): Promise<ChangesetId>;
54
- static releaseAllLocks(arg: BriefcaseDbArg): Promise<void>;
55
- static releaseAllCodes(arg: BriefcaseDbArg): Promise<void>;
56
- static queryAllLocks(arg: BriefcaseDbArg): Promise<LockProps[]>;
57
- static queryAllCodes(arg: BriefcaseDbArg): Promise<CodeProps[]>;
58
- static toHubLock(arg: BriefcaseDbArg, reqLock: LockProps): Lock;
59
- static toHubLocks(arg: BriefcaseDbArg & {
60
- locks: LockProps[];
61
- }): Lock[];
62
- static acquireLocks(arg: BriefcaseDbArg & {
63
- locks: LockProps[];
64
- }): Promise<void>;
65
- }
66
- //# sourceMappingURL=IModelHubBackend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IModelHubBackend.d.ts","sourceRoot":"","sources":["../../src/IModelHubBackend.ts"],"names":[],"mappings":"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"}
@@ -1,359 +0,0 @@
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 HubAccess
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.IModelHubBackend = void 0;
11
- const path_1 = require("path");
12
- const backend_itwin_client_1 = require("@bentley/backend-itwin-client");
13
- const core_bentley_1 = require("@itwin/core-bentley");
14
- const imodelhub_client_1 = require("@bentley/imodelhub-client");
15
- const core_common_1 = require("@itwin/core-common");
16
- const itwin_client_1 = require("@bentley/itwin-client");
17
- const BriefcaseManager_1 = require("./BriefcaseManager");
18
- const IModelDb_1 = require("./IModelDb");
19
- const IModelHost_1 = require("./IModelHost");
20
- const IModelJsFs_1 = require("./IModelJsFs");
21
- /** @internal */
22
- class IModelHubBackend {
23
- static setIModelClient(client) {
24
- this._imodelClient = client;
25
- this._isIModelBankClient = client instanceof imodelhub_client_1.IModelBankClient;
26
- }
27
- static get isUsingIModelBankClient() {
28
- return this._isIModelBankClient;
29
- }
30
- static get iModelClient() {
31
- if (!this._imodelClient)
32
- this._imodelClient = new imodelhub_client_1.IModelHubClient(new backend_itwin_client_1.AzureFileHandler());
33
- return this._imodelClient;
34
- }
35
- static async getAccessToken(arg) {
36
- var _a;
37
- return (_a = arg.accessToken) !== null && _a !== void 0 ? _a : await IModelHost_1.IModelHost.getAccessToken();
38
- }
39
- static async getLatestChangeset(arg) {
40
- const accessToken = await this.getAccessToken(arg);
41
- const changeSets = await this.iModelClient.changeSets.get(accessToken, arg.iModelId, new imodelhub_client_1.ChangeSetQuery().top(1).latest());
42
- return (changeSets.length === 0) ? this.changeSet0 : this.toChangeSetProps(changeSets[changeSets.length - 1]);
43
- }
44
- static async getChangesetFromNamedVersion(arg) {
45
- const accessToken = await this.getAccessToken(arg);
46
- const versions = await this.iModelClient.versions.get(accessToken, arg.iModelId, new imodelhub_client_1.VersionQuery().select("ChangeSetId").byName(arg.versionName));
47
- if (!versions[0] || !versions[0].changeSetId)
48
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `Named version ${arg.versionName} not found`);
49
- return this.queryChangeset({ ...arg, changeset: { id: versions[0].changeSetId } });
50
- }
51
- static async getChangesetFromVersion(arg) {
52
- const version = arg.version;
53
- if (version.isFirst)
54
- return this.queryChangeset({ ...arg, changeset: { index: 0 } });
55
- const asOf = version.getAsOfChangeSet();
56
- if (asOf)
57
- return this.queryChangeset({ ...arg, changeset: { id: asOf } });
58
- const versionName = version.getName();
59
- if (versionName)
60
- return this.getChangesetFromNamedVersion({ ...arg, versionName });
61
- return this.getLatestChangeset(arg);
62
- }
63
- static async createNewIModel(arg) {
64
- var _a;
65
- if (this.isUsingIModelBankClient)
66
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.BadRequest, "This is a iModelHub only operation");
67
- const revision0 = (0, path_1.join)(IModelHost_1.IModelHost.cacheDir, "temp-revision0.bim");
68
- IModelJsFs_1.IModelJsFs.removeSync(revision0);
69
- if (!arg.revision0) { // if they didn't supply a revision0 file, create a blank one.
70
- const blank = IModelDb_1.SnapshotDb.createEmpty(revision0, { rootSubject: { name: (_a = arg.description) !== null && _a !== void 0 ? _a : arg.iModelName } });
71
- blank.saveChanges();
72
- blank.close();
73
- }
74
- else {
75
- IModelJsFs_1.IModelJsFs.copySync(revision0, arg.revision0);
76
- }
77
- const nativeDb = IModelDb_1.IModelDb.openDgnDb({ path: revision0 }, core_bentley_1.OpenMode.ReadWrite);
78
- try {
79
- nativeDb.setITwinId(arg.iTwinId);
80
- // nativeDb.setDbGuid(this.iModelId); NEEDS_WORK - iModelHub should accept this value, not create it.
81
- nativeDb.saveChanges();
82
- nativeDb.deleteAllTxns(); // necessary before resetting briefcaseId
83
- nativeDb.resetBriefcaseId(core_common_1.BriefcaseIdValue.Unassigned);
84
- nativeDb.saveLocalValue(IModelDb_1.BriefcaseLocalValue.NoLocking, arg.noLocks ? "true" : undefined);
85
- nativeDb.saveChanges();
86
- }
87
- finally {
88
- nativeDb.closeIModel();
89
- }
90
- const accessToken = await this.getAccessToken(arg);
91
- const hubIModel = await this.iModelClient.iModels.create(accessToken, arg.iTwinId, arg.iModelName, { path: revision0, description: arg.description });
92
- IModelJsFs_1.IModelJsFs.removeSync(revision0);
93
- return hubIModel.wsgId;
94
- }
95
- static async deleteIModel(arg) {
96
- const dirName = BriefcaseManager_1.BriefcaseManager.getIModelPath(arg.iModelId);
97
- if (IModelJsFs_1.IModelJsFs.existsSync(dirName)) {
98
- IModelJsFs_1.IModelJsFs.purgeDirSync(dirName);
99
- IModelJsFs_1.IModelJsFs.rmdirSync(dirName);
100
- }
101
- const accessToken = await this.getAccessToken(arg);
102
- return this.iModelClient.iModels.delete(accessToken, arg.iTwinId, arg.iModelId);
103
- }
104
- static async queryIModelByName(arg) {
105
- const accessToken = await this.getAccessToken(arg);
106
- const iModels = await this.iModelClient.iModels.get(accessToken, arg.iTwinId, new imodelhub_client_1.IModelQuery().byName(arg.iModelName));
107
- return iModels.length === 0 ? undefined : iModels[0].id;
108
- }
109
- static async pushChangeset(arg) {
110
- const changeset = new imodelhub_client_1.ChangeSet();
111
- const changesetProps = arg.changesetProps;
112
- changeset.id = changesetProps.id;
113
- changeset.parentId = changesetProps.parentId;
114
- changeset.changesType = changesetProps.changesType;
115
- changeset.fileSize = changesetProps.size.toString();
116
- changeset.description = changesetProps.description;
117
- changeset.briefcaseId = changesetProps.briefcaseId;
118
- if (changeset.description.length >= 255) {
119
- core_bentley_1.Logger.logWarning("imodelhub-access", `pushChanges - Truncating description to 255 characters. ${changeset.description}`);
120
- changeset.description = changeset.description.slice(0, 254);
121
- }
122
- const accessToken = await this.getAccessToken(arg);
123
- return +(await this.iModelClient.changeSets.create(accessToken, arg.iModelId, changeset, changesetProps.pathname)).index;
124
- }
125
- /** Releases a briefcaseId from iModelHub. After this call it is illegal to generate changesets for the released briefcaseId.
126
- * @note generally, this method should not be called directly. Instead use [[deleteBriefcaseFiles]].
127
- * @see deleteBriefcaseFiles
128
- */
129
- static async releaseBriefcase(arg) {
130
- const { briefcaseId, iModelId } = arg;
131
- const accessToken = await this.getAccessToken(arg);
132
- try {
133
- await this.iModelClient.briefcases.get(accessToken, iModelId, new imodelhub_client_1.BriefcaseQuery().byId(briefcaseId));
134
- }
135
- catch (error) {
136
- throw error;
137
- }
138
- await this.iModelClient.briefcases.delete(accessToken, iModelId, briefcaseId);
139
- }
140
- static async getMyBriefcaseIds(arg) {
141
- const accessToken = await this.getAccessToken(arg);
142
- const myHubBriefcases = await this.iModelClient.briefcases.get(accessToken, arg.iModelId, new imodelhub_client_1.BriefcaseQuery().ownedByMe().selectDownloadUrl());
143
- const myBriefcaseIds = [];
144
- for (const hubBc of myHubBriefcases)
145
- myBriefcaseIds.push(hubBc.briefcaseId); // save the list of briefcaseIds we already own.
146
- return myBriefcaseIds;
147
- }
148
- static async acquireNewBriefcaseId(arg) {
149
- const accessToken = await this.getAccessToken(arg);
150
- const briefcase = await this.iModelClient.briefcases.create(accessToken, arg.iModelId);
151
- if (!briefcase)
152
- throw new core_common_1.IModelError(core_bentley_1.BriefcaseStatus.CannotAcquire, "Could not acquire briefcase");
153
- return briefcase.briefcaseId;
154
- }
155
- static toChangeSetProps(cs) {
156
- var _a, _b;
157
- return {
158
- id: cs.wsgId, parentId: cs.parentId ? cs.parentId : "", briefcaseId: cs.briefcaseId, pushDate: cs.pushDate,
159
- description: (_a = cs.description) !== null && _a !== void 0 ? _a : "", changesType: ((_b = cs.changesType) !== null && _b !== void 0 ? _b : imodelhub_client_1.ChangesType.Regular), userCreated: cs.userCreated,
160
- index: +cs.index,
161
- };
162
- }
163
- static toChangeSetFileProps(cs, basePath) {
164
- const csProps = this.toChangeSetProps(cs);
165
- csProps.pathname = (0, path_1.join)(basePath, cs.fileName);
166
- return csProps;
167
- }
168
- static async downloadChangeset(arg) {
169
- const accessToken = await this.getAccessToken(arg);
170
- const changeSetsPath = BriefcaseManager_1.BriefcaseManager.getChangeSetsPath(arg.iModelId);
171
- // NEEDS_WORK - allow download by index
172
- const cSet = await this.queryChangeset(arg);
173
- const changeSets = await this.iModelClient.changeSets.download(accessToken, arg.iModelId, new imodelhub_client_1.ChangeSetQuery().byId(cSet.id), changeSetsPath);
174
- if (undefined === changeSets)
175
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `Cannot download changeset`);
176
- return this.toChangeSetFileProps(changeSets[0], arg.targetDir);
177
- }
178
- static async queryChangeset(arg) {
179
- const hasIndex = (undefined !== arg.changeset.index);
180
- if ((hasIndex && arg.changeset.index <= 0) || arg.changeset.id === "")
181
- return this.changeSet0;
182
- const query = new imodelhub_client_1.ChangeSetQuery();
183
- if (hasIndex)
184
- query.filter(`Index+eq+${arg.changeset.index}`);
185
- else
186
- query.byId(arg.changeset.id);
187
- const accessToken = await this.getAccessToken(arg);
188
- const changeSets = await this.iModelClient.changeSets.get(accessToken, arg.iModelId, query);
189
- if (undefined === changeSets)
190
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, `Changeset not found`);
191
- return this.toChangeSetProps(changeSets[0]);
192
- }
193
- static async getQueryFromRange(arg) {
194
- const query = new imodelhub_client_1.ChangeSetQuery();
195
- if (!arg.range)
196
- return query; // returns all changesets
197
- const range = arg.range;
198
- const after = range.first === 0 ? "" : (await this.queryChangeset({ ...arg, changeset: { index: range.first } })).parentId;
199
- if (!range.end)
200
- query.fromId(after); //
201
- else {
202
- const last = (await this.queryChangeset({ ...arg, changeset: { index: range.end } })).id;
203
- if (range.end === 0 || after === last)
204
- return undefined;
205
- query.betweenChangeSets(last, after); // note: weird order is necessary because second arg being blank means "from start"
206
- }
207
- return query;
208
- }
209
- /** queries for change sets in the specified range. */
210
- static async queryChangesets(arg) {
211
- const query = await this.getQueryFromRange(arg);
212
- const val = [];
213
- if (query) {
214
- const accessToken = await this.getAccessToken(arg);
215
- const changeSets = await this.iModelClient.changeSets.get(accessToken, arg.iModelId, query);
216
- for (const cs of changeSets)
217
- val.push(this.toChangeSetProps(cs));
218
- }
219
- return val;
220
- }
221
- /** Downloads change sets in the specified range. */
222
- static async downloadChangesets(arg) {
223
- const val = [];
224
- const query = await this.getQueryFromRange(arg);
225
- if (query) {
226
- const accessToken = await this.getAccessToken(arg);
227
- const changeSets = await this.iModelClient.changeSets.download(accessToken, arg.iModelId, query, arg.targetDir);
228
- for (const cs of changeSets)
229
- val.push(this.toChangeSetFileProps(cs, arg.targetDir));
230
- }
231
- return val;
232
- }
233
- static async downloadV1Checkpoint(arg) {
234
- const checkpoint = arg.checkpoint;
235
- let checkpointQuery = new imodelhub_client_1.CheckpointQuery().selectDownloadUrl();
236
- checkpointQuery = checkpointQuery.precedingCheckpoint(checkpoint.changeset.id);
237
- const accessToken = await this.getAccessToken(checkpoint);
238
- const checkpoints = await this.iModelClient.checkpoints.get(accessToken, checkpoint.iModelId, checkpointQuery);
239
- if (checkpoints.length !== 1)
240
- throw new core_common_1.IModelError(core_bentley_1.BriefcaseStatus.VersionNotFound, "no checkpoints not found");
241
- const cancelRequest = {};
242
- const progressCallback = (progress) => {
243
- var _a;
244
- if (arg.onProgress && arg.onProgress(progress.loaded, progress.total) !== 0)
245
- (_a = cancelRequest.cancel) === null || _a === void 0 ? void 0 : _a.call(cancelRequest);
246
- };
247
- await this.iModelClient.checkpoints.download(accessToken, checkpoints[0], arg.localFile, progressCallback, cancelRequest);
248
- return checkpoints[0].mergedChangeSetId;
249
- }
250
- static async queryV2Checkpoint(arg) {
251
- const checkpointQuery = new imodelhub_client_1.CheckpointV2Query().byChangeSetId(arg.changeset.id).selectContainerAccessKey();
252
- const accessToken = await this.getAccessToken(arg);
253
- const checkpoints = await this.iModelClient.checkpointsV2.get(accessToken, arg.iModelId, checkpointQuery);
254
- if (checkpoints.length < 1)
255
- return undefined;
256
- const { containerAccessKeyContainer, containerAccessKeySAS, containerAccessKeyAccount, containerAccessKeyDbName } = checkpoints[0];
257
- if (!containerAccessKeyContainer || !containerAccessKeySAS || !containerAccessKeyAccount || !containerAccessKeyDbName)
258
- throw new Error("Invalid V2 checkpoint in iModelHub");
259
- return {
260
- container: containerAccessKeyContainer,
261
- auth: containerAccessKeySAS,
262
- user: containerAccessKeyAccount,
263
- dbAlias: containerAccessKeyDbName,
264
- storageType: "azure?sas=1",
265
- };
266
- }
267
- static async downloadV2Checkpoint(arg) {
268
- const checkpoint = arg.checkpoint;
269
- let checkpointQuery = new imodelhub_client_1.CheckpointV2Query();
270
- checkpointQuery = checkpointQuery.precedingCheckpointV2(checkpoint.changeset.id).selectContainerAccessKey();
271
- const accessToken = await this.getAccessToken(checkpoint);
272
- let checkpoints = [];
273
- try {
274
- checkpoints = await this.iModelClient.checkpointsV2.get(accessToken, checkpoint.iModelId, checkpointQuery);
275
- }
276
- catch (error) {
277
- if (error instanceof core_bentley_1.BentleyError && error.errorNumber === core_bentley_1.IModelHubStatus.Unknown)
278
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, "V2 checkpoints not supported");
279
- throw error;
280
- }
281
- if (checkpoints.length !== 1)
282
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, "V2 checkpoint not found");
283
- const { containerAccessKeyContainer, containerAccessKeySAS, containerAccessKeyAccount, containerAccessKeyDbName } = checkpoints[0];
284
- if (!containerAccessKeyContainer || !containerAccessKeySAS || !containerAccessKeyAccount || !containerAccessKeyDbName)
285
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, "invalid V2 checkpoint");
286
- const downloader = new IModelHost_1.IModelHost.platform.DownloadV2Checkpoint({
287
- container: containerAccessKeyContainer,
288
- auth: containerAccessKeySAS,
289
- storageType: "azure?sas=1",
290
- user: containerAccessKeyAccount,
291
- dbAlias: containerAccessKeyDbName,
292
- writeable: false,
293
- localFile: arg.localFile,
294
- });
295
- let timer;
296
- try {
297
- let total = 0;
298
- const onProgress = arg.onProgress;
299
- if (onProgress) {
300
- timer = setInterval(async () => {
301
- const progress = downloader.getProgress();
302
- total = progress.total;
303
- if (onProgress(progress.loaded, progress.total))
304
- downloader.cancelDownload();
305
- }, 250);
306
- }
307
- await downloader.downloadPromise;
308
- onProgress === null || onProgress === void 0 ? void 0 : onProgress(total, total); // make sure we call progress func one last time when download completes
309
- }
310
- catch (err) {
311
- throw (err.message === "cancelled") ? new itwin_client_1.UserCancelledError(core_bentley_1.BriefcaseStatus.DownloadCancelled, "download cancelled") : err;
312
- }
313
- finally {
314
- if (timer)
315
- clearInterval(timer);
316
- }
317
- return checkpoints[0].changeSetId;
318
- }
319
- static async releaseAllLocks(arg) {
320
- const accessToken = await this.getAccessToken(arg);
321
- return this.iModelClient.locks.deleteAll(accessToken, arg.iModelId, arg.briefcaseId);
322
- }
323
- static async releaseAllCodes(arg) {
324
- const accessToken = await this.getAccessToken(arg);
325
- return this.iModelClient.codes.deleteAll(accessToken, arg.iModelId, arg.briefcaseId);
326
- }
327
- static async queryAllLocks(arg) {
328
- const accessToken = await this.getAccessToken(arg);
329
- const heldLocks = await this.iModelClient.locks.get(accessToken, arg.iModelId, new imodelhub_client_1.LockQuery().byBriefcaseId(arg.briefcaseId));
330
- return heldLocks.map((lock) => ({ id: lock.objectId, state: lock.lockLevel }));
331
- }
332
- static async queryAllCodes(arg) {
333
- const accessToken = await this.getAccessToken(arg);
334
- const reservedCodes = await this.iModelClient.codes.get(accessToken, arg.iModelId, new imodelhub_client_1.CodeQuery().byBriefcaseId(arg.briefcaseId));
335
- return reservedCodes.map((code) => ({ spec: code.codeSpecId, scope: code.codeScope, value: code.value }));
336
- }
337
- static toHubLock(arg, reqLock) {
338
- const lock = new imodelhub_client_1.Lock();
339
- lock.briefcaseId = arg.briefcaseId;
340
- lock.lockLevel = reqLock.state;
341
- lock.lockType = imodelhub_client_1.LockType.Element;
342
- lock.objectId = reqLock.id;
343
- lock.releasedWithChangeSet = arg.changeset.id;
344
- lock.seedFileId = arg.iModelId;
345
- return lock;
346
- }
347
- static toHubLocks(arg) {
348
- return arg.locks.map((lock) => this.toHubLock(arg, lock));
349
- }
350
- static async acquireLocks(arg) {
351
- const hubLocks = this.toHubLocks(arg);
352
- const accessToken = await this.getAccessToken(arg);
353
- await this.iModelClient.locks.update(accessToken, arg.iModelId, hubLocks);
354
- }
355
- }
356
- exports.IModelHubBackend = IModelHubBackend;
357
- IModelHubBackend._isIModelBankClient = false;
358
- IModelHubBackend.changeSet0 = { id: "", changesType: 0, description: "revision0", parentId: "", briefcaseId: 0, pushDate: "", userCreated: "", index: 0 };
359
- //# sourceMappingURL=IModelHubBackend.js.map