installed-update-identity.mjs 1.7 KB

123456789101112131415161718192021222324252627
  1. /** Configure only a qualification package's identity before the production main entry loads. */
  2. import { mkdirSync } from 'node:fs'
  3. import { join } from 'node:path'
  4. /**
  5. * Keep test application data and journals outside the replaceable installation tree.
  6. * @param {{ getPath(name: string): string, setPath(name: string, path: string): void }} app Electron path API before readiness.
  7. * @param {{ id: string, versions: readonly string[] }} run Embedded qualification identity and version pair.
  8. * @param {{ version?: string, dshDesktopAppId?: string }} metadata Installed package metadata.
  9. * @param {NodeJS.ProcessEnv} environment Main-process environment modified before production imports.
  10. * @returns {{ root: string, userData: string, harnessHome: string, journals: string }} Shared paths for both versions.
  11. */
  12. export function configureInstalledUpdateIdentity(app, run, metadata, environment) {
  13. if (!/^[a-f0-9]{24}$/u.test(run.id) || run.versions.length !== 2
  14. || metadata.dshDesktopAppId !== `com.deepseek.dsh.qualification.q${run.id}`
  15. || !run.versions.includes(metadata.version)) {
  16. throw new Error('installed update: qualification package identity does not match its bootstrap')
  17. }
  18. const root = join(app.getPath('appData'), 'dsh-update-qualification', run.id)
  19. const paths = { root, userData: join(root, 'user-data'), harnessHome: join(root, 'dsh-home'), journals: join(root, 'journals') }
  20. for (const directory of [paths.userData, paths.harnessHome, paths.journals]) mkdirSync(directory, { recursive: true })
  21. app.setPath('userData', paths.userData)
  22. app.setPath('sessionData', paths.userData)
  23. environment.DSH_HOME = paths.harnessHome
  24. environment.DSH_DESKTOP_UPDATE_JOURNAL_DIR = paths.journals
  25. return paths
  26. }