@itwin/core-backend 5.13.0-dev.6 → 5.13.0-dev.7

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.
Files changed (43) hide show
  1. package/lib/cjs/CheckpointManager.d.ts +3 -0
  2. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  3. package/lib/cjs/CheckpointManager.js +3 -1
  4. package/lib/cjs/CheckpointManager.js.map +1 -1
  5. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  6. package/lib/cjs/CloudSqlite.js +19 -8
  7. package/lib/cjs/CloudSqlite.js.map +1 -1
  8. package/lib/cjs/IModelDb.d.ts +36 -2
  9. package/lib/cjs/IModelDb.d.ts.map +1 -1
  10. package/lib/cjs/IModelDb.js +81 -12
  11. package/lib/cjs/IModelDb.js.map +1 -1
  12. package/lib/cjs/IModelHost.d.ts.map +1 -1
  13. package/lib/cjs/IModelHost.js +3 -0
  14. package/lib/cjs/IModelHost.js.map +1 -1
  15. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  16. package/lib/cjs/internal/workspace/WorkspaceImpl.js +7 -2
  17. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  18. package/lib/esm/CheckpointManager.d.ts +3 -0
  19. package/lib/esm/CheckpointManager.d.ts.map +1 -1
  20. package/lib/esm/CheckpointManager.js +3 -1
  21. package/lib/esm/CheckpointManager.js.map +1 -1
  22. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  23. package/lib/esm/CloudSqlite.js +19 -8
  24. package/lib/esm/CloudSqlite.js.map +1 -1
  25. package/lib/esm/IModelDb.d.ts +36 -2
  26. package/lib/esm/IModelDb.d.ts.map +1 -1
  27. package/lib/esm/IModelDb.js +82 -13
  28. package/lib/esm/IModelDb.js.map +1 -1
  29. package/lib/esm/IModelHost.d.ts.map +1 -1
  30. package/lib/esm/IModelHost.js +3 -0
  31. package/lib/esm/IModelHost.js.map +1 -1
  32. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  33. package/lib/esm/internal/workspace/WorkspaceImpl.js +7 -2
  34. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  35. package/lib/esm/test/element/ElementAspect.test.js +154 -2
  36. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  37. package/lib/esm/test/element/ElementRoundTrip.test.js +5 -0
  38. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  39. package/lib/esm/test/standalone/CloudSqlite.test.js +73 -0
  40. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  41. package/lib/esm/test/standalone/Workspace.test.js +52 -0
  42. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  43. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/WorkspaceImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport { createHash } from \"crypto\";\nimport * as fs from \"fs-extra\";\nimport { dirname, extname, join } from \"path\";\nimport { AccessToken, assert, BeEvent, DbResult, Mutable, OpenMode, ProcessDetector } from \"@itwin/core-bentley\";\nimport { CloudSqliteError, FilePropertyProps, LocalDirName, LocalFileName, WorkspaceError } from \"@itwin/core-common\";\nimport { CloudSqlite } from \"../../CloudSqlite\";\nimport { IModelHost, KnownLocations } from \"../../IModelHost\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { SQLiteDb } from \"../../SQLiteDb\";\nimport { SqliteStatement } from \"../../SqliteStatement\";\nimport { SettingName, Settings, SettingsContainer, SettingsDictionaryProps, SettingsPriority } from \"../../workspace/Settings\";\nimport { isSettingsDb, queryStringResourceNames } from \"../../workspace/SettingsDb\";\nimport { settingsResourceName } from \"../../workspace/SettingsEditor\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport {\n GetWorkspaceContainerArgs, Workspace, WorkspaceContainer, WorkspaceContainerId, WorkspaceContainerProps, WorkspaceDb, WorkspaceDbCloudProps,\n WorkspaceDbFullName, WorkspaceDbLoadError, WorkspaceDbLoadErrors, WorkspaceDbManifest, WorkspaceDbName, WorkspaceDbNameAndVersion, WorkspaceDbProps,\n WorkspaceDbQueryResourcesArgs, WorkspaceDbSettingsProps, WorkspaceDbVersion, WorkspaceOpts, WorkspaceResourceName, WorkspaceSettingNames,\n} from \"../../workspace/Workspace\";\nimport { CreateNewWorkspaceContainerArgs, CreateNewWorkspaceDbVersionArgs, EditableWorkspaceContainer, EditableWorkspaceDb, WorkspaceEditor, WorkspaceEditor as WorkspaceEditorNs } from \"../../workspace/WorkspaceEditor\";\nimport { WorkspaceSqliteDb } from \"./WorkspaceSqliteDb\";\nimport { SettingsImpl } from \"./SettingsImpl\";\nimport { _implementationProhibited, _nativeDb } from \"../Symbols\";\nimport { getOnlineStatus } from \"../OnlineStatus\";\nimport { BlobContainer } from \"../../BlobContainerService\";\n\n\nfunction workspaceDbNameWithDefault(dbName?: WorkspaceDbName): WorkspaceDbName {\n return dbName ?? \"workspace-db\";\n}\n\nconst maxFileExtensionLength = 255 - 40 - 1; // Reserve space for the SHA-1 hash and \".\" in the generated filename.\n\nfunction isSafeFileExtension(fileExt: string): boolean {\n const invalidChars = \"<>:\\\"/\\\\|?*\";\n return fileExt.length <= maxFileExtensionLength\n && Buffer.byteLength(fileExt, \"utf8\") <= maxFileExtensionLength\n && !fileExt.endsWith(\" \")\n && !fileExt.endsWith(\".\")\n && !Array.from(fileExt).some((char) => invalidChars.includes(char) || char.charCodeAt(0) < 0x20);\n}\n\n/** file extension for local WorkspaceDbs */\nexport const workspaceDbFileExt = \"itwin-workspace\";\n\ninterface WorkspaceCloudContainer extends CloudSqlite.CloudContainer {\n connectCount: number;\n sharedConnect(): boolean;\n sharedDisconnect(): void;\n}\n\ninterface WorkspaceCloudCache extends CloudSqlite.CloudCache {\n workspaceContainers: Map<string, WorkspaceCloudContainer>;\n}\n\nfunction makeWorkspaceCloudCache(arg: CloudSqlite.CreateCloudCacheArg): WorkspaceCloudCache {\n const cache = CloudSqlite.CloudCaches.getCache(arg) as WorkspaceCloudCache;\n if (undefined === cache.workspaceContainers) // if we just created this container, add the map.\n CloudSqlite.addHiddenProperty(cache, \"workspaceContainers\", new Map<string, WorkspaceCloudContainer>());\n return cache;\n}\n\nfunction getContainerFullId(props: WorkspaceContainerProps) {\n return `${props.baseUri}/${props.containerId}`;\n}\n\nfunction getWorkspaceCloudContainer(props: CloudSqlite.ContainerAccessProps, cache: WorkspaceCloudCache) {\n const id = getContainerFullId(props);\n let cloudContainer = cache.workspaceContainers.get(id);\n if (undefined !== cloudContainer)\n return cloudContainer;\n\n cloudContainer = CloudSqlite.createCloudContainer(props) as WorkspaceCloudContainer;\n cache.workspaceContainers.set(id, cloudContainer);\n cloudContainer.connectCount = 0;\n CloudSqlite.addHiddenProperty(cloudContainer, \"sharedConnect\", function (this: WorkspaceCloudContainer) {\n if (this.connectCount++ === 0) {\n this.connect(cache);\n return true;\n }\n\n return false;\n });\n\n CloudSqlite.addHiddenProperty(cloudContainer, \"sharedDisconnect\", function (this: WorkspaceCloudContainer) {\n if (--this.connectCount <= 0) {\n this.disconnect();\n cache.workspaceContainers.delete(id);\n this.connectCount = 0;\n }\n });\n\n return cloudContainer;\n}\n\nclass WorkspaceContainerImpl implements WorkspaceContainer {\n public readonly [_implementationProhibited] = undefined;\n public readonly workspace: WorkspaceImpl;\n public readonly filesDir: LocalDirName;\n public readonly id: WorkspaceContainerId;\n public readonly fromProps: WorkspaceContainerProps;\n private readonly _cloudContainer?: WorkspaceCloudContainer | undefined;\n\n public get cloudContainer(): WorkspaceCloudContainer | undefined {\n return this._cloudContainer;\n }\n\n protected _wsDbs = new Map<string, WorkspaceDb>();\n public get dirName() { return join(this.workspace.containerDir, this.id); }\n\n public constructor(workspace: WorkspaceImpl, props: WorkspaceContainerProps & { accessToken: AccessToken }) {\n validateWorkspaceContainerId(props.containerId);\n this.workspace = workspace;\n this.id = props.containerId;\n this.fromProps = props;\n\n if (props.baseUri !== \"\")\n this._cloudContainer = getWorkspaceCloudContainer(props, this.workspace.getCloudCache());\n\n workspace.addContainer(this);\n this.filesDir = join(this.dirName, \"Files\");\n\n const cloudContainer = this.cloudContainer;\n if (undefined === cloudContainer)\n return;\n\n // sharedConnect returns true if we just connected (if the container is shared, it may have already been connected)\n if (cloudContainer.sharedConnect() && false !== props.syncOnConnect) {\n try {\n if (ProcessDetector.isMobileAppBackend || ProcessDetector.isElectronAppBackend) {\n // Even though we've already confirmed that we are running in a native app backend,\n // having code here that references NativeHost causes a runtime exception. So we use\n // getOnlineStatus to determine whether we're online, which NativeHost keeps up to date.\n if (!getOnlineStatus()) {\n // If running in a native app and we're offline, don't check for changes.\n // Doing so will fail and be caught below, but it has to wait for the network\n // timeout.\n return;\n }\n }\n cloudContainer.checkForChanges();\n } catch {\n // must be offline\n }\n }\n }\n\n public resolveDbFileName(props: WorkspaceDbProps): WorkspaceDbFullName {\n const dbName = workspaceDbNameWithDefault(props.dbName);\n const container = this.cloudContainer;\n if (undefined === container)\n return join(this.dirName, `${dbName}.${workspaceDbFileExt}`); // local file, versions not allowed\n\n return CloudSqlite.querySemverMatch({ ...props, container, dbName });\n }\n\n public addWorkspaceDb(toAdd: WorkspaceDb) {\n if (undefined !== this._wsDbs.get(toAdd.dbFileName))\n WorkspaceError.throwError(\"already-exists\", { message: `workspaceDb '${toAdd.dbName}' already exists in workspace` });\n this._wsDbs.set(toAdd.dbFileName, toAdd);\n }\n\n public getWorkspaceDb(props?: WorkspaceDbProps): WorkspaceDb {\n const dbFileName = this.resolveDbFileName(props ?? {});\n return this._wsDbs.get(dbFileName) ?? new WorkspaceDbImpl(props ?? {}, this);\n }\n\n public closeWorkspaceDb(toDrop: WorkspaceDb) {\n const wsDb = this._wsDbs.get(toDrop.dbFileName);\n if (wsDb === toDrop) {\n this._wsDbs.delete(toDrop.dbFileName);\n wsDb.close();\n }\n }\n\n public close() {\n for (const [_name, db] of this._wsDbs)\n db.close();\n this._wsDbs.clear();\n this.cloudContainer?.sharedDisconnect();\n }\n}\n\n/** Implementation of WorkspaceDb */\nclass WorkspaceDbImpl implements WorkspaceDb {\n public readonly [_implementationProhibited] = undefined;\n public readonly sqliteDb = new WorkspaceSqliteDb();\n public readonly dbName: WorkspaceDbName;\n protected readonly _container: WorkspaceContainer;\n public readonly onClose = new BeEvent<() => void>();\n public readonly dbFileName: string;\n protected _manifest?: WorkspaceDbManifest;\n\n /** true if this WorkspaceDb is currently open */\n public get isOpen() { return this.sqliteDb.isOpen; }\n public get container(): WorkspaceContainer { return this._container; }\n public queryFileResource(rscName: WorkspaceResourceName): { localFileName: LocalFileName, info: IModelJsNative.EmbedFileQuery } | undefined {\n const info = this.sqliteDb[_nativeDb].queryEmbeddedFile(rscName);\n if (undefined === info)\n return undefined;\n\n // since resource names can contain illegal characters, path separators, etc., we make the local file name from its hash, in hex.\n let localFileName = join(this._container.filesDir, createHash(\"sha1\").update(this.dbFileName).update(rscName).digest(\"hex\"));\n if (info.fileExt !== \"\" && isSafeFileExtension(info.fileExt)) // since some applications may expect to see the extension, append it here if it was supplied.\n localFileName = `${localFileName}.${info.fileExt}`;\n return { localFileName, info };\n }\n\n public constructor(props: WorkspaceDbProps, container: WorkspaceContainer) {\n this.dbName = workspaceDbNameWithDefault(props.dbName);\n CloudSqlite.validateDbName(this.dbName);\n this._container = container;\n this.dbFileName = container.resolveDbFileName(props);\n container.addWorkspaceDb(this);\n if (true === props.prefetch)\n this.prefetch();\n }\n\n public open() {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.Readonly, this._container.cloudContainer);\n }\n\n public close() {\n if (this.isOpen) {\n this.onClose.raiseEvent();\n this.sqliteDb.closeDb();\n this._container.closeWorkspaceDb(this);\n }\n }\n public get version() {\n const cloudContainer = this.container.cloudContainer;\n if (undefined === cloudContainer)\n return \"1.0.0\"; // local file, no versioning. return default\n return CloudSqlite.parseDbFileName(this.dbFileName).version;\n }\n\n public get manifest(): WorkspaceDbManifest {\n return this._manifest ??= this.withOpenDb((db) => {\n const manifestJson = db[_nativeDb].queryFileProperty(workspaceManifestProperty, true) as string | undefined;\n return manifestJson ? JSON.parse(manifestJson) : { workspaceName: this.dbName };\n });\n }\n\n private withOpenDb<T>(operation: (db: WorkspaceSqliteDb) => T): T {\n const done = this.isOpen ? () => { } : (this.open(), () => this.close());\n try {\n return operation(this.sqliteDb);\n } finally {\n done();\n }\n }\n\n public getString(rscName: WorkspaceResourceName): string | undefined {\n return this.withOpenDb((db) => {\n return db.withSqliteStatement(\"SELECT value from strings WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getValueString(0) : undefined;\n });\n });\n }\n\n public getBlobReader(rscName: WorkspaceResourceName): SQLiteDb.BlobIO {\n return this.sqliteDb.withSqliteStatement(\"SELECT rowid from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n const blobReader = SQLiteDb.createBlobIO();\n blobReader.open(this.sqliteDb[_nativeDb], { tableName: \"blobs\", columnName: \"value\", row: stmt.getValueInteger(0) });\n return blobReader;\n });\n }\n\n public getBlob(rscName: WorkspaceResourceName): Uint8Array | undefined {\n return this.withOpenDb((db) => {\n return db.withSqliteStatement(\"SELECT value from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getValueBlob(0) : undefined;\n });\n });\n }\n\n public getFile(rscName: WorkspaceResourceName, targetFileName?: LocalFileName): LocalFileName | undefined {\n return this.withOpenDb((db) => {\n const file = this.queryFileResource(rscName);\n if (!file)\n return undefined;\n\n const info = file.info;\n const localFileName = targetFileName ?? file.localFileName;\n\n // check whether the file is already up to date.\n const stat = fs.existsSync(localFileName) && fs.statSync(localFileName);\n if (stat && Math.round(stat.mtimeMs) === info.date && stat.size === info.size)\n return localFileName; // yes, we're done\n\n // extractEmbeddedFile fails if the file exists or if the directory does not exist\n if (stat)\n fs.removeSync(localFileName);\n else\n IModelJsFs.recursiveMkDirSync(dirname(localFileName));\n\n db[_nativeDb].extractEmbeddedFile({ name: rscName, localFileName });\n const date = new Date(info.date);\n fs.utimesSync(localFileName, date, date); // set the last-modified date of the file to match date in container\n fs.chmodSync(localFileName, \"0444\"); // set file readonly\n return localFileName;\n });\n }\n\n public prefetch(opts?: CloudSqlite.PrefetchProps): CloudSqlite.CloudPrefetch {\n const cloudContainer = this._container.cloudContainer;\n if (cloudContainer === undefined)\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"no cloud container to prefetch\" });\n return CloudSqlite.startCloudPrefetch(cloudContainer, this.dbFileName, opts);\n }\n\n public queryResources(args: WorkspaceDbQueryResourcesArgs): void {\n const table = \"blob\" !== args.type ? \"strings\" : \"blobs\";\n this.withOpenDb((db) => {\n const where = undefined !== args.namePattern ? ` WHERE id ${args.nameCompare ?? \"=\"} ?` : \"\";\n db.withSqliteStatement(`SELECT id from ${table}${where}`, (stmt) => {\n function* makeIterable() {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n yield stmt.getValueString(0);\n }\n }\n\n if (undefined !== args.namePattern) {\n stmt.bindString(1, args.namePattern);\n }\n\n args.callback(makeIterable());\n });\n });\n }\n}\n\n/** Implementation of Workspace */\nclass WorkspaceImpl implements Workspace {\n public readonly [_implementationProhibited] = undefined;\n private _containers = new Map<WorkspaceContainerId, WorkspaceContainerImpl>();\n public readonly containerDir: LocalDirName;\n public readonly settings: Settings;\n protected _cloudCache?: WorkspaceCloudCache;\n public getCloudCache(): WorkspaceCloudCache {\n return this._cloudCache ??= makeWorkspaceCloudCache({ cacheName: \"Workspace\", cacheSize: \"20G\" });\n }\n\n public constructor(settings: Settings, opts?: WorkspaceOpts) {\n this.settings = settings;\n this.containerDir = opts?.containerDir ?? join(IModelHost.cacheDir, \"Workspace\");\n let settingsFiles = opts?.settingsFiles;\n if (settingsFiles) {\n if (typeof settingsFiles === \"string\")\n settingsFiles = [settingsFiles];\n settingsFiles.forEach((file) => settings.addFile(file, SettingsPriority.application));\n }\n }\n\n public addContainer(toAdd: WorkspaceContainerImpl) {\n if (undefined !== this._containers.get(toAdd.id))\n WorkspaceError.throwError(\"container-exists\", { message: `container ${toAdd.id} already exists in workspace` });\n this._containers.set(toAdd.id, toAdd);\n }\n\n public findContainer(containerId: WorkspaceContainerId) {\n return this._containers.get(containerId);\n }\n\n public getContainer(props: GetWorkspaceContainerArgs): WorkspaceContainer {\n return this.findContainer(props.containerId) ?? new WorkspaceContainerImpl(this, props);\n }\n\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<WorkspaceContainer> {\n if (props.accessToken)\n return this.getContainer({ ...props, accessToken: props.accessToken });\n\n const accessToken = (props.baseUri === \"\" || props.isPublic)\n ? \"\"\n : await CloudSqlite.requestToken({ ...props, accessLevel: \"read\" });\n return this.getContainer({ ...props, accessToken });\n }\n\n public async getWorkspaceDb(props: WorkspaceDbCloudProps): Promise<WorkspaceDb> {\n let container: WorkspaceContainer | undefined = this.findContainer(props.containerId);\n if (undefined === container) {\n const accessToken = (props.baseUri === \"\" || props.isPublic) ? \"\" : await CloudSqlite.requestToken({ accessLevel: \"read\", ...props });\n container = new WorkspaceContainerImpl(this, { ...props, accessToken });\n }\n return container.getWorkspaceDb(props);\n }\n\n public async loadSettingsDictionary(props: WorkspaceDbSettingsProps | WorkspaceDbSettingsProps[], problems?: WorkspaceDbLoadError[]) {\n if (!Array.isArray(props))\n props = [props];\n\n const getSettingsResourceNames = (db: WorkspaceDb, dbProps: WorkspaceDbSettingsProps): WorkspaceResourceName[] => {\n if (!isSettingsDb(db))\n return [dbProps.resourceName ?? settingsResourceName];\n\n const all = queryStringResourceNames(db);\n // If resourceName is supplied, load it last so it has highest precedence at the same priority.\n return dbProps.resourceName !== undefined\n ? [...all.filter((name) => name !== dbProps.resourceName), dbProps.resourceName]\n : all;\n };\n\n for (const prop of props) {\n const db = await this.getWorkspaceDb(prop);\n db.open();\n try {\n const resourceNames = getSettingsResourceNames(db, prop);\n\n for (const resourceName of resourceNames) {\n try {\n const manifest = db.manifest;\n const dictProps: SettingsDictionaryProps = { name: resourceName, workspaceDb: db, priority: prop.priority };\n // don't load if we already have this dictionary. Happens if the same WorkspaceDb is in more than one list\n if (undefined === this.settings.getDictionary(dictProps)) {\n const settingsJson = db.getString(resourceName);\n if (undefined === settingsJson)\n throwWorkspaceDbLoadError(`could not load setting dictionary resource '${resourceName}' from: '${manifest.workspaceName}'`, prop, db);\n\n this.settings.addJson(dictProps, settingsJson);\n const dict = this.settings.getDictionary(dictProps);\n if (dict) {\n Workspace.onSettingsDictionaryLoadedFn({ dict, from: db });\n // if the dictionary we just loaded has a \"settingsWorkspaces\" entry, load them too, recursively\n const nested = dict.getSetting<WorkspaceDbSettingsProps[]>(WorkspaceSettingNames.settingsWorkspaces);\n if (nested !== undefined) {\n IModelHost.settingsSchemas.validateSetting<WorkspaceDbSettingsProps[]>(nested, WorkspaceSettingNames.settingsWorkspaces);\n await this.loadSettingsDictionary(nested, problems);\n }\n }\n }\n } catch (e) {\n problems?.push(e as WorkspaceDbLoadError);\n }\n }\n } catch (e) {\n problems?.push(e as WorkspaceDbLoadError);\n } finally {\n db.close();\n }\n }\n }\n\n public close() {\n this.settings.close();\n for (const [_id, container] of this._containers)\n container.close();\n this._containers.clear();\n }\n\n public resolveWorkspaceDbSetting(settingName: SettingName, filter?: Workspace.DbListFilter): WorkspaceDbCloudProps[] {\n const settingDef = IModelHost.settingsSchemas.settingDefs.get(settingName);\n const combine = settingDef?.combineArray === true;\n filter = filter ?? (() => true);\n const result: WorkspaceDbCloudProps[] = [];\n for (const entry of this.settings.getSettingEntries<WorkspaceDbCloudProps[]>(settingName)) {\n for (const dbProp of entry.value) {\n if (filter(dbProp, entry.dictionary)) {\n result.push(dbProp);\n }\n }\n\n if (!combine) {\n break;\n }\n }\n\n return result;\n }\n\n public async getWorkspaceDbs(args: Workspace.DbListOrSettingName & { filter?: Workspace.DbListFilter, problems?: WorkspaceDbLoadError[] }): Promise<WorkspaceDb[]> {\n const dbList = (args.settingName !== undefined) ? this.resolveWorkspaceDbSetting(args.settingName, args.filter) : args.dbs;\n const result: WorkspaceDb[] = [];\n const pushUnique = (wsDb: WorkspaceDb) => {\n for (const db of result) {\n // if we already have this db, skip it. The test below also has to consider that we create a separate WorkspaceDb object for the same\n // database from more than one Workspace (though then they must use a \"shared\" CloudContainer).\n if (db === wsDb || ((db.container.cloudContainer === wsDb.container.cloudContainer) && (db.dbFileName === wsDb.dbFileName)))\n return; // this db is redundant\n }\n result.push(wsDb);\n };\n\n for (const dbProps of dbList) {\n try {\n pushUnique(await this.getWorkspaceDb(dbProps));\n } catch (e) {\n const loadErr = e as WorkspaceDbLoadError;\n loadErr.wsDbProps = dbProps;\n args.problems?.push(loadErr);\n }\n }\n return result;\n }\n}\n\nconst workspaceEditorName = \"WorkspaceEditor\"; // name of the cache for the editor workspace\nclass EditorWorkspaceImpl extends WorkspaceImpl {\n public override getCloudCache(): WorkspaceCloudCache {\n return this._cloudCache ??= makeWorkspaceCloudCache({ cacheName: workspaceEditorName, cacheSize: \"20G\" });\n }\n}\n\nclass EditorImpl implements WorkspaceEditor {\n public readonly [_implementationProhibited] = undefined;\n public workspace = new EditorWorkspaceImpl(new SettingsImpl(), { containerDir: join(IModelHost.cacheDir, workspaceEditorName) });\n\n public async initializeContainer(args: CreateNewWorkspaceContainerArgs) {\n class CloudAccess extends CloudSqlite.DbAccess<WorkspaceSqliteDb> {\n protected static override _cacheName = workspaceEditorName;\n public static async initializeWorkspace(args: CreateNewWorkspaceContainerArgs) {\n const props = await this.createBlobContainer({ scope: args.scope, metadata: { ...args.metadata, containerType: args.containerType ?? \"workspace\" } });\n const dbFullName = CloudSqlite.makeSemverName(workspaceDbNameWithDefault(args.dbName), \"0.0.0\");\n await super._initializeDb({ ...args, props, dbName: dbFullName, dbType: WorkspaceSqliteDb, blockSize: \"4M\" });\n return props;\n }\n }\n return CloudAccess.initializeWorkspace(args);\n }\n\n public async createNewCloudContainer(args: CreateNewWorkspaceContainerArgs): Promise<EditableWorkspaceContainer> {\n const cloudContainer = await this.initializeContainer(args);\n const userToken = await IModelHost.authorizationClient?.getAccessToken();\n const accessToken = await CloudSqlite.requestToken({ ...cloudContainer, accessLevel: \"write\", userToken });\n return this.getContainer({ accessToken, ...cloudContainer, writeable: true, description: args.metadata.description });\n }\n\n public getContainer(props: GetWorkspaceContainerArgs): EditableWorkspaceContainer {\n return this.workspace.findContainer(props.containerId) as EditableWorkspaceContainer | undefined ?? new EditorContainerImpl(this.workspace, props);\n }\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<EditableWorkspaceContainer> {\n if (props.accessToken)\n return this.getContainer({ ...props, accessToken: props.accessToken });\n\n const accessToken = (props.baseUri === \"\")\n ? \"\"\n : await CloudSqlite.requestToken({ ...props, accessLevel: \"write\" });\n return this.getContainer({ ...props, accessToken });\n }\n\n public async findContainers(args: WorkspaceEditorNs.QueryWorkspaceContainersArgs): Promise<EditableWorkspaceContainer[]> {\n const containers = await WorkspaceEditorNs.queryContainers(args);\n const userToken = await IModelHost.getAccessToken();\n const results: EditableWorkspaceContainer[] = [];\n for (const containerMeta of containers) {\n // queryContainers already validates that BlobContainer.service is defined, so the non-null assertion is safe here.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tokenProps = await BlobContainer.service!.requestToken({ containerId: containerMeta.containerId, userToken, accessLevel: \"write\" });\n results.push(this.getContainer({\n containerId: containerMeta.containerId,\n baseUri: tokenProps.baseUri,\n storageType: tokenProps.provider,\n accessToken: tokenProps.token,\n writeable: true,\n }));\n }\n return results;\n }\n\n public close() {\n this.workspace.close();\n }\n}\n\nclass EditorContainerImpl extends WorkspaceContainerImpl implements EditableWorkspaceContainer {\n public get cloudProps(): WorkspaceContainerProps | undefined {\n const cloudContainer = this.cloudContainer;\n if (undefined === cloudContainer)\n return undefined;\n return {\n baseUri: cloudContainer.baseUri,\n containerId: cloudContainer.containerId,\n storageType: cloudContainer.storageType as \"azure\" | \"google\",\n isPublic: cloudContainer.isPublic,\n };\n }\n\n public async createNewWorkspaceDbVersion(args: CreateNewWorkspaceDbVersionArgs): Promise<{ oldDb: WorkspaceDbNameAndVersion, newDb: WorkspaceDbNameAndVersion }> {\n const container = this.cloudContainer;\n if (undefined === container)\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"versions require cloud containers\" });\n\n const fromDb = { ...args.fromProps, dbName: workspaceDbNameWithDefault(args.fromProps?.dbName) };\n return CloudSqlite.createNewDbVersion(container, { ...args, fromDb });\n }\n\n public override getWorkspaceDb(props: WorkspaceDbProps): EditableWorkspaceDb {\n return this.getEditableDb(props);\n }\n\n public getEditableDb(props: WorkspaceDbProps): EditableWorkspaceDb {\n const dbFileName = this.resolveDbFileName(props);\n const db = this._wsDbs.get(dbFileName) as EditableDbImpl | undefined ?? new EditableDbImpl(props, this);\n\n if (this.cloudContainer && !CloudSqlite.isSemverEditable(db.dbFileName, this.cloudContainer)) {\n this._wsDbs.delete(dbFileName);\n CloudSqliteError.throwError(\"already-published\", { message: `${db.dbFileName} has been published and is not editable. Make a new version first.` });\n }\n\n return db;\n }\n\n public acquireWriteLock(user: string): void {\n if (this.cloudContainer) {\n this.cloudContainer.acquireWriteLock(user);\n CloudSqlite.addHiddenProperty(this.cloudContainer, \"writeLockHeldBy\", user);\n }\n }\n public releaseWriteLock() {\n if (this.cloudContainer)\n CloudSqlite.releaseWriteLock(this.cloudContainer);\n }\n\n public abandonChanges() {\n if (this.cloudContainer) {\n this.cloudContainer.abandonChanges();\n CloudSqlite.addHiddenProperty(this.cloudContainer, \"writeLockHeldBy\", undefined);\n }\n }\n\n public async withEditableDb(user: string, operation: (db: EditableWorkspaceDb) => void, props?: WorkspaceDbProps): Promise<void> {\n this.acquireWriteLock(user);\n try {\n let db: EditableWorkspaceDb;\n try {\n db = this.getEditableDb({ ...props, includePrerelease: true });\n } catch (error) {\n if (!CloudSqliteError.isError(error, \"already-published\"))\n throw error;\n\n const newVersion = await this.createNewWorkspaceDbVersion({\n fromProps: props,\n versionType: \"prerelease\",\n identifier: \"beta\",\n });\n db = this.getEditableDb(newVersion.newDb);\n }\n\n db.open();\n try {\n operation(db);\n } finally {\n db.close();\n }\n this.releaseWriteLock();\n } catch (error) {\n this.abandonChanges();\n throw error;\n }\n }\n\n public async createDb(args: { dbName?: string, version?: WorkspaceDbVersion, manifest: WorkspaceDbManifest }): Promise<EditableWorkspaceDb> {\n if (!this.cloudContainer) {\n WorkspaceEditor.createEmptyDb({ localFileName: this.resolveDbFileName(args), manifest: args.manifest });\n } else {\n // currently the only way to create a workspaceDb in a cloud container is to create a temporary workspaceDb and upload it.\n const tempDbFile = join(KnownLocations.tmpdir, `empty.${workspaceDbFileExt}`);\n if (fs.existsSync(tempDbFile))\n IModelJsFs.removeSync(tempDbFile);\n\n WorkspaceEditor.createEmptyDb({ localFileName: tempDbFile, manifest: args.manifest });\n await CloudSqlite.uploadDb(this.cloudContainer, { localFileName: tempDbFile, dbName: CloudSqlite.makeSemverName(workspaceDbNameWithDefault(args.dbName), args.version) });\n IModelJsFs.removeSync(tempDbFile);\n }\n\n return this.getWorkspaceDb(args);\n }\n}\n\nclass EditableDbImpl extends WorkspaceDbImpl implements EditableWorkspaceDb {\n public override get container(): EditableWorkspaceContainer {\n assert(this._container instanceof EditorContainerImpl);\n return this._container;\n }\n\n private static validateResourceName(name: WorkspaceResourceName) {\n if (name.trim() !== name)\n WorkspaceError.throwError(\"invalid-name\", { message: \"resource name may not have leading or trailing spaces\" });\n\n if (name.length > 1024) {\n WorkspaceError.throwError(\"invalid-name\", { message: \"resource name too long\" });\n }\n }\n\n private validateResourceSize(val: Uint8Array | string) {\n const len = typeof val === \"string\" ? val.length : val.byteLength;\n if (len > (1024 * 1024 * 1024)) // one gigabyte\n WorkspaceError.throwError(\"too-large\", { message: \"value is too large\" });\n }\n public get cloudProps(): WorkspaceDbCloudProps | undefined {\n const props = (this._container as EditorContainerImpl).cloudProps as Mutable<WorkspaceDbCloudProps>;\n if (props === undefined)\n return undefined;\n\n const parsed = CloudSqlite.parseDbFileName(this.dbFileName);\n return { ...props, dbName: parsed.dbName, version: parsed.version };\n }\n\n public override open() {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.ReadWrite, this._container.cloudContainer);\n }\n\n public override close() {\n if (this.isOpen) {\n // whenever we close an EditableDb, update the name of the last editor in the manifest\n const cloudContainer = this.container.cloudContainer;\n const lastEditedBy = cloudContainer === undefined ? undefined : CloudSqlite.getWriteLockHeldBy(cloudContainer);\n if (lastEditedBy !== undefined)\n this.updateManifest({ ...this.manifest, lastEditedBy, lastEditedAt: new Date().toISOString() });\n\n // make sure all changes were saved before we close\n this.sqliteDb.saveChanges();\n }\n super.close();\n }\n\n private getFileModifiedTime(localFileName: LocalFileName): number {\n return Math.round(fs.statSync(localFileName).mtimeMs);\n }\n\n private performWriteSql(rscName: WorkspaceResourceName, sql: string, bind?: (stmt: SqliteStatement) => void) {\n this.sqliteDb.withSqliteStatement(sql, (stmt) => {\n stmt.bindString(1, rscName);\n bind?.(stmt);\n const rc = stmt.step();\n if (DbResult.BE_SQLITE_DONE !== rc) {\n if (DbResult.BE_SQLITE_CONSTRAINT_PRIMARYKEY === rc)\n WorkspaceError.throwError(\"resource-exists\", { message: `resource \"${rscName}\" already exists` });\n\n WorkspaceError.throwError(\"write-error\", { message: `workspace [${sql}], rc=${rc}` });\n }\n });\n this.sqliteDb.saveChanges();\n }\n\n public updateManifest(manifest: WorkspaceDbManifest) {\n this.sqliteDb[_nativeDb].saveFileProperty(workspaceManifestProperty, JSON.stringify(manifest));\n this._manifest = undefined;\n }\n public updateSettingsResource(settings: SettingsContainer, rscName?: string) {\n this.updateString(rscName ?? \"settingsDictionary\", JSON.stringify(settings));\n }\n public addString(rscName: WorkspaceResourceName, val: string): void {\n EditableDbImpl.validateResourceName(rscName);\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO strings(id,value) VALUES(?,?)\", (stmt) => stmt.bindString(2, val));\n }\n public updateString(rscName: WorkspaceResourceName, val: string): void {\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO strings(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\", (stmt) => stmt.bindString(2, val));\n }\n public removeString(rscName: WorkspaceResourceName): void {\n this.performWriteSql(rscName, \"DELETE FROM strings WHERE id=?\");\n }\n public addBlob(rscName: WorkspaceResourceName, val: Uint8Array): void {\n EditableDbImpl.validateResourceName(rscName);\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO blobs(id,value) VALUES(?,?)\", (stmt) => stmt.bindBlob(2, val));\n }\n public updateBlob(rscName: WorkspaceResourceName, val: Uint8Array): void {\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO blobs(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\", (stmt) => stmt.bindBlob(2, val));\n }\n public getBlobWriter(rscName: WorkspaceResourceName): SQLiteDb.BlobIO {\n return this.sqliteDb.withSqliteStatement(\"SELECT rowid from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n const blobWriter = SQLiteDb.createBlobIO();\n blobWriter.open(this.sqliteDb[_nativeDb], { tableName: \"blobs\", columnName: \"value\", row: stmt.getValueInteger(0), writeable: true });\n return blobWriter;\n });\n }\n public removeBlob(rscName: WorkspaceResourceName): void {\n this.performWriteSql(rscName, \"DELETE FROM blobs WHERE id=?\");\n }\n public addFile(rscName: WorkspaceResourceName, localFileName: LocalFileName, fileExt?: string): void {\n EditableDbImpl.validateResourceName(rscName);\n fileExt = fileExt ?? extname(localFileName);\n if (fileExt?.[0] === \".\")\n fileExt = fileExt.slice(1);\n if (!isSafeFileExtension(fileExt))\n WorkspaceError.throwError(\"invalid-name\", { message: \"file extension is not valid for generated file names\" });\n this.sqliteDb[_nativeDb].embedFile({ name: rscName, localFileName, date: this.getFileModifiedTime(localFileName), fileExt });\n }\n public updateFile(rscName: WorkspaceResourceName, localFileName: LocalFileName): void {\n this.queryFileResource(rscName); // throws if not present\n this.sqliteDb[_nativeDb].replaceEmbeddedFile({ name: rscName, localFileName, date: this.getFileModifiedTime(localFileName) });\n }\n public removeFile(rscName: WorkspaceResourceName): void {\n const file = this.queryFileResource(rscName);\n if (undefined === file)\n WorkspaceError.throwError(\"does-not-exist\", { message: `file resource \"${rscName}\" does not exist` });\n if (file && fs.existsSync(file.localFileName))\n fs.unlinkSync(file.localFileName);\n this.sqliteDb[_nativeDb].removeEmbeddedFile(rscName);\n }\n}\n\nexport function constructWorkspaceDb(props: WorkspaceDbProps, container: WorkspaceContainer): WorkspaceDb {\n return new WorkspaceDbImpl(props, container);\n}\n\nexport function constructWorkspace(settings: Settings, opts?: WorkspaceOpts): OwnedWorkspace {\n return new WorkspaceImpl(settings, opts);\n}\n\nexport function constructWorkspaceEditor(): WorkspaceEditor {\n return new EditorImpl();\n}\n\n/**\n * Validate that a WorkspaceContainer.Id is valid.\n * The rules for ContainerIds (from Azure, see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata):\n * - may only contain lower case letters, numbers or dashes\n * - may not start or end with with a dash nor have more than one dash in a row\n * - may not be shorter than 3 or longer than 63 characters\n */\nexport function validateWorkspaceContainerId(id: WorkspaceContainerId) {\n if (!/^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$/g.test(id))\n WorkspaceError.throwError(\"invalid-name\", { message: `invalid containerId: [${id}]` });\n}\n\nexport const workspaceManifestProperty: FilePropertyProps = { namespace: \"workspace\", name: \"manifest\" };\n\n\nfunction throwWorkspaceDbLoadError(message: string, wsDbProps: WorkspaceDbProps | WorkspaceDbCloudProps, wsDb?: WorkspaceDb): never {\n WorkspaceError.throwError<WorkspaceDbLoadError>(\"load-error\", { message, wsDb, wsDbProps });\n}\n\nexport function throwWorkspaceDbLoadErrors(message: string, wsLoadErrors: WorkspaceDbLoadError[]): never {\n WorkspaceError.throwError<WorkspaceDbLoadErrors>(\"load-errors\", { message, wsLoadErrors });\n}\n\nexport interface OwnedWorkspace extends Workspace {\n /** Only the owner of a Workspace may close it. */\n close(): void;\n}\n"]}
1
+ {"version":3,"file":"WorkspaceImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/WorkspaceImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport { createHash } from \"crypto\";\nimport * as fs from \"fs-extra\";\nimport { dirname, extname, join } from \"path\";\nimport { AccessToken, assert, BeEvent, DbResult, Mutable, OpenMode, ProcessDetector } from \"@itwin/core-bentley\";\nimport { CloudSqliteError, FilePropertyProps, LocalDirName, LocalFileName, WorkspaceError } from \"@itwin/core-common\";\nimport { CloudSqlite } from \"../../CloudSqlite\";\nimport { IModelHost, KnownLocations } from \"../../IModelHost\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { SQLiteDb } from \"../../SQLiteDb\";\nimport { SqliteStatement } from \"../../SqliteStatement\";\nimport { SettingName, Settings, SettingsContainer, SettingsDictionaryProps, SettingsPriority } from \"../../workspace/Settings\";\nimport { isSettingsDb, queryStringResourceNames } from \"../../workspace/SettingsDb\";\nimport { settingsResourceName } from \"../../workspace/SettingsEditor\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport {\n GetWorkspaceContainerArgs, Workspace, WorkspaceContainer, WorkspaceContainerId, WorkspaceContainerProps, WorkspaceDb, WorkspaceDbCloudProps,\n WorkspaceDbFullName, WorkspaceDbLoadError, WorkspaceDbLoadErrors, WorkspaceDbManifest, WorkspaceDbName, WorkspaceDbNameAndVersion, WorkspaceDbProps,\n WorkspaceDbQueryResourcesArgs, WorkspaceDbSettingsProps, WorkspaceDbVersion, WorkspaceOpts, WorkspaceResourceName, WorkspaceSettingNames,\n} from \"../../workspace/Workspace\";\nimport { CreateNewWorkspaceContainerArgs, CreateNewWorkspaceDbVersionArgs, EditableWorkspaceContainer, EditableWorkspaceDb, WorkspaceEditor, WorkspaceEditor as WorkspaceEditorNs } from \"../../workspace/WorkspaceEditor\";\nimport { WorkspaceSqliteDb } from \"./WorkspaceSqliteDb\";\nimport { SettingsImpl } from \"./SettingsImpl\";\nimport { _implementationProhibited, _nativeDb } from \"../Symbols\";\nimport { getOnlineStatus } from \"../OnlineStatus\";\nimport { BlobContainer } from \"../../BlobContainerService\";\n\n\nfunction workspaceDbNameWithDefault(dbName?: WorkspaceDbName): WorkspaceDbName {\n return dbName ?? \"workspace-db\";\n}\n\nconst maxFileExtensionLength = 255 - 40 - 1; // Reserve space for the SHA-1 hash and \".\" in the generated filename.\n\nfunction isSafeFileExtension(fileExt: string): boolean {\n const invalidChars = \"<>:\\\"/\\\\|?*\";\n return fileExt.length <= maxFileExtensionLength\n && Buffer.byteLength(fileExt, \"utf8\") <= maxFileExtensionLength\n && !fileExt.endsWith(\" \")\n && !fileExt.endsWith(\".\")\n && !Array.from(fileExt).some((char) => invalidChars.includes(char) || char.charCodeAt(0) < 0x20);\n}\n\n/** file extension for local WorkspaceDbs */\nexport const workspaceDbFileExt = \"itwin-workspace\";\n\ninterface WorkspaceCloudContainer extends CloudSqlite.CloudContainer {\n connectCount: number;\n sharedConnect(): boolean;\n sharedDisconnect(): void;\n}\n\ninterface WorkspaceCloudCache extends CloudSqlite.CloudCache {\n workspaceContainers: Map<string, WorkspaceCloudContainer>;\n}\n\nfunction makeWorkspaceCloudCache(arg: CloudSqlite.CreateCloudCacheArg): WorkspaceCloudCache {\n const cache = CloudSqlite.CloudCaches.getCache(arg) as WorkspaceCloudCache;\n if (undefined === cache.workspaceContainers) // if we just created this container, add the map.\n CloudSqlite.addHiddenProperty(cache, \"workspaceContainers\", new Map<string, WorkspaceCloudContainer>());\n return cache;\n}\n\nfunction getContainerFullId(props: WorkspaceContainerProps) {\n return `${props.baseUri}/${props.containerId}`;\n}\n\nfunction getWorkspaceCloudContainer(props: CloudSqlite.ContainerAccessProps, cache: WorkspaceCloudCache) {\n const id = getContainerFullId(props);\n let cloudContainer = cache.workspaceContainers.get(id);\n if (undefined !== cloudContainer)\n return cloudContainer;\n\n cloudContainer = CloudSqlite.createCloudContainer(props) as WorkspaceCloudContainer;\n cache.workspaceContainers.set(id, cloudContainer);\n cloudContainer.connectCount = 0;\n CloudSqlite.addHiddenProperty(cloudContainer, \"sharedConnect\", function (this: WorkspaceCloudContainer) {\n if (this.connectCount++ === 0) {\n this.connect(cache);\n return true;\n }\n\n return false;\n });\n\n CloudSqlite.addHiddenProperty(cloudContainer, \"sharedDisconnect\", function (this: WorkspaceCloudContainer) {\n if (--this.connectCount <= 0) {\n this.disconnect();\n cache.workspaceContainers.delete(id);\n this.connectCount = 0;\n }\n });\n\n return cloudContainer;\n}\n\nclass WorkspaceContainerImpl implements WorkspaceContainer {\n public readonly [_implementationProhibited] = undefined;\n public readonly workspace: WorkspaceImpl;\n public readonly filesDir: LocalDirName;\n public readonly id: WorkspaceContainerId;\n public readonly fromProps: WorkspaceContainerProps;\n private readonly _cloudContainer?: WorkspaceCloudContainer | undefined;\n\n public get cloudContainer(): WorkspaceCloudContainer | undefined {\n return this._cloudContainer;\n }\n\n protected _wsDbs = new Map<string, WorkspaceDb>();\n public get dirName() { return join(this.workspace.containerDir, this.id); }\n\n public constructor(workspace: WorkspaceImpl, props: WorkspaceContainerProps & { accessToken: AccessToken }) {\n validateWorkspaceContainerId(props.containerId);\n this.workspace = workspace;\n this.id = props.containerId;\n this.fromProps = props;\n\n if (props.baseUri !== \"\")\n this._cloudContainer = getWorkspaceCloudContainer(props, this.workspace.getCloudCache());\n\n workspace.addContainer(this);\n this.filesDir = join(this.dirName, \"Files\");\n\n const cloudContainer = this.cloudContainer;\n if (undefined === cloudContainer)\n return;\n\n // sharedConnect returns true if we just connected (if the container is shared, it may have already been connected)\n if (cloudContainer.sharedConnect() && false !== props.syncOnConnect) {\n try {\n if (ProcessDetector.isMobileAppBackend || ProcessDetector.isElectronAppBackend) {\n // Even though we've already confirmed that we are running in a native app backend,\n // having code here that references NativeHost causes a runtime exception. So we use\n // getOnlineStatus to determine whether we're online, which NativeHost keeps up to date.\n if (!getOnlineStatus()) {\n // If running in a native app and we're offline, don't check for changes.\n // Doing so will fail and be caught below, but it has to wait for the network\n // timeout.\n return;\n }\n }\n cloudContainer.checkForChanges();\n } catch {\n // must be offline\n }\n }\n }\n\n public resolveDbFileName(props: WorkspaceDbProps): WorkspaceDbFullName {\n const dbName = workspaceDbNameWithDefault(props.dbName);\n const container = this.cloudContainer;\n if (undefined === container)\n return join(this.dirName, `${dbName}.${workspaceDbFileExt}`); // local file, versions not allowed\n\n return CloudSqlite.querySemverMatch({ ...props, container, dbName });\n }\n\n public addWorkspaceDb(toAdd: WorkspaceDb) {\n if (undefined !== this._wsDbs.get(toAdd.dbFileName))\n WorkspaceError.throwError(\"already-exists\", { message: `workspaceDb '${toAdd.dbName}' already exists in workspace` });\n this._wsDbs.set(toAdd.dbFileName, toAdd);\n }\n\n public getWorkspaceDb(props?: WorkspaceDbProps): WorkspaceDb {\n const dbFileName = this.resolveDbFileName(props ?? {});\n return this._wsDbs.get(dbFileName) ?? new WorkspaceDbImpl(props ?? {}, this);\n }\n\n public closeWorkspaceDb(toDrop: WorkspaceDb) {\n const wsDb = this._wsDbs.get(toDrop.dbFileName);\n if (wsDb === toDrop) {\n this._wsDbs.delete(toDrop.dbFileName);\n wsDb.close();\n }\n }\n\n public close() {\n for (const [_name, db] of this._wsDbs)\n db.close();\n this._wsDbs.clear();\n this.cloudContainer?.sharedDisconnect();\n }\n}\n\n/** Implementation of WorkspaceDb */\nclass WorkspaceDbImpl implements WorkspaceDb {\n public readonly [_implementationProhibited] = undefined;\n public readonly sqliteDb = new WorkspaceSqliteDb();\n public readonly dbName: WorkspaceDbName;\n protected readonly _container: WorkspaceContainer;\n public readonly onClose = new BeEvent<() => void>();\n public readonly dbFileName: string;\n protected _manifest?: WorkspaceDbManifest;\n\n /** true if this WorkspaceDb is currently open */\n public get isOpen() { return this.sqliteDb.isOpen; }\n public get container(): WorkspaceContainer { return this._container; }\n public queryFileResource(rscName: WorkspaceResourceName): { localFileName: LocalFileName, info: IModelJsNative.EmbedFileQuery } | undefined {\n const info = this.sqliteDb[_nativeDb].queryEmbeddedFile(rscName);\n if (undefined === info)\n return undefined;\n\n // since resource names can contain illegal characters, path separators, etc., we make the local file name from its hash, in hex.\n let localFileName = join(this._container.filesDir, createHash(\"sha1\").update(this.dbFileName).update(rscName).digest(\"hex\"));\n if (info.fileExt !== \"\" && isSafeFileExtension(info.fileExt)) // since some applications may expect to see the extension, append it here if it was supplied.\n localFileName = `${localFileName}.${info.fileExt}`;\n return { localFileName, info };\n }\n\n public constructor(props: WorkspaceDbProps, container: WorkspaceContainer) {\n this.dbName = workspaceDbNameWithDefault(props.dbName);\n CloudSqlite.validateDbName(this.dbName);\n this._container = container;\n this.dbFileName = container.resolveDbFileName(props);\n container.addWorkspaceDb(this);\n if (true === props.prefetch)\n this.prefetch();\n }\n\n public open() {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.Readonly, this._container.cloudContainer);\n }\n\n public close() {\n if (this.isOpen) {\n this.onClose.raiseEvent();\n this.sqliteDb.closeDb();\n this._container.closeWorkspaceDb(this);\n }\n }\n public get version() {\n const cloudContainer = this.container.cloudContainer;\n if (undefined === cloudContainer)\n return \"1.0.0\"; // local file, no versioning. return default\n return CloudSqlite.parseDbFileName(this.dbFileName).version;\n }\n\n public get manifest(): WorkspaceDbManifest {\n return this._manifest ??= this.withOpenDb((db) => {\n const manifestJson = db[_nativeDb].queryFileProperty(workspaceManifestProperty, true) as string | undefined;\n return manifestJson ? JSON.parse(manifestJson) : { workspaceName: this.dbName };\n });\n }\n\n private withOpenDb<T>(operation: (db: WorkspaceSqliteDb) => T): T {\n const done = this.isOpen ? () => { } : (this.open(), () => this.close());\n try {\n return operation(this.sqliteDb);\n } finally {\n done();\n }\n }\n\n public getString(rscName: WorkspaceResourceName): string | undefined {\n return this.withOpenDb((db) => {\n return db.withSqliteStatement(\"SELECT value from strings WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getValueString(0) : undefined;\n });\n });\n }\n\n public getBlobReader(rscName: WorkspaceResourceName): SQLiteDb.BlobIO {\n return this.sqliteDb.withSqliteStatement(\"SELECT rowid from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n const blobReader = SQLiteDb.createBlobIO();\n blobReader.open(this.sqliteDb[_nativeDb], { tableName: \"blobs\", columnName: \"value\", row: stmt.getValueInteger(0) });\n return blobReader;\n });\n }\n\n public getBlob(rscName: WorkspaceResourceName): Uint8Array | undefined {\n return this.withOpenDb((db) => {\n return db.withSqliteStatement(\"SELECT value from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n return DbResult.BE_SQLITE_ROW === stmt.step() ? stmt.getValueBlob(0) : undefined;\n });\n });\n }\n\n public getFile(rscName: WorkspaceResourceName, targetFileName?: LocalFileName): LocalFileName | undefined {\n return this.withOpenDb((db) => {\n const file = this.queryFileResource(rscName);\n if (!file)\n return undefined;\n\n const info = file.info;\n const localFileName = targetFileName ?? file.localFileName;\n\n // check whether the file is already up to date.\n const stat = fs.existsSync(localFileName) && fs.statSync(localFileName);\n if (stat && Math.round(stat.mtimeMs) === info.date && stat.size === info.size)\n return localFileName; // yes, we're done\n\n // extractEmbeddedFile fails if the file exists or if the directory does not exist\n if (stat)\n fs.removeSync(localFileName);\n else\n IModelJsFs.recursiveMkDirSync(dirname(localFileName));\n\n db[_nativeDb].extractEmbeddedFile({ name: rscName, localFileName });\n const date = new Date(info.date);\n fs.utimesSync(localFileName, date, date); // set the last-modified date of the file to match date in container\n fs.chmodSync(localFileName, \"0444\"); // set file readonly\n return localFileName;\n });\n }\n\n public prefetch(opts?: CloudSqlite.PrefetchProps): CloudSqlite.CloudPrefetch {\n const cloudContainer = this._container.cloudContainer;\n if (cloudContainer === undefined)\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"no cloud container to prefetch\" });\n return CloudSqlite.startCloudPrefetch(cloudContainer, this.dbFileName, opts);\n }\n\n public queryResources(args: WorkspaceDbQueryResourcesArgs): void {\n const table = \"blob\" !== args.type ? \"strings\" : \"blobs\";\n this.withOpenDb((db) => {\n const where = undefined !== args.namePattern ? ` WHERE id ${args.nameCompare ?? \"=\"} ?` : \"\";\n db.withSqliteStatement(`SELECT id from ${table}${where}`, (stmt) => {\n function* makeIterable() {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n yield stmt.getValueString(0);\n }\n }\n\n if (undefined !== args.namePattern) {\n stmt.bindString(1, args.namePattern);\n }\n\n args.callback(makeIterable());\n });\n });\n }\n}\n\n/** Implementation of Workspace */\nclass WorkspaceImpl implements Workspace {\n public readonly [_implementationProhibited] = undefined;\n private _containers = new Map<WorkspaceContainerId, WorkspaceContainerImpl>();\n public readonly containerDir: LocalDirName;\n public readonly settings: Settings;\n protected _cloudCache?: WorkspaceCloudCache;\n public getCloudCache(): WorkspaceCloudCache {\n return this._cloudCache ??= makeWorkspaceCloudCache({ cacheName: \"Workspace\", cacheSize: \"20G\" });\n }\n\n public constructor(settings: Settings, opts?: WorkspaceOpts) {\n this.settings = settings;\n this.containerDir = opts?.containerDir ?? join(IModelHost.cacheDir, \"Workspace\");\n let settingsFiles = opts?.settingsFiles;\n if (settingsFiles) {\n if (typeof settingsFiles === \"string\")\n settingsFiles = [settingsFiles];\n settingsFiles.forEach((file) => settings.addFile(file, SettingsPriority.application));\n }\n }\n\n public addContainer(toAdd: WorkspaceContainerImpl) {\n if (undefined !== this._containers.get(toAdd.id))\n WorkspaceError.throwError(\"container-exists\", { message: `container ${toAdd.id} already exists in workspace` });\n this._containers.set(toAdd.id, toAdd);\n }\n\n public findContainer(containerId: WorkspaceContainerId) {\n return this._containers.get(containerId);\n }\n\n public getContainer(props: GetWorkspaceContainerArgs): WorkspaceContainer {\n return this.findContainer(props.containerId) ?? new WorkspaceContainerImpl(this, props);\n }\n\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<WorkspaceContainer> {\n if (props.accessToken)\n return this.getContainer({ ...props, accessToken: props.accessToken });\n\n const accessToken = (props.baseUri === \"\" || props.isPublic)\n ? \"\"\n : await CloudSqlite.requestToken({ ...props, accessLevel: \"read\" });\n return this.getContainer({ ...props, accessToken });\n }\n\n public async getWorkspaceDb(props: WorkspaceDbCloudProps): Promise<WorkspaceDb> {\n let container: WorkspaceContainer | undefined = this.findContainer(props.containerId);\n if (undefined === container) {\n if (props.accessToken) {\n container = new WorkspaceContainerImpl(this, { ...props, accessToken: props.accessToken });\n } else {\n const accessToken = (props.baseUri === \"\" || props.isPublic) ? \"\" : await CloudSqlite.requestToken({ ...props, accessLevel: \"read\" });\n container = new WorkspaceContainerImpl(this, { ...props, accessToken });\n }\n }\n return container.getWorkspaceDb(props);\n }\n\n public async loadSettingsDictionary(props: WorkspaceDbSettingsProps | WorkspaceDbSettingsProps[], problems?: WorkspaceDbLoadError[]) {\n if (!Array.isArray(props))\n props = [props];\n\n const getSettingsResourceNames = (db: WorkspaceDb, dbProps: WorkspaceDbSettingsProps): WorkspaceResourceName[] => {\n if (!isSettingsDb(db))\n return [dbProps.resourceName ?? settingsResourceName];\n\n const all = queryStringResourceNames(db);\n // If resourceName is supplied, load it last so it has highest precedence at the same priority.\n return dbProps.resourceName !== undefined\n ? [...all.filter((name) => name !== dbProps.resourceName), dbProps.resourceName]\n : all;\n };\n\n for (const prop of props) {\n const db = await this.getWorkspaceDb(prop);\n db.open();\n try {\n const resourceNames = getSettingsResourceNames(db, prop);\n\n for (const resourceName of resourceNames) {\n try {\n const manifest = db.manifest;\n const dictProps: SettingsDictionaryProps = { name: resourceName, workspaceDb: db, priority: prop.priority };\n // don't load if we already have this dictionary. Happens if the same WorkspaceDb is in more than one list\n if (undefined === this.settings.getDictionary(dictProps)) {\n const settingsJson = db.getString(resourceName);\n if (undefined === settingsJson)\n throwWorkspaceDbLoadError(`could not load setting dictionary resource '${resourceName}' from: '${manifest.workspaceName}'`, prop, db);\n\n this.settings.addJson(dictProps, settingsJson);\n const dict = this.settings.getDictionary(dictProps);\n if (dict) {\n Workspace.onSettingsDictionaryLoadedFn({ dict, from: db });\n // if the dictionary we just loaded has a \"settingsWorkspaces\" entry, load them too, recursively\n const nested = dict.getSetting<WorkspaceDbSettingsProps[]>(WorkspaceSettingNames.settingsWorkspaces);\n if (nested !== undefined) {\n IModelHost.settingsSchemas.validateSetting<WorkspaceDbSettingsProps[]>(nested, WorkspaceSettingNames.settingsWorkspaces);\n await this.loadSettingsDictionary(nested, problems);\n }\n }\n }\n } catch (e) {\n problems?.push(e as WorkspaceDbLoadError);\n }\n }\n } catch (e) {\n problems?.push(e as WorkspaceDbLoadError);\n } finally {\n db.close();\n }\n }\n }\n\n public close() {\n this.settings.close();\n for (const [_id, container] of this._containers)\n container.close();\n this._containers.clear();\n }\n\n public resolveWorkspaceDbSetting(settingName: SettingName, filter?: Workspace.DbListFilter): WorkspaceDbCloudProps[] {\n const settingDef = IModelHost.settingsSchemas.settingDefs.get(settingName);\n const combine = settingDef?.combineArray === true;\n filter = filter ?? (() => true);\n const result: WorkspaceDbCloudProps[] = [];\n for (const entry of this.settings.getSettingEntries<WorkspaceDbCloudProps[]>(settingName)) {\n for (const dbProp of entry.value) {\n if (filter(dbProp, entry.dictionary)) {\n result.push(dbProp);\n }\n }\n\n if (!combine) {\n break;\n }\n }\n\n return result;\n }\n\n public async getWorkspaceDbs(args: Workspace.DbListOrSettingName & { filter?: Workspace.DbListFilter, problems?: WorkspaceDbLoadError[] }): Promise<WorkspaceDb[]> {\n const dbList = (args.settingName !== undefined) ? this.resolveWorkspaceDbSetting(args.settingName, args.filter) : args.dbs;\n const result: WorkspaceDb[] = [];\n const pushUnique = (wsDb: WorkspaceDb) => {\n for (const db of result) {\n // if we already have this db, skip it. The test below also has to consider that we create a separate WorkspaceDb object for the same\n // database from more than one Workspace (though then they must use a \"shared\" CloudContainer).\n if (db === wsDb || ((db.container.cloudContainer === wsDb.container.cloudContainer) && (db.dbFileName === wsDb.dbFileName)))\n return; // this db is redundant\n }\n result.push(wsDb);\n };\n\n for (const dbProps of dbList) {\n try {\n pushUnique(await this.getWorkspaceDb(dbProps));\n } catch (e) {\n const loadErr = e as WorkspaceDbLoadError;\n loadErr.wsDbProps = dbProps;\n args.problems?.push(loadErr);\n }\n }\n return result;\n }\n}\n\nconst workspaceEditorName = \"WorkspaceEditor\"; // name of the cache for the editor workspace\nclass EditorWorkspaceImpl extends WorkspaceImpl {\n public override getCloudCache(): WorkspaceCloudCache {\n return this._cloudCache ??= makeWorkspaceCloudCache({ cacheName: workspaceEditorName, cacheSize: \"20G\" });\n }\n}\n\nclass EditorImpl implements WorkspaceEditor {\n public readonly [_implementationProhibited] = undefined;\n public workspace = new EditorWorkspaceImpl(new SettingsImpl(), { containerDir: join(IModelHost.cacheDir, workspaceEditorName) });\n\n public async initializeContainer(args: CreateNewWorkspaceContainerArgs) {\n class CloudAccess extends CloudSqlite.DbAccess<WorkspaceSqliteDb> {\n protected static override _cacheName = workspaceEditorName;\n public static async initializeWorkspace(args: CreateNewWorkspaceContainerArgs) {\n const props = await this.createBlobContainer({ scope: args.scope, metadata: { ...args.metadata, containerType: args.containerType ?? \"workspace\" } });\n const dbFullName = CloudSqlite.makeSemverName(workspaceDbNameWithDefault(args.dbName), \"0.0.0\");\n await super._initializeDb({ ...args, props, dbName: dbFullName, dbType: WorkspaceSqliteDb, blockSize: \"4M\" });\n return props;\n }\n }\n return CloudAccess.initializeWorkspace(args);\n }\n\n public async createNewCloudContainer(args: CreateNewWorkspaceContainerArgs): Promise<EditableWorkspaceContainer> {\n const cloudContainer = await this.initializeContainer(args);\n const userToken = await IModelHost.authorizationClient?.getAccessToken();\n const accessToken = await CloudSqlite.requestToken({ ...cloudContainer, accessLevel: \"write\", userToken });\n return this.getContainer({ accessToken, ...cloudContainer, writeable: true, description: args.metadata.description });\n }\n\n public getContainer(props: GetWorkspaceContainerArgs): EditableWorkspaceContainer {\n return this.workspace.findContainer(props.containerId) as EditableWorkspaceContainer | undefined ?? new EditorContainerImpl(this.workspace, props);\n }\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<EditableWorkspaceContainer> {\n if (props.accessToken)\n return this.getContainer({ ...props, accessToken: props.accessToken });\n\n const accessToken = (props.baseUri === \"\")\n ? \"\"\n : await CloudSqlite.requestToken({ ...props, accessLevel: \"write\" });\n return this.getContainer({ ...props, accessToken });\n }\n\n public async findContainers(args: WorkspaceEditorNs.QueryWorkspaceContainersArgs): Promise<EditableWorkspaceContainer[]> {\n const containers = await WorkspaceEditorNs.queryContainers(args);\n const userToken = await IModelHost.getAccessToken();\n const results: EditableWorkspaceContainer[] = [];\n for (const containerMeta of containers) {\n // queryContainers already validates that BlobContainer.service is defined, so the non-null assertion is safe here.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tokenProps = await BlobContainer.service!.requestToken({ containerId: containerMeta.containerId, userToken, accessLevel: \"write\" });\n results.push(this.getContainer({\n containerId: containerMeta.containerId,\n baseUri: tokenProps.baseUri,\n storageType: tokenProps.provider,\n accessToken: tokenProps.token,\n writeable: true,\n }));\n }\n return results;\n }\n\n public close() {\n this.workspace.close();\n }\n}\n\nclass EditorContainerImpl extends WorkspaceContainerImpl implements EditableWorkspaceContainer {\n public get cloudProps(): WorkspaceContainerProps | undefined {\n const cloudContainer = this.cloudContainer;\n if (undefined === cloudContainer)\n return undefined;\n return {\n baseUri: cloudContainer.baseUri,\n containerId: cloudContainer.containerId,\n storageType: cloudContainer.storageType as \"azure\" | \"google\",\n isPublic: cloudContainer.isPublic,\n };\n }\n\n public async createNewWorkspaceDbVersion(args: CreateNewWorkspaceDbVersionArgs): Promise<{ oldDb: WorkspaceDbNameAndVersion, newDb: WorkspaceDbNameAndVersion }> {\n const container = this.cloudContainer;\n if (undefined === container)\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"versions require cloud containers\" });\n\n const fromDb = { ...args.fromProps, dbName: workspaceDbNameWithDefault(args.fromProps?.dbName) };\n return CloudSqlite.createNewDbVersion(container, { ...args, fromDb });\n }\n\n public override getWorkspaceDb(props: WorkspaceDbProps): EditableWorkspaceDb {\n return this.getEditableDb(props);\n }\n\n public getEditableDb(props: WorkspaceDbProps): EditableWorkspaceDb {\n const dbFileName = this.resolveDbFileName(props);\n const db = this._wsDbs.get(dbFileName) as EditableDbImpl | undefined ?? new EditableDbImpl(props, this);\n\n if (this.cloudContainer && !CloudSqlite.isSemverEditable(db.dbFileName, this.cloudContainer)) {\n this._wsDbs.delete(dbFileName);\n CloudSqliteError.throwError(\"already-published\", { message: `${db.dbFileName} has been published and is not editable. Make a new version first.` });\n }\n\n return db;\n }\n\n public acquireWriteLock(user: string): void {\n if (this.cloudContainer) {\n this.cloudContainer.acquireWriteLock(user);\n CloudSqlite.addHiddenProperty(this.cloudContainer, \"writeLockHeldBy\", user);\n }\n }\n public releaseWriteLock() {\n if (this.cloudContainer)\n CloudSqlite.releaseWriteLock(this.cloudContainer);\n }\n\n public abandonChanges() {\n if (this.cloudContainer) {\n this.cloudContainer.abandonChanges();\n CloudSqlite.addHiddenProperty(this.cloudContainer, \"writeLockHeldBy\", undefined);\n }\n }\n\n public async withEditableDb(user: string, operation: (db: EditableWorkspaceDb) => void, props?: WorkspaceDbProps): Promise<void> {\n this.acquireWriteLock(user);\n try {\n let db: EditableWorkspaceDb;\n try {\n db = this.getEditableDb({ ...props, includePrerelease: true });\n } catch (error) {\n if (!CloudSqliteError.isError(error, \"already-published\"))\n throw error;\n\n const newVersion = await this.createNewWorkspaceDbVersion({\n fromProps: props,\n versionType: \"prerelease\",\n identifier: \"beta\",\n });\n db = this.getEditableDb(newVersion.newDb);\n }\n\n db.open();\n try {\n operation(db);\n } finally {\n db.close();\n }\n this.releaseWriteLock();\n } catch (error) {\n this.abandonChanges();\n throw error;\n }\n }\n\n public async createDb(args: { dbName?: string, version?: WorkspaceDbVersion, manifest: WorkspaceDbManifest }): Promise<EditableWorkspaceDb> {\n if (!this.cloudContainer) {\n WorkspaceEditor.createEmptyDb({ localFileName: this.resolveDbFileName(args), manifest: args.manifest });\n } else {\n // currently the only way to create a workspaceDb in a cloud container is to create a temporary workspaceDb and upload it.\n const tempDbFile = join(KnownLocations.tmpdir, `empty.${workspaceDbFileExt}`);\n if (fs.existsSync(tempDbFile))\n IModelJsFs.removeSync(tempDbFile);\n\n WorkspaceEditor.createEmptyDb({ localFileName: tempDbFile, manifest: args.manifest });\n await CloudSqlite.uploadDb(this.cloudContainer, { localFileName: tempDbFile, dbName: CloudSqlite.makeSemverName(workspaceDbNameWithDefault(args.dbName), args.version) });\n IModelJsFs.removeSync(tempDbFile);\n }\n\n return this.getWorkspaceDb(args);\n }\n}\n\nclass EditableDbImpl extends WorkspaceDbImpl implements EditableWorkspaceDb {\n public override get container(): EditableWorkspaceContainer {\n assert(this._container instanceof EditorContainerImpl);\n return this._container;\n }\n\n private static validateResourceName(name: WorkspaceResourceName) {\n if (name.trim() !== name)\n WorkspaceError.throwError(\"invalid-name\", { message: \"resource name may not have leading or trailing spaces\" });\n\n if (name.length > 1024) {\n WorkspaceError.throwError(\"invalid-name\", { message: \"resource name too long\" });\n }\n }\n\n private validateResourceSize(val: Uint8Array | string) {\n const len = typeof val === \"string\" ? val.length : val.byteLength;\n if (len > (1024 * 1024 * 1024)) // one gigabyte\n WorkspaceError.throwError(\"too-large\", { message: \"value is too large\" });\n }\n public get cloudProps(): WorkspaceDbCloudProps | undefined {\n const props = (this._container as EditorContainerImpl).cloudProps as Mutable<WorkspaceDbCloudProps>;\n if (props === undefined)\n return undefined;\n\n const parsed = CloudSqlite.parseDbFileName(this.dbFileName);\n return { ...props, dbName: parsed.dbName, version: parsed.version };\n }\n\n public override open() {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.ReadWrite, this._container.cloudContainer);\n }\n\n public override close() {\n if (this.isOpen) {\n // whenever we close an EditableDb, update the name of the last editor in the manifest\n const cloudContainer = this.container.cloudContainer;\n const lastEditedBy = cloudContainer === undefined ? undefined : CloudSqlite.getWriteLockHeldBy(cloudContainer);\n if (lastEditedBy !== undefined)\n this.updateManifest({ ...this.manifest, lastEditedBy, lastEditedAt: new Date().toISOString() });\n\n // make sure all changes were saved before we close\n this.sqliteDb.saveChanges();\n }\n super.close();\n }\n\n private getFileModifiedTime(localFileName: LocalFileName): number {\n return Math.round(fs.statSync(localFileName).mtimeMs);\n }\n\n private performWriteSql(rscName: WorkspaceResourceName, sql: string, bind?: (stmt: SqliteStatement) => void) {\n this.sqliteDb.withSqliteStatement(sql, (stmt) => {\n stmt.bindString(1, rscName);\n bind?.(stmt);\n const rc = stmt.step();\n if (DbResult.BE_SQLITE_DONE !== rc) {\n if (DbResult.BE_SQLITE_CONSTRAINT_PRIMARYKEY === rc)\n WorkspaceError.throwError(\"resource-exists\", { message: `resource \"${rscName}\" already exists` });\n\n WorkspaceError.throwError(\"write-error\", { message: `workspace [${sql}], rc=${rc}` });\n }\n });\n this.sqliteDb.saveChanges();\n }\n\n public updateManifest(manifest: WorkspaceDbManifest) {\n this.sqliteDb[_nativeDb].saveFileProperty(workspaceManifestProperty, JSON.stringify(manifest));\n this._manifest = undefined;\n }\n public updateSettingsResource(settings: SettingsContainer, rscName?: string) {\n this.updateString(rscName ?? \"settingsDictionary\", JSON.stringify(settings));\n }\n public addString(rscName: WorkspaceResourceName, val: string): void {\n EditableDbImpl.validateResourceName(rscName);\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO strings(id,value) VALUES(?,?)\", (stmt) => stmt.bindString(2, val));\n }\n public updateString(rscName: WorkspaceResourceName, val: string): void {\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO strings(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\", (stmt) => stmt.bindString(2, val));\n }\n public removeString(rscName: WorkspaceResourceName): void {\n this.performWriteSql(rscName, \"DELETE FROM strings WHERE id=?\");\n }\n public addBlob(rscName: WorkspaceResourceName, val: Uint8Array): void {\n EditableDbImpl.validateResourceName(rscName);\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO blobs(id,value) VALUES(?,?)\", (stmt) => stmt.bindBlob(2, val));\n }\n public updateBlob(rscName: WorkspaceResourceName, val: Uint8Array): void {\n this.validateResourceSize(val);\n this.performWriteSql(rscName, \"INSERT INTO blobs(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\", (stmt) => stmt.bindBlob(2, val));\n }\n public getBlobWriter(rscName: WorkspaceResourceName): SQLiteDb.BlobIO {\n return this.sqliteDb.withSqliteStatement(\"SELECT rowid from blobs WHERE id=?\", (stmt) => {\n stmt.bindString(1, rscName);\n const blobWriter = SQLiteDb.createBlobIO();\n blobWriter.open(this.sqliteDb[_nativeDb], { tableName: \"blobs\", columnName: \"value\", row: stmt.getValueInteger(0), writeable: true });\n return blobWriter;\n });\n }\n public removeBlob(rscName: WorkspaceResourceName): void {\n this.performWriteSql(rscName, \"DELETE FROM blobs WHERE id=?\");\n }\n public addFile(rscName: WorkspaceResourceName, localFileName: LocalFileName, fileExt?: string): void {\n EditableDbImpl.validateResourceName(rscName);\n fileExt = fileExt ?? extname(localFileName);\n if (fileExt?.[0] === \".\")\n fileExt = fileExt.slice(1);\n if (!isSafeFileExtension(fileExt))\n WorkspaceError.throwError(\"invalid-name\", { message: \"file extension is not valid for generated file names\" });\n this.sqliteDb[_nativeDb].embedFile({ name: rscName, localFileName, date: this.getFileModifiedTime(localFileName), fileExt });\n }\n public updateFile(rscName: WorkspaceResourceName, localFileName: LocalFileName): void {\n this.queryFileResource(rscName); // throws if not present\n this.sqliteDb[_nativeDb].replaceEmbeddedFile({ name: rscName, localFileName, date: this.getFileModifiedTime(localFileName) });\n }\n public removeFile(rscName: WorkspaceResourceName): void {\n const file = this.queryFileResource(rscName);\n if (undefined === file)\n WorkspaceError.throwError(\"does-not-exist\", { message: `file resource \"${rscName}\" does not exist` });\n if (file && fs.existsSync(file.localFileName))\n fs.unlinkSync(file.localFileName);\n this.sqliteDb[_nativeDb].removeEmbeddedFile(rscName);\n }\n}\n\nexport function constructWorkspaceDb(props: WorkspaceDbProps, container: WorkspaceContainer): WorkspaceDb {\n return new WorkspaceDbImpl(props, container);\n}\n\nexport function constructWorkspace(settings: Settings, opts?: WorkspaceOpts): OwnedWorkspace {\n return new WorkspaceImpl(settings, opts);\n}\n\nexport function constructWorkspaceEditor(): WorkspaceEditor {\n return new EditorImpl();\n}\n\n/**\n * Validate that a WorkspaceContainer.Id is valid.\n * The rules for ContainerIds (from Azure, see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata):\n * - may only contain lower case letters, numbers or dashes\n * - may not start or end with with a dash nor have more than one dash in a row\n * - may not be shorter than 3 or longer than 63 characters\n */\nexport function validateWorkspaceContainerId(id: WorkspaceContainerId) {\n if (!/^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$/g.test(id))\n WorkspaceError.throwError(\"invalid-name\", { message: `invalid containerId: [${id}]` });\n}\n\nexport const workspaceManifestProperty: FilePropertyProps = { namespace: \"workspace\", name: \"manifest\" };\n\n\nfunction throwWorkspaceDbLoadError(message: string, wsDbProps: WorkspaceDbProps | WorkspaceDbCloudProps, wsDb?: WorkspaceDb): never {\n WorkspaceError.throwError<WorkspaceDbLoadError>(\"load-error\", { message, wsDb, wsDbProps });\n}\n\nexport function throwWorkspaceDbLoadErrors(message: string, wsLoadErrors: WorkspaceDbLoadError[]): never {\n WorkspaceError.throwError<WorkspaceDbLoadErrors>(\"load-errors\", { message, wsLoadErrors });\n}\n\nexport interface OwnedWorkspace extends Workspace {\n /** Only the owner of a Workspace may close it. */\n close(): void;\n}\n"]}
@@ -84,6 +84,9 @@ export declare class V2CheckpointManager {
84
84
  */
85
85
  static [_mockCheckpoint]?: MockCheckpoint;
86
86
  static getFolder(): LocalDirName;
87
+ /** Disconnects all checkpoint containers and resets the state of the V2CheckpointManager. All dbs should be closed before calling this function.
88
+ * Called automatically on IModelHost shutdown; also used directly by tests.
89
+ */
87
90
  static cleanup(): void;
88
91
  private static get cloudCache();
89
92
  /** Member names differ slightly between the V2Checkpoint api and the CloudSqlite api. Add aliases `accessName` for `accountName` and `accessToken` for `sasToken` */
@@ -1 +1 @@
1
- {"version":3,"file":"CheckpointManager.d.ts","sourceRoot":"","sources":["../../src/CheckpointManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CheckpointManager.d.ts","sourceRoot":"","sources":["../../src/CheckpointManager.ts"],"names":[],"mappings":"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"}
@@ -74,7 +74,9 @@ export class V2CheckpointManager {
74
74
  }
75
75
  return cloudCachePath;
76
76
  }
77
- /* only used by tests that reset the state of the v2CheckpointManager. all dbs should be closed before calling this function. */
77
+ /** Disconnects all checkpoint containers and resets the state of the V2CheckpointManager. All dbs should be closed before calling this function.
78
+ * Called automatically on IModelHost shutdown; also used directly by tests.
79
+ */
78
80
  static cleanup() {
79
81
  for (const [_, value] of this.containers.entries()) {
80
82
  if (value.isConnected)
@@ -1 +1 @@
1
- {"version":3,"file":"CheckpointManager.js","sourceRoot":"","sources":["../../src/CheckpointManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\n// cspell:ignore BLOCKCACHE\n\nimport * as path from \"path\";\nimport { NativeLoggerCategory } from \"@bentley/imodeljs-native\";\nimport { AccessToken, BeEvent, ChangeSetStatus, Guid, GuidString, IModelStatus, Logger, LogLevel, Mutable, OpenMode, StopWatch } from \"@itwin/core-bentley\";\nimport {\n BriefcaseIdValue, ChangesetId, ChangesetIdWithIndex, ChangesetIndexAndId, IModelError, IModelVersion, LocalDirName, LocalFileName, OpenCheckpointArgs,\n} from \"@itwin/core-common\";\nimport { V2CheckpointAccessProps } from \"./BackendHubAccess\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\nimport { BriefcaseManager } from \"./BriefcaseManager\";\nimport { CloudSqlite } from \"./CloudSqlite\";\nimport { IModelHost } from \"./IModelHost\";\nimport { IModelJsFs } from \"./IModelJsFs\";\nimport { SnapshotDb, TokenArg } from \"./IModelDb\";\nimport { IModelNative } from \"./internal/NativePlatform\";\nimport { _hubAccess, _mockCheckpoint, _nativeDb } from \"./internal/Symbols\";\n\nconst loggerCategory = BackendLoggerCategory.IModelDb;\n\n/** @internal */\nexport interface MockCheckpoint {\n mockAttach(checkpoint: CheckpointProps): string;\n mockDownload(_request: DownloadRequest): void;\n}\n\n/**\n * Properties of a checkpoint\n * @public\n */\nexport interface CheckpointProps extends TokenArg {\n readonly expectV2?: boolean;\n\n /** iTwin that the iModel belongs to */\n readonly iTwinId: GuidString;\n\n /** Id of the iModel */\n readonly iModelId: GuidString;\n\n /** changeset for the checkpoint */\n readonly changeset: ChangesetIdWithIndex;\n\n /** If true, then the latest successful v2 checkpoint at or before the provided changeset will be returned when calling queryV2Checkpoint. */\n readonly allowPreceding?: boolean;\n\n /** The number of seconds before the current token expires to attempt to reacquire a new token. Default is 1 hour. */\n readonly reattachSafetySeconds?: number;\n}\n\n/** Return value from [[ProgressFunction]].\n * @public\n */\nexport enum ProgressStatus {\n /** Continue download. */\n Continue = 0,\n /** Abort download. */\n Abort = 1,\n}\n\n/** Called to show progress during a download. If this function returns non-zero, the download is aborted.\n * @public\n */\nexport type ProgressFunction = (loaded: number, total: number) => ProgressStatus;\n\n/** The parameters that specify a request to download a checkpoint file from iModelHub.\n * @internal\n */\nexport interface DownloadRequest {\n /** name of local file to hold the downloaded data. */\n localFile: LocalFileName;\n\n /** A list of full fileName paths to test before downloading. If a valid file exists by one of these names,\n * no download is performed and `localFile` is updated to reflect the fact that the file exists with that name.\n * This can be used, for example, to look for checkpoints from previous versions if the naming strategy changes.\n */\n readonly aliasFiles?: ReadonlyArray<string>;\n\n /** Properties of the checkpoint to be downloaded */\n readonly checkpoint: CheckpointProps;\n\n /** If present, this function will be called to indicate progress as the briefcase is downloaded. If this\n * function returns a non-zero value, the download is aborted.\n */\n readonly onProgress?: ProgressFunction;\n}\n\n/** @internal */\nexport interface DownloadJob {\n request: DownloadRequest;\n promise?: Promise<any>;\n}\n\n/** @internal */\nexport class Downloads {\n private static _active = new Map<string, DownloadJob>();\n\n private static async process<T>(job: DownloadJob, fn: (job: DownloadJob) => Promise<T>) {\n const jobName = job.request.localFile; // save this, it can change inside call to `fn`!\n this._active.set(jobName, job);\n try {\n return await fn(job);\n } finally {\n this._active.delete(jobName);\n }\n }\n\n public static isInProgress(pathName: LocalFileName): DownloadJob | undefined {\n return this._active.get(pathName);\n }\n\n public static async download<T>(request: DownloadRequest, downloadFn: (job: DownloadJob) => Promise<T>) {\n const pathName = request.localFile;\n let job = this.isInProgress(pathName);\n if (undefined !== job)\n return job.promise;\n\n IModelJsFs.recursiveMkDirSync(path.dirname(pathName));\n job = { request };\n return job.promise = this.process(job, downloadFn);\n }\n}\n\n/**\n * Utility class for opening V2 checkpoints from cloud containers, and also for downloading them.\n * @internal\n*/\nexport class V2CheckpointManager {\n public static readonly cloudCacheName = \"Checkpoints\";\n private static _cloudCache?: CloudSqlite.CloudCache;\n private static containers = new Map<string, CloudSqlite.CloudContainer>();\n\n /** used by HubMock\n * @internal\n */\n public static [_mockCheckpoint]?: MockCheckpoint;\n\n\n public static getFolder(): LocalDirName {\n const cloudCachePath = path.join(BriefcaseManager.cacheDir, V2CheckpointManager.cloudCacheName);\n if (!(IModelJsFs.existsSync(cloudCachePath))) {\n IModelJsFs.recursiveMkDirSync(cloudCachePath);\n }\n return cloudCachePath;\n }\n\n /* only used by tests that reset the state of the v2CheckpointManager. all dbs should be closed before calling this function. */\n public static cleanup(): void {\n for (const [_, value] of this.containers.entries()) {\n if (value.isConnected)\n value.disconnect({ detach: true });\n }\n\n CloudSqlite.CloudCaches.dropCache(this.cloudCacheName)?.destroy();\n this._cloudCache = undefined;\n this.containers.clear();\n }\n\n private static get cloudCache(): CloudSqlite.CloudCache {\n if (!this._cloudCache) {\n let cacheDir: string | undefined = process.env.CHECKPOINT_CACHE_DIR ?? this.getFolder();\n // See if there is a daemon running, otherwise use profile directory for cloudCache\n if (!(IModelJsFs.existsSync(path.join(cacheDir, \"portnumber.bcv\"))))\n cacheDir = undefined; // no daemon running, use profile directory\n\n this._cloudCache = CloudSqlite.CloudCaches.getCache({ cacheName: this.cloudCacheName, cacheDir, cacheSize: \"50G\" });\n }\n return this._cloudCache;\n }\n\n /** Member names differ slightly between the V2Checkpoint api and the CloudSqlite api. Add aliases `accessName` for `accountName` and `accessToken` for `sasToken` */\n private static toCloudContainerProps(from: V2CheckpointAccessProps): CloudSqlite.ContainerAccessProps {\n return { ...from, baseUri: `https://${from.accountName}.blob.core.windows.net`, accessToken: from.sasToken, storageType: \"azure\" };\n }\n\n private static getContainer(v2Props: V2CheckpointAccessProps, checkpoint: CheckpointProps) {\n let container = this.containers.get(v2Props.containerId);\n if (undefined === container) {\n let tokenFn: ((args: CloudSqlite.RequestTokenArgs) => Promise<AccessToken>) | undefined;\n let tokenRefreshSeconds: number | undefined = -1;\n // from Rpc, the accessToken in the checkpoint request is from the current user. It is used to request the sasToken for the container and\n // the sasToken is checked for refresh (before it expires) on every Rpc request using that user's accessToken. For Ipc, the\n // accessToken in the checkpoint request is undefined, and the sasToken is requested by IModelHost.getAccessToken(). It is refreshed on a timer.\n if (undefined === checkpoint.accessToken) {\n tokenFn = async () => (await IModelHost[_hubAccess].queryV2Checkpoint(checkpoint))?.sasToken ?? \"\";\n tokenRefreshSeconds = undefined;\n }\n container = CloudSqlite.createCloudContainer({ ...this.toCloudContainerProps(v2Props), tokenRefreshSeconds, logId: process.env.POD_NAME, tokenFn });\n this.containers.set(v2Props.containerId, container);\n }\n return container;\n }\n\n public static async attach(checkpoint: CheckpointProps): Promise<{ dbName: string, container: CloudSqlite.CloudContainer | undefined }> {\n if (this[_mockCheckpoint]) // used by HubMock\n return { dbName: this[_mockCheckpoint].mockAttach(checkpoint), container: undefined };\n\n let v2props: V2CheckpointAccessProps | undefined;\n try {\n v2props = await IModelHost[_hubAccess].queryV2Checkpoint(checkpoint);\n if (!v2props)\n throw new Error(\"no checkpoint\");\n } catch (err: any) {\n throw new IModelError(IModelStatus.NotFound, `V2 checkpoint not found: err: ${err.message}`);\n }\n\n try {\n const container = this.getContainer(v2props, checkpoint);\n const dbName = v2props.dbName;\n // Use the new token from the recently queried v2 checkpoint just incase the one we currently have is expired.\n container.accessToken = v2props.sasToken;\n if (!container.isConnected)\n container.connect(this.cloudCache);\n container.checkForChanges();\n const dbStats = container.queryDatabase(dbName);\n if (IModelHost.appWorkspace.settings.getBoolean(\"Checkpoints/prefetch\", false)) {\n const getPrefetchConfig = (name: string, defaultVal: number) => IModelHost.appWorkspace.settings.getNumber(`Checkpoints/prefetch/${name}`, defaultVal);\n const minRequests = getPrefetchConfig(\"minRequests\", 3);\n const maxRequests = getPrefetchConfig(\"maxRequests\", 6);\n const timeout = getPrefetchConfig(\"timeout\", 100);\n const maxBlocks = getPrefetchConfig(\"maxBlocks\", 500); // default size of 2GB. Assumes a checkpoint block size of 4MB.\n if (dbStats?.totalBlocks !== undefined && dbStats.totalBlocks <= maxBlocks && dbStats.nPrefetch === 0) {\n const logPrefetch = async (prefetch: CloudSqlite.CloudPrefetch) => {\n const stopwatch = new StopWatch(`[${container.containerId}/${dbName}]`, true);\n Logger.logInfo(loggerCategory, `Starting prefetch of ${stopwatch.description}`, { minRequests, maxRequests, timeout });\n const done = await prefetch.promise;\n Logger.logInfo(loggerCategory, `Prefetch of ${stopwatch.description} complete=${done} (${stopwatch.elapsedSeconds} seconds)`, { minRequests, maxRequests, timeout });\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n logPrefetch(CloudSqlite.startCloudPrefetch(container, dbName, { minRequests, nRequests: maxRequests, timeout }));\n } else {\n Logger.logInfo(loggerCategory, `Skipping prefetch due to size limits or ongoing prefetch.`, { maxBlocks, numPrefetches: dbStats?.nPrefetch, totalBlocksInDb: dbStats?.totalBlocks, v2props });\n }\n }\n return { dbName, container };\n } catch (e: any) {\n const error = `Cloud cache connect failed: ${e.message}`;\n if (checkpoint.expectV2)\n Logger.logError(loggerCategory, error);\n\n throw new IModelError(e.errorNumber, error);\n }\n }\n\n /** @internal */\n private static async performDownload(job: DownloadJob): Promise<ChangesetId> {\n const request = job.request;\n if (this[_mockCheckpoint])\n this[_mockCheckpoint].mockDownload(request);\n else {\n const v2props: V2CheckpointAccessProps | undefined = await IModelHost[_hubAccess].queryV2Checkpoint({ ...request.checkpoint, allowPreceding: true });\n if (!v2props)\n throw new IModelError(IModelStatus.NotFound, \"V2 checkpoint not found\");\n\n CheckpointManager.onDownloadV2.raiseEvent(job);\n const container = CloudSqlite.createCloudContainer(this.toCloudContainerProps(v2props));\n await CloudSqlite.transferDb(\"download\", container, { dbName: v2props.dbName, localFileName: request.localFile, onProgress: request.onProgress });\n }\n return request.checkpoint.changeset.id;\n }\n\n /** Fully download a V2 checkpoint to a local file that can be used to create a briefcase or to work offline.\n * @returns a Promise that is resolved when the download completes with the changesetId of the downloaded checkpoint (which will\n * be the same as the requested changesetId or the most recent checkpoint before it.)\n */\n public static async downloadCheckpoint(request: DownloadRequest): Promise<ChangesetId> {\n return Downloads.download(request, async (job: DownloadJob) => this.performDownload(job));\n }\n}\n\n/** @internal */\nexport class CheckpointManager {\n public static readonly onDownloadV2 = new BeEvent<(job: DownloadJob) => void>();\n public static getKey(checkpoint: CheckpointProps) { return `${checkpoint.iModelId}:${checkpoint.changeset.id}`; }\n\n private static async doDownload(request: DownloadRequest): Promise<ChangesetId> {\n // first see if there's a V2 checkpoint available.\n const stopwatch = new StopWatch(`[${request.checkpoint.changeset.id}]`, true);\n Logger.logInfo(loggerCategory, `Starting download of V2 checkpoint with id ${stopwatch.description}`);\n const changesetId = await V2CheckpointManager.downloadCheckpoint(request);\n Logger.logInfo(loggerCategory, `Downloaded V2 checkpoint with id ${stopwatch.description} (${stopwatch.elapsedSeconds} seconds)`);\n if (changesetId !== request.checkpoint.changeset.id)\n Logger.logInfo(loggerCategory, `Downloaded previous v2 checkpoint because requested checkpoint not found.`, { requestedChangesetId: request.checkpoint.changeset.id, iModelId: request.checkpoint.iModelId, changesetId, iTwinId: request.checkpoint.iTwinId });\n else\n Logger.logInfo(loggerCategory, `Downloaded v2 checkpoint.`, { iModelId: request.checkpoint.iModelId, changesetId: request.checkpoint.changeset.id, iTwinId: request.checkpoint.iTwinId });\n return changesetId;\n }\n\n public static async updateToRequestedVersion(request: DownloadRequest) {\n const checkpoint = request.checkpoint;\n const targetFile = request.localFile;\n const traceInfo = { iTwinId: checkpoint.iTwinId, iModelId: checkpoint.iModelId, changeset: checkpoint.changeset };\n try {\n // Open checkpoint for write\n const prevLogLevel = Logger.getLevel(NativeLoggerCategory.SQLite) ?? LogLevel.Error; // Get log level before we set it to None.\n Logger.setLevel(NativeLoggerCategory.SQLite, LogLevel.None); // Ignores noisy error messages when applying changesets.\n const db = SnapshotDb.openForApplyChangesets(targetFile);\n const nativeDb = db[_nativeDb];\n try {\n\n if (nativeDb.hasPendingTxns()) {\n Logger.logWarning(loggerCategory, \"Checkpoint with Txns found - deleting them\", () => traceInfo);\n nativeDb.deleteAllTxns();\n }\n\n if (nativeDb.getBriefcaseId() !== BriefcaseIdValue.Unassigned)\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned);\n\n CheckpointManager.validateCheckpointGuids(checkpoint, db);\n // Apply change sets if necessary\n const currentChangeset: Mutable<ChangesetIndexAndId> = nativeDb.getCurrentChangeset();\n if (currentChangeset.id !== checkpoint.changeset.id) {\n const accessToken = checkpoint.accessToken;\n const toIndex = checkpoint.changeset.index ??\n (await IModelHost[_hubAccess].getChangesetFromVersion({ accessToken, iModelId: checkpoint.iModelId, version: IModelVersion.asOfChangeSet(checkpoint.changeset.id) })).index;\n await BriefcaseManager.pullAndApplyChangesets(db, { accessToken, toIndex });\n } else {\n // make sure the parent changeset index is saved in the file - old versions didn't have it.\n currentChangeset.index = checkpoint.changeset.index!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n nativeDb.saveLocalValue(\"parentChangeSet\", JSON.stringify(currentChangeset));\n }\n } finally {\n Logger.setLevel(NativeLoggerCategory.SQLite, prevLogLevel); // Set logging to what it was before we started applying changesets.\n db[_nativeDb].saveChanges();\n db.close();\n }\n } catch (error: any) {\n\n Logger.logError(loggerCategory, \"Error downloading checkpoint - deleting it\", () => traceInfo);\n IModelJsFs.removeSync(targetFile);\n\n if (error.errorNumber === ChangeSetStatus.CorruptedChangeStream || error.errorNumber === ChangeSetStatus.InvalidId || error.errorNumber === ChangeSetStatus.InvalidVersion) {\n Logger.logError(loggerCategory, \"Detected potential corruption of change sets. Deleting them to enable retries\", () => traceInfo);\n BriefcaseManager.deleteChangeSetsFromLocalDisk(checkpoint.iModelId);\n }\n throw error;\n }\n }\n\n /** Download a checkpoint file from iModelHub into a local file specified in the request parameters. */\n public static async downloadCheckpoint(request: DownloadRequest): Promise<void> {\n if (this.verifyCheckpoint(request.checkpoint, request.localFile))\n return;\n\n if (request.aliasFiles) {\n for (const alias of request.aliasFiles) {\n if (this.verifyCheckpoint(request.checkpoint, alias)) {\n request.localFile = alias;\n return;\n }\n }\n }\n\n await this.doDownload(request);\n return this.updateToRequestedVersion(request);\n }\n\n /** checks a file's dbGuid & iTwinId for consistency, and updates the dbGuid when possible */\n public static validateCheckpointGuids(checkpoint: CheckpointProps, snapshotDb: SnapshotDb) {\n const traceInfo = { iTwinId: checkpoint.iTwinId, iModelId: checkpoint.iModelId };\n\n const nativeDb = snapshotDb[_nativeDb];\n const dbChangeset = nativeDb.getCurrentChangeset();\n const iModelId = Guid.normalize(nativeDb.getIModelId());\n if (iModelId !== Guid.normalize(checkpoint.iModelId)) {\n if (nativeDb.isReadonly())\n throw new IModelError(IModelStatus.ValidationFailed, \"iModelId is not properly set up in the checkpoint\");\n\n Logger.logWarning(loggerCategory, \"iModelId is not properly set up in the checkpoint. Updated checkpoint to the correct iModelId.\", () => ({ ...traceInfo, dbGuid: iModelId }));\n const iModelIdNormalized = Guid.normalize(checkpoint.iModelId);\n nativeDb.setIModelId(iModelIdNormalized);\n (snapshotDb as any)._iModelId = iModelIdNormalized;\n // Required to reset the ChangeSetId because setDbGuid clears the value.\n nativeDb.saveLocalValue(\"ParentChangeSetId\", dbChangeset.id);\n if (undefined !== dbChangeset.index)\n nativeDb.saveLocalValue(\"parentChangeSet\", JSON.stringify(dbChangeset));\n }\n\n const iTwinId = Guid.normalize(nativeDb.getITwinId());\n if (iTwinId !== Guid.normalize(checkpoint.iTwinId))\n throw new IModelError(IModelStatus.ValidationFailed, \"iTwinId was not properly set up in the checkpoint\");\n }\n\n /** @returns true if the file is the checkpoint requested */\n public static verifyCheckpoint(checkpoint: CheckpointProps, fileName: LocalFileName): boolean {\n if (!IModelJsFs.existsSync(fileName))\n return false;\n\n const nativeDb = new IModelNative.platform.DgnDb();\n try {\n nativeDb.openIModel(fileName, OpenMode.Readonly);\n } catch {\n return false;\n }\n\n const isValid = checkpoint.iModelId === nativeDb.getIModelId() && checkpoint.changeset.id === nativeDb.getCurrentChangeset().id;\n nativeDb.closeFile();\n if (!isValid)\n IModelJsFs.removeSync(fileName);\n\n return isValid;\n }\n\n public static async toCheckpointProps(args: OpenCheckpointArgs): Promise<CheckpointProps> {\n const changeset = args.changeset ?? await IModelHost[_hubAccess].getLatestChangeset({ ...args, accessToken: await IModelHost.getAccessToken() });\n\n return {\n iModelId: args.iModelId,\n iTwinId: args.iTwinId,\n changeset: {\n index: changeset.index,\n id: changeset.id ?? (await IModelHost[_hubAccess].queryChangeset({ ...args, changeset, accessToken: await IModelHost.getAccessToken() })).id,\n },\n };\n }\n}\n"]}
1
+ {"version":3,"file":"CheckpointManager.js","sourceRoot":"","sources":["../../src/CheckpointManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\n// cspell:ignore BLOCKCACHE\n\nimport * as path from \"path\";\nimport { NativeLoggerCategory } from \"@bentley/imodeljs-native\";\nimport { AccessToken, BeEvent, ChangeSetStatus, Guid, GuidString, IModelStatus, Logger, LogLevel, Mutable, OpenMode, StopWatch } from \"@itwin/core-bentley\";\nimport {\n BriefcaseIdValue, ChangesetId, ChangesetIdWithIndex, ChangesetIndexAndId, IModelError, IModelVersion, LocalDirName, LocalFileName, OpenCheckpointArgs,\n} from \"@itwin/core-common\";\nimport { V2CheckpointAccessProps } from \"./BackendHubAccess\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\nimport { BriefcaseManager } from \"./BriefcaseManager\";\nimport { CloudSqlite } from \"./CloudSqlite\";\nimport { IModelHost } from \"./IModelHost\";\nimport { IModelJsFs } from \"./IModelJsFs\";\nimport { SnapshotDb, TokenArg } from \"./IModelDb\";\nimport { IModelNative } from \"./internal/NativePlatform\";\nimport { _hubAccess, _mockCheckpoint, _nativeDb } from \"./internal/Symbols\";\n\nconst loggerCategory = BackendLoggerCategory.IModelDb;\n\n/** @internal */\nexport interface MockCheckpoint {\n mockAttach(checkpoint: CheckpointProps): string;\n mockDownload(_request: DownloadRequest): void;\n}\n\n/**\n * Properties of a checkpoint\n * @public\n */\nexport interface CheckpointProps extends TokenArg {\n readonly expectV2?: boolean;\n\n /** iTwin that the iModel belongs to */\n readonly iTwinId: GuidString;\n\n /** Id of the iModel */\n readonly iModelId: GuidString;\n\n /** changeset for the checkpoint */\n readonly changeset: ChangesetIdWithIndex;\n\n /** If true, then the latest successful v2 checkpoint at or before the provided changeset will be returned when calling queryV2Checkpoint. */\n readonly allowPreceding?: boolean;\n\n /** The number of seconds before the current token expires to attempt to reacquire a new token. Default is 1 hour. */\n readonly reattachSafetySeconds?: number;\n}\n\n/** Return value from [[ProgressFunction]].\n * @public\n */\nexport enum ProgressStatus {\n /** Continue download. */\n Continue = 0,\n /** Abort download. */\n Abort = 1,\n}\n\n/** Called to show progress during a download. If this function returns non-zero, the download is aborted.\n * @public\n */\nexport type ProgressFunction = (loaded: number, total: number) => ProgressStatus;\n\n/** The parameters that specify a request to download a checkpoint file from iModelHub.\n * @internal\n */\nexport interface DownloadRequest {\n /** name of local file to hold the downloaded data. */\n localFile: LocalFileName;\n\n /** A list of full fileName paths to test before downloading. If a valid file exists by one of these names,\n * no download is performed and `localFile` is updated to reflect the fact that the file exists with that name.\n * This can be used, for example, to look for checkpoints from previous versions if the naming strategy changes.\n */\n readonly aliasFiles?: ReadonlyArray<string>;\n\n /** Properties of the checkpoint to be downloaded */\n readonly checkpoint: CheckpointProps;\n\n /** If present, this function will be called to indicate progress as the briefcase is downloaded. If this\n * function returns a non-zero value, the download is aborted.\n */\n readonly onProgress?: ProgressFunction;\n}\n\n/** @internal */\nexport interface DownloadJob {\n request: DownloadRequest;\n promise?: Promise<any>;\n}\n\n/** @internal */\nexport class Downloads {\n private static _active = new Map<string, DownloadJob>();\n\n private static async process<T>(job: DownloadJob, fn: (job: DownloadJob) => Promise<T>) {\n const jobName = job.request.localFile; // save this, it can change inside call to `fn`!\n this._active.set(jobName, job);\n try {\n return await fn(job);\n } finally {\n this._active.delete(jobName);\n }\n }\n\n public static isInProgress(pathName: LocalFileName): DownloadJob | undefined {\n return this._active.get(pathName);\n }\n\n public static async download<T>(request: DownloadRequest, downloadFn: (job: DownloadJob) => Promise<T>) {\n const pathName = request.localFile;\n let job = this.isInProgress(pathName);\n if (undefined !== job)\n return job.promise;\n\n IModelJsFs.recursiveMkDirSync(path.dirname(pathName));\n job = { request };\n return job.promise = this.process(job, downloadFn);\n }\n}\n\n/**\n * Utility class for opening V2 checkpoints from cloud containers, and also for downloading them.\n * @internal\n*/\nexport class V2CheckpointManager {\n public static readonly cloudCacheName = \"Checkpoints\";\n private static _cloudCache?: CloudSqlite.CloudCache;\n private static containers = new Map<string, CloudSqlite.CloudContainer>();\n\n /** used by HubMock\n * @internal\n */\n public static [_mockCheckpoint]?: MockCheckpoint;\n\n\n public static getFolder(): LocalDirName {\n const cloudCachePath = path.join(BriefcaseManager.cacheDir, V2CheckpointManager.cloudCacheName);\n if (!(IModelJsFs.existsSync(cloudCachePath))) {\n IModelJsFs.recursiveMkDirSync(cloudCachePath);\n }\n return cloudCachePath;\n }\n\n /** Disconnects all checkpoint containers and resets the state of the V2CheckpointManager. All dbs should be closed before calling this function.\n * Called automatically on IModelHost shutdown; also used directly by tests.\n */\n public static cleanup(): void {\n for (const [_, value] of this.containers.entries()) {\n if (value.isConnected)\n value.disconnect({ detach: true });\n }\n\n CloudSqlite.CloudCaches.dropCache(this.cloudCacheName)?.destroy();\n this._cloudCache = undefined;\n this.containers.clear();\n }\n\n private static get cloudCache(): CloudSqlite.CloudCache {\n if (!this._cloudCache) {\n let cacheDir: string | undefined = process.env.CHECKPOINT_CACHE_DIR ?? this.getFolder();\n // See if there is a daemon running, otherwise use profile directory for cloudCache\n if (!(IModelJsFs.existsSync(path.join(cacheDir, \"portnumber.bcv\"))))\n cacheDir = undefined; // no daemon running, use profile directory\n\n this._cloudCache = CloudSqlite.CloudCaches.getCache({ cacheName: this.cloudCacheName, cacheDir, cacheSize: \"50G\" });\n }\n return this._cloudCache;\n }\n\n /** Member names differ slightly between the V2Checkpoint api and the CloudSqlite api. Add aliases `accessName` for `accountName` and `accessToken` for `sasToken` */\n private static toCloudContainerProps(from: V2CheckpointAccessProps): CloudSqlite.ContainerAccessProps {\n return { ...from, baseUri: `https://${from.accountName}.blob.core.windows.net`, accessToken: from.sasToken, storageType: \"azure\" };\n }\n\n private static getContainer(v2Props: V2CheckpointAccessProps, checkpoint: CheckpointProps) {\n let container = this.containers.get(v2Props.containerId);\n if (undefined === container) {\n let tokenFn: ((args: CloudSqlite.RequestTokenArgs) => Promise<AccessToken>) | undefined;\n let tokenRefreshSeconds: number | undefined = -1;\n // from Rpc, the accessToken in the checkpoint request is from the current user. It is used to request the sasToken for the container and\n // the sasToken is checked for refresh (before it expires) on every Rpc request using that user's accessToken. For Ipc, the\n // accessToken in the checkpoint request is undefined, and the sasToken is requested by IModelHost.getAccessToken(). It is refreshed on a timer.\n if (undefined === checkpoint.accessToken) {\n tokenFn = async () => (await IModelHost[_hubAccess].queryV2Checkpoint(checkpoint))?.sasToken ?? \"\";\n tokenRefreshSeconds = undefined;\n }\n container = CloudSqlite.createCloudContainer({ ...this.toCloudContainerProps(v2Props), tokenRefreshSeconds, logId: process.env.POD_NAME, tokenFn });\n this.containers.set(v2Props.containerId, container);\n }\n return container;\n }\n\n public static async attach(checkpoint: CheckpointProps): Promise<{ dbName: string, container: CloudSqlite.CloudContainer | undefined }> {\n if (this[_mockCheckpoint]) // used by HubMock\n return { dbName: this[_mockCheckpoint].mockAttach(checkpoint), container: undefined };\n\n let v2props: V2CheckpointAccessProps | undefined;\n try {\n v2props = await IModelHost[_hubAccess].queryV2Checkpoint(checkpoint);\n if (!v2props)\n throw new Error(\"no checkpoint\");\n } catch (err: any) {\n throw new IModelError(IModelStatus.NotFound, `V2 checkpoint not found: err: ${err.message}`);\n }\n\n try {\n const container = this.getContainer(v2props, checkpoint);\n const dbName = v2props.dbName;\n // Use the new token from the recently queried v2 checkpoint just incase the one we currently have is expired.\n container.accessToken = v2props.sasToken;\n if (!container.isConnected)\n container.connect(this.cloudCache);\n container.checkForChanges();\n const dbStats = container.queryDatabase(dbName);\n if (IModelHost.appWorkspace.settings.getBoolean(\"Checkpoints/prefetch\", false)) {\n const getPrefetchConfig = (name: string, defaultVal: number) => IModelHost.appWorkspace.settings.getNumber(`Checkpoints/prefetch/${name}`, defaultVal);\n const minRequests = getPrefetchConfig(\"minRequests\", 3);\n const maxRequests = getPrefetchConfig(\"maxRequests\", 6);\n const timeout = getPrefetchConfig(\"timeout\", 100);\n const maxBlocks = getPrefetchConfig(\"maxBlocks\", 500); // default size of 2GB. Assumes a checkpoint block size of 4MB.\n if (dbStats?.totalBlocks !== undefined && dbStats.totalBlocks <= maxBlocks && dbStats.nPrefetch === 0) {\n const logPrefetch = async (prefetch: CloudSqlite.CloudPrefetch) => {\n const stopwatch = new StopWatch(`[${container.containerId}/${dbName}]`, true);\n Logger.logInfo(loggerCategory, `Starting prefetch of ${stopwatch.description}`, { minRequests, maxRequests, timeout });\n const done = await prefetch.promise;\n Logger.logInfo(loggerCategory, `Prefetch of ${stopwatch.description} complete=${done} (${stopwatch.elapsedSeconds} seconds)`, { minRequests, maxRequests, timeout });\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n logPrefetch(CloudSqlite.startCloudPrefetch(container, dbName, { minRequests, nRequests: maxRequests, timeout }));\n } else {\n Logger.logInfo(loggerCategory, `Skipping prefetch due to size limits or ongoing prefetch.`, { maxBlocks, numPrefetches: dbStats?.nPrefetch, totalBlocksInDb: dbStats?.totalBlocks, v2props });\n }\n }\n return { dbName, container };\n } catch (e: any) {\n const error = `Cloud cache connect failed: ${e.message}`;\n if (checkpoint.expectV2)\n Logger.logError(loggerCategory, error);\n\n throw new IModelError(e.errorNumber, error);\n }\n }\n\n /** @internal */\n private static async performDownload(job: DownloadJob): Promise<ChangesetId> {\n const request = job.request;\n if (this[_mockCheckpoint])\n this[_mockCheckpoint].mockDownload(request);\n else {\n const v2props: V2CheckpointAccessProps | undefined = await IModelHost[_hubAccess].queryV2Checkpoint({ ...request.checkpoint, allowPreceding: true });\n if (!v2props)\n throw new IModelError(IModelStatus.NotFound, \"V2 checkpoint not found\");\n\n CheckpointManager.onDownloadV2.raiseEvent(job);\n const container = CloudSqlite.createCloudContainer(this.toCloudContainerProps(v2props));\n await CloudSqlite.transferDb(\"download\", container, { dbName: v2props.dbName, localFileName: request.localFile, onProgress: request.onProgress });\n }\n return request.checkpoint.changeset.id;\n }\n\n /** Fully download a V2 checkpoint to a local file that can be used to create a briefcase or to work offline.\n * @returns a Promise that is resolved when the download completes with the changesetId of the downloaded checkpoint (which will\n * be the same as the requested changesetId or the most recent checkpoint before it.)\n */\n public static async downloadCheckpoint(request: DownloadRequest): Promise<ChangesetId> {\n return Downloads.download(request, async (job: DownloadJob) => this.performDownload(job));\n }\n}\n\n/** @internal */\nexport class CheckpointManager {\n public static readonly onDownloadV2 = new BeEvent<(job: DownloadJob) => void>();\n public static getKey(checkpoint: CheckpointProps) { return `${checkpoint.iModelId}:${checkpoint.changeset.id}`; }\n\n private static async doDownload(request: DownloadRequest): Promise<ChangesetId> {\n // first see if there's a V2 checkpoint available.\n const stopwatch = new StopWatch(`[${request.checkpoint.changeset.id}]`, true);\n Logger.logInfo(loggerCategory, `Starting download of V2 checkpoint with id ${stopwatch.description}`);\n const changesetId = await V2CheckpointManager.downloadCheckpoint(request);\n Logger.logInfo(loggerCategory, `Downloaded V2 checkpoint with id ${stopwatch.description} (${stopwatch.elapsedSeconds} seconds)`);\n if (changesetId !== request.checkpoint.changeset.id)\n Logger.logInfo(loggerCategory, `Downloaded previous v2 checkpoint because requested checkpoint not found.`, { requestedChangesetId: request.checkpoint.changeset.id, iModelId: request.checkpoint.iModelId, changesetId, iTwinId: request.checkpoint.iTwinId });\n else\n Logger.logInfo(loggerCategory, `Downloaded v2 checkpoint.`, { iModelId: request.checkpoint.iModelId, changesetId: request.checkpoint.changeset.id, iTwinId: request.checkpoint.iTwinId });\n return changesetId;\n }\n\n public static async updateToRequestedVersion(request: DownloadRequest) {\n const checkpoint = request.checkpoint;\n const targetFile = request.localFile;\n const traceInfo = { iTwinId: checkpoint.iTwinId, iModelId: checkpoint.iModelId, changeset: checkpoint.changeset };\n try {\n // Open checkpoint for write\n const prevLogLevel = Logger.getLevel(NativeLoggerCategory.SQLite) ?? LogLevel.Error; // Get log level before we set it to None.\n Logger.setLevel(NativeLoggerCategory.SQLite, LogLevel.None); // Ignores noisy error messages when applying changesets.\n const db = SnapshotDb.openForApplyChangesets(targetFile);\n const nativeDb = db[_nativeDb];\n try {\n\n if (nativeDb.hasPendingTxns()) {\n Logger.logWarning(loggerCategory, \"Checkpoint with Txns found - deleting them\", () => traceInfo);\n nativeDb.deleteAllTxns();\n }\n\n if (nativeDb.getBriefcaseId() !== BriefcaseIdValue.Unassigned)\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned);\n\n CheckpointManager.validateCheckpointGuids(checkpoint, db);\n // Apply change sets if necessary\n const currentChangeset: Mutable<ChangesetIndexAndId> = nativeDb.getCurrentChangeset();\n if (currentChangeset.id !== checkpoint.changeset.id) {\n const accessToken = checkpoint.accessToken;\n const toIndex = checkpoint.changeset.index ??\n (await IModelHost[_hubAccess].getChangesetFromVersion({ accessToken, iModelId: checkpoint.iModelId, version: IModelVersion.asOfChangeSet(checkpoint.changeset.id) })).index;\n await BriefcaseManager.pullAndApplyChangesets(db, { accessToken, toIndex });\n } else {\n // make sure the parent changeset index is saved in the file - old versions didn't have it.\n currentChangeset.index = checkpoint.changeset.index!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n nativeDb.saveLocalValue(\"parentChangeSet\", JSON.stringify(currentChangeset));\n }\n } finally {\n Logger.setLevel(NativeLoggerCategory.SQLite, prevLogLevel); // Set logging to what it was before we started applying changesets.\n db[_nativeDb].saveChanges();\n db.close();\n }\n } catch (error: any) {\n\n Logger.logError(loggerCategory, \"Error downloading checkpoint - deleting it\", () => traceInfo);\n IModelJsFs.removeSync(targetFile);\n\n if (error.errorNumber === ChangeSetStatus.CorruptedChangeStream || error.errorNumber === ChangeSetStatus.InvalidId || error.errorNumber === ChangeSetStatus.InvalidVersion) {\n Logger.logError(loggerCategory, \"Detected potential corruption of change sets. Deleting them to enable retries\", () => traceInfo);\n BriefcaseManager.deleteChangeSetsFromLocalDisk(checkpoint.iModelId);\n }\n throw error;\n }\n }\n\n /** Download a checkpoint file from iModelHub into a local file specified in the request parameters. */\n public static async downloadCheckpoint(request: DownloadRequest): Promise<void> {\n if (this.verifyCheckpoint(request.checkpoint, request.localFile))\n return;\n\n if (request.aliasFiles) {\n for (const alias of request.aliasFiles) {\n if (this.verifyCheckpoint(request.checkpoint, alias)) {\n request.localFile = alias;\n return;\n }\n }\n }\n\n await this.doDownload(request);\n return this.updateToRequestedVersion(request);\n }\n\n /** checks a file's dbGuid & iTwinId for consistency, and updates the dbGuid when possible */\n public static validateCheckpointGuids(checkpoint: CheckpointProps, snapshotDb: SnapshotDb) {\n const traceInfo = { iTwinId: checkpoint.iTwinId, iModelId: checkpoint.iModelId };\n\n const nativeDb = snapshotDb[_nativeDb];\n const dbChangeset = nativeDb.getCurrentChangeset();\n const iModelId = Guid.normalize(nativeDb.getIModelId());\n if (iModelId !== Guid.normalize(checkpoint.iModelId)) {\n if (nativeDb.isReadonly())\n throw new IModelError(IModelStatus.ValidationFailed, \"iModelId is not properly set up in the checkpoint\");\n\n Logger.logWarning(loggerCategory, \"iModelId is not properly set up in the checkpoint. Updated checkpoint to the correct iModelId.\", () => ({ ...traceInfo, dbGuid: iModelId }));\n const iModelIdNormalized = Guid.normalize(checkpoint.iModelId);\n nativeDb.setIModelId(iModelIdNormalized);\n (snapshotDb as any)._iModelId = iModelIdNormalized;\n // Required to reset the ChangeSetId because setDbGuid clears the value.\n nativeDb.saveLocalValue(\"ParentChangeSetId\", dbChangeset.id);\n if (undefined !== dbChangeset.index)\n nativeDb.saveLocalValue(\"parentChangeSet\", JSON.stringify(dbChangeset));\n }\n\n const iTwinId = Guid.normalize(nativeDb.getITwinId());\n if (iTwinId !== Guid.normalize(checkpoint.iTwinId))\n throw new IModelError(IModelStatus.ValidationFailed, \"iTwinId was not properly set up in the checkpoint\");\n }\n\n /** @returns true if the file is the checkpoint requested */\n public static verifyCheckpoint(checkpoint: CheckpointProps, fileName: LocalFileName): boolean {\n if (!IModelJsFs.existsSync(fileName))\n return false;\n\n const nativeDb = new IModelNative.platform.DgnDb();\n try {\n nativeDb.openIModel(fileName, OpenMode.Readonly);\n } catch {\n return false;\n }\n\n const isValid = checkpoint.iModelId === nativeDb.getIModelId() && checkpoint.changeset.id === nativeDb.getCurrentChangeset().id;\n nativeDb.closeFile();\n if (!isValid)\n IModelJsFs.removeSync(fileName);\n\n return isValid;\n }\n\n public static async toCheckpointProps(args: OpenCheckpointArgs): Promise<CheckpointProps> {\n const changeset = args.changeset ?? await IModelHost[_hubAccess].getLatestChangeset({ ...args, accessToken: await IModelHost.getAccessToken() });\n\n return {\n iModelId: args.iModelId,\n iTwinId: args.iTwinId,\n changeset: {\n index: changeset.index,\n id: changeset.id ?? (await IModelHost[_hubAccess].queryChangeset({ ...args, changeset, accessToken: await IModelHost.getAccessToken() })).id,\n },\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CloudSqlite.d.ts","sourceRoot":"","sources":["../../src/CloudSqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CloudSqlite.d.ts","sourceRoot":"","sources":["../../src/CloudSqlite.ts"],"names":[],"mappings":"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"}