{"version":3,"file":"StorageUpdateService.mjs","names":[],"sources":["../../../src/storage/migration/StorageUpdateService.ts"],"sourcesContent":["import type { AgentContext } from '../../agent'\nimport { InjectionSymbols } from '../../constants'\nimport type { Logger } from '../../logger'\nimport { inject, injectable } from '../../plugins'\nimport type { VersionString } from '../../utils/version'\nimport { isStorageUpToDate } from './isUpToDate'\nimport { StorageVersionRecord } from './repository/StorageVersionRecord'\nimport { StorageVersionRepository } from './repository/StorageVersionRepository'\nimport type { UpdateToVersion } from './updates'\nimport { CURRENT_FRAMEWORK_STORAGE_VERSION, INITIAL_STORAGE_VERSION } from './updates'\n\n@injectable()\nexport class StorageUpdateService {\n  private logger: Logger\n  private storageVersionRepository: StorageVersionRepository\n\n  public constructor(\n    @inject(InjectionSymbols.Logger) logger: Logger,\n    storageVersionRepository: StorageVersionRepository\n  ) {\n    this.logger = logger\n    this.storageVersionRepository = storageVersionRepository\n  }\n\n  public async isUpToDate(agentContext: AgentContext, updateToVersion?: UpdateToVersion) {\n    const currentStorageVersion = await this.getCurrentStorageVersion(agentContext)\n    return isStorageUpToDate(currentStorageVersion, updateToVersion)\n  }\n\n  public async hasStorageVersionRecord(agentContext: AgentContext) {\n    const storageVersionRecord = await this.storageVersionRepository.findById(\n      agentContext,\n      StorageVersionRecord.storageVersionRecordId\n    )\n\n    return storageVersionRecord !== null\n  }\n\n  public async getCurrentStorageVersion(agentContext: AgentContext): Promise<VersionString> {\n    const storageVersionRecord = await this.getStorageVersionRecord(agentContext)\n\n    return storageVersionRecord.storageVersion\n  }\n\n  public static get frameworkStorageVersion() {\n    return CURRENT_FRAMEWORK_STORAGE_VERSION\n  }\n\n  public async setCurrentStorageVersion(agentContext: AgentContext, storageVersion: VersionString) {\n    this.logger.debug(`Setting current agent storage version to ${storageVersion}`)\n    const storageVersionRecord = await this.storageVersionRepository.findById(\n      agentContext,\n      StorageVersionRecord.storageVersionRecordId\n    )\n\n    if (!storageVersionRecord) {\n      this.logger.trace('Storage upgrade record does not exist yet. Creating.')\n      await this.storageVersionRepository.save(\n        agentContext,\n        new StorageVersionRecord({\n          storageVersion,\n        })\n      )\n    } else {\n      this.logger.trace('Storage upgrade record already exists. Updating.')\n      storageVersionRecord.storageVersion = storageVersion\n      await this.storageVersionRepository.update(agentContext, storageVersionRecord)\n    }\n  }\n\n  /**\n   * Retrieve the update record, creating it if it doesn't exist already.\n   *\n   * The storageVersion will be set to the INITIAL_STORAGE_VERSION if it doesn't exist yet,\n   * as we can assume the wallet was created before the update record existed\n   */\n  public async getStorageVersionRecord(agentContext: AgentContext) {\n    let storageVersionRecord = await this.storageVersionRepository.findById(\n      agentContext,\n      StorageVersionRecord.storageVersionRecordId\n    )\n\n    if (!storageVersionRecord) {\n      storageVersionRecord = new StorageVersionRecord({\n        storageVersion: INITIAL_STORAGE_VERSION,\n      })\n      await this.storageVersionRepository.save(agentContext, storageVersionRecord)\n    }\n\n    return storageVersionRecord\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;AAYO,iCAAM,qBAAqB;CAIhC,AAAO,YACL,AAAiC,QACjC,0BACA;AACA,OAAK,SAAS;AACd,OAAK,2BAA2B;;CAGlC,MAAa,WAAW,cAA4B,iBAAmC;AAErF,SAAO,kBADuB,MAAM,KAAK,yBAAyB,aAAa,EAC/B,gBAAgB;;CAGlE,MAAa,wBAAwB,cAA4B;AAM/D,SAL6B,MAAM,KAAK,yBAAyB,SAC/D,cACA,qBAAqB,uBACtB,KAE+B;;CAGlC,MAAa,yBAAyB,cAAoD;AAGxF,UAF6B,MAAM,KAAK,wBAAwB,aAAa,EAEjD;;CAG9B,WAAkB,0BAA0B;AAC1C,SAAO;;CAGT,MAAa,yBAAyB,cAA4B,gBAA+B;AAC/F,OAAK,OAAO,MAAM,4CAA4C,iBAAiB;EAC/E,MAAM,uBAAuB,MAAM,KAAK,yBAAyB,SAC/D,cACA,qBAAqB,uBACtB;AAED,MAAI,CAAC,sBAAsB;AACzB,QAAK,OAAO,MAAM,uDAAuD;AACzE,SAAM,KAAK,yBAAyB,KAClC,cACA,IAAI,qBAAqB,EACvB,gBACD,CAAC,CACH;SACI;AACL,QAAK,OAAO,MAAM,mDAAmD;AACrE,wBAAqB,iBAAiB;AACtC,SAAM,KAAK,yBAAyB,OAAO,cAAc,qBAAqB;;;;;;;;;CAUlF,MAAa,wBAAwB,cAA4B;EAC/D,IAAI,uBAAuB,MAAM,KAAK,yBAAyB,SAC7D,cACA,qBAAqB,uBACtB;AAED,MAAI,CAAC,sBAAsB;AACzB,0BAAuB,IAAI,qBAAqB,EAC9C,gBAAgB,yBACjB,CAAC;AACF,SAAM,KAAK,yBAAyB,KAAK,cAAc,qBAAqB;;AAG9E,SAAO;;;;CA9EV,YAAY;oBAMR,OAAO,iBAAiB,OAAO"}